From 0806c18de93a5a0718db6449f795786cd92a2c63 Mon Sep 17 00:00:00 2001 From: Clifford Yapp <238416+starseeker@users.noreply.github.com> Date: Sat, 6 Feb 2021 16:53:45 +0000 Subject: [PATCH] merging RELEASE branch to STABLE branch, r77152 through r78205 svn:revision:78206 svn:branch:STABLE svn:account:starseeker --- AUTHORS | 5 + CHANGES | 14 + CMakeLists.txt | 1887 +- COPYING | 2 +- ChangeLog | 20652 +++------------- INSTALL | 32 - NEWS | 54 +- README | 2 +- TODO | 203 +- bench/CMakeLists.txt | 5 +- bench/benchmark.c | 2 +- bench/clean.c | 2 +- bench/compute.c | 2 +- bench/lgt.sh | 2 +- bench/pixcmp.c | 386 +- bench/run.c | 2 +- bench/run.sh | 69 +- bench/try.sh | 2 +- bench/viewdiff.sh | 2 +- configure | 12 - db/CMakeLists.txt | 43 +- db/cube.rt | 2 +- db/db.php | 2 +- db/radialgrid.asc | 36 + doc/BRL-CAD.bib | 13 + doc/CMakeLists.txt | 2 + doc/GITHUB | 60 + doc/README.Linux | 57 +- doc/README.Windows | 67 + doc/docbook/CMakeLists.txt | 2 + doc/docbook/articles/CMakeLists.txt | 3 + doc/docbook/articles/mged.xml | 8 + doc/docbook/books/CMakeLists.txt | 11 + doc/docbook/devguides/CMakeLists.txt | 70 + .../devguides/bool_eval_development.xml | 2469 ++ doc/docbook/devguides/images/axis_X.png | Bin 0 -> 64005 bytes .../devguides/images/ccx_overlap_event.png | Bin 0 -> 6154 bytes .../images/compare_endpoint_style.png | Bin 0 -> 661629 bytes .../images/curve_traversal_directions.png | Bin 0 -> 101502 bytes .../devguides/images/evaluation_overview.png | Bin 0 -> 81091 bytes .../images/intermediate_linked_curves.png | Bin 0 -> 16825 bytes .../images/lcurves_with_shaded_context.png | Bin 0 -> 6964 bytes doc/docbook/devguides/images/ssx_10_vs_13.png | Bin 0 -> 13813 bytes .../devguides/images/ssx_overlap_event.png | Bin 0 -> 10980 bytes .../devguides/images/ssx_tangent_event.png | Bin 0 -> 26728 bytes .../devguides/images/ssx_transverse_event.png | Bin 0 -> 9808 bytes doc/docbook/lessons/CMakeLists.txt | 3 + doc/docbook/presentations/CMakeLists.txt | 4 + doc/docbook/resources/brlcad/CMakeLists.txt | 3 + doc/docbook/specifications/CMakeLists.txt | 3 + doc/docbook/system/CMakeLists.txt | 4 + doc/docbook/system/man1/ap-pix.xml | 2 +- doc/docbook/system/man1/asc-nmg.xml | 2 +- doc/docbook/system/man1/asc-plot3.xml | 2 +- doc/docbook/system/man1/asc2dsp.xml | 2 +- doc/docbook/system/man1/asc2g.xml | 2 +- doc/docbook/system/man1/benchmark.xml | 2 +- doc/docbook/system/man1/bolt.xml | 2 +- doc/docbook/system/man1/bot_dump.xml | 2 +- doc/docbook/system/man1/brep_simple.xml | 2 +- doc/docbook/system/man1/brlcad-config.xml | 2 +- doc/docbook/system/man1/brlcad.xml | 2 +- doc/docbook/system/man1/brlman.xml | 2 +- doc/docbook/system/man1/burst.xml | 2 +- doc/docbook/system/man1/bw-fb.xml | 2 +- doc/docbook/system/man1/bw-pix.xml | 2 +- doc/docbook/system/man1/bw-png.xml | 2 +- doc/docbook/system/man1/bw-ps.xml | 2 +- doc/docbook/system/man1/bwcrop.xml | 2 +- doc/docbook/system/man1/bwdiff.xml | 2 +- doc/docbook/system/man1/bwfilter.xml | 2 +- doc/docbook/system/man1/bwhist.xml | 2 +- doc/docbook/system/man1/bwhisteq.xml | 2 +- doc/docbook/system/man1/bwmod.xml | 2 +- doc/docbook/system/man1/bwrect.xml | 2 +- doc/docbook/system/man1/bwrot.xml | 2 +- doc/docbook/system/man1/bwscale.xml | 2 +- doc/docbook/system/man1/bwshrink.xml | 2 +- doc/docbook/system/man1/bwstat.xml | 2 +- doc/docbook/system/man1/bwthresh.xml | 2 +- doc/docbook/system/man1/cad_boundp.xml | 2 +- doc/docbook/system/man1/cad_parea.xml | 2 +- doc/docbook/system/man1/canonize.xml | 2 +- doc/docbook/system/man1/coil.xml | 2 +- doc/docbook/system/man1/comgeom-g.xml | 2 +- doc/docbook/system/man1/conv-vg2g.xml | 2 +- doc/docbook/system/man1/cv.xml | 2 +- doc/docbook/system/man1/db.xml | 2 +- doc/docbook/system/man1/dbclean.xml | 2 +- doc/docbook/system/man1/dbcp.xml | 2 +- doc/docbook/system/man1/dbupgrade.xml | 2 +- doc/docbook/system/man1/decimate.xml | 2 +- doc/docbook/system/man1/dpix-pix.xml | 2 +- doc/docbook/system/man1/dxf-g.xml | 2 +- doc/docbook/system/man1/enf-g.xml | 2 +- doc/docbook/system/man1/fast4-g.xml | 2 +- doc/docbook/system/man1/fb-bw.xml | 2 +- doc/docbook/system/man1/fb-fb.xml | 2 +- doc/docbook/system/man1/fb-pix.xml | 2 +- doc/docbook/system/man1/fb-png.xml | 2 +- doc/docbook/system/man1/fbcbars.xml | 2 +- doc/docbook/system/man1/fbclear.xml | 2 +- doc/docbook/system/man1/fbcmap.xml | 2 +- doc/docbook/system/man1/fbcolor.xml | 2 +- doc/docbook/system/man1/fbed.xml | 2 +- doc/docbook/system/man1/fbfade.xml | 2 +- doc/docbook/system/man1/fbframe.xml | 2 +- doc/docbook/system/man1/fbfree.xml | 2 +- doc/docbook/system/man1/fbgamma.xml | 2 +- doc/docbook/system/man1/fbgrid.xml | 2 +- doc/docbook/system/man1/fbhelp.xml | 2 +- doc/docbook/system/man1/fblabel.xml | 2 +- doc/docbook/system/man1/fbline.xml | 2 +- doc/docbook/system/man1/fbpoint.xml | 2 +- doc/docbook/system/man1/fbserv.xml | 2 +- doc/docbook/system/man1/fbstretch.xml | 2 +- doc/docbook/system/man1/fbzoom.xml | 2 +- doc/docbook/system/man1/g-acad.xml | 2 +- doc/docbook/system/man1/g-dot.xml | 2 +- doc/docbook/system/man1/g-dxf.xml | 2 +- doc/docbook/system/man1/g-egg.xml | 2 +- doc/docbook/system/man1/g-iges.xml | 2 +- doc/docbook/system/man1/g-nff.xml | 2 +- doc/docbook/system/man1/g-obj.xml | 2 +- doc/docbook/system/man1/g-ply.xml | 2 +- doc/docbook/system/man1/g-raw.xml | 2 +- doc/docbook/system/man1/g-shell-rect.xml | 2 +- doc/docbook/system/man1/g-step.xml | 2 +- doc/docbook/system/man1/g-stl.xml | 2 +- doc/docbook/system/man1/g-var.xml | 2 +- doc/docbook/system/man1/g-voxel.xml | 2 +- doc/docbook/system/man1/g-vrml.xml | 2 +- doc/docbook/system/man1/g-x3d.xml | 2 +- doc/docbook/system/man1/g2asc.xml | 2 +- doc/docbook/system/man1/gastank.xml | 2 +- doc/docbook/system/man1/gdiff.xml | 45 +- doc/docbook/system/man1/gencolor.xml | 2 +- doc/docbook/system/man1/gif-fb.xml | 2 +- doc/docbook/system/man1/gif2fb.xml | 2 +- doc/docbook/system/man1/glint.xml | 2 +- doc/docbook/system/man1/gqa.xml | 2 +- doc/docbook/system/man1/halftone.xml | 2 +- doc/docbook/system/man1/handle.xml | 2 +- doc/docbook/system/man1/icv.xml | 2 +- doc/docbook/system/man1/iges-g.xml | 2 +- doc/docbook/system/man1/imgdims.xml | 2 +- doc/docbook/system/man1/ir-X.xml | 2 +- doc/docbook/system/man1/irdisp.xml | 2 +- doc/docbook/system/man1/loop.xml | 2 +- doc/docbook/system/man1/mac-pix.xml | 2 +- doc/docbook/system/man1/mged.xml | 2 +- doc/docbook/system/man1/morphedit.xml | 2 +- doc/docbook/system/man1/nastran-g.xml | 2 +- doc/docbook/system/man1/nirt.xml | 2 +- doc/docbook/system/man1/obj-g.xml | 2 +- doc/docbook/system/man1/patch-g.xml | 2 +- doc/docbook/system/man1/picket_fence.xml | 2 +- doc/docbook/system/man1/pix-alias.xml | 2 +- doc/docbook/system/man1/pix-bw.xml | 2 +- doc/docbook/system/man1/pix-fb.xml | 2 +- doc/docbook/system/man1/pix-png.xml | 2 +- doc/docbook/system/man1/pix-ppm.xml | 2 +- doc/docbook/system/man1/pix-ps.xml | 2 +- doc/docbook/system/man1/pix-sun.xml | 2 +- doc/docbook/system/man1/pix2asc.xml | 2 +- doc/docbook/system/man1/pixautosize.xml | 2 +- doc/docbook/system/man1/pixbackgnd.xml | 2 +- doc/docbook/system/man1/pixbgstrip.xml | 2 +- doc/docbook/system/man1/pixblend.xml | 2 +- doc/docbook/system/man1/pixborder.xml | 2 +- doc/docbook/system/man1/pixbustup.xml | 2 +- doc/docbook/system/man1/pixclump.xml | 2 +- doc/docbook/system/man1/pixcmp.xml | 110 +- doc/docbook/system/man1/pixcolors.xml | 2 +- doc/docbook/system/man1/pixcrop.xml | 2 +- doc/docbook/system/man1/pixdiff.xml | 2 +- doc/docbook/system/man1/pixfade.xml | 2 +- doc/docbook/system/man1/pixfilter.xml | 2 +- doc/docbook/system/man1/pixhalve.xml | 2 +- doc/docbook/system/man1/pixhist.xml | 2 +- doc/docbook/system/man1/pixhist3d-plot3.xml | 2 +- doc/docbook/system/man1/pixhist3d.xml | 2 +- doc/docbook/system/man1/pixinterp2x.xml | 2 +- doc/docbook/system/man1/pixmatte.xml | 2 +- doc/docbook/system/man1/pixmerge.xml | 2 +- doc/docbook/system/man1/pixmorph.xml | 2 +- doc/docbook/system/man1/pixrect.xml | 2 +- doc/docbook/system/man1/pixrot.xml | 2 +- doc/docbook/system/man1/pixsaturate.xml | 2 +- doc/docbook/system/man1/pixscale.xml | 2 +- doc/docbook/system/man1/pixshrink.xml | 2 +- doc/docbook/system/man1/pixstat.xml | 2 +- doc/docbook/system/man1/pixsubst.xml | 2 +- doc/docbook/system/man1/pixtile.xml | 2 +- doc/docbook/system/man1/pixuntile.xml | 2 +- doc/docbook/system/man1/plot3-asc.xml | 2 +- doc/docbook/system/man1/plot3-fb.xml | 2 +- doc/docbook/system/man1/plot3-plot3.xml | 2 +- doc/docbook/system/man1/plot3-ps.xml | 2 +- doc/docbook/system/man1/plot3color.xml | 2 +- doc/docbook/system/man1/plot3getframe.xml | 2 +- doc/docbook/system/man1/plot3line2.xml | 2 +- doc/docbook/system/man1/plot3rot.xml | 2 +- doc/docbook/system/man1/ply-g.xml | 2 +- doc/docbook/system/man1/png-bw.xml | 2 +- doc/docbook/system/man1/png-fb.xml | 2 +- doc/docbook/system/man1/png-pix.xml | 2 +- doc/docbook/system/man1/pp-fb.xml | 2 +- doc/docbook/system/man1/proe-g.xml | 2 +- doc/docbook/system/man1/random.xml | 2 +- doc/docbook/system/man1/remrt.xml | 2 +- doc/docbook/system/man1/reshoot.xml | 2 +- doc/docbook/system/man1/rpatch.xml | 2 +- doc/docbook/system/man1/rt.xml | 2 +- doc/docbook/system/man1/rtarea.xml | 2 +- doc/docbook/system/man1/rtcheck.xml | 2 +- doc/docbook/system/man1/rtedge.xml | 2 +- doc/docbook/system/man1/rtexample.xml | 2 +- doc/docbook/system/man1/rtg3.xml | 2 +- doc/docbook/system/man1/rthide.xml | 2 +- doc/docbook/system/man1/rtscale.xml | 2 +- doc/docbook/system/man1/rtshot.xml | 2 +- doc/docbook/system/man1/rtweight.xml | 2 +- doc/docbook/system/man1/rtwizard.xml | 2 +- doc/docbook/system/man1/rtxray.xml | 2 +- doc/docbook/system/man1/showshot.xml | 2 +- doc/docbook/system/man1/stl-g.xml | 2 +- doc/docbook/system/man1/sun-pix.xml | 2 +- doc/docbook/system/man1/tankill-g.xml | 2 +- doc/docbook/system/man1/terrain.xml | 2 +- doc/docbook/system/man1/tire.xml | 2 +- doc/docbook/system/man1/ug-g.xml | 2 +- doc/docbook/system/man1/vdeck.xml | 2 +- doc/docbook/system/man1/wavelet.xml | 2 +- doc/docbook/system/man1/wdb_example.xml | 2 +- doc/docbook/system/man1/window.xml | 2 +- doc/docbook/system/man1/window_frame.xml | 2 +- doc/docbook/system/man1/wire.xml | 2 +- doc/docbook/system/man3/libplot3.xml | 2 +- doc/docbook/system/man3/librt.xml | 2 +- doc/docbook/system/man3/libwdb.xml | 2 +- doc/docbook/system/man3/redblack.xml | 2 +- doc/docbook/system/man5/CMakeLists.txt | 6 +- doc/docbook/system/man5/STEP.xml | 2 +- doc/docbook/system/man5/attributes.xml.in | 2 +- .../system/man5/burst_point_library.xml | 2 +- .../system/man5/burst_shotline_files.xml | 2 +- doc/docbook/system/man5/bw.xml | 2 +- doc/docbook/system/man5/cmap.xml | 2 +- doc/docbook/system/man5/dsp.xml | 2 +- doc/docbook/system/man5/pix.xml | 2 +- doc/docbook/system/man5/plot3.xml | 2 +- doc/docbook/system/mann/CMakeLists.txt | 2 + doc/docbook/system/mann/analyze.xml | 238 +- doc/docbook/system/mann/attr.xml | 2 +- doc/docbook/system/mann/bb.xml | 2 +- doc/docbook/system/mann/bolt.xml | 2 +- doc/docbook/system/mann/dbupgrade.xml | 2 +- doc/docbook/system/mann/exists.xml | 2 +- doc/docbook/system/mann/facetize.xml | 43 +- doc/docbook/system/mann/gdiff.xml | 14 +- doc/docbook/system/mann/get.xml | 2 +- doc/docbook/system/mann/kill.xml | 102 +- doc/docbook/system/mann/man.xml | 2 +- doc/docbook/system/mann/npush.xml | 438 + doc/docbook/system/mann/rtarea.xml | 2 +- doc/docbook/system/mann/saveview.xml | 6 +- doc/docbook/system/mann/search.xml | 11 +- doc/docbook/system/mann/simulate.xml | 2 +- doc/docbook/system/mann/stat.xml | 219 + doc/legal/embedded/CMakeLists.txt | 5 +- doc/legal/embedded/SPSR.txt | 119 +- doc/legal/embedded/damlev.txt | 29 + .../legal/embedded/fort.txt | 25 +- .../libgdiam.txt => embedded/gdiam.txt} | 4 + doc/legal/embedded/glm.txt | 314 - doc/legal/embedded/sobolseq.txt | 2 +- .../{other/libvds.txt => embedded/vds.txt} | 3 + doc/legal/other/CMakeLists.txt | 3 - doc/legal/other/SPSR.txt | 25 - doc/notes/c_cxx_patterns/CMakeLists.txt | 2 +- doc/notes/ecosystem.dot | 2 +- include/RtServerImpl.h | 2 +- include/analyze.h | 2 +- include/analyze/debug.h | 2 +- include/analyze/defines.h | 2 +- include/analyze/density.h | 2 +- include/analyze/diff.h | 2 +- include/analyze/grid.h | 2 +- include/analyze/heal.h | 2 +- include/analyze/info.h | 4 +- include/analyze/nirt.h | 2 +- include/analyze/pnts.h | 2 +- include/analyze/polygonize.h | 2 +- include/analyze/voxelize.h | 2 +- include/analyze/worker.h | 2 +- include/bg.h | 2 +- include/bg/aabb_ray.h | 2 +- include/bg/chull.h | 2 +- include/bg/defines.h | 2 +- include/bg/lseg.h | 2 +- include/bg/obr.h | 2 +- include/bg/pointgen.h | 2 +- include/bg/polygon.h | 2 +- include/bg/polygon_types.h | 2 +- include/bg/tri_pt.h | 2 +- include/bg/tri_ray.h | 2 +- include/bg/tri_tri.h | 2 +- include/bg/trimesh.h | 2 +- include/bio.h | 50 +- include/bn.h | 2 +- include/bn/adc.h | 2 +- include/bn/anim.h | 2 +- include/bn/clip.h | 2 +- include/bn/complex.h | 2 +- include/bn/defines.h | 2 +- include/bn/dvec.h | 2 +- include/bn/mat.h | 2 +- include/bn/msr.h | 2 +- include/bn/multipoly.h | 2 +- include/bn/noise.h | 2 +- include/bn/numgen.h | 2 +- include/bn/plane.h | 2 +- include/bn/plot3.h | 6 +- include/bn/poly.h | 2 +- include/bn/qmath.h | 2 +- include/bn/rand.h | 2 +- include/bn/randmt.h | 2 +- include/bn/sobol.h | 2 +- include/bn/spm.h | 2 +- include/bn/str.h | 2 +- include/bn/tabdata.h | 2 +- include/bn/tol.h | 2 +- include/bn/vectfont.h | 2 +- include/bn/version.h | 2 +- include/bn/vert_tree.h | 2 +- include/bn/vlist.h | 4 +- include/bn/wavelet.h | 2 +- include/bnetwork.h | 2 +- include/brep.h | 2 +- include/brep/bbnode.h | 2 +- include/brep/boolean.h | 2 +- include/brep/brnode.h | 2 +- include/brep/cdt.h | 2 +- include/brep/csg.h | 2 +- include/brep/curvetree.h | 2 +- include/brep/defines.h | 22 +- include/brep/intersect.h | 2 +- include/brep/pullback.h | 2 +- include/brep/ray.h | 2 +- include/brep/surfacetree.h | 2 +- include/brep/util.h | 2 +- include/bresource.h | 2 +- include/brlcad.h | 2 +- include/brlcad_ident.h.in | 2 +- include/brlcad_version.h.in | 2 +- include/bsocket.h | 2 +- include/bu.h | 2 +- include/bu/CMakeLists.txt | 1 + include/bu/app.h | 8 +- include/bu/assert.h | 68 + include/bu/avs.h | 2 +- include/bu/bitv.h | 2 +- include/bu/cmd.h | 2 +- include/bu/color.h | 2 +- include/bu/column.h | 2 +- include/bu/cv.h | 2 +- include/bu/debug.h | 2 +- include/bu/defines.h | 33 +- include/bu/dylib.h | 2 +- include/bu/endian.h | 2 +- include/bu/env.h | 2 +- include/bu/exit.h | 22 +- include/bu/file.h | 5 +- include/bu/getopt.h | 2 +- include/bu/glob.h | 2 +- include/bu/hash.h | 2 +- include/bu/hist.h | 2 +- include/bu/hook.h | 2 +- include/bu/interrupt.h | 2 +- include/bu/list.h | 3 +- include/bu/log.h | 2 +- include/bu/magic.h | 2 +- include/bu/malloc.h | 2 +- include/bu/mapped_file.h | 2 +- include/bu/mime.h | 2 +- include/bu/observer.h | 2 +- include/bu/opt.h | 2 +- include/bu/parallel.h | 2 +- include/bu/parse.h | 2 +- include/bu/path.h | 2 +- include/bu/process.h | 2 +- include/bu/ptbl.h | 2 +- include/bu/redblack.h | 2 +- include/bu/simd.h | 2 +- include/bu/snooze.h | 2 +- include/bu/sort.h | 2 +- include/bu/str.h | 10 +- include/bu/tbl.h | 220 +- include/bu/time.h | 2 +- include/bu/units.h | 2 +- include/bu/uuid.h | 2 +- include/bu/version.h | 2 +- include/bu/vfont.h | 2 +- include/bu/vlb.h | 2 +- include/bu/vls.h | 2 +- include/common.h | 2 +- include/conf/BrlcadConfig.tmpl | 2 +- include/conf/PATCH | 2 +- include/conf/make.vbs | 2 +- include/config_win.h.in | 2 +- include/dm.h | 2 +- include/dm/bview.h | 2 +- include/dm/bview_util.h | 2 +- include/dm/defines.h | 2 +- include/dm/util.h | 2 +- include/fft.h | 2 +- include/gcv.h | 2 +- include/gcv/api.h | 2 +- include/gcv/defines.h | 2 +- include/gcv/util.h | 2 +- include/ged.h | 2 +- include/ged/analyze.h | 2 +- include/ged/commands.h | 42 +- include/ged/database.h | 2 +- include/ged/debug.h | 2 +- include/ged/defines.h | 25 +- include/ged/framebuffer.h | 2 +- include/ged/objects.h | 2 +- include/ged/rt.h | 2 +- include/ged/view.h | 2 +- include/ged/view/adc.h | 2 +- include/ged/view/matrix.h | 2 +- include/ged/view/select.h | 2 +- include/ged/view/state.h | 2 +- include/icv.h | 2 +- include/icv/colorspace.h | 2 +- include/icv/crop.h | 2 +- include/icv/defines.h | 2 +- include/icv/filters.h | 2 +- include/icv/io.h | 2 +- include/icv/ops.h | 2 +- include/icv/stat.h | 2 +- include/libtermio.h | 2 +- include/nmg.h | 2 +- include/nmg/debug.h | 2 +- include/optical.h | 2 +- include/optical/debug.h | 2 +- include/optical/defines.h | 2 +- include/optical/light.h | 2 +- include/optical/plastic.h | 2 +- include/optical/shadefuncs.h | 2 +- include/optical/shadework.h | 2 +- include/pc.h | 2 +- include/photonmap.h | 2 +- include/pkg.h | 2 +- include/raytrace.h | 2 +- include/rt/anim.h | 2 +- include/rt/application.h | 2 +- include/rt/arb_edit.h | 2 +- include/rt/binunif.h | 2 +- include/rt/boolweave.h | 2 +- include/rt/calc.h | 2 +- include/rt/cmd.h | 2 +- include/rt/comb.h | 2 +- include/rt/db4.h | 2 +- include/rt/db5.h | 2 +- include/rt/db_attr.h | 2 +- include/rt/db_diff.h | 3 +- include/rt/db_fp.h | 2 +- include/rt/db_fullpath.h | 2 +- include/rt/db_instance.h | 2 +- include/rt/db_internal.h | 6 +- include/rt/db_io.h | 2 +- include/rt/debug.h | 2 +- include/rt/defines.h | 2 +- include/rt/directory.h | 2 +- include/rt/dspline.h | 2 +- include/rt/func.h | 2 +- include/rt/functab.h | 2 +- include/rt/geom.h | 8 +- include/rt/global.h | 2 +- include/rt/hit.h | 2 +- include/rt/htbl.h | 2 +- include/rt/mater.h | 2 +- include/rt/mem.h | 2 +- include/rt/misc.h | 2 +- include/rt/nmg.h | 2 +- include/rt/nongeom.h | 2 +- include/rt/op.h | 2 +- include/rt/overlap.h | 2 +- include/rt/pattern.h | 2 +- include/rt/piece.h | 2 +- include/rt/prep.h | 2 +- include/rt/primitives/annot.h | 2 +- include/rt/primitives/arb8.h | 2 +- include/rt/primitives/bot.h | 2 +- include/rt/primitives/brep.h | 2 +- include/rt/primitives/cline.h | 2 +- include/rt/primitives/dsp.h | 2 +- include/rt/primitives/ell.h | 2 +- include/rt/primitives/epa.h | 2 +- include/rt/primitives/hf.h | 2 +- include/rt/primitives/metaball.h | 2 +- include/rt/primitives/pg.h | 2 +- include/rt/primitives/pipe.h | 2 +- include/rt/primitives/rhc.h | 2 +- include/rt/primitives/rpc.h | 2 +- include/rt/primitives/script.h | 2 +- include/rt/primitives/sketch.h | 2 +- include/rt/primitives/tgc.h | 2 +- include/rt/primitives/tor.h | 2 +- include/rt/private.h | 2 +- include/rt/ray_partition.h | 2 +- include/rt/region.h | 2 +- include/rt/resource.h | 2 +- include/rt/rt_instance.h | 2 +- include/rt/search.h | 2 +- include/rt/seg.h | 2 +- include/rt/shoot.h | 2 +- include/rt/solid.h | 2 +- include/rt/soltab.h | 2 +- include/rt/space_partition.h | 2 +- include/rt/tie.h | 2 +- include/rt/timer.h | 38 +- include/rt/tol.h | 2 +- include/rt/tree.h | 2 +- include/rt/uv.h | 2 +- include/rt/version.h | 2 +- include/rt/view.h | 2 +- include/rt/vlist.h | 2 +- include/rt/wdb.h | 2 +- include/rt/xray.h | 2 +- include/rtserver.h | 2 +- include/tclcad.h | 11 +- include/vmath.h | 2 +- include/wdb.h | 4 +- misc/Bullet_Box_Chain_Demo.cpp | 2 +- misc/CMake/BRLCAD_Build_Types.cmake | 108 + misc/CMake/BRLCAD_CPack.cmake | 196 + misc/CMake/BRLCAD_CPackOptions.cmake.in | 2 +- misc/CMake/BRLCAD_CheckFunctions.cmake | 2 +- misc/CMake/BRLCAD_Environment_Setup.cmake | 224 + misc/CMake/BRLCAD_Install_Prefix.cmake | 190 + misc/CMake/BRLCAD_Options.cmake | 4 +- misc/CMake/BRLCAD_Regress_Util.cmake | 2 +- misc/CMake/BRLCAD_Summary.cmake | 2 +- misc/CMake/BRLCAD_Targets.cmake | 354 +- misc/CMake/BRLCAD_Test_Wrappers.cmake | 249 + misc/CMake/BRLCAD_User_Options.cmake | 537 + misc/CMake/BRLCAD_Util.cmake | 150 +- misc/CMake/CMakeLists.txt | 14 +- misc/CMake/CheckCInline.cmake | 2 +- misc/CMake/CompilerFlags.cmake | 20 +- misc/CMake/Distcheck.cmake | 4 +- misc/CMake/DocBook.cmake | 3 +- misc/CMake/Doxygen.cmake | 2 +- misc/CMake/FindADAPTAGRAMS.cmake | 2 +- misc/CMake/FindGECODE.cmake | 2 +- misc/CMake/FindGL.cmake | 4 +- misc/CMake/FindLEMON.cmake | 42 +- misc/CMake/FindNETPBM.cmake | 153 +- misc/CMake/FindOPENNURBS.cmake | 155 +- misc/CMake/FindOSL.cmake | 2 +- misc/CMake/FindPERPLEX.cmake | 42 +- misc/CMake/FindPOLY2TRI.cmake | 102 + misc/CMake/FindPkgMacros.cmake | 2 +- misc/CMake/FindRE2C.cmake | 26 +- misc/CMake/FindREGEX.cmake | 2 +- misc/CMake/FindSCL.cmake | 2 +- misc/CMake/FindSSE.cmake | 166 - misc/CMake/FindSTEPCODE.cmake | 164 + misc/CMake/FindSTL.cmake | 2 +- misc/CMake/FindShellDeps.cmake | 2 +- misc/CMake/FindTCL.cmake | 502 +- misc/CMake/FindUTAHRLE.cmake | 156 +- misc/CMake/FindVDS.cmake | 60 - misc/CMake/FindX11.cmake | 4 +- misc/CMake/FindXMLLINT.cmake | 2 +- misc/CMake/FindXSLTPROC.cmake | 2 +- misc/CMake/Path_Setup.cmake | 2 +- misc/CMake/RPath_Setup.cmake | 8 +- misc/CMake/ResetCache.cmake | 2 +- misc/CMake/TCL_PKGINDEX.cmake | 45 +- misc/CMake/ThirdParty.cmake | 2 +- misc/CMake/ThirdParty_TCL.cmake | 7 +- misc/CMake/date_delta.cpp | 48 + misc/CMake/distcheck_in_src_dir.cmake.in | 3 +- misc/CMake/distcheck_no_tcl.cmake.in | 6 +- misc/CMake/distcheck_repo_verify.cmake.in | 2 +- misc/CMake/distcheck_target.cmake.in | 6 +- misc/CMake/distclean.cmake.in | 2 +- misc/CMake/docbook.cmake.in | 2 +- misc/CMake/multiconfig_path_clean.cmake.in | 2 +- misc/CMake/multiconfig_path_read.cmake.in | 58 +- misc/CMake/scripts/printtime.cmake | 3 + misc/CMake/scripts/tcl_mkindex.cmake | 57 + misc/CMake/scripts/timestamp.cmake | 12 + misc/CMake/source_archive_setup.cmake.in | 2 +- misc/CMakeLists.txt | 7 - misc/archlinux/brlcad.install | 2 +- misc/attributes/gen-attributes-file.cpp | 2 +- misc/brlcad-config.in | 2 +- misc/brlcad.spec.in | 2 +- misc/debian/changelog | 7 + misc/debian/copyright | 2 +- .../CMake/ExternalProject_Target.cmake | 268 - .../CMake/Path_Setup.cmake | 151 - .../CMake/RPath_Setup.cmake | 112 - .../CMake/buildpath_replace.cxx.in | 62 - .../CMake/rpath_replace.cxx.in | 58 - misc/external_build_testing/CMakeLists.txt | 1092 - misc/external_build_testing/NOTES | 8 - misc/macosx/Resources/License.rtf | 4 +- misc/macosx/Resources/ReadMe.rtfd/TXT.rtf | 2 +- misc/macosx/Resources/Welcome.rtfd/TXT.rtf | 2 +- .../version1/clhost.cpp | 2 +- .../version1/clhost.hpp | 2 +- misc/opencl-raytracer-tests/version1/main.cpp | 2 +- .../version1/raytracer.hpp | 2 +- .../version1/utility.hpp | 2 +- misc/opencl-raytracer-tests/version2/main.cpp | 2 +- .../version2/raytracer.cpp | 2 +- .../version2/raytracer.hpp | 2 +- misc/opencl-raytracer-tests/version2/rt.cl | 2 +- .../version2/utility.hpp | 2 +- misc/pkgconfig/CMakeLists.txt | 1 + misc/repoconv/CONVERT.sh | 5 +- misc/repoconv/NOTES | 12 + misc/repoconv/checkout_dercs.sh | 12 +- misc/repoconv/github_ci_actions.yml | 271 +- misc/repowork/repowork.cpp | 135 + misc/tools/astyle/CMakeLists.txt | 2 +- misc/tools/debug2c/CMakeLists.txt | 4 +- misc/tools/debug2c/debug2c.cxx | 2 +- misc/tools/dom2dox/CMake/FindLEMON.cmake | 40 +- misc/tools/dom2dox/CMake/FindPERPLEX.cmake | 42 +- misc/tools/dom2dox/CMake/FindRE2C.cmake | 2 +- misc/tools/dom2dox/CMakeLists.txt | 4 +- misc/tools/dom2dox/dom2dox.c | 2 +- misc/tools/dom2dox/dom2dox.h | 2 +- misc/tools/dom2dox/dom2dox_parser.lemon | 2 +- misc/tools/dom2dox/dom2dox_scanner.perplex | 2 +- misc/tools/env2c/CMakeLists.txt | 6 +- misc/tools/env2c/env2c.cxx | 2 +- misc/tools/inactvhdrs/inactvhdrs.cpp | 2 +- misc/tools/lemon/CMakeLists.txt | 3 +- misc/tools/perplex/CMake/FindLEMON.cmake | 2 +- misc/tools/perplex/CMake/FindRE2C.cmake | 2 +- misc/tools/perplex/CMakeLists.txt | 4 +- misc/tools/perplex/parser.y | 2 +- misc/tools/perplex/perplex.cpp | 2 +- misc/tools/perplex/perplex.h | 2 +- misc/tools/perplex/perplex_template.c | 4 +- misc/tools/perplex/scanner.re | 2 +- misc/tools/perplex/token_type.h | 2 +- misc/tools/re2c/CMake/FindLEMON.cmake | 2 +- misc/tools/re2c/CMakeLists.txt | 4 +- misc/tools/xmltools/CMakeLists.txt | 2 +- misc/tools/xmltools/README | 2 +- misc/tools/xmltools/libexslt/CMakeLists.txt | 1 + misc/tools/xmltools/libxml/CMakeLists.txt | 9 +- misc/tools/xmltools/libxslt/CMakeLists.txt | 4 +- misc/uncpowerplant2g.sh | 2 +- misc/win32-msvc/Dll/BrlcadCore.rc | 2 +- misc/win32-msvc/Dll/CMakeLists.txt | 4 - misc/win32-msvc/Dll/TclDummies.c | 2 +- misc/win32-msvc/Dll/brlcad.rc | 2 +- misc/win32-msvc/bootstrap.cpp | 2 +- misc/wix/License.rtf | 2 +- regress/CMakeLists.txt | 4 +- regress/asc/CMakeLists.txt | 4 +- regress/asc/asc.sh | 2 +- regress/asc/asc2dsp.sh | 2 +- regress/bots/CMakeLists.txt | 2 +- regress/bots/bots.sh | 2 +- regress/comgeom/CMakeLists.txt | 2 +- regress/comgeom/comgeom.sh | 2 +- regress/coverage/CMakeLists.txt | 2 +- regress/coverage/covgcheck.cpp | 2 +- regress/dsp/CMakeLists.txt | 2 +- regress/dsp/dsp.sh | 2 +- regress/flawfinder.sh | 2 +- regress/fuzz/CMakeLists.txt | 2 +- regress/fuzz/fuzz_ged.cpp | 2 +- regress/fuzz/fuzz_test1.cxx | 2 +- regress/g-dot.sh | 2 +- regress/g-nff.sh | 2 +- regress/gcv/dem/CMakeLists.txt | 4 +- regress/ged/CMakeLists.txt | 16 +- regress/ged/mater.c | 2 +- regress/ged/ppush_tests.g | Bin 0 -> 8632 bytes regress/ged/push.cpp | 294 + regress/ged/push_tests.g | Bin 0 -> 11320 bytes regress/ged/regress-ged_push.cmake.in | 86 + regress/ged/xpush_tests.g | Bin 0 -> 9440 bytes regress/gqa/CMakeLists.txt | 2 +- regress/gqa/gqa.sh | 2 +- regress/icv/CMakeLists.txt | 2 + regress/iges/CMakeLists.txt | 2 +- regress/iges/iges.sh | 2 +- regress/library.sh | 2 +- regress/licenses/licenses_check.cpp | 2 +- regress/lights/CMakeLists.txt | 2 +- regress/lights/lights.cmake | 2 +- regress/lights/lights.sh | 2 +- regress/mged/CMakeLists.txt | 2 +- regress/mged/mged.sh | 10 +- regress/mged/mged.tcl | 2 +- regress/mged/mged_test.sh | 2 +- regress/mged/regression_resources.tcl | 2 +- regress/moss/CMakeLists.txt | 2 +- regress/moss/moss.sh | 2 +- regress/nirt/CMakeLists.txt | 2 +- regress/nirt/nirt.sh | 2 +- regress/nurbs/CMakeLists.txt | 19 +- regress/pkg/CMakeLists.txt | 3 +- regress/pkg/regress_pkg.cpp | 2 +- regress/red/CMakeLists.txt | 2 +- regress/red/red.sh | 2 +- regress/repository/CMakeLists.txt | 2 +- regress/repository/repocheck.cpp | 4 +- regress/rtedge/CMakeLists.txt | 2 +- regress/rtedge/rtedge.sh | 2 +- regress/shaders/CMakeLists.txt | 2 +- regress/shaders/shaders.sh | 2 +- regress/solids/CMakeLists.txt | 2 +- regress/solids/solids.sh | 2 +- regress/spdi/CMakeLists.txt | 2 +- regress/spdi/spdi.sh | 2 +- regress/usage.sh | 2 +- regress/user/CMakeLists.txt | 2 +- regress/user/cad_user.c | 2 +- regress/weight/CMakeLists.txt | 2 +- regress/weight/weight.sh | 2 +- sh/cmp.sh | 2 +- sh/conversion.sh | 2 +- sh/copyright.sh | 2 +- sh/elapsed.sh | 2 +- sh/enumerate.sh | 2 +- sh/footer.sh | 2 +- sh/fs2org.sh | 2 +- sh/header.sh | 2 +- sh/indent.sh | 2 +- sh/ios-icons.sh | 2 +- sh/linkroot.sh | 2 +- sh/make_deb.sh | 2 +- sh/make_dmg.sh | 2 +- sh/make_rpm.sh | 2 +- sh/news2tracker.sh | 2 +- sh/show.sh | 2 +- sh/template.sh | 2 +- sh/ws.sh | 2 +- src/adrt/CMakeLists.txt | 2 +- src/adrt/adrt.h | 2 +- src/adrt/adrt_struct.h | 2 +- src/adrt/isst.c | 4 +- src/adrt/isst.tcl | 2 +- src/adrt/librender/camera.c | 2 +- src/adrt/librender/camera.h | 2 +- src/adrt/librender/component.c | 2 +- src/adrt/librender/cut.c | 2 +- src/adrt/librender/depth.c | 2 +- src/adrt/librender/flat.c | 2 +- src/adrt/librender/flos.c | 2 +- src/adrt/librender/grid.c | 2 +- src/adrt/librender/hit.c | 2 +- src/adrt/librender/normal.c | 2 +- src/adrt/librender/path.c | 2 +- src/adrt/librender/phong.c | 2 +- src/adrt/librender/render.h | 2 +- src/adrt/librender/render_internal.h | 2 +- src/adrt/librender/render_util.c | 2 +- src/adrt/librender/render_util.h | 2 +- src/adrt/librender/spall.c | 2 +- src/adrt/librender/surfel.c | 2 +- src/adrt/librender/texture.h | 2 +- src/adrt/librender/texture_blend.c | 2 +- src/adrt/librender/texture_bump.c | 2 +- src/adrt/librender/texture_camo.c | 2 +- src/adrt/librender/texture_checker.c | 2 +- src/adrt/librender/texture_clouds.c | 2 +- src/adrt/librender/texture_gradient.c | 2 +- src/adrt/librender/texture_image.c | 2 +- src/adrt/librender/texture_internal.h | 2 +- src/adrt/librender/texture_mix.c | 2 +- src/adrt/librender/texture_perlin.c | 2 +- src/adrt/librender/texture_stack.c | 2 +- src/adrt/load.c | 2 +- src/adrt/load.h | 2 +- src/adrt/load_g.c | 2 +- src/adrt/master/compnet.c | 2 +- src/adrt/master/compnet.h | 2 +- src/adrt/master/dispatcher.c | 2 +- src/adrt/master/dispatcher.h | 2 +- src/adrt/master/master.c | 2 +- src/adrt/master/master.h | 2 +- src/adrt/master/tienet_master.c | 2 +- src/adrt/master/tienet_master.h | 2 +- src/adrt/slave/slave.c | 2 +- src/adrt/slave/slave.h | 2 +- src/adrt/slave/tienet_slave.c | 2 +- src/adrt/slave/tienet_slave.h | 2 +- src/adrt/tienet.c | 2 +- src/adrt/tienet.h | 2 +- src/archer/CMakeLists.txt | 3 +- src/archer/archer.c | 19 +- src/archer/archer_launch.tcl | 33 +- .../Utility/attrGroupsDisplayUtilityP.tcl | 10 +- .../AttrGroupsDisplayUtilityP.tcl | 2 +- src/archer/plugins/Utility/botUtilityP.tcl | 8 +- .../Utility/botUtilityP/BotUtilityP.tcl | 2 +- src/archer/plugins/Utility/lodUtilityP.tcl | 8 +- .../Utility/lodUtilityP/LODUtilityP.tcl | 2 +- src/archer/plugins/Wizards/humanwizard.tcl | 9 +- .../Wizards/humanwizard/HumanWizard.tcl | 2 +- src/archer/plugins/Wizards/tankwizard.tcl | 9 +- .../plugins/Wizards/tankwizard/TankWizard.tcl | 2 +- src/archer/plugins/Wizards/tirewizard.tcl | 9 +- .../plugins/Wizards/tirewizard/TireWizard.tcl | 2 +- src/art/CMakeLists.txt | 2 +- src/art/art.cpp | 7 +- src/art/art.h | 7 +- src/art/brlcadplugin.cpp | 7 +- src/art/brlcadplugin.h | 2 +- src/brlman/brlman.c | 6 +- src/brlman/brlman.tcl | 4 +- src/burst/burst.cpp | 4 +- src/burst/burst.h | 2 +- src/burst/grid.cpp | 2 +- src/burst/idents.cpp | 2 +- src/burst/old/Hm.c | 2 +- src/burst/old/HmGetc.c | 2 +- src/burst/old/HmGlob.c | 2 +- src/burst/old/Mm.h | 2 +- src/burst/old/Sc.c | 2 +- src/burst/old/Sc.h | 2 +- src/burst/old/ascii.h | 2 +- src/burst/old/burst.c | 2 +- src/burst/old/burst.h | 2 +- src/burst/old/error.c | 2 +- src/burst/old/extern.h | 2 +- src/burst/old/fb.c | 2 +- src/burst/old/glob.c | 2 +- src/burst/old/grid.c | 2 +- src/burst/old/gridrotate.c | 2 +- src/burst/old/idents.c | 2 +- src/burst/old/paint.c | 2 +- src/burst/old/plot.c | 2 +- src/burst/old/prnt.c | 2 +- src/burst/old/trie.c | 2 +- src/burst/old/ui.c | 2 +- src/burst/paint.cpp | 2 +- src/bwish/CMakeLists.txt | 4 +- src/bwish/cmd.c | 2 +- src/bwish/input.c | 2 +- src/bwish/main.c | 2 +- src/conv/3dm/3dm-g.c | 2 +- src/conv/3dm/CMakeLists.txt | 2 +- src/conv/CMakeLists.txt | 6 +- src/conv/asc/asc2dsp.c | 2 +- src/conv/asc/asc2g.c | 10 +- src/conv/asc/asc2pix.c | 2 +- src/conv/asc/g2asc.c | 2 +- src/conv/asc/pix2asc.c | 2 +- src/conv/bot_dump.c | 2 +- src/conv/comgeom/cvt.c | 2 +- src/conv/comgeom/f2a.c | 2 +- src/conv/comgeom/mat.c | 2 +- src/conv/comgeom/read.c | 2 +- src/conv/comgeom/region.c | 2 +- src/conv/comgeom/solid.c | 2 +- src/conv/comgeom/tools.c | 2 +- src/conv/comgeom/try.sh | 2 +- src/conv/conv-vg2g.c | 2 +- src/conv/csg/csg.c | 2 +- src/conv/csg/csg.h | 2 +- src/conv/csg/csg_parser.lemon | 2 +- src/conv/csg/csg_scanner.perplex | 2 +- src/conv/dbclean.sh | 2 +- src/conv/dbupgrade.c | 2 +- src/conv/dxf/dxf-g.c | 2 +- src/conv/dxf/dxf.h | 2 +- src/conv/dxf/g-dxf.c | 2 +- src/conv/enf-g.c | 2 +- src/conv/fast4-g.c | 11 +- src/conv/g-acad.c | 2 +- src/conv/g-dot.c | 2 +- src/conv/g-egg.c | 2 +- src/conv/g-nff.c | 2 +- src/conv/g-obj.c | 2 +- src/conv/g-shell-rect.c | 2 +- src/conv/g-var.c | 2 +- src/conv/g-vdb.cpp | 2 +- src/conv/g-voxel.c | 2 +- src/conv/g-vrml.c | 2 +- src/conv/g-x3d.c | 2 +- src/conv/g-xxx.c | 2 +- src/conv/g-xxx_facets.c | 2 +- src/conv/g4-g5.c | 2 +- src/conv/g5-g4.c | 2 +- src/conv/gcv/CMakeLists.txt | 2 +- src/conv/gcv/gcv.c | 5 +- src/conv/iges/BrepHandler.cpp | 2 +- src/conv/iges/PullbackCurve.cpp | 2 +- src/conv/iges/PullbackCurve.h | 2 +- src/conv/iges/add_face.c | 2 +- src/conv/iges/add_face.cpp | 2 +- src/conv/iges/add_inner_shell.c | 2 +- src/conv/iges/add_loop.c | 2 +- src/conv/iges/arrange.c | 2 +- src/conv/iges/b-spline.c | 2 +- src/conv/iges/block2.c | 2 +- src/conv/iges/brep.c | 2 +- src/conv/iges/brep.cpp | 2 +- src/conv/iges/brlcad_brep.cpp | 2 +- src/conv/iges/brlcad_brep.hpp | 2 +- src/conv/iges/bubbleup.c | 2 +- src/conv/iges/check_names.c | 2 +- src/conv/iges/cone.c | 2 +- src/conv/iges/conv_drawings.c | 2 +- src/conv/iges/convassem.c | 2 +- src/conv/iges/convinst.c | 2 +- src/conv/iges/convsolids.c | 2 +- src/conv/iges/convsurf.c | 2 +- src/conv/iges/convtree.c | 2 +- src/conv/iges/copytree.c | 2 +- src/conv/iges/cyl.c | 2 +- src/conv/iges/do_subfigs.c | 2 +- src/conv/iges/docolor.c | 2 +- src/conv/iges/ell.c | 2 +- src/conv/iges/evalxform.c | 2 +- src/conv/iges/extrudcirc.c | 2 +- src/conv/iges/extrudcon.c | 2 +- src/conv/iges/extrude.c | 2 +- src/conv/iges/findp.c | 2 +- src/conv/iges/g-iges.c | 5 +- src/conv/iges/get_att.c | 2 +- src/conv/iges/get_cnurb_curve.c | 2 +- src/conv/iges/get_edge_list.c | 2 +- src/conv/iges/get_iges_vertex.c | 2 +- src/conv/iges/get_outer_shell.c | 2 +- src/conv/iges/get_outer_shell.cpp | 2 +- src/conv/iges/get_vertex.c | 2 +- src/conv/iges/get_vertex_list.c | 2 +- src/conv/iges/getcurve.c | 2 +- src/conv/iges/iges.c | 2 +- src/conv/iges/iges.h | 2 +- src/conv/iges/iges_extern.h | 2 +- src/conv/iges/iges_struct.h | 2 +- src/conv/iges/iges_types.c | 2 +- src/conv/iges/iges_types.h | 2 +- src/conv/iges/main.c | 2 +- src/conv/iges/make_face.c | 2 +- src/conv/iges/make_nurb_face.c | 2 +- src/conv/iges/makedir.c | 2 +- src/conv/iges/makegroup.c | 2 +- src/conv/iges/matmult.c | 2 +- src/conv/iges/n_iges.cpp | 2 +- src/conv/iges/n_iges.hpp | 2 +- src/conv/iges/n_main.cpp | 2 +- src/conv/iges/orient_loops.c | 2 +- src/conv/iges/read_att.c | 2 +- src/conv/iges/read_edge_list.c | 2 +- src/conv/iges/read_vertex_list.c | 2 +- src/conv/iges/readcnv.c | 2 +- src/conv/iges/readcols.c | 2 +- src/conv/iges/readdbl.c | 2 +- src/conv/iges/readflt.c | 2 +- src/conv/iges/readglobal.c | 2 +- src/conv/iges/readint.c | 2 +- src/conv/iges/readmatrix.c | 2 +- src/conv/iges/readname.c | 2 +- src/conv/iges/readrec.c | 2 +- src/conv/iges/readstart.c | 2 +- src/conv/iges/readstrg.c | 2 +- src/conv/iges/readtime.c | 2 +- src/conv/iges/readtree.c | 2 +- src/conv/iges/recsize.c | 2 +- src/conv/iges/revolve.c | 2 +- src/conv/iges/showtree.c | 2 +- src/conv/iges/sphere.c | 2 +- src/conv/iges/spline.c | 2 +- src/conv/iges/splinef.c | 2 +- src/conv/iges/stack.c | 2 +- src/conv/iges/summary.c | 2 +- src/conv/iges/tor.c | 2 +- src/conv/iges/trimsurf.c | 2 +- src/conv/iges/usage.c | 2 +- src/conv/iges/wedge.c | 2 +- src/conv/intaval/glob.h | 2 +- src/conv/intaval/read_dra.cpp | 2 +- src/conv/intaval/read_dra.h | 2 +- src/conv/intaval/regtab.cpp | 2 +- src/conv/intaval/regtab.h | 2 +- src/conv/intaval/tgf-g.cpp | 2 +- src/conv/intaval/write_brl.cpp | 2 +- src/conv/intaval/write_brl.h | 2 +- src/conv/jack/g-jack.c | 2 +- src/conv/jack/jack-g.c | 2 +- src/conv/k-g.cpp | 2 +- src/conv/nastran-g.c | 2 +- src/conv/nmg/asc-nmg.c | 2 +- src/conv/obj-g.c | 2 +- src/conv/off/g-off.c | 2 +- src/conv/off/off-g.c | 2 +- src/conv/patch/patch-g.c | 2 +- src/conv/patch/patch-g.h | 2 +- src/conv/patch/pull_comp.sh | 2 +- src/conv/patch/pull_solidsub.sh | 2 +- src/conv/patch/rpatch.c | 2 +- src/conv/ply/g-ply.c | 2 +- src/conv/ply/ply-g.c | 2 +- src/conv/raw/Bot.cpp | 2 +- src/conv/raw/Bot.h | 2 +- src/conv/raw/CMakeLists.txt | 2 +- src/conv/raw/RegionList.cpp | 2 +- src/conv/raw/RegionList.h | 2 +- src/conv/raw/g-raw.c | 2 +- src/conv/raw/raw-g.cpp | 2 +- src/conv/shp/shp-g.c | 2 +- src/conv/step/AP_Common.h | 2 +- src/conv/step/BRLCADWrapper.cpp | 2 +- src/conv/step/BRLCADWrapper.h | 2 +- src/conv/step/CMakeLists.txt | 106 +- src/conv/step/STEPWrapper.cpp | 2 +- src/conv/step/STEPWrapper.h | 2 +- src/conv/step/ap203e2-g/CMakeLists.txt | 3 + src/conv/step/ap214-g/CMakeLists.txt | 4 + src/conv/step/ap242-g/CMakeLists.txt | 4 + src/conv/step/ap242-g/Factory.cpp | 2 +- .../ap242-g/GlobalUnitAssignedContext.cpp | 2 +- .../step/ap242-g/GlobalUnitAssignedContext.h | 2 +- src/conv/step/ap242-g/MeasureValue.cpp | 2 +- src/conv/step/ap242-g/MeasureValue.h | 2 +- src/conv/step/ap242-g/MeasureWithUnit.cpp | 2 +- src/conv/step/ap242-g/MeasureWithUnit.h | 2 +- .../PropertyDefinitionRepresentation.cpp | 2 +- .../PropertyDefinitionRepresentation.h | 2 +- .../step/ap242-g/RepresentedDefinition.cpp | 2 +- src/conv/step/ap242-g/RepresentedDefinition.h | 2 +- src/conv/step/ap_schema.h | 2 +- src/conv/step/g-ap203e2/AP203e2.h | 2 +- src/conv/step/g-ap203e2/CMakeLists.txt | 4 + src/conv/step/g-ap203e2/g-ap203e2.cpp | 2 +- src/conv/step/g-ap214/AP214e3.h | 2 +- src/conv/step/g-ap214/Add_Tree.cpp | 2 +- src/conv/step/g-ap214/CMakeLists.txt | 4 + src/conv/step/g-ap214/Comb.cpp | 2 +- src/conv/step/g-ap214/G_Objects.cpp | 2 +- .../Shape_Definition_Representation.cpp | 2 +- src/conv/step/g-ap214/g-ap214.cpp | 2 +- src/conv/step/g-ap242/AP242.h | 2 +- src/conv/step/g-ap242/CMakeLists.txt | 4 + src/conv/step/g-ap242/g-ap242.cpp | 2 +- src/conv/step/g-step/AP203.cpp | 2 +- src/conv/step/g-step/AP203.h | 2 +- src/conv/step/g-step/Assembly_Product.cpp | 2 +- src/conv/step/g-step/Assembly_Product.h | 2 +- src/conv/step/g-step/CMakeLists.txt | 68 +- src/conv/step/g-step/Comb.cpp | 2 +- src/conv/step/g-step/Comb.h | 2 +- .../step/g-step/Default_Geometric_Context.cpp | 2 +- .../step/g-step/Default_Geometric_Context.h | 2 +- src/conv/step/g-step/G_Objects.cpp | 2 +- src/conv/step/g-step/G_Objects.h | 2 +- src/conv/step/g-step/ON_Brep.cpp | 2 +- src/conv/step/g-step/ON_Brep.h | 2 +- src/conv/step/g-step/ON_NurbsCurve.cpp | 2 +- src/conv/step/g-step/ON_NurbsSurface.cpp | 2 +- .../Shape_Definition_Representation.cpp | 2 +- .../g-step/Shape_Definition_Representation.h | 2 +- src/conv/step/g-step/Shape_Representation.cpp | 2 +- src/conv/step/g-step/Shape_Representation.h | 2 +- .../Shape_Representation_Relationship.cpp | 2 +- .../Shape_Representation_Relationship.h | 2 +- src/conv/step/g-step/Trees.cpp | 2 +- src/conv/step/g-step/Trees.h | 2 +- src/conv/step/g-step/g-step.cpp | 2 +- src/conv/step/ifc-g/CMakeLists.txt | 4 + src/conv/step/ifc-g/IFCWrapper.cpp | 2 +- src/conv/step/ifc-g/IFCWrapper.h | 2 +- src/conv/step/ifc-g/ifc-g.cpp | 2 +- .../AdvancedBrepShapeRepresentation.cpp | 2 +- .../step-g/AdvancedBrepShapeRepresentation.h | 2 +- src/conv/step/step-g/AdvancedFace.cpp | 2 +- src/conv/step/step-g/AdvancedFace.h | 2 +- .../AmountOfSubstanceContextDependentUnit.cpp | 2 +- .../AmountOfSubstanceContextDependentUnit.h | 2 +- .../AmountOfSubstanceConversionBasedUnit.cpp | 2 +- .../AmountOfSubstanceConversionBasedUnit.h | 2 +- .../step/step-g/AmountOfSubstanceSiUnit.cpp | 2 +- .../step/step-g/AmountOfSubstanceSiUnit.h | 2 +- .../step/step-g/AmountOfSubstanceUnit.cpp | 2 +- src/conv/step/step-g/AmountOfSubstanceUnit.h | 2 +- src/conv/step/step-g/ApplicationContext.cpp | 2 +- src/conv/step/step-g/ApplicationContext.h | 2 +- .../step/step-g/ApplicationContextElement.cpp | 2 +- .../step/step-g/ApplicationContextElement.h | 2 +- .../step/step-g/AreaContextDependentUnit.cpp | 2 +- .../step/step-g/AreaContextDependentUnit.h | 2 +- .../step/step-g/AreaConversionBasedUnit.cpp | 2 +- .../step/step-g/AreaConversionBasedUnit.h | 2 +- src/conv/step/step-g/AreaSiUnit.cpp | 2 +- src/conv/step/step-g/AreaSiUnit.h | 2 +- src/conv/step/step-g/AreaUnit.cpp | 2 +- src/conv/step/step-g/AreaUnit.h | 2 +- .../step/step-g/AssemblyComponentUsage.cpp | 2 +- src/conv/step/step-g/AssemblyComponentUsage.h | 2 +- src/conv/step/step-g/Axis1Placement.cpp | 2 +- src/conv/step/step-g/Axis1Placement.h | 2 +- src/conv/step/step-g/Axis2Placement.cpp | 2 +- src/conv/step/step-g/Axis2Placement.h | 2 +- src/conv/step/step-g/Axis2Placement2D.cpp | 2 +- src/conv/step/step-g/Axis2Placement2D.h | 2 +- src/conv/step/step-g/Axis2Placement3D.cpp | 2 +- src/conv/step/step-g/Axis2Placement3D.h | 2 +- src/conv/step/step-g/BSplineCurve.cpp | 2 +- src/conv/step/step-g/BSplineCurve.h | 2 +- .../step/step-g/BSplineCurveWithKnots.cpp | 2 +- src/conv/step/step-g/BSplineCurveWithKnots.h | 2 +- src/conv/step/step-g/BSplineSurface.cpp | 2 +- src/conv/step/step-g/BSplineSurface.h | 2 +- .../step/step-g/BSplineSurfaceWithKnots.cpp | 2 +- .../step/step-g/BSplineSurfaceWithKnots.h | 2 +- src/conv/step/step-g/BezierCurve.cpp | 2 +- src/conv/step/step-g/BezierCurve.h | 2 +- src/conv/step/step-g/BezierSurface.cpp | 2 +- src/conv/step/step-g/BezierSurface.h | 2 +- src/conv/step/step-g/BoundaryCurve.cpp | 2 +- src/conv/step/step-g/BoundaryCurve.h | 2 +- src/conv/step/step-g/BoundedCurve.cpp | 2 +- src/conv/step/step-g/BoundedCurve.h | 2 +- src/conv/step/step-g/BoundedPCurve.cpp | 2 +- src/conv/step/step-g/BoundedPCurve.h | 2 +- src/conv/step/step-g/BoundedSurface.cpp | 2 +- src/conv/step/step-g/BoundedSurface.h | 2 +- src/conv/step/step-g/BoundedSurfaceCurve.cpp | 2 +- src/conv/step/step-g/BoundedSurfaceCurve.h | 2 +- src/conv/step/step-g/BrepWithVoids.cpp | 2 +- src/conv/step/step-g/BrepWithVoids.h | 2 +- src/conv/step/step-g/CMakeLists.txt | 50 +- src/conv/step/step-g/CartesianPoint.cpp | 2 +- src/conv/step/step-g/CartesianPoint.h | 2 +- .../CartesianTransformationOperator.cpp | 2 +- .../step-g/CartesianTransformationOperator.h | 2 +- .../CartesianTransformationOperator2D.cpp | 2 +- .../CartesianTransformationOperator2D.h | 2 +- .../CartesianTransformationOperator3D.cpp | 2 +- .../CartesianTransformationOperator3D.h | 2 +- .../step/step-g/CharacterizedDefinition.cpp | 2 +- .../step/step-g/CharacterizedDefinition.h | 2 +- .../step-g/CharacterizedProductDefinition.cpp | 2 +- .../step-g/CharacterizedProductDefinition.h | 2 +- src/conv/step/step-g/Circle.cpp | 2 +- src/conv/step/step-g/Circle.h | 2 +- src/conv/step/step-g/ClosedShell.cpp | 2 +- src/conv/step/step-g/ClosedShell.h | 2 +- src/conv/step/step-g/CompositeCurve.cpp | 2 +- src/conv/step/step-g/CompositeCurve.h | 2 +- .../step/step-g/CompositeCurveOnSurface.cpp | 2 +- .../step/step-g/CompositeCurveOnSurface.h | 2 +- .../step/step-g/CompositeCurveSegment.cpp | 2 +- src/conv/step/step-g/CompositeCurveSegment.h | 2 +- src/conv/step/step-g/Conic.cpp | 2 +- src/conv/step/step-g/Conic.h | 2 +- src/conv/step/step-g/ConicalSurface.cpp | 2 +- src/conv/step/step-g/ConicalSurface.h | 2 +- src/conv/step/step-g/ConnectedFaceSet.cpp | 2 +- src/conv/step/step-g/ConnectedFaceSet.h | 2 +- .../ContextDependentShapeRepresentation.cpp | 2 +- .../ContextDependentShapeRepresentation.h | 2 +- src/conv/step/step-g/ContextDependentUnit.cpp | 2 +- src/conv/step/step-g/ContextDependentUnit.h | 2 +- src/conv/step/step-g/ConversionBasedUnit.cpp | 2 +- src/conv/step/step-g/ConversionBasedUnit.h | 2 +- src/conv/step/step-g/Curve.cpp | 2 +- src/conv/step/step-g/Curve.h | 2 +- src/conv/step/step-g/CurveBoundedSurface.cpp | 2 +- src/conv/step/step-g/CurveBoundedSurface.h | 2 +- src/conv/step/step-g/CurveReplica.cpp | 2 +- src/conv/step/step-g/CurveReplica.h | 2 +- src/conv/step/step-g/CylindricalSurface.cpp | 2 +- src/conv/step/step-g/CylindricalSurface.h | 2 +- .../step-g/DefinitionalRepresentation.cpp | 2 +- .../step/step-g/DefinitionalRepresentation.h | 2 +- src/conv/step/step-g/DerivedUnit.cpp | 2 +- src/conv/step/step-g/DerivedUnit.h | 2 +- src/conv/step/step-g/DerivedUnitElement.cpp | 2 +- src/conv/step/step-g/DerivedUnitElement.h | 2 +- src/conv/step/step-g/DesignContext.cpp | 2 +- src/conv/step/step-g/DesignContext.h | 2 +- src/conv/step/step-g/DimensionalExponents.cpp | 2 +- src/conv/step/step-g/DimensionalExponents.h | 2 +- src/conv/step/step-g/Direction.cpp | 2 +- src/conv/step/step-g/Direction.h | 2 +- src/conv/step/step-g/Edge.cpp | 2 +- src/conv/step/step-g/Edge.h | 2 +- src/conv/step/step-g/EdgeCurve.cpp | 2 +- src/conv/step/step-g/EdgeCurve.h | 2 +- src/conv/step/step-g/EdgeLoop.cpp | 2 +- src/conv/step/step-g/EdgeLoop.h | 2 +- .../ElectricCurrentContextDependentUnit.cpp | 2 +- .../ElectricCurrentContextDependentUnit.h | 2 +- .../ElectricCurrentConversionBasedUnit.cpp | 2 +- .../ElectricCurrentConversionBasedUnit.h | 2 +- .../step/step-g/ElectricCurrentSiUnit.cpp | 2 +- src/conv/step/step-g/ElectricCurrentSiUnit.h | 2 +- src/conv/step/step-g/ElectricCurrentUnit.cpp | 2 +- src/conv/step/step-g/ElectricCurrentUnit.h | 2 +- src/conv/step/step-g/ElementarySurface.cpp | 2 +- src/conv/step/step-g/ElementarySurface.h | 2 +- src/conv/step/step-g/Ellipse.cpp | 2 +- src/conv/step/step-g/Ellipse.h | 2 +- src/conv/step/step-g/Face.cpp | 2 +- src/conv/step/step-g/Face.h | 2 +- src/conv/step/step-g/FaceBound.cpp | 2 +- src/conv/step/step-g/FaceBound.h | 2 +- src/conv/step/step-g/FaceOuterBound.cpp | 2 +- src/conv/step/step-g/FaceOuterBound.h | 2 +- src/conv/step/step-g/FaceSurface.cpp | 2 +- src/conv/step/step-g/FaceSurface.h | 2 +- src/conv/step/step-g/Factory.cpp | 2 +- src/conv/step/step-g/Factory.h | 2 +- src/conv/step/step-g/FoundedItem.cpp | 2 +- src/conv/step/step-g/FoundedItem.h | 2 +- .../FunctionallyDefinedTransformation.cpp | 2 +- .../FunctionallyDefinedTransformation.h | 2 +- .../step-g/GeometricRepresentationContext.cpp | 2 +- .../step-g/GeometricRepresentationContext.h | 2 +- .../step-g/GeometricRepresentationItem.cpp | 2 +- .../step/step-g/GeometricRepresentationItem.h | 2 +- src/conv/step/step-g/GeometricSet.cpp | 2 +- src/conv/step/step-g/GeometricSet.h | 2 +- src/conv/step/step-g/GeometricSetSelect.cpp | 2 +- src/conv/step/step-g/GeometricSetSelect.h | 2 +- ...callyBoundedSurfaceShapeRepresentation.cpp | 2 +- ...ricallyBoundedSurfaceShapeRepresentation.h | 2 +- .../GlobalUncertaintyAssignedContext.cpp | 2 +- .../step-g/GlobalUncertaintyAssignedContext.h | 2 +- .../step/step-g/GlobalUnitAssignedContext.cpp | 2 +- .../step/step-g/GlobalUnitAssignedContext.h | 2 +- src/conv/step/step-g/Hyperbola.cpp | 2 +- src/conv/step/step-g/Hyperbola.h | 2 +- src/conv/step/step-g/IntersectionCurve.cpp | 2 +- src/conv/step/step-g/IntersectionCurve.h | 2 +- .../step/step-g/ItemDefinedTransformation.cpp | 2 +- .../step/step-g/ItemDefinedTransformation.h | 2 +- .../step-g/LengthContextDependentUnit.cpp | 2 +- .../step/step-g/LengthContextDependentUnit.h | 2 +- .../step/step-g/LengthConversionBasedUnit.cpp | 2 +- .../step/step-g/LengthConversionBasedUnit.h | 2 +- .../step/step-g/LengthMeasureWithUnit.cpp | 2 +- src/conv/step/step-g/LengthMeasureWithUnit.h | 2 +- src/conv/step/step-g/LengthSiUnit.cpp | 2 +- src/conv/step/step-g/LengthSiUnit.h | 2 +- src/conv/step/step-g/LengthUnit.cpp | 2 +- src/conv/step/step-g/LengthUnit.h | 2 +- src/conv/step/step-g/Line.cpp | 2 +- src/conv/step/step-g/Line.h | 2 +- src/conv/step/step-g/LocalUnits.cpp | 2 +- src/conv/step/step-g/LocalUnits.h | 2 +- src/conv/step/step-g/Loop.cpp | 2 +- src/conv/step/step-g/Loop.h | 2 +- .../LuminousIntensityContextDependentUnit.cpp | 2 +- .../LuminousIntensityContextDependentUnit.h | 2 +- .../LuminousIntensityConversionBasedUnit.cpp | 2 +- .../LuminousIntensityConversionBasedUnit.h | 2 +- .../step/step-g/LuminousIntensitySiUnit.cpp | 2 +- .../step/step-g/LuminousIntensitySiUnit.h | 2 +- .../step/step-g/LuminousIntensityUnit.cpp | 2 +- src/conv/step/step-g/LuminousIntensityUnit.h | 2 +- src/conv/step/step-g/ManifoldSolidBrep.cpp | 2 +- src/conv/step/step-g/ManifoldSolidBrep.h | 2 +- .../ManifoldSurfaceShapeRepresentation.cpp | 2 +- .../ManifoldSurfaceShapeRepresentation.h | 2 +- .../step/step-g/MassContextDependentUnit.cpp | 2 +- .../step/step-g/MassContextDependentUnit.h | 2 +- .../step/step-g/MassConversionBasedUnit.cpp | 2 +- .../step/step-g/MassConversionBasedUnit.h | 2 +- src/conv/step/step-g/MassSiUnit.cpp | 2 +- src/conv/step/step-g/MassSiUnit.h | 2 +- src/conv/step/step-g/MassUnit.cpp | 2 +- src/conv/step/step-g/MassUnit.h | 2 +- src/conv/step/step-g/MeasureValue.cpp | 2 +- src/conv/step/step-g/MeasureValue.h | 2 +- src/conv/step/step-g/MeasureWithUnit.cpp | 2 +- src/conv/step/step-g/MeasureWithUnit.h | 2 +- src/conv/step/step-g/MechanicalContext.cpp | 2 +- src/conv/step/step-g/MechanicalContext.h | 2 +- src/conv/step/step-g/NamedUnit.cpp | 2 +- src/conv/step/step-g/NamedUnit.h | 2 +- .../step-g/NextAssemblyUsageOccurrence.cpp | 2 +- .../step/step-g/NextAssemblyUsageOccurrence.h | 2 +- src/conv/step/step-g/OffsetCurve2D.cpp | 2 +- src/conv/step/step-g/OffsetCurve2D.h | 2 +- src/conv/step/step-g/OffsetCurve3D.cpp | 2 +- src/conv/step/step-g/OffsetCurve3D.h | 2 +- src/conv/step/step-g/OffsetSurface.cpp | 2 +- src/conv/step/step-g/OffsetSurface.h | 2 +- src/conv/step/step-g/OpenNurbsInterfaces.cpp | 21 +- src/conv/step/step-g/OpenShell.cpp | 2 +- src/conv/step/step-g/OpenShell.h | 2 +- src/conv/step/step-g/OrientedClosedShell.cpp | 2 +- src/conv/step/step-g/OrientedClosedShell.h | 2 +- src/conv/step/step-g/OrientedEdge.cpp | 2 +- src/conv/step/step-g/OrientedEdge.h | 2 +- src/conv/step/step-g/OrientedFace.cpp | 2 +- src/conv/step/step-g/OrientedFace.h | 2 +- src/conv/step/step-g/PCurve.cpp | 2 +- src/conv/step/step-g/PCurve.h | 2 +- src/conv/step/step-g/PCurveOrSurface.cpp | 2 +- src/conv/step/step-g/PCurveOrSurface.h | 2 +- src/conv/step/step-g/Parabola.cpp | 2 +- src/conv/step/step-g/Parabola.h | 2 +- .../ParametricRepresentationContext.cpp | 2 +- .../step-g/ParametricRepresentationContext.h | 2 +- src/conv/step/step-g/Path.cpp | 2 +- src/conv/step/step-g/Path.h | 2 +- src/conv/step/step-g/Placement.cpp | 2 +- src/conv/step/step-g/Placement.h | 2 +- src/conv/step/step-g/Plane.cpp | 2 +- src/conv/step/step-g/Plane.h | 2 +- .../step-g/PlaneAngleContextDependentUnit.cpp | 2 +- .../step-g/PlaneAngleContextDependentUnit.h | 2 +- .../step-g/PlaneAngleConversionBasedUnit.cpp | 2 +- .../step-g/PlaneAngleConversionBasedUnit.h | 2 +- .../step/step-g/PlaneAngleMeasureWithUnit.cpp | 2 +- .../step/step-g/PlaneAngleMeasureWithUnit.h | 2 +- src/conv/step/step-g/PlaneAngleSiUnit.cpp | 2 +- src/conv/step/step-g/PlaneAngleSiUnit.h | 2 +- src/conv/step/step-g/PlaneAngleUnit.cpp | 2 +- src/conv/step/step-g/PlaneAngleUnit.h | 2 +- src/conv/step/step-g/Point.cpp | 2 +- src/conv/step/step-g/Point.h | 2 +- src/conv/step/step-g/Polyline.cpp | 2 +- src/conv/step/step-g/Polyline.h | 2 +- src/conv/step/step-g/Product.cpp | 2 +- src/conv/step/step-g/Product.h | 2 +- src/conv/step/step-g/ProductCategory.cpp | 2 +- src/conv/step/step-g/ProductCategory.h | 2 +- src/conv/step/step-g/ProductContext.cpp | 2 +- src/conv/step/step-g/ProductContext.h | 2 +- src/conv/step/step-g/ProductDefinition.cpp | 2 +- src/conv/step/step-g/ProductDefinition.h | 2 +- .../step/step-g/ProductDefinitionContext.cpp | 2 +- .../step/step-g/ProductDefinitionContext.h | 2 +- .../ProductDefinitionContextAssociation.cpp | 2 +- .../ProductDefinitionContextAssociation.h | 2 +- .../step-g/ProductDefinitionContextRole.cpp | 2 +- .../step-g/ProductDefinitionContextRole.h | 2 +- .../step-g/ProductDefinitionFormation.cpp | 2 +- .../step/step-g/ProductDefinitionFormation.h | 2 +- ...DefinitionFormationWithSpecifiedSource.cpp | 2 +- ...ctDefinitionFormationWithSpecifiedSource.h | 2 +- .../step-g/ProductDefinitionRelationship.cpp | 2 +- .../step-g/ProductDefinitionRelationship.h | 2 +- .../step/step-g/ProductDefinitionShape.cpp | 2 +- src/conv/step/step-g/ProductDefinitionShape.h | 2 +- .../step/step-g/ProductDefinitionUsage.cpp | 2 +- src/conv/step/step-g/ProductDefinitionUsage.h | 2 +- ...oductDefinitionWithAssociatedDocuments.cpp | 2 +- ...ProductDefinitionWithAssociatedDocuments.h | 2 +- .../step-g/ProductRelatedProductCategory.cpp | 2 +- .../step-g/ProductRelatedProductCategory.h | 2 +- src/conv/step/step-g/PropertyDefinition.cpp | 2 +- src/conv/step/step-g/PropertyDefinition.h | 2 +- .../PropertyDefinitionRepresentation.cpp | 2 +- .../step-g/PropertyDefinitionRepresentation.h | 2 +- src/conv/step/step-g/QuasiUniformCurve.cpp | 2 +- src/conv/step/step-g/QuasiUniformCurve.h | 2 +- src/conv/step/step-g/QuasiUniformSurface.cpp | 2 +- src/conv/step/step-g/QuasiUniformSurface.h | 2 +- .../step/step-g/RatioContextDependentUnit.cpp | 2 +- .../step/step-g/RatioContextDependentUnit.h | 2 +- .../step/step-g/RatioConversionBasedUnit.cpp | 2 +- .../step/step-g/RatioConversionBasedUnit.h | 2 +- src/conv/step/step-g/RatioSiUnit.cpp | 2 +- src/conv/step/step-g/RatioSiUnit.h | 2 +- src/conv/step/step-g/RatioUnit.cpp | 2 +- src/conv/step/step-g/RatioUnit.h | 2 +- src/conv/step/step-g/RationalBSplineCurve.cpp | 2 +- src/conv/step/step-g/RationalBSplineCurve.h | 2 +- .../step-g/RationalBSplineCurveWithKnots.cpp | 2 +- .../step-g/RationalBSplineCurveWithKnots.h | 2 +- .../step/step-g/RationalBSplineSurface.cpp | 2 +- src/conv/step/step-g/RationalBSplineSurface.h | 2 +- .../RationalBSplineSurfaceWithKnots.cpp | 2 +- .../step-g/RationalBSplineSurfaceWithKnots.h | 2 +- src/conv/step/step-g/RationalBezierCurve.cpp | 2 +- src/conv/step/step-g/RationalBezierCurve.h | 2 +- .../step/step-g/RationalBezierSurface.cpp | 2 +- src/conv/step/step-g/RationalBezierSurface.h | 2 +- .../step/step-g/RationalQuasiUniformCurve.cpp | 2 +- .../step/step-g/RationalQuasiUniformCurve.h | 2 +- .../step-g/RationalQuasiUniformSurface.cpp | 2 +- .../step/step-g/RationalQuasiUniformSurface.h | 2 +- src/conv/step/step-g/RationalUniformCurve.cpp | 2 +- src/conv/step/step-g/RationalUniformCurve.h | 2 +- .../step/step-g/RationalUniformSurface.cpp | 2 +- src/conv/step/step-g/RationalUniformSurface.h | 2 +- .../step-g/RectangularCompositeSurface.cpp | 2 +- .../step/step-g/RectangularCompositeSurface.h | 2 +- .../step/step-g/RectangularTrimmedSurface.cpp | 2 +- .../step/step-g/RectangularTrimmedSurface.h | 2 +- src/conv/step/step-g/Representation.cpp | 2 +- src/conv/step/step-g/Representation.h | 2 +- .../step/step-g/RepresentationContext.cpp | 2 +- src/conv/step/step-g/RepresentationContext.h | 2 +- src/conv/step/step-g/RepresentationItem.cpp | 2 +- src/conv/step/step-g/RepresentationItem.h | 2 +- .../step-g/RepresentationRelationship.cpp | 2 +- .../step/step-g/RepresentationRelationship.h | 2 +- ...entationRelationshipWithTransformation.cpp | 2 +- ...esentationRelationshipWithTransformation.h | 2 +- .../step/step-g/RepresentedDefinition.cpp | 2 +- src/conv/step/step-g/RepresentedDefinition.h | 2 +- src/conv/step/step-g/STEPEntity.cpp | 2 +- src/conv/step/step-g/STEPEntity.h | 2 +- src/conv/step/step-g/SeamCurve.cpp | 2 +- src/conv/step/step-g/SeamCurve.h | 2 +- src/conv/step/step-g/ShapeAspect.cpp | 2 +- src/conv/step/step-g/ShapeAspect.h | 2 +- .../step/step-g/ShapeAspectRelationship.cpp | 2 +- .../step/step-g/ShapeAspectRelationship.h | 2 +- src/conv/step/step-g/ShapeDefinition.cpp | 2 +- src/conv/step/step-g/ShapeDefinition.h | 2 +- .../step-g/ShapeDefinitionRepresentation.cpp | 2 +- .../step-g/ShapeDefinitionRepresentation.h | 2 +- src/conv/step/step-g/ShapeRepresentation.cpp | 2 +- src/conv/step/step-g/ShapeRepresentation.h | 2 +- .../ShapeRepresentationRelationship.cpp | 2 +- .../step-g/ShapeRepresentationRelationship.h | 2 +- .../step/step-g/ShellBasedSurfaceModel.cpp | 2 +- src/conv/step/step-g/ShellBasedSurfaceModel.h | 2 +- src/conv/step/step-g/SiUnit.cpp | 2 +- src/conv/step/step-g/SiUnit.h | 2 +- .../step-g/SolidAngleContextDependentUnit.cpp | 2 +- .../step-g/SolidAngleContextDependentUnit.h | 2 +- .../step-g/SolidAngleConversionBasedUnit.cpp | 2 +- .../step-g/SolidAngleConversionBasedUnit.h | 2 +- src/conv/step/step-g/SolidAngleSiUnit.cpp | 2 +- src/conv/step/step-g/SolidAngleSiUnit.h | 2 +- src/conv/step/step-g/SolidAngleUnit.cpp | 2 +- src/conv/step/step-g/SolidAngleUnit.h | 2 +- src/conv/step/step-g/SolidModel.cpp | 2 +- src/conv/step/step-g/SolidModel.h | 2 +- src/conv/step/step-g/SphericalSurface.cpp | 2 +- src/conv/step/step-g/SphericalSurface.h | 2 +- src/conv/step/step-g/Surface.cpp | 2 +- src/conv/step/step-g/Surface.h | 2 +- src/conv/step/step-g/SurfaceCurve.cpp | 2 +- src/conv/step/step-g/SurfaceCurve.h | 2 +- .../step/step-g/SurfaceOfLinearExtrusion.cpp | 2 +- .../step/step-g/SurfaceOfLinearExtrusion.h | 2 +- src/conv/step/step-g/SurfaceOfRevolution.cpp | 2 +- src/conv/step/step-g/SurfaceOfRevolution.h | 2 +- src/conv/step/step-g/SurfacePatch.cpp | 2 +- src/conv/step/step-g/SurfacePatch.h | 2 +- src/conv/step/step-g/SurfaceReplica.cpp | 2 +- src/conv/step/step-g/SurfaceReplica.h | 2 +- src/conv/step/step-g/SweptSurface.cpp | 2 +- src/conv/step/step-g/SweptSurface.h | 2 +- ...dynamicTemperatureContextDependentUnit.cpp | 2 +- ...modynamicTemperatureContextDependentUnit.h | 2 +- ...odynamicTemperatureConversionBasedUnit.cpp | 2 +- ...rmodynamicTemperatureConversionBasedUnit.h | 2 +- .../step-g/ThermodynamicTemperatureSiUnit.cpp | 2 +- .../step-g/ThermodynamicTemperatureSiUnit.h | 2 +- .../step-g/ThermodynamicTemperatureUnit.cpp | 2 +- .../step-g/ThermodynamicTemperatureUnit.h | 2 +- .../step/step-g/TimeContextDependentUnit.cpp | 2 +- .../step/step-g/TimeContextDependentUnit.h | 2 +- .../step/step-g/TimeConversionBasedUnit.cpp | 2 +- .../step/step-g/TimeConversionBasedUnit.h | 2 +- src/conv/step/step-g/TimeSiUnit.cpp | 2 +- src/conv/step/step-g/TimeSiUnit.h | 2 +- src/conv/step/step-g/TimeUnit.cpp | 2 +- src/conv/step/step-g/TimeUnit.h | 2 +- .../step-g/TopologicalRepresentationItem.cpp | 2 +- .../step-g/TopologicalRepresentationItem.h | 2 +- src/conv/step/step-g/ToroidalSurface.cpp | 2 +- src/conv/step/step-g/ToroidalSurface.h | 2 +- src/conv/step/step-g/Transformation.cpp | 2 +- src/conv/step/step-g/Transformation.h | 2 +- src/conv/step/step-g/TrimmedCurve.cpp | 2 +- src/conv/step/step-g/TrimmedCurve.h | 2 +- src/conv/step/step-g/TrimmingSelect.cpp | 2 +- src/conv/step/step-g/TrimmingSelect.h | 2 +- .../step-g/UncertaintyMeasureWithUnit.cpp | 2 +- .../step/step-g/UncertaintyMeasureWithUnit.h | 2 +- src/conv/step/step-g/UniformCurve.cpp | 2 +- src/conv/step/step-g/UniformCurve.h | 2 +- src/conv/step/step-g/UniformSurface.cpp | 2 +- src/conv/step/step-g/UniformSurface.h | 2 +- src/conv/step/step-g/Unit.cpp | 2 +- src/conv/step/step-g/Unit.h | 2 +- src/conv/step/step-g/Vector.cpp | 2 +- src/conv/step/step-g/Vector.h | 2 +- src/conv/step/step-g/Vertex.cpp | 2 +- src/conv/step/step-g/Vertex.h | 2 +- src/conv/step/step-g/VertexLoop.cpp | 2 +- src/conv/step/step-g/VertexLoop.h | 2 +- src/conv/step/step-g/VertexPoint.cpp | 2 +- src/conv/step/step-g/VertexPoint.h | 2 +- .../step-g/VolumeContextDependentUnit.cpp | 2 +- .../step/step-g/VolumeContextDependentUnit.h | 2 +- .../step/step-g/VolumeConversionBasedUnit.cpp | 2 +- .../step/step-g/VolumeConversionBasedUnit.h | 2 +- src/conv/step/step-g/VolumeSiUnit.cpp | 2 +- src/conv/step/step-g/VolumeSiUnit.h | 2 +- src/conv/step/step-g/VolumeUnit.cpp | 2 +- src/conv/step/step-g/VolumeUnit.h | 2 +- src/conv/step/step-g/step-g.cpp | 2 +- src/conv/step/util/CMakeLists.txt | 70 +- src/conv/stl/g-stl.c | 2 +- src/conv/stl/stl-g.c | 2 +- src/conv/tankill/tankill-g.c | 2 +- src/conv/vdeck/cgarbs.c | 2 +- src/conv/vdeck/match.c | 2 +- src/conv/vdeck/parsarg.c | 2 +- src/conv/vdeck/std.h | 2 +- src/conv/vdeck/vdeck.c | 2 +- src/conv/vdeck/vextern.h | 2 +- src/conv/walk_example.c | 2 +- src/external/Creo/CMakeLists.txt | 15 +- src/external/Creo/assembly.cpp | 2 +- src/external/Creo/creo-brl.h | 3 +- src/external/Creo/csg.cpp | 172 +- src/external/Creo/main.cpp | 2 +- src/external/Creo/part.cpp | 4 +- src/external/Creo/shim.cpp | 5 + src/external/Creo/shim.h | 15 +- src/external/Creo/util.cpp | 43 +- src/external/Cubit/CMakeLists.txt | 9 +- src/external/Cubit/g-sat.cpp | 2 +- src/external/Unigraphics/CMakeLists.txt | 11 +- src/external/Unigraphics/conv.h | 2 +- src/external/Unigraphics/log.h | 2 +- src/external/Unigraphics/ug-g.1 | 2 +- src/external/Unigraphics/ug-g.c | 2 +- src/external/Unigraphics/ug_misc.c | 2 +- src/external/Unigraphics/ug_misc.h | 2 +- src/fb/CMakeLists.txt | 1 - src/fb/bw-fb.c | 2 +- src/fb/cmap-crunch.c | 2 +- src/fb/fb-bw.c | 2 +- src/fb/fb-fb.c | 2 +- src/fb/fb-pix.c | 2 +- src/fb/fb-png.c | 2 +- src/fb/fbcbars.c | 2 +- src/fb/fbclear.c | 2 +- src/fb/fbcmap.c | 2 +- src/fb/fbcolor.c | 2 +- src/fb/fbfade.c | 2 +- src/fb/fbframe.c | 2 +- src/fb/fbfree.c | 2 +- src/fb/fbgamma.c | 2 +- src/fb/fbgrid.c | 2 +- src/fb/fbhelp.c | 2 +- src/fb/fblabel.c | 2 +- src/fb/fbline.c | 2 +- src/fb/fbpoint.c | 2 +- src/fb/fbstretch.c | 2 +- src/fb/fbzoom.c | 2 +- src/fb/gif-fb.c | 2 +- src/fb/gif2fb.c | 2 +- src/fb/ioutil.c | 2 +- src/fb/pix-fb.c | 2 +- src/fb/pixautosize.c | 2 +- src/fb/plot3-fb.c | 2 +- src/fb/png-fb.c | 2 +- src/fb/spm-fb.c | 2 +- src/fbserv/fbserv.c | 2 +- src/fbserv/server.c | 2 +- src/gtools/beset/beset.c | 2 +- src/gtools/beset/beset.h | 2 +- src/gtools/beset/fitness.c | 2 +- src/gtools/beset/fitness.h | 2 +- src/gtools/beset/population.c | 2 +- src/gtools/beset/population.h | 2 +- src/gtools/ganalyze.cpp | 2 +- src/gtools/gchecker.cpp | 2 +- src/gtools/gdiff/diff3_summary.c | 2 +- src/gtools/gdiff/diff_summary.c | 2 +- src/gtools/gdiff/gdiff.c | 4 +- src/gtools/gdiff/gdiff.h | 2 +- src/gtools/gdiff/merge.c | 2 +- src/gtools/gdiff/utility.c | 2 +- src/gtools/gex.cpp | 2 +- src/gtools/glint.cpp | 2 +- src/gtools/gqa.c | 2 +- src/gtools/gsh.cpp | 18 +- src/gtools/gtransfer.c | 2 +- src/gtools/tests/CMakeLists.txt | 27 +- src/gtools/tests/bigdb.c | 39 +- .../GridGeneration/rectangular_grid.c | 2 +- src/libanalyze/MeshHealing/DCEL.h | 2 +- src/libanalyze/MeshHealing/Geometry.cpp | 2 +- src/libanalyze/MeshHealing/Geometry.h | 2 +- src/libanalyze/MeshHealing/MeshConversion.cpp | 2 +- src/libanalyze/MeshHealing/MeshConversion.h | 2 +- .../MeshHealing/MeshConversion_brlcad.cpp | 2 +- .../MeshHealing/MeshConversion_brlcad.h | 2 +- src/libanalyze/MeshHealing/Stitch.cpp | 2 +- src/libanalyze/MeshHealing/Stitch.h | 2 +- src/libanalyze/MeshHealing/Zipper.cpp | 2 +- src/libanalyze/MeshHealing/Zipper.h | 2 +- src/libanalyze/analyze_private.h | 5 +- src/libanalyze/api.c | 5 +- src/libanalyze/centroid.c | 2 +- src/libanalyze/check_options.c | 2 +- src/libanalyze/density.cpp | 2 +- src/libanalyze/find_subtracted_shapes.cpp | 2 +- src/libanalyze/globals.c | 2 +- src/libanalyze/heal_mesh.cpp | 2 +- src/libanalyze/inside.c | 2 +- src/libanalyze/mass.c | 2 +- src/libanalyze/moments.c | 2 +- src/libanalyze/nirt/diff.cpp | 2 +- src/libanalyze/nirt/nirt.cpp | 2 +- src/libanalyze/nirt/nirt.h | 2 +- src/libanalyze/obj_to_pnts.cpp | 2 +- src/libanalyze/overlaps.c | 2 +- src/libanalyze/raydiff.c | 40 +- src/libanalyze/surf_area.c | 2 +- src/libanalyze/tests/CMakeLists.txt | 4 +- src/libanalyze/tests/density.cpp | 2 +- src/libanalyze/tests/nhit.cpp | 4 +- src/libanalyze/tests/raydiff.c | 2 +- src/libanalyze/tests/solid_partitions.c | 2 +- src/libanalyze/util.cpp | 11 +- src/libanalyze/volume.c | 2 +- src/libanalyze/voxels.c | 2 +- src/libanalyze/wnsurface.cpp | 2 +- src/libbg/CMakeLists.txt | 50 +- src/libbg/aabb_ray.c | 2 +- src/libbg/bg_private.h | 2 +- src/libbg/chull.c | 2 +- src/libbg/chull2.cpp | 2 +- src/libbg/chull3d.cpp | 2 +- src/libbg/obr.c | 2 +- src/libbg/pointgen.c | 2 +- src/libbg/polygon.c | 2 +- src/libbg/polygon_op.cpp | 2 +- src/libbg/polygon_triangulate.cpp | 2 +- src/libbg/spsr.c | 4 +- .../libspsr/Src => libbg/spsr}/Allocator.h | 0 src/{other/libspsr/Src => libbg/spsr}/Array.h | 9 - .../libspsr/Src => libbg/spsr}/Array.inl | 3 - .../libspsr/Src => libbg/spsr}/BSplineData.h | 0 .../Src => libbg/spsr}/BSplineData.inl | 10 +- .../libspsr/Src => libbg/spsr}/BinaryNode.h | 0 .../libspsr/Src => libbg/spsr}/Factor.cpp | 21 + .../libspsr/Src => libbg/spsr}/Factor.h | 0 .../libspsr/Src => libbg/spsr}/FunctionData.h | 0 .../Src => libbg/spsr}/FunctionData.inl | 0 .../Src/MyTime.h => libbg/spsr/Geometry.cpp} | 51 +- .../libspsr/Src => libbg/spsr}/Geometry.h | 41 +- .../libspsr/Src => libbg/spsr}/Geometry.inl | 113 - src/{other/libspsr => libbg/spsr}/LICENSE | 0 src/{other/libspsr/Src => libbg/spsr}/MAT.h | 0 src/{other/libspsr/Src => libbg/spsr}/MAT.inl | 2 +- .../Src => libbg/spsr}/MarchingCubes.cpp | 34 +- .../Src => libbg/spsr}/MarchingCubes.h | 0 .../spsr}/MultiGridOctreeData.IsoSurface.inl | 36 +- .../MultiGridOctreeData.SortedTreeNodes.inl | 4 - .../Src => libbg/spsr}/MultiGridOctreeData.h | 8 +- .../spsr}/MultiGridOctreeData.inl | 80 +- .../libspsr/Src => libbg/spsr}/Octree.h | 0 .../libspsr/Src => libbg/spsr}/Octree.inl | 27 +- .../libspsr/Src => libbg/spsr}/PPolynomial.h | 0 .../Src => libbg/spsr}/PPolynomial.inl | 0 src/libbg/spsr/PlyVertexMini.h | 206 + .../libspsr/Src => libbg/spsr}/PointStream.h | 18 - .../Src => libbg/spsr}/PointStream.inl | 89 - .../libspsr/Src => libbg/spsr}/Polynomial.h | 0 .../libspsr/Src => libbg/spsr}/Polynomial.inl | 0 .../libspsr/Src => libbg/spsr}/SPSR.cpp | 63 +- src/{other/libspsr/Src => libbg/spsr}/SPSR.h | 33 +- .../libspsr/Src => libbg/spsr}/SparseMatrix.h | 0 .../Src => libbg/spsr}/SparseMatrix.inl | 60 +- .../libspsr/Src => libbg/spsr}/Vector.h | 0 .../libspsr/Src => libbg/spsr}/Vector.inl | 0 .../libspsr/Src => libbg/spsr}/cvertex.h | 0 src/libbg/tests/CMakeLists.txt | 54 +- src/libbg/tests/chull.c | 2 +- src/libbg/tests/chull3d.c | 2 +- src/libbg/tests/lseg_lseg.c | 2 +- src/libbg/tests/lseg_pt.c | 2 +- src/libbg/tests/obr.c | 2 +- src/libbg/tests/polygon_op.c | 2 +- src/libbg/tests/polygon_triangulate.c | 2 +- src/libbg/tests/tri_closest_pt.c | 2 +- src/libbg/tests/tri_ray_isect.cpp | 2 +- src/libbg/tests/tri_tri_isect.c | 2 +- src/libbg/tests/tri_tri_isect_coplanar.cpp | 2 +- src/libbg/trimesh.cpp | 2 +- src/libbg/trimesh_isect.cpp | 2 +- src/libbg/util.c | 2 +- src/libbn/CMakeLists.txt | 2 +- src/libbn/anim.c | 2 +- src/libbn/axis.c | 6 +- src/libbn/clip.c | 2 +- src/libbn/complex.c | 2 +- src/libbn/font.c | 2 +- src/libbn/globals.c | 2 +- src/libbn/list.c | 2 +- src/libbn/marker.c | 2 +- src/libbn/mat.c | 45 +- src/libbn/msr.c | 2 +- src/libbn/multipoly.c | 2 +- src/libbn/noise.c | 2 +- src/libbn/numgen.c | 2 +- src/libbn/plane.cpp | 2 +- src/libbn/plot3.c | 262 +- src/libbn/poly.c | 2 +- src/libbn/qmath.c | 2 +- src/libbn/rand.c | 2 +- src/libbn/randsph.c | 2 +- src/libbn/scale.c | 2 +- src/libbn/{sobolseq.c => sobol.c} | 148 +- src/libbn/soboldata.h | 6 +- src/libbn/sphmap.c | 2 +- src/libbn/str.c | 2 +- src/libbn/symbol.c | 2 +- src/libbn/tabdata.c | 7 +- src/libbn/tests/CMakeLists.txt | 565 +- src/libbn/tests/bn_test.c.in | 2 +- src/libbn/tests/bntester.c | 2 +- src/libbn/tests/complex.c | 2 +- src/libbn/tests/invalid.plot3 | Bin 0 -> 7950 bytes src/libbn/tests/list.c | 2 +- src/libbn/tests/mat.c | 2 +- src/libbn/tests/plane_dist.c | 2 +- src/libbn/tests/plane_isect.c | 2 +- src/libbn/tests/plane_pt.c | 2 +- src/libbn/tests/plot3.c | 108 + src/libbn/tests/poly_add.c | 2 +- src/libbn/tests/poly_cubic_roots.c | 2 +- src/libbn/tests/poly_multiply.c | 2 +- src/libbn/tests/poly_quartic_roots.c | 2 +- src/libbn/tests/poly_scale.c | 2 +- src/libbn/tests/poly_sub.c | 2 +- src/libbn/tests/poly_synthetic_div.c | 2 +- src/libbn/tests/qmath.c | 2 +- src/libbn/tests/randsph.c | 2 +- src/libbn/tests/tabdata.c | 2 +- src/libbn/tests/valid.plot3 | Bin 0 -> 7950 bytes src/libbn/tests/vlist.c | 8 +- src/libbn/tplot.c | 2 +- src/libbn/ulp.c | 2 +- src/libbn/vectfont.c | 2 +- src/libbn/vector.c | 2 +- src/libbn/vers.c | 2 +- src/libbn/vert_tree.c | 2 +- src/libbn/vlist.c | 6 +- src/libbn/wavelet.c | 2 +- src/libbrep/BBNode.cpp | 2 +- src/libbrep/BRNode.cpp | 2 +- src/libbrep/CMakeLists.txt | 33 +- src/libbrep/PullbackCurve.cpp | 2 +- src/libbrep/PullbackCurve.h | 2 +- src/libbrep/Subcurve.cpp | 2 +- src/libbrep/Subsurface.cpp | 2 +- src/libbrep/boolean.cpp | 54 +- src/libbrep/brep_defines.h | 71 + src/libbrep/brep_except.h | 2 +- src/libbrep/cdt/cdt.cpp | 2 +- src/libbrep/cdt/cdt.h | 2 +- src/libbrep/cdt/edge.cpp | 2 +- src/libbrep/cdt/fast.cpp | 26 +- src/libbrep/cdt/mesh.cpp | 2 +- src/libbrep/cdt/mesh.h | 2 +- src/libbrep/cdt/ovlps_simple.cpp | 2 +- src/libbrep/cdt/surf.cpp | 2 +- src/libbrep/cdt/tri_isect.cpp | 2 +- src/libbrep/cdt/util.cpp | 2 +- src/libbrep/cdt/validate.cpp | 2 +- src/libbrep/debug_plot.cpp | 990 + src/libbrep/debug_plot.h | 141 + src/libbrep/intersect.cpp | 131 +- src/libbrep/opennurbs_ext.cpp | 2 +- src/libbrep/px_event.cpp | 2 +- src/libbrep/shape_recognition/cone.cpp | 2 +- src/libbrep/shape_recognition/cylinder.cpp | 2 +- src/libbrep/shape_recognition/pipeline.cpp | 2 +- src/libbrep/shape_recognition/planar.cpp | 2 +- .../shape_recognition/shape_recognition.cpp | 2 +- .../shape_recognition/shape_recognition.h | 2 +- src/libbrep/shape_recognition/sphere.cpp | 2 +- src/libbrep/shape_recognition/torus.cpp | 2 +- src/libbrep/shape_recognition/util.cpp | 2 +- src/libbrep/ssx_event.cpp | 2 +- src/libbrep/tests/CMakeLists.txt | 26 +- src/libbrep/tests/brep_cdt_mesh.cpp | 2 +- src/libbrep/tests/ppx.cpp | 235 + src/libbrep/tests/test_curve_intersect.cpp | 2 +- src/libbrep/tests/test_point_intersect.cpp | 2 +- src/libbrep/tools/tools.cpp | 2 +- src/libbrep/tools/tools.h | 2 +- src/libbrep/tools/util.cpp | 2 +- src/libbu/CMakeLists.txt | 9 +- src/libbu/affinity.c | 2 +- src/libbu/argv.c | 10 +- src/libbu/avs.c | 2 +- src/libbu/backtrace.c | 17 +- src/libbu/badmagic.c | 2 +- src/libbu/bitv.c | 2 +- src/libbu/bitv.h | 2 +- src/libbu/bomb.c | 2 +- src/libbu/booleanize.c | 2 +- src/libbu/brlcad_path.c | 52 +- src/libbu/bu_init.cpp | 2 +- src/libbu/cmd.c | 2 +- src/libbu/color.cpp | 6 +- src/libbu/convert.c | 2 +- src/libbu/crashreport.c | 16 +- src/libbu/ctype.c | 2 +- src/libbu/damlevlim.cpp | 187 + src/libbu/datetime.c | 2 +- src/libbu/dir.c | 7 +- src/libbu/dirent.c | 2 +- src/libbu/dylib.c | 2 +- src/libbu/encode.c | 2 +- src/libbu/endian.c | 2 +- src/libbu/env.c | 2 +- src/libbu/escape.c | 2 +- src/libbu/fchmod.c | 2 +- src/libbu/fgets.c | 2 +- src/libbu/file.c | 21 +- src/libbu/fort.c | 7754 ++++++ src/libbu/fort.h | 1056 + src/libbu/getcwd.c | 2 +- src/libbu/gethostname.c | 2 +- src/libbu/getopt.c | 2 +- src/libbu/globals.c | 2 +- src/libbu/hash.c | 2 +- src/libbu/heap.c | 2 +- src/libbu/hist.c | 2 +- src/libbu/hook.c | 2 +- src/libbu/htond.c | 2 +- src/libbu/htonf.c | 2 +- src/libbu/interrupt.c | 4 +- src/libbu/kill.c | 2 +- src/libbu/lex.c | 2 +- src/libbu/linebuf.c | 2 +- src/libbu/list.c | 2 +- src/libbu/log.c | 2 +- src/libbu/magic.c | 2 +- src/libbu/malloc.c | 2 +- src/libbu/mappedfile.c | 44 +- src/libbu/mime.cmake | 2 +- src/libbu/mread.c | 2 +- src/libbu/num.c | 2 +- src/libbu/observer.c | 2 +- src/libbu/opt.c | 2 +- src/libbu/parallel.c | 2 +- src/libbu/parallel.h | 2 +- src/libbu/parallel_cpp11thread.cpp | 2 +- src/libbu/parse.c | 3 +- src/libbu/path.c | 2 +- src/libbu/printb.c | 2 +- src/libbu/process.c | 2 +- src/libbu/process.h | 2 +- src/libbu/progname.c | 2 +- src/libbu/ptbl.c | 2 +- src/libbu/realpath.c | 2 +- src/libbu/redblack.c | 2 +- src/libbu/scan.c | 2 +- src/libbu/semaphore.c | 2 +- src/libbu/semaphore_register.cpp | 2 +- src/libbu/simd.c | 7 +- src/libbu/snooze.c | 2 +- src/libbu/sscanf.c | 3 +- src/libbu/str.c | 2 +- src/libbu/tbl.c | 282 + src/libbu/temp.c | 2 +- src/libbu/tests/CMakeLists.txt | 649 +- src/libbu/tests/b64.c | 2 +- src/libbu/tests/backtrace.c | 2 +- src/libbu/tests/badmagic.c | 2 +- src/libbu/tests/basename.c | 2 +- src/libbu/tests/bitv.c | 2 +- src/libbu/tests/booleanize.c | 2 +- src/libbu/tests/bu_test.c.in | 2 +- src/libbu/tests/color.c | 2 +- src/libbu/tests/datetime.c | 2 +- src/libbu/tests/dir.c | 2 +- src/libbu/tests/dirname.c | 2 +- src/libbu/tests/dylib/CMakeLists.txt | 3 +- src/libbu/tests/encode.c | 2 +- src/libbu/tests/escape.c | 2 +- src/libbu/tests/file.c | 2 +- src/libbu/tests/file_mime.c | 2 +- src/libbu/tests/gethostname.c | 2 +- src/libbu/tests/hash.cpp | 2 +- src/libbu/tests/heap.c | 2 +- src/libbu/tests/hook.c | 2 +- src/libbu/tests/mappedfile.c | 2 +- src/libbu/tests/opt.c | 2 +- src/libbu/tests/parallel.c | 2 +- src/libbu/tests/path_component.c | 2 +- src/libbu/tests/process.c | 2 +- src/libbu/tests/progname.c | 36 +- src/libbu/tests/ptbl.c | 2 +- src/libbu/tests/realpath.c | 2 +- src/libbu/tests/semaphore.c | 2 +- src/libbu/tests/semchk.cpp | 2 +- src/libbu/tests/sort.c | 2 +- src/libbu/tests/sscanf.c | 2 +- src/libbu/tests/str.c | 2 +- src/libbu/tests/str_isprint.c | 2 +- src/libbu/tests/subprocess.cpp | 2 +- src/libbu/tests/uuid.c | 2 +- src/libbu/tests/vls.c | 2 +- src/libbu/tests/vls_incr.c | 2 +- src/libbu/tests/vls_incr_uniq.cpp | 2 +- src/libbu/tests/vls_simplify.c | 2 +- src/libbu/tests/vls_vprintf.c | 2 +- src/libbu/thread.cpp | 2 +- src/libbu/units.c | 2 +- src/libbu/uuid.c | 2 +- src/libbu/vers.c | 2 +- src/libbu/vfont.c | 6 +- src/libbu/vfont.h | 2 +- src/libbu/vlb.c | 2 +- src/libbu/vls.c | 2 +- src/libbu/vls_incr.cpp | 2 +- src/libbu/vls_vprintf.c | 2 +- src/libbu/vls_vprintf.h | 2 +- src/libbu/whereami.h | 6 +- src/libbu/whereis.c | 2 +- src/libbu/which.c | 2 +- src/libbu/xdr.c | 2 +- src/libbu/y2038/time64.c | 2 +- src/libdm/X/color.c | 2 +- src/libdm/X/dm-X.c | 2 +- src/libdm/X/dm-X.h | 2 +- src/libdm/X/fb_X.h | 2 +- src/libdm/adc.c | 2 +- src/libdm/asize.c | 2 +- src/libdm/axes.c | 2 +- src/libdm/bview_util.c | 2 +- src/libdm/clip.c | 2 +- src/libdm/dm-generic.c | 2 +- src/libdm/dm_init.cpp | 4 +- src/libdm/dm_plugins.cpp | 130 +- src/libdm/dm_util.c | 2 +- src/libdm/fb_generic.c | 2 +- src/libdm/fb_log.c | 2 +- src/libdm/fb_paged_io.c | 2 +- src/libdm/fb_rect.c | 2 +- src/libdm/fb_util.c | 2 +- src/libdm/glx/dm-glx.h | 2 +- src/libdm/glx/dm-ogl.c | 2 +- src/libdm/glx/dm-ogl.h | 2 +- src/libdm/glx/fb_ogl.h | 2 +- src/libdm/glx/if_ogl.c | 2 +- src/libdm/grid.c | 2 +- src/libdm/if_TEMPLATE.c | 2 +- src/libdm/if_disk.c | 2 +- src/libdm/if_mem.c | 2 +- src/libdm/if_remote.c | 2 +- src/libdm/if_stack.c | 2 +- src/libdm/include/calltable.h | 2 +- src/libdm/include/private.h | 2 +- src/libdm/knob.c | 2 +- src/libdm/labels.c | 2 +- src/libdm/null/dm-Null.c | 2 +- src/libdm/null/dm-Null.h | 2 +- src/libdm/null/if_null.c | 2 +- src/libdm/options.c | 5 +- src/libdm/osgl/dm-osgl.cpp | 4 +- src/libdm/osgl/dm-osgl.h | 2 +- src/libdm/osgl/fb_osgl.h | 2 +- src/libdm/osgl/if_osgl.cpp | 6 +- src/libdm/osgl/osg-test.cpp | 2 +- src/libdm/osgl/osg_bob.cpp | 2 +- src/libdm/plot/dm-plot.c | 2 +- src/libdm/plot/dm-plot.h | 2 +- src/libdm/postscript/dm-ps.c | 2 +- src/libdm/postscript/dm-ps.h | 2 +- src/libdm/qt/dm-qt.cpp | 2 +- src/libdm/qt/dm-qt.h | 2 +- src/libdm/qt/fb_qt.h | 2 +- src/libdm/qt/if_qt.cpp | 2 +- src/libdm/rect.c | 2 +- src/libdm/scale.c | 2 +- src/libdm/tests/CMakeLists.txt | 2 +- src/libdm/tests/dm_test.c | 2 +- src/libdm/tk/dm-tk.c | 2 +- src/libdm/tk/dm-tk.h | 2 +- src/libdm/tk/if_tk.c | 2 +- src/libdm/txt/dm-txt.c | 2 +- src/libdm/txt/if_debug.c | 2 +- src/libdm/vers.c | 2 +- src/libdm/wgl/CMakeLists.txt | 3 + src/libdm/wgl/dm-wgl.c | 4 +- src/libdm/wgl/dm-wgl.h | 2 +- src/libdm/wgl/fb_wgl.h | 2 +- src/libdm/wgl/if_wgl.c | 2 +- src/libfft/ditsplit.c | 2 +- src/libfft/ditsplitc.c | 2 +- src/libfft/fftc.c | 2 +- src/libfft/fftest.c | 2 +- src/libfft/fftfast.c | 2 +- src/libfft/ifftc.c | 2 +- src/libfft/splitdit.c | 2 +- src/libfft/splitditc.c | 2 +- src/libgcv/CMakeLists.txt | 2 +- src/libgcv/bottess.c | 2 +- src/libgcv/facetize.c | 2 +- src/libgcv/gcv.c | 29 +- src/libgcv/plugins/CMakeLists.txt | 85 +- src/libgcv/plugins/asc/CMakeLists.txt | 16 +- src/libgcv/plugins/asc/asc.cpp | 2 +- src/libgcv/plugins/asc/asc_v4.cpp | 2 +- src/libgcv/plugins/asc/asc_v5.cpp | 2 +- src/libgcv/plugins/decimate/CMakeLists.txt | 24 +- src/libgcv/plugins/decimate/decimate.c | 2 +- src/libgcv/plugins/fastgen4/CMakeLists.txt | 26 +- src/libgcv/plugins/fastgen4/fastgen4_read.c | 2 +- .../plugins/fastgen4/fastgen4_write.cpp | 2 +- src/libgcv/plugins/gdal/CMakeLists.txt | 20 +- src/libgcv/plugins/gdal/gdal.cpp | 16 +- src/libgcv/plugins/gdal/gdal_ll.cpp | 14 +- src/libgcv/plugins/obj/CMakeLists.txt | 16 +- src/libgcv/plugins/obj/obj_read.c | 2 +- src/libgcv/plugins/obj/obj_write.c | 2 +- src/libgcv/plugins/obj/tri_face.c | 2 +- src/libgcv/plugins/obj/tri_face.h | 2 +- .../plugins/obj/wfobj/CMake/FindLEMON.cmake | 40 +- .../plugins/obj/wfobj/CMake/FindPERPLEX.cmake | 42 +- .../plugins/obj/wfobj/CMake/FindRE2C.cmake | 2 +- .../plugins/obj/wfobj/CMake/Path_Setup.cmake | 2 +- src/libgcv/plugins/obj/wfobj/CMakeLists.txt | 4 +- src/libgcv/plugins/obj/wfobj/obj_grammar.yy | 4 +- .../plugins/obj/wfobj/obj_grammar_decls.h | 2 +- src/libgcv/plugins/obj/wfobj/obj_parser.cpp | 2 +- src/libgcv/plugins/obj/wfobj/obj_parser.h | 2 +- .../plugins/obj/wfobj/obj_parser_state.h | 2 +- src/libgcv/plugins/obj/wfobj/obj_rules.h | 2 +- src/libgcv/plugins/obj/wfobj/obj_rules.l | 2 +- src/libgcv/plugins/obj/wfobj/obj_token_type.h | 2 +- src/libgcv/plugins/obj/wfobj/obj_util.cpp | 2 +- src/libgcv/plugins/obj/wfobj/obj_util.h | 2 +- src/libgcv/plugins/rhino/CMakeLists.txt | 24 +- src/libgcv/plugins/rhino/rhino_read.cpp | 2 +- src/libgcv/plugins/stl/CMakeLists.txt | 25 +- src/libgcv/plugins/stl/stl_read.c | 2 +- src/libgcv/plugins/stl/stl_write.c | 2 +- src/libgcv/plugins/vol/CMakeLists.txt | 22 +- src/libgcv/plugins/vol/png_read.c | 2 +- src/libgcv/plugins/vrml/CMakeLists.txt | 10 +- .../plugins/vrml/vrml_read/file_util.cpp | 2 +- src/libgcv/plugins/vrml/vrml_read/file_util.h | 2 +- src/libgcv/plugins/vrml/vrml_read/node.cpp | 2 +- src/libgcv/plugins/vrml/vrml_read/node.h | 2 +- .../plugins/vrml/vrml_read/node_type.cpp | 2 +- src/libgcv/plugins/vrml/vrml_read/node_type.h | 2 +- src/libgcv/plugins/vrml/vrml_read/parser.cpp | 2 +- src/libgcv/plugins/vrml/vrml_read/parser.h | 2 +- .../plugins/vrml/vrml_read/string_util.cpp | 2 +- .../plugins/vrml/vrml_read/string_util.h | 2 +- .../plugins/vrml/vrml_read/transform_node.cpp | 2 +- .../plugins/vrml/vrml_read/transform_node.h | 2 +- .../plugins/vrml/vrml_read/vrml_read.cpp | 2 +- src/libgcv/plugins/vrml/vrml_write.c | 2 +- src/libgcv/region_end.c | 2 +- src/libgcv/region_end_mc.c | 2 +- src/libgcv/soup.h | 2 +- src/libgcv/tests/CMakeLists.txt | 2 +- src/libgcv/tests/test_bottess.c | 2 +- src/libgcv/tri_intersect.c | 2 +- src/libgcv/tri_intersect.h | 2 +- src/libged/3ptarb/3ptarb.c | 2 +- src/libged/CMakeLists.txt | 2 + src/libged/adc/adc.c | 2 +- src/libged/adjust/adjust.c | 2 +- src/libged/ae2dir/ae2dir.c | 2 +- src/libged/analyze/CMakeLists.txt | 18 +- src/libged/analyze/analyze.cpp | 748 + src/libged/analyze/arb8.cpp | 209 + src/libged/analyze/arbn.cpp | 112 + src/libged/analyze/ars.cpp | 138 + src/libged/analyze/ged_analyze.h | 157 + src/libged/analyze/op_pnts_vol.cpp | 427 + src/libged/analyze/sketch.cpp | 68 + src/libged/analyze/superell.cpp | 139 + src/libged/analyze/{analyze.c => util.cpp} | 931 +- src/libged/annotate/annotate.c | 2 +- src/libged/arb/arb.c | 2 +- src/libged/arb/rotate_arb_face.c | 2 +- src/libged/arced/arced.c | 2 +- src/libged/arot/arot.c | 2 +- src/libged/attr/attr.cpp | 2 +- src/libged/autoview/autoview.c | 2 +- src/libged/bb/bb.c | 2 +- src/libged/bev/bev.c | 2 +- src/libged/bigE/bigE.c | 2 +- src/libged/blast/blast.c | 2 +- src/libged/bo/bo.c | 2 +- src/libged/bot/bot.cpp | 2 +- src/libged/bot/bot_condense.c | 2 +- src/libged/bot/bot_decimate.c | 2 +- src/libged/bot/bot_dump.c | 2 +- src/libged/bot/bot_face_fuse.c | 2 +- src/libged/bot/bot_face_sort.c | 2 +- src/libged/bot/bot_flip.c | 2 +- src/libged/bot/bot_fuse.c | 2 +- src/libged/bot/bot_merge.c | 2 +- src/libged/bot/bot_smooth.c | 2 +- src/libged/bot/bot_split.c | 2 +- src/libged/bot/bot_sync.c | 2 +- src/libged/bot/bot_vertex_fuse.c | 2 +- src/libged/bot/check.cpp | 2 +- src/libged/bot/edbot.c | 2 +- src/libged/bot/extrude.cpp | 2 +- src/libged/bot/ged_bot.h | 2 +- src/libged/bot/remesh.cpp | 2 +- src/libged/brep/CMakeLists.txt | 25 + src/libged/brep/brep.cpp | 8 +- src/libged/brep/conversion.cpp | 2 +- src/libged/brep/csg.cpp | 2 +- src/libged/brep/dplot.c | 799 + src/libged/brep/dplot_parser.lemon | 103 + src/libged/brep/dplot_reader.c | 124 + src/libged/brep/dplot_reader.h | 91 + src/libged/brep/dplot_scanner.perplex | 42 + src/libged/brep/ged_brep.h | 4 +- src/libged/brep/info.cpp | 2 +- src/libged/brep/intersect.cpp | 2 +- src/libged/brep/pick.cpp | 2 +- src/libged/brep/plot.cpp | 2 +- src/libged/brep/tikz.cpp | 2 +- src/libged/brep/valid.cpp | 2 +- src/libged/cat/cat.c | 2 +- src/libged/cc/cc.c | 2 +- src/libged/check/check.c | 2 +- src/libged/check/check_adj_air.c | 2 +- src/libged/check/check_centroid.c | 2 +- src/libged/check/check_exp_air.c | 2 +- src/libged/check/check_gap.c | 2 +- src/libged/check/check_mass.c | 2 +- src/libged/check/check_moments.c | 2 +- src/libged/check/check_overlaps.c | 2 +- src/libged/check/check_private.h | 2 +- src/libged/check/check_surf_area.c | 2 +- src/libged/check/check_unconf_air.c | 2 +- src/libged/check/check_volume.c | 2 +- src/libged/clone/clone.c | 2 +- src/libged/coil/coil.c | 2 +- src/libged/color/color.c | 2 +- src/libged/columns.c | 2 +- src/libged/comb/comb.c | 2 +- src/libged/comb_color/comb_color.c | 2 +- src/libged/comb_std/comb_std.c | 2 +- src/libged/combmem/combmem.c | 2 +- src/libged/concat/concat.cpp | 6 +- src/libged/constraint/constraint.c | 2 +- src/libged/copy/copy.c | 2 +- src/libged/copyeval/copyeval.c | 2 +- src/libged/copymat/copymat.c | 2 +- src/libged/cpi/cpi.c | 2 +- src/libged/dag/dag.cpp | 2 +- src/libged/dbip/dbip.c | 2 +- src/libged/debug/debug.cpp | 2 +- src/libged/debugbu/debugbu.c | 2 +- src/libged/debugdir/debugdir.c | 2 +- src/libged/debuglib/debuglib.c | 2 +- src/libged/debugnmg/debugnmg.c | 2 +- src/libged/decompose/decompose.c | 2 +- src/libged/delay/delay.c | 2 +- src/libged/dir2ae/dir2ae.c | 2 +- src/libged/display_list.c | 2 +- src/libged/draw/draw.c | 2 +- src/libged/draw/loadview.c | 2 +- src/libged/draw/preview.c | 2 +- src/libged/draw_calc.cpp | 2 +- src/libged/dsp/dsp.c | 2 +- src/libged/dump/dump.c | 2 +- src/libged/dup/dup.c | 2 +- src/libged/eac/eac.c | 2 +- src/libged/echo/echo.c | 2 +- src/libged/edarb/edarb.c | 2 +- src/libged/edcodes/edcodes.c | 2 +- src/libged/edcomb/edcomb.c | 2 +- src/libged/edit/edit.c | 2 +- src/libged/editit/editit.c | 2 +- src/libged/edmater/edmater.c | 2 +- src/libged/env/env.c | 2 +- src/libged/erase/erase.c | 2 +- src/libged/exec.cpp | 36 +- src/libged/exec_mapping.cpp | 20 +- src/libged/exists/exists.c | 2 +- src/libged/expand/expand.c | 2 +- src/libged/eye_pos/eye_pos.c | 2 +- src/libged/facedef.c | 2 +- src/libged/facetize/facetize.cpp | 2 +- src/libged/facetize/facetize_log.c | 2 +- src/libged/fb2pix/fb2pix.c | 2 +- src/libged/fbclear/fbclear.c | 2 +- src/libged/find/find.c | 2 +- src/libged/form/form.c | 2 +- src/libged/fracture/fracture.c | 2 +- src/libged/gdiff/gdiff.c | 381 +- src/libged/ged.c | 185 +- src/libged/ged_init.cpp | 139 +- src/libged/ged_private.h | 28 +- src/libged/ged_util.c | 118 +- src/libged/get/get.c | 2 +- src/libged/get_autoview/get_autoview.c | 2 +- src/libged/get_comb/get_comb.c | 2 +- src/libged/get_eyemodel/get_eyemodel.c | 2 +- src/libged/get_obj_bounds.c | 2 +- src/libged/get_solid_kp.c | 2 +- src/libged/get_type/get_type.c | 2 +- src/libged/glob/glob.c | 2 +- src/libged/gqa/CMakeLists.txt | 6 +- src/libged/gqa/{gqa.c => gqa.cpp} | 55 +- src/libged/grid/grid.c | 2 +- src/libged/grid2model_lu/grid2model_lu.c | 2 +- src/libged/grid2view_lu/grid2view_lu.c | 2 +- src/libged/group/group.c | 2 +- src/libged/heal/heal.c | 2 +- src/libged/help/help.cpp | 4 +- src/libged/help/test_help.c | 2 +- src/libged/hide/hide.c | 2 +- src/libged/how/how.c | 2 +- src/libged/human/human.c | 2 +- src/libged/illum/illum.c | 2 +- .../importFg4Section/importFg4Section.c | 2 +- src/libged/include/plugin.h | 2 +- src/libged/inside.c | 2 +- src/libged/inside/inside.c | 2 +- src/libged/instance/instance.c | 2 +- src/libged/isize/isize.c | 2 +- src/libged/item/item.c | 2 +- src/libged/joint/joint.c | 2 +- src/libged/joint/joint.h | 2 +- src/libged/joint2/joint2.c | 2 +- src/libged/keep/keep.c | 2 +- src/libged/keypoint/keypoint.c | 2 +- src/libged/kill/kill.c | 7 +- src/libged/killall/killall.c | 2 +- src/libged/killrefs/killrefs.c | 2 +- src/libged/killtree/killtree.c | 2 +- src/libged/label/label.c | 2 +- src/libged/lc/lc.c | 2 +- src/libged/libfuncs/libfuncs.c | 2 +- src/libged/lint/lint.cpp | 3 +- src/libged/list/list.c | 2 +- src/libged/lod/lod.c | 2 +- src/libged/log/log.c | 2 +- src/libged/lookat/lookat.c | 2 +- src/libged/ls/ls.c | 2 +- src/libged/lt/lt.c | 2 +- src/libged/m2v_point/m2v_point.c | 2 +- src/libged/make/make.c | 2 +- src/libged/make_name/make_name.c | 2 +- src/libged/match/match.c | 2 +- src/libged/mater/mater.cpp | 2 +- src/libged/metaball/metaball.c | 2 +- src/libged/mirror/mirror.c | 2 +- src/libged/model2grid_lu/model2grid_lu.c | 2 +- src/libged/model2view/model2view.c | 2 +- src/libged/model2view_lu/model2view_lu.c | 2 +- src/libged/move/move.c | 2 +- src/libged/move_all/move_all.c | 103 +- src/libged/move_arb_edge/move_arb_edge.c | 2 +- src/libged/move_arb_face/move_arb_face.c | 2 +- src/libged/mrot/mrot.c | 2 +- src/libged/nirt/nirt.c | 2 +- src/libged/nmg/nmg.c | 2 +- src/libged/nmg/nmg_cmface.c | 2 +- src/libged/nmg/nmg_collapse.c | 2 +- src/libged/nmg/nmg_fix_normals.c | 2 +- src/libged/nmg/nmg_kill_f.c | 2 +- src/libged/nmg/nmg_kill_v.c | 2 +- src/libged/nmg/nmg_make_v.c | 2 +- src/libged/nmg/nmg_mm.c | 2 +- src/libged/nmg/nmg_move_v.c | 2 +- src/libged/nmg/nmg_simplify.c | 2 +- src/libged/npush/CMakeLists.txt | 26 + src/libged/npush/npush.cpp | 1466 ++ src/libged/ocenter/ocenter.c | 2 +- src/libged/open/open.c | 2 +- src/libged/orient/orient.c | 2 +- src/libged/orotate/orotate.c | 2 +- src/libged/oscale/oscale.c | 2 +- src/libged/osg.cpp | 2 +- src/libged/otranslate/otranslate.c | 2 +- src/libged/overlay/overlay.c | 4 +- src/libged/path.c | 2 +- src/libged/pathlist/pathlist.c | 2 +- src/libged/pathsum/pathsum.c | 2 +- src/libged/perspective/perspective.c | 2 +- src/libged/pipe.c | 2 +- src/libged/pipe/pipe.c | 2 +- src/libged/pix2fb/pix2fb.c | 2 +- src/libged/plot/plot.c | 2 +- src/libged/pmat/pmat.c | 2 +- src/libged/pmodel2view/pmodel2view.c | 2 +- src/libged/png/png.c | 2 +- src/libged/png2fb/png2fb.c | 2 +- src/libged/pnts/pnts.cpp | 2 +- src/libged/pnts_util.c | 87 +- src/libged/pnts_util.h | 4 +- src/libged/polyclip.cpp | 2 +- src/libged/prcolor/prcolor.c | 2 +- src/libged/prefix/prefix.c | 2 +- src/libged/process/process.c | 2 +- src/libged/protate/protate.c | 2 +- src/libged/ps/ps.c | 2 +- src/libged/pscale/pscale.c | 2 +- src/libged/pscale/pscale.h | 2 +- src/libged/pscale/scale_ehy.c | 2 +- src/libged/pscale/scale_ell.c | 2 +- src/libged/pscale/scale_epa.c | 2 +- src/libged/pscale/scale_eto.c | 2 +- src/libged/pscale/scale_extrude.c | 2 +- src/libged/pscale/scale_hyp.c | 2 +- src/libged/pscale/scale_part.c | 2 +- src/libged/pscale/scale_rhc.c | 2 +- src/libged/pscale/scale_rpc.c | 2 +- src/libged/pscale/scale_superell.c | 2 +- src/libged/pscale/scale_tgc.c | 2 +- src/libged/pscale/scale_tor.c | 2 +- src/libged/pset/pset.c | 2 +- src/libged/ptranslate/ptranslate.c | 2 +- src/libged/pull/pull.c | 2 +- src/libged/push/push.c | 2 +- src/libged/put/put.c | 2 +- src/libged/put_comb/put_comb.c | 2 +- src/libged/putmat/putmat.c | 2 +- src/libged/qray.c | 2 +- src/libged/qray.h | 2 +- src/libged/qray/qray.c | 2 +- src/libged/qvrot/qvrot.c | 2 +- src/libged/rcodes/rcodes.c | 2 +- src/libged/rect/rect.c | 2 +- src/libged/red/red.c | 2 +- src/libged/regdef/regdef.c | 2 +- src/libged/region/region.c | 2 +- src/libged/remove/remove.c | 2 +- src/libged/rfarb/rfarb.c | 2 +- src/libged/rmap/rmap.c | 2 +- src/libged/rmat/rmat.c | 2 +- src/libged/rmater/rmater.c | 2 +- src/libged/rot/rot.c | 2 +- src/libged/rot/rotate_about.c | 2 +- src/libged/rot_point/rot_point.c | 2 +- src/libged/rotate_eto.c | 2 +- src/libged/rotate_extrude.c | 2 +- src/libged/rotate_hyp.c | 2 +- src/libged/rotate_tgc.c | 2 +- src/libged/rrt/rrt.c | 2 +- src/libged/rt/rt.c | 4 +- src/libged/rtabort/rtabort.c | 2 +- src/libged/rtcheck/rtcheck.c | 8 +- src/libged/rtwizard/rtwizard.c | 7 +- src/libged/savekey/savekey.c | 2 +- src/libged/saveview/saveview.c | 2 +- src/libged/scale/scale.c | 2 +- src/libged/screengrab/screengrab.c | 2 +- src/libged/search/search.c | 216 +- src/libged/select/select.c | 2 +- .../set_output_script/set_output_script.c | 2 +- .../set_transparency/set_transparency.c | 2 +- .../set_uplotOutputMode/set_uplotOutputMode.c | 2 +- src/libged/setview/setview.c | 2 +- src/libged/shaded_mode/shaded_mode.c | 2 +- src/libged/shader/shader.c | 2 +- src/libged/shells/shells.c | 2 +- src/libged/showmats/showmats.c | 2 +- src/libged/simulate/ged_command.cpp | 2 +- .../simulate/rt_collision_algorithm.cpp | 2 +- .../simulate/rt_collision_algorithm.hpp | 2 +- src/libged/simulate/rt_collision_shape.cpp | 2 +- src/libged/simulate/rt_collision_shape.hpp | 2 +- src/libged/simulate/rt_debug_draw.cpp | 2 +- src/libged/simulate/rt_debug_draw.hpp | 2 +- src/libged/simulate/rt_instance.cpp | 2 +- src/libged/simulate/rt_instance.hpp | 2 +- src/libged/simulate/rt_motion_state.cpp | 2 +- src/libged/simulate/rt_motion_state.hpp | 2 +- src/libged/simulate/simulation.cpp | 2 +- src/libged/simulate/simulation.hpp | 2 +- src/libged/simulate/tests/CMakeLists.txt | 2 +- src/libged/simulate/tests/simulate_test.cpp | 2 +- src/libged/simulate/utility.cpp | 2 +- src/libged/simulate/utility.hpp | 2 +- src/libged/slew/slew.c | 2 +- src/libged/snap.c | 2 +- src/libged/solid_report/solid_report.c | 2 +- src/libged/solids_on_ray/solids_on_ray.c | 2 +- src/libged/sphgroup/sphgroup.c | 2 +- src/libged/stat/CMakeLists.txt | 28 + src/libged/stat/fort.c | 7741 ++++++ src/libged/stat/fort.h | 1046 + src/libged/stat/stat.cpp | 645 + src/libged/summary/summary.c | 2 +- src/libged/sync/sync.c | 2 +- src/libged/tables/tables.c | 2 +- src/libged/tests/CMakeLists.txt | 5 +- src/libged/tests/ged_tests.g | Bin 256 -> 568 bytes src/libged/tests/plugins.cpp | 22 +- src/libged/tests/pnts_in_out.g | Bin 0 -> 496 bytes src/libged/tests/test_list.c | 2 +- src/libged/tests/test_tops.c | 2 +- src/libged/tire/tire.c | 2 +- src/libged/title/title.c | 2 +- src/libged/tol/tol.c | 2 +- src/libged/tops/tops.c | 2 +- src/libged/tra/tra.c | 2 +- src/libged/trace.c | 2 +- src/libged/track.c | 2 +- src/libged/track/track.c | 2 +- src/libged/translate_extrude.c | 2 +- src/libged/translate_tgc.c | 2 +- src/libged/tree/tree.c | 209 +- src/libged/typein/typein.c | 33 +- src/libged/unhide/unhide.c | 2 +- src/libged/units/units.c | 2 +- src/libged/v2m_point/v2m_point.c | 2 +- src/libged/vdraw/vdraw.c | 2 +- src/libged/version/version.c | 2 +- src/libged/view/aet.c | 2 +- src/libged/view/center.cpp | 2 +- src/libged/view/data_lines.c | 2 +- src/libged/view/eye.c | 2 +- src/libged/view/ged_view.h | 2 +- src/libged/view/quat.c | 2 +- src/libged/view/size.c | 2 +- src/libged/view/snap.c | 2 +- src/libged/view/view.c | 2 +- src/libged/view/ypr.c | 2 +- src/libged/view2grid_lu/view2grid_lu.c | 2 +- src/libged/view2model/view2model.c | 2 +- src/libged/view2model_lu/view2model_lu.c | 2 +- src/libged/view2model_vec/view2model_vec.c | 2 +- src/libged/viewdir/viewdir.c | 2 +- src/libged/voxelize/voxelize.c | 2 +- src/libged/vrot/vrot.c | 2 +- src/libged/vutil.c | 2 +- src/libged/wcodes/wcodes.c | 2 +- src/libged/wdb_importFg4Section.c | 2 +- src/libged/whatid/whatid.c | 2 +- src/libged/which/which.cpp | 15 +- src/libged/which_shader/which_shader.c | 2 +- src/libged/who/who.c | 2 +- src/libged/wmater/wmater.c | 2 +- src/libged/xpush/xpush.c | 11 +- src/libged/zap/zap.c | 2 +- src/libged/zoom/zoom.c | 2 +- src/libicv/bw.c | 2 +- src/libicv/color_space.c | 2 +- src/libicv/crop.c | 2 +- src/libicv/dpix.c | 2 +- src/libicv/encoding.c | 2 +- src/libicv/fileformat.c | 2 +- src/libicv/filter.c | 2 +- src/libicv/icv_private.h | 2 +- src/libicv/operations.c | 2 +- src/libicv/pix.c | 2 +- src/libicv/png.c | 2 +- src/libicv/ppm.c | 2 +- src/libicv/rot.c | 2 +- src/libicv/size.c | 2 +- src/libicv/stat.c | 2 +- src/libicv/tests/crop.c | 2 +- src/libicv/tests/fade.c | 2 +- src/libicv/tests/filter.c | 2 +- src/libicv/tests/operations.c | 2 +- src/libicv/tests/read_write.c | 2 +- src/libicv/tests/rect.c | 2 +- src/libicv/tests/saturate.c | 2 +- src/libicv/tests/size_down.c | 2 +- src/libicv/tests/size_up.c | 2 +- src/libnmg/alloc.cpp | 2 +- src/libnmg/bool.c | 2 +- src/libnmg/ck.c | 2 +- src/libnmg/class.c | 2 +- src/libnmg/copy.c | 2 +- src/libnmg/eval.c | 2 +- src/libnmg/extrude.c | 2 +- src/libnmg/fcut.c | 2 +- src/libnmg/fuse.c | 2 +- src/libnmg/index.c | 2 +- src/libnmg/info.c | 2 +- src/libnmg/inter.c | 2 +- src/libnmg/isect.c | 2 +- src/libnmg/junk.c | 2 +- src/libnmg/manif.c | 2 +- src/libnmg/mesh.c | 2 +- src/libnmg/misc.c | 2 +- src/libnmg/mk.c | 2 +- src/libnmg/mod.c | 2 +- src/libnmg/nurb_basis.c | 2 +- src/libnmg/nurb_bezier.c | 2 +- src/libnmg/nurb_bound.c | 2 +- src/libnmg/nurb_c2.c | 2 +- src/libnmg/nurb_copy.c | 2 +- src/libnmg/nurb_diff.c | 2 +- src/libnmg/nurb_eval.c | 2 +- src/libnmg/nurb_flat.c | 2 +- src/libnmg/nurb_interp.c | 2 +- src/libnmg/nurb_knot.c | 2 +- src/libnmg/nurb_norm.c | 2 +- src/libnmg/nurb_oslo_calc.c | 2 +- src/libnmg/nurb_oslo_map.c | 2 +- src/libnmg/nurb_plot.c | 2 +- src/libnmg/nurb_poly.c | 2 +- src/libnmg/nurb_ray.c | 2 +- src/libnmg/nurb_refine.c | 2 +- src/libnmg/nurb_reverse.c | 2 +- src/libnmg/nurb_solve.c | 2 +- src/libnmg/nurb_split.c | 2 +- src/libnmg/nurb_tess.c | 2 +- src/libnmg/nurb_trim.c | 2 +- src/libnmg/nurb_trim_util.c | 2 +- src/libnmg/nurb_util.c | 2 +- src/libnmg/nurb_xsplit.c | 2 +- src/libnmg/plot.c | 2 +- src/libnmg/pr.c | 2 +- src/libnmg/pt_fu.c | 2 +- src/libnmg/tests/CMakeLists.txt | 4 +- src/libnmg/tests/nmg_copy.c | 2 +- src/libnmg/tests/nmg_mk.c | 2 +- src/libnmg/tri.c | 2 +- src/libnmg/visit.c | 2 +- src/liboptical/init.c | 2 +- src/liboptical/liboslrend.cpp | 2 +- src/liboptical/liboslrend.h | 2 +- src/liboptical/material.c | 115 +- src/liboptical/photonmap.c | 2 +- src/liboptical/refract.c | 2 +- src/liboptical/render_svc.cpp | 2 +- src/liboptical/render_svc.h | 2 +- src/liboptical/sh_air.c | 2 +- src/liboptical/sh_billboard.c | 2 +- src/liboptical/sh_brdf.c | 2 +- src/liboptical/sh_camo.c | 2 +- src/liboptical/sh_cloud.c | 2 +- src/liboptical/sh_cook.c | 2 +- src/liboptical/sh_fbm.c | 2 +- src/liboptical/sh_fire.c | 2 +- src/liboptical/sh_flat.c | 2 +- src/liboptical/sh_gauss.c | 2 +- src/liboptical/sh_grass.c | 2 +- src/liboptical/sh_light.c | 2 +- src/liboptical/sh_noise.c | 2 +- src/liboptical/sh_null.c | 2 +- src/liboptical/sh_osl.cpp | 2 +- src/liboptical/sh_plastic.c | 2 +- src/liboptical/sh_points.c | 2 +- src/liboptical/sh_prj.c | 2 +- src/liboptical/sh_rtrans.c | 2 +- src/liboptical/sh_scloud.c | 2 +- src/liboptical/sh_spm.c | 2 +- src/liboptical/sh_stack.c | 2 +- src/liboptical/sh_stxt.c | 2 +- src/liboptical/sh_tcl.c | 2 +- src/liboptical/sh_text.c | 2 +- src/liboptical/sh_toon.c | 2 +- src/liboptical/sh_toyota.c | 2 +- src/liboptical/sh_treetherm.c | 2 +- src/liboptical/sh_xxx.c | 6 +- src/liboptical/shade.c | 2 +- src/liboptical/vers.c | 2 +- src/liboptical/wray.c | 2 +- src/libpc/gecode_librt_test.cpp | 2 +- src/libpc/gecode_solver_test.cpp | 2 +- src/libpc/solver_test.cpp | 2 +- src/libpc/vm_test.cpp | 2 +- src/libpkg/example/client.c | 2 +- src/libpkg/example/ncp.h | 2 +- src/libpkg/example/server.c | 2 +- src/libpkg/pkg.c | 2 +- src/libpkg/tpkg.c | 2 +- src/libpkg/vers.c | 2 +- src/librt/CMakeLists.txt | 37 +- src/librt/attributes.c | 2 +- src/librt/bbox.c | 2 +- src/librt/binunif/binunif.c | 2 +- src/librt/binunif/db5_bin.c | 2 +- src/librt/bool.c | 2 +- src/librt/bundle.c | 2 +- src/librt/cache.c | 2 +- src/librt/cache.h | 2 +- src/librt/cmd.c | 2 +- src/librt/comb/comb.c | 2 +- src/librt/comb/comb_brep.cpp | 2 +- src/librt/comb/comb_mirror.c | 2 +- src/librt/comb/db_comb.c | 2 +- src/librt/constraint.c | 2 +- src/librt/cut.c | 2 +- src/librt/db5_alloc.c | 2 +- src/librt/db5_attr.c | 2 +- src/librt/db5_attr_registry.cpp | 2 +- src/librt/db5_io.c | 122 +- src/librt/db5_scan.c | 2 +- src/librt/db5_size.cpp | 2 +- src/librt/db5_types.c | 2 +- src/librt/db_alloc.c | 2 +- src/librt/db_anim.c | 2 +- src/librt/db_corrupt.c | 2 +- src/librt/db_diff.c | 2 +- src/librt/db_flags.c | 2 +- src/librt/db_flip.c | 2 +- src/librt/db_fp.cpp | 2 +- src/librt/db_fullpath.c | 6 +- src/librt/db_inmem.c | 2 +- src/librt/db_io.c | 2 +- src/librt/db_lookup.c | 2 +- src/librt/db_match.c | 2 +- src/librt/db_open.c | 7 +- src/librt/db_scan.c | 2 +- src/librt/db_tree.c | 2 +- src/librt/db_walk.c | 2 +- src/librt/dir.c | 10 +- src/librt/dspline.c | 2 +- src/librt/fortray.c | 2 +- .../libgdiam => librt/gdiam}/LICENSE.MIT | 0 src/{other/libgdiam => librt/gdiam}/README | 0 src/{other/libgdiam => librt/gdiam}/gdiam.cpp | 95 +- src/librt/gdiam/gdiam.hpp | 727 + .../libgdiam => librt/gdiam}/gdiam_test.cpp | 31 +- src/librt/globals.c | 2 +- src/librt/htbl.c | 2 +- src/librt/librt_private.h | 2 +- src/librt/ls.c | 2 +- src/librt/mater.c | 2 +- src/librt/memalloc.c | 2 +- src/librt/mkbundle.c | 2 +- src/librt/nurb_example.c | 2 +- src/librt/op.c | 2 +- src/librt/pr.c | 2 +- src/librt/prcomb.c | 2 +- src/librt/prep.c | 2 +- src/librt/primitives/annot/annot.c | 2 +- src/librt/primitives/arb8/arb8.c | 2 +- src/librt/primitives/arb8/arb8_brep.cpp | 2 +- src/librt/primitives/arb8/arb8_mirror.c | 2 +- src/librt/primitives/arb8/arb_edit.c | 2 +- src/librt/primitives/arbn/arbn.c | 17 +- src/librt/primitives/arbn/arbn_brep.cpp | 2 +- src/librt/primitives/arbn/arbn_mirror.c | 2 +- src/librt/primitives/ars/ars.c | 2 +- src/librt/primitives/ars/ars_brep.cpp | 2 +- src/librt/primitives/ars/ars_mirror.c | 2 +- src/librt/primitives/bot/bot.c | 38 +- src/librt/primitives/bot/bot_brep.cpp | 2 +- src/librt/primitives/bot/bot_edge.c | 2 +- src/librt/primitives/bot/bot_edge.h | 2 +- src/librt/primitives/bot/bot_mirror.c | 2 +- .../primitives/bot/bot_oriented_bbox.cpp | 2 +- src/librt/primitives/bot/bot_wireframe.cpp | 2 +- src/librt/primitives/bot/btg.c | 2 +- src/librt/primitives/bot/btg.h | 2 +- src/librt/primitives/bot/btgf.c | 2 +- src/librt/primitives/bot/decimate.c | 2 +- src/librt/primitives/bot/g_bot_include.c | 2 +- src/librt/primitives/bot/tie.c | 2 +- src/librt/primitives/bot/tie_kdtree.c | 2 +- src/librt/primitives/bot/tieprivate.h | 2 +- src/librt/primitives/brep/brep.cpp | 2 +- src/librt/primitives/brep/brep_debug.h | 2 +- src/librt/primitives/brep/brep_local.h | 2 +- src/librt/primitives/bspline/bspline.cpp | 2 +- src/librt/primitives/bspline/bspline_brep.cpp | 2 +- src/librt/primitives/bspline/bspline_mirror.c | 2 +- src/librt/primitives/cline/cline.c | 2 +- src/librt/primitives/cline/cline_brep.cpp | 2 +- src/librt/primitives/datum/datum.c | 2 +- src/librt/primitives/datum/datum.h | 2 +- src/librt/primitives/dsp/dsp.c | 2 +- src/librt/primitives/dsp/dsp.h | 2 +- src/librt/primitives/dsp/dsp_brep.cpp | 10 +- src/librt/primitives/dsp/dsp_mirror.c | 2 +- src/librt/primitives/ebm/ebm.c | 2 +- src/librt/primitives/ebm/ebm_brep.cpp | 2 +- src/librt/primitives/ebm/ebm_mirror.c | 2 +- src/librt/primitives/ehy/ehy.c | 2 +- src/librt/primitives/ehy/ehy_brep.cpp | 2 +- src/librt/primitives/ell/ell.c | 2 +- src/librt/primitives/ell/ell_brep.cpp | 2 +- src/librt/primitives/ell/ell_mirror.c | 2 +- src/librt/primitives/epa/epa.c | 2 +- src/librt/primitives/epa/epa_brep.cpp | 2 +- src/librt/primitives/epa/epa_mirror.c | 2 +- src/librt/primitives/eto/eto.c | 2 +- src/librt/primitives/eto/eto_brep.cpp | 2 +- src/librt/primitives/eto/eto_mirror.c | 2 +- src/librt/primitives/extrude/extrude.c | 2 +- src/librt/primitives/extrude/extrude_brep.cpp | 2 +- src/librt/primitives/fixpt.h | 2 +- src/librt/primitives/generic.c | 2 +- src/librt/primitives/grip/grip.c | 2 +- src/librt/primitives/grip/grip_brep.cpp | 2 +- src/librt/primitives/grip/grip_mirror.c | 2 +- src/librt/primitives/half/half.c | 2 +- src/librt/primitives/half/half_brep.cpp | 2 +- src/librt/primitives/half/half_mirror.c | 2 +- src/librt/primitives/hf/hf.c | 2 +- src/librt/primitives/hf/hf_brep.cpp | 2 +- src/librt/primitives/hrt/hrt.c | 2 +- src/librt/primitives/hrt/hrt_mirror.c | 2 +- src/librt/primitives/hyp/hyp.c | 2 +- src/librt/primitives/hyp/hyp_brep.cpp | 2 +- src/librt/primitives/hyp/hyp_mirror.c | 2 +- src/librt/primitives/joint/joint.c | 2 +- src/librt/primitives/joint/joint_brep.cpp | 2 +- src/librt/primitives/joint/joint_mirror.c | 2 +- src/librt/primitives/metaball/metaball.c | 2 +- src/librt/primitives/metaball/metaball.h | 2 +- src/librt/primitives/metaball/metaball_tri.c | 2 +- src/librt/primitives/mirror.c | 2 +- src/librt/primitives/nmg/nmg.c | 2 +- src/librt/primitives/nmg/nmg_brep.cpp | 2 +- src/librt/primitives/nmg/nmg_mirror.c | 2 +- src/librt/primitives/nmg/nmg_tri_mc.c | 2 +- src/librt/primitives/obj_adjust.c | 2 +- src/librt/primitives/obj_curve.c | 2 +- src/librt/primitives/obj_describe.c | 2 +- src/librt/primitives/obj_export.c | 2 +- src/librt/primitives/obj_free.c | 2 +- src/librt/primitives/obj_get.c | 2 +- src/librt/primitives/obj_ifree.c | 2 +- src/librt/primitives/obj_import.c | 2 +- src/librt/primitives/obj_make.c | 2 +- src/librt/primitives/obj_mirror.c | 2 +- src/librt/primitives/obj_norm.c | 2 +- src/librt/primitives/obj_params.c | 2 +- src/librt/primitives/obj_plot.c | 2 +- src/librt/primitives/obj_prep.c | 2 +- src/librt/primitives/obj_print.c | 2 +- src/librt/primitives/obj_shot.c | 2 +- src/librt/primitives/obj_tess.c | 2 +- src/librt/primitives/obj_tnurb.c | 2 +- src/librt/primitives/obj_uv.c | 2 +- src/librt/primitives/obj_vshot.c | 2 +- src/librt/primitives/obj_xform.c | 2 +- src/librt/primitives/part/part.c | 2 +- src/librt/primitives/part/part_brep.cpp | 2 +- src/librt/primitives/part/part_mirror.c | 2 +- src/librt/primitives/pipe/pipe.c | 2 +- src/librt/primitives/pipe/pipe_brep.cpp | 2 +- src/librt/primitives/pipe/pipe_mirror.c | 2 +- src/librt/primitives/pnts/pnts.c | 2 +- src/librt/primitives/pnts/pnts_brep.cpp | 2 +- src/librt/primitives/poly/poly.c | 2 +- src/librt/primitives/poly/poly_brep.cpp | 2 +- src/librt/primitives/poly/poly_mirror.c | 2 +- src/librt/primitives/primitive_util.c | 7 +- src/librt/primitives/rec/rec.c | 2 +- src/librt/primitives/revolve/revolve.c | 2 +- src/librt/primitives/revolve/revolve.h | 2 +- src/librt/primitives/revolve/revolve_brep.cpp | 6 +- src/librt/primitives/rhc/rhc.c | 2 +- src/librt/primitives/rhc/rhc_brep.cpp | 2 +- src/librt/primitives/rhc/rhc_mirror.c | 2 +- src/librt/primitives/rpc/rpc.c | 2 +- src/librt/primitives/rpc/rpc_brep.cpp | 2 +- src/librt/primitives/rpc/rpc_mirror.c | 2 +- src/librt/primitives/script/script.c | 2 +- src/librt/primitives/sketch/sketch.c | 2 +- src/librt/primitives/sketch/sketch_brep.cpp | 4 +- src/librt/primitives/sketch/sketch_tess.cpp | 2 +- src/librt/primitives/sph/sph.c | 2 +- src/librt/primitives/sph/sph_brep.cpp | 2 +- src/librt/primitives/submodel/submodel.c | 2 +- src/librt/primitives/superell/superell.c | 2 +- .../primitives/superell/superell_brep.cpp | 2 +- .../primitives/superell/superell_mirror.c | 2 +- src/librt/primitives/table.cpp | 2 +- src/librt/primitives/tgc/tgc.c | 2 +- src/librt/primitives/tgc/tgc_brep.cpp | 2 +- src/librt/primitives/tgc/tgc_mirror.c | 2 +- src/librt/primitives/tor/tor.c | 2 +- src/librt/primitives/tor/tor_brep.cpp | 2 +- src/librt/primitives/tor/tor_mirror.c | 2 +- src/librt/primitives/vol/vol.c | 202 +- src/librt/primitives/vol/vol_brep.cpp | 2 +- src/librt/primitives/vol/vol_mirror.c | 2 +- src/librt/primitives/xxx/xxx.c | 2 +- src/librt/primitives/xxx/xxx.h | 2 +- src/librt/raydebug.tcl | 2 +- src/librt/reduce.c | 2 +- src/librt/reduce_db.cpp | 2 +- src/librt/regionfix.c | 2 +- src/librt/roots.c | 2 +- src/librt/search.c | 75 +- src/librt/search.h | 2 +- src/librt/shoot.c | 2 +- src/librt/test_bot2nurbs.cpp | 2 +- src/librt/test_brepreport.cpp | 2 +- src/librt/test_dbio.c | 2 +- src/librt/test_nurbsfit.cpp | 2 +- src/librt/test_root3-subd.cpp | 2 +- src/librt/tests/CMakeLists.txt | 26 +- src/librt/tests/binary_attribute.c | 2 +- src/librt/tests/bundle.c | 2 +- src/librt/tests/cache.cpp | 2 +- src/librt/tests/db5_size.c | 2 +- src/librt/tests/diff.c | 2 +- src/librt/tests/dvec.cpp | 2 +- src/librt/tests/nurbs_tests.cpp | 2 +- src/librt/tests/rt_datum.c | 2 +- src/librt/tests/rt_pattern.c | 2 +- src/librt/tests/ssi.cpp | 2 +- src/librt/timer-nt.c | 107 - src/librt/timer.cpp | 125 + src/librt/timer42.c | 249 - src/librt/timerunix.c | 136 - src/librt/tol.c | 2 +- src/librt/transform.c | 2 +- src/librt/tree.c | 2 +- src/librt/uv.c | 2 +- src/librt/uvpoints.cpp | 2 +- src/{other/libvds => librt/vds}/COPYING | 0 src/{other/libvds => librt/vds}/README | 0 src/{other/libvds => librt/vds}/vds.c | 462 +- src/{other/libvds => librt/vds}/vds.h | 163 +- src/librt/vers.c | 2 +- src/librt/vlist.c | 2 +- src/librt/vshoot.c | 2 +- src/librt/wdb.c | 2 +- src/libtclcad/CMakeLists.txt | 12 +- src/libtclcad/auto_path.c | 468 +- src/libtclcad/bn.c | 2 +- src/libtclcad/bu.c | 49 +- src/libtclcad/cmdhist.c | 2 +- src/libtclcad/command_io.cpp | 223 + src/libtclcad/commands.c | 2565 +- src/libtclcad/dm.c | 2 +- src/libtclcad/eval.c | 2 +- src/libtclcad/fb.c | 2 +- src/libtclcad/fbserv.c | 2 +- src/libtclcad/global.c | 2 +- src/libtclcad/init.c | 34 +- src/libtclcad/mouse.c | 2 +- src/libtclcad/polygons.c | 2 +- src/libtclcad/rt.c | 2 +- src/libtclcad/tclcad_private.h | 2 +- src/libtclcad/tkImgFmtPIX.c | 2 +- src/libtclcad/view/arrows.c | 2 +- src/libtclcad/view/autoview.c | 2 +- src/libtclcad/view/axes.c | 2 +- src/libtclcad/view/draw.c | 2 +- src/libtclcad/view/faceplate.c | 2 +- src/libtclcad/view/labels.c | 2 +- src/libtclcad/view/lines.c | 2 +- src/libtclcad/view/refresh.c | 2 +- src/libtclcad/view/util.c | 2 +- src/libtclcad/view/view.h | 2 +- src/libtclcad/wrapper.c | 2 +- src/libtermio/termio.c | 2 +- src/libwdb/annot.c | 2 +- src/libwdb/arbn.c | 2 +- src/libwdb/ars.c | 2 +- src/libwdb/bot.c | 2 +- src/libwdb/brep.cpp | 2 +- src/libwdb/cline.c | 2 +- src/libwdb/constraint.c | 2 +- src/libwdb/datum.c | 2 +- src/libwdb/dsp.c | 2 +- src/libwdb/dynamic_geometry.c | 2 +- src/libwdb/ebm.c | 2 +- src/libwdb/export.c | 2 +- src/libwdb/extrude.c | 2 +- src/libwdb/id.c | 2 +- src/libwdb/mater.c | 2 +- src/libwdb/nmg.c | 2 +- src/libwdb/nurb.c | 2 +- src/libwdb/pipe.c | 2 +- src/libwdb/reg.c | 2 +- src/libwdb/script.c | 2 +- src/libwdb/sketch.c | 2 +- src/libwdb/submodel.c | 2 +- src/libwdb/units.c | 2 +- src/libwdb/vol.c | 10 +- src/libwdb/wdb.c | 2 +- src/mged/CMakeLists.txt | 2 +- src/mged/adc.c | 2 +- src/mged/arbs.c | 2 +- src/mged/attach.c | 71 +- src/mged/axes.c | 2 +- src/mged/bool_rewrite.c | 2 +- src/mged/buttons.c | 2 +- src/mged/cad_boundp.c | 2 +- src/mged/cad_parea.c | 2 +- src/mged/chgmodel.c | 2 +- src/mged/chgtree.c | 2 +- src/mged/chgview.c | 2 +- src/mged/clone.c | 2 +- src/mged/cmd.c | 3 +- src/mged/cmd.h | 3 +- src/mged/color_scheme.c | 2 +- src/mged/columns.c | 2 +- src/mged/comb_bool.h | 2 +- src/mged/comb_bool_parse.y | 2 +- src/mged/comb_bool_scan.l | 2 +- src/mged/dm-generic.c | 2 +- src/mged/dodraw.c | 6 +- src/mged/doevent.c | 2 +- src/mged/dozoom.c | 2 +- src/mged/edarb.c | 2 +- src/mged/edars.c | 2 +- src/mged/edpipe.c | 2 +- src/mged/edsol.c | 12 +- src/mged/facedef.c | 2 +- src/mged/fbserv.c | 2 +- src/mged/grid.c | 2 +- src/mged/history.c | 2 +- src/mged/htmlLibraryUi.h | 2 +- src/mged/mater.c | 2 +- src/mged/menu.c | 2 +- src/mged/menu.h | 2 +- src/mged/mged.c | 43 +- src/mged/mged.h | 2 +- src/mged/mged_dm.h | 2 +- src/mged/mover.c | 2 +- src/mged/overlay.c | 2 +- src/mged/plot.c | 6 +- src/mged/predictor.c | 2 +- src/mged/qray.h | 2 +- src/mged/rect.c | 2 +- src/mged/red.c | 2 +- src/mged/rtif.c | 2 +- src/mged/scroll.c | 2 +- src/mged/scroll.h | 2 +- src/mged/sedit.h | 2 +- src/mged/set.c | 7 +- src/mged/setup.c | 6 +- src/mged/share.c | 2 +- src/mged/tedit.c | 2 +- src/mged/titles.c | 2 +- src/mged/titles.h | 2 +- src/mged/track.c | 2 +- src/mged/update.c | 2 +- src/mged/usepen.c | 2 +- src/mged/utility1.c | 2 +- src/mged/vparse.c | 2 +- src/mged/wdb_obj.c | 2 +- src/nirt/bsphere.c | 2 +- src/nirt/command.c | 2 +- src/nirt/conversion.c | 2 +- src/nirt/if.c | 2 +- src/nirt/interact.c | 2 +- src/nirt/main.cpp | 8 +- src/nirt/nirt.c | 6 +- src/nirt/nirt.h | 2 +- src/nirt/parse_fmt.c | 2 +- src/nirt/read_mat.c | 2 +- src/nirt/showshot.c | 2 +- src/nirt/str_manip.c | 2 +- src/nirt/usrfmt.h | 2 +- src/other/CMakeLists.txt | 119 +- src/other/gct/CMakeLists.txt | 5 +- src/other/gdal/CMakeLists.txt | 8 +- src/other/itcl3/CMakeLists.txt | 2 +- src/other/itk3/CMakeLists.txt | 2 +- src/other/iwidgets/CMakeLists.txt | 2 +- src/other/libbson/CMakeLists.txt | 2 +- src/other/libgdiam.dist | 8 - src/other/libgdiam/CMakeLists.txt | 69 - src/other/libgdiam/gdiam.hpp | 728 - src/other/libnetpbm/CMakeLists.txt | 2 +- src/other/libpng/CMakeLists.txt | 2 +- src/other/libregex/CMakeLists.txt | 2 +- src/other/libspsr.dist | 50 - src/other/libspsr/CMakeLists.txt | 130 - src/other/libspsr/Src/CmdLineParser.cpp | 279 - src/other/libspsr/Src/CmdLineParser.h | 120 - src/other/libspsr/Src/CmdLineParser.inl | 141 - src/other/libspsr/Src/Geometry.cpp | 122 - src/other/libspsr/Src/Hash.h | 30 - src/other/libspsr/Src/MemoryUsage.h | 200 - src/other/libspsr/Src/Ply.h | 678 - src/other/libspsr/Src/PlyFile.cpp | 2727 -- src/other/libspsr/Src/PoissonRecon.cpp | 478 - src/other/libspsr/Src/SurfaceTrimmer.cpp | 428 - src/other/libutahrle/CMakeLists.txt | 2 +- src/other/libvds.dist | 7 - src/other/libvds/CMakeLists.txt | 100 - src/other/libz/CMakeLists.txt | 2 +- src/other/openNURBS/CMakeLists.txt | 2 +- src/other/openscenegraph/CMakeLists.txt | 2 +- src/other/poly2tri/CMakeLists.txt | 2 +- src/other/proj-4/CMakeLists.txt | 2 +- src/other/proj-4/src/CMakeLists.txt | 2 +- src/other/stepcode/CMakeLists.txt | 2 +- .../stepcode/src/base/judy/CMakeLists.txt | 2 +- src/other/stepcode/test/cpp/CMakeLists.txt | 2 +- .../test/cpp/schema_specific/CMakeLists.txt | 2 +- .../stepcode/test/cpp/stepcore/CMakeLists.txt | 2 +- src/other/stepcode/test/p21/CMakeLists.txt | 2 +- src/other/tcl/CMake/tcl.cmake | 8 + src/other/tcl/CMakeLists.txt | 6 +- src/other/tk/CMakeLists.txt | 6 +- src/other/tkhtml/CMakeLists.txt | 2 +- src/other/tktable/CMakeLists.txt | 2 +- src/proc-db/bottest.c | 2 +- src/proc-db/brep_cobb.cpp | 2 +- src/proc-db/brep_cube.cpp | 2 +- src/proc-db/brep_invalid.cpp | 2 +- src/proc-db/brep_simple.cpp | 2 +- src/proc-db/brep_surface.cpp | 2 +- src/proc-db/brep_trimmed.cpp | 2 +- src/proc-db/brepintersect.cpp | 4 +- src/proc-db/brepintersect.h | 2 +- src/proc-db/breplicator.cpp | 2 +- src/proc-db/brickwall.c | 2 +- src/proc-db/cchannel.c | 2 +- src/proc-db/clutter.c | 2 +- src/proc-db/common.c | 2 +- src/proc-db/csgbrep.cpp | 2 +- src/proc-db/globe.c | 2 +- src/proc-db/gtimes.c | 2 +- src/proc-db/kurt.c | 2 +- src/proc-db/lens.c | 2 +- src/proc-db/makebuilding/makebuilding.c | 2 +- src/proc-db/masonry.c | 2 +- src/proc-db/menger.c | 2 +- src/proc-db/metaball.c | 2 +- src/proc-db/mkbuilding.c | 2 +- src/proc-db/mkbuilding.h | 2 +- src/proc-db/molecule.c | 2 +- src/proc-db/naca/naca.h | 2 +- src/proc-db/naca/naca456.c | 2 +- src/proc-db/naca/nacax.c | 2 +- src/proc-db/naca/splprocs.c | 2 +- src/proc-db/nmgmodel.c | 2 +- src/proc-db/pdb-g.c | 2 +- src/proc-db/pipe.c | 2 +- src/proc-db/pipetest.c | 2 +- src/proc-db/pix2g.c | 2 +- src/proc-db/pyramid.c | 2 +- src/proc-db/ringworld.c | 2 +- src/proc-db/sketch.c | 2 +- src/proc-db/sphflake.c | 2 +- src/proc-db/spltest.c | 2 +- src/proc-db/surfaceintersect.cpp | 2 +- src/proc-db/surfaceintersect.h | 2 +- src/proc-db/tea.c | 2 +- src/proc-db/tea.h | 2 +- src/proc-db/tea_nmg.c | 2 +- src/proc-db/torii.c | 2 +- src/proc-db/tube.c | 2 +- src/proc-db/twistedcube.cpp | 2 +- src/proc-db/twistedcube.h | 2 +- src/proc-db/vegetation.c | 2 +- src/proc-db/vegetation.h | 2 +- src/proc-db/wavy.c | 2 +- src/proc-db/wdb_example.c | 2 +- src/qged/CMakeLists.txt | 428 +- src/qged/QAccordionWidget.cpp | 2 +- src/qged/QAccordionWidget.h | 2 +- src/qged/QToolPalette.cpp | 4 +- src/qged/QToolPalette.h | 2 +- src/qged/TODO.qt | 1 + src/qged/cadaccordion.cpp | 2 +- src/qged/cadaccordion.h | 2 +- src/qged/cadapp.cpp | 56 +- src/qged/cadapp.h | 11 +- src/qged/cadappexec.cpp | 2 +- src/qged/cadappexec.h | 2 +- src/qged/cadattributes.cpp | 2 +- src/qged/cadattributes.h | 2 +- src/qged/cadcommands.cpp | 254 +- src/qged/cadcommands.h | 2 +- src/qged/cadhelp.cpp | 2 +- src/qged/cadhelp.h | 2 +- src/qged/cadimport.cpp | 12 +- src/qged/cadimport.h | 2 +- src/qged/cadtreemodel.cpp | 7 +- src/qged/cadtreemodel.h | 2 +- src/qged/cadtreenode.cpp | 2 +- src/qged/cadtreenode.h | 2 +- src/qged/cadtreeview.cpp | 2 +- src/qged/cadtreeview.h | 2 +- src/qged/cadview.cpp | 2 +- src/qged/cadview.h | 2 +- src/qged/console.cpp | 2 +- src/qged/console.h | 2 +- src/qged/display/AxesRenderer.cpp | 2 +- src/qged/display/AxesRenderer.h | 2 +- src/qged/display/Camera.h | 18 +- src/qged/display/Display.cpp | 9 +- src/qged/display/Display.h | 2 +- src/qged/display/DisplayManager.cpp | 2 +- src/qged/display/DisplayManager.h | 2 +- src/qged/display/GeometryRenderer.cpp | 2 +- src/qged/display/GeometryRenderer.h | 2 +- src/qged/display/OrthographicCamera.cpp | 88 +- src/qged/display/OrthographicCamera.h | 21 +- src/qged/display/Renderable.h | 2 +- src/qged/display/glm/CMakeLists.txt | 10 - .../glm/cmake/glm/glmConfig-version.cmake | 11 - .../display/glm/cmake/glm/glmConfig.cmake | 22 - src/qged/display/glm/glm/CMakeLists.txt | 70 - src/qged/display/glm/glm/common.hpp | 570 - src/qged/display/glm/glm/detail/_features.hpp | 425 - src/qged/display/glm/glm/detail/_fixes.hpp | 58 - src/qged/display/glm/glm/detail/_noise.hpp | 112 - src/qged/display/glm/glm/detail/_swizzle.hpp | 835 - .../display/glm/glm/detail/_swizzle_func.hpp | 713 - .../display/glm/glm/detail/_vectorize.hpp | 193 - .../display/glm/glm/detail/compute_common.hpp | 81 - .../glm/detail/compute_vector_relational.hpp | 61 - .../display/glm/glm/detail/func_common.inl | 792 - .../glm/glm/detail/func_common_simd.inl | 231 - .../glm/glm/detail/func_exponential.inl | 152 - .../glm/glm/detail/func_exponential_simd.inl | 37 - .../display/glm/glm/detail/func_geometric.inl | 243 - .../glm/glm/detail/func_geometric_simd.inl | 163 - .../display/glm/glm/detail/func_integer.inl | 372 - .../glm/glm/detail/func_integer_simd.inl | 65 - .../display/glm/glm/detail/func_matrix.inl | 398 - .../glm/glm/detail/func_matrix_simd.inl | 249 - .../display/glm/glm/detail/func_packing.inl | 189 - .../glm/glm/detail/func_packing_simd.inl | 6 - .../glm/glm/detail/func_trigonometric.inl | 197 - .../glm/detail/func_trigonometric_simd.inl | 0 .../glm/glm/detail/func_vector_relational.inl | 87 - .../detail/func_vector_relational_simd.inl | 6 - src/qged/display/glm/glm/detail/glm.cpp | 294 - src/qged/display/glm/glm/detail/qualifier.hpp | 261 - src/qged/display/glm/glm/detail/setup.hpp | 1166 - .../display/glm/glm/detail/type_float.hpp | 99 - src/qged/display/glm/glm/detail/type_half.hpp | 47 - src/qged/display/glm/glm/detail/type_half.inl | 241 - .../display/glm/glm/detail/type_mat2x2.hpp | 208 - .../display/glm/glm/detail/type_mat2x2.inl | 536 - .../display/glm/glm/detail/type_mat2x3.hpp | 190 - .../display/glm/glm/detail/type_mat2x3.inl | 510 - .../display/glm/glm/detail/type_mat2x4.hpp | 192 - .../display/glm/glm/detail/type_mat2x4.inl | 520 - .../display/glm/glm/detail/type_mat3x2.hpp | 198 - .../display/glm/glm/detail/type_mat3x2.inl | 532 - .../display/glm/glm/detail/type_mat3x3.hpp | 215 - .../display/glm/glm/detail/type_mat3x3.inl | 601 - .../display/glm/glm/detail/type_mat3x4.hpp | 197 - .../display/glm/glm/detail/type_mat3x4.inl | 578 - .../display/glm/glm/detail/type_mat4x2.hpp | 202 - .../display/glm/glm/detail/type_mat4x2.inl | 574 - .../display/glm/glm/detail/type_mat4x3.hpp | 202 - .../display/glm/glm/detail/type_mat4x3.inl | 598 - .../display/glm/glm/detail/type_mat4x4.hpp | 220 - .../display/glm/glm/detail/type_mat4x4.inl | 706 - .../glm/glm/detail/type_mat4x4_simd.inl | 6 - src/qged/display/glm/glm/detail/type_quat.hpp | 217 - src/qged/display/glm/glm/detail/type_quat.inl | 408 - .../display/glm/glm/detail/type_quat_simd.inl | 188 - src/qged/display/glm/glm/detail/type_vec1.hpp | 339 - src/qged/display/glm/glm/detail/type_vec1.inl | 551 - src/qged/display/glm/glm/detail/type_vec2.hpp | 430 - src/qged/display/glm/glm/detail/type_vec2.inl | 913 - src/qged/display/glm/glm/detail/type_vec3.hpp | 463 - src/qged/display/glm/glm/detail/type_vec3.inl | 1068 - src/qged/display/glm/glm/detail/type_vec4.hpp | 536 - src/qged/display/glm/glm/detail/type_vec4.inl | 1140 - .../display/glm/glm/detail/type_vec4_simd.inl | 775 - src/qged/display/glm/glm/exponential.hpp | 141 - src/qged/display/glm/glm/ext.hpp | 284 - .../display/glm/glm/ext/matrix_clip_space.hpp | 553 - .../display/glm/glm/ext/matrix_clip_space.inl | 555 - .../display/glm/glm/ext/matrix_common.hpp | 67 - .../display/glm/glm/ext/matrix_common.inl | 16 - .../display/glm/glm/ext/matrix_double2x2.hpp | 54 - .../glm/ext/matrix_double2x2_precision.hpp | 80 - .../display/glm/glm/ext/matrix_double2x3.hpp | 49 - .../glm/ext/matrix_double2x3_precision.hpp | 62 - .../display/glm/glm/ext/matrix_double2x4.hpp | 49 - .../glm/ext/matrix_double2x4_precision.hpp | 62 - .../display/glm/glm/ext/matrix_double3x2.hpp | 49 - .../glm/ext/matrix_double3x2_precision.hpp | 62 - .../display/glm/glm/ext/matrix_double3x3.hpp | 54 - .../glm/ext/matrix_double3x3_precision.hpp | 80 - .../display/glm/glm/ext/matrix_double3x4.hpp | 49 - .../glm/ext/matrix_double3x4_precision.hpp | 62 - .../display/glm/glm/ext/matrix_double4x2.hpp | 49 - .../glm/ext/matrix_double4x2_precision.hpp | 62 - .../display/glm/glm/ext/matrix_double4x3.hpp | 49 - .../glm/ext/matrix_double4x3_precision.hpp | 62 - .../display/glm/glm/ext/matrix_double4x4.hpp | 54 - .../glm/ext/matrix_double4x4_precision.hpp | 80 - .../display/glm/glm/ext/matrix_float2x2.hpp | 54 - .../glm/glm/ext/matrix_float2x2_precision.hpp | 80 - .../display/glm/glm/ext/matrix_float2x3.hpp | 49 - .../glm/glm/ext/matrix_float2x3_precision.hpp | 62 - .../display/glm/glm/ext/matrix_float2x4.hpp | 49 - .../glm/glm/ext/matrix_float2x4_precision.hpp | 62 - .../display/glm/glm/ext/matrix_float3x2.hpp | 49 - .../glm/glm/ext/matrix_float3x2_precision.hpp | 62 - .../display/glm/glm/ext/matrix_float3x3.hpp | 54 - .../glm/glm/ext/matrix_float3x3_precision.hpp | 80 - .../display/glm/glm/ext/matrix_float3x4.hpp | 49 - .../glm/glm/ext/matrix_float3x4_precision.hpp | 62 - .../display/glm/glm/ext/matrix_float4x2.hpp | 49 - .../glm/glm/ext/matrix_float4x2_precision.hpp | 62 - .../display/glm/glm/ext/matrix_float4x3.hpp | 49 - .../glm/glm/ext/matrix_float4x3_precision.hpp | 62 - .../display/glm/glm/ext/matrix_float4x4.hpp | 54 - .../glm/glm/ext/matrix_float4x4_precision.hpp | 80 - .../display/glm/glm/ext/matrix_int2x2.hpp | 69 - .../glm/glm/ext/matrix_int2x2_sized.hpp | 101 - .../display/glm/glm/ext/matrix_int2x3.hpp | 64 - .../glm/glm/ext/matrix_int2x3_sized.hpp | 80 - .../display/glm/glm/ext/matrix_int2x4.hpp | 64 - .../glm/glm/ext/matrix_int2x4_sized.hpp | 80 - .../display/glm/glm/ext/matrix_int3x2.hpp | 64 - .../glm/glm/ext/matrix_int3x2_sized.hpp | 80 - .../display/glm/glm/ext/matrix_int3x3.hpp | 69 - .../glm/glm/ext/matrix_int3x3_sized.hpp | 101 - .../display/glm/glm/ext/matrix_int3x4.hpp | 64 - .../glm/glm/ext/matrix_int3x4_sized.hpp | 80 - .../display/glm/glm/ext/matrix_int4x2.hpp | 64 - .../glm/glm/ext/matrix_int4x2_sized.hpp | 80 - .../display/glm/glm/ext/matrix_int4x3.hpp | 64 - .../glm/glm/ext/matrix_int4x3_sized.hpp | 80 - .../display/glm/glm/ext/matrix_int4x4.hpp | 69 - .../glm/glm/ext/matrix_int4x4_sized.hpp | 101 - .../display/glm/glm/ext/matrix_projection.hpp | 180 - .../display/glm/glm/ext/matrix_projection.inl | 106 - .../display/glm/glm/ext/matrix_relational.hpp | 163 - .../display/glm/glm/ext/matrix_relational.inl | 82 - .../display/glm/glm/ext/matrix_transform.hpp | 175 - .../display/glm/glm/ext/matrix_transform.inl | 152 - .../display/glm/glm/ext/matrix_uint2x2.hpp | 69 - .../glm/glm/ext/matrix_uint2x2_sized.hpp | 101 - .../display/glm/glm/ext/matrix_uint2x3.hpp | 64 - .../glm/glm/ext/matrix_uint2x3_sized.hpp | 80 - .../display/glm/glm/ext/matrix_uint2x4.hpp | 64 - .../glm/glm/ext/matrix_uint2x4_sized.hpp | 80 - .../display/glm/glm/ext/matrix_uint3x2.hpp | 64 - .../glm/glm/ext/matrix_uint3x2_sized.hpp | 80 - .../display/glm/glm/ext/matrix_uint3x3.hpp | 69 - .../glm/glm/ext/matrix_uint3x3_sized.hpp | 101 - .../display/glm/glm/ext/matrix_uint3x4.hpp | 64 - .../glm/glm/ext/matrix_uint3x4_sized.hpp | 80 - .../display/glm/glm/ext/matrix_uint4x2.hpp | 64 - .../glm/glm/ext/matrix_uint4x2_sized.hpp | 80 - .../display/glm/glm/ext/matrix_uint4x3.hpp | 64 - .../glm/glm/ext/matrix_uint4x3_sized.hpp | 80 - .../display/glm/glm/ext/matrix_uint4x4.hpp | 69 - .../glm/glm/ext/matrix_uint4x4_sized.hpp | 101 - .../display/glm/glm/ext/quaternion_common.hpp | 166 - .../display/glm/glm/ext/quaternion_common.inl | 144 - .../glm/glm/ext/quaternion_common_simd.inl | 18 - .../display/glm/glm/ext/quaternion_double.hpp | 70 - .../glm/ext/quaternion_double_precision.hpp | 73 - .../glm/glm/ext/quaternion_exponential.hpp | 94 - .../glm/glm/ext/quaternion_exponential.inl | 85 - .../display/glm/glm/ext/quaternion_float.hpp | 70 - .../glm/ext/quaternion_float_precision.hpp | 67 - .../glm/glm/ext/quaternion_geometric.hpp | 101 - .../glm/glm/ext/quaternion_geometric.inl | 36 - .../glm/glm/ext/quaternion_relational.hpp | 93 - .../glm/glm/ext/quaternion_relational.inl | 35 - .../glm/glm/ext/quaternion_transform.hpp | 78 - .../glm/glm/ext/quaternion_transform.inl | 24 - .../glm/glm/ext/quaternion_trigonometric.hpp | 94 - .../glm/glm/ext/quaternion_trigonometric.inl | 34 - .../display/glm/glm/ext/scalar_common.hpp | 188 - .../display/glm/glm/ext/scalar_common.inl | 152 - .../display/glm/glm/ext/scalar_constants.hpp | 71 - .../display/glm/glm/ext/scalar_constants.inl | 24 - .../display/glm/glm/ext/scalar_int_sized.hpp | 101 - .../display/glm/glm/ext/scalar_integer.hpp | 123 - .../display/glm/glm/ext/scalar_integer.inl | 243 - .../display/glm/glm/ext/scalar_packing.hpp | 63 - .../display/glm/glm/ext/scalar_packing.inl | 0 .../display/glm/glm/ext/scalar_relational.hpp | 96 - .../display/glm/glm/ext/scalar_relational.inl | 40 - .../display/glm/glm/ext/scalar_uint_sized.hpp | 101 - src/qged/display/glm/glm/ext/scalar_ulp.hpp | 105 - src/qged/display/glm/glm/ext/scalar_ulp.inl | 284 - src/qged/display/glm/glm/ext/vector_bool1.hpp | 61 - .../glm/glm/ext/vector_bool1_precision.hpp | 65 - src/qged/display/glm/glm/ext/vector_bool2.hpp | 49 - .../glm/glm/ext/vector_bool2_precision.hpp | 62 - src/qged/display/glm/glm/ext/vector_bool3.hpp | 49 - .../glm/glm/ext/vector_bool3_precision.hpp | 62 - src/qged/display/glm/glm/ext/vector_bool4.hpp | 49 - .../glm/glm/ext/vector_bool4_precision.hpp | 62 - .../display/glm/glm/ext/vector_common.hpp | 235 - .../display/glm/glm/ext/vector_common.inl | 129 - .../display/glm/glm/ext/vector_double1.hpp | 62 - .../glm/glm/ext/vector_double1_precision.hpp | 67 - .../display/glm/glm/ext/vector_double2.hpp | 49 - .../glm/glm/ext/vector_double2_precision.hpp | 62 - .../display/glm/glm/ext/vector_double3.hpp | 49 - .../glm/glm/ext/vector_double3_precision.hpp | 65 - .../display/glm/glm/ext/vector_double4.hpp | 49 - .../glm/glm/ext/vector_double4_precision.hpp | 66 - .../display/glm/glm/ext/vector_float1.hpp | 62 - .../glm/glm/ext/vector_float1_precision.hpp | 67 - .../display/glm/glm/ext/vector_float2.hpp | 49 - .../glm/glm/ext/vector_float2_precision.hpp | 62 - .../display/glm/glm/ext/vector_float3.hpp | 49 - .../glm/glm/ext/vector_float3_precision.hpp | 62 - .../display/glm/glm/ext/vector_float4.hpp | 49 - .../glm/glm/ext/vector_float4_precision.hpp | 62 - src/qged/display/glm/glm/ext/vector_int1.hpp | 63 - .../display/glm/glm/ext/vector_int1_sized.hpp | 80 - src/qged/display/glm/glm/ext/vector_int2.hpp | 49 - .../display/glm/glm/ext/vector_int2_sized.hpp | 80 - src/qged/display/glm/glm/ext/vector_int3.hpp | 49 - .../display/glm/glm/ext/vector_int3_sized.hpp | 80 - src/qged/display/glm/glm/ext/vector_int4.hpp | 49 - .../display/glm/glm/ext/vector_int4_sized.hpp | 80 - .../display/glm/glm/ext/vector_integer.hpp | 180 - .../display/glm/glm/ext/vector_integer.inl | 85 - .../display/glm/glm/ext/vector_packing.hpp | 63 - .../display/glm/glm/ext/vector_packing.inl | 0 .../display/glm/glm/ext/vector_relational.hpp | 138 - .../display/glm/glm/ext/vector_relational.inl | 75 - src/qged/display/glm/glm/ext/vector_uint1.hpp | 63 - .../glm/glm/ext/vector_uint1_sized.hpp | 80 - src/qged/display/glm/glm/ext/vector_uint2.hpp | 49 - .../glm/glm/ext/vector_uint2_sized.hpp | 80 - src/qged/display/glm/glm/ext/vector_uint3.hpp | 49 - .../glm/glm/ext/vector_uint3_sized.hpp | 80 - src/qged/display/glm/glm/ext/vector_uint4.hpp | 49 - .../glm/glm/ext/vector_uint4_sized.hpp | 80 - src/qged/display/glm/glm/ext/vector_ulp.hpp | 140 - src/qged/display/glm/glm/ext/vector_ulp.inl | 74 - src/qged/display/glm/glm/fwd.hpp | 1264 - src/qged/display/glm/glm/geometric.hpp | 147 - src/qged/display/glm/glm/glm.hpp | 167 - src/qged/display/glm/glm/gtc/bitfield.hpp | 297 - src/qged/display/glm/glm/gtc/bitfield.inl | 626 - src/qged/display/glm/glm/gtc/color_space.hpp | 87 - src/qged/display/glm/glm/gtc/color_space.inl | 84 - src/qged/display/glm/glm/gtc/constants.hpp | 196 - src/qged/display/glm/glm/gtc/constants.inl | 167 - src/qged/display/glm/glm/gtc/epsilon.hpp | 91 - src/qged/display/glm/glm/gtc/epsilon.inl | 80 - src/qged/display/glm/glm/gtc/integer.hpp | 96 - src/qged/display/glm/glm/gtc/integer.inl | 68 - .../display/glm/glm/gtc/matrix_access.hpp | 91 - .../display/glm/glm/gtc/matrix_access.inl | 62 - .../display/glm/glm/gtc/matrix_integer.hpp | 464 - .../display/glm/glm/gtc/matrix_inverse.hpp | 81 - .../display/glm/glm/gtc/matrix_inverse.inl | 118 - .../display/glm/glm/gtc/matrix_transform.hpp | 67 - .../display/glm/glm/gtc/matrix_transform.inl | 3 - src/qged/display/glm/glm/gtc/noise.hpp | 92 - src/qged/display/glm/glm/gtc/noise.inl | 807 - src/qged/display/glm/glm/gtc/packing.hpp | 759 - src/qged/display/glm/glm/gtc/packing.inl | 938 - src/qged/display/glm/glm/gtc/quaternion.hpp | 204 - src/qged/display/glm/glm/gtc/quaternion.inl | 202 - .../display/glm/glm/gtc/quaternion_simd.inl | 0 src/qged/display/glm/glm/gtc/random.hpp | 113 - src/qged/display/glm/glm/gtc/random.inl | 303 - src/qged/display/glm/glm/gtc/reciprocal.hpp | 166 - src/qged/display/glm/glm/gtc/reciprocal.inl | 191 - src/qged/display/glm/glm/gtc/round.hpp | 191 - src/qged/display/glm/glm/gtc/round.inl | 155 - src/qged/display/glm/glm/gtc/type_aligned.hpp | 1346 - .../display/glm/glm/gtc/type_precision.hpp | 2125 -- .../display/glm/glm/gtc/type_precision.inl | 6 - src/qged/display/glm/glm/gtc/type_ptr.hpp | 261 - src/qged/display/glm/glm/gtc/type_ptr.inl | 386 - src/qged/display/glm/glm/gtc/ulp.hpp | 183 - src/qged/display/glm/glm/gtc/ulp.inl | 173 - src/qged/display/glm/glm/gtc/vec1.hpp | 61 - .../glm/glm/gtx/associated_min_max.hpp | 238 - .../glm/glm/gtx/associated_min_max.inl | 354 - src/qged/display/glm/glm/gtx/bit.hpp | 129 - src/qged/display/glm/glm/gtx/bit.inl | 92 - .../display/glm/glm/gtx/closest_point.hpp | 80 - .../display/glm/glm/gtx/closest_point.inl | 45 - .../display/glm/glm/gtx/color_encoding.hpp | 85 - .../display/glm/glm/gtx/color_encoding.inl | 45 - src/qged/display/glm/glm/gtx/color_space.hpp | 103 - src/qged/display/glm/glm/gtx/color_space.inl | 141 - .../display/glm/glm/gtx/color_space_YCoCg.hpp | 91 - .../display/glm/glm/gtx/color_space_YCoCg.inl | 107 - src/qged/display/glm/glm/gtx/common.hpp | 107 - src/qged/display/glm/glm/gtx/common.inl | 125 - .../display/glm/glm/gtx/compatibility.hpp | 164 - .../display/glm/glm/gtx/compatibility.inl | 62 - .../display/glm/glm/gtx/component_wise.hpp | 100 - .../display/glm/glm/gtx/component_wise.inl | 127 - .../display/glm/glm/gtx/dual_quaternion.hpp | 305 - .../display/glm/glm/gtx/dual_quaternion.inl | 352 - src/qged/display/glm/glm/gtx/easing.hpp | 250 - src/qged/display/glm/glm/gtx/easing.inl | 436 - src/qged/display/glm/glm/gtx/euler_angles.hpp | 366 - src/qged/display/glm/glm/gtx/euler_angles.inl | 899 - src/qged/display/glm/glm/gtx/extend.hpp | 73 - src/qged/display/glm/glm/gtx/extend.inl | 48 - .../display/glm/glm/gtx/extended_min_max.hpp | 168 - .../display/glm/glm/gtx/extended_min_max.inl | 138 - .../display/glm/glm/gtx/exterior_product.hpp | 76 - .../display/glm/glm/gtx/exterior_product.inl | 26 - .../display/glm/glm/gtx/fast_exponential.hpp | 126 - .../display/glm/glm/gtx/fast_exponential.inl | 136 - .../display/glm/glm/gtx/fast_square_root.hpp | 123 - .../display/glm/glm/gtx/fast_square_root.inl | 75 - .../display/glm/glm/gtx/fast_trigonometry.hpp | 110 - .../display/glm/glm/gtx/fast_trigonometry.inl | 142 - .../display/glm/glm/gtx/float_notmalize.inl | 13 - src/qged/display/glm/glm/gtx/functions.hpp | 87 - src/qged/display/glm/glm/gtx/functions.inl | 30 - .../display/glm/glm/gtx/gradient_paint.hpp | 84 - .../display/glm/glm/gtx/gradient_paint.inl | 36 - .../glm/glm/gtx/handed_coordinate_space.hpp | 81 - .../glm/glm/gtx/handed_coordinate_space.inl | 26 - src/qged/display/glm/glm/gtx/hash.hpp | 173 - src/qged/display/glm/glm/gtx/hash.inl | 184 - src/qged/display/glm/glm/gtx/integer.hpp | 107 - src/qged/display/glm/glm/gtx/integer.inl | 185 - src/qged/display/glm/glm/gtx/intersect.hpp | 123 - src/qged/display/glm/glm/gtx/intersect.inl | 200 - src/qged/display/glm/glm/gtx/io.hpp | 232 - src/qged/display/glm/glm/gtx/io.inl | 440 - src/qged/display/glm/glm/gtx/log_base.hpp | 79 - src/qged/display/glm/glm/gtx/log_base.inl | 16 - .../glm/glm/gtx/matrix_cross_product.hpp | 78 - .../glm/glm/gtx/matrix_cross_product.inl | 37 - .../display/glm/glm/gtx/matrix_decompose.hpp | 77 - .../display/glm/glm/gtx/matrix_decompose.inl | 186 - .../glm/glm/gtx/matrix_factorisation.hpp | 100 - .../glm/glm/gtx/matrix_factorisation.inl | 84 - .../glm/glm/gtx/matrix_interpolation.hpp | 91 - .../glm/glm/gtx/matrix_interpolation.inl | 129 - .../glm/glm/gtx/matrix_major_storage.hpp | 150 - .../glm/glm/gtx/matrix_major_storage.inl | 166 - .../display/glm/glm/gtx/matrix_operation.hpp | 134 - .../display/glm/glm/gtx/matrix_operation.inl | 176 - src/qged/display/glm/glm/gtx/matrix_query.hpp | 108 - src/qged/display/glm/glm/gtx/matrix_query.inl | 113 - .../glm/glm/gtx/matrix_transform_2d.hpp | 112 - .../glm/glm/gtx/matrix_transform_2d.inl | 68 - .../display/glm/glm/gtx/mixed_product.hpp | 72 - .../display/glm/glm/gtx/mixed_product.inl | 15 - src/qged/display/glm/glm/gtx/norm.hpp | 119 - src/qged/display/glm/glm/gtx/norm.inl | 95 - src/qged/display/glm/glm/gtx/normal.hpp | 72 - src/qged/display/glm/glm/gtx/normal.inl | 15 - .../display/glm/glm/gtx/normalize_dot.hpp | 80 - .../display/glm/glm/gtx/normalize_dot.inl | 16 - .../display/glm/glm/gtx/number_precision.hpp | 92 - .../display/glm/glm/gtx/number_precision.inl | 6 - src/qged/display/glm/glm/gtx/optimum_pow.hpp | 85 - src/qged/display/glm/glm/gtx/optimum_pow.inl | 22 - .../display/glm/glm/gtx/orthonormalize.hpp | 80 - .../display/glm/glm/gtx/orthonormalize.inl | 29 - .../display/glm/glm/gtx/perpendicular.hpp | 72 - .../display/glm/glm/gtx/perpendicular.inl | 10 - .../display/glm/glm/gtx/polar_coordinates.hpp | 79 - .../display/glm/glm/gtx/polar_coordinates.inl | 36 - src/qged/display/glm/glm/gtx/projection.hpp | 74 - src/qged/display/glm/glm/gtx/projection.inl | 10 - src/qged/display/glm/glm/gtx/quaternion.hpp | 205 - src/qged/display/glm/glm/gtx/quaternion.inl | 159 - src/qged/display/glm/glm/gtx/range.hpp | 129 - src/qged/display/glm/glm/gtx/raw_data.hpp | 82 - src/qged/display/glm/glm/gtx/raw_data.inl | 2 - .../glm/glm/gtx/rotate_normalized_axis.hpp | 99 - .../glm/glm/gtx/rotate_normalized_axis.inl | 58 - .../display/glm/glm/gtx/rotate_vector.hpp | 154 - .../display/glm/glm/gtx/rotate_vector.inl | 187 - .../glm/glm/gtx/scalar_multiplication.hpp | 106 - .../display/glm/glm/gtx/scalar_relational.hpp | 67 - .../display/glm/glm/gtx/scalar_relational.inl | 88 - src/qged/display/glm/glm/gtx/spline.hpp | 96 - src/qged/display/glm/glm/gtx/spline.inl | 60 - .../display/glm/glm/gtx/std_based_type.hpp | 99 - .../display/glm/glm/gtx/std_based_type.inl | 6 - src/qged/display/glm/glm/gtx/string_cast.hpp | 83 - src/qged/display/glm/glm/gtx/string_cast.inl | 492 - src/qged/display/glm/glm/gtx/texture.hpp | 77 - src/qged/display/glm/glm/gtx/texture.inl | 17 - src/qged/display/glm/glm/gtx/transform.hpp | 91 - src/qged/display/glm/glm/gtx/transform.inl | 23 - src/qged/display/glm/glm/gtx/transform2.hpp | 120 - src/qged/display/glm/glm/gtx/transform2.inl | 125 - src/qged/display/glm/glm/gtx/type_aligned.hpp | 1013 - src/qged/display/glm/glm/gtx/type_aligned.inl | 6 - src/qged/display/glm/glm/gtx/type_trait.hpp | 116 - src/qged/display/glm/glm/gtx/type_trait.inl | 61 - src/qged/display/glm/glm/gtx/vec_swizzle.hpp | 2813 --- src/qged/display/glm/glm/gtx/vector_angle.hpp | 88 - src/qged/display/glm/glm/gtx/vector_angle.inl | 44 - src/qged/display/glm/glm/gtx/vector_query.hpp | 97 - src/qged/display/glm/glm/gtx/vector_query.inl | 154 - src/qged/display/glm/glm/gtx/wrap.hpp | 68 - src/qged/display/glm/glm/gtx/wrap.inl | 6 - src/qged/display/glm/glm/integer.hpp | 243 - src/qged/display/glm/glm/mat2x2.hpp | 40 - src/qged/display/glm/glm/mat2x3.hpp | 40 - src/qged/display/glm/glm/mat2x4.hpp | 40 - src/qged/display/glm/glm/mat3x2.hpp | 40 - src/qged/display/glm/glm/mat3x3.hpp | 39 - src/qged/display/glm/glm/mat3x4.hpp | 39 - src/qged/display/glm/glm/mat4x2.hpp | 40 - src/qged/display/glm/glm/mat4x3.hpp | 39 - src/qged/display/glm/glm/mat4x4.hpp | 40 - src/qged/display/glm/glm/matrix.hpp | 192 - src/qged/display/glm/glm/packing.hpp | 204 - src/qged/display/glm/glm/simd/common.h | 271 - src/qged/display/glm/glm/simd/exponential.h | 51 - src/qged/display/glm/glm/simd/geometric.h | 155 - src/qged/display/glm/glm/simd/integer.h | 146 - src/qged/display/glm/glm/simd/matrix.h | 1059 - src/qged/display/glm/glm/simd/neon.h | 186 - src/qged/display/glm/glm/simd/packing.h | 39 - src/qged/display/glm/glm/simd/platform.h | 429 - src/qged/display/glm/glm/simd/trigonometric.h | 40 - .../display/glm/glm/simd/vector_relational.h | 39 - src/qged/display/glm/glm/trigonometric.hpp | 241 - src/qged/display/glm/glm/vec2.hpp | 45 - src/qged/display/glm/glm/vec3.hpp | 45 - src/qged/display/glm/glm/vec4.hpp | 46 - .../display/glm/glm/vector_relational.hpp | 152 - src/qged/display/glm/manual.md | 2411 -- src/qged/display/glm/readme.md | 1209 - src/qged/main.cpp | 2 +- src/qged/main_window.cpp | 2 +- src/qged/main_window.h | 2 +- src/remrt/ihost.c | 2 +- src/remrt/ihost.h | 2 +- src/remrt/protocol.h | 2 +- src/remrt/remrt.c | 2 +- src/remrt/rtsrv.c | 2 +- src/rt/CMakeLists.txt | 10 +- src/rt/do.c | 2 +- src/rt/ext.h | 2 +- src/rt/heatgraph.c | 2 +- src/rt/libfb-dummy.c | 2 +- src/rt/main.c | 2 +- src/rt/opt.c | 2 +- src/rt/read-rtlog.c | 2 +- src/rt/reshoot.c | 2 +- src/rt/rtexample.c | 2 +- src/rt/rtscale.c | 2 +- src/rt/rtshot.c | 2 +- src/rt/rtuif.h | 2 +- src/rt/scanline.c | 2 +- src/rt/scanline.h | 2 +- src/rt/usage.cpp | 2 +- src/rt/view.c | 2 +- src/rt/viewarea.c | 2 +- src/rt/viewcheck.c | 2 +- src/rt/viewdir.c | 2 +- src/rt/viewdummy.c | 2 +- src/rt/viewedge.c | 2 +- src/rt/viewg3.c | 2 +- src/rt/viewhide.c | 2 +- src/rt/viewsil.c | 2 +- src/rt/viewweight.c | 2 +- src/rt/viewxray.c | 2 +- src/rt/worker.c | 2 +- src/rtwizard/CMakeLists.txt | 2 +- src/rtwizard/main.c | 19 +- src/shapes/bolt.c | 2 +- src/shapes/coil.c | 2 +- src/shapes/fence.c | 2 +- src/shapes/fence.h | 2 +- src/shapes/gastank.c | 2 +- src/shapes/handle.c | 2 +- src/shapes/human.c | 2 +- src/shapes/picket_fence.c | 2 +- src/shapes/tire.c | 2 +- src/shapes/window.c | 2 +- src/shapes/window_frame.c | 2 +- src/shapes/wire.c | 2 +- src/sig/a-d.c | 2 +- src/sig/butter.c | 2 +- src/sig/bw-d.c | 2 +- src/sig/c-d.c | 2 +- src/sig/coswin.c | 2 +- src/sig/d-a.c | 2 +- src/sig/d-bw.c | 2 +- src/sig/d-f.c | 2 +- src/sig/d-i.c | 2 +- src/sig/d-u.c | 2 +- src/sig/d2-c.c | 2 +- src/sig/damdf.c | 2 +- src/sig/dauto.c | 2 +- src/sig/dauto2.c | 2 +- src/sig/dconv.c | 2 +- src/sig/ddisp.c | 2 +- src/sig/dfft.c | 2 +- src/sig/dmod.c | 2 +- src/sig/dpeak.c | 2 +- src/sig/dsel.c | 2 +- src/sig/dstats.c | 2 +- src/sig/dwin.c | 2 +- src/sig/f-d.c | 2 +- src/sig/f-i.c | 2 +- src/sig/hamwin.c | 2 +- src/sig/i-a.c | 2 +- src/sig/i-d.c | 2 +- src/sig/i-f.c | 2 +- src/sig/ihist.c | 2 +- src/sig/imod.c | 2 +- src/sig/interp.c | 2 +- src/sig/istats.c | 2 +- src/sig/smod.c | 2 +- src/sig/u-a.c | 2 +- src/sig/u-bw.c | 2 +- src/sig/u-d.c | 2 +- src/sig/u-f.c | 2 +- src/sig/umod.c | 2 +- src/sig/ustats.c | 2 +- src/tclscripts/CMakeLists.txt | 27 +- src/tclscripts/archer/Arb4EditFrame.tcl | 2 +- src/tclscripts/archer/Arb5EditFrame.tcl | 2 +- src/tclscripts/archer/Arb6EditFrame.tcl | 2 +- src/tclscripts/archer/Arb7EditFrame.tcl | 2 +- src/tclscripts/archer/Arb8EditFrame.tcl | 2 +- src/tclscripts/archer/Archer.tcl | 44 +- src/tclscripts/archer/ArcherCore.tcl | 4 +- .../archer/AttrGroupsDisplayUtility.tcl | 2 +- src/tclscripts/archer/BotEditFrame.tcl | 2 +- src/tclscripts/archer/BotUtility.tcl | 2 +- src/tclscripts/archer/BrepEditFrame.tcl | 2 +- src/tclscripts/archer/CombEditFrame.tcl | 2 +- src/tclscripts/archer/DataUtils.tcl | 2 +- src/tclscripts/archer/EhyEditFrame.tcl | 2 +- src/tclscripts/archer/EllEditFrame.tcl | 2 +- src/tclscripts/archer/EpaEditFrame.tcl | 2 +- src/tclscripts/archer/EtoEditFrame.tcl | 2 +- src/tclscripts/archer/ExtrudeEditFrame.tcl | 2 +- src/tclscripts/archer/GeometryEditFrame.tcl | 2 +- src/tclscripts/archer/GripEditFrame.tcl | 2 +- src/tclscripts/archer/HalfEditFrame.tcl | 2 +- src/tclscripts/archer/HypEditFrame.tcl | 2 +- src/tclscripts/archer/JointEditFrame.tcl | 2 +- src/tclscripts/archer/LODUtility.tcl | 2 +- src/tclscripts/archer/LoadArcherLibs.tcl | 2 +- src/tclscripts/archer/MetaballEditFrame.tcl | 2 +- src/tclscripts/archer/PartEditFrame.tcl | 2 +- src/tclscripts/archer/PipeEditFrame.tcl | 2 +- src/tclscripts/archer/Plugin.tcl | 2 +- src/tclscripts/archer/RhcEditFrame.tcl | 2 +- src/tclscripts/archer/RpcEditFrame.tcl | 2 +- src/tclscripts/archer/ShaderEdit.tcl | 4 +- src/tclscripts/archer/SketchEditFrame.tcl | 2 +- src/tclscripts/archer/SphereEditFrame.tcl | 2 +- src/tclscripts/archer/SuperellEditFrame.tcl | 2 +- src/tclscripts/archer/TgcEditFrame.tcl | 2 +- src/tclscripts/archer/TorusEditFrame.tcl | 2 +- src/tclscripts/archer/Utility.tcl | 2 +- src/tclscripts/archer/Wizard.tcl | 2 +- src/tclscripts/archer/bgerror.tcl | 2 +- src/tclscripts/archer/itk_redefines.tcl | 2 +- src/tclscripts/archer/tabwindow.itk | 2 +- src/tclscripts/boteditor/botEditor.tcl | 2 +- src/tclscripts/boteditor/botPropertyBox.tcl | 2 +- src/tclscripts/boteditor/botTools.tcl | 2 +- src/tclscripts/cad_dialog.tcl | 2 +- src/tclscripts/checker/OverlapFileTool.tcl | 120 +- src/tclscripts/checker/check.tcl | 2 +- src/tclscripts/checker/menu.tcl | 2 +- src/tclscripts/checker/test_checker.tcl | 2 +- src/tclscripts/chkexterns.tcl | 2 +- src/tclscripts/fs_dialog.tk | 2 +- src/tclscripts/geometree/GeometryBrowser.tcl | 14 +- src/tclscripts/geometree/geometree.tcl | 2 +- src/tclscripts/helpcomm.tcl | 2 +- src/tclscripts/helplib.tcl | 2 +- src/tclscripts/hoc.tcl | 2 +- src/tclscripts/hv3/demo/viewpage.tcl | 2 +- src/tclscripts/igraph/GraphEditor.tcl | 12 +- src/tclscripts/igraph/igraph.tcl | 2 +- src/tclscripts/lib/Accordian.tcl | 2 +- src/tclscripts/lib/CellPlot.tcl | 2 +- src/tclscripts/lib/ColorEntry.tcl | 2 +- src/tclscripts/lib/ComboBox.tcl | 2 +- src/tclscripts/lib/Command.tcl | 2 +- src/tclscripts/lib/Database.tcl | 2 +- src/tclscripts/lib/Db.tcl | 2 +- src/tclscripts/lib/Display.tcl | 2 +- src/tclscripts/lib/Dm.tcl | 2 +- src/tclscripts/lib/Drawable.tcl | 2 +- src/tclscripts/lib/Ged.tcl | 24 +- src/tclscripts/lib/GeometryIO.tcl | 35 +- src/tclscripts/lib/Help.tcl | 2 +- src/tclscripts/lib/Legend.tcl | 2 +- src/tclscripts/lib/Mged.tcl | 2 +- src/tclscripts/lib/ModelAxesControl.tcl | 2 +- src/tclscripts/lib/QuadDisplay.tcl | 2 +- src/tclscripts/lib/RtControl.tcl | 2 +- src/tclscripts/lib/RtImage.tcl | 4 +- src/tclscripts/lib/Splash.tcl | 2 +- src/tclscripts/lib/Table.tcl | 2 +- src/tclscripts/lib/TableView.tcl | 2 +- src/tclscripts/lib/TkTable.tcl | 2 +- src/tclscripts/lib/View.tcl | 2 +- src/tclscripts/lib/ViewAxesControl.tcl | 2 +- src/tclscripts/lib/apply_mat.tcl | 2 +- src/tclscripts/lib/cursor.tcl | 2 +- src/tclscripts/lib/gui_conversion.tcl | 16 +- src/tclscripts/lib/pattern.tcl | 2 +- src/tclscripts/lib/pattern_gui.tcl | 2 +- src/tclscripts/libtclcad.tcl | 2 +- src/tclscripts/lod/LODDialog.tcl | 2 +- src/tclscripts/man_browser.tcl | 4 +- src/tclscripts/menu_override.tcl | 2 +- src/tclscripts/mged/accel.tcl | 2 +- src/tclscripts/mged/adc.tcl | 2 +- src/tclscripts/mged/apply.tcl | 2 +- src/tclscripts/mged/asc2g.tcl | 4 +- src/tclscripts/mged/attr_edit.tcl | 2 +- src/tclscripts/mged/bindings.tcl | 82 +- src/tclscripts/mged/bot_face_select.tcl | 2 +- src/tclscripts/mged/bot_vertex_fuse_all.tcl | 2 +- src/tclscripts/mged/botedit.tcl | 2 +- src/tclscripts/mged/bots.tcl | 2 +- src/tclscripts/mged/build_region.tcl | 2 +- src/tclscripts/mged/calipers.tcl | 2 +- src/tclscripts/mged/callbacks.tcl | 2 +- src/tclscripts/mged/clear.tcl | 2 +- src/tclscripts/mged/collaborate.tcl | 2 +- src/tclscripts/mged/color.tcl | 2 +- src/tclscripts/mged/color_scheme.tcl | 2 +- src/tclscripts/mged/comb.tcl | 2 +- src/tclscripts/mged/combmenu.tcl | 2 +- src/tclscripts/mged/cycle.tcl | 2 +- src/tclscripts/mged/dbfindtree.tcl | 2 +- src/tclscripts/mged/dbupgrade.tcl | 4 +- src/tclscripts/mged/e_id.tcl | 2 +- src/tclscripts/mged/edit_menu.tcl | 2 +- src/tclscripts/mged/edit_solid.tcl | 2 +- src/tclscripts/mged/edit_solid_int.tcl | 2 +- src/tclscripts/mged/editmenu.tcl | 2 +- src/tclscripts/mged/editobj.tcl | 2 +- src/tclscripts/mged/eobjmenu.tcl | 2 +- src/tclscripts/mged/expand_comb.tcl | 2 +- src/tclscripts/mged/extract.tcl | 2 +- src/tclscripts/mged/facetize_all_regions.tcl | 2 +- src/tclscripts/mged/font.tcl | 2 +- src/tclscripts/mged/g2asc.tcl | 4 +- src/tclscripts/mged/garbage_collect.tcl | 2 +- src/tclscripts/mged/get_regions.tcl | 2 +- src/tclscripts/mged/grid.tcl | 2 +- src/tclscripts/mged/grouper.tcl | 2 +- src/tclscripts/mged/help.tcl | 4 +- src/tclscripts/mged/helpdevel.tcl | 2 +- src/tclscripts/mged/icreate.tcl | 2 +- src/tclscripts/mged/illum.tcl | 2 +- src/tclscripts/mged/lc.tcl | 2 +- src/tclscripts/mged/lgt_mat.tcl | 2 +- src/tclscripts/mged/list.tcl | 2 +- src/tclscripts/mged/lodconfig.tcl | 2 +- src/tclscripts/mged/make_solid.tcl | 2 +- src/tclscripts/mged/man.tcl | 4 +- src/tclscripts/mged/menu.tcl | 2 +- src/tclscripts/mged/mged.tcl | 8 +- src/tclscripts/mged/mgedrc.tcl | 2 +- src/tclscripts/mged/mike.tcl | 6 +- src/tclscripts/mged/mouse.tcl | 2 +- src/tclscripts/mged/mview.tcl | 7 +- src/tclscripts/mged/openw.tcl | 422 +- src/tclscripts/mged/plot.tcl | 2 +- src/tclscripts/mged/points.tcl | 6 +- src/tclscripts/mged/prj_add.tcl | 2 +- src/tclscripts/mged/ps.tcl | 2 +- src/tclscripts/mged/qray.tcl | 2 +- src/tclscripts/mged/ray.tcl | 2 +- src/tclscripts/mged/raypick.tcl | 2 +- src/tclscripts/mged/reid.tcl | 2 +- src/tclscripts/mged/relos.tcl | 2 +- src/tclscripts/mged/remap_mater.tcl | 2 +- src/tclscripts/mged/remat.tcl | 2 +- src/tclscripts/mged/rrmb.tcl | 2 +- src/tclscripts/mged/rt.tcl | 4 +- src/tclscripts/mged/rt_script.tcl | 2 +- src/tclscripts/mged/sample.tcl | 2 +- src/tclscripts/mged/shaders.tcl | 4 +- src/tclscripts/mged/skt_ed.tcl | 2 +- src/tclscripts/mged/solclick.tcl | 2 +- src/tclscripts/mged/solcreate.tcl | 2 +- src/tclscripts/mged/solid.tcl | 2 +- src/tclscripts/mged/text.tcl | 2 +- src/tclscripts/mged/titles.tcl | 2 +- src/tclscripts/mged/tree.tcl | 2 +- src/tclscripts/mged/xclone.tcl | 2 +- src/tclscripts/mouse.tcl | 2 +- src/tclscripts/plot3-dm/bindings.tcl | 2 +- src/tclscripts/plot3-dm/help.tcl | 2 +- src/tclscripts/plot3-dm/menu.tcl | 2 +- src/tclscripts/rtwizard/RaytraceWizard.tcl | 2 +- src/tclscripts/rtwizard/lib/DbPage.itk | 2 +- src/tclscripts/rtwizard/lib/ExamplePage.itk | 2 +- src/tclscripts/rtwizard/lib/FbPage.itk | 10 +- .../rtwizard/lib/FeedbackDialog.itk | 2 +- src/tclscripts/rtwizard/lib/FullColorPage.itk | 2 +- src/tclscripts/rtwizard/lib/GhostPage.itk | 2 +- src/tclscripts/rtwizard/lib/HelpPage.itk | 2 +- .../rtwizard/lib/HighlightedPage.itk | 2 +- src/tclscripts/rtwizard/lib/IntroPage.itk | 2 +- src/tclscripts/rtwizard/lib/LinePage.itk | 2 +- src/tclscripts/rtwizard/lib/MGEDpage.itk | 2 +- src/tclscripts/rtwizard/lib/PictureTypeA.itcl | 6 +- src/tclscripts/rtwizard/lib/PictureTypeB.itcl | 6 +- .../rtwizard/lib/PictureTypeBase.itcl | 2 +- src/tclscripts/rtwizard/lib/PictureTypeC.itcl | 6 +- src/tclscripts/rtwizard/lib/PictureTypeD.itcl | 6 +- src/tclscripts/rtwizard/lib/PictureTypeE.itcl | 6 +- src/tclscripts/rtwizard/lib/PictureTypeF.itcl | 6 +- src/tclscripts/rtwizard/lib/Wizard.itk | 2 +- src/tclscripts/rtwizard/rtwizard | 18 +- .../sdialogs/scripts/entrydialog.itk | 2 +- .../sdialogs/scripts/listdialog.itk | 2 +- src/tclscripts/sdialogs/scripts/stddlgs.tcl | 2 +- src/tclscripts/sdialogs/sdialogs.tcl | 2 +- src/tclscripts/shotvis/shotvis.tcl | 2 +- .../swidgets/scripts/selectlists.itk | 2 +- src/tclscripts/swidgets/scripts/tkgetdir.itk | 2 +- .../swidgets/scripts/togglearrow.itk | 2 +- src/tclscripts/swidgets/scripts/tooltip.itk | 2 +- src/tclscripts/swidgets/scripts/tree.itk | 2 +- src/tclscripts/swidgets/swidgets.tcl | 2 +- src/tclscripts/util/expand_int_ranges.tcl | 2 +- src/tclscripts/util/luniq.tcl | 2 +- src/tclscripts/util/metastrength.tcl | 2 +- src/tclscripts/util/regionstobots.tcl | 2 +- src/tclscripts/vmath.tcl | 2 +- src/util/CMakeLists.txt | 2 +- src/util/alias-pix.c | 2 +- src/util/ap-pix.c | 2 +- src/util/asc-plot3.c | 2 +- src/util/bombardier.c | 2 +- src/util/bombardier.h | 2 +- src/util/bw-a.c | 2 +- src/util/bw-pix.c | 2 +- src/util/bw-png.c | 2 +- src/util/bw-ps.c | 2 +- src/util/bwcrop.c | 2 +- src/util/bwdiff.c | 2 +- src/util/bwfilter.c | 2 +- src/util/bwhist.c | 2 +- src/util/bwhisteq.c | 2 +- src/util/bwmod.c | 6 +- src/util/bwrect.c | 2 +- src/util/bwrot.c | 2 +- src/util/bwscale.c | 2 +- src/util/bwshrink.c | 2 +- src/util/bwstat.c | 2 +- src/util/bwthresh.c | 2 +- src/util/cv.c | 2 +- src/util/decimate.c | 2 +- src/util/double-asc.c | 2 +- src/util/dpix-pix.c | 2 +- src/util/gencolor.c | 2 +- src/util/halftone.c | 2 +- src/util/icv.cpp | 2 +- src/util/imgdims.c | 2 +- src/util/loop.c | 2 +- src/util/lowp.c | 2 +- src/util/mac-pix.c | 2 +- src/util/morphedit.tcl | 4 +- src/util/pc_test.c | 2 +- src/util/pix-alias.c | 2 +- src/util/pix-bw.c | 2 +- src/util/pix-png.c | 2 +- src/util/pix-ppm.c | 2 +- src/util/pix-ps.c | 2 +- src/util/pix-spm.c | 2 +- src/util/pix-sun.c | 2 +- src/util/pix3filter.c | 2 +- src/util/pixbackgnd.c | 2 +- src/util/pixbgstrip.c | 2 +- src/util/pixblend.c | 2 +- src/util/pixborder.c | 2 +- src/util/pixbustup.c | 2 +- src/util/pixclump.c | 2 +- src/util/pixcolors.c | 2 +- src/util/pixcount.cpp | 2 +- src/util/pixcrop.c | 2 +- src/util/pixdiff.c | 63 +- src/util/pixelswap.c | 2 +- src/util/pixembed.c | 2 +- src/util/pixfade.c | 2 +- src/util/pixfilter.c | 2 +- src/util/pixhalve.c | 2 +- src/util/pixhist.c | 2 +- src/util/pixhist3d-plot3.c | 2 +- src/util/pixhist3d.c | 2 +- src/util/pixinterp2x.c | 2 +- src/util/pixmatte.c | 2 +- src/util/pixmerge.c | 2 +- src/util/pixmorph.c | 2 +- src/util/pixrect.c | 2 +- src/util/pixrot.c | 2 +- src/util/pixsaturate.c | 2 +- src/util/pixscale.c | 9 +- src/util/pixshrink.c | 2 +- src/util/pixstat.c | 2 +- src/util/pixsubst.c | 2 +- src/util/pixtile.c | 2 +- src/util/pixuntile.c | 2 +- src/util/plot3-asc.c | 2 +- src/util/plot3-dm.c | 4 +- src/util/plot3-plot3.c | 2 +- src/util/plot3-ps.c | 2 +- src/util/plot3color.c | 2 +- src/util/plot3getframe.c | 2 +- src/util/plot3line2.c | 2 +- src/util/plot3rot.c | 2 +- src/util/plot3stat.c | 2 +- src/util/png-bw.c | 2 +- src/util/png-pix.c | 2 +- src/util/random.c | 2 +- src/util/roots_example.c | 2 +- src/util/sun-pix.c | 2 +- src/util/terrain.c | 2 +- src/util/wavelet.c | 2 +- 3918 files changed, 47905 insertions(+), 115272 deletions(-) create mode 100644 db/radialgrid.asc create mode 100644 doc/GITHUB create mode 100644 doc/docbook/devguides/CMakeLists.txt create mode 100644 doc/docbook/devguides/bool_eval_development.xml create mode 100644 doc/docbook/devguides/images/axis_X.png create mode 100644 doc/docbook/devguides/images/ccx_overlap_event.png create mode 100644 doc/docbook/devguides/images/compare_endpoint_style.png create mode 100644 doc/docbook/devguides/images/curve_traversal_directions.png create mode 100644 doc/docbook/devguides/images/evaluation_overview.png create mode 100644 doc/docbook/devguides/images/intermediate_linked_curves.png create mode 100644 doc/docbook/devguides/images/lcurves_with_shaded_context.png create mode 100644 doc/docbook/devguides/images/ssx_10_vs_13.png create mode 100644 doc/docbook/devguides/images/ssx_overlap_event.png create mode 100644 doc/docbook/devguides/images/ssx_tangent_event.png create mode 100644 doc/docbook/devguides/images/ssx_transverse_event.png create mode 100644 doc/docbook/system/mann/npush.xml create mode 100644 doc/docbook/system/mann/stat.xml create mode 100644 doc/legal/embedded/damlev.txt rename src/qged/display/glm/copying.txt => doc/legal/embedded/fort.txt (60%) rename doc/legal/{other/libgdiam.txt => embedded/gdiam.txt} (91%) delete mode 100644 doc/legal/embedded/glm.txt rename doc/legal/{other/libvds.txt => embedded/vds.txt} (95%) delete mode 100644 doc/legal/other/SPSR.txt create mode 100644 include/bu/assert.h create mode 100644 misc/CMake/BRLCAD_Build_Types.cmake create mode 100644 misc/CMake/BRLCAD_CPack.cmake create mode 100644 misc/CMake/BRLCAD_Environment_Setup.cmake create mode 100644 misc/CMake/BRLCAD_Install_Prefix.cmake mode change 100755 => 100644 misc/CMake/BRLCAD_Regress_Util.cmake create mode 100644 misc/CMake/BRLCAD_Test_Wrappers.cmake create mode 100644 misc/CMake/BRLCAD_User_Options.cmake create mode 100644 misc/CMake/FindPOLY2TRI.cmake delete mode 100644 misc/CMake/FindSSE.cmake create mode 100644 misc/CMake/FindSTEPCODE.cmake delete mode 100644 misc/CMake/FindVDS.cmake create mode 100644 misc/CMake/date_delta.cpp create mode 100644 misc/CMake/scripts/printtime.cmake create mode 100644 misc/CMake/scripts/tcl_mkindex.cmake create mode 100644 misc/CMake/scripts/timestamp.cmake delete mode 100644 misc/external_build_testing/CMake/ExternalProject_Target.cmake delete mode 100644 misc/external_build_testing/CMake/Path_Setup.cmake delete mode 100644 misc/external_build_testing/CMake/RPath_Setup.cmake delete mode 100644 misc/external_build_testing/CMake/buildpath_replace.cxx.in delete mode 100644 misc/external_build_testing/CMake/rpath_replace.cxx.in delete mode 100644 misc/external_build_testing/CMakeLists.txt delete mode 100644 misc/external_build_testing/NOTES create mode 100644 regress/ged/ppush_tests.g create mode 100644 regress/ged/push.cpp create mode 100644 regress/ged/push_tests.g create mode 100644 regress/ged/regress-ged_push.cmake.in create mode 100644 regress/ged/xpush_tests.g mode change 100755 => 100644 regress/lights/lights.cmake rename src/{other/libspsr/Src => libbg/spsr}/Allocator.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/Array.h (96%) rename src/{other/libspsr/Src => libbg/spsr}/Array.inl (99%) rename src/{other/libspsr/Src => libbg/spsr}/BSplineData.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/BSplineData.inl (98%) rename src/{other/libspsr/Src => libbg/spsr}/BinaryNode.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/Factor.cpp (93%) rename src/{other/libspsr/Src => libbg/spsr}/Factor.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/FunctionData.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/FunctionData.inl (100%) rename src/{other/libspsr/Src/MyTime.h => libbg/spsr/Geometry.cpp} (67%) rename src/{other/libspsr/Src => libbg/spsr}/Geometry.h (90%) rename src/{other/libspsr/Src => libbg/spsr}/Geometry.inl (82%) rename src/{other/libspsr => libbg/spsr}/LICENSE (100%) rename src/{other/libspsr/Src => libbg/spsr}/MAT.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/MAT.inl (99%) rename src/{other/libspsr/Src => libbg/spsr}/MarchingCubes.cpp (98%) rename src/{other/libspsr/Src => libbg/spsr}/MarchingCubes.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/MultiGridOctreeData.IsoSurface.inl (97%) rename src/{other/libspsr/Src => libbg/spsr}/MultiGridOctreeData.SortedTreeNodes.inl (98%) rename src/{other/libspsr/Src => libbg/spsr}/MultiGridOctreeData.h (99%) rename src/{other/libspsr/Src => libbg/spsr}/MultiGridOctreeData.inl (97%) rename src/{other/libspsr/Src => libbg/spsr}/Octree.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/Octree.inl (98%) rename src/{other/libspsr/Src => libbg/spsr}/PPolynomial.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/PPolynomial.inl (100%) create mode 100644 src/libbg/spsr/PlyVertexMini.h rename src/{other/libspsr/Src => libbg/spsr}/PointStream.h (89%) rename src/{other/libspsr/Src => libbg/spsr}/PointStream.inl (69%) rename src/{other/libspsr/Src => libbg/spsr}/Polynomial.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/Polynomial.inl (100%) rename src/{other/libspsr/Src => libbg/spsr}/SPSR.cpp (74%) rename src/{other/libspsr/Src => libbg/spsr}/SPSR.h (74%) rename src/{other/libspsr/Src => libbg/spsr}/SparseMatrix.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/SparseMatrix.inl (93%) rename src/{other/libspsr/Src => libbg/spsr}/Vector.h (100%) rename src/{other/libspsr/Src => libbg/spsr}/Vector.inl (100%) rename src/{other/libspsr/Src => libbg/spsr}/cvertex.h (100%) rename src/libbn/{sobolseq.c => sobol.c} (73%) create mode 100644 src/libbn/tests/invalid.plot3 create mode 100644 src/libbn/tests/plot3.c create mode 100644 src/libbn/tests/valid.plot3 create mode 100644 src/libbrep/brep_defines.h create mode 100644 src/libbrep/debug_plot.cpp create mode 100644 src/libbrep/debug_plot.h create mode 100644 src/libbrep/tests/ppx.cpp create mode 100644 src/libbu/damlevlim.cpp create mode 100644 src/libbu/fort.c create mode 100644 src/libbu/fort.h create mode 100644 src/libbu/tbl.c mode change 100755 => 100644 src/libdm/osgl/osg_bob.cpp create mode 100644 src/libged/analyze/analyze.cpp create mode 100644 src/libged/analyze/arb8.cpp create mode 100644 src/libged/analyze/arbn.cpp create mode 100644 src/libged/analyze/ars.cpp create mode 100644 src/libged/analyze/ged_analyze.h create mode 100644 src/libged/analyze/op_pnts_vol.cpp create mode 100644 src/libged/analyze/sketch.cpp create mode 100644 src/libged/analyze/superell.cpp rename src/libged/analyze/{analyze.c => util.cpp} (51%) create mode 100644 src/libged/brep/dplot.c create mode 100644 src/libged/brep/dplot_parser.lemon create mode 100644 src/libged/brep/dplot_reader.c create mode 100644 src/libged/brep/dplot_reader.h create mode 100644 src/libged/brep/dplot_scanner.perplex rename src/libged/gqa/{gqa.c => gqa.cpp} (97%) create mode 100644 src/libged/npush/CMakeLists.txt create mode 100644 src/libged/npush/npush.cpp mode change 100755 => 100644 src/libged/osg.cpp create mode 100644 src/libged/stat/CMakeLists.txt create mode 100644 src/libged/stat/fort.c create mode 100644 src/libged/stat/fort.h create mode 100644 src/libged/stat/stat.cpp create mode 100644 src/libged/tests/pnts_in_out.g rename src/{other/libgdiam => librt/gdiam}/LICENSE.MIT (100%) rename src/{other/libgdiam => librt/gdiam}/README (100%) rename src/{other/libgdiam => librt/gdiam}/gdiam.cpp (96%) create mode 100644 src/librt/gdiam/gdiam.hpp rename src/{other/libgdiam => librt/gdiam}/gdiam_test.cpp (71%) delete mode 100644 src/librt/timer-nt.c create mode 100644 src/librt/timer.cpp delete mode 100644 src/librt/timer42.c delete mode 100644 src/librt/timerunix.c rename src/{other/libvds => librt/vds}/COPYING (100%) rename src/{other/libvds => librt/vds}/README (100%) rename src/{other/libvds => librt/vds}/vds.c (83%) rename src/{other/libvds => librt/vds}/vds.h (80%) create mode 100644 src/libtclcad/command_io.cpp delete mode 100644 src/other/libgdiam.dist delete mode 100644 src/other/libgdiam/CMakeLists.txt delete mode 100644 src/other/libgdiam/gdiam.hpp delete mode 100644 src/other/libspsr.dist delete mode 100644 src/other/libspsr/CMakeLists.txt delete mode 100644 src/other/libspsr/Src/CmdLineParser.cpp delete mode 100644 src/other/libspsr/Src/CmdLineParser.h delete mode 100644 src/other/libspsr/Src/CmdLineParser.inl delete mode 100644 src/other/libspsr/Src/Geometry.cpp delete mode 100644 src/other/libspsr/Src/Hash.h delete mode 100644 src/other/libspsr/Src/MemoryUsage.h delete mode 100644 src/other/libspsr/Src/Ply.h delete mode 100644 src/other/libspsr/Src/PlyFile.cpp delete mode 100644 src/other/libspsr/Src/PoissonRecon.cpp delete mode 100644 src/other/libspsr/Src/SurfaceTrimmer.cpp delete mode 100644 src/other/libvds.dist delete mode 100644 src/other/libvds/CMakeLists.txt delete mode 100644 src/qged/display/glm/CMakeLists.txt delete mode 100644 src/qged/display/glm/cmake/glm/glmConfig-version.cmake delete mode 100644 src/qged/display/glm/cmake/glm/glmConfig.cmake delete mode 100644 src/qged/display/glm/glm/CMakeLists.txt delete mode 100644 src/qged/display/glm/glm/common.hpp delete mode 100644 src/qged/display/glm/glm/detail/_features.hpp delete mode 100644 src/qged/display/glm/glm/detail/_fixes.hpp delete mode 100644 src/qged/display/glm/glm/detail/_noise.hpp delete mode 100644 src/qged/display/glm/glm/detail/_swizzle.hpp delete mode 100644 src/qged/display/glm/glm/detail/_swizzle_func.hpp delete mode 100644 src/qged/display/glm/glm/detail/_vectorize.hpp delete mode 100644 src/qged/display/glm/glm/detail/compute_common.hpp delete mode 100644 src/qged/display/glm/glm/detail/compute_vector_relational.hpp delete mode 100644 src/qged/display/glm/glm/detail/func_common.inl delete mode 100644 src/qged/display/glm/glm/detail/func_common_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/func_exponential.inl delete mode 100644 src/qged/display/glm/glm/detail/func_exponential_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/func_geometric.inl delete mode 100644 src/qged/display/glm/glm/detail/func_geometric_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/func_integer.inl delete mode 100644 src/qged/display/glm/glm/detail/func_integer_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/func_matrix.inl delete mode 100644 src/qged/display/glm/glm/detail/func_matrix_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/func_packing.inl delete mode 100644 src/qged/display/glm/glm/detail/func_packing_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/func_trigonometric.inl delete mode 100644 src/qged/display/glm/glm/detail/func_trigonometric_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/func_vector_relational.inl delete mode 100644 src/qged/display/glm/glm/detail/func_vector_relational_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/glm.cpp delete mode 100644 src/qged/display/glm/glm/detail/qualifier.hpp delete mode 100644 src/qged/display/glm/glm/detail/setup.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_float.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_half.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_half.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat2x2.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_mat2x2.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat2x3.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_mat2x3.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat2x4.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_mat2x4.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat3x2.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_mat3x2.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat3x3.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_mat3x3.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat3x4.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_mat3x4.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat4x2.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_mat4x2.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat4x3.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_mat4x3.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat4x4.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_mat4x4.inl delete mode 100644 src/qged/display/glm/glm/detail/type_mat4x4_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/type_quat.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_quat.inl delete mode 100644 src/qged/display/glm/glm/detail/type_quat_simd.inl delete mode 100644 src/qged/display/glm/glm/detail/type_vec1.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_vec1.inl delete mode 100644 src/qged/display/glm/glm/detail/type_vec2.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_vec2.inl delete mode 100644 src/qged/display/glm/glm/detail/type_vec3.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_vec3.inl delete mode 100644 src/qged/display/glm/glm/detail/type_vec4.hpp delete mode 100644 src/qged/display/glm/glm/detail/type_vec4.inl delete mode 100644 src/qged/display/glm/glm/detail/type_vec4_simd.inl delete mode 100644 src/qged/display/glm/glm/exponential.hpp delete mode 100644 src/qged/display/glm/glm/ext.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_clip_space.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_clip_space.inl delete mode 100644 src/qged/display/glm/glm/ext/matrix_common.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_common.inl delete mode 100644 src/qged/display/glm/glm/ext/matrix_double2x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double2x2_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double2x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double2x3_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double2x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double2x4_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double3x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double3x2_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double3x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double3x3_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double3x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double3x4_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double4x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double4x2_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double4x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double4x3_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double4x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_double4x4_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float2x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float2x2_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float2x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float2x3_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float2x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float2x4_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float3x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float3x2_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float3x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float3x3_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float3x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float3x4_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float4x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float4x2_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float4x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float4x3_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float4x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_float4x4_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int2x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int2x2_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int2x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int2x3_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int2x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int2x4_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int3x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int3x2_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int3x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int3x3_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int3x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int3x4_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int4x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int4x2_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int4x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int4x3_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int4x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_int4x4_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_projection.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_projection.inl delete mode 100644 src/qged/display/glm/glm/ext/matrix_relational.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_relational.inl delete mode 100644 src/qged/display/glm/glm/ext/matrix_transform.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_transform.inl delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint2x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint2x2_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint2x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint2x3_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint2x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint2x4_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint3x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint3x2_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint3x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint3x3_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint3x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint3x4_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint4x2.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint4x2_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint4x3.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint4x3_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint4x4.hpp delete mode 100644 src/qged/display/glm/glm/ext/matrix_uint4x4_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_common.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_common.inl delete mode 100644 src/qged/display/glm/glm/ext/quaternion_common_simd.inl delete mode 100644 src/qged/display/glm/glm/ext/quaternion_double.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_double_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_exponential.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_exponential.inl delete mode 100644 src/qged/display/glm/glm/ext/quaternion_float.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_float_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_geometric.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_geometric.inl delete mode 100644 src/qged/display/glm/glm/ext/quaternion_relational.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_relational.inl delete mode 100644 src/qged/display/glm/glm/ext/quaternion_transform.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_transform.inl delete mode 100644 src/qged/display/glm/glm/ext/quaternion_trigonometric.hpp delete mode 100644 src/qged/display/glm/glm/ext/quaternion_trigonometric.inl delete mode 100644 src/qged/display/glm/glm/ext/scalar_common.hpp delete mode 100644 src/qged/display/glm/glm/ext/scalar_common.inl delete mode 100644 src/qged/display/glm/glm/ext/scalar_constants.hpp delete mode 100644 src/qged/display/glm/glm/ext/scalar_constants.inl delete mode 100644 src/qged/display/glm/glm/ext/scalar_int_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/scalar_integer.hpp delete mode 100644 src/qged/display/glm/glm/ext/scalar_integer.inl delete mode 100644 src/qged/display/glm/glm/ext/scalar_packing.hpp delete mode 100644 src/qged/display/glm/glm/ext/scalar_packing.inl delete mode 100644 src/qged/display/glm/glm/ext/scalar_relational.hpp delete mode 100644 src/qged/display/glm/glm/ext/scalar_relational.inl delete mode 100644 src/qged/display/glm/glm/ext/scalar_uint_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/scalar_ulp.hpp delete mode 100644 src/qged/display/glm/glm/ext/scalar_ulp.inl delete mode 100644 src/qged/display/glm/glm/ext/vector_bool1.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_bool1_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_bool2.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_bool2_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_bool3.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_bool3_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_bool4.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_bool4_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_common.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_common.inl delete mode 100644 src/qged/display/glm/glm/ext/vector_double1.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_double1_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_double2.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_double2_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_double3.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_double3_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_double4.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_double4_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_float1.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_float1_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_float2.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_float2_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_float3.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_float3_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_float4.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_float4_precision.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_int1.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_int1_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_int2.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_int2_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_int3.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_int3_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_int4.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_int4_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_integer.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_integer.inl delete mode 100644 src/qged/display/glm/glm/ext/vector_packing.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_packing.inl delete mode 100644 src/qged/display/glm/glm/ext/vector_relational.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_relational.inl delete mode 100644 src/qged/display/glm/glm/ext/vector_uint1.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_uint1_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_uint2.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_uint2_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_uint3.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_uint3_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_uint4.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_uint4_sized.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_ulp.hpp delete mode 100644 src/qged/display/glm/glm/ext/vector_ulp.inl delete mode 100644 src/qged/display/glm/glm/fwd.hpp delete mode 100644 src/qged/display/glm/glm/geometric.hpp delete mode 100644 src/qged/display/glm/glm/glm.hpp delete mode 100644 src/qged/display/glm/glm/gtc/bitfield.hpp delete mode 100644 src/qged/display/glm/glm/gtc/bitfield.inl delete mode 100644 src/qged/display/glm/glm/gtc/color_space.hpp delete mode 100644 src/qged/display/glm/glm/gtc/color_space.inl delete mode 100644 src/qged/display/glm/glm/gtc/constants.hpp delete mode 100644 src/qged/display/glm/glm/gtc/constants.inl delete mode 100644 src/qged/display/glm/glm/gtc/epsilon.hpp delete mode 100644 src/qged/display/glm/glm/gtc/epsilon.inl delete mode 100644 src/qged/display/glm/glm/gtc/integer.hpp delete mode 100644 src/qged/display/glm/glm/gtc/integer.inl delete mode 100644 src/qged/display/glm/glm/gtc/matrix_access.hpp delete mode 100644 src/qged/display/glm/glm/gtc/matrix_access.inl delete mode 100644 src/qged/display/glm/glm/gtc/matrix_integer.hpp delete mode 100644 src/qged/display/glm/glm/gtc/matrix_inverse.hpp delete mode 100644 src/qged/display/glm/glm/gtc/matrix_inverse.inl delete mode 100644 src/qged/display/glm/glm/gtc/matrix_transform.hpp delete mode 100644 src/qged/display/glm/glm/gtc/matrix_transform.inl delete mode 100644 src/qged/display/glm/glm/gtc/noise.hpp delete mode 100644 src/qged/display/glm/glm/gtc/noise.inl delete mode 100644 src/qged/display/glm/glm/gtc/packing.hpp delete mode 100644 src/qged/display/glm/glm/gtc/packing.inl delete mode 100644 src/qged/display/glm/glm/gtc/quaternion.hpp delete mode 100644 src/qged/display/glm/glm/gtc/quaternion.inl delete mode 100644 src/qged/display/glm/glm/gtc/quaternion_simd.inl delete mode 100644 src/qged/display/glm/glm/gtc/random.hpp delete mode 100644 src/qged/display/glm/glm/gtc/random.inl delete mode 100644 src/qged/display/glm/glm/gtc/reciprocal.hpp delete mode 100644 src/qged/display/glm/glm/gtc/reciprocal.inl delete mode 100644 src/qged/display/glm/glm/gtc/round.hpp delete mode 100644 src/qged/display/glm/glm/gtc/round.inl delete mode 100644 src/qged/display/glm/glm/gtc/type_aligned.hpp delete mode 100644 src/qged/display/glm/glm/gtc/type_precision.hpp delete mode 100644 src/qged/display/glm/glm/gtc/type_precision.inl delete mode 100644 src/qged/display/glm/glm/gtc/type_ptr.hpp delete mode 100644 src/qged/display/glm/glm/gtc/type_ptr.inl delete mode 100644 src/qged/display/glm/glm/gtc/ulp.hpp delete mode 100644 src/qged/display/glm/glm/gtc/ulp.inl delete mode 100644 src/qged/display/glm/glm/gtc/vec1.hpp delete mode 100644 src/qged/display/glm/glm/gtx/associated_min_max.hpp delete mode 100644 src/qged/display/glm/glm/gtx/associated_min_max.inl delete mode 100644 src/qged/display/glm/glm/gtx/bit.hpp delete mode 100644 src/qged/display/glm/glm/gtx/bit.inl delete mode 100644 src/qged/display/glm/glm/gtx/closest_point.hpp delete mode 100644 src/qged/display/glm/glm/gtx/closest_point.inl delete mode 100644 src/qged/display/glm/glm/gtx/color_encoding.hpp delete mode 100644 src/qged/display/glm/glm/gtx/color_encoding.inl delete mode 100644 src/qged/display/glm/glm/gtx/color_space.hpp delete mode 100644 src/qged/display/glm/glm/gtx/color_space.inl delete mode 100644 src/qged/display/glm/glm/gtx/color_space_YCoCg.hpp delete mode 100644 src/qged/display/glm/glm/gtx/color_space_YCoCg.inl delete mode 100644 src/qged/display/glm/glm/gtx/common.hpp delete mode 100644 src/qged/display/glm/glm/gtx/common.inl delete mode 100644 src/qged/display/glm/glm/gtx/compatibility.hpp delete mode 100644 src/qged/display/glm/glm/gtx/compatibility.inl delete mode 100644 src/qged/display/glm/glm/gtx/component_wise.hpp delete mode 100644 src/qged/display/glm/glm/gtx/component_wise.inl delete mode 100644 src/qged/display/glm/glm/gtx/dual_quaternion.hpp delete mode 100644 src/qged/display/glm/glm/gtx/dual_quaternion.inl delete mode 100644 src/qged/display/glm/glm/gtx/easing.hpp delete mode 100644 src/qged/display/glm/glm/gtx/easing.inl delete mode 100644 src/qged/display/glm/glm/gtx/euler_angles.hpp delete mode 100644 src/qged/display/glm/glm/gtx/euler_angles.inl delete mode 100644 src/qged/display/glm/glm/gtx/extend.hpp delete mode 100644 src/qged/display/glm/glm/gtx/extend.inl delete mode 100644 src/qged/display/glm/glm/gtx/extended_min_max.hpp delete mode 100644 src/qged/display/glm/glm/gtx/extended_min_max.inl delete mode 100644 src/qged/display/glm/glm/gtx/exterior_product.hpp delete mode 100644 src/qged/display/glm/glm/gtx/exterior_product.inl delete mode 100644 src/qged/display/glm/glm/gtx/fast_exponential.hpp delete mode 100644 src/qged/display/glm/glm/gtx/fast_exponential.inl delete mode 100644 src/qged/display/glm/glm/gtx/fast_square_root.hpp delete mode 100644 src/qged/display/glm/glm/gtx/fast_square_root.inl delete mode 100644 src/qged/display/glm/glm/gtx/fast_trigonometry.hpp delete mode 100644 src/qged/display/glm/glm/gtx/fast_trigonometry.inl delete mode 100644 src/qged/display/glm/glm/gtx/float_notmalize.inl delete mode 100644 src/qged/display/glm/glm/gtx/functions.hpp delete mode 100644 src/qged/display/glm/glm/gtx/functions.inl delete mode 100644 src/qged/display/glm/glm/gtx/gradient_paint.hpp delete mode 100644 src/qged/display/glm/glm/gtx/gradient_paint.inl delete mode 100644 src/qged/display/glm/glm/gtx/handed_coordinate_space.hpp delete mode 100644 src/qged/display/glm/glm/gtx/handed_coordinate_space.inl delete mode 100644 src/qged/display/glm/glm/gtx/hash.hpp delete mode 100644 src/qged/display/glm/glm/gtx/hash.inl delete mode 100644 src/qged/display/glm/glm/gtx/integer.hpp delete mode 100644 src/qged/display/glm/glm/gtx/integer.inl delete mode 100644 src/qged/display/glm/glm/gtx/intersect.hpp delete mode 100644 src/qged/display/glm/glm/gtx/intersect.inl delete mode 100644 src/qged/display/glm/glm/gtx/io.hpp delete mode 100644 src/qged/display/glm/glm/gtx/io.inl delete mode 100644 src/qged/display/glm/glm/gtx/log_base.hpp delete mode 100644 src/qged/display/glm/glm/gtx/log_base.inl delete mode 100644 src/qged/display/glm/glm/gtx/matrix_cross_product.hpp delete mode 100644 src/qged/display/glm/glm/gtx/matrix_cross_product.inl delete mode 100644 src/qged/display/glm/glm/gtx/matrix_decompose.hpp delete mode 100644 src/qged/display/glm/glm/gtx/matrix_decompose.inl delete mode 100644 src/qged/display/glm/glm/gtx/matrix_factorisation.hpp delete mode 100644 src/qged/display/glm/glm/gtx/matrix_factorisation.inl delete mode 100644 src/qged/display/glm/glm/gtx/matrix_interpolation.hpp delete mode 100644 src/qged/display/glm/glm/gtx/matrix_interpolation.inl delete mode 100644 src/qged/display/glm/glm/gtx/matrix_major_storage.hpp delete mode 100644 src/qged/display/glm/glm/gtx/matrix_major_storage.inl delete mode 100644 src/qged/display/glm/glm/gtx/matrix_operation.hpp delete mode 100644 src/qged/display/glm/glm/gtx/matrix_operation.inl delete mode 100644 src/qged/display/glm/glm/gtx/matrix_query.hpp delete mode 100644 src/qged/display/glm/glm/gtx/matrix_query.inl delete mode 100644 src/qged/display/glm/glm/gtx/matrix_transform_2d.hpp delete mode 100644 src/qged/display/glm/glm/gtx/matrix_transform_2d.inl delete mode 100644 src/qged/display/glm/glm/gtx/mixed_product.hpp delete mode 100644 src/qged/display/glm/glm/gtx/mixed_product.inl delete mode 100644 src/qged/display/glm/glm/gtx/norm.hpp delete mode 100644 src/qged/display/glm/glm/gtx/norm.inl delete mode 100644 src/qged/display/glm/glm/gtx/normal.hpp delete mode 100644 src/qged/display/glm/glm/gtx/normal.inl delete mode 100644 src/qged/display/glm/glm/gtx/normalize_dot.hpp delete mode 100644 src/qged/display/glm/glm/gtx/normalize_dot.inl delete mode 100644 src/qged/display/glm/glm/gtx/number_precision.hpp delete mode 100644 src/qged/display/glm/glm/gtx/number_precision.inl delete mode 100644 src/qged/display/glm/glm/gtx/optimum_pow.hpp delete mode 100644 src/qged/display/glm/glm/gtx/optimum_pow.inl delete mode 100644 src/qged/display/glm/glm/gtx/orthonormalize.hpp delete mode 100644 src/qged/display/glm/glm/gtx/orthonormalize.inl delete mode 100644 src/qged/display/glm/glm/gtx/perpendicular.hpp delete mode 100644 src/qged/display/glm/glm/gtx/perpendicular.inl delete mode 100644 src/qged/display/glm/glm/gtx/polar_coordinates.hpp delete mode 100644 src/qged/display/glm/glm/gtx/polar_coordinates.inl delete mode 100644 src/qged/display/glm/glm/gtx/projection.hpp delete mode 100644 src/qged/display/glm/glm/gtx/projection.inl delete mode 100644 src/qged/display/glm/glm/gtx/quaternion.hpp delete mode 100644 src/qged/display/glm/glm/gtx/quaternion.inl delete mode 100644 src/qged/display/glm/glm/gtx/range.hpp delete mode 100644 src/qged/display/glm/glm/gtx/raw_data.hpp delete mode 100644 src/qged/display/glm/glm/gtx/raw_data.inl delete mode 100644 src/qged/display/glm/glm/gtx/rotate_normalized_axis.hpp delete mode 100644 src/qged/display/glm/glm/gtx/rotate_normalized_axis.inl delete mode 100644 src/qged/display/glm/glm/gtx/rotate_vector.hpp delete mode 100644 src/qged/display/glm/glm/gtx/rotate_vector.inl delete mode 100644 src/qged/display/glm/glm/gtx/scalar_multiplication.hpp delete mode 100644 src/qged/display/glm/glm/gtx/scalar_relational.hpp delete mode 100644 src/qged/display/glm/glm/gtx/scalar_relational.inl delete mode 100644 src/qged/display/glm/glm/gtx/spline.hpp delete mode 100644 src/qged/display/glm/glm/gtx/spline.inl delete mode 100644 src/qged/display/glm/glm/gtx/std_based_type.hpp delete mode 100644 src/qged/display/glm/glm/gtx/std_based_type.inl delete mode 100644 src/qged/display/glm/glm/gtx/string_cast.hpp delete mode 100644 src/qged/display/glm/glm/gtx/string_cast.inl delete mode 100644 src/qged/display/glm/glm/gtx/texture.hpp delete mode 100644 src/qged/display/glm/glm/gtx/texture.inl delete mode 100644 src/qged/display/glm/glm/gtx/transform.hpp delete mode 100644 src/qged/display/glm/glm/gtx/transform.inl delete mode 100644 src/qged/display/glm/glm/gtx/transform2.hpp delete mode 100644 src/qged/display/glm/glm/gtx/transform2.inl delete mode 100644 src/qged/display/glm/glm/gtx/type_aligned.hpp delete mode 100644 src/qged/display/glm/glm/gtx/type_aligned.inl delete mode 100644 src/qged/display/glm/glm/gtx/type_trait.hpp delete mode 100644 src/qged/display/glm/glm/gtx/type_trait.inl delete mode 100644 src/qged/display/glm/glm/gtx/vec_swizzle.hpp delete mode 100644 src/qged/display/glm/glm/gtx/vector_angle.hpp delete mode 100644 src/qged/display/glm/glm/gtx/vector_angle.inl delete mode 100644 src/qged/display/glm/glm/gtx/vector_query.hpp delete mode 100644 src/qged/display/glm/glm/gtx/vector_query.inl delete mode 100644 src/qged/display/glm/glm/gtx/wrap.hpp delete mode 100644 src/qged/display/glm/glm/gtx/wrap.inl delete mode 100644 src/qged/display/glm/glm/integer.hpp delete mode 100644 src/qged/display/glm/glm/mat2x2.hpp delete mode 100644 src/qged/display/glm/glm/mat2x3.hpp delete mode 100644 src/qged/display/glm/glm/mat2x4.hpp delete mode 100644 src/qged/display/glm/glm/mat3x2.hpp delete mode 100644 src/qged/display/glm/glm/mat3x3.hpp delete mode 100644 src/qged/display/glm/glm/mat3x4.hpp delete mode 100644 src/qged/display/glm/glm/mat4x2.hpp delete mode 100644 src/qged/display/glm/glm/mat4x3.hpp delete mode 100644 src/qged/display/glm/glm/mat4x4.hpp delete mode 100644 src/qged/display/glm/glm/matrix.hpp delete mode 100644 src/qged/display/glm/glm/packing.hpp delete mode 100644 src/qged/display/glm/glm/simd/common.h delete mode 100644 src/qged/display/glm/glm/simd/exponential.h delete mode 100644 src/qged/display/glm/glm/simd/geometric.h delete mode 100644 src/qged/display/glm/glm/simd/integer.h delete mode 100644 src/qged/display/glm/glm/simd/matrix.h delete mode 100644 src/qged/display/glm/glm/simd/neon.h delete mode 100644 src/qged/display/glm/glm/simd/packing.h delete mode 100644 src/qged/display/glm/glm/simd/platform.h delete mode 100644 src/qged/display/glm/glm/simd/trigonometric.h delete mode 100644 src/qged/display/glm/glm/simd/vector_relational.h delete mode 100644 src/qged/display/glm/glm/trigonometric.hpp delete mode 100644 src/qged/display/glm/glm/vec2.hpp delete mode 100644 src/qged/display/glm/glm/vec3.hpp delete mode 100644 src/qged/display/glm/glm/vec4.hpp delete mode 100644 src/qged/display/glm/glm/vector_relational.hpp delete mode 100644 src/qged/display/glm/manual.md delete mode 100644 src/qged/display/glm/readme.md mode change 100755 => 100644 src/tclscripts/archer/tabwindow.itk mode change 100755 => 100644 src/tclscripts/fs_dialog.tk mode change 100755 => 100644 src/tclscripts/geometree/geometree.tcl mode change 100755 => 100644 src/tclscripts/rtwizard/lib/DbPage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/ExamplePage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/FbPage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/FeedbackDialog.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/FullColorPage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/GhostPage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/HelpPage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/HighlightedPage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/IntroPage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/LinePage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/MGEDpage.itk mode change 100755 => 100644 src/tclscripts/rtwizard/lib/PictureTypeA.itcl mode change 100755 => 100644 src/tclscripts/rtwizard/lib/PictureTypeB.itcl mode change 100755 => 100644 src/tclscripts/rtwizard/lib/PictureTypeBase.itcl mode change 100755 => 100644 src/tclscripts/rtwizard/lib/PictureTypeC.itcl mode change 100755 => 100644 src/tclscripts/rtwizard/lib/PictureTypeD.itcl mode change 100755 => 100644 src/tclscripts/rtwizard/lib/PictureTypeE.itcl mode change 100755 => 100644 src/tclscripts/rtwizard/lib/PictureTypeF.itcl mode change 100755 => 100644 src/tclscripts/rtwizard/lib/Wizard.itk mode change 100755 => 100644 src/tclscripts/sdialogs/scripts/entrydialog.itk mode change 100755 => 100644 src/tclscripts/sdialogs/scripts/listdialog.itk mode change 100755 => 100644 src/tclscripts/sdialogs/scripts/stddlgs.tcl mode change 100755 => 100644 src/tclscripts/swidgets/scripts/selectlists.itk mode change 100755 => 100644 src/tclscripts/swidgets/scripts/tkgetdir.itk mode change 100755 => 100644 src/tclscripts/swidgets/scripts/togglearrow.itk mode change 100755 => 100644 src/tclscripts/swidgets/scripts/tooltip.itk mode change 100755 => 100644 src/tclscripts/swidgets/scripts/tree.itk diff --git a/AUTHORS b/AUTHORS index 6d13eda8f24..76850b3b7c9 100644 --- a/AUTHORS +++ b/AUTHORS @@ -913,6 +913,11 @@ nicknames sumagnadas 2020 May Open Source +Atreya, Vikram +nicknames vikram-atreya +2020 October +Open Source + SPECIAL THANKS -------------- diff --git a/CHANGES b/CHANGES index 1dd3f4a58d2..7d980d54190 100644 --- a/CHANGES +++ b/CHANGES @@ -129,6 +129,10 @@ removed at any time. 7.32 ---- +include/bu/app.h + bu_brlcad_root: replaced by bu_dir + bu_brlcad_dir: replaced by bu_dir + include/bg/chull.h All functions returning point arrays instead of index arrays. Will be replaced by similarly named functions returning @@ -137,6 +141,13 @@ include/bg/chull.h bg_polyline_2d_chull, bg_2d_chull, bg_3d_coplanar_chull, bg_3d_chull +include/bu/exit.h + bu_backtrace and bu_crashreport will be replaced with versions + that take an optional parameter to pass in a full path from + the calling application. (Currently available as + bu_backtrace_app and bu_crashreport_app, these will + replace existing versions after deprecation is complete.) + MGED gui The following will be removed from MGED's menu bar (unused features, can be accomplished another way, or will be exposed @@ -1551,3 +1562,6 @@ s/proe-brl/creo-brl/g ---- s/facetall.sh/mged -c facetize/g replaced by more improved facetize command [7.30] +s/pixcmp -s/pixcmp -q/g +s/pixcmp -l/pixcmp -d/g + changed pixcmp options for consistency with new options [7.32] diff --git a/CMakeLists.txt b/CMakeLists.txt index 30773db1a80..d2082bc3c38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,7 +1,7 @@ # C M A K E L I S T S . T X T # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -79,11 +79,44 @@ # BRL-CAD software package. # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(BRLCAD) +# install(CODE) uses generator expressions - requires 3.14 or newer. +# We want it to be on, but until we can bump our minimum requirement +# set it to OLD to make sure we don't break anything. +if (POLICY CMP0087) + cmake_policy(SET CMP0087 OLD) +endif (POLICY CMP0087) + +# Test name character check - need to look into this one... +if (POLICY CMP0110) + cmake_policy(SET CMP0110 OLD) +endif (POLICY CMP0110) + +#--------------------------------------------------------------------- +# CMake derives much of its functionality from modules, typically +# stored in one directory - let CMake know where to find them. If we +# are a subbuild, let the parent's CMAKE_MODULE_PATH supply files before +# our own, otherwise misc/CMake takes first priority. +set(BRLCAD_CMAKE_DIR "${BRLCAD_SOURCE_DIR}/misc/CMake") +list(APPEND CMAKE_MODULE_PATH "${BRLCAD_CMAKE_DIR}") + + +#--------------------------------------------------------------------- +# Setup and checks related to system environment settings. Some of +# these impact search results needed to set default options, so we +# do this early in the process. +include(BRLCAD_Environment_Setup) + + +#--------------------------------------------------------------------- +# Define various utilities. +include(BRLCAD_Util) + + #--------------------------------------------------------------------- # Define the current BRL-CAD version. # See HACKING for details on how to properly update the version @@ -110,34 +143,16 @@ else(NOT EXISTS ${BRLCAD_CNT_FILE}) set(BRLCAD_PRINT_MSGS 0) endif(NOT EXISTS ${BRLCAD_CNT_FILE}) -# We will need to define a number of dependent options early on -include(CMakeDependentOption) - #--------------------------------------------------------------------- -# Define an option to use OBJECT libraries - when we build this -# way, we also need position independent code. +# Define an option to use OBJECT libraries. If we are building with object +# libraries, we need position independent code. +include(CMakeDependentOption) cmake_dependent_option(USE_OBJECT_LIBS "Use OBJECT libraries" ON "NOT MSVC" OFF) mark_as_advanced(USE_OBJECT_LIBS) if(USE_OBJECT_LIBS) set(CMAKE_POSITION_INDEPENDENT_CODE TRUE) endif(USE_OBJECT_LIBS) -#--------------------------------------------------------------------- -# CMake derives much of its functionality from modules, typically -# stored in one directory - let CMake know where to find them. If we -# are a subbuild, let the parent's CMAKE_MODULE_PATH supply files before -# our own, otherwise misc/CMake takes first priority. -set(BRLCAD_CMAKE_DIR "${BRLCAD_SOURCE_DIR}/misc/CMake") -list(APPEND CMAKE_MODULE_PATH "${BRLCAD_CMAKE_DIR}") - - -#--------------------------------------------------------------------- -# Load general utility routines for BRL-CAD CMake logic -include(BRLCAD_Util) - -# Find the executable extension, if there is one -get_filename_component(EXE_EXT "${CMAKE_COMMAND}" EXT) - #--------------------------------------------------------------------- # Record the CMake command line arguments (more or less) in # CMakeFiles/CMakeOutput.log @@ -146,57 +161,14 @@ record_cmdline_args() #--------------------------------------------------------------------- # Set up the necessary support for timing of the configuration and # build processes -set_config_time() -generate_sstamp() +string(TIMESTAMP CONFIG_DATE "%Y%m%d") +string(TIMESTAMP CONFIG_DATESTAMP "%a, %d %b %Y %H:%M:%S UTC" UTC) #--------------------------------------------------------------------- # Mark the time at which the configuration process began. -set(CONFIG_DELTA_START "${CMAKE_BINARY_DIR}/CMakeTmp/CONFIG_DELTA_START") -execute_process(COMMAND "${CMAKE_BINARY_DIR}/CMakeTmp/sstamp${EXE_EXT}" "${CONFIG_DELTA_START}") - -#------------------------------------------------------------------------------ -# The SuperBuild (https://blog.kitware.com/cmake-superbuilds-git-submodules/) -# pattern requires a differentiation between the CMake installation prefix used -# for the build and the specification of the ultimate installation location -# used for the superbuild's install. Any hard-coded knowledge of the final -# path backed into BRL-CAD must use the superbuild's final destination, not the -# intermediate build-directory installation used by the superbuild. -# -# For the moment we are not using superbuild, but we will ultimately need to -# move to that approach to manage increasingly complex dependencies. To allow -# the code to work seamlessly with both variables, make them match unless both -# are explicitly set in advance. -if (DEFINED BRLCAD_INSTALL_PREFIX) - if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT DEFINED CMAKE_INSTALL_PREFIX) - set(CMAKE_INSTALL_PREFIX "${BRLCAD_INSTALL_PREFIX}") - endif (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT DEFINED CMAKE_INSTALL_PREFIX) -endif (DEFINED BRLCAD_INSTALL_PREFIX) -if (DEFINED CMAKE_INSTALL_PREFIX AND NOT DEFINED BRLCAD_INSTALL_PREFIX) - set(BRLCAD_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") -endif (DEFINED CMAKE_INSTALL_PREFIX AND NOT DEFINED BRLCAD_INSTALL_PREFIX) -#--------------------------------------------------------------------- -# Allow the BRLCAD_ROOT environment variable to set during build, but be noisy -# about it unless we're specifically told this is intentional. Having this -# happen by accident is generally not a good idea. -find_program(SLEEP_EXEC sleep) -mark_as_advanced(SLEEP_EXEC) -if(NOT "$ENV{BRLCAD_ROOT}" STREQUAL "" AND NOT BRLCAD_ROOT_OVERRIDE) - message(WARNING "\nBRLCAD_ROOT is presently set to \"$ENV{BRLCAD_ROOT}\"\nBRLCAD_ROOT should typically be used only when needed as a runtime override, not during compilation. Building with BRLCAD_ROOT set may produce unexpected behavior during both compilation and subsequent program execution. It is *highly* recommended that BRLCAD_ROOT be unset and not used.\n") - if(SLEEP_EXEC) - execute_process(COMMAND ${SLEEP_EXEC} 2) - endif(SLEEP_EXEC) -endif(NOT "$ENV{BRLCAD_ROOT}" STREQUAL "" AND NOT BRLCAD_ROOT_OVERRIDE) - -# If BRLCAD_INSTALL_PREFIX is "/usr", be VERY noisy about it - a make install in -# this location is dangerous/destructive on some systems. -if("${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT BRLCAD_ALLOW_INSTALL_TO_USR) - message(WARNING "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}\nIt is STRONGLY recommended that you DO NOT install BRL-CAD into /usr as BRL-CAD provides several libraries that may conflict with other libraries (e.g. librt, libbu, libbn) on certain system configurations.\nSince our libraries predate all those that we're known to conflict with and are at the very core of our geometry services and project heritage, we have no plans to change the names of our libraries at this time.\nINSTALLING INTO /usr CAN MAKE A SYSTEM COMPLETELY UNUSABLE. If you choose to continue installing into /usr, you do so entirely at your own risk. You have been warned.\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}") - if(SLEEP_EXEC) - execute_process(COMMAND ${SLEEP_EXEC} 15) - endif(SLEEP_EXEC) - message(FATAL_ERROR "If you wish to proceed using /usr as your prefix, define BRLCAD_ALLOW_INSTALL_TO_USR=1 for CMake") -endif("${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT BRLCAD_ALLOW_INSTALL_TO_USR) +set(CONFIG_DELTA_START "${CMAKE_BINARY_DIR}/CMakeTmp/CONFIG_DELTA_START") +execute_process(COMMAND "${CMAKE_COMMAND}" -DSTAMP_FILE=${CONFIG_DELTA_START} -P "${BRLCAD_CMAKE_DIR}/scripts/timestamp.cmake") #--------------------------------------------------------------------- # Define relative install locations and output directories. Don't set @@ -211,116 +183,10 @@ endif("${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT BRLCAD_ALLOW_INSTALL_TO include(Path_Setup) #--------------------------------------------------------------------- -# Searching the system for packages presents something of a dilemma - -# in most situations it is Very Bad for a BRL-CAD build to be using -# older versions of libraries in install directories as search results. -# Generally, the desired behavior is to ignore whatever libraries are -# in the install directories, and only use external library results if -# they are something already found on the system due to non-BRL-CAD -# installation (source compile, package managers, etc.). Unfortunately, -# CMake's standard behavior is to add CMAKE_INSTALL_PREFIX to the search -# path once defined, resulting in (for us) the unexpected behavior of -# returning old installed libraries when CMake is re-run in a directory. -# -# To work around this, there are two possible approaches. One, -# identified by Maik Beckmann, operates on CMAKE_SYSTEM_PREFIX_PATH: -# -# http://www.cmake.org/pipermail/cmake/2010-October/040292.html -# -# The other, pointed out by Michael Hertling, uses the -# CMake_[SYSTEM_]IGNORE_PATH variables. -# -# http://www.cmake.org/pipermail/cmake/2011-May/044503.html -# -# BRL-CAD initially operated on CMAKE_SYSTEM_PREFIX_PATH, but has -# switched to using the *_IGNORE_PATH variables. This requires -# CMake 2.8.3 or later. -# -# The complication with ignoring install paths is if we are -# installing to a "legitimate" system search path - i.e. our -# CMAKE_INSTALL_PREFIX value is standard enough that it is a legitimate -# search target for find_package. In this case, we can't exclude -# accidental hits on our libraries without also excluding legitimate -# find_package results. So the net results are: -# -# 1. If you are planning to install to a system directory (typically -# a bad idea but the settings are legal) clean out the old system -# first or accept that the old libraries will be found and used. -# -# 2. For more custom paths, the logic below will avoid the value -# of CMAKE_INSTALL_PREFIX in find_package searches -# -# (Note: CMAKE_INSTALL_PREFIX must be checked in the case where someone -# sets it on the command line prior to CMake being run. BRLCAD_PREFIX -# preserves the CMAKE_INSTALL_PREFIX setting from the previous CMake run. -# CMAKE_INSTALL_PREFIX does not seem to be immediately set in this context -# when CMake is re-run unless specified explicitly on the command line. -# To ensure the previous (and internally set) CMAKE_INSTALL_PREFIX value -# is available, BRLCAD_PREFIX is used to store the value in the cache.) - -if(BRLCAD_INSTALL_PREFIX) - if(NOT "${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT "${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr/local") - get_filename_component(PATH_NORMALIZED "${BRLCAD_INSTALL_PREFIX}/${LIB_DIR}" ABSOLUTE) - set(CMAKE_SYSTEM_IGNORE_PATH "${PATH_NORMALIZED}") - endif(NOT "${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT "${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr/local") -endif(BRLCAD_INSTALL_PREFIX) - -if(CMAKE_INSTALL_PREFIX) - if(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local") - get_filename_component(PATH_NORMALIZED "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}" ABSOLUTE) - set(CMAKE_SYSTEM_IGNORE_PATH "${PATH_NORMALIZED}") - endif(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local") -endif(CMAKE_INSTALL_PREFIX) - -if(BRLCAD_PREFIX) - if(NOT "${BRLCAD_PREFIX}" STREQUAL "/usr" AND NOT "${BRLCAD_PREFIX}" STREQUAL "/usr/local") - get_filename_component(PATH_NORMALIZED "${BRLCAD_PREFIX}/${LIB_DIR}" ABSOLUTE) - set(CMAKE_SYSTEM_IGNORE_PATH "${PATH_NORMALIZED}") - endif(NOT "${BRLCAD_PREFIX}" STREQUAL "/usr" AND NOT "${BRLCAD_PREFIX}" STREQUAL "/usr/local") -endif(BRLCAD_PREFIX) -mark_as_advanced(CMAKE_SYSTEM_IGNORE_PATH) - -#------------------------------------------------------------------------------ -# For multi-configuration builds, we frequently need to know the run-time build -# directory. Confusingly, we need to do different things for install commands -# and custom command definitions. To manage this, we define -# CMAKE_CURRENT_BUILD_DIR_SCRIPT and CMAKE_CURRENT_BUILD_DIR_INSTALL once at -# the top level, then use them when we need the configuration-dependent path. -# -# Note that neither of these will work when we need to generate a .cmake file -# that does runtime detection of the current build configuration. CMake -# scripts run using "cmake -P script.cmake" style invocation are independent of -# the "main" build system and will not know how to resolve either of the below -# variables correctly. In that case, the script itself must check the current -# file in CMakeTmp/CURRENT_PATH (TODO - need to better organize and document -# this mechanism, given how critical it is proving... possible convention will -# be to have the string CURRENT_BUILD_DIR in any path that needs the relevant -# logic in a script, and a standard substitution routine...) and set any -# necessary path variables accordingly. (TODO - make a standard function to do -# that the right way that scripts can load and use - right now that logic is -# scattered all over the code and if we wanted to change where those files went -# it would be a lot of work.) -if(CMAKE_CONFIGURATION_TYPES) - set(CMAKE_CURRENT_BUILD_DIR_SCRIPT "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}") - set(CMAKE_CURRENT_BUILD_DIR_INSTALL "${CMAKE_BINARY_DIR}/\${BUILD_TYPE}") -else(CMAKE_CONFIGURATION_TYPES) - set(CMAKE_CURRENT_BUILD_DIR_SCRIPT "${CMAKE_BINARY_DIR}") - set(CMAKE_CURRENT_BUILD_DIR_INSTALL "${CMAKE_BINARY_DIR}") -endif(CMAKE_CONFIGURATION_TYPES) - -# Mark CMAKE_CONFIGURATION_TYPES as advanced - users shouldn't be adjusting this -# directly. -mark_as_advanced(CMAKE_CONFIGURATION_TYPES) - -#--------------------------------------------------------------------- -# Set up include paths for generated header files. For multi-config -# builds, make sure we get build-specific dirs. -if(CMAKE_CONFIGURATION_TYPES) - include_directories(${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${INCLUDE_DIR}) - include_directories(${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${INCLUDE_DIR}/brlcad) -else(CMAKE_CONFIGURATION_TYPES) - include_directories(${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/brlcad) -endif(CMAKE_CONFIGURATION_TYPES) +# Management of build types +if (NOT BRLCAD_IS_SUBBUILD) + include(BRLCAD_Build_Types) +endif (NOT BRLCAD_IS_SUBBUILD) #--------------------------------------------------------------------- # For cleaning files as part of the distclean command, CMake needs @@ -335,358 +201,14 @@ if("${CMAKE_GENERATOR}" MATCHES "Make") set(DISTCLEAN_OUTFILES ${DISTCLEAN_OUTFILES} Makefile) endif("${CMAKE_GENERATOR}" MATCHES "Make") if("${CMAKE_GENERATOR}" MATCHES "Ninja") - set(DISTCLEAN_OUTFILES ${DISTCLEAN_OUTFILES} build.ninja rules.ninja) + set(DISTCLEAN_OUTFILES ${DISTCLEAN_OUTFILES} build.ninja rules.ninja .ninja_log) endif("${CMAKE_GENERATOR}" MATCHES "Ninja") #--------------------------------------------------------------------- -# By default (as of version 2.8.2) CMake does not provide access to -# global lists of executable and library targets. This is useful -# in a number of situations related to formulating custom rules and -# target dependency management. To avoid the necessity of replacing -# add_library and add_executable calls with custom macros, override -# the function names and call the _add_* functions to access the CMake -# functionality previously available under the add_* functions. See -# http://www.cmake.org/pipermail/cmake/2010-September/039388.html - -# To allow a hypothetical parent build to disable this mechanism and -# replace it, we wrap the whole show in an IF conditional. To avoid -# the distcheck setup, the parent file should define the variable -# BRLCAD_IS_SUBBUILD to ON. Note that this also disables the -# liblib prefix check in add_library, making that the responsibility -# of the parent build as well, and disables the mechanism for ensuring -# that the timing code runs at the correct points during the build. - -# We also need to provide bookkeeping logic here for the distribution -# verification or "distcheck" routines that will validate the state -# of the source tree against that expected and accounted for in the -# build files. The global coverage needed for the purpose results in -# the add_library/add_executable command override mechanism having -# to serve two purposes at once; since we only override these functions -# once the logic for both jobs is intertwined below. - -if(NOT BRLCAD_IS_SUBBUILD) - # Functions in CMake have local variable scope, - # hence the use of properties to allow access to directory-specific - # and global information scopes. - define_property(GLOBAL PROPERTY CMAKE_LIBRARY_TARGET_LIST BRIEF_DOCS "libtarget list" FULL_DOCS "Library target list") - define_property(GLOBAL PROPERTY CMAKE_EXEC_TARGET_LIST BRIEF_DOCS "exec target list" FULL_DOCS "Executable target list") - define_property(GLOBAL PROPERTY CMAKE_CUSTOM_TARGET_LIST BRIEF_DOCS "custom target list" FULL_DOCS "Custom target list") - define_property(GLOBAL PROPERTY CMAKE_EXTERNAL_TARGET_LIST BRIEF_DOCS "external target list" FULL_DOCS "External target list") - mark_as_advanced(CMAKE_LIBRARY_TARGET_LIST) - mark_as_advanced(CMAKE_EXEC_TARGET_LIST) - mark_as_advanced(CMAKE_CUSTOM_TARGET_LIST) - mark_as_advanced(CMAKE_EXTERNAL_TARGET_LIST) - - # Override and wrap add_library. While we're at it, avoid doubling up - # on the lib prefix for libraries if the target name is lib - function(add_library name) - _add_library(${name} ${ARGN}) - if(${name} MATCHES "^lib*") - set_target_properties(${name} PROPERTIES PREFIX "") - endif(${name} MATCHES "^lib*") - - # TODO - the mechanism below should eventually be replaced by a proper - # feature in CMake, but it is as yet unimplemented: - # https://cmake.org/pipermail/cmake-developers/2015-July/025682.html - # https://cmake.org/pipermail/cmake-developers/2016-March/027985.html - # https://cmake.org/pipermail/cmake-developers/2016-March/027993.html - set(add_lib_to_list 1) - foreach(libarg ${ARGN}) - if("${libarg}" STREQUAL "INTERFACE") - set(add_lib_to_list 0) - endif("${libarg}" STREQUAL "INTERFACE") - endforeach(libarg ${ARGN}) - if (add_lib_to_list) - set_property(GLOBAL APPEND PROPERTY CMAKE_LIBRARY_TARGET_LIST ${name}) - endif (add_lib_to_list) - endfunction(add_library) - - # Override and wrap add_executable - function(add_executable name) - _add_executable(${name} ${ARGN}) - - # TODO - the mechanism below should eventually be replaced by a proper - # feature in CMake, but it is as yet unimplemented: - # https://cmake.org/pipermail/cmake-developers/2015-July/025682.html - # https://cmake.org/pipermail/cmake-developers/2016-March/027985.html - # https://cmake.org/pipermail/cmake-developers/2016-March/027993.html - set_property(GLOBAL APPEND PROPERTY CMAKE_EXEC_TARGET_LIST ${name}) - endfunction(add_executable) - - # Override and wrap add_custom_target - function(add_custom_target name) - _add_custom_target(${name} ${ARGN}) - - # TODO - the mechanism below should eventually be replaced by a proper - # feature in CMake, but it is as yet unimplemented: - # https://cmake.org/pipermail/cmake-developers/2015-July/025682.html - # https://cmake.org/pipermail/cmake-developers/2016-March/027985.html - # https://cmake.org/pipermail/cmake-developers/2016-March/027993.html - set_property(GLOBAL APPEND PROPERTY CMAKE_CUSTOM_TARGET_LIST ${name}) - endfunction(add_custom_target) - - # Note that at the moment we do not need to override CMake's external - # project mechanisms because CMake does not use them, but if that changes - # in the future an override will need to be added here - probably of the - # ExternalProject_Add functionality. - - # Override and wrap configure_file. In the case of configure_file, we'll - # check that the file is part of the source tree and not itself a - # generated file, but not reject full-path entries since there are quite a - # few of them. This means that, unlike CMAKEFILES's reliance on full vs. - # relative path comparisons, generated files supplied to configure_file - # need to have the GENERATED property set in order to reliably tell which - # files should be added to the build system's lists. Not - # so critical with not-in-src-dir builds, but makes a big difference - # spotting files to avoid when all generated files have source directory - # prefixes. - function(configure_file file targetfile) - _configure_file(${file} ${targetfile} ${ARGN}) - # Tag output from configure with the GENERATED tag - set_source_files_properties(${targetfile} PROPERTIES GENERATED TRUE) - # If it's a generated file, don't register it - get_property(IS_GENERATED SOURCE ${file} PROPERTY GENERATED) - if(NOT IS_GENERATED) - get_filename_component(item_absolute ${file} ABSOLUTE) - # If we're not in the source dir, we can do some extra checking. - if(NOT "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") - IS_SUBPATH("${CMAKE_BINARY_DIR}" "${item_absolute}" SUBPATH_TEST) - else(NOT "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") - set(SUBPATH_TEST "0") - endif(NOT "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}") - if("${SUBPATH_TEST}" STREQUAL "0") - IS_SUBPATH("${CMAKE_SOURCE_DIR}" "${item_absolute}" SUBPATH_TEST) - if("${SUBPATH_TEST}" STREQUAL "1") - set_property(GLOBAL APPEND PROPERTY CMAKE_IGNORE_FILES "${item_absolute}") - endif("${SUBPATH_TEST}" STREQUAL "1") - else("${SUBPATH_TEST}" STREQUAL "0") - message(WARNING "The generated file ${file} is passed to configure_file but does not have the GENERATED source file property set in CMake. It is HIGHLY recommended that the GENERATED property be set for this file in \"${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt\" using a command with the following form:\nset_source_files_properties( PROPERTIES GENERATED TRUE)\n(or in \"${CMAKE_SOURCE_DIR}/src/other/CMakeLists.txt\" for third party components with their own build system.)\n") - endif("${SUBPATH_TEST}" STREQUAL "0") - endif(NOT IS_GENERATED) - if(NOT ${targetfile} MATCHES "distclean") - DISTCLEAN(${targetfile}) - endif(NOT ${targetfile} MATCHES "distclean") - endfunction(configure_file) - - # Override and wrap add_subdirectory. - function(add_subdirectory name) - _add_subdirectory(${name} ${ARGN}) - - # TODO - try to come up with some good way to do this bookkeeping without - # having to override add_subdirectory... - # - # see https://cmake.org/pipermail/cmake-developers/2015-July/025730.html - # for some work related to this... the SOURCE_DIR and SOURCES properties - # went in in CMake 3.4. Once we can require that as a minimum version, we - # can probably revisit at least part of this by getting a list of source - # directories for all targets at the end of the build and setting - # properties then. - DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/${name}/CMakeFiles") - DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/${name}/cmake_install.cmake") - foreach(clearpattern ${DISTCLEAN_OUTFILES}) - DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/${name}/${clearpattern}") - endforeach(clearpattern ${DISTCLEAN_OUTFILES}) - endfunction(add_subdirectory) - -endif(NOT BRLCAD_IS_SUBBUILD) - -# "make check" runs all of the tests (unit, benchmark, and regression) that are expected to work. -if(NOT BRLCAD_IS_SUBBUILD) - include(ProcessorCount) - ProcessorCount(N) - if(NOT N EQUAL 0) - 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) - endif(NOT N EQUAL 0) - - if(CMAKE_CONFIGURATION_TYPES) - set(CONFIG $) - else(CMAKE_CONFIGURATION_TYPES) - if ("${CONFIG}" STREQUAL "") - set(CONFIG "\"\"") - endif ("${CONFIG}" STREQUAL "") - endif(CMAKE_CONFIGURATION_TYPES) - - add_custom_target(check - COMMAND ${CMAKE_COMMAND} -E echo "\"**********************************************************************\"" - COMMAND ${CMAKE_COMMAND} -E echo "NOTE: The \\\"check\\\" a.k.a. \\\"BRL-CAD Validation Testing\\\" target runs" - COMMAND ${CMAKE_COMMAND} -E echo " BRL-CAD\\'s unit, system, integration, benchmark \\(performance\\), and" - COMMAND ${CMAKE_COMMAND} -E echo " regression tests. To consider a build viable for production use," - COMMAND ${CMAKE_COMMAND} -E echo " these tests must pass. Dependencies are compiled automatically." - COMMAND ${CMAKE_COMMAND} -E echo "\"**********************************************************************\"" - COMMAND ${CMAKE_CTEST_COMMAND} -C ${CONFIG} -LE \"Regression|STAND_ALONE\" -E \"^regress-|NOTE|benchmark|slow-\" --output-on-failure ${JFLAG} - COMMAND ${CMAKE_CTEST_COMMAND} -C ${CONFIG} -R \"benchmark\" --output-on-failure ${JFLAG} - COMMAND ${CMAKE_CTEST_COMMAND} -C ${CONFIG} -L \"Regression\" --output-on-failure ${JFLAG} - ) - set_target_properties(check PROPERTIES FOLDER "BRL-CAD Validation Testing") -endif(NOT BRLCAD_IS_SUBBUILD) - - -# To support "make unit" (which will build the required targets for testing -# in the style of GNU Autotools "make check") we define a "unit" target per -# http://www.cmake.org/Wiki/CMakeEmulateMakeCheck and have add_test -# automatically assemble its targets into the unit dependency list. -if(NOT BRLCAD_IS_SUBBUILD) - include(ProcessorCount) - ProcessorCount(N) - if(NOT N EQUAL 0) - 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) - endif(NOT N EQUAL 0) - - if(CMAKE_CONFIGURATION_TYPES) - set(CONFIG $) - else(CMAKE_CONFIGURATION_TYPES) - if ("${CONFIG}" STREQUAL "") - set(CONFIG "\"\"") - endif ("${CONFIG}" STREQUAL "") - endif(CMAKE_CONFIGURATION_TYPES) - - add_custom_target(unit - COMMAND ${CMAKE_COMMAND} -E echo "\"**********************************************************************\"" - COMMAND ${CMAKE_COMMAND} -E echo "NOTE: The \\\"unit\\\" a.k.a. \\\"BRL-CAD Unit Testing\\\" target runs the" - COMMAND ${CMAKE_COMMAND} -E echo " subset of BRL-CAD\\'s API unit tests that are expected to work \\(i.e.," - 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|benchmark|slow-\" ${JFLAG} - ) - - set_target_properties(unit PROPERTIES FOLDER "BRL-CAD Validation Testing") - - # we wrap the CMake add_test() function in order to automatically - # set up test dependencies for the 'unit' and 'check' test targets. - # - # this function extravagantly tries to work around a bug in CMake - # where we cannot pass an empty string through this wrapper to - # _add_test()/add_test(). passed as a list (e.g., via ARGN, ARGV, - # or manually composed), the empty string is skipped(!). passed as - # a string, it is all treated as command name with no arguments. - # - # manual workaround used here involves invoking _add_test() with all - # args individually recreated/specified (i.e., not as a list) as - # this preserves empty strings. this approach means we cannot - # generalize and only support a limited variety of empty string - # arguments, but we do test and halt if someone unknowingly tries. - function(add_test NAME test_name COMMAND test_prog) - - # find any occurrences of empty strings - set(idx 0) - set(matches) - foreach (ARG IN LISTS ARGV) - # need 'x' to avoid older cmake seeing "COMMAND" "STREQUAL" "" - if ("x${ARG}" STREQUAL "x") - list(APPEND matches ${idx}) - endif ("x${ARG}" STREQUAL "x") - math(EXPR idx "${idx} + 1") - endforeach() - - # make sure we don't exceed current support - list(LENGTH matches cnt) - if ("${cnt}" GREATER 1) - message(FATAL_ERROR "ERROR: encountered ${cnt} > 1 empty string being passed to add_test(${test_name}). Expand support in the top-level CMakeLists.txt file (grep add_test) or pass fewer empty strings.") - endif ("${cnt}" GREATER 1) - - # if there are empty strings, we need to manually recreate their calling - if ("${cnt}" GREATER 0) - - list(GET matches 0 empty) - if ("${empty}" EQUAL 4) - foreach (i 1) - if (ARGN) - list(REMOVE_AT ARGN 0) - endif (ARGN) - endforeach () - _add_test(NAME ${test_name} COMMAND ${test_prog} "" ${ARGN}) - elseif ("${empty}" EQUAL 5) - foreach (i 1 2) - if (ARGN) - list(REMOVE_AT ARGN 0) - endif (ARGN) - endforeach () - _add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} "" ${ARGN}) - elseif ("${empty}" EQUAL 6) - foreach (i 1 2 3) - if (ARGN) - list(REMOVE_AT ARGN 0) - endif (ARGN) - endforeach () - _add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} "" ${ARGN}) - elseif ("${empty}" EQUAL 7) - foreach (i 1 2 3 4) - if (ARGN) - list(REMOVE_AT ARGN 0) - endif (ARGN) - endforeach () - _add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} "" ${ARGN}) - elseif ("${empty}" EQUAL 8) - foreach (i 1 2 3 4 5) - if (ARGN) - list(REMOVE_AT ARGN 0) - endif (ARGN) - endforeach () - _add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} ${ARGV7} "" ${ARGN}) - elseif ("${empty}" EQUAL 9) - foreach (i 1 2 3 4 5 6) - if (ARGN) - list(REMOVE_AT ARGN 0) - endif (ARGN) - endforeach () - _add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} ${ARGV7} ${ARGV8} "" ${ARGN}) - elseif ("${empty}" EQUAL 10) - foreach (i 1 2 3 4 5 6) - if (ARGN) - list(REMOVE_AT ARGN 0) - endif (ARGN) - endforeach () - _add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} ${ARGV7} ${ARGV8} ${ARGV9} "" ${ARGN}) - elseif ("${empty}" EQUAL 11) - foreach (i 1 2 3 4 5 6) - if (ARGN) - list(REMOVE_AT ARGN 0) - endif (ARGN) - endforeach () - _add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} ${ARGV7} ${ARGV8} ${ARGV9} ${ARGV10} "" ${ARGN}) - - - # ADD_EMPTY_HERE: insert support for addition argv positions - # as extra elseif tests here using the preceding pattern. be - # sure to update the index in the following else clause fatal - # error message too. - - else ("${empty}" EQUAL 4) - message(FATAL_ERROR "ERROR: encountered an empty string passed to add_test(${test_name}) as ARGV${empty} > ARGV9. Expand support in the top-level CMakeLists.txt file (grep ADD_EMPTY_HERE).") - endif ("${empty}" EQUAL 4) - - else ("${cnt}" GREATER 0) - # no empty strings, no worries - _add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGN}) - endif ("${cnt}" GREATER 0) - - # add test to unit and check targets - if (NOT "${test_name}" MATCHES ^regress- AND NOT "${test_prog}" MATCHES ^regress- AND NOT "${test_name}" MATCHES ^slow- AND NOT "${test_name}" STREQUAL "benchmark" AND NOT "${test_name}" MATCHES ^NOTE:) - add_dependencies(unit ${test_prog}) - add_dependencies(check ${test_prog}) - endif (NOT "${test_name}" MATCHES ^regress- AND NOT "${test_prog}" MATCHES ^regress- AND NOT "${test_name}" MATCHES ^slow- AND NOT "${test_name}" STREQUAL "benchmark" AND NOT "${test_name}" MATCHES ^NOTE:) - - endfunction(add_test NAME test_name COMMAND test_prog) -endif(NOT BRLCAD_IS_SUBBUILD) - - +# CMake's default "make test" target is a bit limited - define +# our own "unit" and "check" targets that automate more of the +# dependency updating process. +include(BRLCAD_Test_Wrappers) #--------------------------------------------------------------------- # Load macros that will be used to define the BRL-CAD @@ -697,80 +219,20 @@ include(CheckTypeSize) include(CheckCSourceCompiles) include(CheckCXXSourceCompiles) -#--------------------------------------------------------------------- -# Save the current LC_ALL, LC_MESSAGES, and LANG environment variables -# and set them to "C" so things like date output are as expected. -set(_orig_lc_all $ENV{LC_ALL}) -set(_orig_lc_messages $ENV{LC_MESSAGES}) -set(_orig_lang $ENV{LANG}) -if(_orig_lc_all) - set(ENV{LC_ALL} C) -endif(_orig_lc_all) -if(_orig_lc_messages) - set(ENV{LC_MESSAGES} C) -endif(_orig_lc_messages) -if(_orig_lang) - set(ENV{LANG} C) -endif(_orig_lang) - -#--------------------------------------------------------------------- -# Package creation with CMake depends on the value of umask - if permissions -# are such that temporary files are created without permissions needed for -# generated packages, the resulting packages may behave badly when installed. -# In particular, RPM packages may improperly reset permissions on core -# directories such as /usr. -function(check_umask umask_val status_var) - string(REGEX REPLACE "[^x]" "" umask_x "${umask_val}") - string(REGEX REPLACE "[^r]" "" umask_r "${umask_val}") - string(LENGTH "${umask_r}" UMASK_HAVE_R) - set(${status_var} 0 PARENT_SCOPE) - if(UMASK_HAVE_R AND "${umask_x}" STREQUAL "xxx") - set(${status_var} 1 PARENT_SCOPE) - endif(UMASK_HAVE_R AND "${umask_x}" STREQUAL "xxx") -endfunction(check_umask) - -# Note - umask is not always an executable, so find_program wont' necessarily -# determine whether the umask check is appropriate. If we don't find an -# executable, follow up to see if we can use sh to get the info. -find_program(UMASK_EXEC umask) -mark_as_advanced(UMASK_EXEC) -if(NOT UMASK_EXEC) - # If we don't have a umask cmd, see if sh -c "umask -S" works - execute_process(COMMAND sh -c "umask -S" OUTPUT_VARIABLE umask_out) - # Check if we've got something that looks like a umask output - if("${umask_out}" MATCHES "^u=.*g=.*o=.*") - set(UMASK_EXEC sh) - set(UMASK_EXEC_ARGS -c "umask -S") - endif("${umask_out}" MATCHES "^u=.*g=.*o=.*") -else(NOT UMASK_EXEC) - set(UMASK_EXEC_ARGS -S) -endif(NOT UMASK_EXEC) - -if(UMASK_EXEC) - execute_process(COMMAND ${UMASK_EXEC} ${UMASK_EXEC_ARGS} OUTPUT_VARIABLE umask_curr) - string(STRIP "${umask_curr}" umask_curr) - check_umask("${umask_curr}" UMASK_OK) - if(NOT UMASK_OK) - message(" ") - message(WARNING "umask is set to ${umask_curr} - this setting is not recommended if one of the goals of this build is to generate packages. Use 'umask 022' for improved package behavior.") - if(SLEEP_EXEC) - execute_process(COMMAND ${SLEEP_EXEC} 1) - endif(SLEEP_EXEC) - endif(NOT UMASK_OK) -endif(UMASK_EXEC) #--------------------------------------------------------------------- # print out the title with a pretty box computed to wrap around BOX_PRINT("*** Configuring BRL-CAD Release ${BRLCAD_VERSION}, Build ${CONFIG_DATE} ***" "*") #--------------------------------------------------------------------- -# CMake by default provides four different configurations for multi- -# configuration build tools. We want only two - Debug and Release. -if(NOT ENABLE_ALL_CONFIG_TYPES) - if(CMAKE_CONFIGURATION_TYPES AND NOT "${CMAKE_CONFIGURATION_TYPES}" STREQUAL "Debug;Release") - set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Allowed BRL-CAD configuration types" FORCE) - endif(CMAKE_CONFIGURATION_TYPES AND NOT "${CMAKE_CONFIGURATION_TYPES}" STREQUAL "Debug;Release") -endif(NOT ENABLE_ALL_CONFIG_TYPES) +# Set up include paths for generated header files. For multi-config +# builds, make sure we get build-specific dirs. +if(CMAKE_CONFIGURATION_TYPES) + include_directories(${CMAKE_BINARY_DIR}/$/${INCLUDE_DIR}) + include_directories(${CMAKE_BINARY_DIR}/$/${INCLUDE_DIR}/brlcad) +else(CMAKE_CONFIGURATION_TYPES) + include_directories(${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/brlcad) +endif(CMAKE_CONFIGURATION_TYPES) #--------------------------------------------------------------------- # We want to check /usr/local by default, so add it if it exists @@ -782,105 +244,11 @@ if (IS_DIRECTORY /usr/local) endif (IS_DIRECTORY /usr/local) #--------------------------------------------------------------------- +# Intricacies involved with setting the install path mostly revolve +# around build type dependent install directories. Also needs the +# current version defined. -# Normalize the build type capitalization -if(CMAKE_BUILD_TYPE) - string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_UPPER) - if ("${BUILD_TYPE_UPPER}" STREQUAL "RELEASE") - set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type" FORCE) - endif ("${BUILD_TYPE_UPPER}" STREQUAL "RELEASE") - if ("${BUILD_TYPE_UPPER}" STREQUAL "DEBUG") - set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Type" FORCE) - endif ("${BUILD_TYPE_UPPER}" STREQUAL "DEBUG") -endif(CMAKE_BUILD_TYPE) -# Stash the build type so we can set up a drop-down menu in the gui -if(NOT BRLCAD_IS_SUBBUILD) - set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING "BRL-CAD high level build configuration") - set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "" Debug Release) -endif(NOT BRLCAD_IS_SUBBUILD) -if(CMAKE_CONFIGURATION_TYPES) - mark_as_advanced(CMAKE_BUILD_TYPE) -else(CMAKE_CONFIGURATION_TYPES) - mark_as_advanced(CMAKE_BUILD_TYPE) -endif(CMAKE_CONFIGURATION_TYPES) - -#--------------------------------------------------------------------- -# The location in which to install BRL-CAD. Only do this if -# CMAKE_INSTALL_PREFIX hasn't been set already, to try and allow -# parent builds (if any) some control. - -# TODO - generator expressions may be a way to replace some of this logic (or -# improve it) by letting us ditch the logic tracking whether the path is -# initialized to default - that's used to know whether or not it is safe to -# override CMAKE_INSTALL_PREFIX based on build type. If we use the generator -# expressions, we won't have to be concerned about that - problem is that -# change will require updating all the install commands in the build target -# functions. Third party logic will probably need to shift over to the new -# ExternalProject_Add approach first as well - that way unmodified install -# commands in 3rd party CMake files will be moot. -# -# if (NOT BRLCAD_INSTALL_PREFIX) -# set(BRLCAD_INSTALL_PREFIX "/usr/brlcad/") -# if (NOT MSVC) -# set(gen_exp $,dev-${BRLCAD_VERSION}/,$,rel-${BRLCAD_VERSION}/${BRLCAD_VERSION},>>) -# else (NOT MSVC) -# set(gen_exp) -# if(CMAKE_CL_64) -# set(BRLCAD_INSTALL_PREFIX "C:/Program Files/BRL-CAD ${BRLCAD_VERSION}") -# else(CMAKE_CL_64) -# set(BRLCAD_INSTALL_PREFIX "C:/Program Files (x86)/BRL-CAD ${BRLCAD_VERSION}") -# endif(CMAKE_CL_64) -# endif (NOT MSVC) -# endif (NOT BRLCAD_INSTALL_PREFIX) -# install(TARGETS mged DESTINATION ${gen_exp}${BIN_DIR}) -# -# Another (maybe better) option instead of generators might be to use the CONFIGURATIONS -# option in our macros and the ExternalProject_Add management: -# https://cmake.org/cmake/help/latest/command/install.html -# -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT BRLCAD_INSTALL_PREFIX) - if(NOT CMAKE_CONFIGURATION_TYPES) - if("${CMAKE_BUILD_TYPE}" MATCHES "Release") - set(BRLCAD_INSTALL_PREFIX "/usr/brlcad/rel-${BRLCAD_VERSION}") - else("${CMAKE_BUILD_TYPE}" MATCHES "Release") - set(BRLCAD_INSTALL_PREFIX "/usr/brlcad/dev-${BRLCAD_VERSION}") - endif("${CMAKE_BUILD_TYPE}" MATCHES "Release") - else(NOT CMAKE_CONFIGURATION_TYPES) - if(MSVC) - if(CMAKE_CL_64) - set(BRLCAD_INSTALL_PREFIX "C:/Program Files/BRL-CAD ${BRLCAD_VERSION}") - else(CMAKE_CL_64) - set(BRLCAD_INSTALL_PREFIX "C:/Program Files (x86)/BRL-CAD ${BRLCAD_VERSION}") - endif(CMAKE_CL_64) - else(MSVC) - set(BRLCAD_INSTALL_PREFIX "/usr/brlcad/dev-${BRLCAD_VERSION}") - endif(MSVC) - endif(NOT CMAKE_CONFIGURATION_TYPES) - set(BRLCAD_INSTALL_PREFIX ${BRLCAD_INSTALL_PREFIX} CACHE PATH "BRL-CAD install prefix" FORCE) - set(BRLCAD_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 0) -endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT BRLCAD_INSTALL_PREFIX) -set(BRLCAD_PREFIX "${BRLCAD_INSTALL_PREFIX}" CACHE STRING "BRL-CAD install prefix") -mark_as_advanced(BRLCAD_PREFIX) -if (DEFINED BRLCAD_INSTALL_PREFIX AND NOT DEFINED CMAKE_INSTALL_PREFIX) - set(CMAKE_INSTALL_PREFIX "${BRLCAD_INSTALL_PREFIX}") -endif (DEFINED BRLCAD_INSTALL_PREFIX AND NOT DEFINED CMAKE_INSTALL_PREFIX) - - -# If we've a Release build with a Debug path or vice versa, warn about -# it. A "make install" of a Release build into a dev install -# directory or vice versa is going to result in an install that -# doesn't respect BRL-CAD standard naming conventions. -if("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND "${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr/brlcad/dev-${BRLCAD_VERSION}") - message(FATAL_ERROR "\nInstallation directory (BRLCAD_INSTALL_PREFIX) is set to /usr/brlcad/dev-${BRLCAD_VERSION}, but build type is set to Release!\n") -endif("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND "${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr/brlcad/dev-${BRLCAD_VERSION}") -if("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND "${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr/brlcad/rel-${BRLCAD_VERSION}") - message(FATAL_ERROR "\nInstallation directory (BRLCAD_INSTALL_PREFIX) is set to /usr/brlcad/rel-${BRLCAD_VERSION}, but build type is set to Debug!\n") -endif("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND "${BRLCAD_INSTALL_PREFIX}" STREQUAL "/usr/brlcad/rel-${BRLCAD_VERSION}") - -#------------------------------------------------------------------------------ -# Now that we know the install prefix, generate the binary for calculating -# and reporting time deltas -generate_dreport() +include(BRLCAD_Install_Prefix) #--------------------------------------------------------------------- # The following logic is what allows binaries to run successfully in @@ -1028,7 +396,7 @@ CONFIG_H_APPEND(BRLCAD "#define SHARED_LIBRARY_SUFFIX \"${CMAKE_SHARED_LIBRARY_S # Let bu_dir know what the target install directory is. In a superbuild # configuration this will be the most import place to be sure that we get the # actual superbuild install path, not the local BRL-CAD subbuild install path. -CONFIG_H_APPEND(BRLCAD "#define BRLCAD_ROOT \"${BRLCAD_INSTALL_PREFIX}\"\n") +CONFIG_H_APPEND(BRLCAD "#define BRLCAD_ROOT \"${CMAKE_INSTALL_PREFIX}\"\n") # Define the various relative paths for bu_dir (be sure to have included # Path_Setup.cmake before this point, as that file defines these variables.) @@ -1055,88 +423,7 @@ if(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" AND NOT CMAKE_CONFIGURATION_TYPES) endif(NOT "${CMAKE_BUILD_TYPE}" STREQUAL "Debug" AND NOT CMAKE_CONFIGURATION_TYPES) #---------------------------------------------------------------------- -# Decide whether to do a 32 or a 64 bit build. - -set(WORD_SIZE_LABEL "Compile as 32BIT or 64BIT?") -if(NOT BRLCAD_WORD_SIZE) - set(BRLCAD_WORD_SIZE "AUTO" CACHE STRING WORD_SIZE_LABEL) -endif(NOT BRLCAD_WORD_SIZE) -set_property(CACHE BRLCAD_WORD_SIZE PROPERTY STRINGS AUTO 32BIT 64BIT) -string(TOUPPER "${BRLCAD_WORD_SIZE}" BRLCAD_WORD_SIZE_UPPER) -set(BRLCAD_WORD_SIZE "${BRLCAD_WORD_SIZE_UPPER}" CACHE STRING WORD_SIZE_LABEL FORCE) -if(NOT BRLCAD_WORD_SIZE MATCHES "AUTO" AND NOT BRLCAD_WORD_SIZE MATCHES "64BIT" AND NOT BRLCAD_WORD_SIZE MATCHES "32BIT") - message(WARNING "Unknown value ${BRLCAD_WORD_SIZE} supplied for BRLCAD_WORD_SIZE - defaulting to AUTO") - message(WARNING "Valid options are AUTO, 32BIT and 64BIT") - set(BRLCAD_WORD_SIZE "AUTO" CACHE STRING WORD_SIZE_LABEL FORCE) -endif(NOT BRLCAD_WORD_SIZE MATCHES "AUTO" AND NOT BRLCAD_WORD_SIZE MATCHES "64BIT" AND NOT BRLCAD_WORD_SIZE MATCHES "32BIT") -# On Windows, we can't set word size at CMake configure time - the -# compiler chosen at the beginning dictates the result. Mark as -# advanced in that situation. -if(MSVC) - mark_as_advanced(BRLCAD_WORD_SIZE) -endif(MSVC) - -# calculate the size of a pointer if we haven't already -CHECK_TYPE_SIZE("void *" CMAKE_SIZEOF_VOID_P) - -# still not defined? -if(NOT CMAKE_SIZEOF_VOID_P) - message(WARNING "CMAKE_SIZEOF_VOID_P is not defined - assuming 32 bit platform") - set(CMAKE_SIZEOF_VOID_P 4) -endif(NOT CMAKE_SIZEOF_VOID_P) - -if(${BRLCAD_WORD_SIZE} MATCHES "AUTO") - if(${CMAKE_SIZEOF_VOID_P} MATCHES "^8$") - set(CMAKE_WORD_SIZE "64BIT") - set(BRLCAD_WORD_SIZE "64BIT (AUTO)" CACHE STRING WORD_SIZE_LABEL FORCE) - else(${CMAKE_SIZEOF_VOID_P} MATCHES "^8$") - if(${CMAKE_SIZEOF_VOID_P} MATCHES "^4$") - set(CMAKE_WORD_SIZE "32BIT") - set(BRLCAD_WORD_SIZE "32BIT (AUTO)" CACHE STRING WORD_SIZE_LABEL FORCE) - else(${CMAKE_SIZEOF_VOID_P} MATCHES "^4$") - if(${CMAKE_SIZEOF_VOID_P} MATCHES "^2$") - set(CMAKE_WORD_SIZE "16BIT") - set(BRLCAD_WORD_SIZE "16BIT (AUTO)" CACHE STRING WORD_SIZE_LABEL FORCE) - else(${CMAKE_SIZEOF_VOID_P} MATCHES "^2$") - set(CMAKE_WORD_SIZE "8BIT") - set(BRLCAD_WORD_SIZE "8BIT (AUTO)" CACHE STRING WORD_SIZE_LABEL FORCE) - endif(${CMAKE_SIZEOF_VOID_P} MATCHES "^2$") - endif(${CMAKE_SIZEOF_VOID_P} MATCHES "^4$") - endif(${CMAKE_SIZEOF_VOID_P} MATCHES "^8$") -else(${BRLCAD_WORD_SIZE} MATCHES "AUTO") - set(CMAKE_WORD_SIZE "${BRLCAD_WORD_SIZE}") -endif(${BRLCAD_WORD_SIZE} MATCHES "AUTO") - -# Enable/disable 64-bit build settings for MSVC, which is apparently -# determined at the CMake generator level - need to override other -# settings if the compiler disagrees with them. -if(MSVC) - if(CMAKE_CL_64) - if(NOT ${CMAKE_WORD_SIZE} MATCHES "64BIT") - set(CMAKE_WORD_SIZE "64BIT") - if(NOT "${BRLCAD_WORD_SIZE}" MATCHES "AUTO") - message(WARNING "Selected MSVC compiler is 64BIT - setting word size to 64BIT. To perform a 32BIT MSVC build, select the 32BIT MSVC CMake generator.") - set(BRLCAD_WORD_SIZE "64BIT" CACHE STRING WORD_SIZE_LABEL FORCE) - endif(NOT "${BRLCAD_WORD_SIZE}" MATCHES "AUTO") - endif(NOT ${CMAKE_WORD_SIZE} MATCHES "64BIT") - add_definitions("-D_WIN64") - else(CMAKE_CL_64) - set(CMAKE_SIZEOF_VOID_P 4) - if(NOT ${CMAKE_WORD_SIZE} MATCHES "32BIT") - set(CMAKE_WORD_SIZE "32BIT") - if(NOT "${BRLCAD_WORD_SIZE}" MATCHES "AUTO") - message(WARNING "Selected MSVC compiler is 32BIT - setting word size to 32BIT. To perform a 64BIT MSVC build, select the 64BIT MSVC CMake generator.") - set(BRLCAD_WORD_SIZE "32BIT" CACHE STRING WORD_SIZE_LABEL FORCE) - endif(NOT "${BRLCAD_WORD_SIZE}" MATCHES "AUTO") - endif(NOT ${CMAKE_WORD_SIZE} MATCHES "32BIT") - endif(CMAKE_CL_64) -endif(MSVC) - -if (APPLE) - if (${CMAKE_WORD_SIZE} MATCHES "32BIT") - set(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Building for i386" FORCE) - endif (${CMAKE_WORD_SIZE} MATCHES "32BIT") -endif (APPLE) +# Let config.h know whether we're doing a 32 or a 64 bit build. CONFIG_H_APPEND(BRLCAD "#define SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P}\n") @@ -1148,31 +435,6 @@ if(${CMAKE_WORD_SIZE} MATCHES "64BIT") CONFIG_H_APPEND(BRLCAD "#ifndef __WORDSIZE\n# define __WORDSIZE 64\n#endif\n") endif(${CMAKE_WORD_SIZE} MATCHES "64BIT") -# Based on what we are doing, we may need to constrain our search paths -# -# NOTE: Ideally we would set a matching property for 32 bit paths -# on systems that default to 64 bit - as of 2.8.8 CMake doesn't yet -# support FIND_LIBRARY_USE_LIB32_PATHS. There is a bug report on the -# topic here: http://www.cmake.org/Bug/view.php?id=11260 -# -if(${CMAKE_WORD_SIZE} MATCHES "32BIT") - set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS OFF) -else(${CMAKE_WORD_SIZE} MATCHES "32BIT") - set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ON) -endif(${CMAKE_WORD_SIZE} MATCHES "32BIT") - -# One of the problems with 32/64 building is we need to search anew -# for 64 bit libs after a 32 bit configure, or vice versa. -if(PREVIOUS_CONFIGURE_TYPE) - if(NOT ${PREVIOUS_CONFIGURE_TYPE} MATCHES ${CMAKE_WORD_SIZE}) - include(ResetCache) - RESET_CACHE_file() - endif(NOT ${PREVIOUS_CONFIGURE_TYPE} MATCHES ${CMAKE_WORD_SIZE}) -endif(PREVIOUS_CONFIGURE_TYPE) - -set(PREVIOUS_CONFIGURE_TYPE ${CMAKE_WORD_SIZE} CACHE STRING "Previous configuration word size" FORCE) -mark_as_advanced(PREVIOUS_CONFIGURE_TYPE) - # Auto-reconfiguration - by default, a CMake generated build system # will re-run CMake if it detects that build system logic has changed. # This is normally a good thing, but becomes problematic when using @@ -1191,14 +453,6 @@ if(BRLCAD_PRINT_MSGS) message("* Stage 1 of 9 - Top Level Configure Options *") message("***********************************************************") endif(BRLCAD_PRINT_MSGS) -# -# Now we define the various options for BRL-CAD - ways to enable and -# disable features, select which parts of the system to build, etc. -# As much as possible, sane default options are either selected or -# detected. Because documentation is autogenerated for BRL-CAD -# options, be sure to initialize the file. -set(CONFIG_OPT_STRING "CONFIGURATION OPTIONS\n---------------------\n") -file(WRITE "${CMAKE_BINARY_DIR}/OPTIONS" "${CONFIG_OPT_STRING}") # The BRL-CAD CMake build will also generate a configure script # that emulates the command option style of GNU Autotool's @@ -1214,509 +468,7 @@ file(REMOVE "${CMAKE_BINARY_DIR}/configure.new.tmp") file(RENAME "${CMAKE_BINARY_DIR}/CMakeFiles/configure.new.tmp" "${CMAKE_BINARY_DIR}/configure.new") -# Build shared libs by default. Mark this as advanced - turning off -# ALL shared library building is unlikely to result in a working build -# and is not a typical configuration. Note that turning this option off -# will not disable libraries specifically added as SHARED. -option(BUILD_SHARED_LIBS "Build shared libraries" ON) -mark_as_advanced(BUILD_SHARED_LIBS) - -# Build static libs by default unless we're debugging. Note: this -# option will not disable libraries specifically added as STATIC even -# when OFF. For multi-configuration options the build type determination -# is made at build time, so just default to "ON". -if(NOT CMAKE_BUILD_TYPE) - set(CBT "MULTICONFIG") -else(NOT CMAKE_BUILD_TYPE) - set(CBT "${CMAKE_BUILD_TYPE}") -endif(NOT CMAKE_BUILD_TYPE) -cmake_dependent_option(BUILD_STATIC_LIBS "Build static libraries" ON "CMAKE_CONFIGURATION_TYPES OR NOT ${CBT} STREQUAL Debug" OFF) - -# Turn off the brlcad.dll build. -# It's an expert's setting at the moment. -option(BRLCAD_ENABLE_BRLCAD_LIBRARY "Build the brlcad.dll" OFF) -mark_as_advanced(BRLCAD_ENABLE_BRLCAD_LIBRARY) - -# Global third party controls - these options enable and disable ALL -# local copies of libraries in src/other. Forcing all local -# libraries off is not usually recommended unless attempting to -# build packages for a distribution. If both of these options are -# on the enabling of local packages is the "senior" option and will -# force the system libs option to off. -set(BRLCAD_BUNDLED_LIBS_DESCRIPTION " -Enables compilation of all 3rd party sources that are provided within a BRL-CAD -source distribution. If used this option sets all other 3rd party library -build flags to ON by default. However, that setting can be overridden by -manually setting individual variables. Default is \"AUTO\" - 3rd party sources -are compiled only if they are not detected as being available and functioning -as expected. -") - -if(MSVC) - set(BRLCAD_BUNDLED_LIBS_DEFAULT "BUNDLED") -else(MSVC) - set(BRLCAD_BUNDLED_LIBS_DEFAULT "AUTO") -endif(MSVC) -BRLCAD_OPTION(BRLCAD_BUNDLED_LIBS ${BRLCAD_BUNDLED_LIBS_DEFAULT} - TYPE ABS - ALIASES ENABLE_ALL - DESCRIPTION BRLCAD_BUNDLED_LIBS_DESCRIPTION) -if(NOT BRLCAD_BUNDLED_LIBS MATCHES "AUTO" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "BUNDLED" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "SYSTEM") - message(WARNING "Unknown value BRLCAD_BUNDLED_LIBS supplied for BRLCAD_BUNDLED_LIBS (${BRLCAD_BUNDLED_LIBS}) - defaulting to AUTO") - message(WARNING "Valid options are AUTO, BUNDLED and SYSTEM") - set(BRLCAD_BUNDLED_LIBS "AUTO" CACHE STRING "Build bundled libraries." FORCE) -endif(NOT BRLCAD_BUNDLED_LIBS MATCHES "AUTO" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "BUNDLED" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "SYSTEM") - -# Single flag for disabling GUI instead of 5. -option(BRLCAD_ENABLE_MINIMAL "Skip GUI support and docs. Faster builds." OFF) -mark_as_advanced(BRLCAD_ENABLE_MINIMAL) - -if(BRLCAD_ENABLE_MINIMAL) - set(BRLCAD_ENABLE_OPENGL "OFF") - set(BRLCAD_ENABLE_X11 "OFF") - set(BRLCAD_ENABLE_TK "OFF") - set(BRLCAD_ENABLE_QT "OFF") - set(BRLCAD_ENABLE_AQUA "OFF") - set(BRLCAD_EXTRADOCS "OFF") -endif(BRLCAD_ENABLE_MINIMAL) - -# Enable Aqua widgets on Mac OSX. This impacts Tcl/Tk building and OpenGL -# building. Not currently working - needs work in at least Tk -# CMake logic (probably more), and the display manager/framebuffer codes are known to depend -# on either GLX or WGL specifically in their current forms. -option(BRLCAD_ENABLE_AQUA "Use Aqua instead of X11 whenever possible on OSX." OFF) -mark_as_advanced(BRLCAD_ENABLE_AQUA) - -# Install example BRL-CAD Geometry Files -option(BRLCAD_INSTALL_EXAMPLE_GEOMETRY "Install the example BRL-CAD geometry files." ON) - -# test for X11 on all platforms since we don't know when/where we'll find it, unless -# we've indicated we *don't* want an X11 build -if(NOT BRLCAD_ENABLE_AQUA AND NOT BRLCAD_ENABLE_MINIMAL) - include(FindX11) - if (X11_Xrender_FOUND) - CONFIG_H_APPEND(BRLCAD "#define HAVE_XRENDER 1\n") - endif (X11_Xrender_FOUND) -endif(NOT BRLCAD_ENABLE_AQUA AND NOT BRLCAD_ENABLE_MINIMAL) - -# make sure Xi is included in the list of X11 libs -# (Xext is automatically added during FindX11) -if(X11_Xi_FOUND) - set(X11_LIBRARIES ${X11_LIBRARIES} ${X11_Xi_LIB}) -endif(X11_Xi_FOUND) - -# Set whether X11 is enabled or disabled by default -if(WIN32) - # even if there is x11, we default to native - option(BRLCAD_ENABLE_X11 "Use X11." OFF) -elseif(BRLCAD_ENABLE_AQUA) - # aqua implies no X11 - option(BRLCAD_ENABLE_X11 "Use X11." OFF) -else(WIN32) - # make everywhere else depend on whether we found a suitable X11 - # X11_Xext_LIB AND X11_Xi_LIB AND - if(X11_FOUND AND NOT BRLCAD_ENABLE_MINIMAL) - option(BRLCAD_ENABLE_X11 "Use X11." ON) - else(X11_FOUND AND NOT BRLCAD_ENABLE_MINIMAL) - option(BRLCAD_ENABLE_X11 "Use X11." OFF) - endif(X11_FOUND AND NOT BRLCAD_ENABLE_MINIMAL) -endif(WIN32) -mark_as_advanced(BRLCAD_ENABLE_X11) - -# if X11 is enabled, make sure aqua is off -if(BRLCAD_ENABLE_X11) - set(BRLCAD_ENABLE_AQUA OFF CACHE STRING "Don't use Aqua if we're doing X11" FORCE) - set(OPENGL_USE_AQUA OFF CACHE STRING "Don't use Aqua if we're doing X11" FORCE) -endif(BRLCAD_ENABLE_X11) -mark_as_advanced(OPENGL_USE_AQUA) - -# Enable/disable features requiring the Tcl/Tk toolkit - usually this should -# be on, as a lot of functionality in BRL-CAD depends on Tcl/Tk - -option(BRLCAD_ENABLE_TCL "Enable features requiring the Tcl toolkit" ON) -cmake_dependent_option(BRLCAD_ENABLE_TK "Enable features requiring the Tk toolkit" ON "BRLCAD_ENABLE_TCL" OFF) -mark_as_advanced(BRLCAD_ENABLE_TCL BRLCAD_ENABLE_TK) -if(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) - set(BRLCAD_ENABLE_TK OFF) -endif(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) -if(BRLCAD_ENABLE_X11) - set(TK_X11_GRAPHICS ON CACHE STRING "Need X11 Tk" FORCE) -endif(BRLCAD_ENABLE_X11) - -# Enable features requiring OPENGL -# Be smart about this - if we don't have X11 or Aqua and we're -# not on Windows, we're non-graphical and that means OpenGL is -# a no-go. The Windows version would have to be some sort of -# option for the WIN32 graphics layer? Should probably think -# about that... for now, on Win32 don't try OpenGL if Tk is -# off. That'll hold until we get a non-Tk based GUI - then -# setting non-graphical on Windows will take more thought. -if(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) - set(OPENGL_FOUND OFF) - set(BRLCAD_ENABLE_OPENGL OFF CACHE BOOL "Disabled - NOT BRLCAD_ENABLE_X11 and NOT BRLCAD_ENABLE_AQUA" FORCE) -else(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) - include(FindGL) -endif(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) - -set(BRLCAD_ENABLE_OPENGL_DESCRIPTION " -Enable support for OpenGL based Display Managers in BRL-CAD. -Default depends on whether OpenGL is successfully detected - -if it is, default is to enable. -") -BRLCAD_OPTION(BRLCAD_ENABLE_OPENGL ${OPENGL_FOUND} - TYPE BOOL - ALIASES ENABLE_OPENGL - DESCRIPTION BRLCAD_ENABLE_OPENGL_DESCRIPTION) - -if(BRLCAD_ENABLE_AQUA) - set(OPENGL_USE_AQUA ON CACHE STRING "Aqua enabled - use Aqua OpenGL" FORCE) -endif(BRLCAD_ENABLE_AQUA) - -# Enable features requiring Bullet Physics SDK -option(BRLCAD_ENABLE_BULLET "Enable features requiring the Bullet Physics Library" OFF) -if(BRLCAD_ENABLE_BULLET) - message("Bullet support is not currently working - disabling.") - set(BRLCAD_ENABLE_BULLET OFF CACHE BOOL "Currently broken" FORCE) -endif(BRLCAD_ENABLE_BULLET) -mark_as_advanced(BRLCAD_ENABLE_BULLET) - -# Enable features requiring GDAL geospatial library -option(BRLCAD_ENABLE_GDAL "Enable features requiring the Geospatial Data Abstraction Library" ON) -mark_as_advanced(BRLCAD_ENABLE_GDAL) - -# Enable features requiring Qt -option(BRLCAD_ENABLE_QT "Enable features requiring Qt" OFF) -mark_as_advanced(BRLCAD_ENABLE_QT) -if (BRLCAD_ENABLE_QT) - # TODO - try COMPONENTS search: https://blog.kitware.com/cmake-finding-qt5-the-right-way/ - find_package(Qt5Widgets QUIET) - if(NOT Qt5Widgets_FOUND AND BRLCAD_ENABLE_QT) - message("QT interface requested, but QT5 is not found - disabling") - set(BRLCAD_ENABLE_QT OFF) - endif(NOT Qt5Widgets_FOUND AND BRLCAD_ENABLE_QT) -endif (BRLCAD_ENABLE_QT) -mark_as_advanced(Qt5Widgets_DIR) -mark_as_advanced(Qt5Core_DIR) -mark_as_advanced(Qt5Gui_DIR) - -# Enable features requiring OpenSceneGraph -option(BRLCAD_ENABLE_OSG "Enable features requiring OpenSceneGraph" OFF) -mark_as_advanced(BRLCAD_ENABLE_OSG) -if(BRLCAD_ENABLE_OSG) - if(APPLE AND NOT BRLCAD_ENABLE_AQUA) - set(OSG_WINDOWING_SYSTEM "X11" CACHE STRING "Use X11" FORCE) - endif(APPLE AND NOT BRLCAD_ENABLE_AQUA) -endif(BRLCAD_ENABLE_OSG) - -# Enable features requiring GCT -option(BRLCAD_ENABLE_GCT "Enable features requiring GCT" ON) -mark_as_advanced(BRLCAD_ENABLE_GCT) -if(NOT BRLCAD_ENABLE_GCT) - CONFIG_H_APPEND(BRLCAD "#define BRLCAD_DISABLE_GCT 1\n") -endif(NOT BRLCAD_ENABLE_GCT) - -# Enable features requiring OpenCL -option(BRLCAD_ENABLE_OPENCL "Enable features requiring OpenCL" OFF) -mark_as_advanced(BRLCAD_ENABLE_OPENCL) -if(BRLCAD_ENABLE_OPENCL) - find_package(OpenCL) - if(NOT OPENCL_FOUND) - message("OpenCL enablement requested, but OpenCL is not found - disabling") - set(BRLCAD_ENABLE_OPENCL OFF) - endif(NOT OPENCL_FOUND) -endif(BRLCAD_ENABLE_OPENCL) - -# Enable features requiring OpenVDB -option(BRLCAD_ENABLE_OPENVDB "Enable features requiring OpenVDB" OFF) -mark_as_advanced(BRLCAD_ENABLE_OPENVDB) -if(BRLCAD_ENABLE_OPENVDB) - find_package(OpenVDB) - if(NOT OpenVDB_FOUND) - message("OpenVDB enablement requested, but OpenVDB is not found - disabling") - set(BRLCAD_ENABLE_OPENVDB OFF) - endif(NOT OpenVDB_FOUND) -endif(BRLCAD_ENABLE_OPENVDB) - -# Enable experimental support for binary attributes -option(BRLCAD_ENABLE_BINARY_ATTRIBUTES "Enable support for binary attributes" OFF) -mark_as_advanced(BRLCAD_ENABLE_BINARY_ATTRIBUTES) -if(BRLCAD_ENABLE_BINARY_ATTRIBUTES) - CONFIG_H_APPEND(BRLCAD "#define USE_BINARY_ATTRIBUTES 1\n") -endif(BRLCAD_ENABLE_BINARY_ATTRIBUTES) - -#---------------------------------------------------------------------- -# The following are fine-grained options for enabling/disabling compiler -# and source code definition settings. Typically these are set to -# various configurations by the toplevel CMAKE_BUILD_TYPE setting, but -# can also be individually set. - -# Enable/disable runtime debugging - these are protections for -# minimizing the possibility of corrupted data files. Generally -# speaking these should be left on. -set(BRLCAD_ENABLE_RUNTIME_DEBUG_ALIASES - ENABLE_RUNTIME_DEBUG - ENABLE_RUN_TIME_DEBUG - ENABLE_RUNTIME_DEBUGGING - ENABLE_RUN_TIME_DEBUGGING) -set(BRLCAD_ENABLE_RUNTIME_DEBUG_DESCRIPTION " -Enables support for application and library debugging facilities. -Disabling the run-time debugging facilities can provide a significant -(10%-30%) performance boost at the expense of extensive error -checking (that in turn help prevent corruption of your data). -Default is \"ON\", and should only be disabled for read-only render -work where performance is critical. -") -BRLCAD_OPTION(BRLCAD_ENABLE_RUNTIME_DEBUG ON - TYPE BOOL - ALIASES ${BRLCAD_ENABLE_RUNTIME_DEBUG_ALIASES} - DESCRIPTION BRLCAD_ENABLE_RUNTIME_DEBUG_DESCRIPTION) -mark_as_advanced(BRLCAD_ENABLE_RUNTIME_DEBUG) -if(NOT BRLCAD_ENABLE_RUNTIME_DEBUG) - message("}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}") - message("While disabling run-time debugging should increase") - message("performance, it will likewise remove several") - message("data-protection safeguards that are in place to") - message("minimize the possibility of corrupted data files") - message("in the inevitable event of a user encountering a bug.") - message("You have been warned. Proceed at your own risk.") - message("{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{") - CONFIG_H_APPEND(BRLCAD "/*Define to not do anything for macros that only bomb on a fatal error. */\n") - CONFIG_H_APPEND(BRLCAD "#define NO_BOMBING_MACROS 1\n") - CONFIG_H_APPEND(BRLCAD "/*Define to not perform magic number checking */\n") - CONFIG_H_APPEND(BRLCAD "#define NO_MAGIC_CHECKING 1\n") - CONFIG_H_APPEND(BRLCAD "/*Define to not provide run-time debug facilities via RTG.debug */\n") - CONFIG_H_APPEND(BRLCAD "#define NO_DEBUG_CHECKING 1\n") -endif(NOT BRLCAD_ENABLE_RUNTIME_DEBUG) - -# Enable debug flags during compilation - we always want to use these -# unless explicitly told not to. -set(BRLCAD_FLAGS_DEBUG_DESCRIPTION " -Add compiler flags to aid in program debugging. Defaults to ON. -") -BRLCAD_OPTION(BRLCAD_FLAGS_DEBUG ON - TYPE BOOL - ALIASES ENABLE_DEBUG ENABLE_FLAGS_DEBUG ENABLE_DEBUG_FLAGS - DESCRIPTION BRLCAD_FLAGS_DEBUG_DESCRIPTION) - -# A variety of debugging messages in the code key off of the DEBUG -# definition - set it according to whether we're using debug flags. -if(BRLCAD_FLAGS_DEBUG) - CONFIG_H_APPEND(BRLCAD "#define DEBUG 1\n") -endif(BRLCAD_FLAGS_DEBUG) - -# Build with compiler warning flags -set(BRLCAD_ENABLE_COMPILER_WARNINGS_DESCRIPTION " -Use extra compiler warning flags when compiling C/C++ code. Defaults to ON. -") -BRLCAD_OPTION(BRLCAD_ENABLE_COMPILER_WARNINGS ON - TYPE BOOL - ALIASES ENABLE_WARNINGS ENABLE_COMPILER_WARNINGS - DESCRIPTION BRLCAD_ENABLE_COMPILER_WARNINGS_DESCRIPTION) -mark_as_advanced(BRLCAD_ENABLE_COMPILER_WARNINGS) - -# Enable/disable strict compiler settings - these are used for building -# BRL-CAD by default, but not src/other code. Always used for BRL-CAD -# code unless the NO_STRICT option is specified when defining a target -# with BRLCAD_ADDEXEC or BRLCAD_ADDLIB. If only C++ files in a target -# are not compatible with strict, the NO_STRICT_CXX option can be used. -set(BRLCAD_ENABLE_STRICT_DESCRIPTION " -Causes all compilation warnings for C code to be treated as errors. This is now -the default for BRL-CAD source code, and developers should address issues -discovered by these flags whenever possible rather than disabling strict -mode. -") -BRLCAD_OPTION(BRLCAD_ENABLE_STRICT ON - TYPE BOOL - ALIASES ENABLE_STRICT ENABLE_STRICT_COMPILE ENABLE_STRICT_COMPILE_FLAGS - DESCRIPTION BRLCAD_ENABLE_STRICT_DESCRIPTION) -if(BRLCAD_ENABLE_STRICT) - mark_as_advanced(BRLCAD_ENABLE_STRICT) -endif(BRLCAD_ENABLE_STRICT) - -# Build with compiler optimization flags. This should normally be on for -# release builds and off otherwise, unless the user specifically enables it. -# For multi-config build tools, this is managed on a per-configuration basis. -if(CMAKE_BUILD_TYPE) - cmake_dependent_option(BRLCAD_OPTIMIZED_BUILD "Enable optimized build flags" ON "${CMAKE_BUILD_TYPE} STREQUAL Release" OFF) -else(CMAKE_BUILD_TYPE) - # Note: the cmake_dependent_option test doesn't work if CMAKE_BUILD_TYPE isn't set. - option(BRLCAD_OPTIMIZED_BUILD "Enable optimized build flags" OFF) -endif(CMAKE_BUILD_TYPE) -mark_as_advanced(BRLCAD_OPTIMIZED_BUILD) - -# Build with full compiler lines visible by default (won't need make -# VERBOSE=1) on command line -option(BRLCAD_ENABLE_VERBOSE_PROGRESS "verbose output" OFF) -mark_as_advanced(BRLCAD_ENABLE_VERBOSE_PROGRESS) -if(BRLCAD_ENABLE_VERBOSE_PROGRESS) - set(CMAKE_VERBOSE_MAKEFILE ON) -endif(BRLCAD_ENABLE_VERBOSE_PROGRESS) - -# Build with profile-guided optimization support. this requires a -# two-pass compile, once with BRLCAD_PGO=ON on a location that did not -# exist beforehand (specified via the PGO_PATH environment variable), -# and again to use profiling metrics captured on "typical" operations -# and data. By default, path is BUILDDIR/profiling - -option(BRLCAD_PGO "Enable profile-guided optimization (set PGO_PATH environment variable)") -mark_as_advanced(BRLCAD_PGO) - -#====== ALL CXX COMPILE =================== -# Build all C and C++ files with a C++ compiler -set(ENABLE_ALL_CXX_COMPILE_DESCRIPTION " -Build all C and C++ files with a C++ compiler. Defaults to OFF. - -EXPERIMENTAL! -") -BRLCAD_OPTION(ENABLE_ALL_CXX_COMPILE OFF - TYPE BOOL - ALIASES ENABLE_ALL_CXX - DESCRIPTION ENABLE_ALL_CXX_COMPILE_DESCRIPTION) -mark_as_advanced(ENABLE_ALL_CXX_COMPILE) - -# Build with coverage enabled -option(BRLCAD_ENABLE_COVERAGE "Build with coverage enabled" OFF) -mark_as_advanced(BRLCAD_ENABLE_COVERAGE) - -# Build with dtrace support -option(BRLCAD_ENABLE_DTRACE "Build with dtrace support" OFF) -mark_as_advanced(BRLCAD_ENABLE_DTRACE) -if(BRLCAD_ENABLE_DTRACE) - BRLCAD_INCLUDE_FILE(sys/sdt.h HAVE_SYS_SDT_H) - if(NOT HAVE_SYS_SDT_H) - set(BRLCAD_ENABLE_DTRACE OFF) - endif(NOT HAVE_SYS_SDT_H) -endif(BRLCAD_ENABLE_DTRACE) - -# Take advantage of parallel processors if available - highly recommended -option(BRLCAD_ENABLE_SMP "Enable SMP architecture parallel computation support" ON) -mark_as_advanced(BRLCAD_ENABLE_SMP) -if(BRLCAD_ENABLE_SMP) - CONFIG_H_APPEND(BRLCAD "#define PARALLEL 1\n") -endif(BRLCAD_ENABLE_SMP) - -if(BRLCAD_HEADERS_OLD_COMPAT) - add_definitions(-DEXPOSE_FB_HEADER) - add_definitions(-DEXPOSE_DM_HEADER) -endif(BRLCAD_HEADERS_OLD_COMPAT) - -#---------------------------------------------------------------------- -# Some generators in CMake support generating folders in IDEs for -# organizing build targets. We want to use them if they are there. -if(MSVC) - set_property(GLOBAL PROPERTY USE_FOLDERS ON) -endif(MSVC) - -#---------------------------------------------------------------------- -# There are extra documentation files available requiring DocBook -# They are quite useful in graphical interfaces, but also add considerably -# to the overall build time. If necessary BRL-CAD provides its own -# xsltproc (see src/other/xmltools), so the html and man page -# outputs are always potentially available. PDF output, on the other hand, -# needs Apache FOP. FOP is not a candidate for bundling with BRL-CAD for -# a number of reasons, so we simply check to see if it is present and set -# the options accordingly. - -# Do we have the environment variable set locally? -if(NOT "$ENV{APACHE_FOP}" STREQUAL "") - set(APACHE_FOP "$ENV{APACHE_FOP}") -endif(NOT "$ENV{APACHE_FOP}" STREQUAL "") -if(NOT APACHE_FOP) - find_program(APACHE_FOP fop DOC "path to the exec script for Apache FOP") -endif(NOT APACHE_FOP) -mark_as_advanced(APACHE_FOP) -# We care about the FOP version, unfortunately - find out what we have. -if(APACHE_FOP) - execute_process(COMMAND ${APACHE_FOP} -v OUTPUT_VARIABLE APACHE_FOP_INFO ERROR_QUIET) - string(REGEX REPLACE "FOP Version ([0-9\\.]*)" "\\1" APACHE_FOP_VERSION_REGEX "${APACHE_FOP_INFO}") - if(APACHE_FOP_VERSION_REGEX) - string(STRIP ${APACHE_FOP_VERSION_REGEX} APACHE_FOP_VERSION_REGEX) - endif(APACHE_FOP_VERSION_REGEX) - if(NOT "${APACHE_FOP_VERSION}" STREQUAL "${APACHE_FOP_VERSION_REGEX}") - message("-- Found Apache FOP: version ${APACHE_FOP_VERSION_REGEX}") - set(APACHE_FOP_VERSION ${APACHE_FOP_VERSION_REGEX} CACHE STRING "Apache FOP version" FORCE) - mark_as_advanced(APACHE_FOP_VERSION) - endif(NOT "${APACHE_FOP_VERSION}" STREQUAL "${APACHE_FOP_VERSION_REGEX}") -endif(APACHE_FOP) - -# Toplevel variable that controls all DocBook based documentation. Key it off -# of what target level is enabled. -if(NOT BRLCAD_ENABLE_TARGETS OR "${BRLCAD_ENABLE_TARGETS}" GREATER 2) - set(EXTRADOCS_DEFAULT "ON") -else(NOT BRLCAD_ENABLE_TARGETS OR "${BRLCAD_ENABLE_TARGETS}" GREATER 2) - set(EXTRADOCS_DEFAULT "OFF") -endif(NOT BRLCAD_ENABLE_TARGETS OR "${BRLCAD_ENABLE_TARGETS}" GREATER 2) -set(BRLCAD_EXTRADOCS_DESCRIPTION " -The core option that enables and disables building of BRL-CAD's -DocBook based documentation (includes manuals and man pages for -commands, among other things). Defaults to ON, but only HTML and MAN -formats are enabled by default - PDF must be enabled separately by use -of this option or one of its aliases. Note that you may set -environment variable APACHE_FOP to point to your locally installed fop -executable file (which on Linux is usually a shell script with 0755 -permissions). -") -BRLCAD_OPTION(BRLCAD_EXTRADOCS ${EXTRADOCS_DEFAULT} - TYPE BOOL - ALIASES ENABLE_DOCS ENABLE_EXTRA_DOCS ENABLE_DOCBOOK - DESCRIPTION BRLCAD_EXTRADOCS_DESCRIPTION) - - -# The HTML output is used in the graphical help browsers in MGED and Archer, -# as well as being the most likely candidate for external viewers. Turn this -# on unless explicitly instructed otherwise by the user or all extra -# documentation is disabled. -CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_HTML "Build MAN page output from DocBook documentation" ON "BRLCAD_EXTRADOCS" OFF) -mark_as_advanced(BRLCAD_EXTRADOCS_HTML) - -CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_PHP "Build MAN page output from DocBook documentation" OFF "BRLCAD_EXTRADOCS" OFF) -mark_as_advanced(BRLCAD_EXTRADOCS_PHP) - -CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_PPT "Build MAN page output from DocBook documentation" ON "BRLCAD_EXTRADOCS" OFF) -mark_as_advanced(BRLCAD_EXTRADOCS_PPT) - -# Normally, we'll turn on man page output by default, but there is -# no point in doing man page output for a Visual Studio build - the -# files aren't useful and it *seriously* increases the target build -# count/build time. Conditionalize on the CMake MSVC variable NOT -# being set. -CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_MAN "Build MAN page output from DocBook documentation" ON "BRLCAD_EXTRADOCS;NOT MSVC" OFF) -mark_as_advanced(BRLCAD_EXTRADOCS_MAN) - -# Don't do PDF by default because it's pretty expensive, and hide the -# option unless the tools to do it are present. -set(BRLCAD_EXTRADOCS_PDF_DESCRIPTION " -Option that enables building of BRL-CAD's DocBook PDF-based documentation -(includes manuals and man pages for commands, among -other things.) Defaults to OFF. -Note that you may set environment variable APACHE_FOP -to point to your locally installed fop executable file (which on Linux is -usually a shell script with 0755 permissions). -") -CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_PDF "Build PDF output from DocBook documentation" OFF "BRLCAD_EXTRADOCS;APACHE_FOP" OFF) - -# Provide an option to enable/disable XML validation as part -# of the DocBook build - sort of a "strict flags" mode for DocBook. -# By default, this will be enabled when extra docs are built and -# the toplevel BRLCAD_ENABLE_STRICT setting is enabled. -# Unfortunately, Visual Studio 2010 seems to have issues when we -# enable validation on top of everything else... not clear why, -# unless build target counts >1800 are beyond MSVC's practical -# limit. Until we either find a resolution or a way to reduce -# the target count on MSVC, disable validation there. -CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_VALIDATE "Perform validation for DocBook documentation" ON "BRLCAD_EXTRADOCS;BRLCAD_ENABLE_STRICT" OFF) -mark_as_advanced(BRLCAD_EXTRADOCS_VALIDATE) - - -#---------------------------------------------------------------------- -# Load Doxygen related CMake macros -include(Doxygen) - -#---------------------------------------------------------------------- -# Load various wrapper macros for checking libraries, headers and -# functions, some in use by src/other build logic -include(BRLCAD_CheckFunctions) - +include(BRLCAD_User_Options) # ******************************************************************* if(BRLCAD_PRINT_MSGS) @@ -1725,6 +477,13 @@ if(BRLCAD_PRINT_MSGS) message("***********************************************************") endif(BRLCAD_PRINT_MSGS) +# Load various wrapper macros for checking libraries, headers and +# functions, some in use by src/other build logic +include(BRLCAD_CheckFunctions) + +# Load Doxygen related CMake macros +include(Doxygen) + # A variety of tools, such as the benchmark utilities, need # a Bourne shell and other commands - check for them. include(FindShellDeps) @@ -2012,6 +771,12 @@ if(HAVE_WARN_UNUSED_RESULT_ATTRIBUTE) CONFIG_H_APPEND(BRLCAD "#define HAVE_WARN_UNUSED_RESULT_ATTRIBUTE 1\n") endif(HAVE_WARN_UNUSED_RESULT_ATTRIBUTE) +# Check whether the compiler supports __attribute__((flatten)) +check_c_source_compiles("__attribute__((flatten)) int *func(int *v){(*v)-=1; return v;} __attribute((flatten)) int main(int argc, char *argv[]) {int v = 1; int *vp = func(&v); return *vp;}" HAVE_FLATTEN_ATTRIBUTE) +if(HAVE_FLATTEN_ATTRIBUTE) + CONFIG_H_APPEND(BRLCAD "#define HAVE_FLATTEN_ATTRIBUTE 1\n") +endif(HAVE_FLATTEN_ATTRIBUTE) + # Silence check for unused arguments (used to silence clang warnings about # unused options on the command line). By default clang generates a lot of # warnings about such arguments, and we don't really care. @@ -2042,7 +807,6 @@ if(NOT MSVC) set(CXX_STANDARD_FLAGS "${CXX_STANDARD_FLAGS} -Dclockid_t=clock_t -pthread") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Dclockid_t=clock_t -pthread") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Dclockid_t=clock_t -pthread") - set(THREADS_PREFER_PTHREAD_FLAG TRUE) endif (PROBE_PTHREAD_H_CLOCKID_T) endif (NOT PROBE_PTHREAD_H) @@ -2216,25 +980,23 @@ if(NOT MSVC) endif(NOT BRLCAD_ENABLE_PROFILING AND NOT BRLCAD_FLAGS_DEBUG) endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") - # add optimization flags to either all configurations, if enabled, - # or just Release builds. - if(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "AUTO") - if(CMAKE_CONFIGURATION_TYPES) - if(NOT ENABLE_ALL_CONFIG_TYPES) - set(opt_conf_list "Release") - else(NOT ENABLE_ALL_CONFIG_TYPES) - set(opt_conf_list "Release;RelWithDebInfo;MinSizeRel") - endif(NOT ENABLE_ALL_CONFIG_TYPES) - else(CMAKE_CONFIGURATION_TYPES) - if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") - set(opt_conf_list "ALL") - endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") - endif(CMAKE_CONFIGURATION_TYPES) - else(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "AUTO") + # Add optimization flags. If we're a multiconfig build, set up based + # on build type. If not, check if BRLCAD_FLAGS_OPTIMIZATION is enabled + # or if BRLCAD_OPTIMIZED_BUILD is on. + if(CMAKE_CONFIGURATION_TYPES) + if(NOT ENABLE_ALL_CONFIG_TYPES) + set(opt_conf_list "Release") + else(NOT ENABLE_ALL_CONFIG_TYPES) + set(opt_conf_list "Release;RelWithDebInfo;MinSizeRel") + endif(NOT ENABLE_ALL_CONFIG_TYPES) + else(CMAKE_CONFIGURATION_TYPES) + if(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "ON") + set(opt_conf_list "ALL") + endif(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "ON") if(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") set(opt_conf_list "ALL") endif(${BRLCAD_OPTIMIZED_BUILD} MATCHES "ON") - endif(${BRLCAD_FLAGS_OPTIMIZATION} MATCHES "AUTO") + endif(CMAKE_CONFIGURATION_TYPES) if(opt_conf_list) ADD_NEW_FLAG(C OPTIMIZE_C_FLAGS "${opt_conf_list}") ADD_NEW_FLAG(CXX OPTIMIZE_CXX_FLAGS "${opt_conf_list}") @@ -2457,9 +1219,24 @@ endif(BRLCAD_PRINT_MSGS) # be referenced in a pkgconfig file # Look for threads (doesn't check for headers) -# The variable CMAKE_THREAD_LIBS_INIT is the one of interest -# when writing target_link_libraries lists. +# Post 3.1 CMake has switched to recommending using an imported target +# and setting a "prefer pthreads" flag - previously we were using the +# CMAKE_THREAD_LIBS_INIT variable +set(THREADS_PREFER_PTHREAD_FLAG TRUE) +set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads REQUIRED) +if(CMAKE_THREAD_LIBS_INIT) + message("Using threading library: ${CMAKE_THREAD_LIBS_INIT}") +else(CMAKE_THREAD_LIBS_INIT) + message("Using threading from system library") +endif(CMAKE_THREAD_LIBS_INIT) + +# By default, the Threads package doesn't stash any of its values in +# cache. This is inconvenient for debugging, so we set them ourselves. +set(CMAKE_THREAD_LIBS_INIT ${CMAKE_THREAD_LIBS_INIT} CACHE STRING "Threads") +set(CMAKE_USE_WIN32_THREADS_INIT ${CMAKE_USE_WIN32_THREADS_INIT} CACHE STRING "Threads") +set(CMAKE_USE_PTHREADS_INIT ${CMAKE_USE_PTHREADS_INIT} CACHE STRING "Threads") +set(CMAKE_HP_PTHREADS_INIT ${CMAKE_HP_PTHREADS_INIT} CACHE STRING "Threads") # Check for the C++ STL library - need to link it explicitly in # some compilation situations @@ -2665,7 +1442,14 @@ BRLCAD_INCLUDE_FILE(ulocks.h HAVE_ULOCKS_H) BRLCAD_INCLUDE_FILE(uuid.h HAVE_UUID_H) # for uuid_generate() on BSD BRLCAD_INCLUDE_FILE(unistd.h HAVE_UNISTD_H) BRLCAD_INCLUDE_FILE(uuid/uuid.h HAVE_UUID_UUID_H) # for uuid_generate() on Mac & Linux -BRLCAD_INCLUDE_FILE(windows.h HAVE_WINDOWS_H) # for QueryPerformanceCounter() on Windows + +# TODO - this test is failing on the github runner??? +#BRLCAD_INCLUDE_FILE(windows.h HAVE_WINDOWS_H) # for QueryPerformanceCounter() on Windows +if(MSVC) + CONFIG_H_APPEND(BRLCAD "#define HAVE_WINDOWS_H 1\n") + set(HAVE_WINDOWS_H 1) +endif(MSVC) + # custom sys/sysctl.h test due to BSDisms when compiling check_c_source_compiles("typedef void *rusage_info_t;\ntypedef unsigned char u_char;\ntypedef unsigned int u_int;\ntypedef unsigned long u_long;\ntypedef unsigned short u_short;\n#define SOCK_MAXADDRLEN 255\n#include \n#include \nint main() { return 0; }" HAVE_SYS_SYSCTL_H) @@ -2957,6 +1741,20 @@ if(HAVE_GETFULLPATHNAME) CONFIG_H_APPEND(BRLCAD "#define HAVE_GETFULLPATHNAME 1\n") endif(HAVE_GETFULLPATHNAME) +# If we have GetProcessTimes, we need it instead of clock() for CPU time. +# https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/clock +check_c_source_compiles(" +#include +int main() { +FILETIME a,b,c,d; +(void)GetProcessTimes(GetCurrentProcess(),&a,&b,&c,&d); +return 0; +} +" HAVE_GETPROCESSTIMES) +if(HAVE_GETPROCESSTIMES) + CONFIG_H_APPEND(BRLCAD "#define HAVE_GETPROCESSTIMES 1\n") +endif(HAVE_GETPROCESSTIMES) + # GetCurrentProcessId check_c_source_compiles(" #include @@ -3085,101 +1883,13 @@ set(BRLCAD_COMPILE_COUNT ${buildCounter}) # DATE - RFC2822 timestamp set(BRLCAD_COMPILE_DATE \"${CONFIG_DATESTAMP}\") -# Add definition HAVE_UNISTD_H to try_run for next couple tests, if present -if(HAVE_UNISTD_H) - set(UNISTD_DEF "-DHAVE_UNISTD_H") -endif(HAVE_UNISTD_H) - # HOST -if(HAVE_GETHOSTNAME) - set(GETHOSTNAME_DEF "-DHAVE_GETHOSTNAME") -endif(HAVE_GETHOSTNAME) -if(HAVE_DECL_GETHOSTNAME) - set(GETHOSTNAME_DECL_DEF "-DHAVE_DECL_GETHOSTNAME") -endif(HAVE_DECL_GETHOSTNAME) - -set(report_hostname_src " -#include -#ifdef HAVE_UNISTD_H - #include - #define GETHOSTNAME_ERROR -1 -#else - #include - #define GETHOSTNAME_ERROR SOCKET_ERROR -#endif - -#define MAX_HOSTNAME 2048 - -/* strict c89 doesn't declare gethostname() */ -#if defined(HAVE_GETHOSTNAME) && !defined(HAVE_DECL_GETHOSTNAME) && !defined(__cplusplus) && !defined(_WINSOCKAPI_) -extern int gethostname(char *name, size_t len); -#endif - -int main(void) { -#if defined(HAVE_GETHOSTNAME) -{ - int ret; char hostname[MAX_HOSTNAME]; - #if !defined(HAVE_UNISTD_H) - WORD wVersionRequested; WSADATA wsaData; - wVersionRequested = MAKEWORD(1, 1); WSAStartup(wVersionRequested, &wsaData); - #endif - ret = gethostname(hostname, MAX_HOSTNAME); - if (ret != GETHOSTNAME_ERROR) {printf(\"%s\", hostname);} else { printf(\"unknown\"); } -} -#else - printf(\"unknown\"); -#endif - return 0; -} -") - -file(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/report_hostname.c" "${report_hostname_src}") -try_run(RH_RESULT RH_COMPILED "${CMAKE_BINARY_DIR}/CMakeTmp" - "${CMAKE_BINARY_DIR}/CMakeTmp/report_hostname.c" - COMPILE_DEFINITIONS "${UNISTD_DEF}" "${GETHOSTNAME_DEF}" "${GETHOSTNAME_DECL_DEF}" - LINK_LIBRARIES "${WS2_32_LIBRARY}" - COMPILE_OUTPUT_VARIABLE RH_COMPILE_MSGS - RUN_OUTPUT_VARIABLE BRLCAD_COMPILE_HOSTNAME) -if(NOT RH_COMPILED) - message(FATAL_ERROR "Could not build hostname reporting utility: ${RH_COMPILE_MSGS}") -endif(NOT RH_COMPILED) -if(RH_RESULT) - message(FATAL_ERROR "Could not run hostname reporting utility: ${BRLCAD_COMPILE_HOSTNAME}") -endif(RH_RESULT) -string(STRIP ${BRLCAD_COMPILE_HOSTNAME} BRLCAD_COMPILE_HOSTNAME) -file(REMOVE "${CMAKE_BINARY_DIR}/CMakeTmp/report_hostname.c") +cmake_host_system_information(RESULT BRLCAD_COMPILE_HOSTNAME QUERY HOSTNAME) +string(STRIP "${BRLCAD_COMPILE_HOSTNAME}" BRLCAD_COMPILE_HOSTNAME) # USER -set(report_username_src " -#include -#include -#include -#ifdef HAVE_UNISTD_H - #include -#endif -int main(void) { - char *name = getenv(\"USERNAME\"); - if ((name == 0) || (strlen(name) == 0)) name = getenv(\"USER\"); - if ((name == 0) || (strlen(name) == 0)) name = \"unknown\"; - printf(\"%s\", name); - return 0; -} -") -file(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/report_username.c" "${report_username_src}") -# Add definition HAVE_UNISTD_H to try_run -try_run(RU_RESULT RU_COMPILED "${CMAKE_BINARY_DIR}/CMakeTmp" - "${CMAKE_BINARY_DIR}/CMakeTmp/report_username.c" - COMPILE_DEFINITIONS "${UNISTD_DEF}" - COMPILE_OUTPUT_VARIABLE RU_COMPILE_MSGS - RUN_OUTPUT_VARIABLE BRLCAD_COMPILE_USER) -if(NOT RU_COMPILED) - message(FATAL_ERROR "Could not build username reporting utility: ${RU_COMPILE_MSGS}") -endif(NOT RU_COMPILED) -if(RU_RESULT) - message(FATAL_ERROR "Could not run username reporting utility: ${BRLCAD_COMPILE_USER}") -endif(RU_RESULT) -string(STRIP ${BRLCAD_COMPILE_USER} BRLCAD_COMPILE_USER) -file(REMOVE "${CMAKE_BINARY_DIR}/CMakeTmp/report_username.c") +set(BRLCAD_COMPILE_USER $ENV{USERNAME}) +string(STRIP "${BRLCAD_COMPILE_USER}" BRLCAD_COMPILE_USER) if(MSVC) # By default, do not warn when built on machines using only VS Express @@ -3224,6 +1934,11 @@ else(NOT BRLCAD_ENABLE_TARGETS) endif(${BRLCAD_ENABLE_TARGETS} GREATER 2) endif(NOT BRLCAD_ENABLE_TARGETS) +# If we're below level 2, we don't need Tcl +if (NOT BRLCAD_LEVEL2) + set(BRLCAD_ENABLE_TCL OFF CACHE BOOL "Disabled due to level 1 build" FORCE) +endif (NOT BRLCAD_LEVEL2) + # At the start, clear the src/other subdirs list so repeated # configures will correctly add the required directories set(SRC_OTHER_ADDED_DIRS "" CACHE STRING "initialize 3rd party sub-directories list" FORCE) @@ -3350,91 +2065,98 @@ endif(NOT BRLCAD_DISABLE_SUMMARY) # ******************************************************************* # *** Timestamp Rules *** # ******************************************************************* -# TODO - As of CMake 2.8.11, the string command has a TIMESTAMP option -# that may be able to simplify some of the current timestamp system. -# We would need to be able to require 2.8.11 or newer, so there will -# be a bit of a wait, but it's something to look into. -if(NOT BRLCAD_IS_SUBBUILD) +# Set up rules to print a timestamp string during build +set(BUILD_DELTA_START "${CMAKE_BINARY_DIR}/CMakeTmp/BUILD_DELTA_START") - # Set up rules to print a timestamp string during build - set(BUILD_DELTA_START "${CMAKE_BINARY_DIR}/CMakeTmp/BUILD_DELTA_START") - - add_custom_command( +add_custom_command( OUTPUT ${BUILD_DELTA_START} - COMMAND ${CMAKE_BINARY_DIR}/CMakeTmp/sstamp${EXE_EXT} "${BUILD_DELTA_START}" + COMMAND "${CMAKE_COMMAND}" -DSTAMP_FILE=${BUILD_DELTA_START} -P "${BRLCAD_CMAKE_DIR}/scripts/timestamp.cmake" COMMENT "" ) - add_custom_target(timestamp ALL - COMMAND ${CMAKE_BINARY_DIR}/CMakeTmp/pts${EXE_EXT} \"Build Time: \" +add_custom_target(timestamp ALL + COMMAND "${CMAKE_COMMAND}" -DMSG=\"Build Time:\" -P "${BRLCAD_CMAKE_DIR}/scripts/printtime.cmake" DEPENDS ${BUILD_DELTA_START} ) - set_target_properties(timestamp PROPERTIES FOLDER "Compilation Utilities") - add_custom_target(buildtimedelta ALL +set_target_properties(timestamp PROPERTIES FOLDER "Compilation Utilities") +add_custom_target(buildtimedelta ALL COMMAND ${CMAKE_BINARY_DIR}/CMakeTmp/dreport${EXE_EXT} final ${BUILD_DELTA_START} ${CONFIG_DELTA_START} COMMAND ${CMAKE_COMMAND} -E remove ${BUILD_DELTA_START} ) - set_target_properties(buildtimedelta PROPERTIES FOLDER "Compilation Utilities") -endif(NOT BRLCAD_IS_SUBBUILD) - -# We want the timestamp to come first, so make ALL targets, depend on -# timestamp. Similarly, buildtimedelta needs to depend on every target -# not excluded from the default build list. -if(NOT BRLCAD_IS_SUBBUILD) - - # Libraries and executables are fairly straightforward - get_property(CMAKE_LIBRARY_TARGET_LIST GLOBAL PROPERTY CMAKE_LIBRARY_TARGET_LIST) - get_property(CMAKE_EXEC_TARGET_LIST GLOBAL PROPERTY CMAKE_EXEC_TARGET_LIST) - mark_as_advanced(CMAKE_LIBRARY_TARGET_LIST) - mark_as_advanced(CMAKE_EXEC_TARGET_LIST) - list(REMOVE_DUPLICATES CMAKE_LIBRARY_TARGET_LIST) - list(REMOVE_DUPLICATES CMAKE_EXEC_TARGET_LIST) - foreach(ctarget ${CMAKE_LIBRARY_TARGET_LIST} ${CMAKE_EXEC_TARGET_LIST}) - if(TARGET ${ctarget}) - add_dependencies(${ctarget} timestamp) - get_target_property(not_in_all ${ctarget} EXCLUDE_FROM_ALL) - get_target_property(not_in_default ${ctarget} EXCLUDE_FROM_DEFAULT_BUILD) - if(NOT not_in_all AND NOT not_in_default) - add_dependencies(buildtimedelta ${ctarget}) - endif(NOT not_in_all AND NOT not_in_default) - endif(TARGET ${ctarget}) - endforeach(ctarget ${CMAKE_LIBRARY_TARGET_LIST} ${CMAKE_EXEC_TARGET_LIST}) - - # For the custom targets, we need to avoid circular dependencies - get_property(CMAKE_CUSTOM_TARGET_LIST GLOBAL PROPERTY CMAKE_CUSTOM_TARGET_LIST) - mark_as_advanced(CMAKE_CUSTOM_TARGET_LIST) - list(REMOVE_DUPLICATES CMAKE_CUSTOM_TARGET_LIST) - foreach(custtarget ${CMAKE_CUSTOM_TARGET_LIST}) - if(NOT ${custtarget} MATCHES "timestamp") - add_dependencies(${custtarget} timestamp) - endif(NOT ${custtarget} MATCHES "timestamp") - if(NOT ${custtarget} MATCHES "buildtimedelta") - get_target_property(not_in_all ${custtarget} EXCLUDE_FROM_ALL) - get_target_property(not_in_default ${custtarget} EXCLUDE_FROM_DEFAULT_BUILD) - if(NOT not_in_all AND NOT not_in_default) - add_dependencies(buildtimedelta ${custtarget}) - endif(NOT not_in_all AND NOT not_in_default) - endif(NOT ${custtarget} MATCHES "buildtimedelta") - endforeach(custtarget ${CMAKE_CUSTOM_TARGET_LIST}) - - # Theoretical logic to handle external targets - not currently in use - get_property(CMAKE_EXTERNAL_TARGET_LIST GLOBAL PROPERTY CMAKE_EXTERNAL_TARGET_LIST) - mark_as_advanced(CMAKE_EXTERNAL_TARGET_LIST) - if(CMAKE_EXTERNAL_TARGET_LIST) - list(REMOVE_DUPLICATES CMAKE_EXTERNAL_TARGET_LIST) - endif(CMAKE_EXTERNAL_TARGET_LIST) - foreach(externaltarget ${CMAKE_EXTERNAL_TARGET_LIST}) - get_target_property(target_confcmd ${externaltarget} _EP_CONFIGURE_COMMAND) - if(target_confcmd) - add_dependencies(${externaltarget} timestamp) - add_dependencies(buildtimedelta ${externaltarget}) - endif(target_confcmd) - endforeach(externaltarget ${CMAKE_EXTERNAL_TARGET_LIST}) - -endif(NOT BRLCAD_IS_SUBBUILD) +set_target_properties(buildtimedelta PROPERTIES FOLDER "Compilation Utilities") +#------------------------------------------------------------------------------ +# We want the timestamp to come first, so make all targets depend on timestamp. +# Similarly, buildtimedelta needs to depend on every target not excluded from +# the default build list. Doing this without function overrides for +# bookkeeping drives a minimum CMake version requirement of 3.7, in order to +# get the SUBDIRECTORIES and BUILDSYTEM_TARGETS properties. + +# First, use the SUBDIRECTORIES property to build up a list of all +# active directories in CMake: +# https://cmake.org/cmake/help/latest/prop_dir/SUBDIRECTORIES.html +# +# We do this because we need to use get_property on them, and get_property will +# produce an error if we give it a non-CMake processed directory. As a side +# benefit, it should also be considerably faster than using FILE_GLOB and +# trying to trim down the results. +set(ALL_DIRS) +get_property(SUBDIRS DIRECTORY "${CMAKE_SOURCE_DIR}" PROPERTY SUBDIRECTORIES) +while(SUBDIRS) + # TODO - once we require 3.15.7 or greater, use list(POP_FRONT) for this... + list(GET SUBDIRS 0 CDIR) + list(REMOVE_AT SUBDIRS 0) + set(ALL_DIRS ${ALL_DIRS} ${CDIR}) + get_property(CSUBDIRS DIRECTORY "${CDIR}" PROPERTY SUBDIRECTORIES) + set(SUBDIRS ${SUBDIRS} ${CSUBDIRS}) +endwhile(SUBDIRS) + +# Next, for all active directories, collect the list of targets using the +# BUILDSYSTEM_TARGETS property set on each directory. + +# Iterate over all the SUBDIRECTORIES identified directories to build up the +# comprehensive set. As target names are unique, we don't need to worry about +# removing duplicates. Because we're using the set of all active directories +# assembled above, this should collect all build targets we need to care about +# for timestamping purposes. +set(ALL_TARGETS) +foreach(ad ${ALL_DIRS}) + get_property(DIR_TARGETS DIRECTORY "${ad}" PROPERTY BUILDSYSTEM_TARGETS SET) + if (DIR_TARGETS) + get_property(DIR_TARGETS DIRECTORY "${ad}" PROPERTY BUILDSYSTEM_TARGETS) + set(ALL_TARGETS ${ALL_TARGETS} ${DIR_TARGETS}) + endif (DIR_TARGETS) +endforeach(ad ${ALL_DIRS}) + +# Now, set up the target dependencies for tiemstamp and buildtimedelta. These +# dependencies will produce a build-tool-independent ordering that gives us the +# timing behavior we want. +foreach(ctarget ${ALL_TARGETS}) + if(NOT ${ctarget} MATCHES "timestamp") + add_dependencies(${ctarget} timestamp) + endif(NOT ${ctarget} MATCHES "timestamp") + if(NOT ${ctarget} MATCHES "buildtimedelta") + get_target_property(not_in_all ${ctarget} EXCLUDE_FROM_ALL) + get_target_property(not_in_default ${ctarget} EXCLUDE_FROM_DEFAULT_BUILD) + if(NOT not_in_all AND NOT not_in_default) + add_dependencies(buildtimedelta ${ctarget}) + endif(NOT not_in_all AND NOT not_in_default) + endif(NOT ${ctarget} MATCHES "buildtimedelta") +endforeach(ctarget ${ALL_TARGETS}) -# TODO - the below logic will have to be rethought in a superbuild setup... +#------------------------------------------------------------------------------ +# Use the set of all directories assembled above to also set up distclean rules. +# This eliminates the need to override add_subdirectory. Needs CMake 3.7 for +# BINARY_DIR property. +foreach(ad ${ALL_DIRS}) + get_property(BDIR DIRECTORY "${ad}" PROPERTY BINARY_DIR) + DISTCLEAN("${BDIR}/CMakeFiles") + DISTCLEAN("${BDIR}/cmake_install.cmake") + foreach(clearpattern ${DISTCLEAN_OUTFILES}) + DISTCLEAN("${BDIR}/${clearpattern}") + endforeach(clearpattern ${DISTCLEAN_OUTFILES}) +endforeach(ad ${ALL_DIRS}) +#------------------------------------------------------------------------------ # To set correct install paths for CMake at build time, rather than CMake # time, some rather special logic is necessary - a build target that needs # to be run when the current build type changes, and introspective scripting @@ -3451,9 +2173,10 @@ if(CMAKE_CONFIGURATION_TYPES AND NOT BRLCAD_IS_SUBBUILD) endif(ALL_CMAKE_INSTALL_FILES_ORIG) # need a build target for this one - install directory may be dependent on configuration, but that won't # do for BRL-CAD reporting purposes - must get the fully qualified path at build time. - string(REPLACE "\${BUILD_TYPE}" "----BUILD_TYPE----" CMAKE_INSTALL_PREFIX_CFG "${CMAKE_INSTALL_PREFIX}") configure_file("${BRLCAD_CMAKE_DIR}/multiconfig_path_clean.cmake.in" "${CMAKE_BINARY_DIR}/CMakeTmp/multiconfig_path_clean.cmake" @ONLY) + DISTCLEAN("${CMAKE_BINARY_DIR}/CMakeTmp/multiconfig_path_clean.cmake") configure_file("${BRLCAD_CMAKE_DIR}/multiconfig_path_read.cmake.in" "${CMAKE_BINARY_DIR}/CMakeTmp/multiconfig_path_read.cmake" @ONLY) + DISTCLEAN("${CMAKE_BINARY_DIR}/CMakeTmp/multiconfig_path_read.cmake") if(EXISTS "${CMAKE_BINARY_DIR}/CMakeTmp/CURRENT_PATH") file(REMOVE_RECURSE "${CMAKE_BINARY_DIR}/CMakeTmp/CURRENT_PATH") endif(EXISTS "${CMAKE_BINARY_DIR}/CMakeTmp/CURRENT_PATH") @@ -3476,155 +2199,11 @@ endif(CMAKE_CONFIGURATION_TYPES AND NOT BRLCAD_IS_SUBBUILD) # CPack is used to produce tgz files, RPMS, etc. If SUBBUILD is enabled this # becomes the responsibility of the parent project. if(NOT BRLCAD_IS_SUBBUILD) + include(BRLCAD_CPack) +endif(NOT BRLCAD_IS_SUBBUILD) - configure_file("${BRLCAD_CMAKE_DIR}/source_archive_setup.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/source_archive_setup.cmake" @ONLY) - - set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "BRL-CAD - a powerful cross-platform open source solid modeling system") - set(CPACK_PACKAGE_VENDOR "BRL-CAD Development Team") - set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README") - set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") - set(CPACK_PACKAGE_VERSION_MAJOR ${BRLCAD_VERSION_MAJOR}) - set(CPACK_PACKAGE_VERSION_MINOR ${BRLCAD_VERSION_MINOR}) - set(CPACK_PACKAGE_VERSION_PATCH ${BRLCAD_VERSION_PATCH}) - - # By default, we want debugging information - set(CPACK_STRIP_FILES FALSE) - - # If we're not on Windows, set the install prefix and create - # TGZ and TBZ2 packages by default - if(NOT WIN32) - set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") - set(CPACK_GENERATOR TGZ TBZ2) - endif(NOT WIN32) - - # If we have RPMBUILD and it's not explicitly disabled, assume we're making an RPM. - find_program(RPMBUILD_EXEC rpmbuild) - mark_as_advanced(RPMBUILD_EXEC) - if(RPMBUILD_EXEC AND NOT CPACK_RPM_SKIP) - - # Build an RPM by default if we have the tool. Out of the box, just - # build a "vanilla" RPM. For situations where we want more detail - # and versioning of the RPM, set the variable CMAKE_RPM_VERSION - # to the numerical "version" of the RPM: 1, 2, etc.. - - # Since RPM packages present a particular problem with bad umask - # settings and RPM package building is enabled, raise the issue again - # with a longer wait time. - if (NOT UMASK_OK) - message(" ") - message(WARNING "umask is set to ${umask_curr} and RPM package building is enabled - this is not a 'standard' umask setting for BRL-CAD RPM packages. Double check that these umask permissions will have the desired results when installed - RPM packages can impact permissions on system directories such as /usr\nIf the umask settings need to be changed, it is recommended that the build directory be cleared and cmake re-run after the umask setting has been changed.") - if(SLEEP_EXEC) - execute_process(COMMAND ${SLEEP_EXEC} 5) - endif(SLEEP_EXEC) - endif (NOT UMASK_OK) - - set(CPACK_GENERATOR ${CPACK_GENERATOR} RPM) - set(CPACK_RPM_PACKAGE_LICENSE "LGPL 2.1") - set(CPACK_RPM_PACKAGE_GROUP "Applications/Engineering") - set(CPACK_RPM_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") - - # We do NOT want to strip the binaries added to the RPM - - # see https://cmake.org/Wiki/CMake:CPackPackageGenerators and - # https://public.kitware.com/Bug/view.php?id=7435 - set(CPACK_RPM_SPEC_INSTALL_POST /bin/true) - - if(CPACK_RPM_VERSION) - if(DEFINED BRLCAD_VERSION_AMEND) - set(CPACK_RPM_PACKAGE_NAME "brlcad_${BRLCAD_VERSION_MAJOR}_${BRLCAD_VERSION_MINOR}_${BRLCAD_VERSION_PATCH}_${BRLCAD_VERSION_AMEND}") - else(DEFINED BRLCAD_VERSION_AMEND) - set(CPACK_RPM_PACKAGE_NAME "brlcad_${BRLCAD_VERSION_MAJOR}_${BRLCAD_VERSION_MINOR}_${BRLCAD_VERSION_PATCH}") - endif(DEFINED BRLCAD_VERSION_AMEND) - - # If we've got a Redhat release, include some info about the - # specific release in the name. Otherwise, just go generic. - if(EXISTS /etc/redhat-release) - file(READ /etc/redhat-release REDHAT_RELEASE) - string(REGEX MATCH "[0-9]+" REDHAT_VERSION ${REDHAT_RELEASE}) - string(REGEX MATCH "Enterprise Linux" LINUX_DIST_TYPE ${REDHAT_RELEASE}) - if(LINUX_DIST_TYPE) - set(LINUX_DIST_TYPE "el") - else(LINUX_DIST_TYPE) - set(LINUX_DIST_TYPE "rh") - endif(LINUX_DIST_TYPE) - set(CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_VERSION}.${LINUX_DIST_TYPE}${REDHAT_VERSION}) - else(EXISTS /etc/redhat-release) - set(CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_VERSION}) - endif(EXISTS /etc/redhat-release) - - endif(CPACK_RPM_VERSION) - endif(RPMBUILD_EXEC AND NOT CPACK_RPM_SKIP) - - if(${CMAKE_WORD_SIZE} MATCHES "32BIT" AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") - set(CPACK_PACKAGE_FILE_NAME "BRL-CAD_${BRLCAD_VERSION}_${CMAKE_SYSTEM_NAME}_x86") - else(${CMAKE_WORD_SIZE} MATCHES "32BIT" AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") - set(CPACK_PACKAGE_FILE_NAME "BRL-CAD_${BRLCAD_VERSION}_${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}") - endif(${CMAKE_WORD_SIZE} MATCHES "32BIT" AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") - if(CPACK_RPM_PACKAGE_RELEASE) - set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}_${CPACK_RPM_PACKAGE_RELEASE}") - endif(CPACK_RPM_PACKAGE_RELEASE) - - if(WIN32) - find_package(NSIS) - if (NSIS_FOUND) - set(CPACK_GENERATOR ${CPACK_GENERATOR} NSIS) - set(CPACK_NSIS_PACKAGE_NAME "BRL-CAD") - set(CPACK_NSIS_INSTALL_DIRECTORY "BRL-CAD ${BRLCAD_VERSION}") - set(CPACK_SOURCE_DIR "${CMAKE_SOURCE_DIR}") - set(CPACK_DATA_DIR "${DATA_DIR}") - set(CPACK_DOC_DIR "${DOC_DIR}") - # There is a bug in NSIS that does not handle full unix paths properly. Make - # sure there is at least one set of four (4) backslashes. - set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/misc/nsis\\\\brlcad.ico") - set(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/misc/nsis\\\\uninstall.ico") - set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) - set(CPACK_NSIS_DISPLAY_NAME "BRL-CAD") - set(CPACK_NSIS_MODIFY_PATH ON) - endif (NSIS_FOUND) - find_package(Wix) - if (Wix_FOUND) - # User report that this version of the installer also supports - # non-graphical installation with the /passive option. - # - # Note: for WiX, start menu shortcuts and desktop icons are handled with - # properties set on targets. (At the moment, this is not true for NSIS - - # it uses entries in the misc/CMake/NSIS.template.in file.) - # - # If we need to get fancier about this, look at the following: - # https://github.com/Kitware/CMake/blob/master/CMakeCPackOptions.cmake.in#L216 - # https://github.com/Kitware/CMake/tree/master/Utilities/Release/WiX - set(CPACK_GENERATOR ${CPACK_GENERATOR} WIX) - set(CPACK_WIX_LICENSE_RTF "${CMAKE_SOURCE_DIR}/misc/wix/License.rtf") - set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/misc/wix/brlcad_product.ico") - set(CPACK_WIX_PROGRAM_MENU_FOLDER "BRL-CAD ${BRLCAD_VERSION}") - set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/misc/wix/brlcad_banner.bmp") - set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/misc/wix/brlcad_dialog.bmp") - endif (Wix_FOUND) - if (NOT CPACK_GENERATOR) - # If nothing else, make a zip file - set(CPACK_GENERATOR ZIP) - endif (NOT CPACK_GENERATOR) - if(CMAKE_CL_64) - set(CPACK_PACKAGE_FILE_NAME "BRL-CAD_${BRLCAD_VERSION}_win64") - set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "BRL-CAD ${BRLCAD_VERSION} win64") - # Use the setting from http://public.kitware.com/pipermail/cmake/2013-June/055000.html to - # provide the correct default 64 bit directory with older CMake versions - set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") - else(CMAKE_CL_64) - set(CPACK_PACKAGE_FILE_NAME "BRL-CAD_${BRLCAD_VERSION}_win32") - set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "BRL-CAD ${BRLCAD_VERSION} win32") - set(CPACK_NSIS_PACKAGE_NAME "BRL-CAD (32 Bit)") - endif(CMAKE_CL_64) - endif(WIN32) - - set(CPACK_SOURCE_GENERATOR TGZ TBZ2 ZIP) - set(CPACK_SOURCE_PACKAGE_FILE_NAME "brlcad-${BRLCAD_VERSION}") - set(CPACK_SOURCE_IGNORE_FILES "\\\\.svn/") - - configure_file("${BRLCAD_CMAKE_DIR}/BRLCAD_CPackOptions.cmake.in" "${CMAKE_BINARY_DIR}/BRLCAD_CPackOptions.cmake" @ONLY) - set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/BRLCAD_CPackOptions.cmake") - - include(CPack) +if(NOT BRLCAD_IS_SUBBUILD) # Some files to ignore for distcheck. For this case # only, we add CMakeLists.txt (others are handled # by add_subdirectory wrapper @@ -3652,7 +2231,7 @@ if(NOT BRLCAD_IS_SUBBUILD) DISTCLEAN("${CMAKE_BINARY_DIR}/brlcadexec.cmake") DISTCLEAN("${CMAKE_BINARY_DIR}/cmake_install.cmake") DISTCLEAN("${CMAKE_BINARY_DIR}/install_manifest.txt") - DISTCLEAN("${CMAKE_BINARY_DIR}/OPTIONS") + DISTCLEAN("${CMAKE_BINARY_DIR}/BRLCAD_OPTIONS") DISTCLEAN("${CMAKE_BINARY_DIR}/CMakeFiles") DISTCLEAN("${CMAKE_BINARY_DIR}/CMakeTmp") DISTCLEAN("${CMAKE_BINARY_DIR}/configure.new") @@ -3664,10 +2243,10 @@ if(NOT BRLCAD_IS_SUBBUILD) foreach(clearpattern ${DISTCLEAN_OUTFILES}) DISTCLEAN("${CMAKE_BINARY_DIR}/${clearpattern}") endforeach(clearpattern ${DISTCLEAN_OUTFILES}) - if("${CMAKE_GENERATOR}" MATCHES "Ninja") + if("${CMAKE_GENERATOR}" MATCHES "Ninja*") DISTCLEAN("${CMAKE_BINARY_DIR}/.ninja_log") DISTCLEAN("${CMAKE_BINARY_DIR}/.ninja_deps") - endif("${CMAKE_GENERATOR}" MATCHES "Ninja") + endif("${CMAKE_GENERATOR}" MATCHES "Ninja*") # ---------------------------------------------------------------------------- # Define a distcheck target. This performs a variety of tests to determine @@ -3732,7 +2311,7 @@ endfunction(DIFF_FILE filename) 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}") -file(READ "${BRLCAD_BINARY_DIR}/OPTIONS" INSTALL_OPTS) +file(READ "${BRLCAD_BINARY_DIR}/BRLCAD_OPTIONS" INSTALL_OPTS) file(APPEND "${BRLCAD_BINARY_DIR}/INSTALL.new" "${INSTALL_OPTS}") file(APPEND "${BRLCAD_BINARY_DIR}/INSTALL.new" "\n\n*** Note - Do not add or edit configuration option descriptions and alias lists in this file - those entries are auto-generated from information in @@ -3762,6 +2341,7 @@ DISTCLEAN("${CMAKE_BINARY_DIR}/CMakeTmp/timedelta_end.c") get_property(CMAKE_DISTCLEAN_TARGET_LIST GLOBAL PROPERTY CMAKE_DISTCLEAN_TARGET_LIST) list(REMOVE_DUPLICATES CMAKE_DISTCLEAN_TARGET_LIST) configure_file("${BRLCAD_CMAKE_DIR}/distclean.cmake.in" "${BRLCAD_BINARY_DIR}/distclean.cmake" @ONLY) +DISTCLEAN("${BRLCAD_BINARY_DIR}/distclean.cmake") if ("${CMAKE_GENERATOR}" MATCHES "Visual Studio") add_custom_target(distclean COMMAND ${CMAKE_COMMAND} -P "${BRLCAD_BINARY_DIR}/distclean.cmake" @@ -3810,6 +2390,11 @@ add_custom_target(print-warning-message ${CMAKE_COMMAND} -E echo "" COMMAND false ) set_target_properties(print-warning-message PROPERTIES FOLDER "Compilation Utilities") + +# NOTE: set to NEW and remove slashes after 3.19 is required +if(POLICY CMP0110) + cmake_policy(SET CMP0110 OLD) +endif(POLICY CMP0110) add_test(NAME "NOTE:\\ some\\ 'test'\\ tests\\ are\\ expected\\ to\\ fail,\\ 'regress'\\ must\\ pass" COMMAND ${CMAKE_COMMAND} --build . --target print-warning-message) # Local Variables: diff --git a/COPYING b/COPYING index ffecab01f5d..08d796fb101 100644 --- a/COPYING +++ b/COPYING @@ -101,7 +101,7 @@ arranged. This includes an implicit assignment of copyright for any and all contributions being made. The following notice should be prominent in the BRL-CAD sources: - Copyright (c) 1984-2020 United States Government as represented by + Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. Contact diff --git a/ChangeLog b/ChangeLog index 3c22b9cabe4..5591095d8de 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,18799 +1,4067 @@ -2020-09-14 08:45 brlcad - - * [r77143] NEWS: - include a brief summary writeup of highlights - -2020-09-14 07:20 brlcad - - * [r77142] NEWS: - document the util fixes in addition to the fb fixes for Windows. - looks nominally like confirmed binary input mode fix dpix-pix, - bwshrink, halftone, pixshrink, sun-pix, as well as the plot and - brep - plot commands. also possibly fixed by marking input as binary - includes bw-a, - bw-png, bw-ps, bwscale, mac-pix, pix-ppm, pix-ps, pix3filter, - pixbgstrip, pixborder, pixembed, pixfilter, pixhalf, pixrot, - pixscale, - plot3-ps, ap-pix, bwcrop, bwhisteq, bwstat, pixcrop, pixdiff, - pixhist, - pixhist3d-plot3, pixhist3d, pixstat, plot3-asc, plot3stat, - asc-plot3, bombardier, bw-pix, bwcrop, bwdif, pix-ppm, pix3filer, - pixblend, pixclump, pixcount, pixcrop, pixdiff, pixinterp2x, - pixmerge, pixmorph, pixuntile, plot3-dm, plot3rot - - - -2020-09-14 05:08 brlcad - - * [r77141] NEWS: - cliff added asc v4/v5 import/export support to gcv, circa r76277 - and commits forward. - -2020-09-14 04:47 brlcad - - * [r77140] src/libged/make/make.c: - note that cline is intentionally not included - -2020-09-14 04:31 brlcad - - * [r77139] NEWS: - cliff added asc v4/v5 import support to gcv, circa r76277. - -2020-09-14 04:25 brlcad - - * [r77138] TODO: - there's an article, but need a gcv manual page - -2020-09-14 03:31 starseeker - - * [r77137] include/brep/defines.h, - src/libgcv/plugins/rhino/rhino_read.cpp, - src/librt/primitives/brep/brep.cpp, - src/other/openNURBS/example_read/example_read.cpp, - src/other/openNURBS/example_roundtrip/example_roundtrip.cpp, - src/other/openNURBS/example_write/example_write.cpp, - src/other/openNURBS/opennurbs_archive.cpp, - src/other/openNURBS/opennurbs_archive.h, - src/other/openNURBS/opennurbs_defines.cpp, - src/other/openNURBS/opennurbs_defines.h, - src/other/openNURBS/opennurbs_extensions.cpp, - src/other/openNURBS/opennurbs_extensions.h, - src/other/openNURBS/opennurbs_string.cpp, - src/other/openNURBS/opennurbs_userdata.cpp, - src/other/openNURBS/opennurbs_zlib.cpp: - Just directly alter the problematic names in the openNURBS - headers, so we don't have to try and work around it in ours. - -2020-09-14 00:57 starseeker - - * [r77136] NEWS: - Technically user visible - document man page update for remrt in - r76897 - -2020-09-13 21:11 starseeker - - * [r77135] doc/docbook/system/mann/search.xml: - Mention alphanum search output sorting in man page. - -2020-09-13 17:29 starseeker - - * [r77134] ., src/archer/CMakeLists.txt, src/brlman/CMakeLists.txt, - src/bwish/CMakeLists.txt, src/libbu, src/libbu/parse.c, - src/libtclcad/CMakeLists.txt, src/libtclcad/commands.c, - src/mged/CMakeLists.txt, src/tclscripts/lib/RtImage.tcl: - Pull RELEASE-only changes back into trunk, r77106 through r77132 - -2020-09-13 17:24 starseeker - - * [r77132] misc/CMake/NSIS_silent.template.in: - Update the silent NSIS template to match the main version. - -2020-09-13 15:58 starseeker - - * [r77130] misc/CMake/NSIS.template.in: - See if we can manipulate the startup directory of the shortcuts - via NSIS - -2020-09-13 15:47 starseeker - - * [r77129] NEWS: - The 'nburst' refactor of the burst code is available. Mostly a - general cleanup of the code, which was previously in an early - coding style quite different from most of BRL-CAD. Although - primarily intended for batch processing, it also provides a new - command line interactive mode that replaces the early terminal - menu system removed in 7.30.2. - -2020-09-13 15:27 starseeker - - * [r77128] NEWS: - overlay and screengrab commands gained -F options that let them - interact with the framebuffer, rather than the display manager - scene. Useful for capturing and updating the contents of the - embedded MGED framebuffer. - -2020-09-13 14:47 starseeker - - * [r77127] doc/docbook/system/man1/CMakeLists.txt, - doc/docbook/system/man1/bolt.xml: - bolt man page was added to MGED's category, but we still have the - command line tool as well. - -2020-09-13 14:37 starseeker - - * [r77126] NEWS: - whichair and whichid can now also search subsets of .g file using - the --root specifier, in addition to the standard search of all - objects. - -2020-09-13 14:34 starseeker - - * [r77125] doc/docbook/system/mann/whichair.xml: - Update whichair man page for new capabilities. - -2020-09-13 14:04 starseeker - - * [r77124] NEWS: - Added a new 'bot set' command to match 'bot get' - only supports - mode and orientation right now, but these should eventually be - expanded to other bot operations. - -2020-09-13 14:03 starseeker - - * [r77123] NEWS: - We're now returning semantically meaningful strings for bot mode - and orientation with the low level 'bot get' command - users - don't know how to interpret the raw numbers. - -2020-09-13 13:56 starseeker - - * [r77122] NEWS: - Circa r75774, added an extrude subcommand to the GED bot command - for making ARB6 volumes based on BoT triangles. This is a simple - extrude operation - it can't guarantee 'smooth' alignment between - individual ARB6 extrusions at adjacent faces. - -2020-09-13 06:37 brlcad - - * [r77121] doc/README.other: - remove the subdir - -2020-09-13 06:36 brlcad - - * [r77120] doc/CMakeLists.txt, doc/README.AIX, doc/README.IRIX: - IRIX was retired in 2013 and we subsequently no longer compile - there due to c++11. AIX is still quite active (particularly on - HPC) but our README commentary is entirely obsolete. - -2020-09-13 06:31 brlcad - - * [r77119] doc/CMakeLists.txt, doc/README.OSCON-2014: - remove the notes for a 2014 oscon presentation. exists in history - and is inconsistent (i.e., confusing) with the platform READMEs - -2020-09-13 06:29 brlcad - - * [r77118] doc/CMakeLists.txt, doc/README.AIX, doc/README.BSD, - doc/README.IRIX, doc/README.OSCON-2014, doc/README.Solaris, - doc/README.VAX, doc/README.other/README.AIX, - doc/README.other/README.BSD, doc/README.other/README.IRIX, - doc/README.other/README.OSCON-2014, - doc/README.other/README.Solaris, doc/README.other/README.VAX: - moving platform-specific README's together. platforms should be - presented equitably or can result in a dismissive perspective - harmful in the long term. best practice and project ethos has - always been to handle cross-platform variants on valid footing. - -2020-09-13 06:05 brlcad - - * [r77117] NEWS: - whichid and whichair commands now let one specify a range of IDs. - the changes were prototyped by nick in a script, and more - recently adopted into libged by cliff - -2020-09-12 16:34 starseeker - - * [r77109] src/libtclcad/commands.c: - Check for null before calling Tcl_Close - -2020-09-11 19:05 brlcad - - * [r77105] bench/run.sh: - /dev/null is a special device and -f is only for regular files, - so we really just want to check for existence here. - -2020-09-10 04:20 brlcad - - * [r77098] include/icv/io.h: - clarify some of the icv_image_size() parameters. - -2020-09-10 00:41 brlcad - - * [r77096] TODO: - search issue was fixed in r77076. it's all good. - -2020-09-09 22:50 starseeker - - * [r77095] CMakeLists.txt: - One of the unit tests for bu_file failed on the Mac github runner - using the system realpath. Might be the test isn't valid, but - we're right before release - just put back the internal version - for now. - -2020-09-09 20:33 brlcad - - * [r77094] TODO: - search -exec appears to be completely non-functional. I'm getting - no output. Build from a couple month back appears to be working, - so maybe related to process/channel/io changes. - -2020-09-09 20:32 brlcad - - * [r77093] src/libged/TODO: - elaborate thoughts on an object-awar gsort/tables/filter command. - -2020-09-09 13:23 brlcad - - * [r77092] doc/docbook/system/man3/CMakeLists.txt, - doc/docbook/system/man3/libicv.xml: - applied sf patch 554 (Added libicv man page in - doc/docbook/system/man3/) from Sumagna Das - -2020-09-09 13:18 brlcad - - * [r77091] src/libgcv/plugins/vol/png_read.c: - fix ws indent - -2020-09-09 03:55 brlcad - - * [r77090] bench/run.sh: - support /dev/null and the NUL special file construct on Windows - (for git bash and msys2-based scripting environments) - -2020-09-09 03:41 brlcad - - * [r77089] bench/run.sh: - turn off path conversion in msys2 and in git's customized - msys-based shell. likely getting /dev/null conversion for free, - so fix for that is next - -2020-09-08 20:38 starseeker - - * [r77088] NEWS, doc/docbook/system/mann/search.xml, - src/librt/search.c, src/librt/search.h: - This came up again... forward port and enable the most basic of - the search command size filters from r67646. This is just the - dp->d_len object size filter, but it pairs with the ls options - that can report size - with this in place, we can use ls -lS to - get an overall report of object sizes and then search with -size - and other filters to identify large or small subsets based on - type. Particular use case was trying to find a large plate mode - bot in the FAA Generic_Twin.g example: ls -lS to get an idea of - size distributions and then search -type plate -size >50000 to - find larger examples. Would be nice to be able to specify sorting - the search output on size at some point as well... - -2020-09-08 20:27 starseeker - - * [r77086] TODO: - Note a quirk of bot -V visualizations that needs attention at - some point. - -2020-09-08 19:29 brlcad - - * [r77085] TODO: - note the mged startup path issues, discussed with a few users. - need to investigate and document the current behavior for - command-line, double-click, drag-n-drop file opening, GUI menu - opening, and GUI CLI opening. - -2020-09-08 17:46 brlcad - - * [r77083] NEWS: - looks like we missed documenting a gci contribution from jeffrey - liu that added support for reading EBM data from binunif database - objects (previously only supported files) - -2020-09-08 17:40 brlcad - - * [r77082] NEWS: - retroactively document all of ali haydar's summer 2019 work on - annotations. not included, but it's worth noting that his changes - were realized through additional effort and mentoring by daniel - roßberg. - -2020-09-08 17:30 brlcad - - * [r77081] NEWS: - rishabh has been working all summer on the opencl pipeline in - brl-cad with several more primitives converted including hyp and - a bug, with untested/unfinished work on pipe, vol, arbn, and - cline. - -2020-09-08 17:28 brlcad - - * [r77080] NEWS: - daniel actually applied patches from ali haydar affecting display - of annotations on windows. - -2020-09-08 17:27 brlcad - - * [r77079] AUTHORS: - credit 2020 gsoc student rishab suthar with his openCL gpgpu - pipeline contributions - -2020-09-08 16:41 starseeker - - * [r77077] src/libged/bot/bot.cpp: - Teach bot GED command to set orientation and mode, and report - user-understandable strings for get in those cases rather than - the raw number. - -2020-09-08 16:38 starseeker - - * [r77076] src/mged/mged.c: - Whoops - need to set the interp callbacks here as well. - -2020-09-08 16:22 brlcad - - * [r77075] AUTHORS: - credit sumagna das for his work implementing the beginnings of a - new gcv plugin (png-to-vol). - -2020-09-08 15:29 starseeker - - * [r77074] include/tclcad.h, src/libtclcad/commands.c: - Need separate channels for in/out/err (MGED on Windows was - crashing trying to close due to callbacks for both stdout and - stderr channel closing.) - -2020-09-06 14:33 starseeker - - * [r77073] src/libgcv/plugins/vol/png_read.c: - Add header and footer (caught by regress-licenses) - -2020-09-06 06:26 brlcad - - * [r77072] src/libgcv/plugins/vol/png_read.c: - add a bit more debugging to understand what's going on, if any - are being called - -2020-09-06 06:15 brlcad - - * [r77071] src/libgcv/plugins/vol/png_read.c: - vol plugin needs to export gcv_plugin_info as a callable function - -2020-09-06 06:14 brlcad - - * [r77070] src/libgcv/plugins/gdal/gdal.cpp: - don't crash if we can't determine the unit type in the gdal - plugin. still can't handle png and bombs out, but at least aborts - slightly more gracefully. - -2020-09-06 05:50 brlcad - - * [r77069] src/libgcv/plugins/vol, - src/libgcv/plugins/vol/CMakeLists.txt, - src/libgcv/plugins/vol/png_read.c: - apply zulip patch from Sumagna Das that stubs in an initial - vol-from-png plugin. not yet functional, but compiles and exposes - a few other issues in libgcv. - -2020-09-06 05:48 brlcad - - * [r77068] src/libgcv/plugins/gdal/gdal.cpp, - src/libgcv/plugins/gdal/gdal_ll.cpp: - fit comments and separate if expression from the true block for - consistent readability - -2020-09-04 20:52 starseeker - - * [r77066] src/libged/put_comb/put_comb.c: - Unused string - -2020-09-04 20:08 brlcad - - * [r77065] src/libged/put_comb/put_comb.c: - per the usage, the caller can say 'No' and still provide the - remaining 4 region args, it just won't do anything with them. - don't make it a fatal condition if that happens, just continue, - since the caller (as is the case in mged) may just be a script - that passes defaults. avoids the caller needing to - conditionalize. undoing the error avoids a failure editing - non-region combs via the combination editor in mged. - -2020-09-04 18:35 starseeker - - * [r77064] TODO: - OK, not a new issue - calling reopen with a read-only database is - what's doing this. - -2020-09-04 15:43 starseeker - - * [r77063] TODO: - It's that the database is read-only, not that it's on Windows. - -2020-09-04 15:41 starseeker - - * [r77062] CMakeLists.txt: - See if this lets us use system realpath. If so, we may be able to - yank the bsd fallback implementation. - -2020-09-04 15:30 starseeker - - * [r77061] include/bu/defines.h, include/common.h: - More uniformly define MAXPATHLEN across the code. - - Tcl defines MAXPATHLEN, and there was a potential for different - definitions between their headers and ours. Not certain, but that - is - one possible source of the strange realpath crash observed on - Linux - but not reproducible in isolation - if code with one definition - of - MAXPATHLEN created a buffer and then fed it to a library compiled - using - a different definition, those different assumptions are a source - of - possible trouble. I think that's what was happening with the - whoami.c - code after I switched it to using MAXPATHLEN. Previously that - code - called realpath directly rather than bu_file_realpath. After the - MAXPATHLEN switch, those raw realpath calls triggered a segfault - on - Linux - most likely due to a non-PATH_MAX definition of - MAXPATHLEN - previously being defaulted to by the bu/defines.h definition. - - Move the MAXPATHLEN definition to common.h, which is always - included - before tcl.h in our code, and add a couple definitions from the - Tcl - headers to use as fallbacks. Would be nice if there is some way - to - systematically check for this kind of issue... - -2020-09-04 14:08 starseeker - - * [r77060] src/libbu/whereami.c: - realpath -> bu_file_realpath - -2020-09-04 13:46 starseeker - - * [r77059] src/libbu/realpath_bsd.c, src/libbu/whereami.c: - PATH_MAX->MAXPATHLEN - -2020-09-04 13:39 starseeker - - * [r77058] doc/README.Windows: - WiX .msi is getting more useful - add some notes to - README.Windows. - -2020-09-04 05:55 brlcad - - * [r77057] src/libtclcad/auto_path.c, src/libtclcad/bn.c, - src/libtclcad/bu.c, src/libtclcad/cmdhist.c, - src/libtclcad/commands.c, src/libtclcad/dm.c, - src/libtclcad/eval.c, src/libtclcad/fb.c, src/libtclcad/fbserv.c, - src/libtclcad/global.c, src/libtclcad/init.c, - src/libtclcad/mouse.c, src/libtclcad/polygons.c, - src/libtclcad/rt.c, src/libtclcad/tclcad_private.h, - src/libtclcad/view/faceplate.c, src/libtclcad/wrapper.c: - update file header filenames. use ./ relative header path to - denote local include files. - -2020-09-04 05:35 brlcad - - * [r77056] src/libtclcad/CMakeLists.txt, src/libtclcad/commands.c, - src/libtclcad/eval.c, src/libtclcad/global.c, - src/libtclcad/init.c, src/libtclcad/mouse.c, - src/libtclcad/polygons.c, src/libtclcad/tclcad_eval.c, - src/libtclcad/tclcad_global.c, src/libtclcad/tclcad_init.c, - src/libtclcad/tclcad_mouse.c, src/libtclcad/tclcad_obj.c, - src/libtclcad/tclcad_obj_wrapper.c, - src/libtclcad/tclcad_polygons.c, src/libtclcad/wrapper.c: - rename most tclcad files to consistently not use a filename - prefix. updating contents separately. - -2020-09-04 04:34 brlcad - - * [r77055] include/common.h: - go ahead and put the snippets into code/endcode blocks to make - their callout more explicit and obvious. - -2020-09-04 04:14 brlcad - - * [r77054] include/bn/anim.h, include/bn/complex.h, - include/bn/noise.h, include/bn/poly.h, include/bn/rand.h, - include/bu/color.h, include/bu/column.h, include/bu/endian.h, - include/bu/tbl.h: - doxygen / comment cleanup - -2020-09-04 04:13 brlcad - - * [r77053] include/bu/app.h, include/bu/glob.h: - convert define and enum comments for doxygen - -2020-09-04 04:09 brlcad - - * [r77052] include/bn/plane.h: - document the struct elements where already documented - -2020-09-04 04:01 brlcad - - * [r77051] include/bn/dvec.h: - put the cond/endcond doxygen markers in doxy blocks - -2020-09-04 03:06 starseeker - - * [r77050] TODO: - Only on Windows, getting db_dircheck reports of duplicate objects - on rtwizard startup. - -2020-09-04 01:57 starseeker - - * [r77049] src/mged/CMakeLists.txt: - Typo - -2020-09-04 01:43 starseeker - - * [r77048] src/archer/CMakeLists.txt, src/archer/archer.ico, - src/archer/archer.rc, src/mged/CMakeLists.txt, src/mged/mged.ico, - src/mged/mged.rc, src/rtwizard/CMakeLists.txt, - src/rtwizard/rtwizard.ico, src/rtwizard/rtwizard.rc: - If I'm understanding this correctly, the WiX msi installer relies - on the application to provide the icon, unlike NSIS. Do what - wish.exe does and try specifying rc files that identify the - icons. - -2020-09-03 22:42 starseeker - - * [r77047] CMakeLists.txt: - Note potentially relevant WiX example in CMake itself. - -2020-09-03 22:08 starseeker - - * [r77046] src/archer/CMakeLists.txt, src/mged/CMakeLists.txt, - src/rtwizard/CMakeLists.txt: - Shouldn't hardcode 'bin' string - -2020-09-03 22:06 starseeker - - * [r77045] CMakeLists.txt, src/archer/CMakeLists.txt, - src/mged/CMakeLists.txt, src/rtwizard/CMakeLists.txt: - Try setting the CPACK install properties. - -2020-09-03 21:49 starseeker - - * [r77044] CMakeLists.txt, misc/CMake/CMakeLists.txt, - misc/CMake/WIX.template.in: - CPACK_START_MENU_SHORTCUTS may let us get the menu set up without - a custom template. - -2020-09-03 19:49 starseeker - - * [r77043] misc/CMake/CMakeLists.txt: - correct filename - -2020-09-03 19:12 starseeker - - * [r77042] CMakeLists.txt, misc/wix/brlcad_banner.bmp, - misc/wix/brlcad_dialog.bmp: - Tweak WiX images. - -2020-09-03 17:46 starseeker - - * [r77041] misc/CMake/FindWix.cmake: - Remove debug message - -2020-09-03 17:36 starseeker - - * [r77040] CMakeLists.txt, misc/CMake/CMakeLists.txt, - misc/CMake/WIX.template.in: - See if we can point to the CMake standard built-in template and - get the same installer as leaving the template unset. - -2020-09-03 17:22 starseeker - - * [r77039] misc/CMake/FindWix.cmake: - Adjust path hunting for WiX - -2020-09-03 17:09 starseeker - - * [r77038] CMakeLists.txt, misc/CMake/CMakeLists.txt, - misc/CMake/FindNSIS.cmake, misc/CMake/FindWix.cmake: - Untested as yet, but see if we can key CPack setup on Windows off - of what installer generators we have available. - -2020-09-03 13:52 starseeker - - * [r77037] misc/tools/CMakeLists.txt, misc/tools/inactvhdrs, - misc/tools/inactvhdrs/inactvhdrs.cpp: - Toss in a quick utility to try and detect headers in source - hierarchies that aren't #included by any of the local files. - -2020-09-03 13:47 starseeker - - * [r77036] src/libgcv/tests/CMakeLists.txt: - Missing CMakeLists.txt file - -2020-09-03 07:13 brlcad - - * [r77035] src/libgcv/CMakeLists.txt, src/libgcv/test_bottess.c, - src/libgcv/tests, src/libgcv/tests/test_bottess.c: - move gcv's only unit test into a subdir like our other libs. - -2020-09-03 07:04 brlcad - - * [r77034] include/gcv/api.h: - oof, probably shouldn't assume it's a model mime type. - -2020-09-02 18:08 starseeker - - * [r77033] CMakeLists.txt: - Note user report that the WiX msi installer has an ability to - install silently. Need to explore what it would take to match - features with the NSIS .exe installer. - -2020-09-01 19:30 starseeker - - * [r77031] include/bn/dvec.h, include/ged.h, - include/ged/commands.h, include/rt/calc.h: - Clear the remainder of the doxygen warnings - -2020-09-01 19:17 starseeker - - * [r77030] include/bu/vls.h, include/wdb.h: - Clear some more doxygen warnings - -2020-09-01 19:09 starseeker - - * [r77029] include/bu/file.h: - Adjust comment for doxygen - -2020-09-01 19:05 starseeker - - * [r77028] include/brep/curvetree.h, include/brep/util.h: - Tell doxygen not to worry about these includes - -2020-09-01 18:45 starseeker - - * [r77027] misc/doxygen/libbu.dox: - Add group for bu/process.h - -2020-09-01 18:36 starseeker - - * [r77026] misc/doxygen/Doxyfile.in: - Increase DOT_GRAPH_MAX_NODES to avoid warnings about too many - notes. - -2020-09-01 18:28 starseeker - - * [r77025] include/common.h: - Indent for doxygen - -2020-09-01 18:04 brlcad - - * [r77024] include/bn/vectfont.h, include/bn/vlist.h: - delete extra doxygen closure - -2020-09-01 18:01 brlcad - - * [r77023] include/bu/parallel.h: - ditto, use addtogroup instead of ingroup for consistency. - -2020-09-01 17:59 brlcad - - * [r77022] include/bu/process.h: - use addtogroup instead of ingroup, consistent with the rest and - fixes an unbalanced grouping error. - -2020-09-01 17:51 brlcad - - * [r77021] include/bu/dylib.h: - missing @ sign - -2020-09-01 17:47 starseeker - - * [r77020] CHANGES, TODO: - Per discussion with Sean, most of these don't qualify as needing - the deprecation process. - -2020-09-01 17:47 brlcad - - * [r77019] misc/doxygen/Doxyfile.in, misc/tools/dom2dox/Doxyfile: - PERL_PATH and MSCGEN_PATH are deprecated, so remove them. we - weren't using them anyways. - -2020-09-01 17:42 starseeker - - * [r77018] TODO: - This is looking quite tricky - did some experiments in swrast - branch, but no quick fix popping out so far - bump down. - -2020-09-01 15:20 starseeker - - * [r77017] CHANGES: - List some of the more obscure MGED menu entries for deprecation. - -2020-09-01 13:49 starseeker - - * [r77014] include/ged.h, include/ged/commands.h, - include/rt/geom.h, include/rt/primitives/annot.h, - misc/doxygen/libged.dox: - More doxygen adjustments - -2020-09-01 13:27 starseeker - - * [r77013] include/bg/aabb_ray.h, include/bg/chull.h, - include/bg/lseg.h, include/bg/obr.h, include/bg/pointgen.h, - include/bg/polygon.h, include/bg/polygon_types.h, - include/bg/spsr.h, include/bg/tri_pt.h, include/bg/tri_ray.h, - include/bg/tri_tri.h, include/bg/trimesh.h, - misc/doxygen/libbg.dox: - Organize libbg doxygen comments - -2020-09-01 12:59 starseeker - - * [r77012] misc/doxygen/libbn.dox: - Categorize for doxygen - -2020-09-01 12:41 starseeker - - * [r77011] include/bu/app.h, include/bu/glob.h, - include/bu/interrupt.h, include/bu/mime.h, - misc/doxygen/libbu.dox: - Add some doxygen adjustments. - -2020-09-01 07:21 brlcad - - * [r77010] NEWS: - note that our bundld libpng and zlib libraries now compile with - API prefixes so as not to clash with system versions. the - libraries are also installed with a _brl suffix to avoid - accidentally matching a system library. - -2020-09-01 06:55 brlcad - - * [r77009] NEWS: - oof, document the biggest change in this release, tcl/tk is - upgraded - -2020-09-01 06:51 brlcad - - * [r77008] NEWS: - posthumously document when the mged.bat script was killed - -2020-09-01 06:23 brlcad - - * [r77007] NEWS: - improved nurbs ray tracing performance back in r74817 by - eliminating unnecessary computation. chould be minimally or not - evident in production builds, but likely evident as no warnings - were issued - -2020-09-01 06:01 brlcad - - * [r77006] src/libged/typein/typein.c: - stray n - -2020-09-01 06:00 brlcad - - * [r77005] NEWS: - document the util fixes in addition to the fb fixes for Windows. - look nominally like dpix-pix, bwshrink, halftone, pixshrink as - well as the plot and brep plot commands - -2020-09-01 05:52 brlcad - - * [r77004] NEWS: - vdeck should handle windows text files now - -2020-09-01 05:36 brlcad - - * [r77003] NEWS: - dm command is published, so documenting the change. sports a new - type subcommand (replaces set dmtype - -2020-09-01 05:35 brlcad - - * [r77002] src/tclscripts/mged/help.tcl: - document the three subcommands to dm. bad usage as synopsis is - indeterminant, and can't be resolved because all three are - different. - -2020-09-01 05:14 brlcad - - * [r77001] NEWS: - cliff removed the Display Manager menu options and associated - options for switching display managers - -2020-08-31 08:06 brlcad - - * [r76994] src/libdm/glx/dm-ogl.c, src/libdm/tk/dm-tk.c: - unwrap - -2020-08-31 08:00 brlcad - - * [r76993] src/librt/db5_scan.c: - document the claim on db5_diradd's previously unused clientdata. - if it's set to one, the object will now be flagged as inmem. - -2020-08-31 07:57 brlcad - - * [r76992] src/librt/db_lookup.c: - unclear and undocumented why db_lookup is explicitly turning off - the inmem flag, so leave a note to investigate. - -2020-08-31 05:18 brlcad - - * [r76991] NEWS: - rtweight now reports just once on the first material ID with no - density file entry, and doesn't report on those unset. - -2020-08-30 18:41 brlcad - - * [r76990] TODO: - the libs exist. conversion is ongoing and non-specific - -2020-08-30 18:40 brlcad - - * [r76989] NEWS: - adapting weights for modern times, modes for pix-bw - -2020-08-30 18:39 brlcad - - * [r76988] doc/docbook/system/man1/pix-bw.xml: - document the weights for all the options including the new - conversion modes - -2020-08-30 18:38 brlcad - - * [r76987] src/util/pix-bw.c: - use more precision to more closely match the standard for ntsc. - add additional conversion modes for hdtv, hdr, and the default - simple averaging as an explicit mode. no consideration of linear - vs non-linear. - -2020-08-27 20:56 starseeker - - * [r76981] src/qged/TODO.qt: - Note possible resources for qged console widget improvements. - -2020-08-27 15:43 starseeker - - * [r76979] src/other/CMakeLists.txt: - Looks like the Creo plugin needs our local versions of these - headers on Windows to build. See if we can override the - suppression of the 3rd party header installs in the specific - cases where it is necessary. - -2020-08-27 14:50 starseeker - - * [r76978] src/external/Creo/CMakeLists.txt: - Couple more naming adjustments for 3rd party libs - -2020-08-27 14:44 starseeker - - * [r76977] src/external/Creo/CMakeLists.txt: - fix comment - -2020-08-27 13:54 starseeker - - * [r76976] src/external/Creo/CMakeLists.txt: - Looks like not all versions use MDIR - look for it, but try to - proceed even if it isn't found. - -2020-08-27 12:25 starseeker - - * [r76975] src/external/Creo/CMakeLists.txt: - The adjustments to the src/other build logic have changed the lib - names - quick stab at updating them, but need to test. - -2020-08-27 12:17 starseeker - - * [r76974] src/libdm/tests/CMakeLists.txt, - src/libdm/tests/rendered_image.cpp: - Experiment is in swrast branch. - -2020-08-26 23:54 starseeker - - * [r76971] src/libdm/tests/CMakeLists.txt: - Whoops - disable, then commit - -2020-08-26 23:32 starseeker - - * [r76970] src/libdm/tests/CMakeLists.txt, - src/libdm/tests/rendered_image.cpp: - Experiment with hooking a cut down version of - https://github.com/zauonlok/renderer into the tcl_img demo code - playing the role of the 'dm' viewer. Using one of the demo - scenes, not any sort of CAD code, but better than random noise - for visual inspection purposes. - -2020-08-26 22:04 brlcad - - * [r76969] TODO: - created a lighting environment manually too many times. need a - studio box routine. note some other models that we be grand to - have as well. - -2020-08-26 15:55 starseeker - - * [r76967] src/libdm/tests/tcl_img.cpp: - Print an indicator of what the next DM/FB update will be. - -2020-08-26 15:13 starseeker - - * [r76966] TODO: - Spoke too soon - embedded framebuffer is still an issue. - -2020-08-26 14:48 starseeker - - * [r76965] src/mged/adc.c, src/mged/axes.c, src/mged/chgview.c, - src/mged/color_scheme.c, src/mged/dozoom.c, src/mged/grid.c, - src/mged/menu.c, src/mged/rect.c, src/mged/set.c, - src/mged/share.c: - Set the dm dirty flag when we're not using the DMP global as well - -2020-08-26 14:37 starseeker - - * [r76964] src/mged/set.c: - Need to set the dm dirty flag here. Unfortunately, it looks like - we were getting away with the X dm embedding in Tk by not having - the embedded framebuffer come up - with this enabled we're back - to crashing when we try to do an embedded X24 framebuffer in the - main MGED Tk window. - -2020-08-26 14:09 starseeker - - * [r76963] src/mged/mged.c: - Need to clear out an old GEDP before creating a new one. - -2020-08-26 13:11 d_rossberg - - * [r76962] src/librt/db5_scan.c: - don't want to duplicate db5_diradd() and db5_diradd_handler() - because of setting a single flag - used the free client_data - parameter instead - maybe there is a better posibility to detect an inmem directory - handle which I don't know - -2020-08-26 13:10 starseeker - - * [r76961] TODO: - Remove note in trunk branch as well. - -2020-08-26 12:12 starseeker - - * [r76958] misc/repoconv/github_ci_actions.yml: - Use Ninja where we can. - -2020-08-26 11:54 d_rossberg - - * [r76957] src/librt/db5_scan.c: - reverted a bit from previous commit - looks like it breaked at least the asc2g - -2020-08-26 10:54 d_rossberg - - * [r76955] include/rt/db_io.h, src/librt/db5_scan.c, - src/librt/dir.c: - functions to read the binary database data (as it is contained in - a .g file) from RAM into an in-memory database instance - the main function to use is rt_dirbuild_inmem() - very early alpha status, but can be tested - -2020-08-26 03:06 starseeker - - * [r76954] regress/licenses/licenses_check.cpp: - Fix copyright regex - -2020-08-26 01:27 starseeker - - * [r76953] src/qged/main_window.cpp, src/qged/main_window.h: - Latest qtads defines a concept of a central widget, which matches - what we need for the central display of an Archer style - interface. - -2020-08-26 01:18 starseeker - - * [r76952] src/libdm/qt/dm-qt.h, src/qged/qtads/CMakeLists.txt, - src/qged/qtads/DockAreaTabBar.cpp, - src/qged/qtads/DockAreaTitleBar.cpp, - src/qged/qtads/DockAreaWidget.cpp, - src/qged/qtads/DockAreaWidget.h, - src/qged/qtads/DockContainerWidget.cpp, - src/qged/qtads/DockContainerWidget.h, - src/qged/qtads/DockFocusController.cpp, - src/qged/qtads/DockFocusController.h, - src/qged/qtads/DockManager.cpp, src/qged/qtads/DockManager.h, - src/qged/qtads/DockOverlay.cpp, src/qged/qtads/DockSplitter.cpp, - src/qged/qtads/DockSplitter.h, src/qged/qtads/DockWidget.cpp, - src/qged/qtads/DockWidget.h, src/qged/qtads/DockWidgetTab.cpp, - src/qged/qtads/FloatingDragPreview.cpp, - src/qged/qtads/images/maximize-button-focused.svg, - src/qged/qtads/images/maximize-button.svg, - src/qged/qtads/images/restore-button-focused.svg, - src/qged/qtads/images/restore-button.svg: - Update qtads with latest upstream changes. - -2020-08-25 22:37 brlcad - - * [r76951] src/libdm/glx/dm-ogl.c: - initialize the window's background color in case it's defaulting - to nothing (i.e., transparent). seems to matter on direct visuals - with an alpha with latest X11. - -2020-08-25 20:59 starseeker - - * [r76950] NEWS: - Definitely user visible - fix transparent window selection - problem with some Linux desktop environments for DM and FB - windows. - -2020-08-25 20:58 starseeker - - * [r76949] CMakeLists.txt, src/libdm/glx/dm-ogl.c, - src/libdm/glx/if_ogl.c: - Fix transparent display and framebuffer windows. - - Some configurations of Linux desktops (including default Gnome - setups - on Ubuntu and Redhat) have started using transparency by default. - This - has resulted in an odd semi-transparent window for default ogl - display - manger and framebuffer windows. - - Fix this by adding a filter the X11 visual choosing functions - that - rejects any window reporting an alpha mask. With this filter the - selection returns opaque windows and restores the expected - rendering - appearance. - -2020-08-25 18:44 starseeker - - * [r76948] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/strnstr.txt: - Fix regress-licenses - -2020-08-25 18:39 starseeker - - * [r76947] src/tclscripts/mged/help.tcl, - src/tclscripts/mged/openw.tcl: - Remove the dmtype menu items, help entry - -2020-08-25 17:37 starseeker - - * [r76946] regress/repository/CMakeLists.txt, - regress/repository/repocheck.cpp, regress/repository/strnstr.c: - Checkpoint some work on the repocheck tool. - - brlcad.org's BSD is suddenly producing segfaults with the - repocheck - tool, which aren't reproduced on Linux. Debugging, it looks as if - the bu_mapped_file strings aren't being accepted by the C++ - string - and strstr routines. The most likely cause is non-NULL - termination - of the bu_mapped_file buffer character arrays (which aren't - guaranteed). - Using the std::string constructor we can supply buflen from the - mapped - file to explicitly manage the content length, but strstr doesn't - have - such an option. The speedup from the strstr preliminary check is - considerable, but what strnstr implementations do exist are - fairly - platform specific. Instead, took a stab at creating a fast, - portable - "bu_strnstr" by altering OpenBSD's strstr implementation to - accept a - length limit. For now, just adding in with the repocheck since - this - is experimental, but it may be that this is a concern more - generally - with strstr operations on bu_mapped_files, and if so it may - belong - in libbu proper... - -2020-08-25 16:10 starseeker - - * [r76945] regress/repository/repocheck.cpp: - When constructing the string, use the explicit buflen from the - mapped file. - -2020-08-25 15:41 starseeker - - * [r76944] src/mged/attach.c, src/tclscripts/mged/CMakeLists.txt, - src/tclscripts/mged/dmtype.tcl: - Runtime display manager type switching with dmtype never worked - all that well, and currently doesn't work at all. Move the type - reporting function (dmtype with no args reported the currently - running dm type) to a subcommand of the dm command where it - should have been in the first place (dmtype -> dm type). Remove - the runtime dm type setting - to change MGED display manager - types, alter the mged_default(dm_type) property in .mgedrc - -2020-08-25 14:27 starseeker - - * [r76942] src/mged/buttons.c, src/mged/chgmodel.c, - src/mged/chgview.c, src/mged/cmd.c, src/mged/edarb.c, - src/mged/edsol.c, src/mged/mater.c, src/mged/overlay.c, - src/mged/usepen.c: - Tag the dm as dirty when update_views is set as well. - -2020-08-25 13:43 starseeker - - * [r76941] regress/asc/asc2dsp.sh: - Quote pathname - -2020-08-25 12:51 starseeker - - * [r76939] regress/coverage/CMakeLists.txt: - List files for distclean - -2020-08-25 12:27 starseeker - - * [r76938] src/mged/dm-generic.c: - uncomment - -2020-08-25 11:57 starseeker - - * [r76937] src/mged/adc.c, src/mged/set.c: - couple more dm sets for the dirty flag - -2020-08-25 03:03 starseeker - - * [r76936] src/mged/attach.c, src/mged/cmd.c, - src/mged/dm-generic.c, src/mged/doevent.c, src/mged/dozoom.c, - src/mged/fbserv.c, src/mged/mged.c, src/mged/predictor.c: - Needs more testing, but adjusting the setting of the dirty flags - gives saner behavior with the classic X libdm backend. Still - can't embed the X dm backend in Tk with 8.6 - that seems to be a - different category of failure - but this allows the X dm to - function in classic mode. Checkpointing a state that shows - progress. - -2020-08-25 02:29 starseeker - - * [r76935] src/mged/adc.c, src/mged/attach.c, src/mged/axes.c, - src/mged/buttons.c, src/mged/chgview.c, src/mged/cmd.c, - src/mged/color_scheme.c, src/mged/doevent.c, src/mged/dozoom.c, - src/mged/edsol.c, src/mged/fbserv.c, src/mged/grid.c, - src/mged/menu.c, src/mged/mged.c, src/mged/mged_dm.h, - src/mged/rect.c, src/mged/set.c, src/mged/share.c: - Switch MGED's display set from using bu_list to using a bu_ptbl. - -2020-08-25 01:51 brlcad - - * [r76934] TODO: - It's always been a bit strange to me that one can't just put a - matrix over any object (comb or primitive). Probably a carryover - from comgeom days, but one we really should rectify in v6. - -2020-08-24 22:22 starseeker - - * [r76933] src/mged/adc.c, src/mged/axes.c, src/mged/buttons.c, - src/mged/chgview.c, src/mged/cmd.c, src/mged/color_scheme.c, - src/mged/edsol.c, src/mged/grid.c, src/mged/rect.c, - src/mged/set.c: - dmlp->m_dmp - -2020-08-24 22:21 starseeker - - * [r76932] src/mged/adc.c, src/mged/attach.c, src/mged/axes.c, - src/mged/buttons.c, src/mged/chgview.c, src/mged/cmd.c, - src/mged/color_scheme.c, src/mged/dm-generic.c, - src/mged/doevent.c, src/mged/dozoom.c, src/mged/edsol.c, - src/mged/fbserv.c, src/mged/grid.c, src/mged/menu.c, - src/mged/mged.c, src/mged/mged_dm.h, src/mged/overlay.c, - src/mged/predictor.c, src/mged/rect.c, src/mged/set.c, - src/mged/share.c, src/mged/titles.c, src/mged/usepen.c: - dml_->dm_ - -2020-08-24 22:15 starseeker - - * [r76931] src/mged/adc.c, src/mged/attach.c, src/mged/buttons.c, - src/mged/chgview.c, src/mged/cmd.c, src/mged/color_scheme.c, - src/mged/doevent.c, src/mged/dozoom.c, src/mged/edsol.c, - src/mged/fbserv.c, src/mged/menu.c, src/mged/mged.c, - src/mged/mged_dm.h, src/mged/overlay.c, src/mged/predictor.c, - src/mged/set.c, src/mged/share.c, src/mged/titles.c, - src/mged/usepen.c: - curr_dm_list -> mged_curr_dm - -2020-08-24 22:11 starseeker - - * [r76930] src/mged/adc.c, src/mged/attach.c, src/mged/axes.c, - src/mged/buttons.c, src/mged/chgview.c, src/mged/cmd.c, - src/mged/color_scheme.c, src/mged/doevent.c, src/mged/dozoom.c, - src/mged/edsol.c, src/mged/fbserv.c, src/mged/grid.c, - src/mged/menu.c, src/mged/mged.c, src/mged/mged.h, - src/mged/mged_dm.h, src/mged/rect.c, src/mged/sedit.h, - src/mged/set.c, src/mged/share.c: - Rename dm_list container to better reflect what it is - an mged - superset of struct dm - -2020-08-24 22:04 starseeker - - * [r76929] src/mged/adc.c, src/mged/attach.c, src/mged/axes.c, - src/mged/buttons.c, src/mged/chgview.c, src/mged/cmd.c, - src/mged/color_scheme.c, src/mged/dozoom.c, src/mged/edsol.c, - src/mged/fbserv.c, src/mged/grid.c, src/mged/menu.c, - src/mged/mged.c, src/mged/mged_dm.h, src/mged/rect.c, - src/mged/set.c, src/mged/share.c: - rename - -2020-08-24 22:00 starseeker - - * [r76928] src/mged/adc.c, src/mged/attach.c, src/mged/cmd.c, - src/mged/dm-generic.c, src/mged/doevent.c, src/mged/fbserv.c, - src/mged/mged.c, src/mged/mged_dm.h, src/mged/predictor.c, - src/mged/set.c: - Make it a little easier to grep for the MGED dirty flag. The - attached X dm seems to be hot spinning (refreshing continually - when nothing has changed, maxing one CPU core), need to figure - out why... - -2020-08-24 21:05 starseeker - - * [r76927] src/libdm/dm_plugins.cpp: - Note these functions will always fall back to 'nu' - -2020-08-24 20:53 starseeker - - * [r76926] src/mged/dm-generic.c: - Check mvars and vparse returns once, up front, before use - -2020-08-24 18:30 starseeker - - * [r76925] src/mged/attach.c: - System Tcl/Tk doesn't like calling Tk_DeleteGenericHandler in - classic mode with a non-Tk dm like txt. Only do Tk event handler - logic if the dm we open reports it is graphical. - -2020-08-24 18:22 starseeker - - * [r76924] src/libdm/dm-generic.c: - Protect a couple more pointer returning dm functions with magic - checks. - -2020-08-24 15:45 starseeker - - * [r76923] include/dm.h, src/libdm/dm-generic.c: - Don't actually use dm_get_vp - remove - -2020-08-24 15:40 starseeker - - * [r76922] src/libdm/dm-generic.c: - Adjust several dm functions to never return NULL. - -2020-08-24 15:30 starseeker - - * [r76921] include/bu/magic.h, include/dm/defines.h, - src/libdm/X/dm-X.c, src/libdm/dm-generic.c, - src/libdm/glx/dm-ogl.c, src/libdm/null/dm-Null.c, - src/libdm/osgl/dm-osgl.cpp, src/libdm/plot/dm-plot.c, - src/libdm/postscript/dm-ps.c, src/libdm/qt/dm-qt.cpp, - src/libdm/tk/dm-tk.c, src/libdm/txt/dm-txt.c, - src/libdm/wgl/dm-wgl.c: - Add a BU_CKMAG check to ensure vls returning function calls can - never return NULL. - -2020-08-24 15:30 starseeker - - * [r76920] src/mged/mged.c: - libdm initialization should vls init this, not the app - -2020-08-24 15:07 starseeker - - * [r76919] src/mged/cmd.c: - Few more get_pathname adjustments - -2020-08-24 13:49 starseeker - - * [r76918] src/mged/cmd.c: - Fix dm pointer validation target, check result. - -2020-08-24 13:40 brlcad - - * [r76917] src/libdm/dm_plugins.cpp: - checking null is unnecessary/redundant with BU_STR_EQUIV() as it - handles them (they're equivalent to an empty string) so there's - no risk of crashing. - -2020-08-24 13:39 starseeker - - * [r76916] src/mged/attach.c: - Variety of dm NULL checks, local vars to improve readability. - -2020-08-24 13:17 starseeker - - * [r76915] src/libtclcad/view/util.c: - Check dm_get_pathname result in to_is_viewable - -2020-08-24 13:17 starseeker - - * [r76914] src/libtclcad/tclcad_polygons.c: - More adjustments to dm_get_pathname calls - -2020-08-24 13:11 starseeker - - * [r76913] src/libtclcad/tclcad_obj.c: - Set local struct bu_vls * var to dm_get_pathname output - improve - readability, check for NULL and zero length. - -2020-08-24 12:49 starseeker - - * [r76912] src/libdm/dm_plugins.cpp, src/libtclcad/tclcad_mouse.c, - src/libtclcad/tclcad_obj.c: - Start going through Sean's list of dm functions - check their - behavior in the calling code if NULL is returned. Ways to go - yet... - -2020-08-24 05:46 brlcad - - * [r76911] NEWS, TODO, doc/docbook/system/man1/rtweight.xml: - per todo, improve rtweight docs explaining that it reports the - geometric centroid of objects - -2020-08-24 04:59 brlcad - - * [r76910] regress/weight/weight.ref, - regress/weight/weight.test2.ref, src/rt/viewweight.c: - put a header line on the rtweight density table output. - -2020-08-24 03:42 brlcad - - * [r76909] src/rt/viewarea.c: - explain what set_factor was doing, had wrong comment, and renamed - for future clarity. - -2020-08-23 17:48 starseeker - - * [r76908] NEWS, doc/docbook/system/man1/remrt.xml, - src/remrt/remrt.c: - Report the TCP port, which is what the user is most likely to - actually need when setting up a remrt run. - -2020-08-23 16:44 brlcad - - * [r76907] src/libdm/X/dm-X.c, src/libdm/glx/dm-ogl.c, - src/libdm/include/calltable.h, src/libdm/null/dm-Null.c, - src/libdm/osgl/dm-osgl.cpp, src/libdm/plot/dm-plot.c, - src/libdm/postscript/dm-ps.c, src/libdm/qt/dm-qt.cpp, - src/libdm/tk/dm-tk.c, src/libdm/txt/dm-txt.c, - src/libdm/wgl/dm-wgl.c: - consolidate the embedded bu_vls strings to encourage - initializing/releasing together. - -2020-08-23 16:18 brlcad - - * [r76906] src/libdm/tests/dm_test.c: - protect against null dereferencing - -2020-08-23 16:15 brlcad - - * [r76905] src/libdm/dm-generic.c: - should manually initialize all embedded structs on creation, - particularly vls so the magic is set correctly - -2020-08-23 16:13 brlcad - - * [r76904] src/mged/edsol.c, src/mged/mged.c, src/mged/mged_dm.h: - eliminate the preprocessor indirection, check for null - dereferencing - -2020-08-23 16:12 brlcad - - * [r76903] src/libtclcad/tclcad_obj.c, src/libtclcad/view/util.c: - make sure we're not dereferencing null - -2020-08-23 16:10 brlcad - - * [r76902] src/libdm/dm_plugins.cpp: - ws consistency cleanup - -2020-08-23 16:09 brlcad - - * [r76901] src/libdm/dm_plugins.cpp: - simplify and make sure we're not printing a null pointer. seems - unlikely logic is correctly / gracefully handling there being no - dm. - -2020-08-23 13:35 brlcad - - * [r76900] src/libanalyze/density.cpp: - trigger an anything greater than our capacity for safety, not - just the full value. - -2020-08-23 05:50 brlcad - - * [r76899] src/remrt/rtsrv.c: - init more, remove some continuations. - -2020-08-23 03:49 brlcad - - * [r76898] BUGS: - fbclear -c appears to hang indefinitely. don't know when it - broke. - -2020-08-23 02:12 starseeker - - * [r76897] doc/docbook/system/man1/remrt.xml: - Attempt to add a start-to-finish example of a Hellow World remrt - usage. - -2020-08-23 00:42 starseeker - - * [r76896] NEWS: - Note support for help options added to g2asc and asc2dsp - -2020-08-22 23:49 starseeker - - * [r76895] src/libdm/if_stack.c: - Check implementation, not wrapping pointer - -2020-08-22 22:23 starseeker - - * [r76894] src/libdm/dm_init.cpp, src/libdm/dm_plugins.cpp: - Don't special case in fb_open, just add the built-in fb - interfaces to the map. - -2020-08-22 16:17 starseeker - - * [r76893] misc/tools/debug2c/debug2c.cxx: - Handle help options in debug2c so it won't write spurious -? file - in usage.sh execution. - -2020-08-22 16:14 starseeker - - * [r76892] regress/usage.sh: - IIF we're doing one process at a time, check for -? files - -2020-08-22 16:03 starseeker - - * [r76891] src/conv/asc/asc2dsp.c, src/conv/asc/g2asc.c: - Spotted a couple of programs in usage.sh output that are treating - '-h' and '-?' as filenames and creating a '-?' ouput file. Add - basic option handling so they interpret -h and -? as help - requests. - -2020-08-22 15:53 starseeker - - * [r76890] src/libbu/opt.c: - The bare '-' character may be used to denote arguments for - programs (for example, to use stdin or stdout in lieu of a file) - - update bu_opt to recognize that the isolated '-' char isn't an - option. (Note - need to think about whether the "--" string is in - the same category... probably... - -2020-08-22 15:31 starseeker - - * [r76889] regress/asc/CMakeLists.txt, regress/asc/asc2dsp.sh: - The 'old' test doesn't run - input file reports invalid - characters - but the new one does run. Rather than completely - turn off the test, run the conversion that does work. - -2020-08-22 14:40 starseeker - - * [r76888] src/sig/dauto.c: - This is the source of the bu_malloc(0) report and dauto crash log - in the usage.sh run. Need to validate the numerical conversion - before trying to malloc memory. Still not sure why I was seeing - intermittent failure to print the usage message, but so far can't - reproduce that failure after fixing this. - -2020-08-22 06:22 brlcad - - * [r76887] regress/comgeom/comgeom.sh: - still could be broken/wrong. need to simplly use the variable. - -2020-08-22 06:15 brlcad - - * [r76886] sh/cmp.sh: - set mged commands to a variable so they can be automatically - found - -2020-08-22 06:06 brlcad - - * [r76885] src/fb/fbstretch.c, src/sig/dauto.c: - revert c76872. bu_exit() is not the problem. bug masking is a - straight up antipattern. - -2020-08-22 05:54 brlcad - - * [r76884] src/sig/dauto.c: - unable to reproduce, bu_exit() is working as intended on mac. - -2020-08-22 05:19 brlcad - - * [r76883] src/libbu/bomb.c: - it's correct to include setjmp.h because the implementation - directly calls longjmp(), even if headers include it for other - reasons - -2020-08-22 04:43 brlcad - - * [r76882] CHANGES: - document removal of facetall.sh - -2020-08-22 04:25 brlcad - - * [r76881] NEWS: - reword for clarity (Remove the old facetall.sh script - MGED - facetize command should now be a superset of this functionality.) - -2020-08-21 23:50 starseeker - - * [r76880] src/libtclcad/tclcad_init.c: - Cleanup, provide Tclcad_Init for .so file loading - -2020-08-21 22:35 starseeker - - * [r76879] src/libtclcad/tclcad_init.c, src/rtwizard/main.c: - tclcad_init is the call to use. Also not directly initing Itcl - from rtwizard. - -2020-08-21 22:33 starseeker - - * [r76878] src/libdm/dm_plugins.cpp: - We need to do better than exact string lookup - replicate the old - _if_list[i]->if_name bu_strncmp check in the plugin test. Fixes - rtwizard preview and render. - -2020-08-21 22:18 starseeker - - * [r76877] src/tclscripts/rtwizard/rtwizard: - No longer need to do this. - -2020-08-21 20:45 starseeker - - * [r76876] NEWS, src/librt/primitives/vol/vol.c: - Sumagna Das reported that drawing a VOL primitive with missing - data file was crashing MGED. Plotting routine wasn't validating - the map in vip before trying to access it. Check first, and - simply return if no map is present (nothing to draw.) - -2020-08-21 20:27 starseeker - - * [r76875] regress/CMakeLists.txt, regress/coverage, - regress/coverage/CMakeLists.txt, regress/coverage/covgcheck.cpp, - regress/coverage/regress-coverage.cmake.in: - Checkpoint work on logic to read through the regression tests and - spot the execution of programs. Patterns undoubtedly need - improvement, but getting semi-sane results commiting with the - regression test itself commented out. - -2020-08-21 16:50 starseeker - - * [r76874] CMakeLists.txt, misc/CMake/BRLCAD_Targets.cmake: - Have the build system report out the BRLCAD_ADDEXEC programs that - aren't test programs or otherwise excluded from installation. - These are the programs of primary interest for testing. - -2020-08-21 16:02 starseeker - - * [r76873] NEWS, sh/CMakeLists.txt, sh/facetall.sh: - Remove the old facetall.sh script - MGED facetize command should - now be a superset of this functionality. - -2020-08-21 15:43 starseeker - - * [r76872] src/fb/fbstretch.c, src/sig/dauto.c: - Still can't determine why bu_exit is an issue in these cases - (only commonality seems to be bu_exit called right after isatty - - not sure why that would matter...) but bu_exit isn't really - necessary to print the help msgs. Just bu_log and return. - usage.sh can complete its run without throwing bombs now on - linux, although one or more programs are producing a '-?' file - rather than intepreting ? as a help option. - -2020-08-21 15:37 starseeker - - * [r76871] src/libbn/sphmap.c: - Add some sanity checking for the sphmap routines called by - pix-spm. - -2020-08-21 15:20 starseeker - - * [r76870] src/libbu/bomb.c: - No, that doesn't do it either. Failure doesn't seem to be 100% - reliable - usage.sh can trigger it, but testing in isoluation - only produces occasional failures. Almost as if some global state - is involved... - -2020-08-21 15:09 starseeker - - * [r76869] regress/usage.sh, src/libbu/bomb.c, src/sig/dauto.c: - Ah! There we go. Adding setjmp.h to bomb.c's system headers - works. Should already have been coming in from bu/parallel.h - though... - -2020-08-21 15:05 starseeker - - * [r76868] src/sig/dauto.c: - Including bu/parallel.h gets bu_exit behaving again, but not - clear why. - -2020-08-21 14:55 starseeker - - * [r76867] src/sig/dauto.c: - bu_exit doesn't seem to succeed here - BU_SETJMP is set somehow, - and bu_bomb is called by bu_exit. Just log the message and - return, until it's clearer what's going on. - -2020-08-21 14:27 starseeker - - * [r76866] src/libdm/dm_plugins.cpp: - rtwizard check caught it - /dev/mem and /dev/stack interfaces are - built in, not loaded as plugins - check accordingly. - -2020-08-21 14:09 starseeker - - * [r76865] regress/solids/solids.sh: - scrub unnecessary logging lines from solids.sh - -2020-08-21 14:02 starseeker - - * [r76864] regress/comgeom/comgeom.sh: - Fix logfile name being grepped by comgeom regression test for - errors. - -2020-08-21 12:30 starseeker - - * [r76861] CMakeLists.txt, src/adrt/CMakeLists.txt, - src/archer/CMakeLists.txt, src/art/CMakeLists.txt, - src/burst/CMakeLists.txt, src/burst/old/CMakeLists.txt, - src/fb/CMakeLists.txt, src/fbserv/CMakeLists.txt, - src/libdm/CMakeLists.txt, src/libdm/X/CMakeLists.txt, - src/libdm/glx/CMakeLists.txt, src/libdm/osgl/CMakeLists.txt, - src/libdm/plot/CMakeLists.txt, - src/libdm/postscript/CMakeLists.txt, src/libdm/qt/CMakeLists.txt, - src/libdm/tk/CMakeLists.txt, src/libdm/txt/CMakeLists.txt, - src/libdm/wgl/CMakeLists.txt, src/libged/CMakeLists.txt, - src/mged/CMakeLists.txt, src/remrt/CMakeLists.txt, - src/rt/CMakeLists.txt, src/rtwizard/CMakeLists.txt, - src/sig/CMakeLists.txt, src/util/CMakeLists.txt: - Make a couple of build system adjustments (set target folders, - mark as advanced). Major change is to do for libdm what we did - for libged and make a single target for apps to use as a - dependency lister, rather than calling out individual backends - - that's not robust to changes in backend target names and would be - fragile in the long run. - -2020-08-19 14:54 starseeker - - * [r76849] src/libbu/process.c: - Stash a note - not sure where the number 20 came from here... - -2020-08-19 14:18 starseeker - - * [r76848] src/mged/mged.c: - Sean reports negative experience with Tcl_Sleep - not clear how - much benefit it provides here, so remove it until there's a clear - need. - -2020-08-19 13:39 starseeker - - * [r76847] src/libbu/process.c, src/mged/mged.c: - Valgrind pegged which fd was getting leaked. If we close this, - also shouldn't process Tcl events in cmdline mode after the - commands finish. - -2020-08-19 08:21 brlcad - - * [r76846] src/rt/viewweight.c: - more thread-sane, print as one block - -2020-08-19 08:18 brlcad - - * [r76845] src/rt/viewweight.c: - track and report on the first few IDs that don't have a density - defined, still silently ignoring the rest. update the message as - being a warning instead of advisotry. don't report on objects - without an ID. - -2020-08-19 02:06 starseeker - - * [r76844] src/librt/test_root3-subd.cpp: - Dust off the root3 subdivision test program. - -2020-08-19 01:44 starseeker - - * [r76843] include/bg/tri_pt.h: - Fix comment - -2020-08-19 01:36 starseeker - - * [r76842] include/bg/lseg.h, src/libbg/lseg_lseg.c, - src/libbg/lseg_pt.c, src/libbg/tests/lseg_lseg.c, - src/libbg/tests/lseg_pt.c, src/libbrep/opennurbs_ext.cpp, - src/libged/snap.c: - Rename to match the convention used by related functions in libbn - (which need to migrate to libbg) - -2020-08-19 01:24 starseeker - - * [r76841] CHANGES: - Experience with CDT proved it is better to implement convex hull - functions in such a way that the decision of whether to allocate - new arrays for vertices is left to the caller. Will need to - change function signatures, and provide separatew utility - functions that package up that bookkeeping. - -2020-08-19 01:05 starseeker - - * [r76840] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/nurbs_fit.txt, src/libbrep/CMakeLists.txt, - src/libbrep/opennurbs_fit.cpp, src/libbrep/opennurbs_fit.h, - src/libbrep/surface_tree_queue_tests.patch: - Remove a few more old, unused files - -2020-08-19 00:59 starseeker - - * [r76839] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/point_in_polyhedron.txt, include/bg/trimesh.h, - include/brep/CMakeLists.txt, include/brep/cdt2.h, - src/libbg/CMakeLists.txt, src/libbg/tests/CMakeLists.txt, - src/libbg/tests/trimesh_pt_in.c, src/libbg/trimesh_pt_in.c, - src/libbrep/CMakeLists.txt, src/libbrep/cdt/omesh.cpp, - src/libbrep/cdt/overt.cpp, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp, src/libbrep/cdt/tri_isect.cpp, - src/libbrep/cdt/util.cpp, src/libbrep/cdt2: - Strip out disable/incomplete code from the CDT implementation. - VCS has it if an opportunity to revisit it appears. - -2020-08-19 00:37 starseeker - - * [r76838] src/libbg/tests/CMakeLists.txt: - Arrrgh. Looks like I recorded the wrong triangle - probably - followed the ray backwards instead of forwards, from the looks of - things. Not a useful test, will have to track down another - example. - -2020-08-18 20:07 starseeker - - * [r76834] include/analyze/pnts.h, src/libanalyze/CMakeLists.txt, - src/libanalyze/pnt_inside.c, src/libanalyze/polygonizer.c, - src/libged/CMakeLists.txt, src/libged/cg, - src/libged/pnts/pnts.cpp, src/libged/pnts_util.c, - src/libged/pnts_util.h, src/libged/tests/CMakeLists.txt, - src/libged/tests/cg_tests.g: - Back out the exposure of the point inside/outside test - needs - more design thought. - -2020-08-18 16:26 starseeker - - * [r76833] src/libged/tests/CMakeLists.txt, - src/libged/tests/cg_tests.g: - Add a test .g file for the cg pnts operation - this has three - points on or inside the sphere and three outside it. Not sure yet - if we're ready to actually wire up a test. - -2020-08-18 16:03 brlcad - - * [r76832] src/libged/which/which.cpp: - back_inserter needs iterator.h - -2020-08-18 15:58 starseeker - - * [r76831] src/libged/pnts/pnts.cpp: - Remove the 'inside' subcommand from pnts - -2020-08-18 15:57 starseeker - - * [r76830] src/libged/cg/CMakeLists.txt, src/libged/cg/cg.cpp, - src/libged/cg/eval_pnts.cpp, src/libged/cg/ged_cg.h: - Add the point inside/outside test to cg - - This supports two operations - intersection and subtraction - - between - a point cloud on the left and a volumetric object on the right. - It - will find the subset of the points in the left hand object that - are - either inside and on (i.e. intersecting) or outside the test - volume. - Command form is: - - cg eval "pnts.s + sph.s" inside.pnts - - cg eval "pnts.s - sph.s" outside.pnts - -2020-08-18 14:43 starseeker - - * [r76829] src/libged/CMakeLists.txt, src/libged/cg, - src/libged/cg/CMakeLists.txt, src/libged/cg/cg.cpp: - Stub in a cg LIBGED command - no functionality yet, just a basic - command logic framework. - -2020-08-18 14:13 starseeker - - * [r76828] src/libged/brep/brep.cpp: - C++ file, not C file - fix footer - -2020-08-18 13:16 starseeker - - * [r76827] src/rt/viewweight.c: - Very simple cap on the number of times this message is printed. - bu_logging from the hit callback is generally not a great idea to - begin with, since you'll have lots of threads simultaneously - hitting bu_log most of the time... even if that's not an issue - for the application it's fairly hard to interpret. Better would - be to store any information we want to report about this issue - per-thread and then summarize it at the dispatcher level... - -2020-08-18 12:21 starseeker - - * [r76826] src/mged/mged.c: - Throttle the event checking a bit to try and avoid an all-out hot - spin waiting for output. - -2020-08-18 11:56 starseeker - - * [r76825] src/mged/mged.c: - When we're in command execution mode, clear out all the Tcl - events (if any) from subprocesses *before* we exit, in order to - print their output. - -2020-08-18 11:29 starseeker - - * [r76824] src/libged/ged_util.c: - STDOUT, not STDERR - already have a STDERR handler - -2020-08-18 11:07 starseeker - - * [r76823] src/libged/exec_mapping.cpp, - src/libged/tests/plugins.cpp: - Rather than bu_log at the library level, let the calling code - decide what to do about validating argv[0] with the information - returned by the GED_UNKNOWN flag and argv[0] value itself. - -2020-08-18 10:57 starseeker - - * [r76822] src/libged/exec_mapping.cpp, - src/libged/tests/plugins.cpp: - Rather than fatally aborting when we find a command mismatch on a - named ged function call, warn and override with the "root" - function name. This should work in every case the command would - originally have worked - the only failure would be if there is a - command that the plugin is supposed to be providing that didn't - get set up, which would be a legitimate bug on libged's end. - -2020-08-18 02:28 starseeker - - * [r76821] src/libged/ged_util.c: - Listen for both stdout and stderr output from the rt tools - this - gets the summary in MGED GUI mode, but we still don't get - anything at all in classic mode. Not sure why yet. - tclcad_create_io_handler is being called, but - Tcl_CreateFileHandler is never triggered so - _ged_rt_output_handler isn't called. Apparently this was also - true in 72189, as the output is printed without the callback ever - being triggered there as well... - -2020-08-17 17:47 starseeker - - * [r76820] misc/repoconv/github_ci_actions.yml: - Didn't mean to delete that comment - -2020-08-17 17:34 starseeker - - * [r76819] misc/repoconv/github_ci_actions.yml: - Not ready for Ninja yet, go with just a make all/check rather - than distcheck - -2020-08-17 15:19 starseeker - - * [r76818] include/analyze/pnts.h, src/libanalyze/pnt_inside.c, - src/libanalyze/polygonizer.c, src/libged/pnts/pnts.cpp, - src/libged/pnts_util.c, src/libged/pnts_util.h: - Expose point inside/outside testing using the raytracer via the - pnts command. Not documented yet, needs more testing. - -2020-08-17 13:08 starseeker - - * [r76817] include/analyze/pnts.h, src/libanalyze/CMakeLists.txt, - src/libanalyze/pnt_inside.c, src/libanalyze/polygonizer.c: - Extract the inside/outside pnt test with the raytracer created - for the polygonizer. - -2020-08-17 12:50 starseeker - - * [r76816] include/bu/magic.h: - revert r76808 - github runner didn't like that approach either... - -2020-08-17 03:43 starseeker - - * [r76815] src/other/CMakeLists.txt, src/other/gdal.dist, - src/other/gdal/CMakeLists.txt, src/other/gdal/alg/CMakeLists.txt, - src/other/gdal/alg/gdalpansharpen.cpp, - src/other/gdal/apps/CMakeLists.txt, - src/other/gdal/frmts/CMakeLists.txt, - src/other/gdal/frmts/EnvisatFile.c, - src/other/gdal/frmts/EnvisatFile.h, - src/other/gdal/frmts/IdrisiDataset.cpp, - src/other/gdal/frmts/IngrTypes.cpp, - src/other/gdal/frmts/IngrTypes.h, - src/other/gdal/frmts/IntergraphBand.cpp, - src/other/gdal/frmts/IntergraphBand.h, - src/other/gdal/frmts/IntergraphDataset.cpp, - src/other/gdal/frmts/IntergraphDataset.h, - src/other/gdal/frmts/JpegHelper.cpp, - src/other/gdal/frmts/JpegHelper.h, src/other/gdal/frmts/README, - src/other/gdal/frmts/TODO_Projections.txt, - src/other/gdal/frmts/aaigrid, - src/other/gdal/frmts/aaigrid/CMakeLists.txt, - src/other/gdal/frmts/aaigrid/aaigriddataset.cpp, - src/other/gdal/frmts/aaigrid/aaigriddataset.h, - src/other/gdal/frmts/aaigriddataset.cpp, - src/other/gdal/frmts/aaigriddataset.h, - src/other/gdal/frmts/ace2dataset.cpp, src/other/gdal/frmts/adrg, - src/other/gdal/frmts/adrg/CMakeLists.txt, - src/other/gdal/frmts/adrg/adrgdataset.cpp, - src/other/gdal/frmts/adrg/srpdataset.cpp, - src/other/gdal/frmts/adrgdataset.cpp, - src/other/gdal/frmts/adsrange.cpp, - src/other/gdal/frmts/adsrange.hpp, - src/other/gdal/frmts/aigccitt.c, - src/other/gdal/frmts/aigdataset.cpp, - src/other/gdal/frmts/aigopen.c, src/other/gdal/frmts/aigrid, - src/other/gdal/frmts/aigrid.h, - src/other/gdal/frmts/aigrid/CMakeLists.txt, - src/other/gdal/frmts/aigrid/aigccitt.c, - src/other/gdal/frmts/aigrid/aigdataset.cpp, - src/other/gdal/frmts/aigrid/aigopen.c, - src/other/gdal/frmts/aigrid/aigrid.h, - src/other/gdal/frmts/aigrid/gridlib.c, - src/other/gdal/frmts/airsar, - src/other/gdal/frmts/airsar/CMakeLists.txt, - src/other/gdal/frmts/airsar/airsardataset.cpp, - src/other/gdal/frmts/airsardataset.cpp, src/other/gdal/frmts/arg, - src/other/gdal/frmts/arg/CMakeLists.txt, - src/other/gdal/frmts/arg/argdataset.cpp, - src/other/gdal/frmts/argdataset.cpp, - src/other/gdal/frmts/atlsci_spheroid.cpp, - src/other/gdal/frmts/atlsci_spheroid.h, src/other/gdal/frmts/blx, - src/other/gdal/frmts/blx.c, src/other/gdal/frmts/blx.h, - src/other/gdal/frmts/blx/CMakeLists.txt, - src/other/gdal/frmts/blx/blx.c, src/other/gdal/frmts/blx/blx.h, - src/other/gdal/frmts/blx/blxdataset.cpp, - src/other/gdal/frmts/blxdataset.cpp, src/other/gdal/frmts/bmp, - src/other/gdal/frmts/bmp/CMakeLists.txt, - src/other/gdal/frmts/bmp/bmpdataset.cpp, - src/other/gdal/frmts/bmpdataset.cpp, src/other/gdal/frmts/bpg, - src/other/gdal/frmts/bpg/bpgdataset.cpp, - src/other/gdal/frmts/bpgdataset.cpp, - src/other/gdal/frmts/btdataset.cpp, src/other/gdal/frmts/cals, - src/other/gdal/frmts/cals/CMakeLists.txt, - src/other/gdal/frmts/cals/calsdataset.cpp, - src/other/gdal/frmts/calsdataset.cpp, src/other/gdal/frmts/ceos, - src/other/gdal/frmts/ceos.c, src/other/gdal/frmts/ceos.h, - src/other/gdal/frmts/ceos/CMakeLists.txt, - src/other/gdal/frmts/ceos/ceosdataset.cpp, - src/other/gdal/frmts/ceos/ceosopen.c, - src/other/gdal/frmts/ceos/ceosopen.h, src/other/gdal/frmts/ceos2, - src/other/gdal/frmts/ceos2/CMakeLists.txt, - src/other/gdal/frmts/ceos2/ceos.c, - src/other/gdal/frmts/ceos2/ceos.h, - src/other/gdal/frmts/ceos2/ceosrecipe.c, - src/other/gdal/frmts/ceos2/ceossar.c, - src/other/gdal/frmts/ceos2/link.c, - src/other/gdal/frmts/ceos2/sar_ceosdataset.cpp, - src/other/gdal/frmts/ceosdataset.cpp, - src/other/gdal/frmts/ceosopen.c, src/other/gdal/frmts/ceosopen.h, - src/other/gdal/frmts/ceosrecipe.c, - src/other/gdal/frmts/ceossar.c, src/other/gdal/frmts/coasp, - src/other/gdal/frmts/coasp/CMakeLists.txt, - src/other/gdal/frmts/coasp/coasp_dataset.cpp, - src/other/gdal/frmts/coasp_dataset.cpp, - src/other/gdal/frmts/cosar, - src/other/gdal/frmts/cosar/CMakeLists.txt, - src/other/gdal/frmts/cosar/cosar_dataset.cpp, - src/other/gdal/frmts/cosar_dataset.cpp, - src/other/gdal/frmts/cpgdataset.cpp, - src/other/gdal/frmts/ctable2dataset.cpp, - src/other/gdal/frmts/ctg, - src/other/gdal/frmts/ctg/CMakeLists.txt, - src/other/gdal/frmts/ctg/ctgdataset.cpp, - src/other/gdal/frmts/ctgdataset.cpp, - src/other/gdal/frmts/ddffield.cpp, - src/other/gdal/frmts/ddffielddefn.cpp, - src/other/gdal/frmts/ddfmodule.cpp, - src/other/gdal/frmts/ddfrecord.cpp, - src/other/gdal/frmts/ddfsubfielddefn.cpp, - src/other/gdal/frmts/ddfutils.cpp, src/other/gdal/frmts/derived, - src/other/gdal/frmts/derived/CMakeLists.txt, - src/other/gdal/frmts/derived/deriveddataset.cpp, - src/other/gdal/frmts/derived/derivedlist.c, - src/other/gdal/frmts/derived/derivedlist.h, - src/other/gdal/frmts/deriveddataset.cpp, - src/other/gdal/frmts/derivedlist.c, - src/other/gdal/frmts/derivedlist.h, src/other/gdal/frmts/dimap, - src/other/gdal/frmts/dimap/CMakeLists.txt, - src/other/gdal/frmts/dimap/dimapdataset.cpp, - src/other/gdal/frmts/dimapdataset.cpp, - src/other/gdal/frmts/dipxdataset.cpp, - src/other/gdal/frmts/doq1dataset.cpp, - src/other/gdal/frmts/doq2dataset.cpp, src/other/gdal/frmts/dted, - src/other/gdal/frmts/dted/CMakeLists.txt, - src/other/gdal/frmts/dted/dted_api.c, - src/other/gdal/frmts/dted/dted_api.h, - src/other/gdal/frmts/dted/dted_create.c, - src/other/gdal/frmts/dted/dted_ptstream.c, - src/other/gdal/frmts/dted/dteddataset.cpp, - src/other/gdal/frmts/dted_api.c, src/other/gdal/frmts/dted_api.h, - src/other/gdal/frmts/dted_create.c, - src/other/gdal/frmts/dted_ptstream.c, - src/other/gdal/frmts/dteddataset.cpp, - src/other/gdal/frmts/e00compr.h, src/other/gdal/frmts/e00grid, - src/other/gdal/frmts/e00grid/CMakeLists.txt, - src/other/gdal/frmts/e00grid/e00compr.h, - src/other/gdal/frmts/e00grid/e00griddataset.cpp, - src/other/gdal/frmts/e00grid/e00read.c, - src/other/gdal/frmts/e00griddataset.cpp, - src/other/gdal/frmts/e00read.c, - src/other/gdal/frmts/ecrgtocdataset.cpp, - src/other/gdal/frmts/ehdrdataset.cpp, - src/other/gdal/frmts/ehdrdataset.h, - src/other/gdal/frmts/eirdataset.cpp, src/other/gdal/frmts/elas, - src/other/gdal/frmts/elas/CMakeLists.txt, - src/other/gdal/frmts/elas/elasdataset.cpp, - src/other/gdal/frmts/elasdataset.cpp, - src/other/gdal/frmts/envidataset.cpp, - src/other/gdal/frmts/envidataset.h, src/other/gdal/frmts/envisat, - src/other/gdal/frmts/envisat/CMakeLists.txt, - src/other/gdal/frmts/envisat/EnvisatFile.c, - src/other/gdal/frmts/envisat/EnvisatFile.h, - src/other/gdal/frmts/envisat/adsrange.cpp, - src/other/gdal/frmts/envisat/adsrange.hpp, - src/other/gdal/frmts/envisat/envisatdataset.cpp, - src/other/gdal/frmts/envisat/records.c, - src/other/gdal/frmts/envisat/records.h, - src/other/gdal/frmts/envisat/timedelta.hpp, - src/other/gdal/frmts/envisat/unwrapgcps.cpp, - src/other/gdal/frmts/envisatdataset.cpp, - src/other/gdal/frmts/ers, - src/other/gdal/frmts/ers/CMakeLists.txt, - src/other/gdal/frmts/ers/ersdataset.cpp, - src/other/gdal/frmts/ers/ershdrnode.cpp, - src/other/gdal/frmts/ers/ershdrnode.h, - src/other/gdal/frmts/ersdataset.cpp, - src/other/gdal/frmts/ershdrnode.cpp, - src/other/gdal/frmts/ershdrnode.h, - src/other/gdal/frmts/fastdataset.cpp, src/other/gdal/frmts/fit, - src/other/gdal/frmts/fit.cpp, src/other/gdal/frmts/fit.h, - src/other/gdal/frmts/fit/CMakeLists.txt, - src/other/gdal/frmts/fit/fit.cpp, src/other/gdal/frmts/fit/fit.h, - src/other/gdal/frmts/fit/fitdataset.cpp, - src/other/gdal/frmts/fit/gstEndian.h, - src/other/gdal/frmts/fit/gstTypes.h, - src/other/gdal/frmts/fitdataset.cpp, - src/other/gdal/frmts/fujibasdataset.cpp, - src/other/gdal/frmts/gdal_vrt.h, - src/other/gdal/frmts/genbindataset.cpp, - src/other/gdal/frmts/geotiff.cpp, src/other/gdal/frmts/gff, - src/other/gdal/frmts/gff/CMakeLists.txt, - src/other/gdal/frmts/gff/gff_dataset.cpp, - src/other/gdal/frmts/gff_dataset.cpp, - src/other/gdal/frmts/grcdataset.cpp, - src/other/gdal/frmts/grddataset.cpp, - src/other/gdal/frmts/gridlib.c, - src/other/gdal/frmts/gs7bgdataset.cpp, - src/other/gdal/frmts/gsagdataset.cpp, - src/other/gdal/frmts/gsbgdataset.cpp, - src/other/gdal/frmts/gscdataset.cpp, src/other/gdal/frmts/gsg, - src/other/gdal/frmts/gsg/CMakeLists.txt, - src/other/gdal/frmts/gsg/gs7bgdataset.cpp, - src/other/gdal/frmts/gsg/gsagdataset.cpp, - src/other/gdal/frmts/gsg/gsbgdataset.cpp, - src/other/gdal/frmts/gstEndian.h, - src/other/gdal/frmts/gstTypes.h, - src/other/gdal/frmts/gt_citation.cpp, - src/other/gdal/frmts/gt_citation.h, - src/other/gdal/frmts/gt_jpeg_copy.cpp, - src/other/gdal/frmts/gt_jpeg_copy.h, - src/other/gdal/frmts/gt_overview.cpp, - src/other/gdal/frmts/gt_overview.h, - src/other/gdal/frmts/gt_wkt_srs.cpp, - src/other/gdal/frmts/gt_wkt_srs.h, - src/other/gdal/frmts/gt_wkt_srs_for_gdal.h, - src/other/gdal/frmts/gt_wkt_srs_priv.h, - src/other/gdal/frmts/gtiff, src/other/gdal/frmts/gtiff.h, - src/other/gdal/frmts/gtiff/CMakeLists.txt, - src/other/gdal/frmts/gtiff/geotiff.cpp, - src/other/gdal/frmts/gtiff/gt_citation.cpp, - src/other/gdal/frmts/gtiff/gt_citation.h, - src/other/gdal/frmts/gtiff/gt_jpeg_copy.cpp, - src/other/gdal/frmts/gtiff/gt_jpeg_copy.h, - src/other/gdal/frmts/gtiff/gt_overview.cpp, - src/other/gdal/frmts/gtiff/gt_overview.h, - src/other/gdal/frmts/gtiff/gt_wkt_srs.cpp, - src/other/gdal/frmts/gtiff/gt_wkt_srs.h, - src/other/gdal/frmts/gtiff/gt_wkt_srs_for_gdal.h, - src/other/gdal/frmts/gtiff/gt_wkt_srs_priv.h, - src/other/gdal/frmts/gtiff/gtiff.h, - src/other/gdal/frmts/gtiff/libgeotiff, - src/other/gdal/frmts/gtiff/libgeotiff/CMakeLists.txt, - src/other/gdal/frmts/gtiff/libgeotiff/cpl_serv.h, - src/other/gdal/frmts/gtiff/libgeotiff/epsg_datum.inc, - src/other/gdal/frmts/gtiff/libgeotiff/epsg_ellipse.inc, - src/other/gdal/frmts/gtiff/libgeotiff/epsg_gcs.inc, - src/other/gdal/frmts/gtiff/libgeotiff/epsg_pcs.inc, - src/other/gdal/frmts/gtiff/libgeotiff/epsg_pm.inc, - src/other/gdal/frmts/gtiff/libgeotiff/epsg_proj.inc, - src/other/gdal/frmts/gtiff/libgeotiff/epsg_units.inc, - src/other/gdal/frmts/gtiff/libgeotiff/epsg_vertcs.inc, - src/other/gdal/frmts/gtiff/libgeotiff/gdal_libgeotiff_symbol_rename.h, - src/other/gdal/frmts/gtiff/libgeotiff/geo_config.h, - src/other/gdal/frmts/gtiff/libgeotiff/geo_ctrans.inc, - src/other/gdal/frmts/gtiff/libgeotiff/geo_extra.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_free.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_get.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_keyp.h, - src/other/gdal/frmts/gtiff/libgeotiff/geo_names.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_new.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_normalize.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_normalize.h, - src/other/gdal/frmts/gtiff/libgeotiff/geo_print.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_set.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_simpletags.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_simpletags.h, - src/other/gdal/frmts/gtiff/libgeotiff/geo_tiffp.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_tiffp.h, - src/other/gdal/frmts/gtiff/libgeotiff/geo_trans.c, - src/other/gdal/frmts/gtiff/libgeotiff/geo_write.c, - src/other/gdal/frmts/gtiff/libgeotiff/geokeys.h, - src/other/gdal/frmts/gtiff/libgeotiff/geokeys.inc, - src/other/gdal/frmts/gtiff/libgeotiff/geonames.h, - src/other/gdal/frmts/gtiff/libgeotiff/geotiff.h, - src/other/gdal/frmts/gtiff/libgeotiff/geotiff_proj4.c, - src/other/gdal/frmts/gtiff/libgeotiff/geotiffio.h, - src/other/gdal/frmts/gtiff/libgeotiff/geovalues.h, - src/other/gdal/frmts/gtiff/libgeotiff/xtiff.c, - src/other/gdal/frmts/gtiff/libgeotiff/xtiffio.h, - src/other/gdal/frmts/gtiff/libtiff, - src/other/gdal/frmts/gtiff/libtiff/CMakeLists.txt, - src/other/gdal/frmts/gtiff/libtiff/gdal_libtiff_symbol_rename.h, - src/other/gdal/frmts/gtiff/libtiff/t4.h, - src/other/gdal/frmts/gtiff/libtiff/tif_aux.c, - src/other/gdal/frmts/gtiff/libtiff/tif_close.c, - src/other/gdal/frmts/gtiff/libtiff/tif_codec.c, - src/other/gdal/frmts/gtiff/libtiff/tif_color.c, - src/other/gdal/frmts/gtiff/libtiff/tif_compress.c, - src/other/gdal/frmts/gtiff/libtiff/tif_config.h, - src/other/gdal/frmts/gtiff/libtiff/tif_dir.c, - src/other/gdal/frmts/gtiff/libtiff/tif_dir.h, - src/other/gdal/frmts/gtiff/libtiff/tif_dirinfo.c, - src/other/gdal/frmts/gtiff/libtiff/tif_dirread.c, - src/other/gdal/frmts/gtiff/libtiff/tif_dirwrite.c, - src/other/gdal/frmts/gtiff/libtiff/tif_dumpmode.c, - src/other/gdal/frmts/gtiff/libtiff/tif_error.c, - src/other/gdal/frmts/gtiff/libtiff/tif_extension.c, - src/other/gdal/frmts/gtiff/libtiff/tif_fax3.c, - src/other/gdal/frmts/gtiff/libtiff/tif_fax3.h, - src/other/gdal/frmts/gtiff/libtiff/tif_fax3sm.c, - src/other/gdal/frmts/gtiff/libtiff/tif_flush.c, - src/other/gdal/frmts/gtiff/libtiff/tif_getimage.c, - src/other/gdal/frmts/gtiff/libtiff/tif_jpeg.c, - src/other/gdal/frmts/gtiff/libtiff/tif_jpeg_12.c, - src/other/gdal/frmts/gtiff/libtiff/tif_luv.c, - src/other/gdal/frmts/gtiff/libtiff/tif_lzma.c, - src/other/gdal/frmts/gtiff/libtiff/tif_lzw.c, - src/other/gdal/frmts/gtiff/libtiff/tif_next.c, - src/other/gdal/frmts/gtiff/libtiff/tif_ojpeg.c, - src/other/gdal/frmts/gtiff/libtiff/tif_open.c, - src/other/gdal/frmts/gtiff/libtiff/tif_packbits.c, - src/other/gdal/frmts/gtiff/libtiff/tif_pixarlog.c, - src/other/gdal/frmts/gtiff/libtiff/tif_predict.c, - src/other/gdal/frmts/gtiff/libtiff/tif_predict.h, - src/other/gdal/frmts/gtiff/libtiff/tif_print.c, - src/other/gdal/frmts/gtiff/libtiff/tif_read.c, - src/other/gdal/frmts/gtiff/libtiff/tif_strip.c, - src/other/gdal/frmts/gtiff/libtiff/tif_swab.c, - src/other/gdal/frmts/gtiff/libtiff/tif_thunder.c, - src/other/gdal/frmts/gtiff/libtiff/tif_tile.c, - src/other/gdal/frmts/gtiff/libtiff/tif_version.c, - src/other/gdal/frmts/gtiff/libtiff/tif_vsi.c, - src/other/gdal/frmts/gtiff/libtiff/tif_warning.c, - src/other/gdal/frmts/gtiff/libtiff/tif_write.c, - src/other/gdal/frmts/gtiff/libtiff/tif_zip.c, - src/other/gdal/frmts/gtiff/libtiff/tiff.h, - src/other/gdal/frmts/gtiff/libtiff/tiffconf.h, - src/other/gdal/frmts/gtiff/libtiff/tiffio.h, - src/other/gdal/frmts/gtiff/libtiff/tiffiop.h, - src/other/gdal/frmts/gtiff/libtiff/tiffvers.h, - src/other/gdal/frmts/gtiff/libtiff/uvcode.h, - src/other/gdal/frmts/gtiff/tif_float.c, - src/other/gdal/frmts/gtiff/tif_float.h, - src/other/gdal/frmts/gtiff/tifvsi.cpp, - src/other/gdal/frmts/gtiff/tifvsi.h, - src/other/gdal/frmts/gtxdataset.cpp, src/other/gdal/frmts/gxf, - src/other/gdal/frmts/gxf/CMakeLists.txt, - src/other/gdal/frmts/gxf/README, - src/other/gdal/frmts/gxf/gxf_ogcwkt.c, - src/other/gdal/frmts/gxf/gxf_proj4.c, - src/other/gdal/frmts/gxf/gxfdataset.cpp, - src/other/gdal/frmts/gxf/gxfopen.c, - src/other/gdal/frmts/gxf/gxfopen.h, - src/other/gdal/frmts/gxf_ogcwkt.c, - src/other/gdal/frmts/gxf_proj4.c, - src/other/gdal/frmts/gxfdataset.cpp, - src/other/gdal/frmts/gxfopen.c, src/other/gdal/frmts/gxfopen.h, - src/other/gdal/frmts/hf2, - src/other/gdal/frmts/hf2/CMakeLists.txt, - src/other/gdal/frmts/hf2/hf2dataset.cpp, - src/other/gdal/frmts/hf2dataset.cpp, src/other/gdal/frmts/hfa, - src/other/gdal/frmts/hfa.h, - src/other/gdal/frmts/hfa/CMakeLists.txt, - src/other/gdal/frmts/hfa/TODO_Projections.txt, - src/other/gdal/frmts/hfa/hfa.h, - src/other/gdal/frmts/hfa/hfa_overviews.cpp, - src/other/gdal/frmts/hfa/hfa_p.h, - src/other/gdal/frmts/hfa/hfaband.cpp, - src/other/gdal/frmts/hfa/hfacompress.cpp, - src/other/gdal/frmts/hfa/hfadataset.cpp, - src/other/gdal/frmts/hfa/hfadataset.h, - src/other/gdal/frmts/hfa/hfadictionary.cpp, - src/other/gdal/frmts/hfa/hfaentry.cpp, - src/other/gdal/frmts/hfa/hfafield.cpp, - src/other/gdal/frmts/hfa/hfaopen.cpp, - src/other/gdal/frmts/hfa/hfatype.cpp, - src/other/gdal/frmts/hfa_overviews.cpp, - src/other/gdal/frmts/hfa_p.h, src/other/gdal/frmts/hfaband.cpp, - src/other/gdal/frmts/hfacompress.cpp, - src/other/gdal/frmts/hfadataset.cpp, - src/other/gdal/frmts/hfadataset.h, - src/other/gdal/frmts/hfadictionary.cpp, - src/other/gdal/frmts/hfaentry.cpp, - src/other/gdal/frmts/hfafield.cpp, - src/other/gdal/frmts/hfaopen.cpp, - src/other/gdal/frmts/hfatype.cpp, - src/other/gdal/frmts/hkvdataset.cpp, - src/other/gdal/frmts/idadataset.cpp, src/other/gdal/frmts/idrisi, - src/other/gdal/frmts/idrisi.h, - src/other/gdal/frmts/idrisi/CMakeLists.txt, - src/other/gdal/frmts/idrisi/IdrisiDataset.cpp, - src/other/gdal/frmts/idrisi/idrisi.h, - src/other/gdal/frmts/idrisi/rdc.txt, - src/other/gdal/frmts/idrisi/rst.txt, src/other/gdal/frmts/ilwis, - src/other/gdal/frmts/ilwis/CMakeLists.txt, - src/other/gdal/frmts/ilwis/ilwiscoordinatesystem.cpp, - src/other/gdal/frmts/ilwis/ilwisdataset.cpp, - src/other/gdal/frmts/ilwis/ilwisdataset.h, - src/other/gdal/frmts/ilwiscoordinatesystem.cpp, - src/other/gdal/frmts/ilwisdataset.cpp, - src/other/gdal/frmts/ilwisdataset.h, src/other/gdal/frmts/ingr, - src/other/gdal/frmts/ingr/CMakeLists.txt, - src/other/gdal/frmts/ingr/IngrTypes.cpp, - src/other/gdal/frmts/ingr/IngrTypes.h, - src/other/gdal/frmts/ingr/IntergraphBand.cpp, - src/other/gdal/frmts/ingr/IntergraphBand.h, - src/other/gdal/frmts/ingr/IntergraphDataset.cpp, - src/other/gdal/frmts/ingr/IntergraphDataset.h, - src/other/gdal/frmts/ingr/JpegHelper.cpp, - src/other/gdal/frmts/ingr/JpegHelper.h, - src/other/gdal/frmts/iris, - src/other/gdal/frmts/iris/CMakeLists.txt, - src/other/gdal/frmts/iris/irisdataset.cpp, - src/other/gdal/frmts/irisdataset.cpp, - src/other/gdal/frmts/iscedataset.cpp, - src/other/gdal/frmts/isis2dataset.cpp, - src/other/gdal/frmts/isis3dataset.cpp, - src/other/gdal/frmts/iso8211, src/other/gdal/frmts/iso8211.h, - src/other/gdal/frmts/iso8211/CMakeLists.txt, - src/other/gdal/frmts/iso8211/ddffield.cpp, - src/other/gdal/frmts/iso8211/ddffielddefn.cpp, - src/other/gdal/frmts/iso8211/ddfmodule.cpp, - src/other/gdal/frmts/iso8211/ddfrecord.cpp, - src/other/gdal/frmts/iso8211/ddfsubfielddefn.cpp, - src/other/gdal/frmts/iso8211/ddfutils.cpp, - src/other/gdal/frmts/iso8211/iso8211.h, - src/other/gdal/frmts/jaxapalsar, - src/other/gdal/frmts/jaxapalsar/CMakeLists.txt, - src/other/gdal/frmts/jaxapalsar/jaxapalsardataset.cpp, - src/other/gdal/frmts/jaxapalsardataset.cpp, - src/other/gdal/frmts/jdem, - src/other/gdal/frmts/jdem/CMakeLists.txt, - src/other/gdal/frmts/jdem/jdemdataset.cpp, - src/other/gdal/frmts/jdemdataset.cpp, - src/other/gdal/frmts/kmlsuperoverlay, - src/other/gdal/frmts/kmlsuperoverlay/CMakeLists.txt, - src/other/gdal/frmts/kmlsuperoverlay/kmlsuperoverlaydataset.cpp, - src/other/gdal/frmts/kmlsuperoverlay/kmlsuperoverlaydataset.h, - src/other/gdal/frmts/kmlsuperoverlaydataset.cpp, - src/other/gdal/frmts/kmlsuperoverlaydataset.h, - src/other/gdal/frmts/krodataset.cpp, src/other/gdal/frmts/l1b, - src/other/gdal/frmts/l1b/CMakeLists.txt, - src/other/gdal/frmts/l1b/l1bdataset.cpp, - src/other/gdal/frmts/l1bdataset.cpp, - src/other/gdal/frmts/landataset.cpp, - src/other/gdal/frmts/lcpdataset.cpp, - src/other/gdal/frmts/leveller, - src/other/gdal/frmts/leveller/CMakeLists.txt, - src/other/gdal/frmts/leveller/levellerdataset.cpp, - src/other/gdal/frmts/levellerdataset.cpp, - src/other/gdal/frmts/libgeotiff, src/other/gdal/frmts/libtiff, - src/other/gdal/frmts/link.c, - src/other/gdal/frmts/loslasdataset.cpp, src/other/gdal/frmts/map, - src/other/gdal/frmts/map/CMakeLists.txt, - src/other/gdal/frmts/map/mapdataset.cpp, - src/other/gdal/frmts/mapdataset.cpp, src/other/gdal/frmts/mem, - src/other/gdal/frmts/mem/CMakeLists.txt, - src/other/gdal/frmts/mem/memdataset.cpp, - src/other/gdal/frmts/mem/memdataset.h, - src/other/gdal/frmts/memdataset.cpp, - src/other/gdal/frmts/memdataset.h, - src/other/gdal/frmts/mffdataset.cpp, src/other/gdal/frmts/mgrs.c, - src/other/gdal/frmts/mgrs.h, - src/other/gdal/frmts/nasakeywordhandler.cpp, - src/other/gdal/frmts/nasakeywordhandler.h, - src/other/gdal/frmts/ndfdataset.cpp, - src/other/gdal/frmts/ngsgeoid, - src/other/gdal/frmts/ngsgeoid/CMakeLists.txt, - src/other/gdal/frmts/ngsgeoid/ngsgeoiddataset.cpp, - src/other/gdal/frmts/ngsgeoiddataset.cpp, - src/other/gdal/frmts/nitf, - src/other/gdal/frmts/nitf/CMakeLists.txt, - src/other/gdal/frmts/nitf/ecrgtocdataset.cpp, - src/other/gdal/frmts/nitf/mgrs.c, - src/other/gdal/frmts/nitf/mgrs.h, - src/other/gdal/frmts/nitf/nitf_gcprpc.cpp, - src/other/gdal/frmts/nitf/nitfaridpcm.cpp, - src/other/gdal/frmts/nitf/nitfbilevel.cpp, - src/other/gdal/frmts/nitf/nitfdataset.cpp, - src/other/gdal/frmts/nitf/nitfdataset.h, - src/other/gdal/frmts/nitf/nitfdes.c, - src/other/gdal/frmts/nitf/nitffile.c, - src/other/gdal/frmts/nitf/nitfimage.c, - src/other/gdal/frmts/nitf/nitflib.h, - src/other/gdal/frmts/nitf/nitfrasterband.cpp, - src/other/gdal/frmts/nitf/nitfwritejpeg.cpp, - src/other/gdal/frmts/nitf/nitfwritejpeg_12.cpp, - src/other/gdal/frmts/nitf/rpftocdataset.cpp, - src/other/gdal/frmts/nitf/rpftocfile.cpp, - src/other/gdal/frmts/nitf/rpftoclib.h, - src/other/gdal/frmts/nitf_gcprpc.cpp, - src/other/gdal/frmts/nitfaridpcm.cpp, - src/other/gdal/frmts/nitfbilevel.cpp, - src/other/gdal/frmts/nitfdataset.cpp, - src/other/gdal/frmts/nitfdataset.h, - src/other/gdal/frmts/nitfdes.c, src/other/gdal/frmts/nitffile.c, - src/other/gdal/frmts/nitfimage.c, src/other/gdal/frmts/nitflib.h, - src/other/gdal/frmts/nitfrasterband.cpp, - src/other/gdal/frmts/nitfwritejpeg.cpp, - src/other/gdal/frmts/nitfwritejpeg_12.cpp, - src/other/gdal/frmts/northwood, - src/other/gdal/frmts/northwood.cpp, - src/other/gdal/frmts/northwood.h, - src/other/gdal/frmts/northwood/CMakeLists.txt, - src/other/gdal/frmts/northwood/grcdataset.cpp, - src/other/gdal/frmts/northwood/grddataset.cpp, - src/other/gdal/frmts/northwood/northwood.cpp, - src/other/gdal/frmts/northwood/northwood.h, - src/other/gdal/frmts/ntv2dataset.cpp, src/other/gdal/frmts/ozi, - src/other/gdal/frmts/ozi/CMakeLists.txt, - src/other/gdal/frmts/ozi/ozidataset.cpp, - src/other/gdal/frmts/ozidataset.cpp, - src/other/gdal/frmts/pauxdataset.cpp, src/other/gdal/frmts/pds, - src/other/gdal/frmts/pds/CMakeLists.txt, - src/other/gdal/frmts/pds/isis2dataset.cpp, - src/other/gdal/frmts/pds/isis3dataset.cpp, - src/other/gdal/frmts/pds/nasakeywordhandler.cpp, - src/other/gdal/frmts/pds/nasakeywordhandler.h, - src/other/gdal/frmts/pds/pdsdataset.cpp, - src/other/gdal/frmts/pds/vicardataset.cpp, - src/other/gdal/frmts/pds/vicarkeywordhandler.cpp, - src/other/gdal/frmts/pds/vicarkeywordhandler.h, - src/other/gdal/frmts/pdsdataset.cpp, - src/other/gdal/frmts/phprfdataset.cpp, - src/other/gdal/frmts/pixelfunctions.cpp, - src/other/gdal/frmts/png, - src/other/gdal/frmts/png/CMakeLists.txt, - src/other/gdal/frmts/png/pngdataset.cpp, - src/other/gdal/frmts/pngdataset.cpp, - src/other/gdal/frmts/pnmdataset.cpp, src/other/gdal/frmts/prf, - src/other/gdal/frmts/prf/CMakeLists.txt, - src/other/gdal/frmts/prf/phprfdataset.cpp, - src/other/gdal/frmts/r, src/other/gdal/frmts/r/CMakeLists.txt, - src/other/gdal/frmts/r/rcreatecopy.cpp, - src/other/gdal/frmts/r/rdataset.cpp, - src/other/gdal/frmts/r/rdataset.h, src/other/gdal/frmts/raw, - src/other/gdal/frmts/raw/CMakeLists.txt, - src/other/gdal/frmts/raw/ace2dataset.cpp, - src/other/gdal/frmts/raw/atlsci_spheroid.cpp, - src/other/gdal/frmts/raw/atlsci_spheroid.h, - src/other/gdal/frmts/raw/btdataset.cpp, - src/other/gdal/frmts/raw/cpgdataset.cpp, - src/other/gdal/frmts/raw/ctable2dataset.cpp, - src/other/gdal/frmts/raw/dipxdataset.cpp, - src/other/gdal/frmts/raw/doq1dataset.cpp, - src/other/gdal/frmts/raw/doq2dataset.cpp, - src/other/gdal/frmts/raw/ehdrdataset.cpp, - src/other/gdal/frmts/raw/ehdrdataset.h, - src/other/gdal/frmts/raw/eirdataset.cpp, - src/other/gdal/frmts/raw/envidataset.cpp, - src/other/gdal/frmts/raw/envidataset.h, - src/other/gdal/frmts/raw/fastdataset.cpp, - src/other/gdal/frmts/raw/fujibasdataset.cpp, - src/other/gdal/frmts/raw/genbindataset.cpp, - src/other/gdal/frmts/raw/gscdataset.cpp, - src/other/gdal/frmts/raw/gtxdataset.cpp, - src/other/gdal/frmts/raw/hkvdataset.cpp, - src/other/gdal/frmts/raw/idadataset.cpp, - src/other/gdal/frmts/raw/iscedataset.cpp, - src/other/gdal/frmts/raw/krodataset.cpp, - src/other/gdal/frmts/raw/landataset.cpp, - src/other/gdal/frmts/raw/lcpdataset.cpp, - src/other/gdal/frmts/raw/loslasdataset.cpp, - src/other/gdal/frmts/raw/mffdataset.cpp, - src/other/gdal/frmts/raw/ndfdataset.cpp, - src/other/gdal/frmts/raw/ntv2dataset.cpp, - src/other/gdal/frmts/raw/pauxdataset.cpp, - src/other/gdal/frmts/raw/pnmdataset.cpp, - src/other/gdal/frmts/raw/rawdataset.cpp, - src/other/gdal/frmts/raw/rawdataset.h, - src/other/gdal/frmts/raw/roipacdataset.cpp, - src/other/gdal/frmts/raw/rrasterdataset.cpp, - src/other/gdal/frmts/raw/snodasdataset.cpp, - src/other/gdal/frmts/rawdataset.cpp, - src/other/gdal/frmts/rawdataset.h, - src/other/gdal/frmts/rcreatecopy.cpp, - src/other/gdal/frmts/rdataset.cpp, - src/other/gdal/frmts/rdataset.h, src/other/gdal/frmts/rdc.txt, - src/other/gdal/frmts/readme.txt, src/other/gdal/frmts/records.c, - src/other/gdal/frmts/records.h, src/other/gdal/frmts/rik, - src/other/gdal/frmts/rik/CMakeLists.txt, - src/other/gdal/frmts/rik/rikdataset.cpp, - src/other/gdal/frmts/rikdataset.cpp, src/other/gdal/frmts/rmf, - src/other/gdal/frmts/rmf/CMakeLists.txt, - src/other/gdal/frmts/rmf/rmfdataset.cpp, - src/other/gdal/frmts/rmf/rmfdataset.h, - src/other/gdal/frmts/rmf/rmfdem.cpp, - src/other/gdal/frmts/rmf/rmflzw.cpp, - src/other/gdal/frmts/rmfdataset.cpp, - src/other/gdal/frmts/rmfdataset.h, - src/other/gdal/frmts/rmfdem.cpp, src/other/gdal/frmts/rmflzw.cpp, - src/other/gdal/frmts/roipacdataset.cpp, - src/other/gdal/frmts/rpftocdataset.cpp, - src/other/gdal/frmts/rpftocfile.cpp, - src/other/gdal/frmts/rpftoclib.h, - src/other/gdal/frmts/rrasterdataset.cpp, - src/other/gdal/frmts/rs2, - src/other/gdal/frmts/rs2/CMakeLists.txt, - src/other/gdal/frmts/rs2/rs2dataset.cpp, - src/other/gdal/frmts/rs2dataset.cpp, - src/other/gdal/frmts/rst.txt, src/other/gdal/frmts/safe, - src/other/gdal/frmts/safe/CMakeLists.txt, - src/other/gdal/frmts/safe/safedataset.cpp, - src/other/gdal/frmts/safedataset.cpp, src/other/gdal/frmts/saga, - src/other/gdal/frmts/saga/CMakeLists.txt, - src/other/gdal/frmts/saga/sagadataset.cpp, - src/other/gdal/frmts/sagadataset.cpp, - src/other/gdal/frmts/sar_ceosdataset.cpp, - src/other/gdal/frmts/sentinel2, - src/other/gdal/frmts/sentinel2/CMakeLists.txt, - src/other/gdal/frmts/sentinel2/sentinel2dataset.cpp, - src/other/gdal/frmts/sentinel2dataset.cpp, - src/other/gdal/frmts/sgi, - src/other/gdal/frmts/sgi/CMakeLists.txt, - src/other/gdal/frmts/sgi/sgidataset.cpp, - src/other/gdal/frmts/sgidataset.cpp, - src/other/gdal/frmts/snodasdataset.cpp, - src/other/gdal/frmts/srpdataset.cpp, - src/other/gdal/frmts/srtmhgt, - src/other/gdal/frmts/srtmhgt/CMakeLists.txt, - src/other/gdal/frmts/srtmhgt/srtmhgtdataset.cpp, - src/other/gdal/frmts/srtmhgtdataset.cpp, - src/other/gdal/frmts/terragen, - src/other/gdal/frmts/terragen/CMakeLists.txt, - src/other/gdal/frmts/terragen/readme.txt, - src/other/gdal/frmts/terragen/terragendataset.cpp, - src/other/gdal/frmts/terragendataset.cpp, - src/other/gdal/frmts/tif_float.c, - src/other/gdal/frmts/tif_float.h, - src/other/gdal/frmts/tifvsi.cpp, src/other/gdal/frmts/tifvsi.h, - src/other/gdal/frmts/til, - src/other/gdal/frmts/til/CMakeLists.txt, - src/other/gdal/frmts/til/tildataset.cpp, - src/other/gdal/frmts/tildataset.cpp, - src/other/gdal/frmts/timedelta.hpp, src/other/gdal/frmts/tsx, - src/other/gdal/frmts/tsx/CMakeLists.txt, - src/other/gdal/frmts/tsx/tsxdataset.cpp, - src/other/gdal/frmts/tsxdataset.cpp, - src/other/gdal/frmts/unwrapgcps.cpp, - src/other/gdal/frmts/usgsdem, - src/other/gdal/frmts/usgsdem/CMakeLists.txt, - src/other/gdal/frmts/usgsdem/usgsdem_create.cpp, - src/other/gdal/frmts/usgsdem/usgsdemdataset.cpp, - src/other/gdal/frmts/usgsdem_create.cpp, - src/other/gdal/frmts/usgsdemdataset.cpp, - src/other/gdal/frmts/vicardataset.cpp, - src/other/gdal/frmts/vicarkeywordhandler.cpp, - src/other/gdal/frmts/vicarkeywordhandler.h, - src/other/gdal/frmts/vrt, - src/other/gdal/frmts/vrt/CMakeLists.txt, - src/other/gdal/frmts/vrt/gdal_vrt.h, - src/other/gdal/frmts/vrt/pixelfunctions.cpp, - src/other/gdal/frmts/vrt/vrtdataset.cpp, - src/other/gdal/frmts/vrt/vrtdataset.h, - src/other/gdal/frmts/vrt/vrtderivedrasterband.cpp, - src/other/gdal/frmts/vrt/vrtdriver.cpp, - src/other/gdal/frmts/vrt/vrtfilters.cpp, - src/other/gdal/frmts/vrt/vrtpansharpened.cpp, - src/other/gdal/frmts/vrt/vrtrasterband.cpp, - src/other/gdal/frmts/vrt/vrtrawrasterband.cpp, - src/other/gdal/frmts/vrt/vrtsourcedrasterband.cpp, - src/other/gdal/frmts/vrt/vrtsources.cpp, - src/other/gdal/frmts/vrt/vrtwarped.cpp, - src/other/gdal/frmts/vrtdataset.cpp, - src/other/gdal/frmts/vrtdataset.h, - src/other/gdal/frmts/vrtderivedrasterband.cpp, - src/other/gdal/frmts/vrtdriver.cpp, - src/other/gdal/frmts/vrtfilters.cpp, - src/other/gdal/frmts/vrtpansharpened.cpp, - src/other/gdal/frmts/vrtrasterband.cpp, - src/other/gdal/frmts/vrtrawrasterband.cpp, - src/other/gdal/frmts/vrtsourcedrasterband.cpp, - src/other/gdal/frmts/vrtsources.cpp, - src/other/gdal/frmts/vrtwarped.cpp, src/other/gdal/frmts/xpm, - src/other/gdal/frmts/xpm/CMakeLists.txt, - src/other/gdal/frmts/xpm/xpmdataset.cpp, - src/other/gdal/frmts/xpmdataset.cpp, src/other/gdal/frmts/xyz, - src/other/gdal/frmts/xyz/CMakeLists.txt, - src/other/gdal/frmts/xyz/xyzdataset.cpp, - src/other/gdal/frmts/xyzdataset.cpp, src/other/gdal/frmts/zmap, - src/other/gdal/frmts/zmap/CMakeLists.txt, - src/other/gdal/frmts/zmap/zmapdataset.cpp, - src/other/gdal/frmts/zmapdataset.cpp, - src/other/gdal/gcore/CMakeLists.txt, - src/other/gdal/gcore/gdaldataset.cpp, - src/other/gdal/ogr/CMakeLists.txt, src/other/gdal/ogr/COPYING, - src/other/gdal/ogr/README.txt, src/other/gdal/ogr/avc.h, - src/other/gdal/ogr/avc_bin.c, src/other/gdal/ogr/avc_binwr.c, - src/other/gdal/ogr/avc_e00gen.c, - src/other/gdal/ogr/avc_e00parse.c, - src/other/gdal/ogr/avc_e00read.c, - src/other/gdal/ogr/avc_e00write.c, - src/other/gdal/ogr/avc_mbyte.c, src/other/gdal/ogr/avc_mbyte.h, - src/other/gdal/ogr/avc_misc.c, src/other/gdal/ogr/avc_rawbin.c, - src/other/gdal/ogr/dbfopen.c, - src/other/gdal/ogr/ddfrecordindex.cpp, - src/other/gdal/ogr/dgnfloat.cpp, src/other/gdal/ogr/dgnhelp.cpp, - src/other/gdal/ogr/dgnlib.h, src/other/gdal/ogr/dgnlibp.h, - src/other/gdal/ogr/dgnopen.cpp, src/other/gdal/ogr/dgnread.cpp, - src/other/gdal/ogr/dgnstroke.cpp, - src/other/gdal/ogr/dgnwrite.cpp, src/other/gdal/ogr/dist, - src/other/gdal/ogr/filegdbindex.cpp, - src/other/gdal/ogr/filegdbtable.cpp, - src/other/gdal/ogr/filegdbtable.h, - src/other/gdal/ogr/filegdbtable_priv.h, - src/other/gdal/ogr/gdaldb2rasterband.cpp, - src/other/gdal/ogr/geoconcept.c, src/other/gdal/ogr/geoconcept.h, - src/other/gdal/ogr/geoconcept_syscoord.c, - src/other/gdal/ogr/geoconcept_syscoord.h, - src/other/gdal/ogr/gml2ogrgeometry.cpp, - src/other/gdal/ogr/gtm.cpp, src/other/gdal/ogr/gtm.h, - src/other/gdal/ogr/gtmtracklayer.cpp, - src/other/gdal/ogr/gtmwaypointlayer.cpp, - src/other/gdal/ogr/intronurbs.cpp, - src/other/gdal/ogr/io_selafin.cpp, - src/other/gdal/ogr/io_selafin.h, src/other/gdal/ogr/libjson, - src/other/gdal/ogr/ll_recio.cpp, src/other/gdal/ogr/mitab.h, - src/other/gdal/ogr/mitab_bounds.cpp, - src/other/gdal/ogr/mitab_coordsys.cpp, - src/other/gdal/ogr/mitab_datfile.cpp, - src/other/gdal/ogr/mitab_feature.cpp, - src/other/gdal/ogr/mitab_feature_mif.cpp, - src/other/gdal/ogr/mitab_geometry.cpp, - src/other/gdal/ogr/mitab_geometry.h, - src/other/gdal/ogr/mitab_idfile.cpp, - src/other/gdal/ogr/mitab_imapinfofile.cpp, - src/other/gdal/ogr/mitab_indfile.cpp, - src/other/gdal/ogr/mitab_mapcoordblock.cpp, - src/other/gdal/ogr/mitab_mapfile.cpp, - src/other/gdal/ogr/mitab_mapheaderblock.cpp, - src/other/gdal/ogr/mitab_mapindexblock.cpp, - src/other/gdal/ogr/mitab_mapobjectblock.cpp, - src/other/gdal/ogr/mitab_maptoolblock.cpp, - src/other/gdal/ogr/mitab_middatafile.cpp, - src/other/gdal/ogr/mitab_miffile.cpp, - src/other/gdal/ogr/mitab_ogr_datasource.cpp, - src/other/gdal/ogr/mitab_ogr_driver.cpp, - src/other/gdal/ogr/mitab_ogr_driver.h, - src/other/gdal/ogr/mitab_priv.h, - src/other/gdal/ogr/mitab_rawbinblock.cpp, - src/other/gdal/ogr/mitab_spatialref.cpp, - src/other/gdal/ogr/mitab_tabfile.cpp, - src/other/gdal/ogr/mitab_tabseamless.cpp, - src/other/gdal/ogr/mitab_tabview.cpp, - src/other/gdal/ogr/mitab_tooldef.cpp, - src/other/gdal/ogr/mitab_utils.cpp, - src/other/gdal/ogr/mitab_utils.h, src/other/gdal/ogr/ntf.h, - src/other/gdal/ogr/ntf_codelist.cpp, - src/other/gdal/ogr/ntf_estlayers.cpp, - src/other/gdal/ogr/ntf_generic.cpp, - src/other/gdal/ogr/ntf_raster.cpp, - src/other/gdal/ogr/ntffilereader.cpp, - src/other/gdal/ogr/ntfrecord.cpp, - src/other/gdal/ogr/ntfstroke.cpp, - src/other/gdal/ogr/ogr_aeronavfaa.h, - src/other/gdal/ogr/ogr_arcgen.h, - src/other/gdal/ogr/ogr_attrind.cpp, - src/other/gdal/ogr/ogr_attrind.h, - src/other/gdal/ogr/ogr_autocad_services.cpp, - src/other/gdal/ogr/ogr_autocad_services.h, - src/other/gdal/ogr/ogr_avc.h, src/other/gdal/ogr/ogr_bna.h, - src/other/gdal/ogr/ogr_csv.h, src/other/gdal/ogr/ogr_db2.h, - src/other/gdal/ogr/ogr_dgn.h, src/other/gdal/ogr/ogr_dxf.h, - src/other/gdal/ogr/ogr_edigeo.h, - src/other/gdal/ogr/ogr_gensql.cpp, - src/other/gdal/ogr/ogr_gensql.h, - src/other/gdal/ogr/ogr_geocoding.cpp, - src/other/gdal/ogr/ogr_geojson.h, src/other/gdal/ogr/ogr_gmt.h, - src/other/gdal/ogr/ogr_gpsbabel.h, src/other/gdal/ogr/ogr_gtm.h, - src/other/gdal/ogr/ogr_htf.h, src/other/gdal/ogr/ogr_idrisi.h, - src/other/gdal/ogr/ogr_json_header.h, - src/other/gdal/ogr/ogr_mem.h, - src/other/gdal/ogr/ogr_miattrind.cpp, - src/other/gdal/ogr/ogr_openair.h, - src/other/gdal/ogr/ogr_openfilegdb.h, - src/other/gdal/ogr/ogr_pds.h, src/other/gdal/ogr/ogr_pgdump.h, - src/other/gdal/ogr/ogr_rec.h, src/other/gdal/ogr/ogr_s57.h, - src/other/gdal/ogr/ogr_segukooa.h, src/other/gdal/ogr/ogr_segy.h, - src/other/gdal/ogr/ogr_selafin.h, src/other/gdal/ogr/ogr_sua.h, - src/other/gdal/ogr/ogr_sxf.h, src/other/gdal/ogr/ogr_tiger.h, - src/other/gdal/ogr/ogr_vdv.h, src/other/gdal/ogr/ogr_vrt.h, - src/other/gdal/ogr/ogr_xplane.h, - src/other/gdal/ogr/ogr_xplane_apt_reader.cpp, - src/other/gdal/ogr/ogr_xplane_apt_reader.h, - src/other/gdal/ogr/ogr_xplane_awy_reader.cpp, - src/other/gdal/ogr/ogr_xplane_awy_reader.h, - src/other/gdal/ogr/ogr_xplane_fix_reader.cpp, - src/other/gdal/ogr/ogr_xplane_fix_reader.h, - src/other/gdal/ogr/ogr_xplane_geo_utils.cpp, - src/other/gdal/ogr/ogr_xplane_geo_utils.h, - src/other/gdal/ogr/ogr_xplane_nav_reader.cpp, - src/other/gdal/ogr/ogr_xplane_nav_reader.h, - src/other/gdal/ogr/ogr_xplane_reader.cpp, - src/other/gdal/ogr/ogr_xplane_reader.h, - src/other/gdal/ogr/ograeronavfaadatasource.cpp, - src/other/gdal/ogr/ograeronavfaadriver.cpp, - src/other/gdal/ogr/ograeronavfaalayer.cpp, - src/other/gdal/ogr/ograrcgendatasource.cpp, - src/other/gdal/ogr/ograrcgendriver.cpp, - src/other/gdal/ogr/ograrcgenlayer.cpp, - src/other/gdal/ogr/ogravcbindatasource.cpp, - src/other/gdal/ogr/ogravcbindriver.cpp, - src/other/gdal/ogr/ogravcbinlayer.cpp, - src/other/gdal/ogr/ogravcdatasource.cpp, - src/other/gdal/ogr/ogravce00datasource.cpp, - src/other/gdal/ogr/ogravce00driver.cpp, - src/other/gdal/ogr/ogravce00layer.cpp, - src/other/gdal/ogr/ogravclayer.cpp, - src/other/gdal/ogr/ogrbnadatasource.cpp, - src/other/gdal/ogr/ogrbnadriver.cpp, - src/other/gdal/ogr/ogrbnalayer.cpp, - src/other/gdal/ogr/ogrbnaparser.cpp, - src/other/gdal/ogr/ogrbnaparser.h, - src/other/gdal/ogr/ogrcsvdatasource.cpp, - src/other/gdal/ogr/ogrcsvdriver.cpp, - src/other/gdal/ogr/ogrcsvlayer.cpp, - src/other/gdal/ogr/ogrdatasource.cpp, - src/other/gdal/ogr/ogrdb2cli.cpp, - src/other/gdal/ogr/ogrdb2datasource.cpp, - src/other/gdal/ogr/ogrdb2datasourcemd.cpp, - src/other/gdal/ogr/ogrdb2driver.cpp, - src/other/gdal/ogr/ogrdb2geometryvalidator.cpp, - src/other/gdal/ogr/ogrdb2layer.cpp, - src/other/gdal/ogr/ogrdb2selectlayer.cpp, - src/other/gdal/ogr/ogrdb2tablelayer.cpp, - src/other/gdal/ogr/ogrdgndatasource.cpp, - src/other/gdal/ogr/ogrdgndriver.cpp, - src/other/gdal/ogr/ogrdgnlayer.cpp, - src/other/gdal/ogr/ogrdxf_blockmap.cpp, - src/other/gdal/ogr/ogrdxf_dimension.cpp, - src/other/gdal/ogr/ogrdxf_hatch.cpp, - src/other/gdal/ogr/ogrdxf_polyline_smooth.cpp, - src/other/gdal/ogr/ogrdxf_polyline_smooth.h, - src/other/gdal/ogr/ogrdxfblockslayer.cpp, - src/other/gdal/ogr/ogrdxfblockswriterlayer.cpp, - src/other/gdal/ogr/ogrdxfdatasource.cpp, - src/other/gdal/ogr/ogrdxfdriver.cpp, - src/other/gdal/ogr/ogrdxflayer.cpp, - src/other/gdal/ogr/ogrdxfreader.cpp, - src/other/gdal/ogr/ogrdxfwriterds.cpp, - src/other/gdal/ogr/ogrdxfwriterlayer.cpp, - src/other/gdal/ogr/ogredigeodatasource.cpp, - src/other/gdal/ogr/ogredigeodriver.cpp, - src/other/gdal/ogr/ogredigeolayer.cpp, - src/other/gdal/ogr/ogreditablelayer.cpp, - src/other/gdal/ogr/ogreditablelayer.h, - src/other/gdal/ogr/ogremulatedtransaction.cpp, - src/other/gdal/ogr/ogremulatedtransaction.h, - src/other/gdal/ogr/ogresrijsonreader.cpp, - src/other/gdal/ogr/ogrgeoconceptdatasource.cpp, - src/other/gdal/ogr/ogrgeoconceptdatasource.h, - src/other/gdal/ogr/ogrgeoconceptdriver.cpp, - src/other/gdal/ogr/ogrgeoconceptdriver.h, - src/other/gdal/ogr/ogrgeoconceptlayer.cpp, - src/other/gdal/ogr/ogrgeoconceptlayer.h, - src/other/gdal/ogr/ogrgeojsondatasource.cpp, - src/other/gdal/ogr/ogrgeojsondriver.cpp, - src/other/gdal/ogr/ogrgeojsonlayer.cpp, - src/other/gdal/ogr/ogrgeojsonreader.cpp, - src/other/gdal/ogr/ogrgeojsonreader.h, - src/other/gdal/ogr/ogrgeojsonutils.cpp, - src/other/gdal/ogr/ogrgeojsonutils.h, - src/other/gdal/ogr/ogrgeojsonwritelayer.cpp, - src/other/gdal/ogr/ogrgeojsonwriter.cpp, - src/other/gdal/ogr/ogrgeojsonwriter.h, - src/other/gdal/ogr/ogrgmtdatasource.cpp, - src/other/gdal/ogr/ogrgmtdriver.cpp, - src/other/gdal/ogr/ogrgmtlayer.cpp, - src/other/gdal/ogr/ogrgpsbabeldatasource.cpp, - src/other/gdal/ogr/ogrgpsbabeldriver.cpp, - src/other/gdal/ogr/ogrgpsbabelwritedatasource.cpp, - src/other/gdal/ogr/ogrgtmdatasource.cpp, - src/other/gdal/ogr/ogrgtmdriver.cpp, - src/other/gdal/ogr/ogrgtmlayer.cpp, - src/other/gdal/ogr/ogrhtfdatasource.cpp, - src/other/gdal/ogr/ogrhtfdriver.cpp, - src/other/gdal/ogr/ogrhtflayer.cpp, - src/other/gdal/ogr/ogridrisidatasource.cpp, - src/other/gdal/ogr/ogridrisidriver.cpp, - src/other/gdal/ogr/ogridrisilayer.cpp, - src/other/gdal/ogr/ogrlayer.cpp, - src/other/gdal/ogr/ogrlayerdecorator.cpp, - src/other/gdal/ogr/ogrlayerdecorator.h, - src/other/gdal/ogr/ogrlayerpool.cpp, - src/other/gdal/ogr/ogrlayerpool.h, - src/other/gdal/ogr/ogrmemdatasource.cpp, - src/other/gdal/ogr/ogrmemdriver.cpp, - src/other/gdal/ogr/ogrmemlayer.cpp, - src/other/gdal/ogr/ogrmutexeddatasource.cpp, - src/other/gdal/ogr/ogrmutexeddatasource.h, - src/other/gdal/ogr/ogrmutexedlayer.cpp, - src/other/gdal/ogr/ogrmutexedlayer.h, - src/other/gdal/ogr/ogrntfdatasource.cpp, - src/other/gdal/ogr/ogrntfdriver.cpp, - src/other/gdal/ogr/ogrntffeatureclasslayer.cpp, - src/other/gdal/ogr/ogrntflayer.cpp, - src/other/gdal/ogr/ogrnulldriver.cpp, - src/other/gdal/ogr/ogropenairdatasource.cpp, - src/other/gdal/ogr/ogropenairdriver.cpp, - src/other/gdal/ogr/ogropenairlabellayer.cpp, - src/other/gdal/ogr/ogropenairlayer.cpp, - src/other/gdal/ogr/ogropenfilegdbdatasource.cpp, - src/other/gdal/ogr/ogropenfilegdbdriver.cpp, - src/other/gdal/ogr/ogropenfilegdblayer.cpp, - src/other/gdal/ogr/ogrpdsdatasource.cpp, - src/other/gdal/ogr/ogrpdsdriver.cpp, - src/other/gdal/ogr/ogrpdslayer.cpp, - src/other/gdal/ogr/ogrpgdumpdatasource.cpp, - src/other/gdal/ogr/ogrpgdumpdriver.cpp, - src/other/gdal/ogr/ogrpgdumplayer.cpp, - src/other/gdal/ogr/ogrrecdatasource.cpp, - src/other/gdal/ogr/ogrrecdriver.cpp, - src/other/gdal/ogr/ogrreclayer.cpp, - src/other/gdal/ogr/ogrregisterall.cpp, - src/other/gdal/ogr/ogrs57datasource.cpp, - src/other/gdal/ogr/ogrs57driver.cpp, - src/other/gdal/ogr/ogrs57layer.cpp, - src/other/gdal/ogr/ogrsegukooadatasource.cpp, - src/other/gdal/ogr/ogrsegukooadriver.cpp, - src/other/gdal/ogr/ogrsegukooalayer.cpp, - src/other/gdal/ogr/ogrsegydatasource.cpp, - src/other/gdal/ogr/ogrsegydriver.cpp, - src/other/gdal/ogr/ogrsegylayer.cpp, - src/other/gdal/ogr/ogrselafindatasource.cpp, - src/other/gdal/ogr/ogrselafindriver.cpp, - src/other/gdal/ogr/ogrselafinlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts, src/other/gdal/ogr/ogrsf_frmts.h, - src/other/gdal/ogr/ogrsf_frmts/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/aeronavfaa, - src/other/gdal/ogr/ogrsf_frmts/aeronavfaa/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/aeronavfaa/ogr_aeronavfaa.h, - src/other/gdal/ogr/ogrsf_frmts/aeronavfaa/ograeronavfaadatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/aeronavfaa/ograeronavfaadriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/aeronavfaa/ograeronavfaalayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/arcgen, - src/other/gdal/ogr/ogrsf_frmts/arcgen/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/arcgen/ogr_arcgen.h, - src/other/gdal/ogr/ogrsf_frmts/arcgen/ograrcgendatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/arcgen/ograrcgendriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/arcgen/ograrcgenlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/avc, - src/other/gdal/ogr/ogrsf_frmts/avc/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/avc/avc.h, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_bin.c, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_binwr.c, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_e00gen.c, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_e00parse.c, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_e00read.c, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_e00write.c, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_mbyte.c, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_mbyte.h, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_misc.c, - src/other/gdal/ogr/ogrsf_frmts/avc/avc_rawbin.c, - src/other/gdal/ogr/ogrsf_frmts/avc/ogr_avc.h, - src/other/gdal/ogr/ogrsf_frmts/avc/ogravcbindatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/avc/ogravcbindriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/avc/ogravcbinlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/avc/ogravcdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/avc/ogravce00datasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/avc/ogravce00driver.cpp, - src/other/gdal/ogr/ogrsf_frmts/avc/ogravce00layer.cpp, - src/other/gdal/ogr/ogrsf_frmts/avc/ogravclayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/bna, - src/other/gdal/ogr/ogrsf_frmts/bna/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/bna/ogr_bna.h, - src/other/gdal/ogr/ogrsf_frmts/bna/ogrbnadatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/bna/ogrbnadriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/bna/ogrbnalayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/bna/ogrbnaparser.cpp, - src/other/gdal/ogr/ogrsf_frmts/bna/ogrbnaparser.h, - src/other/gdal/ogr/ogrsf_frmts/csv, - src/other/gdal/ogr/ogrsf_frmts/csv/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/csv/ogr_csv.h, - src/other/gdal/ogr/ogrsf_frmts/csv/ogrcsvdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/csv/ogrcsvdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/csv/ogrcsvlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/db2, - src/other/gdal/ogr/ogrsf_frmts/db2/gdaldb2rasterband.cpp, - src/other/gdal/ogr/ogrsf_frmts/db2/ogr_db2.h, - src/other/gdal/ogr/ogrsf_frmts/db2/ogrdb2cli.cpp, - src/other/gdal/ogr/ogrsf_frmts/db2/ogrdb2datasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/db2/ogrdb2datasourcemd.cpp, - src/other/gdal/ogr/ogrsf_frmts/db2/ogrdb2driver.cpp, - src/other/gdal/ogr/ogrsf_frmts/db2/ogrdb2geometryvalidator.cpp, - src/other/gdal/ogr/ogrsf_frmts/db2/ogrdb2layer.cpp, - src/other/gdal/ogr/ogrsf_frmts/db2/ogrdb2selectlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/db2/ogrdb2tablelayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn, - src/other/gdal/ogr/ogrsf_frmts/dgn/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/dgn/dgnfloat.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn/dgnhelp.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn/dgnlib.h, - src/other/gdal/ogr/ogrsf_frmts/dgn/dgnlibp.h, - src/other/gdal/ogr/ogrsf_frmts/dgn/dgnopen.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn/dgnread.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn/dgnstroke.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn/dgnwrite.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn/dist, - src/other/gdal/ogr/ogrsf_frmts/dgn/dist/README, - src/other/gdal/ogr/ogrsf_frmts/dgn/dist/cpl_config.h, - src/other/gdal/ogr/ogrsf_frmts/dgn/ogr_dgn.h, - src/other/gdal/ogr/ogrsf_frmts/dgn/ogrdgndatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn/ogrdgndriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn/ogrdgnlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/dgn/web, - src/other/gdal/ogr/ogrsf_frmts/dxf, - src/other/gdal/ogr/ogrsf_frmts/dxf/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/dxf/intronurbs.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogr_autocad_services.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogr_autocad_services.h, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogr_dxf.h, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxf_blockmap.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxf_dimension.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxf_hatch.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxf_polyline_smooth.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxf_polyline_smooth.h, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxfblockslayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxfblockswriterlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxfdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxfdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxflayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxfreader.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxfwriterds.cpp, - src/other/gdal/ogr/ogrsf_frmts/dxf/ogrdxfwriterlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/edigeo, - src/other/gdal/ogr/ogrsf_frmts/edigeo/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/edigeo/ogr_edigeo.h, - src/other/gdal/ogr/ogrsf_frmts/edigeo/ogredigeodatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/edigeo/ogredigeodriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/edigeo/ogredigeolayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic, - src/other/gdal/ogr/ogrsf_frmts/generic/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/generic/ogr_attrind.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogr_gensql.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogr_gensql.h, - src/other/gdal/ogr/ogrsf_frmts/generic/ogr_miattrind.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogreditablelayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogreditablelayer.h, - src/other/gdal/ogr/ogrsf_frmts/generic/ogremulatedtransaction.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogremulatedtransaction.h, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrlayerdecorator.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrlayerdecorator.h, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrlayerpool.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrlayerpool.h, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrmutexeddatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrmutexeddatasource.h, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrmutexedlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrmutexedlayer.h, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrregisterall.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrsfdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrsfdriverregistrar.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrunionlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrunionlayer.h, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrwarpedlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/generic/ogrwarpedlayer.h, - src/other/gdal/ogr/ogrsf_frmts/geoconcept, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/geoconcept.c, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/geoconcept.h, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/geoconcept_syscoord.c, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/geoconcept_syscoord.h, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/ogrgeoconceptdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/ogrgeoconceptdatasource.h, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/ogrgeoconceptdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/ogrgeoconceptdriver.h, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/ogrgeoconceptlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/geoconcept/ogrgeoconceptlayer.h, - src/other/gdal/ogr/ogrsf_frmts/geojson, - src/other/gdal/ogr/ogrsf_frmts/geojson/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/COPYING, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/README, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/arraylist.c, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/arraylist.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/bits.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/config.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/debug.c, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/debug.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_c_version.c, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_c_version.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_config.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_inttypes.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_object.c, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_object.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_object_iterator.c, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_object_iterator.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_object_private.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_tokener.c, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_tokener.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_util.c, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/json_util.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/linkhash.c, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/linkhash.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/printbuf.c, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/printbuf.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/libjson/symbol_renames.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogr_geojson.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogresrijsonreader.cpp, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsondatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsondriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonreader.cpp, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonreader.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.cpp, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonutils.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonwritelayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.cpp, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrgeojsonwriter.h, - src/other/gdal/ogr/ogrsf_frmts/geojson/ogrtopojsonreader.cpp, - src/other/gdal/ogr/ogrsf_frmts/gmt, - src/other/gdal/ogr/ogrsf_frmts/gmt/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/gmt/ogr_gmt.h, - src/other/gdal/ogr/ogrsf_frmts/gmt/ogrgmtdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/gmt/ogrgmtdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/gmt/ogrgmtlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/gpsbabel, - src/other/gdal/ogr/ogrsf_frmts/gpsbabel/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/gpsbabel/ogr_gpsbabel.h, - src/other/gdal/ogr/ogrsf_frmts/gpsbabel/ogrgpsbabeldatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/gpsbabel/ogrgpsbabeldriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/gpsbabel/ogrgpsbabelwritedatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/gtm, - src/other/gdal/ogr/ogrsf_frmts/gtm/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/gtm/gtm.cpp, - src/other/gdal/ogr/ogrsf_frmts/gtm/gtm.h, - src/other/gdal/ogr/ogrsf_frmts/gtm/gtmtracklayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/gtm/gtmwaypointlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/gtm/ogr_gtm.h, - src/other/gdal/ogr/ogrsf_frmts/gtm/ogrgtmdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/gtm/ogrgtmdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/gtm/ogrgtmlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/htf, - src/other/gdal/ogr/ogrsf_frmts/htf/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/htf/ogr_htf.h, - src/other/gdal/ogr/ogrsf_frmts/htf/ogrhtfdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/htf/ogrhtfdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/htf/ogrhtflayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/idrisi, - src/other/gdal/ogr/ogrsf_frmts/idrisi/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/idrisi/ogr_idrisi.h, - src/other/gdal/ogr/ogrsf_frmts/idrisi/ogridrisidatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/idrisi/ogridrisidriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/idrisi/ogridrisilayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/mem, - src/other/gdal/ogr/ogrsf_frmts/mem/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/mem/ogr_mem.h, - src/other/gdal/ogr/ogrsf_frmts/mem/ogrmemdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/mem/ogrmemdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/mem/ogrmemlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab, - src/other/gdal/ogr/ogrsf_frmts/mitab/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab.h, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_bounds.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_coordsys.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_datfile.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_feature.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_feature_mif.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_geometry.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_geometry.h, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_idfile.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_imapinfofile.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_indfile.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_mapcoordblock.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_mapfile.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_mapheaderblock.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_mapindexblock.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_mapobjectblock.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_maptoolblock.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_middatafile.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_miffile.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_ogr_datasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_ogr_driver.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_ogr_driver.h, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_priv.h, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_rawbinblock.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_spatialref.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_tabfile.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_tabseamless.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_tabview.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_tooldef.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_utils.cpp, - src/other/gdal/ogr/ogrsf_frmts/mitab/mitab_utils.h, - src/other/gdal/ogr/ogrsf_frmts/ntf, - src/other/gdal/ogr/ogrsf_frmts/ntf/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/ntf/README.txt, - src/other/gdal/ogr/ogrsf_frmts/ntf/ntf.h, - src/other/gdal/ogr/ogrsf_frmts/ntf/ntf_codelist.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ntf_estlayers.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ntf_generic.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ntf_raster.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ntffilereader.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ntfrecord.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ntfstroke.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ogrntfdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ogrntfdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ogrntffeatureclasslayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/ntf/ogrntflayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/null, - src/other/gdal/ogr/ogrsf_frmts/null/ogrnulldriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/ogr_attrind.h, - src/other/gdal/ogr/ogrsf_frmts/ogrsf_frmts.h, - src/other/gdal/ogr/ogrsf_frmts/openair, - src/other/gdal/ogr/ogrsf_frmts/openair/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/openair/ogr_openair.h, - src/other/gdal/ogr/ogrsf_frmts/openair/ogropenairdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/openair/ogropenairdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/openair/ogropenairlabellayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/openair/ogropenairlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb/filegdbindex.cpp, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb/filegdbtable.cpp, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb/filegdbtable.h, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb/filegdbtable_priv.h, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb/ogr_openfilegdb.h, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb/ogropenfilegdbdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb/ogropenfilegdbdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/openfilegdb/ogropenfilegdblayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/pds, - src/other/gdal/ogr/ogrsf_frmts/pds/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/pds/ogr_pds.h, - src/other/gdal/ogr/ogrsf_frmts/pds/ogrpdsdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/pds/ogrpdsdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/pds/ogrpdslayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/pgdump, - src/other/gdal/ogr/ogrsf_frmts/pgdump/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/pgdump/ogr_pgdump.h, - src/other/gdal/ogr/ogrsf_frmts/pgdump/ogrpgdumpdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/pgdump/ogrpgdumpdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/pgdump/ogrpgdumplayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/rec, - src/other/gdal/ogr/ogrsf_frmts/rec/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/rec/ll_recio.cpp, - src/other/gdal/ogr/ogrsf_frmts/rec/ogr_rec.h, - src/other/gdal/ogr/ogrsf_frmts/rec/ogrrecdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/rec/ogrrecdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/rec/ogrreclayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/s57, - src/other/gdal/ogr/ogrsf_frmts/s57/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/s57/ddfrecordindex.cpp, - src/other/gdal/ogr/ogrsf_frmts/s57/ogr_s57.h, - src/other/gdal/ogr/ogrsf_frmts/s57/ogrs57datasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/s57/ogrs57driver.cpp, - src/other/gdal/ogr/ogrsf_frmts/s57/ogrs57layer.cpp, - src/other/gdal/ogr/ogrsf_frmts/s57/s57.h, - src/other/gdal/ogr/ogrsf_frmts/s57/s57classregistrar.cpp, - src/other/gdal/ogr/ogrsf_frmts/s57/s57featuredefns.cpp, - src/other/gdal/ogr/ogrsf_frmts/s57/s57filecollector.cpp, - src/other/gdal/ogr/ogrsf_frmts/s57/s57reader.cpp, - src/other/gdal/ogr/ogrsf_frmts/s57/s57tables.h, - src/other/gdal/ogr/ogrsf_frmts/s57/s57writer.cpp, - src/other/gdal/ogr/ogrsf_frmts/segukooa, - src/other/gdal/ogr/ogrsf_frmts/segukooa/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/segukooa/ogr_segukooa.h, - src/other/gdal/ogr/ogrsf_frmts/segukooa/ogrsegukooadatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/segukooa/ogrsegukooadriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/segukooa/ogrsegukooalayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/segukooa/segukooa.txt, - src/other/gdal/ogr/ogrsf_frmts/segy, - src/other/gdal/ogr/ogrsf_frmts/segy/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/segy/ogr_segy.h, - src/other/gdal/ogr/ogrsf_frmts/segy/ogrsegydatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/segy/ogrsegydriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/segy/ogrsegylayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/segy/segy.txt, - src/other/gdal/ogr/ogrsf_frmts/selafin, - src/other/gdal/ogr/ogrsf_frmts/selafin/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/selafin/io_selafin.cpp, - src/other/gdal/ogr/ogrsf_frmts/selafin/io_selafin.h, - src/other/gdal/ogr/ogrsf_frmts/selafin/ogr_selafin.h, - src/other/gdal/ogr/ogrsf_frmts/selafin/ogrselafindatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/selafin/ogrselafindriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/selafin/ogrselafinlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/shape, - src/other/gdal/ogr/ogrsf_frmts/shape/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/shape/COPYING, - src/other/gdal/ogr/ogrsf_frmts/shape/dbfopen.c, - src/other/gdal/ogr/ogrsf_frmts/shape/ogrshape.h, - src/other/gdal/ogr/ogrsf_frmts/shape/ogrshapedatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/shape/ogrshapedriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/shape/ogrshapelayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/shape/sbnsearch.c, - src/other/gdal/ogr/ogrsf_frmts/shape/shape2ogr.cpp, - src/other/gdal/ogr/ogrsf_frmts/shape/shapefil.h, - src/other/gdal/ogr/ogrsf_frmts/shape/shp_vsi.c, - src/other/gdal/ogr/ogrsf_frmts/shape/shp_vsi.h, - src/other/gdal/ogr/ogrsf_frmts/shape/shpopen.c, - src/other/gdal/ogr/ogrsf_frmts/shape/shptree.c, - src/other/gdal/ogr/ogrsf_frmts/sua, - src/other/gdal/ogr/ogrsf_frmts/sua/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/sua/ogr_sua.h, - src/other/gdal/ogr/ogrsf_frmts/sua/ogrsuadatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/sua/ogrsuadriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/sua/ogrsualayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/sxf, - src/other/gdal/ogr/ogrsf_frmts/sxf/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/sxf/ogr_sxf.h, - src/other/gdal/ogr/ogrsf_frmts/sxf/ogrsxfdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/sxf/ogrsxfdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/sxf/ogrsxflayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/sxf/org_sxf_defs.h, - src/other/gdal/ogr/ogrsf_frmts/tiger, - src/other/gdal/ogr/ogrsf_frmts/tiger/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/tiger/ogr_tiger.h, - src/other/gdal/ogr/ogrsf_frmts/tiger/ogrtigerdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/ogrtigerdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/ogrtigerlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigeraltname.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerarealandmarks.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigercompletechain.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerentitynames.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerfeatureids.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerfilebase.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigeridhistory.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerkeyfeatures.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerlandmarks.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigeroverunder.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerpip.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerpoint.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerpolychainlink.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerpolygon.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerpolygoncorrections.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerpolygoneconomic.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerspatialmetadata.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigertlidrange.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerzerocellid.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerzipcodes.cpp, - src/other/gdal/ogr/ogrsf_frmts/tiger/tigerzipplus4.cpp, - src/other/gdal/ogr/ogrsf_frmts/vdv, - src/other/gdal/ogr/ogrsf_frmts/vdv/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/vdv/ogr_vdv.h, - src/other/gdal/ogr/ogrsf_frmts/vdv/ogrvdvdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/vrt, - src/other/gdal/ogr/ogrsf_frmts/vrt/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/vrt/ogr_vrt.h, - src/other/gdal/ogr/ogrsf_frmts/vrt/ogrvrtdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/vrt/ogrvrtdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/vrt/ogrvrtlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/wasp, - src/other/gdal/ogr/ogrsf_frmts/wasp/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/wasp/ogrwasp.h, - src/other/gdal/ogr/ogrsf_frmts/wasp/ogrwaspdatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/wasp/ogrwaspdriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/wasp/ogrwasplayer.cpp, - src/other/gdal/ogr/ogrsf_frmts/xplane, - src/other/gdal/ogr/ogrsf_frmts/xplane/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane.h, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_apt_reader.cpp, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_apt_reader.h, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_awy_reader.cpp, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_awy_reader.h, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_fix_reader.cpp, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_fix_reader.h, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_geo_utils.cpp, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_geo_utils.h, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_nav_reader.cpp, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_nav_reader.h, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_reader.cpp, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogr_xplane_reader.h, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogrxplanedatasource.cpp, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogrxplanedriver.cpp, - src/other/gdal/ogr/ogrsf_frmts/xplane/ogrxplanelayer.cpp, - src/other/gdal/ogr/ogrsfdriver.cpp, - src/other/gdal/ogr/ogrsfdriverregistrar.cpp, - src/other/gdal/ogr/ogrshape.h, - src/other/gdal/ogr/ogrshapedatasource.cpp, - src/other/gdal/ogr/ogrshapedriver.cpp, - src/other/gdal/ogr/ogrshapelayer.cpp, - src/other/gdal/ogr/ogrsuadatasource.cpp, - src/other/gdal/ogr/ogrsuadriver.cpp, - src/other/gdal/ogr/ogrsualayer.cpp, - src/other/gdal/ogr/ogrsxfdatasource.cpp, - src/other/gdal/ogr/ogrsxfdriver.cpp, - src/other/gdal/ogr/ogrsxflayer.cpp, - src/other/gdal/ogr/ogrtigerdatasource.cpp, - src/other/gdal/ogr/ogrtigerdriver.cpp, - src/other/gdal/ogr/ogrtigerlayer.cpp, - src/other/gdal/ogr/ogrtopojsonreader.cpp, - src/other/gdal/ogr/ogrunionlayer.cpp, - src/other/gdal/ogr/ogrunionlayer.h, - src/other/gdal/ogr/ogrvdvdatasource.cpp, - src/other/gdal/ogr/ogrvrtdatasource.cpp, - src/other/gdal/ogr/ogrvrtdriver.cpp, - src/other/gdal/ogr/ogrvrtlayer.cpp, - src/other/gdal/ogr/ogrwarpedlayer.cpp, - src/other/gdal/ogr/ogrwarpedlayer.h, - src/other/gdal/ogr/ogrwasp.h, - src/other/gdal/ogr/ogrwaspdatasource.cpp, - src/other/gdal/ogr/ogrwaspdriver.cpp, - src/other/gdal/ogr/ogrwasplayer.cpp, - src/other/gdal/ogr/ogrxplanedatasource.cpp, - src/other/gdal/ogr/ogrxplanedriver.cpp, - src/other/gdal/ogr/ogrxplanelayer.cpp, - src/other/gdal/ogr/org_sxf_defs.h, src/other/gdal/ogr/s57.h, - src/other/gdal/ogr/s57classregistrar.cpp, - src/other/gdal/ogr/s57featuredefns.cpp, - src/other/gdal/ogr/s57filecollector.cpp, - src/other/gdal/ogr/s57reader.cpp, src/other/gdal/ogr/s57tables.h, - src/other/gdal/ogr/s57writer.cpp, src/other/gdal/ogr/sbnsearch.c, - src/other/gdal/ogr/segukooa.txt, src/other/gdal/ogr/segy.txt, - src/other/gdal/ogr/shape2ogr.cpp, src/other/gdal/ogr/shapefil.h, - src/other/gdal/ogr/shp_vsi.c, src/other/gdal/ogr/shp_vsi.h, - src/other/gdal/ogr/shpopen.c, src/other/gdal/ogr/shptree.c, - src/other/gdal/ogr/tigeraltname.cpp, - src/other/gdal/ogr/tigerarealandmarks.cpp, - src/other/gdal/ogr/tigercompletechain.cpp, - src/other/gdal/ogr/tigerentitynames.cpp, - src/other/gdal/ogr/tigerfeatureids.cpp, - src/other/gdal/ogr/tigerfilebase.cpp, - src/other/gdal/ogr/tigeridhistory.cpp, - src/other/gdal/ogr/tigerkeyfeatures.cpp, - src/other/gdal/ogr/tigerlandmarks.cpp, - src/other/gdal/ogr/tigeroverunder.cpp, - src/other/gdal/ogr/tigerpip.cpp, - src/other/gdal/ogr/tigerpoint.cpp, - src/other/gdal/ogr/tigerpolychainlink.cpp, - src/other/gdal/ogr/tigerpolygon.cpp, - src/other/gdal/ogr/tigerpolygoncorrections.cpp, - src/other/gdal/ogr/tigerpolygoneconomic.cpp, - src/other/gdal/ogr/tigerspatialmetadata.cpp, - src/other/gdal/ogr/tigertlidrange.cpp, - src/other/gdal/ogr/tigerzerocellid.cpp, - src/other/gdal/ogr/tigerzipcodes.cpp, - src/other/gdal/ogr/tigerzipplus4.cpp, src/other/gdal/ogr/web, - src/other/gdal/progs/CMakeLists.txt: - Nope, that approach won't work - code is too interdependent. Put - gdal back the way it was. - -2020-08-17 02:57 starseeker - - * [r76814] src/other/gdal.dist: - Whoops, caught a tmp file - -2020-08-17 02:56 starseeker - - * [r76813] src/other/gdal.dist, src/other/gdal/CMakeLists.txt, - src/other/gdal/apps/CMakeLists.txt, - src/other/gdal/frmts/grcdataset.cpp, - src/other/gdal/frmts/grddataset.cpp, - src/other/gdal/gcore/CMakeLists.txt, - src/other/gdal/ogr/CMakeLists.txt, src/other/gdal/ogr/COPYING, - src/other/gdal/ogr/README.txt, src/other/gdal/ogr/avc.h, - src/other/gdal/ogr/avc_bin.c, src/other/gdal/ogr/avc_binwr.c, - src/other/gdal/ogr/avc_e00gen.c, - src/other/gdal/ogr/avc_e00parse.c, - src/other/gdal/ogr/avc_e00read.c, - src/other/gdal/ogr/avc_e00write.c, - src/other/gdal/ogr/avc_mbyte.c, src/other/gdal/ogr/avc_mbyte.h, - src/other/gdal/ogr/avc_misc.c, src/other/gdal/ogr/avc_rawbin.c, - src/other/gdal/ogr/dbfopen.c, - src/other/gdal/ogr/ddfrecordindex.cpp, - src/other/gdal/ogr/dgnfloat.cpp, src/other/gdal/ogr/dgnhelp.cpp, - src/other/gdal/ogr/dgnlib.h, src/other/gdal/ogr/dgnlibp.h, - src/other/gdal/ogr/dgnopen.cpp, src/other/gdal/ogr/dgnread.cpp, - src/other/gdal/ogr/dgnstroke.cpp, - src/other/gdal/ogr/dgnwrite.cpp, src/other/gdal/ogr/dist, - src/other/gdal/ogr/filegdbindex.cpp, - src/other/gdal/ogr/filegdbtable.cpp, - src/other/gdal/ogr/filegdbtable.h, - src/other/gdal/ogr/filegdbtable_priv.h, - src/other/gdal/ogr/gdaldb2rasterband.cpp, - src/other/gdal/ogr/geoconcept.c, src/other/gdal/ogr/geoconcept.h, - src/other/gdal/ogr/geoconcept_syscoord.c, - src/other/gdal/ogr/geoconcept_syscoord.h, - src/other/gdal/ogr/gml2ogrgeometry.cpp, - src/other/gdal/ogr/gtm.cpp, src/other/gdal/ogr/gtm.h, - src/other/gdal/ogr/gtmtracklayer.cpp, - src/other/gdal/ogr/gtmwaypointlayer.cpp, - src/other/gdal/ogr/intronurbs.cpp, - src/other/gdal/ogr/io_selafin.cpp, - src/other/gdal/ogr/io_selafin.h, src/other/gdal/ogr/libjson, - src/other/gdal/ogr/ll_recio.cpp, src/other/gdal/ogr/mitab.h, - src/other/gdal/ogr/mitab_bounds.cpp, - src/other/gdal/ogr/mitab_coordsys.cpp, - src/other/gdal/ogr/mitab_datfile.cpp, - src/other/gdal/ogr/mitab_feature.cpp, - src/other/gdal/ogr/mitab_feature_mif.cpp, - src/other/gdal/ogr/mitab_geometry.cpp, - src/other/gdal/ogr/mitab_geometry.h, - src/other/gdal/ogr/mitab_idfile.cpp, - src/other/gdal/ogr/mitab_imapinfofile.cpp, - src/other/gdal/ogr/mitab_indfile.cpp, - src/other/gdal/ogr/mitab_mapcoordblock.cpp, - src/other/gdal/ogr/mitab_mapfile.cpp, - src/other/gdal/ogr/mitab_mapheaderblock.cpp, - src/other/gdal/ogr/mitab_mapindexblock.cpp, - src/other/gdal/ogr/mitab_mapobjectblock.cpp, - src/other/gdal/ogr/mitab_maptoolblock.cpp, - src/other/gdal/ogr/mitab_middatafile.cpp, - src/other/gdal/ogr/mitab_miffile.cpp, - src/other/gdal/ogr/mitab_ogr_datasource.cpp, - src/other/gdal/ogr/mitab_ogr_driver.cpp, - src/other/gdal/ogr/mitab_ogr_driver.h, - src/other/gdal/ogr/mitab_priv.h, - src/other/gdal/ogr/mitab_rawbinblock.cpp, - src/other/gdal/ogr/mitab_spatialref.cpp, - src/other/gdal/ogr/mitab_tabfile.cpp, - src/other/gdal/ogr/mitab_tabseamless.cpp, - src/other/gdal/ogr/mitab_tabview.cpp, - src/other/gdal/ogr/mitab_tooldef.cpp, - src/other/gdal/ogr/mitab_utils.cpp, - src/other/gdal/ogr/mitab_utils.h, src/other/gdal/ogr/ntf.h, - src/other/gdal/ogr/ntf_codelist.cpp, - src/other/gdal/ogr/ntf_estlayers.cpp, - src/other/gdal/ogr/ntf_generic.cpp, - src/other/gdal/ogr/ntf_raster.cpp, - src/other/gdal/ogr/ntffilereader.cpp, - src/other/gdal/ogr/ntfrecord.cpp, - src/other/gdal/ogr/ntfstroke.cpp, - src/other/gdal/ogr/ogr_aeronavfaa.h, - src/other/gdal/ogr/ogr_arcgen.h, - src/other/gdal/ogr/ogr_attrind.cpp, - src/other/gdal/ogr/ogr_attrind.h, - src/other/gdal/ogr/ogr_autocad_services.cpp, - src/other/gdal/ogr/ogr_autocad_services.h, - src/other/gdal/ogr/ogr_avc.h, src/other/gdal/ogr/ogr_bna.h, - src/other/gdal/ogr/ogr_csv.h, src/other/gdal/ogr/ogr_db2.h, - src/other/gdal/ogr/ogr_dgn.h, src/other/gdal/ogr/ogr_dxf.h, - src/other/gdal/ogr/ogr_edigeo.h, - src/other/gdal/ogr/ogr_gensql.cpp, - src/other/gdal/ogr/ogr_gensql.h, - src/other/gdal/ogr/ogr_geocoding.cpp, - src/other/gdal/ogr/ogr_geojson.h, src/other/gdal/ogr/ogr_gmt.h, - src/other/gdal/ogr/ogr_gpsbabel.h, src/other/gdal/ogr/ogr_gtm.h, - src/other/gdal/ogr/ogr_htf.h, src/other/gdal/ogr/ogr_idrisi.h, - src/other/gdal/ogr/ogr_json_header.h, - src/other/gdal/ogr/ogr_mem.h, - src/other/gdal/ogr/ogr_miattrind.cpp, - src/other/gdal/ogr/ogr_openair.h, - src/other/gdal/ogr/ogr_openfilegdb.h, - src/other/gdal/ogr/ogr_pds.h, src/other/gdal/ogr/ogr_pgdump.h, - src/other/gdal/ogr/ogr_rec.h, src/other/gdal/ogr/ogr_s57.h, - src/other/gdal/ogr/ogr_segukooa.h, src/other/gdal/ogr/ogr_segy.h, - src/other/gdal/ogr/ogr_selafin.h, src/other/gdal/ogr/ogr_sua.h, - src/other/gdal/ogr/ogr_sxf.h, src/other/gdal/ogr/ogr_tiger.h, - src/other/gdal/ogr/ogr_vdv.h, src/other/gdal/ogr/ogr_vrt.h, - src/other/gdal/ogr/ogr_xplane.h, - src/other/gdal/ogr/ogr_xplane_apt_reader.cpp, - src/other/gdal/ogr/ogr_xplane_apt_reader.h, - src/other/gdal/ogr/ogr_xplane_awy_reader.cpp, - src/other/gdal/ogr/ogr_xplane_awy_reader.h, - src/other/gdal/ogr/ogr_xplane_fix_reader.cpp, - src/other/gdal/ogr/ogr_xplane_fix_reader.h, - src/other/gdal/ogr/ogr_xplane_geo_utils.cpp, - src/other/gdal/ogr/ogr_xplane_geo_utils.h, - src/other/gdal/ogr/ogr_xplane_nav_reader.cpp, - src/other/gdal/ogr/ogr_xplane_nav_reader.h, - src/other/gdal/ogr/ogr_xplane_reader.cpp, - src/other/gdal/ogr/ogr_xplane_reader.h, - src/other/gdal/ogr/ograeronavfaadatasource.cpp, - src/other/gdal/ogr/ograeronavfaadriver.cpp, - src/other/gdal/ogr/ograeronavfaalayer.cpp, - src/other/gdal/ogr/ograrcgendatasource.cpp, - src/other/gdal/ogr/ograrcgendriver.cpp, - src/other/gdal/ogr/ograrcgenlayer.cpp, - src/other/gdal/ogr/ogravcbindatasource.cpp, - src/other/gdal/ogr/ogravcbindriver.cpp, - src/other/gdal/ogr/ogravcbinlayer.cpp, - src/other/gdal/ogr/ogravcdatasource.cpp, - src/other/gdal/ogr/ogravce00datasource.cpp, - src/other/gdal/ogr/ogravce00driver.cpp, - src/other/gdal/ogr/ogravce00layer.cpp, - src/other/gdal/ogr/ogravclayer.cpp, - src/other/gdal/ogr/ogrbnadatasource.cpp, - src/other/gdal/ogr/ogrbnadriver.cpp, - src/other/gdal/ogr/ogrbnalayer.cpp, - src/other/gdal/ogr/ogrbnaparser.cpp, - src/other/gdal/ogr/ogrbnaparser.h, - src/other/gdal/ogr/ogrcsvdatasource.cpp, - src/other/gdal/ogr/ogrcsvdriver.cpp, - src/other/gdal/ogr/ogrcsvlayer.cpp, - src/other/gdal/ogr/ogrdatasource.cpp, - src/other/gdal/ogr/ogrdb2cli.cpp, - src/other/gdal/ogr/ogrdb2datasource.cpp, - src/other/gdal/ogr/ogrdb2datasourcemd.cpp, - src/other/gdal/ogr/ogrdb2driver.cpp, - src/other/gdal/ogr/ogrdb2geometryvalidator.cpp, - src/other/gdal/ogr/ogrdb2layer.cpp, - src/other/gdal/ogr/ogrdb2selectlayer.cpp, - src/other/gdal/ogr/ogrdb2tablelayer.cpp, - src/other/gdal/ogr/ogrdgndatasource.cpp, - src/other/gdal/ogr/ogrdgndriver.cpp, - src/other/gdal/ogr/ogrdgnlayer.cpp, - src/other/gdal/ogr/ogrdxf_blockmap.cpp, - src/other/gdal/ogr/ogrdxf_dimension.cpp, - src/other/gdal/ogr/ogrdxf_hatch.cpp, - src/other/gdal/ogr/ogrdxf_polyline_smooth.cpp, - src/other/gdal/ogr/ogrdxf_polyline_smooth.h, - src/other/gdal/ogr/ogrdxfblockslayer.cpp, - src/other/gdal/ogr/ogrdxfblockswriterlayer.cpp, - src/other/gdal/ogr/ogrdxfdatasource.cpp, - src/other/gdal/ogr/ogrdxfdriver.cpp, - src/other/gdal/ogr/ogrdxflayer.cpp, - src/other/gdal/ogr/ogrdxfreader.cpp, - src/other/gdal/ogr/ogrdxfwriterds.cpp, - src/other/gdal/ogr/ogrdxfwriterlayer.cpp, - src/other/gdal/ogr/ogredigeodatasource.cpp, - src/other/gdal/ogr/ogredigeodriver.cpp, - src/other/gdal/ogr/ogredigeolayer.cpp, - src/other/gdal/ogr/ogreditablelayer.cpp, - src/other/gdal/ogr/ogreditablelayer.h, - src/other/gdal/ogr/ogremulatedtransaction.cpp, - src/other/gdal/ogr/ogremulatedtransaction.h, - src/other/gdal/ogr/ogresrijsonreader.cpp, - src/other/gdal/ogr/ogrgeoconceptdatasource.cpp, - src/other/gdal/ogr/ogrgeoconceptdatasource.h, - src/other/gdal/ogr/ogrgeoconceptdriver.cpp, - src/other/gdal/ogr/ogrgeoconceptdriver.h, - src/other/gdal/ogr/ogrgeoconceptlayer.cpp, - src/other/gdal/ogr/ogrgeoconceptlayer.h, - src/other/gdal/ogr/ogrgeojsondatasource.cpp, - src/other/gdal/ogr/ogrgeojsondriver.cpp, - src/other/gdal/ogr/ogrgeojsonlayer.cpp, - src/other/gdal/ogr/ogrgeojsonreader.cpp, - src/other/gdal/ogr/ogrgeojsonreader.h, - src/other/gdal/ogr/ogrgeojsonutils.cpp, - src/other/gdal/ogr/ogrgeojsonutils.h, - src/other/gdal/ogr/ogrgeojsonwritelayer.cpp, - src/other/gdal/ogr/ogrgeojsonwriter.cpp, - src/other/gdal/ogr/ogrgeojsonwriter.h, - src/other/gdal/ogr/ogrgmtdatasource.cpp, - src/other/gdal/ogr/ogrgmtdriver.cpp, - src/other/gdal/ogr/ogrgmtlayer.cpp, - src/other/gdal/ogr/ogrgpsbabeldatasource.cpp, - src/other/gdal/ogr/ogrgpsbabeldriver.cpp, - src/other/gdal/ogr/ogrgpsbabelwritedatasource.cpp, - src/other/gdal/ogr/ogrgtmdatasource.cpp, - src/other/gdal/ogr/ogrgtmdriver.cpp, - src/other/gdal/ogr/ogrgtmlayer.cpp, - src/other/gdal/ogr/ogrhtfdatasource.cpp, - src/other/gdal/ogr/ogrhtfdriver.cpp, - src/other/gdal/ogr/ogrhtflayer.cpp, - src/other/gdal/ogr/ogridrisidatasource.cpp, - src/other/gdal/ogr/ogridrisidriver.cpp, - src/other/gdal/ogr/ogridrisilayer.cpp, - src/other/gdal/ogr/ogrlayer.cpp, - src/other/gdal/ogr/ogrlayerdecorator.cpp, - src/other/gdal/ogr/ogrlayerdecorator.h, - src/other/gdal/ogr/ogrlayerpool.cpp, - src/other/gdal/ogr/ogrlayerpool.h, - src/other/gdal/ogr/ogrmemdatasource.cpp, - src/other/gdal/ogr/ogrmemdriver.cpp, - src/other/gdal/ogr/ogrmemlayer.cpp, - src/other/gdal/ogr/ogrmutexeddatasource.cpp, - src/other/gdal/ogr/ogrmutexeddatasource.h, - src/other/gdal/ogr/ogrmutexedlayer.cpp, - src/other/gdal/ogr/ogrmutexedlayer.h, - src/other/gdal/ogr/ogrntfdatasource.cpp, - src/other/gdal/ogr/ogrntfdriver.cpp, - src/other/gdal/ogr/ogrntffeatureclasslayer.cpp, - src/other/gdal/ogr/ogrntflayer.cpp, - src/other/gdal/ogr/ogrnulldriver.cpp, - src/other/gdal/ogr/ogropenairdatasource.cpp, - src/other/gdal/ogr/ogropenairdriver.cpp, - src/other/gdal/ogr/ogropenairlabellayer.cpp, - src/other/gdal/ogr/ogropenairlayer.cpp, - src/other/gdal/ogr/ogropenfilegdbdatasource.cpp, - src/other/gdal/ogr/ogropenfilegdbdriver.cpp, - src/other/gdal/ogr/ogropenfilegdblayer.cpp, - src/other/gdal/ogr/ogrpdsdatasource.cpp, - src/other/gdal/ogr/ogrpdsdriver.cpp, - src/other/gdal/ogr/ogrpdslayer.cpp, - src/other/gdal/ogr/ogrpgdumpdatasource.cpp, - src/other/gdal/ogr/ogrpgdumpdriver.cpp, - src/other/gdal/ogr/ogrpgdumplayer.cpp, - src/other/gdal/ogr/ogrrecdatasource.cpp, - src/other/gdal/ogr/ogrrecdriver.cpp, - src/other/gdal/ogr/ogrreclayer.cpp, - src/other/gdal/ogr/ogrregisterall.cpp, - src/other/gdal/ogr/ogrs57datasource.cpp, - src/other/gdal/ogr/ogrs57driver.cpp, - src/other/gdal/ogr/ogrs57layer.cpp, - src/other/gdal/ogr/ogrsegukooadatasource.cpp, - src/other/gdal/ogr/ogrsegukooadriver.cpp, - src/other/gdal/ogr/ogrsegukooalayer.cpp, - src/other/gdal/ogr/ogrsegydatasource.cpp, - src/other/gdal/ogr/ogrsegydriver.cpp, - src/other/gdal/ogr/ogrsegylayer.cpp, - src/other/gdal/ogr/ogrselafindatasource.cpp, - src/other/gdal/ogr/ogrselafindriver.cpp, - src/other/gdal/ogr/ogrselafinlayer.cpp, - src/other/gdal/ogr/ogrsf_frmts, src/other/gdal/ogr/ogrsf_frmts.h, - src/other/gdal/ogr/ogrsfdriver.cpp, - src/other/gdal/ogr/ogrsfdriverregistrar.cpp, - src/other/gdal/ogr/ogrshape.h, - src/other/gdal/ogr/ogrshapedatasource.cpp, - src/other/gdal/ogr/ogrshapedriver.cpp, - src/other/gdal/ogr/ogrshapelayer.cpp, - src/other/gdal/ogr/ogrsuadatasource.cpp, - src/other/gdal/ogr/ogrsuadriver.cpp, - src/other/gdal/ogr/ogrsualayer.cpp, - src/other/gdal/ogr/ogrsxfdatasource.cpp, - src/other/gdal/ogr/ogrsxfdriver.cpp, - src/other/gdal/ogr/ogrsxflayer.cpp, - src/other/gdal/ogr/ogrtigerdatasource.cpp, - src/other/gdal/ogr/ogrtigerdriver.cpp, - src/other/gdal/ogr/ogrtigerlayer.cpp, - src/other/gdal/ogr/ogrtopojsonreader.cpp, - src/other/gdal/ogr/ogrunionlayer.cpp, - src/other/gdal/ogr/ogrunionlayer.h, - src/other/gdal/ogr/ogrvdvdatasource.cpp, - src/other/gdal/ogr/ogrvrtdatasource.cpp, - src/other/gdal/ogr/ogrvrtdriver.cpp, - src/other/gdal/ogr/ogrvrtlayer.cpp, - src/other/gdal/ogr/ogrwarpedlayer.cpp, - src/other/gdal/ogr/ogrwarpedlayer.h, - src/other/gdal/ogr/ogrwasp.h, - src/other/gdal/ogr/ogrwaspdatasource.cpp, - src/other/gdal/ogr/ogrwaspdriver.cpp, - src/other/gdal/ogr/ogrwasplayer.cpp, - src/other/gdal/ogr/ogrxplanedatasource.cpp, - src/other/gdal/ogr/ogrxplanedriver.cpp, - src/other/gdal/ogr/ogrxplanelayer.cpp, - src/other/gdal/ogr/org_sxf_defs.h, src/other/gdal/ogr/s57.h, - src/other/gdal/ogr/s57classregistrar.cpp, - src/other/gdal/ogr/s57featuredefns.cpp, - src/other/gdal/ogr/s57filecollector.cpp, - src/other/gdal/ogr/s57reader.cpp, src/other/gdal/ogr/s57tables.h, - src/other/gdal/ogr/s57writer.cpp, src/other/gdal/ogr/sbnsearch.c, - src/other/gdal/ogr/segukooa.txt, src/other/gdal/ogr/segy.txt, - src/other/gdal/ogr/shape2ogr.cpp, src/other/gdal/ogr/shapefil.h, - src/other/gdal/ogr/shp_vsi.c, src/other/gdal/ogr/shp_vsi.h, - src/other/gdal/ogr/shpopen.c, src/other/gdal/ogr/shptree.c, - src/other/gdal/ogr/tigeraltname.cpp, - src/other/gdal/ogr/tigerarealandmarks.cpp, - src/other/gdal/ogr/tigercompletechain.cpp, - src/other/gdal/ogr/tigerentitynames.cpp, - src/other/gdal/ogr/tigerfeatureids.cpp, - src/other/gdal/ogr/tigerfilebase.cpp, - src/other/gdal/ogr/tigeridhistory.cpp, - src/other/gdal/ogr/tigerkeyfeatures.cpp, - src/other/gdal/ogr/tigerlandmarks.cpp, - src/other/gdal/ogr/tigeroverunder.cpp, - src/other/gdal/ogr/tigerpip.cpp, - src/other/gdal/ogr/tigerpoint.cpp, - src/other/gdal/ogr/tigerpolychainlink.cpp, - src/other/gdal/ogr/tigerpolygon.cpp, - src/other/gdal/ogr/tigerpolygoncorrections.cpp, - src/other/gdal/ogr/tigerpolygoneconomic.cpp, - src/other/gdal/ogr/tigerspatialmetadata.cpp, - src/other/gdal/ogr/tigertlidrange.cpp, - src/other/gdal/ogr/tigerzerocellid.cpp, - src/other/gdal/ogr/tigerzipcodes.cpp, - src/other/gdal/ogr/tigerzipplus4.cpp, src/other/gdal/ogr/web: - See if collapsing ogr into its own lib helps... may be too big by - itself - -2020-08-17 02:10 starseeker - - * [r76812] src/other/gdal/CMakeLists.txt, - src/other/gdal/frmts/CMakeLists.txt: - Still produces a long object list - try a library - -2020-08-17 01:55 starseeker - - * [r76811] src/other/CMakeLists.txt, src/other/gdal.dist, - src/other/gdal/CMakeLists.txt, src/other/gdal/alg/CMakeLists.txt, - src/other/gdal/alg/gdalpansharpen.cpp, - src/other/gdal/apps/CMakeLists.txt, - src/other/gdal/frmts/CMakeLists.txt, - src/other/gdal/frmts/EnvisatFile.c, - src/other/gdal/frmts/EnvisatFile.h, - src/other/gdal/frmts/IdrisiDataset.cpp, - src/other/gdal/frmts/IngrTypes.cpp, - src/other/gdal/frmts/IngrTypes.h, - src/other/gdal/frmts/IntergraphBand.cpp, - src/other/gdal/frmts/IntergraphBand.h, - src/other/gdal/frmts/IntergraphDataset.cpp, - src/other/gdal/frmts/IntergraphDataset.h, - src/other/gdal/frmts/JpegHelper.cpp, - src/other/gdal/frmts/JpegHelper.h, src/other/gdal/frmts/README, - src/other/gdal/frmts/TODO_Projections.txt, - src/other/gdal/frmts/aaigrid, - src/other/gdal/frmts/aaigriddataset.cpp, - src/other/gdal/frmts/aaigriddataset.h, - src/other/gdal/frmts/ace2dataset.cpp, src/other/gdal/frmts/adrg, - src/other/gdal/frmts/adrgdataset.cpp, - src/other/gdal/frmts/adsrange.cpp, - src/other/gdal/frmts/adsrange.hpp, - src/other/gdal/frmts/aigccitt.c, - src/other/gdal/frmts/aigdataset.cpp, - src/other/gdal/frmts/aigopen.c, src/other/gdal/frmts/aigrid, - src/other/gdal/frmts/aigrid.h, src/other/gdal/frmts/airsar, - src/other/gdal/frmts/airsardataset.cpp, src/other/gdal/frmts/arg, - src/other/gdal/frmts/argdataset.cpp, - src/other/gdal/frmts/atlsci_spheroid.cpp, - src/other/gdal/frmts/atlsci_spheroid.h, src/other/gdal/frmts/blx, - src/other/gdal/frmts/blx.c, src/other/gdal/frmts/blx.h, - src/other/gdal/frmts/blxdataset.cpp, src/other/gdal/frmts/bmp, - src/other/gdal/frmts/bmpdataset.cpp, src/other/gdal/frmts/bpg, - src/other/gdal/frmts/bpgdataset.cpp, - src/other/gdal/frmts/btdataset.cpp, src/other/gdal/frmts/cals, - src/other/gdal/frmts/calsdataset.cpp, src/other/gdal/frmts/ceos, - src/other/gdal/frmts/ceos.c, src/other/gdal/frmts/ceos.h, - src/other/gdal/frmts/ceos2, src/other/gdal/frmts/ceosdataset.cpp, - src/other/gdal/frmts/ceosopen.c, src/other/gdal/frmts/ceosopen.h, - src/other/gdal/frmts/ceosrecipe.c, - src/other/gdal/frmts/ceossar.c, src/other/gdal/frmts/coasp, - src/other/gdal/frmts/coasp_dataset.cpp, - src/other/gdal/frmts/cosar, - src/other/gdal/frmts/cosar_dataset.cpp, - src/other/gdal/frmts/cpgdataset.cpp, - src/other/gdal/frmts/ctable2dataset.cpp, - src/other/gdal/frmts/ctg, src/other/gdal/frmts/ctgdataset.cpp, - src/other/gdal/frmts/ddffield.cpp, - src/other/gdal/frmts/ddffielddefn.cpp, - src/other/gdal/frmts/ddfmodule.cpp, - src/other/gdal/frmts/ddfrecord.cpp, - src/other/gdal/frmts/ddfsubfielddefn.cpp, - src/other/gdal/frmts/ddfutils.cpp, src/other/gdal/frmts/derived, - src/other/gdal/frmts/deriveddataset.cpp, - src/other/gdal/frmts/derivedlist.c, - src/other/gdal/frmts/derivedlist.h, src/other/gdal/frmts/dimap, - src/other/gdal/frmts/dimapdataset.cpp, - src/other/gdal/frmts/dipxdataset.cpp, - src/other/gdal/frmts/doq1dataset.cpp, - src/other/gdal/frmts/doq2dataset.cpp, src/other/gdal/frmts/dted, - src/other/gdal/frmts/dted_api.c, src/other/gdal/frmts/dted_api.h, - src/other/gdal/frmts/dted_create.c, - src/other/gdal/frmts/dted_ptstream.c, - src/other/gdal/frmts/dteddataset.cpp, - src/other/gdal/frmts/e00compr.h, src/other/gdal/frmts/e00grid, - src/other/gdal/frmts/e00griddataset.cpp, - src/other/gdal/frmts/e00read.c, - src/other/gdal/frmts/ecrgtocdataset.cpp, - src/other/gdal/frmts/ehdrdataset.cpp, - src/other/gdal/frmts/ehdrdataset.h, - src/other/gdal/frmts/eirdataset.cpp, src/other/gdal/frmts/elas, - src/other/gdal/frmts/elasdataset.cpp, - src/other/gdal/frmts/envidataset.cpp, - src/other/gdal/frmts/envidataset.h, src/other/gdal/frmts/envisat, - src/other/gdal/frmts/envisatdataset.cpp, - src/other/gdal/frmts/ers, src/other/gdal/frmts/ersdataset.cpp, - src/other/gdal/frmts/ershdrnode.cpp, - src/other/gdal/frmts/ershdrnode.h, - src/other/gdal/frmts/fastdataset.cpp, src/other/gdal/frmts/fit, - src/other/gdal/frmts/fit.cpp, src/other/gdal/frmts/fit.h, - src/other/gdal/frmts/fitdataset.cpp, - src/other/gdal/frmts/fujibasdataset.cpp, - src/other/gdal/frmts/gdal_vrt.h, - src/other/gdal/frmts/genbindataset.cpp, - src/other/gdal/frmts/geotiff.cpp, src/other/gdal/frmts/gff, - src/other/gdal/frmts/gff_dataset.cpp, - src/other/gdal/frmts/grcdataset.cpp, - src/other/gdal/frmts/grddataset.cpp, - src/other/gdal/frmts/gridlib.c, - src/other/gdal/frmts/gs7bgdataset.cpp, - src/other/gdal/frmts/gsagdataset.cpp, - src/other/gdal/frmts/gsbgdataset.cpp, - src/other/gdal/frmts/gscdataset.cpp, src/other/gdal/frmts/gsg, - src/other/gdal/frmts/gstEndian.h, - src/other/gdal/frmts/gstTypes.h, - src/other/gdal/frmts/gt_citation.cpp, - src/other/gdal/frmts/gt_citation.h, - src/other/gdal/frmts/gt_jpeg_copy.cpp, - src/other/gdal/frmts/gt_jpeg_copy.h, - src/other/gdal/frmts/gt_overview.cpp, - src/other/gdal/frmts/gt_overview.h, - src/other/gdal/frmts/gt_wkt_srs.cpp, - src/other/gdal/frmts/gt_wkt_srs.h, - src/other/gdal/frmts/gt_wkt_srs_for_gdal.h, - src/other/gdal/frmts/gt_wkt_srs_priv.h, - src/other/gdal/frmts/gtiff, src/other/gdal/frmts/gtiff.h, - src/other/gdal/frmts/gtxdataset.cpp, src/other/gdal/frmts/gxf, - src/other/gdal/frmts/gxf_ogcwkt.c, - src/other/gdal/frmts/gxf_proj4.c, - src/other/gdal/frmts/gxfdataset.cpp, - src/other/gdal/frmts/gxfopen.c, src/other/gdal/frmts/gxfopen.h, - src/other/gdal/frmts/hf2, src/other/gdal/frmts/hf2dataset.cpp, - src/other/gdal/frmts/hfa, src/other/gdal/frmts/hfa.h, - src/other/gdal/frmts/hfa_overviews.cpp, - src/other/gdal/frmts/hfa_p.h, src/other/gdal/frmts/hfaband.cpp, - src/other/gdal/frmts/hfacompress.cpp, - src/other/gdal/frmts/hfadataset.cpp, - src/other/gdal/frmts/hfadataset.h, - src/other/gdal/frmts/hfadictionary.cpp, - src/other/gdal/frmts/hfaentry.cpp, - src/other/gdal/frmts/hfafield.cpp, - src/other/gdal/frmts/hfaopen.cpp, - src/other/gdal/frmts/hfatype.cpp, - src/other/gdal/frmts/hkvdataset.cpp, - src/other/gdal/frmts/idadataset.cpp, src/other/gdal/frmts/idrisi, - src/other/gdal/frmts/idrisi.h, src/other/gdal/frmts/ilwis, - src/other/gdal/frmts/ilwiscoordinatesystem.cpp, - src/other/gdal/frmts/ilwisdataset.cpp, - src/other/gdal/frmts/ilwisdataset.h, src/other/gdal/frmts/ingr, - src/other/gdal/frmts/iris, src/other/gdal/frmts/irisdataset.cpp, - src/other/gdal/frmts/iscedataset.cpp, - src/other/gdal/frmts/isis2dataset.cpp, - src/other/gdal/frmts/isis3dataset.cpp, - src/other/gdal/frmts/iso8211, src/other/gdal/frmts/iso8211.h, - src/other/gdal/frmts/jaxapalsar, - src/other/gdal/frmts/jaxapalsardataset.cpp, - src/other/gdal/frmts/jdem, src/other/gdal/frmts/jdemdataset.cpp, - src/other/gdal/frmts/kmlsuperoverlay, - src/other/gdal/frmts/kmlsuperoverlaydataset.cpp, - src/other/gdal/frmts/kmlsuperoverlaydataset.h, - src/other/gdal/frmts/krodataset.cpp, src/other/gdal/frmts/l1b, - src/other/gdal/frmts/l1bdataset.cpp, - src/other/gdal/frmts/landataset.cpp, - src/other/gdal/frmts/lcpdataset.cpp, - src/other/gdal/frmts/leveller, - src/other/gdal/frmts/levellerdataset.cpp, - src/other/gdal/frmts/libgeotiff, src/other/gdal/frmts/libtiff, - src/other/gdal/frmts/link.c, - src/other/gdal/frmts/loslasdataset.cpp, src/other/gdal/frmts/map, - src/other/gdal/frmts/mapdataset.cpp, src/other/gdal/frmts/mem, - src/other/gdal/frmts/memdataset.cpp, - src/other/gdal/frmts/memdataset.h, - src/other/gdal/frmts/mffdataset.cpp, src/other/gdal/frmts/mgrs.c, - src/other/gdal/frmts/mgrs.h, - src/other/gdal/frmts/nasakeywordhandler.cpp, - src/other/gdal/frmts/nasakeywordhandler.h, - src/other/gdal/frmts/ndfdataset.cpp, - src/other/gdal/frmts/ngsgeoid, - src/other/gdal/frmts/ngsgeoiddataset.cpp, - src/other/gdal/frmts/nitf, src/other/gdal/frmts/nitf_gcprpc.cpp, - src/other/gdal/frmts/nitfaridpcm.cpp, - src/other/gdal/frmts/nitfbilevel.cpp, - src/other/gdal/frmts/nitfdataset.cpp, - src/other/gdal/frmts/nitfdataset.h, - src/other/gdal/frmts/nitfdes.c, src/other/gdal/frmts/nitffile.c, - src/other/gdal/frmts/nitfimage.c, src/other/gdal/frmts/nitflib.h, - src/other/gdal/frmts/nitfrasterband.cpp, - src/other/gdal/frmts/nitfwritejpeg.cpp, - src/other/gdal/frmts/nitfwritejpeg_12.cpp, - src/other/gdal/frmts/northwood, - src/other/gdal/frmts/northwood.cpp, - src/other/gdal/frmts/northwood.h, - src/other/gdal/frmts/ntv2dataset.cpp, src/other/gdal/frmts/ozi, - src/other/gdal/frmts/ozidataset.cpp, - src/other/gdal/frmts/pauxdataset.cpp, src/other/gdal/frmts/pds, - src/other/gdal/frmts/pdsdataset.cpp, - src/other/gdal/frmts/phprfdataset.cpp, - src/other/gdal/frmts/pixelfunctions.cpp, - src/other/gdal/frmts/png, src/other/gdal/frmts/pngdataset.cpp, - src/other/gdal/frmts/pnmdataset.cpp, src/other/gdal/frmts/prf, - src/other/gdal/frmts/r, src/other/gdal/frmts/raw, - src/other/gdal/frmts/rawdataset.cpp, - src/other/gdal/frmts/rawdataset.h, - src/other/gdal/frmts/rcreatecopy.cpp, - src/other/gdal/frmts/rdataset.cpp, - src/other/gdal/frmts/rdataset.h, src/other/gdal/frmts/rdc.txt, - src/other/gdal/frmts/readme.txt, src/other/gdal/frmts/records.c, - src/other/gdal/frmts/records.h, src/other/gdal/frmts/rik, - src/other/gdal/frmts/rikdataset.cpp, src/other/gdal/frmts/rmf, - src/other/gdal/frmts/rmfdataset.cpp, - src/other/gdal/frmts/rmfdataset.h, - src/other/gdal/frmts/rmfdem.cpp, src/other/gdal/frmts/rmflzw.cpp, - src/other/gdal/frmts/roipacdataset.cpp, - src/other/gdal/frmts/rpftocdataset.cpp, - src/other/gdal/frmts/rpftocfile.cpp, - src/other/gdal/frmts/rpftoclib.h, - src/other/gdal/frmts/rrasterdataset.cpp, - src/other/gdal/frmts/rs2, src/other/gdal/frmts/rs2dataset.cpp, - src/other/gdal/frmts/rst.txt, src/other/gdal/frmts/safe, - src/other/gdal/frmts/safedataset.cpp, src/other/gdal/frmts/saga, - src/other/gdal/frmts/sagadataset.cpp, - src/other/gdal/frmts/sar_ceosdataset.cpp, - src/other/gdal/frmts/sentinel2, - src/other/gdal/frmts/sentinel2dataset.cpp, - src/other/gdal/frmts/sgi, src/other/gdal/frmts/sgidataset.cpp, - src/other/gdal/frmts/snodasdataset.cpp, - src/other/gdal/frmts/srpdataset.cpp, - src/other/gdal/frmts/srtmhgt, - src/other/gdal/frmts/srtmhgtdataset.cpp, - src/other/gdal/frmts/terragen, - src/other/gdal/frmts/terragendataset.cpp, - src/other/gdal/frmts/tif_float.c, - src/other/gdal/frmts/tif_float.h, - src/other/gdal/frmts/tifvsi.cpp, src/other/gdal/frmts/tifvsi.h, - src/other/gdal/frmts/til, src/other/gdal/frmts/tildataset.cpp, - src/other/gdal/frmts/timedelta.hpp, src/other/gdal/frmts/tsx, - src/other/gdal/frmts/tsxdataset.cpp, - src/other/gdal/frmts/unwrapgcps.cpp, - src/other/gdal/frmts/usgsdem, - src/other/gdal/frmts/usgsdem_create.cpp, - src/other/gdal/frmts/usgsdemdataset.cpp, - src/other/gdal/frmts/vicardataset.cpp, - src/other/gdal/frmts/vicarkeywordhandler.cpp, - src/other/gdal/frmts/vicarkeywordhandler.h, - src/other/gdal/frmts/vrt, src/other/gdal/frmts/vrtdataset.cpp, - src/other/gdal/frmts/vrtdataset.h, - src/other/gdal/frmts/vrtderivedrasterband.cpp, - src/other/gdal/frmts/vrtdriver.cpp, - src/other/gdal/frmts/vrtfilters.cpp, - src/other/gdal/frmts/vrtpansharpened.cpp, - src/other/gdal/frmts/vrtrasterband.cpp, - src/other/gdal/frmts/vrtrawrasterband.cpp, - src/other/gdal/frmts/vrtsourcedrasterband.cpp, - src/other/gdal/frmts/vrtsources.cpp, - src/other/gdal/frmts/vrtwarped.cpp, src/other/gdal/frmts/xpm, - src/other/gdal/frmts/xpmdataset.cpp, src/other/gdal/frmts/xyz, - src/other/gdal/frmts/xyzdataset.cpp, src/other/gdal/frmts/zmap, - src/other/gdal/frmts/zmapdataset.cpp, - src/other/gdal/gcore/CMakeLists.txt, - src/other/gdal/gcore/gdaldataset.cpp, - src/other/gdal/ogr/ogrsf_frmts/idrisi/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/pds/CMakeLists.txt, - src/other/gdal/ogr/ogrsf_frmts/s57/CMakeLists.txt, - src/other/gdal/progs/CMakeLists.txt: - I may be mistaken, but it looks like the Windows Ninja CMake - setup can't handle super-long object lists - if I disable all of - the formats the buidl will complete. Try collapsing the frmts - subdirs into a single object build and see if that helps. - -2020-08-16 19:09 starseeker - - * [r76810] src/other/tk/CMakeLists.txt: - Whoops, point was to remove these. Probably didn't do the - previous refactor right - should have removed the -D prefixes - - but if this works we can go with it for now. - -2020-08-16 19:06 starseeker - - * [r76809] misc/repoconv/github_ci_actions.yml: - Note that vcvars64.bat is important for getting 64 bit building - -2020-08-16 18:53 brlcad - - * [r76808] include/bu/magic.h: - try the same trick, casting NULL through to a uintptr_t. if the - platform has a non-zero null representation, it should trigger. - -2020-08-16 18:38 starseeker - - * [r76807] src/other/tcl/CMakeLists.txt, - src/other/tk/CMakeLists.txt: - See if making the targeted assignments more focused helps - -2020-08-16 18:16 starseeker - - * [r76806] src/other/tcl/CMakeLists.txt: - More reordering - -2020-08-16 18:08 starseeker - - * [r76805] src/other/tk/CMakeLists.txt: - Ditto tk - try to match previous ordering - -2020-08-16 18:07 starseeker - - * [r76804] src/other/tcl/CMakeLists.txt: - Do the custom assignments after the generic assignments - -2020-08-16 17:51 starseeker - - * [r76803] src/other/tcl/CMakeLists.txt: - Don't apply flags to tclsh.rc - -2020-08-16 17:47 starseeker - - * [r76802] src/other/tcl/CMakeLists.txt, - src/other/tk/CMakeLists.txt: - Flags aren't global any longer, apply them to more source files - -2020-08-16 17:23 starseeker - - * [r76801] misc/repoconv/github_ci_actions.yml: - Main build isn't ready yet, but see if we can use Ninja for - building on all platforms. - -2020-08-16 17:21 starseeker - - * [r76800] src/other/tcl/CMakeLists.txt, - src/other/tk/CMakeLists.txt: - Remove debug messages - -2020-08-16 17:19 starseeker - - * [r76799] src/other/tk/CMakeLists.txt: - Give rc.exe an include directory for wish.exe.manifest - -2020-08-16 16:55 starseeker - - * [r76798] src/other/tk/CMakeLists.txt: - See if the same approach will work for Tk - -2020-08-16 16:49 starseeker - - * [r76797] src/other/tcl/CMakeLists.txt: - Fix function applying definitions - -2020-08-16 16:36 starseeker - - * [r76796] src/other/tcl/CMakeLists.txt: - See if we can set this up to avoid the flags causing rc.exe - problems from being set on that file. - -2020-08-15 16:38 starseeker - - * [r76794] regress/solids/CMakeLists.txt: - Call out asc2pix - -2020-08-15 15:38 starseeker - - * [r76793] src/libdm/include/calltable.h, - src/libged/include/plugin.h: - Append one extra number to ensure dm plugins will be rejected by - ged and vice versa, if they end up in the wrong place. - -2020-08-15 15:17 starseeker - - * [r76792] include/bu/magic.h: - Looks like the github runner Ubuntu+GCC doesn't like the non-NULL - pointer check here. - -2020-08-15 14:35 starseeker - - * [r76790] include/ged/defines.h, src/libged/ged_init.cpp: - Match LIBDM changes in LIBGED plugin api as well. - -2020-08-15 14:25 starseeker - - * [r76788] src/libged/ged.c, src/mged/color_scheme.c: - The background color setting was getting a ged_gvp set by calling - set_curr_dm, even though that's not what we want in that case. - Work around the issue, but MGED's state management will need some - thought going forward. - -2020-08-15 14:14 brlcad - - * [r76787] include/dm/defines.h: - document that it must be first - -2020-08-15 14:11 brlcad - - * [r76786] src/libdm/dm_init.cpp: - the alignment check isn't needed, just check the version number - -2020-08-15 14:06 brlcad - - * [r76785] include/bu/magic.h: - document the checks being used by BU_CKMAG since they're fairly - low-level operations. add a direct check for nullity, too. will - have to keep an eye on whether the null check provokes an - unreachable expression warning on linters (e.g., coverity). - shouldn't be redundant on a platform with non-zero valued null - pointers. - -2020-08-15 14:06 starseeker - - * [r76784] include/ged/defines.h, src/libged/3ptarb/3ptarb.c, - src/libged/adc/adc.c, src/libged/adjust/adjust.c, - src/libged/ae2dir/ae2dir.c, src/libged/analyze/analyze.c, - src/libged/annotate/annotate.c, src/libged/arb/arb.c, - src/libged/arced/arced.c, src/libged/arot/arot.c, - src/libged/attr/attr.cpp, src/libged/autoview/autoview.c, - src/libged/bb/bb.c, src/libged/bev/bev.c, src/libged/bigE/bigE.c, - src/libged/blast/blast.c, src/libged/bo/bo.c, - src/libged/bot/bot.cpp, src/libged/brep/brep.cpp, - src/libged/cat/cat.c, src/libged/cc/cc.c, - src/libged/check/check.c, src/libged/clone/clone.c, - src/libged/coil/coil.c, src/libged/color/color.c, - src/libged/comb/comb.c, src/libged/comb_color/comb_color.c, - src/libged/comb_std/comb_std.c, src/libged/combmem/combmem.c, - src/libged/concat/concat.cpp, src/libged/constraint/constraint.c, - src/libged/copy/copy.c, src/libged/copyeval/copyeval.c, - src/libged/copymat/copymat.c, src/libged/cpi/cpi.c, - src/libged/dag/dag.cpp, src/libged/dbip/dbip.c, - src/libged/debug/debug.cpp, src/libged/debugbu/debugbu.c, - src/libged/debugdir/debugdir.c, src/libged/debuglib/debuglib.c, - src/libged/debugnmg/debugnmg.c, src/libged/decompose/decompose.c, - src/libged/delay/delay.c, src/libged/dir2ae/dir2ae.c, - src/libged/draw/draw.c, src/libged/dsp/dsp.c, - src/libged/dump/dump.c, src/libged/dup/dup.c, - src/libged/eac/eac.c, src/libged/echo/echo.c, - src/libged/edarb/edarb.c, src/libged/edcodes/edcodes.c, - src/libged/edcomb/edcomb.c, src/libged/edit/edit.c, - src/libged/editit/editit.c, src/libged/edmater/edmater.c, - src/libged/env/env.c, src/libged/erase/erase.c, - src/libged/exists/exists.c, src/libged/expand/expand.c, - src/libged/eye_pos/eye_pos.c, src/libged/facetize/facetize.cpp, - src/libged/fb2pix/fb2pix.c, src/libged/fbclear/fbclear.c, - src/libged/find/find.c, src/libged/form/form.c, - src/libged/fracture/fracture.c, src/libged/gdiff/gdiff.c, - src/libged/ged_init.cpp, src/libged/get/get.c, - src/libged/get_autoview/get_autoview.c, - src/libged/get_comb/get_comb.c, - src/libged/get_eyemodel/get_eyemodel.c, - src/libged/get_type/get_type.c, src/libged/glob/glob.c, - src/libged/gqa/gqa.c, src/libged/grid/grid.c, - src/libged/grid2model_lu/grid2model_lu.c, - src/libged/grid2view_lu/grid2view_lu.c, src/libged/group/group.c, - src/libged/heal/heal.c, src/libged/help/help.cpp, - src/libged/hide/hide.c, src/libged/how/how.c, - src/libged/human/human.c, src/libged/illum/illum.c, - src/libged/importFg4Section/importFg4Section.c, - src/libged/include/plugin.h, src/libged/inside/inside.c, - src/libged/instance/instance.c, src/libged/isize/isize.c, - src/libged/item/item.c, src/libged/joint/joint.c, - src/libged/joint2/joint2.c, src/libged/keep/keep.c, - src/libged/keypoint/keypoint.c, src/libged/kill/kill.c, - src/libged/killall/killall.c, src/libged/killrefs/killrefs.c, - src/libged/killtree/killtree.c, src/libged/label/label.c, - src/libged/lc/lc.c, src/libged/libfuncs/libfuncs.c, - src/libged/lint/lint.cpp, src/libged/list/list.c, - src/libged/lod/lod.c, src/libged/log/log.c, - src/libged/lookat/lookat.c, src/libged/ls/ls.c, - src/libged/lt/lt.c, src/libged/m2v_point/m2v_point.c, - src/libged/make/make.c, src/libged/make_name/make_name.c, - src/libged/match/match.c, src/libged/mater/mater.cpp, - src/libged/metaball/metaball.c, src/libged/mirror/mirror.c, - src/libged/model2grid_lu/model2grid_lu.c, - src/libged/model2view/model2view.c, - src/libged/model2view_lu/model2view_lu.c, src/libged/move/move.c, - src/libged/move_all/move_all.c, - src/libged/move_arb_edge/move_arb_edge.c, - src/libged/move_arb_face/move_arb_face.c, src/libged/mrot/mrot.c, - src/libged/nirt/nirt.c, src/libged/nmg/nmg.c, - src/libged/ocenter/ocenter.c, src/libged/open/open.c, - src/libged/orient/orient.c, src/libged/orotate/orotate.c, - src/libged/oscale/oscale.c, src/libged/otranslate/otranslate.c, - src/libged/overlay/overlay.c, src/libged/pathlist/pathlist.c, - src/libged/pathsum/pathsum.c, - src/libged/perspective/perspective.c, src/libged/pipe/pipe.c, - src/libged/pix2fb/pix2fb.c, src/libged/plot/plot.c, - src/libged/pmat/pmat.c, src/libged/pmodel2view/pmodel2view.c, - src/libged/png/png.c, src/libged/png2fb/png2fb.c, - src/libged/pnts/pnts.cpp, src/libged/prcolor/prcolor.c, - src/libged/prefix/prefix.c, src/libged/process/process.c, - src/libged/protate/protate.c, src/libged/ps/ps.c, - src/libged/pscale/pscale.c, src/libged/pset/pset.c, - src/libged/ptranslate/ptranslate.c, src/libged/pull/pull.c, - src/libged/push/push.c, src/libged/put/put.c, - src/libged/put_comb/put_comb.c, src/libged/putmat/putmat.c, - src/libged/qray/qray.c, src/libged/qvrot/qvrot.c, - src/libged/rcodes/rcodes.c, src/libged/rect/rect.c, - src/libged/red/red.c, src/libged/regdef/regdef.c, - src/libged/region/region.c, src/libged/remove/remove.c, - src/libged/rfarb/rfarb.c, src/libged/rmap/rmap.c, - src/libged/rmat/rmat.c, src/libged/rmater/rmater.c, - src/libged/rot/rot.c, src/libged/rot_point/rot_point.c, - src/libged/rrt/rrt.c, src/libged/rt/rt.c, - src/libged/rtabort/rtabort.c, src/libged/rtcheck/rtcheck.c, - src/libged/rtwizard/rtwizard.c, src/libged/savekey/savekey.c, - src/libged/saveview/saveview.c, src/libged/scale/scale.c, - src/libged/screengrab/screengrab.c, src/libged/search/search.c, - src/libged/select/select.c, - src/libged/set_output_script/set_output_script.c, - src/libged/set_transparency/set_transparency.c, - src/libged/set_uplotOutputMode/set_uplotOutputMode.c, - src/libged/setview/setview.c, - src/libged/shaded_mode/shaded_mode.c, src/libged/shader/shader.c, - src/libged/shells/shells.c, src/libged/showmats/showmats.c, - src/libged/simulate/ged_command.cpp, src/libged/slew/slew.c, - src/libged/solid_report/solid_report.c, - src/libged/solids_on_ray/solids_on_ray.c, - src/libged/sphgroup/sphgroup.c, src/libged/summary/summary.c, - src/libged/sync/sync.c, src/libged/tables/tables.c, - src/libged/tire/tire.c, src/libged/title/title.c, - src/libged/tol/tol.c, src/libged/tops/tops.c, - src/libged/tra/tra.c, src/libged/track/track.c, - src/libged/tree/tree.c, src/libged/typein/typein.c, - src/libged/unhide/unhide.c, src/libged/units/units.c, - src/libged/v2m_point/v2m_point.c, src/libged/vdraw/vdraw.c, - src/libged/version/version.c, src/libged/view/view.c, - src/libged/view2grid_lu/view2grid_lu.c, - src/libged/view2model/view2model.c, - src/libged/view2model_lu/view2model_lu.c, - src/libged/view2model_vec/view2model_vec.c, - src/libged/viewdir/viewdir.c, src/libged/voxelize/voxelize.c, - src/libged/vrot/vrot.c, src/libged/wcodes/wcodes.c, - src/libged/whatid/whatid.c, src/libged/which/which.cpp, - src/libged/which_shader/which_shader.c, src/libged/who/who.c, - src/libged/wmater/wmater.c, src/libged/xpush/xpush.c, - src/libged/zap/zap.c, src/libged/zoom/zoom.c: - As with LIBDM, introduce a plugin API version for LIBGED - -2020-08-15 13:52 starseeker - - * [r76783] src/libdm/postscript/CMakeLists.txt: - dm-ps needs TCL_LIBRARY - -2020-08-15 13:45 starseeker - - * [r76782] misc/CMake/BRLCAD_Util.cmake: - Allow for empty list in CMAKEFILES function - -2020-08-15 13:42 starseeker - - * [r76781] misc/repoconv/github_ci_actions.yml: - distcheck is still a bit too problematic with MSVC - do what we - do manually, build everything and run the check target. - -2020-08-15 13:39 starseeker - - * [r76780] CMakeLists.txt: - Remove debug message - -2020-08-15 13:39 starseeker - - * [r76779] CMakeLists.txt: - Handle any .github files temporarily so we can run distcheck more - easily - -2020-08-15 13:21 starseeker - - * [r76778] src/libdm/X/CMakeLists.txt, - src/libdm/glx/CMakeLists.txt, src/libdm/osgl/CMakeLists.txt, - src/libdm/plot/CMakeLists.txt, src/libdm/qt/CMakeLists.txt, - src/libdm/wgl/CMakeLists.txt: - List files for distcheck - -2020-08-15 12:28 brlcad - - * [r76777] src/libbu/units.c: - ws - -2020-08-15 12:27 brlcad - - * [r76776] include/bu/units.h: - bu_units_string is itself undocumented and appears to be used via - the undocumented 'units -t' switch for getting a listing of - length units. needs cleanup - -2020-08-15 04:35 brlcad - - * [r76775] include/bu/units.h: - document bu_units_conversion() in more detail with examples - -2020-08-15 04:35 brlcad - - * [r76774] src/libbu/units.c: - note these tables should be kept sorted - -2020-08-15 04:15 brlcad - - * [r76773] src/libbu/units.c: - expand bu_units_conversion() to also match conversion value so - that callers may specify '4ft' for example, and it will evaluate - to the corresponding conversion factor. - -2020-08-15 02:33 brlcad - - * [r76772] src/libbu/units.c: - input is const, no reason for copying it - -2020-08-15 02:29 brlcad - - * [r76771] include/vmath.h: - remove the statements of discouragement as it can be misleading - to cursory encounters. - -2020-08-15 01:11 starseeker - - * [r76770] ., CMakeLists.txt, NEWS, include, include/dm/defines.h, - misc/CMake/BRLCAD_Util.cmake, misc/CMake/distclean.cmake.in, - regress, regress/burst/CMakeLists.txt, - regress/dsp/CMakeLists.txt, regress/iges/CMakeLists.txt, - regress/red/CMakeLists.txt, regress/repository/repocheck.cpp, - src/libdm/X/dm-X.c, src/libdm/dm_init.cpp, - src/libdm/glx/dm-ogl.c, src/libdm/include/calltable.h, - src/libdm/osgl/dm-osgl.cpp, src/libdm/plot/CMakeLists.txt, - src/libdm/plot/dm-plot.c, src/libdm/postscript/CMakeLists.txt, - src/libdm/postscript/dm-ps.c, src/libdm/qt/dm-qt.cpp, - src/libdm/tk/dm-tk.c, src/libdm/txt/dm-txt.c, - src/libdm/wgl/dm-wgl.c: - Pull in the latest RELEASE changes through r76769. - -2020-08-15 00:28 brlcad - - * [r76765] src/rt/usage.cpp: - fix typo and clarify why these opts aren't included - -2020-08-14 23:21 brlcad - - * [r76764] NEWS: - dynamic command loading for libged too - -2020-08-14 22:51 brlcad - - * [r76763] NEWS: - note that mged and archer now load displays dynamically as a - significant architecture change for the upcoming 7.32.0 releaes - -2020-08-14 21:39 brlcad - - * [r76762] src/rt/viewweight.c: - there's no need or benefit of having the densityfile_vls be on - the heap or come from the small-memory allocator. just put the - struct on the stack. - -2020-08-14 20:00 brlcad - - * [r76761] CMakeLists.txt: - note that this is a fatal error condition, not a warning, and - tell the caller why configure is being halted so the causality is - obvious. - -2020-08-14 19:42 starseeker - - * [r76760] src/libdm/dm_init.cpp, src/libdm/plot/CMakeLists.txt, - src/libdm/postscript/CMakeLists.txt: - Couple build system fixes, add debugging message to dm_init.cpp - -2020-08-14 12:40 starseeker - - * [r76747] ., misc/CMake/BRLCAD_Targets.cmake, regress, - regress/CMakeLists.txt, regress/asc/CMakeLists.txt, - regress/asc/asc.sh, regress/asc/asc2dsp.sh, regress/bots/bots.sh, - regress/comgeom/comgeom.sh, regress/dsp/dsp.sh, - regress/flawfinder.sh, regress/g-dot.sh, regress/g-nff.sh, - regress/gdiff, regress/gqa/gqa.sh, regress/iges/iges.sh, - regress/lights/lights.sh, regress/mged/CMakeLists.txt, - regress/mged/mged.sh, regress/moss/moss.sh, regress/nirt/nirt.sh, - regress/red/red.sh, regress/rtedge/rtedge.sh, - regress/shaders/shaders.sh, regress/solids/solids.sh, - regress/usage.sh, regress/weight/CMakeLists.txt, - regress/weight/weight.ref, regress/weight/weight.sh, - regress/weight/weight.test2.ref, src/gtools/gdiff/gdiff.c, - src/libged/exec.cpp, src/libged/ged_init.cpp, src/util/cv.c: - Merge changes from RELEASE branch - r76726 through r76746 - -2020-08-13 17:31 starseeker - - * [r76740] misc/CMakeLists.txt, - misc/repoconv/github_ci_actions.yml: - This is now useful enough to warrant checkpointing - using Github - CI actions to do BRL-CAD builds on multiple platforms. - -2020-08-13 14:01 starseeker - - * [r76730] src/librt/db_diff.c: - These are primarily debugging messages at the moment - not much - useful we can currently do with them at a user level. - -2020-08-13 13:17 starseeker - - * [r76729] src/gtools/gdiff/gdiff.c: - Losing added and removed objects with filters - rework the - filtering selection. - -2020-08-13 12:03 starseeker - - * [r76726] ., bench, bench/CMakeLists.txt, bench/run.sh, - misc/CMake/BRLCAD_Targets.cmake, misc/CMake/Distcheck.cmake, - misc/CMake/distcheck_repo_verify.cmake.in, regress, - regress/asc/CMakeLists.txt, regress/asc/asc.sh, - regress/asc/asc2dsp.sh, regress/bots/bots.sh, - regress/burst/regress-burst.cmake.in, regress/comgeom/comgeom.sh, - regress/dsp/dsp.sh, regress/dsp/run-dsp-case-set-1.sh, - regress/dsp/run-dsp-case-set-2.sh, - regress/dsp/run-dsp-case-set-3.sh, regress/flawfinder.sh, - regress/g-dot.sh, regress/g-nff.sh, - regress/gchecker/regress-gchecker.cmake.in, - regress/ged/regress-ged_mater.cmake.in, regress/gqa/gqa.sh, - regress/icv/regress-icv_export.cmake.in, - regress/icv/regress-icv_import.cmake.in, regress/iges/iges.sh, - regress/library.sh, regress/licenses/regress-licenses.cmake.in, - regress/lights/lights.sh, regress/mged/mged.sh, - regress/mged/regress-mged.cmake.in, regress/moss/moss.sh, - regress/nirt/nirt.sh, regress/nurbs/regress-nurbs-test.cmake.in, - regress/pkg/regress-pkg.cmake.in, regress/red/red.sh, - regress/repository/regress-repository.cmake.in, - regress/rtedge/rtedge.sh, - regress/rtwizard/regress-rtwiz.cmake.in, - regress/shaders/shaders.sh, regress/solids/solids.sh, - regress/spdi/spdi.sh, regress/usage.sh, - regress/user/regress-user.cmake.in, regress/weight/weight.sh, - src/CMakeLists.txt, src/fb/CMakeLists.txt, src/libbu, - src/libbu/tests/datetime.c, src/libged/ged_init.cpp, - src/librt/CMakeLists.txt, src/libtclcad/tclcad_init.c, - src/libtermio/CMakeLists.txt, src/remrt/CMakeLists.txt, - src/rt/CMakeLists.txt, src/util/CMakeLists.txt: - Merge changes from RELEASE branch - r76703 through r76725 - -2020-08-11 18:07 starseeker - - * [r76708] doc/README.Windows: - Add a note on where to look for the SDK version. There may be a - better way to do this... - -2020-08-11 15:38 starseeker - - * [r76705] misc/repoconv/NOTES: - Another CI feature to investigate - -2020-08-11 14:19 starseeker - - * [r76704] ., src/libged/blast/blast.c, src/libged/clone/clone.c, - src/libged/draw/draw.c, src/libged/draw/loadview.c, - src/libged/draw/preview.c, src/libged/killall/killall.c, - src/libged/osg.cpp, src/libged/putmat/putmat.c, src/mged/cmd.c: - Merge changes from RELEASE: r76693 through r76703 - -2020-08-10 17:18 starseeker - - * [r76695] src/libbrep/tests/cyl_hole.g: - whoops, got .g sample by mistake - -2020-08-10 17:18 starseeker - - * [r76694] ., src/libbrep/tests/cyl_hole.g, src/libged/draw/draw.c: - Cherrypick r76693 (B cmd fix) from RELEASE - -2020-08-07 14:38 starseeker - - * [r76684] src/mged/fbserv.c: - Sync a few more differences - -2020-08-07 14:30 starseeker - - * [r76683] src/fbserv/server.c: - ws - -2020-08-07 14:23 starseeker - - * [r76682] src/fbserv/fbserv.c, src/fbserv/server.c: - more syncing between MGED and fbserv - -2020-08-07 14:14 starseeker - - * [r76681] src/mged/fbserv.c: - Rename to match standalone fbserv - -2020-08-07 13:55 starseeker - - * [r76680] src/mged/CMakeLists.txt, src/mged/fbserv.c, - src/mged/fbserv.h: - consolidate - -2020-08-07 13:45 starseeker - - * [r76679] src/fbserv/fbserv.c: - Move a few functions and rename to make it a little easier to - compare the MGED version of this code with the standalone - version. - -2020-08-06 18:38 starseeker - - * [r76678] include/dm.h, src/libdm/X/dm-X.c, - src/libdm/dm-generic.c, src/libdm/dm_plugins.cpp, - src/libdm/glx/dm-ogl.c, src/libdm/include/calltable.h, - src/libdm/null/dm-Null.c, src/libdm/osgl/dm-osgl.cpp, - src/libdm/plot/dm-plot.c, src/libdm/postscript/dm-ps.c, - src/libdm/qt/dm-qt.cpp, src/libdm/tk/dm-tk.c, - src/libdm/txt/dm-txt.c, src/libdm/wgl/dm-wgl.c, - src/mged/attach.c: - Replace/refactor another hardcoding of dm backend names - -2020-08-06 18:01 starseeker - - * [r76676] src/libdm/CMakeLists.txt, src/libdm/X/CMakeLists.txt, - src/libdm/glx/CMakeLists.txt, src/libdm/osgl/CMakeLists.txt, - src/libdm/plot/CMakeLists.txt, - src/libdm/postscript/CMakeLists.txt, src/libdm/qt/CMakeLists.txt, - src/libdm/tk/CMakeLists.txt, src/libdm/txt/CMakeLists.txt, - src/libdm/wgl/CMakeLists.txt: - Push the conditionals and the ignore files into the plugin build - logic - -2020-08-06 17:40 starseeker - - * [r76675] src/libdm/X/CMakeLists.txt, src/libdm/X/fb_X.h, - src/libdm/glx/CMakeLists.txt, src/libdm/glx/fb_ogl.h, - src/libdm/glx/if_ogl.c, src/libdm/osgl/CMakeLists.txt, - src/libdm/osgl/fb_osgl.h, src/libdm/osgl/if_osgl.cpp, - src/libdm/qt/CMakeLists.txt, src/libdm/qt/fb_qt.h, - src/libdm/tk/CMakeLists.txt, src/libdm/wgl/CMakeLists.txt, - src/libdm/wgl/fb_wgl.h: - Shouldn't need the defines at lower levels either... - -2020-08-06 17:32 starseeker - - * [r76674] src/mged/doevent.c: - No change in body of function due to if defined... - -2020-08-06 17:30 starseeker - - * [r76673] src/libdm/CMakeLists.txt: - Simplify the libdm build logic - we no longer need to supply the - DM_* defines to MGED. - -2020-08-06 17:18 starseeker - - * [r76672] include/dm.h, src/libdm/X/dm-X.h, - src/libdm/glx/dm-ogl.h, src/libdm/osgl/dm-osgl.h, - src/libdm/plot/dm-plot.h, src/libdm/postscript/dm-ps.h, - src/libdm/qt/dm-qt.h, src/libdm/tk/dm-tk.h, - src/libdm/txt/dm-txt.c, src/libdm/wgl/dm-wgl.h: - Move the extern declarations down into subheaders (except for the - null dm) - -2020-08-06 17:10 starseeker - - * [r76671] src/libdm/X/dm-X.h, src/libdm/glx/dm-ogl.h, - src/libdm/include/private.h, src/libdm/wgl/dm-wgl.h: - Put DM specific definitions in the local headers - -2020-08-06 17:05 starseeker - - * [r76670] src/libtclcad/tclcad_obj.c: - Not sure why these are conditionalized? Just define them until it - is clear why that won't work... - -2020-08-06 16:49 starseeker - - * [r76669] src/libtclcad/tclcad_obj.c: - Key off of OpenGL. TODO: this feature belongs at a lower level... - -2020-08-06 16:34 starseeker - - * [r76668] include/dm.h, src/libdm/X/dm-X.c, - src/libdm/dm-generic.c, src/libdm/dm_plugins.cpp, - src/libdm/glx/dm-ogl.c, src/libdm/include/calltable.h, - src/libdm/null/dm-Null.c, src/libdm/osgl/dm-osgl.cpp, - src/libdm/plot/dm-plot.c, src/libdm/postscript/dm-ps.c, - src/libdm/qt/dm-qt.cpp, src/libdm/tk/dm-tk.c, - src/libdm/txt/dm-txt.c, src/libdm/wgl/dm-wgl.c, - src/mged/attach.c, src/mged/mged.c: - Remove the last use of DM_* ifdefs from MGED - -2020-08-06 16:11 starseeker - - * [r76667] include/dm.h, src/libdm/dm_plugins.cpp, - src/libdm/tests/dm_test.c, src/libtclcad/dm.c, src/mged/attach.c: - Have the caller provide a vls to dm_list_types, remove some more - DM ifdefs - -2020-08-06 14:53 starseeker - - * [r76666] include/dm.h, src/libdm/X/dm-X.c, - src/libdm/dm-generic.c, src/libdm/glx/dm-ogl.c, - src/libdm/include/calltable.h, src/libdm/null/dm-Null.c, - src/libdm/null/dm-Null.h, src/libdm/osgl/dm-osgl.cpp, - src/libdm/plot/dm-plot.c, src/libdm/postscript/dm-ps.c, - src/libdm/qt/dm-qt.cpp, src/libdm/tk/dm-tk.c, - src/libdm/txt/dm-txt.c, src/libdm/wgl/dm-wgl.c, - src/mged/attach.c, src/mged/cmd.c, src/mged/doevent.c, - src/mged/mged.h, src/mged/mged_dm.h: - Make a stab at pushing down the DM-specific event functions into - libdm. The dirty flag needs more attention - as MGED is using it, - the scope appears to be all DMs rather than each individual - instance, and there's no internal 'this DM is no longer dirty' - reset post-draw at the moment (as one would expect for a DM - scoped flag of this sort.) Need to better understand the - relationship between DMP, stuct dm_list, and how it should or - shouldn't relate to bview. - -2020-08-06 13:14 starseeker - - * [r76665] include/dm/CMakeLists.txt, include/dm/dm-design.h: - This is probably obsolete now... - -2020-08-06 13:10 starseeker - - * [r76664] src/mged/attach.c: - No longer need these - -2020-08-06 08:23 d_rossberg - - * [r76663] src/other/openNURBS/opennurbs_extensions.h: - we still need to distinguish between dynamic and static library - MSVC builds, with ON_DLL_EXPORTS/ON_DLL_IMPORTS set or unset - -2020-08-06 08:17 d_rossberg - - * [r76662] misc/win32-msvc/Dll/CMakeLists.txt: - lz4 is now embedded in librt - -2020-08-03 21:17 starseeker - - * [r76655] include/bu/process.h, include/ged/defines.h, - include/tclcad.h, src/libbu/process.c, - src/libtclcad/tclcad_obj.c: - r76624 broke rt command in Archer on Windows. Switch to using a - semantic enum to specifiy I/O channel in the API, rather than any - sort of int. - -2020-08-03 17:56 starseeker - - * [r76653] src/libtclcad/tclcad_obj.c: - Fix libtclcad build on Windows - -2020-08-03 00:58 starseeker - - * [r76650] src/mged/mged.c: - After closedb, need to set up a blank struct ged so commands will - work. - -2020-08-02 20:15 starseeker - - * [r76646] ., NEWS, doc, include, include/bu/magic.h, - include/dm/bview.h, include/ged/defines.h, include/ged/view.h, - include/tclcad.h, regress, src/libged/arb/rotate_arb_face.c, - src/libged/bb/bb.c, src/libged/bigE/bigE.c, - src/libged/bot/bot.cpp, src/libged/bot/bot_dump.c, - src/libged/bot/check.cpp, src/libged/bot/edbot.c, - src/libged/bot/extrude.cpp, src/libged/bot/remesh.cpp, - src/libged/clone/clone.c, src/libged/comb/comb.c, - src/libged/comb_std/comb_std.c, src/libged/copymat/copymat.c, - src/libged/display_list.c, src/libged/draw/draw.c, - src/libged/draw/preview.c, src/libged/edcodes/edcodes.c, - src/libged/edit/edit.c, src/libged/edmater/edmater.c, - src/libged/erase/erase.c, src/libged/exec.cpp, - src/libged/facetize/facetize.cpp, src/libged/gdiff/gdiff.c, - src/libged/ged.c, src/libged/ged_private.h, - src/libged/ged_util.c, src/libged/get/get.c, - src/libged/get_obj_bounds.c, src/libged/get_type/get_type.c, - src/libged/include, src/libged/include/plugin.h, - src/libged/joint/joint.c, src/libged/kill/kill.c, - src/libged/killrefs/killrefs.c, src/libged/killtree/killtree.c, - src/libged/mater/mater.cpp, src/libged/metaball/metaball.c, - src/libged/move_arb_edge/move_arb_edge.c, - src/libged/move_arb_face/move_arb_face.c, - src/libged/ocenter/ocenter.c, src/libged/orotate/orotate.c, - src/libged/oscale/oscale.c, src/libged/otranslate/otranslate.c, - src/libged/pipe.c, src/libged/pipe/pipe.c, - src/libged/polyclip.cpp, src/libged/process/process.c, - src/libged/protate/protate.c, src/libged/pscale/pscale.c, - src/libged/pset/pset.c, src/libged/ptranslate/ptranslate.c, - src/libged/put/put.c, src/libged/put_comb/put_comb.c, - src/libged/remove/remove.c, src/libged/rmater/rmater.c, - src/libged/rtabort/rtabort.c, src/libged/rtcheck/rtcheck.c, - src/libged/rtwizard/rtwizard.c, src/libged/select/select.c, - src/libged/set_transparency/set_transparency.c, - src/libged/vdraw/vdraw.c, src/libged/view/data_lines.c, - src/libged/wcodes/wcodes.c, src/libged/zap/zap.c, - src/libtclcad/fb.c, src/libtclcad/tclcad_mouse.c, - src/libtclcad/tclcad_obj.c, src/libtclcad/tclcad_obj_wrapper.c, - src/libtclcad/tclcad_polygons.c, src/libtclcad/tclcad_private.h, - src/libtclcad/view/arrows.c, src/libtclcad/view/autoview.c, - src/libtclcad/view/axes.c, src/libtclcad/view/draw.c, - src/libtclcad/view/faceplate.c, src/libtclcad/view/labels.c, - src/libtclcad/view/lines.c, src/libtclcad/view/refresh.c, - src/libtclcad/view/util.c, src/libtclcad/view/view.h, - src/mged/chgview.c, src/mged/dodraw.c, src/mged/mged.c, - src/mged/overlay.c, src/mged/setup.c, src/mged/utility1.c, - src/mged/wdb_obj.c, src/shapes/coil.c: - Now that we've gotten trunk into RELEASE so we can work on - 7.32.0, merge the latest bioh changes to libged/libtclcad back - into trunk. Next steps are likely to be more invasive, so this - seems to be a reasonable sync point. - -2020-08-02 19:51 starseeker - - * [r76644] src/libtclcad/tclcad_obj.c: - Don't unpack fdp unless we're non-NULL - -2020-08-02 18:30 starseeker - - * [r76641] regress/solids/solids.dsp.dat: - Set mime-type of solds.dsp.dat to application/octet-stream - -2020-08-02 17:53 starseeker - - * [r76640] NEWS: - Fix NEWS release date - -2020-08-01 06:55 brlcad - - * [r76629] BUGS: - unable to reproduce, tested multiple files and count was correct. - -2020-08-01 06:47 brlcad - - * [r76628] BUGS, NEWS: - idents cn longer bombs simply when run from a read-only path - -2020-08-01 06:44 brlcad - - * [r76627] src/libged/tables/tables.c: - fix idents crash when running from read-only dir - - if the output file could not be created, an attempt to free an - unallocate and uninitialized ptbl would cause a bu_bomb. now its - on - the stack, so nothing to free, and error messages are updated to - be a - bit more helpful. - -2020-08-01 04:24 brlcad - - * [r76625] src/libbu/process.c: - gosh this gets so convoluted to read. one concept per line. - separate vars, arg validation, main logic, and return for - readability. - -2020-08-01 04:18 brlcad - - * [r76624] src/libbu/process.c: - not safe to assume 0/1/2 actually correspond with - stdin/stdout/stderr - - go through the std vars as they are more likley to remain - semantically - aligned to a corresponding in/out/err descriptor even if - closed/reopened. this API still assumes too much, but there's not - a - good alternative that doesn't entail significant rework at this - point. - -2020-08-01 04:03 brlcad - - * [r76623] src/libtclcad/tclcad_obj.c: - dead code, probably not supposed to be here - -2020-08-01 04:01 brlcad - - * [r76622] src/libtclcad/tclcad_obj.c: - bu_process_fd() can return null, must check it - -2020-07-31 19:58 brlcad - - * [r76615] BUGS: - document a rather fugly idents bug recently reported - -2020-07-30 21:37 brlcad - - * [r76605] src/art/art.cpp, src/remrt/remrt.c, src/remrt/rtsrv.c, - src/rt/do.c, src/rt/main.c, src/rt/opt.c: - rename from rt_cmdtab to rt_do_tab.. tired of hunting for it. - -2020-07-30 06:12 brlcad - - * [r76589] src/libged/tables/tables.c: - debugging null ptble error during idents command. update - formatting - -2020-07-30 00:52 starseeker - - * [r76587] regress/dsp/run-dsp-case-set-2.sh, - regress/dsp/run-dsp-case-set-3.sh: - Don't remove the .asc files - they're inputs - -2020-07-29 20:37 starseeker - - * [r76585] regress/asc/asc.sh: - Quote input paths for odd pathname distcheck - -2020-07-29 18:31 starseeker - - * [r76578] ., src/libged/open/open.c: - Cherrypick r76577 from bioh - open+reopen. Was seeing an issue - starting up Archer with a supplied .g file, this clears it. - -2020-07-29 14:07 starseeker - - * [r76568] misc/repowork/repowork.cpp: - Rename the commit rebuild options - this mechanism is not - actually CVS specific, and may be useful somewhere down the road - even post-conversion. - -2020-07-29 13:40 starseeker - - * [r76567] misc/CMakeLists.txt, misc/repoconv/CONVERT.sh, - misc/repoconv/cvs_info.sh, misc/repoconv/domap.sh: - Flesh out the notes about subsequent steps. - -2020-07-29 13:12 starseeker - - * [r76566] misc/repoconv/verify/verify.cpp: - Don't bail at this point, keep going - -2020-07-29 02:33 starseeker - - * [r76565] misc/repowork/commit.cpp: - Make sure cvs lines are also separated by a new line from commit - msg - -2020-07-29 00:48 starseeker - - * [r76564] misc/repowork/commit.cpp, misc/repowork/repowork.cpp: - Improve cvs output, use trees subdir for fi files (there may be a - lot of them...) - -2020-07-28 19:51 starseeker - - * [r76563] misc/repoconv/CONVERT.sh: - More notes on the increasingly complicated post-processing steps. - -2020-07-28 19:40 starseeker - - * [r76562] misc/repoconv/NOTES: - Add a note about what NOT to do when using git fast-export - -2020-07-28 19:39 starseeker - - * [r76561] misc/repowork/README, misc/repowork/commit.cpp, - misc/repowork/repowork.cpp, misc/repowork/repowork.h: - First cut at incorporating the CVS generated information into - commit messages. - -2020-07-28 15:30 starseeker - - * [r76560] misc/repoconv/cvs_info.sh: - Generate a SHA1 based map as well, in case a situation arises - where we can use original-oids to do the mapping. - -2020-07-28 15:23 starseeker - - * [r76559] misc/repoconv/verify/verify.cpp: - Use the branch info pre-processed from the git repository. If - that process arrived at a wrong answer the last resort might be - to iterate through the git branches looking for one that matches, - if they are all different it would probably reach the point of - needing human judgement. - -2020-07-28 14:58 starseeker - - * [r76558] misc/repoconv/cvs_info.sh: - For commits on multiple non-master git branches, assign them to - the branch they are on with the oldest final commit. This may - mis-assign some older commits that were actually made on another - branch and then merged, but we seem to be hitting the limit of - what Git can tell us. A few of these might show up as failed CVS - checkouts in a validation attempt, but I'm not sure how else we - would spot them. - -2020-07-28 13:29 starseeker - - * [r76557] misc/repoconv/verify/verify.cpp: - Read and analyze the maps put out by the scripts - bad news is - that the keys aren't unique, which means we've got commits in the - chain history of more than one branch despite filtering out any - commits in the master chain. Hmm... - -2020-07-28 12:41 starseeker - - * [r76556] misc/repoconv/cvs_info.sh: - Note script for generating the key->sha1 map - -2020-07-28 12:14 starseeker - - * [r76555] misc/repoconv/verify/verify.cpp: - master-UNNAMED-BRANCH isn't a valid CVS branch, skip. - -2020-07-28 11:32 starseeker - - * [r76554] misc/CMakeLists.txt, misc/repoconv/cvs_info.sh: - Extract CVS commit info from cvs-fast-export - - This script uses a cvs-fast-export conversion of the original CVS - repository without an authormap in order to extract the original - association between commit ids and commits. Because SHA1s won't - map for the main conversion, use a combination of message SHA1 - and timestamp to uniquely identify the commits. When we move to - map this information into the final commit messages, we will - need to generate a similar map between this information and the - SHA1 values in the repowork input repository. Reading both maps - will then serve as a key connecting new SHA1 values to the old - CVS data. - - In addition, we also used the --first-parent option of rev-list - to follow the actual branch chains for the CVS conversions - - these will be recorded as cvs:branch: entries. Anything not - on a branch will be deemed to be cvs:branch:trunk commits. - -2020-07-28 10:01 starseeker - - * [r76553] misc/repoconv/verify/verify.cpp: - Check branch string for invalid chars before attempting a CVS - checkout. - -2020-07-28 08:10 brlcad - - * [r76552] src/sig/dmod.c, src/sig/imod.c: - port dmod and imod - -2020-07-28 08:10 brlcad - - * [r76551] src/libdm/plot/dm-plot.c: - open pipes binary too - -2020-07-28 08:10 brlcad - - * [r76550] src/libbn/tabdata.c: - it's a binary reader, must open file in binary road - -2020-07-28 07:37 brlcad - - * [r76549] src/libbg/polygon.c, src/libbg/polygon_triangulate.cpp, - src/libbg/tests/chull.c, src/libbg/tests/obr.c, - src/libbg/trimesh_isect.cpp: - plot files are binary - -2020-07-28 06:24 brlcad - - * [r76548] src/util/asc-plot3.c: - use argv0 - -2020-07-28 06:23 brlcad - - * [r76547] src/util/double-asc.c: - only make input binary, output asc in text mode (other tools - handle both) - -2020-07-28 06:20 brlcad - - * [r76546] src/util/pixtile.c: - use fileno instead of assuming - -2020-07-28 05:47 brlcad - - * [r76545] src/util/lowp.c: - needs binary mode for windows - -2020-07-28 05:43 brlcad - - * [r76544] src/util/dpix-pix.c: - need the fd, not fp - -2020-07-28 04:59 brlcad - - * [r76543] src/util/dpix-pix.c: - more binary. get dpix-pix working on windows. - -2020-07-28 04:55 brlcad - - * [r76542] src/util/bwshrink.c, src/util/halftone.c, - src/util/pixshrink.c: - if we reopen the input, make sure it stays binary - -2020-07-28 04:03 brlcad - - * [r76541] src/libgcv/plugins/obj/obj_read.c, - src/libgcv/plugins/obj/wfobj/obj_parser.cpp: - obj parser is set up to already handle either mode, so make them - consistently use binary - -2020-07-28 02:15 brlcad - - * [r76540] src/conv/vdeck/vdeck.c: - also break on carriage returns just in case we're fed a windows - vdeck input. this should make them seem like double-newlines. - -2020-07-28 01:35 starseeker - - * [r76539] misc/repoconv/verify/verify.cpp: - fix option - -2020-07-28 01:32 starseeker - - * [r76538] misc/repoconv/verify/verify.cpp: - Put the branch query in with the slow portion of the code - diff - checking - so we can iterate faster. - -2020-07-27 23:39 starseeker - - * [r76537] misc/repoconv/verify/verify.cpp: - May have some of the CVS lines wrong somehow? Occasionally - getting empty CVS checkouts, which is probably not what we - want... don't generate override SHA1 files in those cases. - -2020-07-27 20:48 brlcad - - * [r76536] src/libged/attr/attr.cpp, src/libged/bb/bb.c, - src/libged/bigE/bigE.c, src/libged/bo/bo.c, - src/libged/bot/bot_dump.c, src/libged/bot/bot_face_sort.c, - src/libged/check/check.c, src/libged/clone/clone.c, - src/libged/comb/comb.c, src/libged/copyeval/copyeval.c, - src/libged/decompose/decompose.c, src/libged/display_list.c, - src/libged/draw/draw.c, src/libged/edcodes/edcodes.c, - src/libged/erase/erase.c, src/libged/facetize/facetize.cpp, - src/libged/fracture/fracture.c, src/libged/ged_util.c, - src/libged/get_obj_bounds.c, src/libged/gqa/gqa.c, - src/libged/joint/joint.c, src/libged/lint/lint.cpp, - src/libged/mater/mater.cpp, src/libged/nmg/nmg_collapse.c, - src/libged/pix2fb/pix2fb.c, src/libged/shells/shells.c, - src/libged/tables/tables.c, src/libged/trace.c, - src/libged/typein/typein.c, src/libged/wcodes/wcodes.c, - src/libged/whatid/whatid.c: - more single expression per line simplifications for readability - and consistency - -2020-07-27 20:46 brlcad - - * [r76535] src/libged/human/human.c: - ws cleanup, operator *= reduction - -2020-07-27 20:28 brlcad - - * [r76534] src/libged/gqa/gqa.c: - ugh, terrible readability - -2020-07-27 20:11 brlcad - - * [r76533] src/libged/3ptarb/3ptarb.c, src/libged/bot/bot_dump.c, - src/libged/check/check.c, src/libged/check/check_exp_air.c, - src/libged/check/check_unconf_air.c, - src/libged/check/check_volume.c, src/libged/comb/comb.c, - src/libged/constraint/constraint.c, src/libged/draw/loadview.c, - src/libged/draw/preview.c, src/libged/erase/erase.c, - src/libged/get_comb/get_comb.c, src/libged/glob/glob.c, - src/libged/heal/heal.c, src/libged/how/how.c, src/libged/lc/lc.c, - src/libged/metaball/metaball.c, src/libged/nmg/nmg.c, - src/libged/nmg/nmg_cmface.c, src/libged/nmg/nmg_kill_f.c, - src/libged/nmg/nmg_kill_v.c, src/libged/nmg/nmg_make_v.c, - src/libged/nmg/nmg_mm.c, src/libged/nmg/nmg_move_v.c, - src/libged/overlay/overlay.c, src/libged/rot/rot.c, - src/libged/rt/rt.c, src/libged/screengrab/screengrab.c, - src/libged/set_transparency/set_transparency.c, - src/libged/tables/tables.c, src/libged/tests/test_list.c, - src/libged/tol/tol.c, src/libged/tops/tops.c, - src/libged/view/data_lines.c, src/libged/view/snap.c, - src/libged/wcodes/wcodes.c: - general ws cleanup, some reformatting for consistency - -2020-07-27 20:07 starseeker - - * [r76532] misc/repoconv/verify/verify.cpp: - Check, then open - -2020-07-27 19:50 brlcad - - * [r76531] src/libged/human/human.c: - update corresponding usage mentions - -2020-07-27 19:48 brlcad - - * [r76530] src/libged/human/human.c: - lowercase for sanity on case sensitive filesystems - -2020-07-27 19:41 brlcad - - * [r76529] src/libged/check/check_adj_air.c, - src/libged/check/check_exp_air.c, src/libged/check/check_gap.c, - src/libged/check/check_overlaps.c, - src/libged/check/check_unconf_air.c, - src/libged/check/check_volume.c, src/libged/color/color.c, - src/libged/draw/loadview.c, src/libged/dump/dump.c, - src/libged/edcodes/edcodes.c, src/libged/fb2pix/fb2pix.c, - src/libged/ged_init.cpp, src/libged/gqa/gqa.c, - src/libged/keep/keep.c, src/libged/move_all/move_all.c, - src/libged/pix2fb/pix2fb.c, src/libged/plot/plot.c, - src/libged/png2fb/png2fb.c, src/libged/pnts/pnts.cpp, - src/libged/ps/ps.c, src/libged/rcodes/rcodes.c, - src/libged/red/red.c, src/libged/rmater/rmater.c, - src/libged/savekey/savekey.c, src/libged/saveview/saveview.c, - src/libged/tables/tables.c, src/libged/wcodes/wcodes.c, - src/libged/wmater/wmater.c: - more one expression per line where embedding isn't required - -2020-07-27 19:30 brlcad - - * [r76528] src/libged/bot/bot_dump.c, src/libged/bot/bot_fuse.c: - excellent example of why one expression per line is a best - practice. the if statement expression gets lost like an - afterthought. - -2020-07-27 19:18 starseeker - - * [r76527] misc/repoconv/verify/verify.cpp: - This may be long running - make a stab at a way to resume partial - progress - -2020-07-27 18:59 brlcad - - * [r76526] src/libged/brep/plot.cpp: - brep plotting needs to be binary for windows too - -2020-07-27 18:57 brlcad - - * [r76525] src/libged/png/png.c: - one expression per line where embedding isn't required - -2020-07-27 18:45 brlcad - - * [r76524] src/libged/plot/plot.c: - plot data is binary, open file correctly on windows. - -2020-07-27 18:35 starseeker - - * [r76523] misc/repoconv/verify/verify.cpp: - git branch -a --contains won't always output just branch names - - see if we can filter out the lines we don't want - -2020-07-27 18:12 starseeker - - * [r76522] misc/repoconv/verify/verify.cpp: - Wasn't getting CVS branches properly when there isn't an SVN - branch available... try asking Git, although this is likely - problematic since Git commits don't have a notion of origination - branch... - -2020-07-27 15:18 starseeker - - * [r76521] misc/repowork/README: - Add some examples - -2020-07-27 15:09 starseeker - - * [r76520] misc/CMakeLists.txt, misc/repoconv/verify/cvs_repaired, - misc/repoconv/verify/cvs_repaired/sphflake.pix,v: - verify needs the sphflake file - -2020-07-27 15:04 starseeker - - * [r76519] misc/repoconv/verify/verify.cpp, - misc/repowork/commit.cpp: - A quick test suggests we might be able to avoid writing blob.fi - files - would be nice if true, since it makes things more compact - and faster - -2020-07-27 14:50 starseeker - - * [r76518] misc/CMakeLists.txt, misc/repoconv/verify/cvs.sh, - misc/repoconv/verify/md5.hpp, misc/repoconv/verify/sha1.hpp, - misc/repoconv/verify/svn.sh, misc/repoconv/verify/svn_de-rcs.cxx, - misc/repoconv/verify/verify.sh: - Make verify a bit more self contained - -2020-07-27 12:47 starseeker - - * [r76517] misc/repoconv/verify/verify.cpp: - Weird pathnames caused problems with the git hash calculating - - see if we can just do it directly and avoid the pathname - hassle... - -2020-07-27 01:55 starseeker - - * [r76516] misc/repowork/commit.cpp, misc/repowork/repowork.cpp: - Demonstrate (for N=1) ability to replace contents of a CVS commit - with contents generated from a checkout. - -2020-07-27 01:12 starseeker - - * [r76515] misc/repoconv/verify/verify.cpp, - misc/repowork/commit.cpp: - Start trying to incorporate CVS generated updates into the - repowork flow - -2020-07-26 23:29 starseeker - - * [r76514] misc/repoconv/verify/verify.cpp: - List the problem sha1s for which we are generating outputs in a - file. - -2020-07-26 23:12 starseeker - - * [r76513] misc/repoconv/verify/verify.cpp: - See if we can teach verify to go ahead and write out the - necessary pieces if it finds a CVS commit that doesn't match. - -2020-07-26 21:59 starseeker - - * [r76512] misc/repowork/repowork.cpp, misc/repowork/repowork.h: - Checkpoint some work trying to set up to use CVS checkouts to - rebuild individual 'bad' CVS commits. In principle the idea is - similar to the svnfexport fallback which does a deleteall + full - tree commit when the delta processing doesn't produce a matching - checkout, but this time we are trying to do it without requiring - a 2 week rebuild... repowork should allow for selective commit - redefinition if we do it right. Will also have to produce blobs - and tree states from the CVS checkouts... ick. - -2020-07-26 20:22 starseeker - - * [r76511] misc/repoconv/verify/verify.cpp: - Skip note commits, improve CVS only checking - -2020-07-26 19:37 starseeker - - * [r76510] misc/repoconv/verify/verify.cpp: - Taking too long to debug - rework for much faster setup. - -2020-07-26 18:10 starseeker - - * [r76509] misc/repoconv/verify/verify.cpp: - Don't assume svn error - we may not be testing for it - -2020-07-26 18:07 starseeker - - * [r76508] misc/repoconv/verify/verify.cpp: - Print sha1 when we get a difference - -2020-07-26 18:01 starseeker - - * [r76507] misc/repoconv/verify/verify.cpp: - add a couple more options to verify - -2020-07-26 01:16 starseeker - - * [r76505] src/util/decimate.c: - remove redundant header - -2020-07-25 22:59 starseeker - - * [r76504] misc/repoconv/verify/verify.cpp: - If I keep going down this rabbit hole I'm going to encounter - Professor Lidenbrock... teach the verification code how to check - the CVS repository in addition to the SVN repository. - -2020-07-25 21:21 starseeker - - * [r76503] misc/CMakeLists.txt, misc/repoconv/verify, - misc/repoconv/verify.cpp, misc/repoconv/verify/cxxopts.hpp, - misc/repoconv/verify/verify.cpp: - give verify a subdirectory - -2020-07-25 21:00 starseeker - - * [r76502] src/util/decimate.c: - need bio.h here - -2020-07-25 18:59 starseeker - - * [r76501] misc/repoconv/verify.cpp: - Want this process ordered by commit number, for easier resuming - -2020-07-25 17:45 starseeker - - * [r76500] TODO: - Needs a double-check, and testing on Windows. - -2020-07-25 17:40 starseeker - - * [r76499] src/util/alias-pix.c, src/util/asc-plot3.c, - src/util/bw-a.c, src/util/bw-ps.c, src/util/bwdiff.c, - src/util/bwhist.c, src/util/bwrot.c, src/util/bwscale.c, - src/util/bwshrink.c, src/util/bwstat.c, src/util/decimate.c, - src/util/double-asc.c, src/util/gencolor.c, src/util/halftone.c, - src/util/mac-pix.c, src/util/pix-alias.c, src/util/pix-ppm.c, - src/util/pix-ps.c, src/util/pix-sun.c, src/util/pixbgstrip.c, - src/util/pixblend.c, src/util/pixborder.c, src/util/pixclump.c, - src/util/pixcolors.c, src/util/pixcount.cpp, src/util/pixdiff.c, - src/util/pixelswap.c, src/util/pixembed.c, src/util/pixfilter.c, - src/util/pixhalve.c, src/util/pixhist.c, - src/util/pixhist3d-plot3.c, src/util/pixhist3d.c, - src/util/pixinterp2x.c, src/util/pixmerge.c, src/util/pixrot.c, - src/util/pixsaturate.c, src/util/pixscale.c, - src/util/pixshrink.c, src/util/pixstat.c, src/util/pixtile.c, - src/util/pixuntile.c, src/util/plot3-asc.c, - src/util/plot3-plot3.c, src/util/plot3-ps.c, - src/util/plot3color.c, src/util/plot3getframe.c, - src/util/plot3line2.c, src/util/plot3rot.c, src/util/plot3stat.c, - src/util/png-bw.c, src/util/sun-pix.c, src/util/wavelet.c: - Put stdin and stdout in binary mode up front for utilities. This - won't matter on most platforms, but should help on Windows unless - we've got an implicit assumption of O_TEXT mode sneaking in there - somewhere. - -2020-07-25 16:40 starseeker - - * [r76498] src/util/asc-plot3.c, src/util/bombardier.c, - src/util/bw-pix.c, src/util/bwcrop.c, src/util/bwdiff.c, - src/util/pix-ppm.c, src/util/pix3filter.c, src/util/pixblend.c, - src/util/pixclump.c, src/util/pixcolors.c, src/util/pixcount.cpp, - src/util/pixcrop.c, src/util/pixdiff.c, src/util/pixinterp2x.c, - src/util/pixmerge.c, src/util/pixmorph.c, src/util/pixuntile.c, - src/util/plot3-dm.c, src/util/plot3rot.c: - Add binary flags for more fopen calls - -2020-07-25 16:27 starseeker - - * [r76497] src/util/ap-pix.c, src/util/bwcrop.c, src/util/bwhist.c, - src/util/bwhisteq.c, src/util/bwstat.c, src/util/pixcrop.c, - src/util/pixdiff.c, src/util/pixhist.c, - src/util/pixhist3d-plot3.c, src/util/pixhist3d.c, - src/util/pixstat.c, src/util/plot3-asc.c, src/util/plot3stat.c: - Add binary 'b' flag to more fopen calls - -2020-07-25 16:25 starseeker - - * [r76496] src/util/bw-a.c, src/util/bw-png.c, src/util/bw-ps.c, - src/util/bwscale.c, src/util/mac-pix.c, src/util/pix-ppm.c, - src/util/pix-ps.c, src/util/pix3filter.c, src/util/pixbgstrip.c, - src/util/pixborder.c, src/util/pixembed.c, src/util/pixfilter.c, - src/util/pixhalve.c, src/util/pixrot.c, src/util/pixscale.c, - src/util/plot3-ps.c, src/util/sun-pix.c: - Add binary 'b' flag to some fopen calls - -2020-07-25 16:08 starseeker - - * [r76495] misc/repoconv/verify.cpp: - Add option to skip newer commits, don't try to verify branch - delete commits (svn checkout won't work). - -2020-07-25 14:47 starseeker - - * [r76494] misc/repoconv/gitattributes: - terra.dsp needs to be regarded as a binary - we've had trouble - with that in the past. Make a note. - -2020-07-25 14:20 starseeker - - * [r76493] misc/repowork/repowork.cpp: - Tweak the svn branch for dmtogl - -2020-07-25 14:17 starseeker - - * [r76492] misc/CMakeLists.txt, misc/repoconv/verify.cpp: - Add a utility intended to use the svn metadata in the git - comments to do a svn vs git comparison - in a sense, this is the - mirror image of what the original conversion was doing. Will be - slow to run, but in princile can diff every post-CVS commit. Pre - CVS is more problematic - there's not a guarantee things will - line up, as witnessed by the need for a sync commit between the - CVS and SVN histories, and the checkout pattern will change once - we get old enough. Can be done if someone wants to badly enough, - but the guarantees of matching aren't really there due to cvs2svn - vs cvs2git differences so the utility is a bit iffy. - -2020-07-25 13:09 starseeker - - * [r76491] misc/repowork/repowork.cpp: - Whoops - write svn style name for trunk instead of git name - -2020-07-25 11:11 starseeker - - * [r76490] misc/repoconv/svn2git/svn-fast-export/CMakeLists.txt, - misc/repoconv/svn2git/svn-fast-export/repository.cpp, - misc/repoconv/svn2git/svn-fast-export/repository.h, - misc/repoconv/svn2git/svn-fast-export/svn.cpp: - Match the notes formatting to that of the main BRL-CAD conversion - so we can also post-process these repositories to remove the - notes. - -2020-07-25 10:38 starseeker - - * [r76489] misc/repoconv/svn2git/svn-fast-export/CMakeLists.txt, - misc/repoconv/svn2git/svn-fast-export/README.md, - misc/repoconv/svn2git/svn-fast-export/main.cpp, - misc/repoconv/svn2git/svn-fast-export/repository.cpp, - misc/repoconv/svn2git/svn-fast-export/repository.h, - misc/repoconv/svn2git/svn-fast-export/svn.cpp: - Pull latest svn-fast-export changes from upstream - -2020-07-25 10:21 starseeker - - * [r76488] misc/CMakeLists.txt, misc/repoconv/svn2git/account-map: - Remove obsolete account-map file - -2020-07-25 10:12 starseeker - - * [r76487] misc/repoconv/svn2git/svn-fast-export/CMakeLists.txt: - Try building this with Qt5 - -2020-07-25 06:58 brlcad - - * [r76486] doc/docbook/system/man1/asc2dsp.xml: - copy-paste typo - -2020-07-25 05:14 brlcad - - * [r76485] TODO: - fb utilities should be done - -2020-07-25 05:12 brlcad - - * [r76484] NEWS: - note that all fb tools should now be fixed on windows when using - redirected input/output as well as the cv command - -2020-07-25 05:11 brlcad - - * [r76483] src/fb/bw-fb.c, src/fb/fb-bw.c, src/fb/fb-pix.c, - src/fb/fb-png.c, src/fb/gif-fb.c, src/fb/gif2fb.c, - src/fb/pix-fb.c, src/fb/plot3-fb.c, src/fb/png-fb.c: - fix file mode on bw-fb, fb-bw, fb-pix, fb-png, gif-fb, gif2fb, - pix-fb, plot3-fb, and png-fb for windows when reading/writing - from redirected input/output respecitvely - -2020-07-25 04:55 brlcad - - * [r76482] NEWS: - fixed bw-fb and cv so they work on windows - -2020-07-25 04:55 brlcad - - * [r76481] src/util/cv.c: - make cv work in binary on windows - -2020-07-25 04:54 brlcad - - * [r76480] src/fb/bw-fb.c: - don't specify more than binary mode since it can mismatch - -2020-07-25 04:50 brlcad - - * [r76479] NEWS, src/fb/bw-fb.c: - bw-fb needs to specify binary for windows - -2020-07-25 04:44 brlcad - - * [r76478] NEWS, doc/docbook/system/mann/bo.xml: - update bo docs to include & explain the 'u' type. include a dsp - example too. - -2020-07-25 01:46 starseeker - - * [r76477] misc/repowork/commit.cpp: - Go with svn nomenclature account' for output - -2020-07-24 23:53 starseeker - - * [r76476] misc/CMake/distcheck_repo_verify.cmake.in: - Now that we have a git version to try distcheck on... couple - fixes to the repo check. - -2020-07-24 22:02 starseeker - - * [r76473] misc/repowork/commit.cpp, misc/repowork/repowork.cpp, - misc/repowork/repowork.h: - Sean correctly noted that using 'author' for this label has - implications which are not necessarily accurate - there are many - instaces where the committer is applying a patch authored by - someone else. Switch to git's terminology 'committer' (git in - fact has entries for both author and committer.) - -2020-07-24 19:51 starseeker - - * [r76470] doc/README.Windows: - Reorganize, note how to specify SDK - -2020-07-24 14:40 starseeker - - * [r76467] regress/repository/repocheck.cpp: - repository check needs to ignore repowork as well - -2020-07-24 14:39 starseeker - - * [r76466] ., include, include/ged/commands.h, - include/ged/defines.h, regress, regress/CMakeLists.txt, - src/gtools/gsh.cpp, src/libged/3ptarb/3ptarb.c, - src/libged/3ptarb/CMakeLists.txt, src/libged/CMakeLists.txt, - src/libged/adc/CMakeLists.txt, src/libged/adc/adc.c, - src/libged/adjust/CMakeLists.txt, src/libged/adjust/adjust.c, - src/libged/ae2dir/CMakeLists.txt, src/libged/ae2dir/ae2dir.c, - src/libged/analyze/CMakeLists.txt, src/libged/analyze/analyze.c, - src/libged/annotate/CMakeLists.txt, - src/libged/annotate/annotate.c, src/libged/arb/CMakeLists.txt, - src/libged/arb/arb.c, src/libged/arb/rotate_arb_face.c, - src/libged/arced/CMakeLists.txt, src/libged/arced/arced.c, - src/libged/arot/CMakeLists.txt, src/libged/arot/arot.c, - src/libged/attr/CMakeLists.txt, src/libged/attr/attr.cpp, - src/libged/autoview/CMakeLists.txt, - src/libged/autoview/autoview.c, src/libged/bb/CMakeLists.txt, - src/libged/bb/bb.c, src/libged/bev/CMakeLists.txt, - src/libged/bev/bev.c, src/libged/bigE/CMakeLists.txt, - src/libged/bigE/bigE.c, src/libged/blast/CMakeLists.txt, - src/libged/blast/blast.c, src/libged/bo/CMakeLists.txt, - src/libged/bo/bo.c, src/libged/bot/CMakeLists.txt, - src/libged/bot/bot.cpp, src/libged/bot/bot_condense.c, - src/libged/bot/bot_decimate.c, src/libged/bot/bot_dump.c, - src/libged/bot/bot_face_fuse.c, src/libged/bot/bot_face_sort.c, - src/libged/bot/bot_flip.c, src/libged/bot/bot_fuse.c, - src/libged/bot/bot_merge.c, src/libged/bot/bot_smooth.c, - src/libged/bot/bot_split.c, src/libged/bot/bot_sync.c, - src/libged/bot/bot_vertex_fuse.c, src/libged/bot/check.cpp, - src/libged/bot/edbot.c, src/libged/bot/ged_bot.h, - src/libged/bot_condense, src/libged/bot_decimate, - src/libged/bot_dump, src/libged/bot_face_fuse, - src/libged/bot_face_sort, src/libged/bot_flip, - src/libged/bot_fuse, src/libged/bot_merge, src/libged/bot_smooth, - src/libged/bot_split, src/libged/bot_sync, - src/libged/bot_vertex_fuse, src/libged/brep/CMakeLists.txt, - src/libged/brep/brep.cpp, src/libged/brep/csg.cpp, - src/libged/brep/ged_brep.h, src/libged/brep/plot.cpp, - src/libged/cat/CMakeLists.txt, src/libged/cat/cat.c, - src/libged/cc/CMakeLists.txt, src/libged/cc/cc.c, - src/libged/check/CMakeLists.txt, src/libged/check/check.c, - src/libged/check/check_private.h, - src/libged/clone/CMakeLists.txt, src/libged/clone/clone.c, - src/libged/coil/CMakeLists.txt, src/libged/coil/coil.c, - src/libged/color/CMakeLists.txt, src/libged/color/color.c, - src/libged/columns, src/libged/columns.c, - src/libged/comb/CMakeLists.txt, src/libged/comb/comb.c, - src/libged/comb_color/CMakeLists.txt, - src/libged/comb_color/comb_color.c, - src/libged/comb_std/CMakeLists.txt, - src/libged/comb_std/comb_std.c, - src/libged/combmem/CMakeLists.txt, src/libged/combmem/combmem.c, - src/libged/concat/CMakeLists.txt, src/libged/concat/concat.cpp, - src/libged/constraint/CMakeLists.txt, - src/libged/constraint/constraint.c, - src/libged/copy/CMakeLists.txt, src/libged/copy/copy.c, - src/libged/copyeval/CMakeLists.txt, - src/libged/copyeval/copyeval.c, - src/libged/copymat/CMakeLists.txt, src/libged/copymat/copymat.c, - src/libged/cpi/CMakeLists.txt, src/libged/cpi/cpi.c, - src/libged/dag/CMakeLists.txt, src/libged/dag/dag.cpp, - src/libged/dbip/CMakeLists.txt, src/libged/dbip/dbip.c, - src/libged/debug/CMakeLists.txt, src/libged/debug/debug.cpp, - src/libged/debugbu/CMakeLists.txt, src/libged/debugbu/debugbu.c, - src/libged/debugdir/CMakeLists.txt, - src/libged/debugdir/debugdir.c, - src/libged/debuglib/CMakeLists.txt, - src/libged/debuglib/debuglib.c, - src/libged/debugnmg/CMakeLists.txt, - src/libged/debugnmg/debugnmg.c, - src/libged/decompose/CMakeLists.txt, - src/libged/decompose/decompose.c, - src/libged/delay/CMakeLists.txt, src/libged/delay/delay.c, - src/libged/dir2ae/CMakeLists.txt, src/libged/dir2ae/dir2ae.c, - src/libged/display_list, src/libged/display_list.c, - src/libged/draw/CMakeLists.txt, src/libged/draw/draw.c, - src/libged/draw/loadview.c, src/libged/draw/preview.c, - src/libged/draw_calc, src/libged/draw_calc.cpp, - src/libged/dsp/CMakeLists.txt, src/libged/dsp/dsp.c, - src/libged/dump/CMakeLists.txt, src/libged/dump/dump.c, - src/libged/dup/CMakeLists.txt, src/libged/dup/dup.c, - src/libged/eac/CMakeLists.txt, src/libged/eac/eac.c, - src/libged/echo/CMakeLists.txt, src/libged/echo/echo.c, - src/libged/edarb/CMakeLists.txt, src/libged/edarb/edarb.c, - src/libged/edbot, src/libged/edcodes/CMakeLists.txt, - src/libged/edcodes/edcodes.c, src/libged/edcomb/CMakeLists.txt, - src/libged/edcomb/edcomb.c, src/libged/edit/CMakeLists.txt, - src/libged/edit/edit.c, src/libged/edit_metaball, - src/libged/editit/CMakeLists.txt, src/libged/editit/editit.c, - src/libged/edmater/CMakeLists.txt, src/libged/edmater/edmater.c, - src/libged/edpipe, src/libged/env/CMakeLists.txt, - src/libged/env/env.c, src/libged/erase/CMakeLists.txt, - src/libged/erase/erase.c, src/libged/exec.cpp, - src/libged/exec_mapping.cpp, src/libged/exists/CMakeLists.txt, - src/libged/exists/exists.c, src/libged/expand/CMakeLists.txt, - src/libged/expand/expand.c, src/libged/eye_pos/CMakeLists.txt, - src/libged/eye_pos/eye_pos.c, src/libged/facedef, - src/libged/facedef.c, src/libged/facetize/CMakeLists.txt, - src/libged/facetize/facetize.cpp, - src/libged/facetize/facetize_log.c, src/libged/facetize_log, - src/libged/fb2pix/CMakeLists.txt, src/libged/fb2pix/fb2pix.c, - src/libged/fbclear/CMakeLists.txt, src/libged/fbclear/fbclear.c, - src/libged/find/CMakeLists.txt, src/libged/find/find.c, - src/libged/form/CMakeLists.txt, src/libged/form/form.c, - src/libged/fracture/CMakeLists.txt, - src/libged/fracture/fracture.c, src/libged/gdiff/CMakeLists.txt, - src/libged/gdiff/gdiff.c, src/libged/ged.c, - src/libged/ged_init.cpp, src/libged/ged_private.h, - src/libged/ged_util, src/libged/ged_util.c, - src/libged/get/CMakeLists.txt, src/libged/get/get.c, - src/libged/get_autoview/CMakeLists.txt, - src/libged/get_autoview/get_autoview.c, - src/libged/get_comb/CMakeLists.txt, - src/libged/get_comb/get_comb.c, - src/libged/get_eyemodel/CMakeLists.txt, - src/libged/get_eyemodel/get_eyemodel.c, - src/libged/get_obj_bounds, src/libged/get_obj_bounds.c, - src/libged/get_solid_kp, src/libged/get_solid_kp.c, - src/libged/get_type/CMakeLists.txt, - src/libged/get_type/get_type.c, src/libged/glob/CMakeLists.txt, - src/libged/glob/glob.c, src/libged/gqa/CMakeLists.txt, - src/libged/gqa/gqa.c, src/libged/grid/CMakeLists.txt, - src/libged/grid/grid.c, src/libged/grid2model_lu/CMakeLists.txt, - src/libged/grid2model_lu/grid2model_lu.c, - src/libged/grid2view_lu/CMakeLists.txt, - src/libged/grid2view_lu/grid2view_lu.c, - src/libged/group/CMakeLists.txt, src/libged/group/group.c, - src/libged/heal/CMakeLists.txt, src/libged/heal/heal.c, - src/libged/help/CMakeLists.txt, src/libged/help/help.cpp, - src/libged/hide/CMakeLists.txt, src/libged/hide/hide.c, - src/libged/how/CMakeLists.txt, src/libged/how/how.c, - src/libged/human/CMakeLists.txt, src/libged/human/human.c, - src/libged/illum/CMakeLists.txt, src/libged/illum/illum.c, - src/libged/importFg4Section/CMakeLists.txt, - src/libged/importFg4Section/importFg4Section.c, - src/libged/include, src/libged/inside.c, - src/libged/inside/CMakeLists.txt, src/libged/inside/inside.c, - src/libged/instance/CMakeLists.txt, - src/libged/instance/instance.c, src/libged/isize/CMakeLists.txt, - src/libged/isize/isize.c, src/libged/item/CMakeLists.txt, - src/libged/item/item.c, src/libged/joint/CMakeLists.txt, - src/libged/joint/joint.c, src/libged/joint/joint.h, - src/libged/joint2/CMakeLists.txt, src/libged/joint2/joint2.c, - src/libged/keep/CMakeLists.txt, src/libged/keep/keep.c, - src/libged/keypoint/CMakeLists.txt, - src/libged/keypoint/keypoint.c, src/libged/kill/CMakeLists.txt, - src/libged/kill/kill.c, src/libged/killall/CMakeLists.txt, - src/libged/killall/killall.c, src/libged/killrefs/CMakeLists.txt, - src/libged/killrefs/killrefs.c, - src/libged/killtree/CMakeLists.txt, - src/libged/killtree/killtree.c, src/libged/label/CMakeLists.txt, - src/libged/label/label.c, src/libged/lc/CMakeLists.txt, - src/libged/lc/lc.c, src/libged/libfuncs/CMakeLists.txt, - src/libged/libfuncs/libfuncs.c, src/libged/lint/CMakeLists.txt, - src/libged/lint/lint.cpp, src/libged/list/CMakeLists.txt, - src/libged/list/list.c, src/libged/loadview, - src/libged/lod/CMakeLists.txt, src/libged/lod/lod.c, - src/libged/log/CMakeLists.txt, src/libged/log/log.c, - src/libged/lookat/CMakeLists.txt, src/libged/lookat/lookat.c, - src/libged/ls/CMakeLists.txt, src/libged/ls/ls.c, - src/libged/lt/CMakeLists.txt, src/libged/lt/lt.c, - src/libged/m2v_point/CMakeLists.txt, - src/libged/m2v_point/m2v_point.c, src/libged/make/CMakeLists.txt, - src/libged/make/make.c, src/libged/make_name/CMakeLists.txt, - src/libged/make_name/make_name.c, - src/libged/match/CMakeLists.txt, src/libged/match/match.c, - src/libged/mater/CMakeLists.txt, src/libged/mater/mater.cpp, - src/libged/metaball, src/libged/mirror/CMakeLists.txt, - src/libged/mirror/mirror.c, - src/libged/model2grid_lu/CMakeLists.txt, - src/libged/model2grid_lu/model2grid_lu.c, - src/libged/model2view/CMakeLists.txt, - src/libged/model2view/model2view.c, - src/libged/model2view_lu/CMakeLists.txt, - src/libged/model2view_lu/model2view_lu.c, - src/libged/move/CMakeLists.txt, src/libged/move/move.c, - src/libged/move_all/CMakeLists.txt, - src/libged/move_all/move_all.c, - src/libged/move_arb_edge/CMakeLists.txt, - src/libged/move_arb_edge/move_arb_edge.c, - src/libged/move_arb_face/CMakeLists.txt, - src/libged/move_arb_face/move_arb_face.c, - src/libged/mrot/CMakeLists.txt, src/libged/mrot/mrot.c, - src/libged/nirt/CMakeLists.txt, src/libged/nirt/nirt.c, - src/libged/nmg/CMakeLists.txt, src/libged/nmg/nmg.c, - src/libged/nmg/nmg_cmface.c, src/libged/nmg/nmg_collapse.c, - src/libged/nmg/nmg_fix_normals.c, src/libged/nmg/nmg_kill_f.c, - src/libged/nmg/nmg_kill_v.c, src/libged/nmg/nmg_make_v.c, - src/libged/nmg/nmg_mm.c, src/libged/nmg/nmg_move_v.c, - src/libged/nmg/nmg_simplify.c, src/libged/nmg_cmface, - src/libged/nmg_collapse, src/libged/nmg_fix_normals, - src/libged/nmg_kill_f, src/libged/nmg_kill_v, - src/libged/nmg_make_v, src/libged/nmg_mm, src/libged/nmg_move_v, - src/libged/nmg_simplify, src/libged/ocenter/CMakeLists.txt, - src/libged/ocenter/ocenter.c, src/libged/open/CMakeLists.txt, - src/libged/open/open.c, src/libged/orient/CMakeLists.txt, - src/libged/orient/orient.c, src/libged/orotate/CMakeLists.txt, - src/libged/orotate/orotate.c, src/libged/oscale/CMakeLists.txt, - src/libged/oscale/oscale.c, src/libged/otranslate/CMakeLists.txt, - src/libged/otranslate/otranslate.c, - src/libged/overlay/CMakeLists.txt, src/libged/overlay/overlay.c, - src/libged/path, src/libged/path.c, - src/libged/pathlist/CMakeLists.txt, - src/libged/pathlist/pathlist.c, - src/libged/pathsum/CMakeLists.txt, src/libged/pathsum/pathsum.c, - src/libged/perspective/CMakeLists.txt, - src/libged/perspective/perspective.c, src/libged/pipe, - src/libged/pipe.c, src/libged/pix2fb/CMakeLists.txt, - src/libged/pix2fb/pix2fb.c, src/libged/plot/CMakeLists.txt, - src/libged/plot/plot.c, src/libged/pmat/CMakeLists.txt, - src/libged/pmat/pmat.c, src/libged/pmodel2view/CMakeLists.txt, - src/libged/pmodel2view/pmodel2view.c, - src/libged/png/CMakeLists.txt, src/libged/png/png.c, - src/libged/png2fb/CMakeLists.txt, src/libged/png2fb/png2fb.c, - src/libged/pnts/CMakeLists.txt, src/libged/pnts/pnts.cpp, - src/libged/pnts_util.h, src/libged/polyclip, - src/libged/polyclip.cpp, src/libged/prcolor/CMakeLists.txt, - src/libged/prcolor/prcolor.c, src/libged/prefix/CMakeLists.txt, - src/libged/prefix/prefix.c, src/libged/preview, - src/libged/process/CMakeLists.txt, src/libged/process/process.c, - src/libged/protate/CMakeLists.txt, src/libged/protate/protate.c, - src/libged/ps/CMakeLists.txt, src/libged/ps/ps.c, - src/libged/pscale/CMakeLists.txt, src/libged/pscale/pscale.c, - src/libged/pscale/pscale.h, src/libged/pscale/scale_ehy.c, - src/libged/pscale/scale_ell.c, src/libged/pscale/scale_epa.c, - src/libged/pscale/scale_eto.c, src/libged/pscale/scale_extrude.c, - src/libged/pscale/scale_hyp.c, src/libged/pscale/scale_part.c, - src/libged/pscale/scale_rhc.c, src/libged/pscale/scale_rpc.c, - src/libged/pscale/scale_superell.c, - src/libged/pscale/scale_tgc.c, src/libged/pscale/scale_tor.c, - src/libged/pset/CMakeLists.txt, src/libged/pset/pset.c, - src/libged/ptranslate/CMakeLists.txt, - src/libged/ptranslate/ptranslate.c, - src/libged/pull/CMakeLists.txt, src/libged/pull/pull.c, - src/libged/push/CMakeLists.txt, src/libged/push/push.c, - src/libged/put/CMakeLists.txt, src/libged/put/put.c, - src/libged/put_comb/CMakeLists.txt, - src/libged/put_comb/put_comb.c, src/libged/putmat/CMakeLists.txt, - src/libged/putmat/putmat.c, src/libged/qray.c, src/libged/qray.h, - src/libged/qray/CMakeLists.txt, src/libged/qray/qray.c, - src/libged/qvrot/CMakeLists.txt, src/libged/qvrot/qvrot.c, - src/libged/rcodes/CMakeLists.txt, src/libged/rcodes/rcodes.c, - src/libged/rect/CMakeLists.txt, src/libged/rect/rect.c, - src/libged/red/CMakeLists.txt, src/libged/red/red.c, - src/libged/regdef/CMakeLists.txt, src/libged/regdef/regdef.c, - src/libged/region/CMakeLists.txt, src/libged/region/region.c, - src/libged/remove/CMakeLists.txt, src/libged/remove/remove.c, - src/libged/rfarb/CMakeLists.txt, src/libged/rfarb/rfarb.c, - src/libged/rmap/CMakeLists.txt, src/libged/rmap/rmap.c, - src/libged/rmat/CMakeLists.txt, src/libged/rmat/rmat.c, - src/libged/rmater/CMakeLists.txt, src/libged/rmater/rmater.c, - src/libged/rot/CMakeLists.txt, src/libged/rot/rot.c, - src/libged/rot/rotate_about.c, - src/libged/rot_point/CMakeLists.txt, - src/libged/rot_point/rot_point.c, src/libged/rotate_about, - src/libged/rotate_arb_face, src/libged/rotate_eto, - src/libged/rotate_eto.c, src/libged/rotate_extrude, - src/libged/rotate_extrude.c, src/libged/rotate_hyp, - src/libged/rotate_hyp.c, src/libged/rotate_tgc, - src/libged/rotate_tgc.c, src/libged/rrt/CMakeLists.txt, - src/libged/rrt/rrt.c, src/libged/rt/CMakeLists.txt, - src/libged/rt/rt.c, src/libged/rtabort/CMakeLists.txt, - src/libged/rtabort/rtabort.c, src/libged/rtcheck/CMakeLists.txt, - src/libged/rtcheck/rtcheck.c, src/libged/rtwizard/CMakeLists.txt, - src/libged/rtwizard/rtwizard.c, - src/libged/savekey/CMakeLists.txt, src/libged/savekey/savekey.c, - src/libged/saveview/CMakeLists.txt, - src/libged/saveview/saveview.c, src/libged/scale/CMakeLists.txt, - src/libged/scale/scale.c, src/libged/scale_ehy, - src/libged/scale_ell, src/libged/scale_epa, src/libged/scale_eto, - src/libged/scale_extrude, src/libged/scale_hyp, - src/libged/scale_part, src/libged/scale_rhc, - src/libged/scale_rpc, src/libged/scale_superell, - src/libged/scale_tgc, src/libged/scale_tor, - src/libged/screengrab/CMakeLists.txt, - src/libged/screengrab/screengrab.c, - src/libged/search/CMakeLists.txt, src/libged/search/search.c, - src/libged/select/CMakeLists.txt, src/libged/select/select.c, - src/libged/set_output_script/CMakeLists.txt, - src/libged/set_output_script/set_output_script.c, - src/libged/set_transparency/CMakeLists.txt, - src/libged/set_transparency/set_transparency.c, - src/libged/set_uplotOutputMode/CMakeLists.txt, - src/libged/set_uplotOutputMode/set_uplotOutputMode.c, - src/libged/setview/CMakeLists.txt, src/libged/setview/setview.c, - src/libged/shaded_mode/CMakeLists.txt, - src/libged/shaded_mode/shaded_mode.c, - src/libged/shader/CMakeLists.txt, src/libged/shader/shader.c, - src/libged/shells/CMakeLists.txt, src/libged/shells/shells.c, - src/libged/showmats/CMakeLists.txt, - src/libged/showmats/showmats.c, - src/libged/simulate/CMakeLists.txt, - src/libged/simulate/bullet/CMakeLists.txt, - src/libged/simulate/ged_command.cpp, - src/libged/simulate/utility.hpp, src/libged/slew/CMakeLists.txt, - src/libged/slew/slew.c, src/libged/snap.c, - src/libged/solid_report/CMakeLists.txt, - src/libged/solid_report/solid_report.c, - src/libged/solids_on_ray/CMakeLists.txt, - src/libged/solids_on_ray/solids_on_ray.c, - src/libged/sphgroup/CMakeLists.txt, - src/libged/sphgroup/sphgroup.c, - src/libged/summary/CMakeLists.txt, src/libged/summary/summary.c, - src/libged/sync/CMakeLists.txt, src/libged/sync/sync.c, - src/libged/tables/CMakeLists.txt, src/libged/tables/tables.c, - src/libged/tests/CMakeLists.txt, src/libged/tests/plugins.cpp, - src/libged/tire/CMakeLists.txt, src/libged/tire/tire.c, - src/libged/title/CMakeLists.txt, src/libged/title/title.c, - src/libged/tol/CMakeLists.txt, src/libged/tol/tol.c, - src/libged/tops/CMakeLists.txt, src/libged/tops/tops.c, - src/libged/tra/CMakeLists.txt, src/libged/tra/tra.c, - src/libged/trace, src/libged/trace.c, src/libged/track.c, - src/libged/track/CMakeLists.txt, src/libged/track/track.c, - src/libged/translate_extrude, src/libged/translate_extrude.c, - src/libged/translate_tgc, src/libged/translate_tgc.c, - src/libged/tree/CMakeLists.txt, src/libged/tree/tree.c, - src/libged/typein/CMakeLists.txt, src/libged/typein/typein.c, - src/libged/unhide/CMakeLists.txt, src/libged/unhide/unhide.c, - src/libged/units/CMakeLists.txt, src/libged/units/units.c, - src/libged/v2m_point/CMakeLists.txt, - src/libged/v2m_point/v2m_point.c, - src/libged/vdraw/CMakeLists.txt, src/libged/vdraw/vdraw.c, - src/libged/version/CMakeLists.txt, src/libged/version/version.c, - src/libged/view/CMakeLists.txt, src/libged/view/aet.c, - src/libged/view/center.cpp, src/libged/view/data_lines.c, - src/libged/view/eye.c, src/libged/view/ged_view.h, - src/libged/view/quat.c, src/libged/view/size.c, - src/libged/view/snap.c, src/libged/view/view.c, - src/libged/view/ypr.c, src/libged/view2grid_lu/CMakeLists.txt, - src/libged/view2grid_lu/view2grid_lu.c, - src/libged/view2model/CMakeLists.txt, - src/libged/view2model/view2model.c, - src/libged/view2model_lu/CMakeLists.txt, - src/libged/view2model_lu/view2model_lu.c, - src/libged/view2model_vec/CMakeLists.txt, - src/libged/view2model_vec/view2model_vec.c, - src/libged/viewdir/CMakeLists.txt, src/libged/viewdir/viewdir.c, - src/libged/voxelize/CMakeLists.txt, - src/libged/voxelize/voxelize.c, src/libged/vrot/CMakeLists.txt, - src/libged/vrot/vrot.c, src/libged/vutil, src/libged/vutil.c, - src/libged/wcodes/CMakeLists.txt, src/libged/wcodes/wcodes.c, - src/libged/wdb_importFg4Section, - src/libged/wdb_importFg4Section.c, - src/libged/whatid/CMakeLists.txt, src/libged/whatid/whatid.c, - src/libged/which/CMakeLists.txt, src/libged/which/which.cpp, - src/libged/which_shader/CMakeLists.txt, - src/libged/which_shader/which_shader.c, - src/libged/who/CMakeLists.txt, src/libged/who/who.c, - src/libged/wmater/CMakeLists.txt, src/libged/wmater/wmater.c, - src/libged/xpush/CMakeLists.txt, src/libged/xpush/xpush.c, - src/libged/zap/CMakeLists.txt, src/libged/zap/zap.c, - src/libged/zoom/CMakeLists.txt, src/libged/zoom/zoom.c, - src/libtclcad/CMakeLists.txt: - Merge gedplugins branch into trunk. - -2020-07-24 13:46 starseeker - - * [r76465] misc/CMakeLists.txt, misc/repoconv/CONVERT.sh, - misc/repoconv/RESUME.sh, - misc/repoconv/account-map_svnfexport.txt, - misc/repoconv/cvs_authormap_svnfexport.txt, - misc/repoconv/email_fixups.txt: - Making scripts better reflect conversion process - - If at all avoidable, we don't want to have to manually update the - custom commit - information again now that repowork allows for post-conversion - email - manipulation. However, we also want account-map to be accurate. - The secondary - repositories in the SVN repository (rt3, geomcore, etc.) will - eventually be - converted with svn-fast-export - they do not use the custom - process developed - for the main history. Consequently, they will need a correct - account-map file - with the most current addresses. - - To handle this, we specifically stash the versions of the maps - that match the - custom commits currently checked in and update the conversion - scripts to reference - them specifically. Also stash the email mapping file used by - repowork, so we - can make sure we're capturing all updates made between the start - of the conversion - and the final post-processing. - -2020-07-24 12:58 starseeker - - * [r76464] misc/repoconv/CONVERT.sh, misc/repoconv/RESUME.sh: - Doing this manually right now, but make the scripts look more - like what the final process is actually turning out to be. - -2020-07-24 12:48 starseeker - - * [r76463] misc/repowork/commit.cpp, misc/repowork/repowork.cpp, - misc/repowork/repowork.h: - Need better check for original-oid information - -2020-07-24 12:22 starseeker - - * [r76462] misc/repowork/repowork.cpp: - Ah - a fast-import generated without original-oid information - won't work if we're dealing with notes - check and bail instead - of proceeding. - -2020-07-24 05:24 brlcad - - * [r76461] ., NEWS, TODO: - merge release branch from r76000:76451 back to trunk. NEWS should - typically reflect identical on RELEASE and STABLE - -2020-07-24 04:55 brlcad - - * [r76460] NEWS: - document the in command bug fixes with DB5_MINORTYPE_BRLCAD not - getting set. appears to have broken four of the newer object - types. - -2020-07-24 04:29 brlcad - - * [r76459] src/libged/typein/typein.c: - superell, joints, and script objects were also busted with - DB5_MAJORTYPE_BRLCAD not being set. - -2020-07-23 22:37 starseeker - - * [r76457] misc/repowork/commit.cpp, misc/repowork/repowork.cpp, - misc/repowork/repowork.h: - Make wrap width a user option - -2020-07-23 22:24 starseeker - - * [r76456] misc/repowork/commit.cpp, misc/repowork/repowork.cpp, - misc/repowork/repowork.h: - Improve commit line wrapping, assign svn authors as well to - commit metadata given map - -2020-07-23 22:01 starseeker - - * [r76454] regress/licenses/licenses_check.cpp: - ignore repowork for license check - -2020-07-23 21:38 brlcad - - * [r76453] NEWS, src/external/Creo/assembly.cpp: - per user request, always write out the assembly name to a - CREO_NAME attribute. this makes it easier to script and inspect, - and it informs when the object name is later changed in BRL-CAD. - -2020-07-23 20:26 starseeker - - * [r76452] misc/repoconv/NOTES: - Prune down output to a space separated number/name pair - -2020-07-23 19:05 starseeker - - * [r76448] misc/repoconv/NOTES: - I thought this was going to be too tricky to be worthwhile, but - repowork may offer enough flexibility for us to make use of it - - make a note on how to get a listing that maps between SVN - revision numbers and author ids. - -2020-07-23 14:15 starseeker - - * [r76444] misc/CMakeLists.txt, misc/repowork, - misc/repowork/CMakeLists.txt, misc/repowork/COPYING, - misc/repowork/README, misc/repowork/TextFlow.hpp, - misc/repowork/blob.cpp, misc/repowork/commit.cpp, - misc/repowork/cxxopts.hpp, misc/repowork/misc_cmds.cpp, - misc/repowork/repowork.cpp, misc/repowork/repowork.h, - misc/repowork/reset.cpp, misc/repowork/tag.cpp: - Stash the repowork tool being used to post-process git - fast-import files. Unlike the rest of the repoconv code this has - potential use down the road, so give it its own directory. - -2020-07-23 13:08 brlcad - - * [r76443] src/libged/typein/typein.c: - majortype is missing?? - -2020-07-23 03:50 brlcad - - * [r76442] misc/repoconv/account-map, misc/repoconv/cvs_authormap: - woot, finally got ahold of phil! 692 more accounted for. - -2020-07-23 03:09 brlcad - - * [r76441] AUTHORS: - remove obsolete arl.army.mil e-mails and update the activity - flags - -2020-07-23 02:44 brlcad - - * [r76440] misc/repoconv/cvs_authormap: - sync with the other one - -2020-07-23 02:41 brlcad - - * [r76439] misc/repoconv/account-map, misc/repoconv/cvs_authormap: - grosh confirmed he would like his llnl address be used - -2020-07-22 21:39 starseeker - - * [r76433] src/libgcv/plugins/asc/asc.cpp: - returning int, not void - -2020-07-20 22:55 brlcad - - * [r76379] misc/repoconv/account-map: - update owens addr - -2020-07-20 19:45 starseeker - - * [r76377] ., misc/CMake/CMakeLists.txt, misc/CMake/Fuzzer.cmake, - regress, regress/CMakeLists.txt, regress/analyze.asc, - regress/asc.sh, regress/asc/CMakeLists.txt, regress/asc/asc.sh, - regress/asc/asc2dsp.sh, regress/asc2dsp.sh, regress/bots, - regress/bots.sh, regress/burst/CMakeLists.txt, regress/comgeom, - regress/comgeom.sh, regress/dsp.sh, regress/dsp/CMakeLists.txt, - regress/dsp/dsp.sh, regress/fuzz/CMakeLists.txt, regress/gqa, - regress/gqa.sh, regress/iges, regress/iges.sh, - regress/library.sh, regress/lights, regress/lights.cmake, - regress/lights.ref.pix, regress/lights.sh, regress/mged.sh, - regress/mged/CMakeLists.txt, regress/mged/mged.sh, - regress/mged/mged_test.sh, regress/mged_test.sh, regress/moss, - regress/moss.ref.pix, regress/moss.sh, regress/nirt.sh, - regress/nirt/CMakeLists.txt, regress/nirt/nirt.sh, - regress/nurbs/CMakeLists.txt, regress/red, regress/red.sh, - regress/rtedge, regress/rtedge.ref.pix.gz, - regress/rtedge.ref2.pix.gz, regress/rtedge.ref3.pix.gz, - regress/rtedge.ref4.pix.gz, regress/rtedge.ref5.pix.gz, - regress/rtedge.sh, regress/shaders, - regress/shaders.eagleCAD-512x438.pix, regress/shaders.ref.pix, - regress/shaders.sh, regress/solids, regress/solids.ref.pix, - regress/solids.sh, regress/solids.simple.ref.pix, regress/spdi, - regress/spdi.ref.pix, regress/spdi.sh, regress/tgms, - regress/weight, regress/weight.sh: - Merge organization of regression tests from bioh branch into - trunk - r76368 through r76376 - -2020-07-20 15:43 starseeker - - * [r76376] misc/repoconv/svnfexport_git.cxx: - Also need to skip r76359 - -2020-07-17 17:59 starseeker - - * [r76366] ., doc, doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/glm.txt, regress, regress/CMakeLists.txt, - src/libged/3ptarb, src/libged/3ptarb.c, - src/libged/CMakeLists.txt, src/libged/adc, src/libged/adc.c, - src/libged/adjust, src/libged/adjust.c, src/libged/ae2dir, - src/libged/ae2dir.c, src/libged/analyze, src/libged/analyze.c, - src/libged/annotate, src/libged/annotate.c, src/libged/arb, - src/libged/arb.c, src/libged/arced, src/libged/arced.c, - src/libged/arot, src/libged/arot.c, src/libged/attr, - src/libged/attr.cpp, src/libged/autoview, src/libged/autoview.c, - src/libged/bb, src/libged/bb.c, src/libged/bev, src/libged/bev.c, - src/libged/bigE, src/libged/bigE.c, src/libged/blast, - src/libged/blast.c, src/libged/bo, src/libged/bo.c, - src/libged/bot_condense, src/libged/bot_condense.c, - src/libged/bot_decimate, src/libged/bot_decimate.c, - src/libged/bot_dump, src/libged/bot_dump.c, - src/libged/bot_face_fuse, src/libged/bot_face_fuse.c, - src/libged/bot_face_sort, src/libged/bot_face_sort.c, - src/libged/bot_flip, src/libged/bot_flip.c, src/libged/bot_fuse, - src/libged/bot_fuse.c, src/libged/bot_merge, - src/libged/bot_merge.c, src/libged/bot_smooth, - src/libged/bot_smooth.c, src/libged/bot_split, - src/libged/bot_split.c, src/libged/bot_sync, - src/libged/bot_sync.c, src/libged/bot_vertex_fuse, - src/libged/bot_vertex_fuse.c, src/libged/cat, src/libged/cat.c, - src/libged/cc, src/libged/cc.c, src/libged/clone, - src/libged/clone.c, src/libged/coil, src/libged/coil.c, - src/libged/color, src/libged/color.c, src/libged/columns, - src/libged/columns.c, src/libged/comb, src/libged/comb.c, - src/libged/comb_color, src/libged/comb_color.c, - src/libged/comb_std, src/libged/comb_std.c, src/libged/combmem, - src/libged/combmem.c, src/libged/concat, src/libged/concat.cpp, - src/libged/copy, src/libged/copy.c, src/libged/copyeval, - src/libged/copyeval.c, src/libged/copymat, src/libged/copymat.c, - src/libged/cpi, src/libged/cpi.c, src/libged/dag, - src/libged/dag.cpp, src/libged/dbip, src/libged/dbip.c, - src/libged/debug, src/libged/debug.cpp, src/libged/debugbu, - src/libged/debugbu.c, src/libged/debugdir, src/libged/debugdir.c, - src/libged/debuglib, src/libged/debuglib.c, src/libged/debugnmg, - src/libged/debugnmg.c, src/libged/decompose, - src/libged/decompose.c, src/libged/delay, src/libged/delay.c, - src/libged/dir2ae, src/libged/dir2ae.c, src/libged/display_list, - src/libged/display_list.c, src/libged/draw, src/libged/draw.c, - src/libged/draw_calc, src/libged/draw_calc.cpp, src/libged/dsp, - src/libged/dsp.c, src/libged/dump, src/libged/dump.c, - src/libged/dup, src/libged/dup.c, src/libged/eac, - src/libged/eac.c, src/libged/echo, src/libged/echo.c, - src/libged/edarb, src/libged/edarb.c, src/libged/edbot, - src/libged/edbot.c, src/libged/edcodes, src/libged/edcodes.c, - src/libged/edcomb, src/libged/edcomb.c, src/libged/edit, - src/libged/edit.c, src/libged/edit_metaball, - src/libged/edit_metaball.c, src/libged/editit, - src/libged/editit.c, src/libged/edmater, src/libged/edmater.c, - src/libged/edpipe, src/libged/edpipe.c, src/libged/env, - src/libged/env.c, src/libged/erase, src/libged/erase.c, - src/libged/exists, src/libged/exists.c, src/libged/expand, - src/libged/expand.c, src/libged/eye_pos, src/libged/eye_pos.c, - src/libged/facedef, src/libged/facedef.c, src/libged/facetize, - src/libged/facetize.cpp, src/libged/facetize_log, - src/libged/facetize_log.c, src/libged/fb2pix, - src/libged/fb2pix.c, src/libged/fbclear, src/libged/fbclear.c, - src/libged/find, src/libged/find.c, src/libged/form, - src/libged/form.c, src/libged/fracture, src/libged/fracture.c, - src/libged/gdiff, src/libged/gdiff.c, src/libged/ged_util, - src/libged/ged_util.c, src/libged/get, src/libged/get.c, - src/libged/get_autoview, src/libged/get_autoview.c, - src/libged/get_comb, src/libged/get_comb.c, - src/libged/get_eyemodel, src/libged/get_eyemodel.c, - src/libged/get_obj_bounds, src/libged/get_obj_bounds.c, - src/libged/get_solid_kp, src/libged/get_solid_kp.c, - src/libged/get_type, src/libged/get_type.c, src/libged/glob, - src/libged/glob.c, src/libged/gqa, src/libged/gqa.c, - src/libged/grid, src/libged/grid.c, src/libged/grid2model_lu, - src/libged/grid2model_lu.c, src/libged/grid2view_lu, - src/libged/grid2view_lu.c, src/libged/group, src/libged/group.c, - src/libged/heal, src/libged/heal.c, src/libged/hide, - src/libged/hide.c, src/libged/how, src/libged/how.c, - src/libged/human, src/libged/human.c, src/libged/illum, - src/libged/illum.c, src/libged/importFg4Section, - src/libged/importFg4Section.c, src/libged/inside, - src/libged/inside.c, src/libged/instance, src/libged/instance.c, - src/libged/isize, src/libged/isize.c, src/libged/item, - src/libged/item.c, src/libged/joint, src/libged/joint.c, - src/libged/joint.h, src/libged/joint2, src/libged/joint2.c, - src/libged/keep, src/libged/keep.c, src/libged/keypoint, - src/libged/keypoint.c, src/libged/kill, src/libged/kill.c, - src/libged/killall, src/libged/killall.c, src/libged/killrefs, - src/libged/killrefs.c, src/libged/killtree, - src/libged/killtree.c, src/libged/label, src/libged/label.c, - src/libged/lc, src/libged/lc.c, src/libged/libfuncs, - src/libged/libfuncs.c, src/libged/lint, src/libged/lint.cpp, - src/libged/list, src/libged/list.c, src/libged/loadview, - src/libged/loadview.c, src/libged/lod, src/libged/lod.c, - src/libged/log, src/libged/log.c, src/libged/lookat, - src/libged/lookat.c, src/libged/ls, src/libged/ls.c, - src/libged/lt, src/libged/lt.c, src/libged/m2v_point, - src/libged/m2v_point.c, src/libged/make, src/libged/make.c, - src/libged/make_name, src/libged/make_name.c, src/libged/match, - src/libged/match.c, src/libged/mater, src/libged/mater.cpp, - src/libged/mirror, src/libged/mirror.c, src/libged/model2grid_lu, - src/libged/model2grid_lu.c, src/libged/model2view, - src/libged/model2view.c, src/libged/model2view_lu, - src/libged/model2view_lu.c, src/libged/move, src/libged/move.c, - src/libged/move_all, src/libged/move_all.c, - src/libged/move_arb_edge, src/libged/move_arb_edge.c, - src/libged/move_arb_face, src/libged/move_arb_face.c, - src/libged/mrot, src/libged/mrot.c, src/libged/nirt, - src/libged/nirt.c, src/libged/nmg, src/libged/nmg.c, - src/libged/nmg_cmface, src/libged/nmg_cmface.c, - src/libged/nmg_collapse, src/libged/nmg_collapse.c, - src/libged/nmg_fix_normals, src/libged/nmg_fix_normals.c, - src/libged/nmg_kill_f, src/libged/nmg_kill_f.c, - src/libged/nmg_kill_v, src/libged/nmg_kill_v.c, - src/libged/nmg_make_v, src/libged/nmg_make_v.c, - src/libged/nmg_mm, src/libged/nmg_mm.c, src/libged/nmg_move_v, - src/libged/nmg_move_v.c, src/libged/nmg_simplify, - src/libged/nmg_simplify.c, src/libged/ocenter, - src/libged/ocenter.c, src/libged/open, src/libged/open.c, - src/libged/orient, src/libged/orient.c, src/libged/orotate, - src/libged/orotate.c, src/libged/oscale, src/libged/oscale.c, - src/libged/otranslate, src/libged/otranslate.c, - src/libged/overlay, src/libged/overlay.c, src/libged/path, - src/libged/path.c, src/libged/pathlist, src/libged/pathlist.c, - src/libged/pathsum, src/libged/pathsum.c, src/libged/perspective, - src/libged/perspective.c, src/libged/pix2fb, src/libged/pix2fb.c, - src/libged/plot, src/libged/plot.c, src/libged/pmat, - src/libged/pmat.c, src/libged/pmodel2view, - src/libged/pmodel2view.c, src/libged/png, src/libged/png.c, - src/libged/png2fb, src/libged/png2fb.c, src/libged/pnts, - src/libged/pnts.cpp, src/libged/polyclip, - src/libged/polyclip.cpp, src/libged/polyclip/polyclip.cpp, - src/libged/prcolor, src/libged/prcolor.c, src/libged/prefix, - src/libged/prefix.c, src/libged/preview, src/libged/preview.c, - src/libged/process, src/libged/process.c, src/libged/protate, - src/libged/protate.c, src/libged/ps, src/libged/ps.c, - src/libged/pscale, src/libged/pscale.c, src/libged/pset, - src/libged/pset.c, src/libged/ptranslate, - src/libged/ptranslate.c, src/libged/pull, src/libged/pull.c, - src/libged/push, src/libged/push.c, src/libged/put, - src/libged/put.c, src/libged/put_comb, src/libged/put_comb.c, - src/libged/putmat, src/libged/putmat.c, src/libged/qray, - src/libged/qray.c, src/libged/qvrot, src/libged/qvrot.c, - src/libged/rcodes, src/libged/rcodes.c, src/libged/rect, - src/libged/rect.c, src/libged/red, src/libged/red.c, - src/libged/regdef, src/libged/regdef.c, src/libged/region, - src/libged/region.c, src/libged/remove, src/libged/remove.c, - src/libged/rfarb, src/libged/rfarb.c, src/libged/rmap, - src/libged/rmap.c, src/libged/rmat, src/libged/rmat.c, - src/libged/rmater, src/libged/rmater.c, src/libged/rot, - src/libged/rot.c, src/libged/rot_point, src/libged/rot_point.c, - src/libged/rotate_about, src/libged/rotate_about.c, - src/libged/rotate_arb_face, src/libged/rotate_arb_face.c, - src/libged/rotate_eto, src/libged/rotate_eto.c, - src/libged/rotate_extrude, src/libged/rotate_extrude.c, - src/libged/rotate_hyp, src/libged/rotate_hyp.c, - src/libged/rotate_tgc, src/libged/rotate_tgc.c, src/libged/rrt, - src/libged/rrt.c, src/libged/rt, src/libged/rt.c, - src/libged/rtabort, src/libged/rtabort.c, src/libged/rtcheck, - src/libged/rtcheck.c, src/libged/rtwizard, src/libged/rtwizard.c, - src/libged/savekey, src/libged/savekey.c, src/libged/saveview, - src/libged/saveview.c, src/libged/scale, src/libged/scale.c, - src/libged/scale_ehy, src/libged/scale_ehy.c, - src/libged/scale_ell, src/libged/scale_ell.c, - src/libged/scale_epa, src/libged/scale_epa.c, - src/libged/scale_eto, src/libged/scale_eto.c, - src/libged/scale_extrude, src/libged/scale_extrude.c, - src/libged/scale_hyp, src/libged/scale_hyp.c, - src/libged/scale_part, src/libged/scale_part.c, - src/libged/scale_rhc, src/libged/scale_rhc.c, - src/libged/scale_rpc, src/libged/scale_rpc.c, - src/libged/scale_superell, src/libged/scale_superell.c, - src/libged/scale_tgc, src/libged/scale_tgc.c, - src/libged/scale_tor, src/libged/scale_tor.c, - src/libged/screengrab, src/libged/screengrab.c, - src/libged/search, src/libged/search.c, src/libged/select, - src/libged/select.c, src/libged/set_output_script, - src/libged/set_output_script.c, src/libged/set_transparency, - src/libged/set_transparency.c, src/libged/set_uplotOutputMode, - src/libged/set_uplotOutputMode.c, src/libged/setview, - src/libged/setview.c, src/libged/shaded_mode, - src/libged/shaded_mode.c, src/libged/shader, src/libged/shader.c, - src/libged/shells, src/libged/shells.c, src/libged/showmats, - src/libged/showmats.c, src/libged/slew, src/libged/slew.c, - src/libged/solid_report, src/libged/solid_report.c, - src/libged/solids_on_ray, src/libged/solids_on_ray.c, - src/libged/sphgroup, src/libged/sphgroup.c, src/libged/summary, - src/libged/summary.c, src/libged/sync, src/libged/sync.c, - src/libged/tables, src/libged/tables.c, src/libged/tire, - src/libged/tire.c, src/libged/title, src/libged/title.c, - src/libged/tol, src/libged/tol.c, src/libged/tops, - src/libged/tops.c, src/libged/tra, src/libged/tra.c, - src/libged/trace, src/libged/trace.c, src/libged/track, - src/libged/track.c, src/libged/translate_extrude, - src/libged/translate_extrude.c, src/libged/translate_tgc, - src/libged/translate_tgc.c, src/libged/tree, src/libged/tree.c, - src/libged/typein, src/libged/typein.c, src/libged/unhide, - src/libged/unhide.c, src/libged/units, src/libged/units.c, - src/libged/v2m_point, src/libged/v2m_point.c, src/libged/vdraw, - src/libged/vdraw.c, src/libged/version, src/libged/version.c, - src/libged/view2grid_lu, src/libged/view2grid_lu.c, - src/libged/view2model, src/libged/view2model.c, - src/libged/view2model_lu, src/libged/view2model_lu.c, - src/libged/view2model_vec, src/libged/view2model_vec.c, - src/libged/viewdir, src/libged/viewdir.c, src/libged/voxelize, - src/libged/voxelize.c, src/libged/vrot, src/libged/vrot.c, - src/libged/vutil, src/libged/vutil.c, src/libged/wcodes, - src/libged/wcodes.c, src/libged/wdb_importFg4Section, - src/libged/wdb_importFg4Section.c, src/libged/whatid, - src/libged/whatid.c, src/libged/which, src/libged/which.cpp, - src/libged/which_shader, src/libged/which_shader.c, - src/libged/who, src/libged/who.c, src/libged/wmater, - src/libged/wmater.c, src/libged/xpush, src/libged/xpush.c, - src/libged/zap, src/libged/zap.c, src/libtclcad/CMakeLists.txt, - src/qged/CMakeLists.txt, src/qged/display/glm/glm/common.hpp, - src/qged/display/glm/glm/detail/_features.hpp, - src/qged/display/glm/glm/detail/_fixes.hpp, - src/qged/display/glm/glm/detail/_noise.hpp, - src/qged/display/glm/glm/detail/_swizzle.hpp, - src/qged/display/glm/glm/detail/_swizzle_func.hpp, - src/qged/display/glm/glm/detail/_vectorize.hpp, - src/qged/display/glm/glm/detail/compute_common.hpp, - src/qged/display/glm/glm/detail/compute_vector_relational.hpp, - src/qged/display/glm/glm/detail/glm.cpp, - src/qged/display/glm/glm/detail/qualifier.hpp, - src/qged/display/glm/glm/detail/setup.hpp, - src/qged/display/glm/glm/detail/type_float.hpp, - src/qged/display/glm/glm/detail/type_half.hpp, - src/qged/display/glm/glm/detail/type_mat2x2.hpp, - src/qged/display/glm/glm/detail/type_mat2x3.hpp, - src/qged/display/glm/glm/detail/type_mat2x4.hpp, - src/qged/display/glm/glm/detail/type_mat3x2.hpp, - src/qged/display/glm/glm/detail/type_mat3x3.hpp, - src/qged/display/glm/glm/detail/type_mat3x4.hpp, - src/qged/display/glm/glm/detail/type_mat4x2.hpp, - src/qged/display/glm/glm/detail/type_mat4x3.hpp, - src/qged/display/glm/glm/detail/type_mat4x4.hpp, - src/qged/display/glm/glm/detail/type_quat.hpp, - src/qged/display/glm/glm/detail/type_vec1.hpp, - src/qged/display/glm/glm/detail/type_vec2.hpp, - src/qged/display/glm/glm/detail/type_vec3.hpp, - src/qged/display/glm/glm/detail/type_vec4.hpp, - src/qged/display/glm/glm/exponential.hpp, - src/qged/display/glm/glm/ext.hpp, - src/qged/display/glm/glm/ext/matrix_clip_space.hpp, - src/qged/display/glm/glm/ext/matrix_common.hpp, - src/qged/display/glm/glm/ext/matrix_double2x2.hpp, - src/qged/display/glm/glm/ext/matrix_double2x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double2x3.hpp, - src/qged/display/glm/glm/ext/matrix_double2x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double2x4.hpp, - src/qged/display/glm/glm/ext/matrix_double2x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double3x2.hpp, - src/qged/display/glm/glm/ext/matrix_double3x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double3x3.hpp, - src/qged/display/glm/glm/ext/matrix_double3x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double3x4.hpp, - src/qged/display/glm/glm/ext/matrix_double3x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double4x2.hpp, - src/qged/display/glm/glm/ext/matrix_double4x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double4x3.hpp, - src/qged/display/glm/glm/ext/matrix_double4x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double4x4.hpp, - src/qged/display/glm/glm/ext/matrix_double4x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float2x2.hpp, - src/qged/display/glm/glm/ext/matrix_float2x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float2x3.hpp, - src/qged/display/glm/glm/ext/matrix_float2x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float2x4.hpp, - src/qged/display/glm/glm/ext/matrix_float2x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float3x2.hpp, - src/qged/display/glm/glm/ext/matrix_float3x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float3x3.hpp, - src/qged/display/glm/glm/ext/matrix_float3x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float3x4.hpp, - src/qged/display/glm/glm/ext/matrix_float3x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float4x2.hpp, - src/qged/display/glm/glm/ext/matrix_float4x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float4x3.hpp, - src/qged/display/glm/glm/ext/matrix_float4x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float4x4.hpp, - src/qged/display/glm/glm/ext/matrix_float4x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_int2x2.hpp, - src/qged/display/glm/glm/ext/matrix_int2x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int2x3.hpp, - src/qged/display/glm/glm/ext/matrix_int2x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int2x4.hpp, - src/qged/display/glm/glm/ext/matrix_int2x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int3x2.hpp, - src/qged/display/glm/glm/ext/matrix_int3x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int3x3.hpp, - src/qged/display/glm/glm/ext/matrix_int3x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int3x4.hpp, - src/qged/display/glm/glm/ext/matrix_int3x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int4x2.hpp, - src/qged/display/glm/glm/ext/matrix_int4x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int4x3.hpp, - src/qged/display/glm/glm/ext/matrix_int4x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int4x4.hpp, - src/qged/display/glm/glm/ext/matrix_int4x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_projection.hpp, - src/qged/display/glm/glm/ext/matrix_relational.hpp, - src/qged/display/glm/glm/ext/matrix_transform.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x2.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x3.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x4.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x2.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x3.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x4.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x2.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x3.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x4.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x4_sized.hpp, - src/qged/display/glm/glm/ext/quaternion_common.hpp, - src/qged/display/glm/glm/ext/quaternion_double.hpp, - src/qged/display/glm/glm/ext/quaternion_double_precision.hpp, - src/qged/display/glm/glm/ext/quaternion_exponential.hpp, - src/qged/display/glm/glm/ext/quaternion_float.hpp, - src/qged/display/glm/glm/ext/quaternion_float_precision.hpp, - src/qged/display/glm/glm/ext/quaternion_geometric.hpp, - src/qged/display/glm/glm/ext/quaternion_relational.hpp, - src/qged/display/glm/glm/ext/quaternion_transform.hpp, - src/qged/display/glm/glm/ext/quaternion_trigonometric.hpp, - src/qged/display/glm/glm/ext/scalar_common.hpp, - src/qged/display/glm/glm/ext/scalar_constants.hpp, - src/qged/display/glm/glm/ext/scalar_int_sized.hpp, - src/qged/display/glm/glm/ext/scalar_integer.hpp, - src/qged/display/glm/glm/ext/scalar_packing.hpp, - src/qged/display/glm/glm/ext/scalar_relational.hpp, - src/qged/display/glm/glm/ext/scalar_uint_sized.hpp, - src/qged/display/glm/glm/ext/scalar_ulp.hpp, - src/qged/display/glm/glm/ext/vector_bool1.hpp, - src/qged/display/glm/glm/ext/vector_bool1_precision.hpp, - src/qged/display/glm/glm/ext/vector_bool2.hpp, - src/qged/display/glm/glm/ext/vector_bool2_precision.hpp, - src/qged/display/glm/glm/ext/vector_bool3.hpp, - src/qged/display/glm/glm/ext/vector_bool3_precision.hpp, - src/qged/display/glm/glm/ext/vector_bool4.hpp, - src/qged/display/glm/glm/ext/vector_bool4_precision.hpp, - src/qged/display/glm/glm/ext/vector_common.hpp, - src/qged/display/glm/glm/ext/vector_double1.hpp, - src/qged/display/glm/glm/ext/vector_double1_precision.hpp, - src/qged/display/glm/glm/ext/vector_double2.hpp, - src/qged/display/glm/glm/ext/vector_double2_precision.hpp, - src/qged/display/glm/glm/ext/vector_double3.hpp, - src/qged/display/glm/glm/ext/vector_double3_precision.hpp, - src/qged/display/glm/glm/ext/vector_double4.hpp, - src/qged/display/glm/glm/ext/vector_double4_precision.hpp, - src/qged/display/glm/glm/ext/vector_float1.hpp, - src/qged/display/glm/glm/ext/vector_float1_precision.hpp, - src/qged/display/glm/glm/ext/vector_float2.hpp, - src/qged/display/glm/glm/ext/vector_float2_precision.hpp, - src/qged/display/glm/glm/ext/vector_float3.hpp, - src/qged/display/glm/glm/ext/vector_float3_precision.hpp, - src/qged/display/glm/glm/ext/vector_float4.hpp, - src/qged/display/glm/glm/ext/vector_float4_precision.hpp, - src/qged/display/glm/glm/ext/vector_int1.hpp, - src/qged/display/glm/glm/ext/vector_int1_sized.hpp, - src/qged/display/glm/glm/ext/vector_int2.hpp, - src/qged/display/glm/glm/ext/vector_int2_sized.hpp, - src/qged/display/glm/glm/ext/vector_int3.hpp, - src/qged/display/glm/glm/ext/vector_int3_sized.hpp, - src/qged/display/glm/glm/ext/vector_int4.hpp, - src/qged/display/glm/glm/ext/vector_int4_sized.hpp, - src/qged/display/glm/glm/ext/vector_integer.hpp, - src/qged/display/glm/glm/ext/vector_packing.hpp, - src/qged/display/glm/glm/ext/vector_relational.hpp, - src/qged/display/glm/glm/ext/vector_uint1.hpp, - src/qged/display/glm/glm/ext/vector_uint1_sized.hpp, - src/qged/display/glm/glm/ext/vector_uint2.hpp, - src/qged/display/glm/glm/ext/vector_uint2_sized.hpp, - src/qged/display/glm/glm/ext/vector_uint3.hpp, - src/qged/display/glm/glm/ext/vector_uint3_sized.hpp, - src/qged/display/glm/glm/ext/vector_uint4.hpp, - src/qged/display/glm/glm/ext/vector_uint4_sized.hpp, - src/qged/display/glm/glm/ext/vector_ulp.hpp, - src/qged/display/glm/glm/fwd.hpp, - src/qged/display/glm/glm/geometric.hpp, - src/qged/display/glm/glm/glm.hpp, - src/qged/display/glm/glm/gtc/bitfield.hpp, - src/qged/display/glm/glm/gtc/color_space.hpp, - src/qged/display/glm/glm/gtc/constants.hpp, - src/qged/display/glm/glm/gtc/epsilon.hpp, - src/qged/display/glm/glm/gtc/integer.hpp, - src/qged/display/glm/glm/gtc/matrix_access.hpp, - src/qged/display/glm/glm/gtc/matrix_integer.hpp, - src/qged/display/glm/glm/gtc/matrix_inverse.hpp, - src/qged/display/glm/glm/gtc/matrix_transform.hpp, - src/qged/display/glm/glm/gtc/noise.hpp, - src/qged/display/glm/glm/gtc/packing.hpp, - src/qged/display/glm/glm/gtc/quaternion.hpp, - src/qged/display/glm/glm/gtc/random.hpp, - src/qged/display/glm/glm/gtc/reciprocal.hpp, - src/qged/display/glm/glm/gtc/round.hpp, - src/qged/display/glm/glm/gtc/type_aligned.hpp, - src/qged/display/glm/glm/gtc/type_precision.hpp, - src/qged/display/glm/glm/gtc/type_ptr.hpp, - src/qged/display/glm/glm/gtc/ulp.hpp, - src/qged/display/glm/glm/gtc/vec1.hpp, - src/qged/display/glm/glm/gtx/associated_min_max.hpp, - src/qged/display/glm/glm/gtx/bit.hpp, - src/qged/display/glm/glm/gtx/closest_point.hpp, - src/qged/display/glm/glm/gtx/color_encoding.hpp, - src/qged/display/glm/glm/gtx/color_space.hpp, - src/qged/display/glm/glm/gtx/color_space_YCoCg.hpp, - src/qged/display/glm/glm/gtx/common.hpp, - src/qged/display/glm/glm/gtx/compatibility.hpp, - src/qged/display/glm/glm/gtx/component_wise.hpp, - src/qged/display/glm/glm/gtx/dual_quaternion.hpp, - src/qged/display/glm/glm/gtx/easing.hpp, - src/qged/display/glm/glm/gtx/euler_angles.hpp, - src/qged/display/glm/glm/gtx/extend.hpp, - src/qged/display/glm/glm/gtx/extended_min_max.hpp, - src/qged/display/glm/glm/gtx/exterior_product.hpp, - src/qged/display/glm/glm/gtx/fast_exponential.hpp, - src/qged/display/glm/glm/gtx/fast_square_root.hpp, - src/qged/display/glm/glm/gtx/fast_trigonometry.hpp, - src/qged/display/glm/glm/gtx/functions.hpp, - src/qged/display/glm/glm/gtx/gradient_paint.hpp, - src/qged/display/glm/glm/gtx/handed_coordinate_space.hpp, - src/qged/display/glm/glm/gtx/hash.hpp, - src/qged/display/glm/glm/gtx/integer.hpp, - src/qged/display/glm/glm/gtx/intersect.hpp, - src/qged/display/glm/glm/gtx/io.hpp, - src/qged/display/glm/glm/gtx/log_base.hpp, - src/qged/display/glm/glm/gtx/matrix_cross_product.hpp, - src/qged/display/glm/glm/gtx/matrix_decompose.hpp, - src/qged/display/glm/glm/gtx/matrix_factorisation.hpp, - src/qged/display/glm/glm/gtx/matrix_interpolation.hpp, - src/qged/display/glm/glm/gtx/matrix_major_storage.hpp, - src/qged/display/glm/glm/gtx/matrix_operation.hpp, - src/qged/display/glm/glm/gtx/matrix_query.hpp, - src/qged/display/glm/glm/gtx/matrix_transform_2d.hpp, - src/qged/display/glm/glm/gtx/mixed_product.hpp, - src/qged/display/glm/glm/gtx/norm.hpp, - src/qged/display/glm/glm/gtx/normal.hpp, - src/qged/display/glm/glm/gtx/normalize_dot.hpp, - src/qged/display/glm/glm/gtx/number_precision.hpp, - src/qged/display/glm/glm/gtx/optimum_pow.hpp, - src/qged/display/glm/glm/gtx/orthonormalize.hpp, - src/qged/display/glm/glm/gtx/perpendicular.hpp, - src/qged/display/glm/glm/gtx/polar_coordinates.hpp, - src/qged/display/glm/glm/gtx/projection.hpp, - src/qged/display/glm/glm/gtx/quaternion.hpp, - src/qged/display/glm/glm/gtx/range.hpp, - src/qged/display/glm/glm/gtx/raw_data.hpp, - src/qged/display/glm/glm/gtx/rotate_normalized_axis.hpp, - src/qged/display/glm/glm/gtx/rotate_vector.hpp, - src/qged/display/glm/glm/gtx/scalar_multiplication.hpp, - src/qged/display/glm/glm/gtx/scalar_relational.hpp, - src/qged/display/glm/glm/gtx/spline.hpp, - src/qged/display/glm/glm/gtx/std_based_type.hpp, - src/qged/display/glm/glm/gtx/string_cast.hpp, - src/qged/display/glm/glm/gtx/texture.hpp, - src/qged/display/glm/glm/gtx/transform.hpp, - src/qged/display/glm/glm/gtx/transform2.hpp, - src/qged/display/glm/glm/gtx/type_aligned.hpp, - src/qged/display/glm/glm/gtx/type_trait.hpp, - src/qged/display/glm/glm/gtx/vec_swizzle.hpp, - src/qged/display/glm/glm/gtx/vector_angle.hpp, - src/qged/display/glm/glm/gtx/vector_query.hpp, - src/qged/display/glm/glm/gtx/wrap.hpp, - src/qged/display/glm/glm/integer.hpp, - src/qged/display/glm/glm/mat2x2.hpp, - src/qged/display/glm/glm/mat2x3.hpp, - src/qged/display/glm/glm/mat2x4.hpp, - src/qged/display/glm/glm/mat3x2.hpp, - src/qged/display/glm/glm/mat3x3.hpp, - src/qged/display/glm/glm/mat3x4.hpp, - src/qged/display/glm/glm/mat4x2.hpp, - src/qged/display/glm/glm/mat4x3.hpp, - src/qged/display/glm/glm/mat4x4.hpp, - src/qged/display/glm/glm/matrix.hpp, - src/qged/display/glm/glm/packing.hpp, - src/qged/display/glm/glm/simd/common.h, - src/qged/display/glm/glm/simd/exponential.h, - src/qged/display/glm/glm/simd/geometric.h, - src/qged/display/glm/glm/simd/integer.h, - src/qged/display/glm/glm/simd/matrix.h, - src/qged/display/glm/glm/simd/neon.h, - src/qged/display/glm/glm/simd/packing.h, - src/qged/display/glm/glm/simd/platform.h, - src/qged/display/glm/glm/simd/trigonometric.h, - src/qged/display/glm/glm/simd/vector_relational.h, - src/qged/display/glm/glm/trigonometric.hpp, - src/qged/display/glm/glm/vec2.hpp, - src/qged/display/glm/glm/vec3.hpp, - src/qged/display/glm/glm/vec4.hpp, - src/qged/display/glm/glm/vector_relational.hpp: - Merge file moves and distcheck updates from bioh through r76365 - -2020-07-17 06:38 d_rossberg - - * [r76357] misc/repoconv/account-map: - even if it looks like the shorter email address works, the GitHub - Docs say that accounts created after July 18, 2017, have to use - the ID number in the user name - -2020-07-16 22:38 starseeker - - * [r76356] misc/repoconv/NOTES: - Add some notes on git_stats - -2020-07-16 21:44 starseeker - - * [r76355] misc/CMakeLists.txt, misc/repoconv/svn_git_diff.cxx: - Stash a utility for reporting svn and git commits that aren't - represented in the conversion - not perfect, but output should be - helpful for checking the conversion. - -2020-07-16 18:35 starseeker - - * [r76353] misc/repoconv/NOTES: - looks like git push --all does the job - -2020-07-16 15:11 starseeker - - * [r76351] include/dm/bview.h, src/libdm/bview_util.c, - src/libtclcad/tclcad_obj.c, src/mged/attach.c, src/mged/setup.c: - Experiment with trying to spot recursive calls to callbacks - no - sure I like this even if it works, but especially in Tcl land - it's not hard to accidentally get into a recursive situation so - would be nice to have some sort of guard. - -2020-07-16 13:39 starseeker - - * [r76350] src/libtclcad/tclcad_obj_wrapper.c: - Some of the libged commands need to update the views or otherwise - interact with the application environment - that's the purpose of - the various wrappers. It would be nice if the libged commands - could handle this themselves somehow rather than requiring the - parent application to know about the details of each command... - -2020-07-15 20:17 starseeker - - * [r76349] src/libtclcad/tclcad_obj.c: - Separate out the commands that have a libged function from those - that do not. - -2020-07-15 11:09 starseeker - - * [r76348] src/libtclcad/CMakeLists.txt, src/libtclcad/dm.c, - src/libtclcad/tclcad_obj.c, src/libtclcad/tclcad_private.h, - src/libtclcad/view/autoview.c, src/libtclcad/view/draw.c, - src/libtclcad/view/view.h: - relocate a couple more functions - -2020-07-15 01:31 starseeker - - * [r76347] src/libtclcad/view/tclcad_views.c, - src/libtclcad/view/util.c: - rename - -2020-07-15 01:30 starseeker - - * [r76346] src/libtclcad/CMakeLists.txt, - src/libtclcad/tclcad_obj.c, src/libtclcad/tclcad_private.h, - src/libtclcad/view/draw.c, src/libtclcad/view/faceplate.c, - src/libtclcad/view/labels.c, src/libtclcad/view/tclcad_views.c, - src/libtclcad/view/view.h: - more refactoring - -2020-07-15 01:11 starseeker - - * [r76345] src/libtclcad/CMakeLists.txt, src/libtclcad/fb.c, - src/libtclcad/tclcad_mouse.c, src/libtclcad/tclcad_obj.c, - src/libtclcad/tclcad_obj_wrapper.c, - src/libtclcad/tclcad_polygons.c, src/libtclcad/tclcad_private.h, - src/libtclcad/view/lines.c, src/libtclcad/view/refresh.c, - src/libtclcad/view/tclcad_views.c, src/libtclcad/view/view.h: - More relocation - -2020-07-15 00:45 starseeker - - * [r76344] src/libtclcad/CMakeLists.txt, - src/libtclcad/tclcad_obj.c, src/libtclcad/view/arrows.c, - src/libtclcad/view/autoview.c, src/libtclcad/view/axes.c, - src/libtclcad/view/tclcad_views.c, src/libtclcad/view/view.h: - Break down view logic more specifically. - -2020-07-15 00:24 starseeker - - * [r76343] src/libtclcad/CMakeLists.txt, - src/libtclcad/tclcad_views.c, src/libtclcad/view, - src/libtclcad/view/tclcad_views.c: - add view subdirectory - -2020-07-15 00:17 starseeker - - * [r76342] src/libtclcad/CMakeLists.txt, src/libtclcad/bn.c, - src/libtclcad/bn_funcs.c, src/libtclcad/bu.c, - src/libtclcad/bu_funcs.c, src/libtclcad/cmdhist.c, - src/libtclcad/cmdhist_obj.c, src/libtclcad/dm.c, - src/libtclcad/dm_tcl.c, src/libtclcad/fb.c, - src/libtclcad/fb_obj.c, src/libtclcad/fbserv.c, - src/libtclcad/fbserv_obj.c, src/libtclcad/rt.c, - src/libtclcad/rt_funcs.c: - rename files - -2020-07-15 00:11 starseeker - - * [r76341] src/libtclcad/CMakeLists.txt, src/libtclcad/dm_obj.c, - src/libtclcad/dm_tcl.c: - Consolidate libdm specific files - -2020-07-15 00:08 starseeker - - * [r76340] src/libtclcad/fb_obj.c, src/libtclcad/tclcad_obj.c, - src/libtclcad/tclcad_private.h: - move fb functions - -2020-07-14 21:57 starseeker - - * [r76339] include/tclcad.h: - Remove the lower level calls - -2020-07-14 21:55 starseeker - - * [r76338] src/conv/asc/asc2g.c, src/mged/attach.c: - Use the app tclcad_init - -2020-07-14 21:34 starseeker - - * [r76337] src/libtclcad/CMakeLists.txt, - src/libtclcad/tclcad_obj.c, src/libtclcad/tclcad_polygons.c, - src/libtclcad/tclcad_private.h: - Extract polygon logic into its own file - some of the mouse - routines probably belong here as well... - -2020-07-14 20:46 starseeker - - * [r76336] src/libtclcad/CMakeLists.txt, - src/libtclcad/tclcad_mouse.c, src/libtclcad/tclcad_obj.c, - src/libtclcad/tclcad_private.h, src/libtclcad/tclcad_views.c: - Group mouse related functions - -2020-07-14 20:18 starseeker - - * [r76335] src/libtclcad/CMakeLists.txt, - src/libtclcad/tclcad_obj.c, src/libtclcad/tclcad_private.h, - src/libtclcad/tclcad_views.c: - Extract at least some of the logic related to views - -2020-07-14 19:54 starseeker - - * [r76334] src/libtclcad/CMakeLists.txt, - src/libtclcad/tclcad_global.c, src/libtclcad/tclcad_obj.c, - src/libtclcad/tclcad_obj_wrapper.c, - src/libtclcad/tclcad_private.h: - Start working on figuring out the pieces of tclcad_obj. - -2020-07-14 19:19 starseeker - - * [r76333] src/conv/asc/asc2g.c, src/libtclcad/tclcad_init.c, - src/libtclcad/tclcad_obj.c, src/libtclcad/tclcad_private.h: - Go_Init -> Ged_Init - -2020-07-14 19:16 starseeker - - * [r76332] include/tclcad.h, src/libtclcad/bu_funcs.c, - src/libtclcad/cmdhist_obj.c, src/libtclcad/dm_obj.c, - src/libtclcad/dm_tcl.c, src/libtclcad/fb_obj.c, - src/libtclcad/tclcad_init.c, src/libtclcad/tclcad_private.h, - src/mged/attach.c: - Variety of libtclcad adjustments. Expose only the Tclcad init. - -2020-07-14 18:58 starseeker - - * [r76331] src/libtclcad/CMakeLists.txt, src/libtclcad/tclcad.c, - src/libtclcad/tclcad_init.c: - consolidate - -2020-07-14 18:54 starseeker - - * [r76330] src/libtclcad/CMakeLists.txt, src/libtclcad/auto_path.c, - src/libtclcad/tclcadAutoPath.c: - rename - -2020-07-14 18:53 starseeker - - * [r76329] src/libtclcad/rt_funcs.c: - fix header - -2020-07-14 18:48 starseeker - - * [r76328] src/libtclcad/CMakeLists.txt, src/libtclcad/libfuncs.c, - src/libtclcad/rt_funcs.c: - Rename - -2020-07-14 18:47 starseeker - - * [r76327] src/libtclcad/CMakeLists.txt, src/libtclcad/bn_funcs.c, - src/libtclcad/bu_funcs.c, src/libtclcad/libfuncs.c: - Group bu and bn lib functions into their own files - -2020-07-14 16:34 starseeker - - * [r76326] src/libgcv/gcv.c, src/libgcv/plugins/asc/asc.cpp, - src/libgcv/plugins/asc/asc_v4.cpp: - Now able to write out a v4 asc file with gcv for moss - -2020-07-14 15:59 starseeker - - * [r76325] src/libgcv/plugins/asc/asc.cpp, - src/libgcv/plugins/asc/asc_v4.cpp: - Get as far as producing a .g file from a v4 asc input with gcv. - Not exactly the same binary output as asc2g, but gdiff doesn't - report any differences so probably pretty close... - -2020-07-14 15:12 starseeker - - * [r76324] src/libbg/tests/polygon_op.c: - Add difference and intersection checks as well. (Xor isn't - supported by the bundled clipper) - -2020-07-14 14:44 starseeker - - * [r76323] src/libbg/tests/CMakeLists.txt, - src/libbg/tests/polygon_op.c: - Set up a basic test of the polygon boolean op logic using - clipper. Only union tested so far - still need to add the other - tests. - -2020-07-14 14:35 starseeker - - * [r76322] include/bg/polygon.h, include/bg/polygon_types.h, - src/libbg/polygon.c: - add 3d plot for polygons - -2020-07-14 14:08 starseeker - - * [r76321] src/libbg/polygon_op.cpp: - Allow NULL matrix specifications - just use the identity matrix - in that case. - -2020-07-13 23:36 starseeker - - * [r76320] misc/repoconv/gitattributes: - Remove a few duplicates, always use lf for .sh files - -2020-07-11 03:18 starseeker - - * [r76319] regress/asc.sh, regress/asc/v4.g: - Can't do much interesting yet, but at least run g2asc on the v4 - file with more primitive types. - -2020-07-11 02:58 starseeker - - * [r76318] BUGS: - Apparently rhc doesn't make the downgrade successfully - also - can't make on with either make or in commands in a v4 database. - -2020-07-10 15:41 starseeker - - * [r76317] CMakeLists.txt: - Tweak converage flags - may need to revisit this... - -2020-07-10 14:40 starseeker - - * [r76316] regress/CMakeLists.txt, regress/asc/poly.g, - regress/asc/v4.g: - More v4 primitives. Trying to collect enough to exercise g2asc - code. - -2020-07-10 14:26 starseeker - - * [r76315] regress/CMakeLists.txt, regress/asc, regress/asc/poly.g: - Was quite involved to create a poly solid for testing - - deprecated, can exist only in v4 databases (gets converted to bot - for v5) and apparently only the nmg_simplify command offers a - path to creating one (and only when a v4 .g is open - wipes out - in v5 with an export failure). Now that I've got it, stash it for - testing purposes. - -2020-07-10 13:54 starseeker - - * [r76314] src/libged/make.c: - Don't document it - this is not a primitive we want to encourage - use of - but support writing out a cline with make for testing - purposes. - -2020-07-10 13:33 starseeker - - * [r76313] regress/CMakeLists.txt, regress/asc.sh: - Add a regression test to exercise g2asc, asc2g and dbupgrade, - specifically involving the v4 logic since we don't really test - that other than the asc2g conversion of our v4 asc sample files. - Not trying to be too aggressive, just looking for expected - behavior with moss.g using gdiff - -2020-07-10 13:05 starseeker - - * [r76312] NEWS: - gdiff filtering option previously required a match on both sides - of a diff result to filter - switched behavior to apply the - filter if either side matches. Example -~ when attempting to - filter out a result involving the removal of a region_id, '! - -attr region_id=-1' didn't work because it only matched one side - of the diff. - -2020-07-10 13:02 starseeker - - * [r76311] NEWS: - Switched gdiff to using multiple specifications of -v rather than - numerical arguments to -v to control output verbosity, which is a - more normal approach to this feature. Provide a -q option to back - down the verbosity as well that operates in the same manner - (default output is not quiet, so need a way to back down.) They - will interact - '-v -v -q -q' will result in the default output - verbosity. - -2020-07-10 12:58 starseeker - - * [r76310] src/gtools/gdiff/gdiff.c: - Reject a gdiff result if either side trips the search filters, - not just when both do. - -2020-07-10 12:37 starseeker - - * [r76309] doc/docbook/system/man1/gdiff.xml, include/bu/opt.h, - src/gtools/gdiff/gdiff.c, src/gtools/gdiff/gdiff.h, - src/libbu/opt.c, src/libged/ged_util.c: - Switch gdiff verbosity option to using the 'multiple - specifications of -v increases verbosity' model instead of - specific numerical values - -2020-07-10 08:31 brlcad - - * [r76308] NEWS: - improved the combination editor buttons to no longer display an - error if you just hit Apply or Reset. now it looks at whether the - name or expression are empty and behaves accordingly, better. - -2020-07-10 08:28 brlcad - - * [r76307] src/tclscripts/mged/comb.tcl: - Combination Editor's buttons were improved all around to - gracefully - handle empty combination names and do the right thing, depending - on - whether the combination name or expression or both are empty. - This - addresses a user-reported issue with the Combination Editor where - pressing Apply could result in a mislading error dialog about - comb_control(id,attrs) not being set. All around better behavior. - -2020-07-10 07:27 brlcad - - * [r76306] src/tclscripts/mged/comb.tcl: - display a warning if the user just clicks the ok or apply button, - instead of proceeding to attempt to create an empty-name - combination. - -2020-07-10 07:18 brlcad - - * [r76305] src/tclscripts/mged/comb.tcl: - there may not be attributes saved, so don't pop up a dialog about - it - -2020-07-10 07:10 brlcad - - * [r76304] NEWS: - updated usage statements on e_id, eac, edcomb, item, regdef, - reid, relos, and remat to consistently denote ID and los%. - -2020-07-10 07:10 brlcad - - * [r76303] src/tclscripts/mged/help.tcl: - adjust the wording and note reid's optional increment argument - -2020-07-10 07:07 brlcad - - * [r76302] doc/docbook/system/mann/eac.xml, - doc/docbook/system/mann/edcomb.xml, - doc/docbook/system/mann/item.xml, - doc/docbook/system/mann/regdef.xml, - doc/docbook/system/mann/reid.xml: - update the manual pages to be more consistent with the usage - statements - -2020-07-10 05:46 brlcad - - * [r76301] misc/repoconv/account-map, misc/repoconv/cvs_authormap: - update to carl's alias so his commits can be represented - -2020-07-10 05:19 brlcad - - * [r76300] src/tclscripts/mged/comb.tcl: - nix extraneous paren - -2020-07-10 05:14 brlcad - - * [r76299] src/libged/ged_private.h, src/libged/get_comb.c, - src/libged/put_comb.c, src/tclscripts/lib/Ged.tcl, - src/tclscripts/mged/comb.tcl, src/tclscripts/mged/helpdevel.tcl: - as they appear to be undocumented and not user-facing, move the - is_region flag and four following idents to the end of the - put_comb and get_comb list. this makes it possible to - deconditionalize the put_comb call, and further simplifying the - code all around. - -2020-07-10 05:10 brlcad - - * [r76298] src/tclscripts/archer/ArcherCore.tcl: - document what the four flags seem to do - -2020-07-10 04:23 brlcad - - * [r76297] src/libged/red.c: - no longer true - -2020-07-10 04:10 brlcad - - * [r76296] src/libged/put_comb.c: - don't allow put_comb to attempt to read/write empty combination - names. this is trivially achieved via the combination panel gui - in mged, just hit Apply. - -2020-07-10 04:08 brlcad - - * [r76295] src/librt/db_lookup.c: - don't allow empty object names to be added to directories - -2020-07-10 03:34 brlcad - - * [r76294] src/libged/put_comb.c: - more semantic readability and code simplification - -2020-07-10 01:50 brlcad - - * [r76293] src/libged/put_comb.c: - broad code cleanup. rename vars for readability, reduce function - complexity, eliminate an apparently unnecessary static global. - -2020-07-10 01:01 starseeker - - * [r76292] src/libgcv/plugins/asc/asc_v4.cpp: - See if we can use dbi_fp and db_version to do the v4 write IFF we - have a v4 .g file - -2020-07-09 21:34 starseeker - - * [r76291] src/libgcv/plugins/asc/asc_v4.cpp: - Urk - v4 .g writing is going to be a job to retrofit for modern - (v5) inputs. Maybe reject any input except a v4 db file? Or just - dispense with the ability to write out this format, since - db_upgrade is supposed to handle v4 upgrading. - -2020-07-09 21:15 starseeker - - * [r76290] src/libgcv/plugins/asc/asc_v4.cpp: - Start working on turning the v4 asc code into library code, - rather than an app usin global vars. - -2020-07-09 17:15 starseeker - - * [r76289] src/libgcv/plugins/asc/asc_v4.cpp, - src/libgcv/plugins/asc/asc_v5.cpp: - Start roughing in the asc input code as well (for v4 - v5 needs a - rewrite.) - -2020-07-09 16:15 starseeker - - * [r76288] misc/repoconv/NOTES: - Save some notes on github CI setup. - -2020-07-09 03:58 brlcad - - * [r76287] src/libged/put_comb.c: - clean up and use BU for more robust t/f validation - -2020-07-08 18:14 brlcad - - * [r76286] TODO: - add commands reported by help that don't have a manual page - -2020-07-08 16:18 starseeker - - * [r76285] src/libgcv/plugins/asc/asc.cpp, - src/libgcv/plugins/asc/asc_v4.cpp, - src/libgcv/plugins/asc/asc_v5.cpp: - Pull the g2asc logic from g2asc.c and rough it into the - respective gcv plugin files. Not working or close to it - just - figuring out which pieces belong where. For v5, once we know what - we're writing out we'll know what we need to read in - anything - added to a .asc file not written by g2asc will promote an asc - file to an all-up Tcl script needing the full libtclcad logic to - evaluate. - -2020-07-08 15:09 starseeker - - * [r76284] misc/repoconv/NOTES: - Add a note about managing user and email with newer git versions - -2020-07-08 14:44 starseeker - - * [r76283] include/ged.h: - Add a note about when to use/not use the libged argc/argv API. - -2020-07-08 14:19 brlcad - - * [r76282] src/tclscripts/mged/help.tcl: - update help messages for e_id, eac, edcomb, item, regdef, reid, - relos, and remat to consistently denote ID and los%. do not - present ident as being synonymous with regionID as idents are - used elsewhere to imply all of them. eliminate references to - assembly as inconsistent terminology. - -2020-07-08 13:29 brlcad - - * [r76281] src/libged/README: - clarify the features and verb-noun pattern being used - -2020-07-07 19:49 starseeker - - * [r76280] src/libgcv/plugins/asc/CMakeLists.txt, - src/libgcv/plugins/asc/asc.cpp, - src/libgcv/plugins/asc/asc_read.cpp, - src/libgcv/plugins/asc/asc_v4.cpp, - src/libgcv/plugins/asc/asc_v5.cpp: - Stub in both reading and writing calls - no functionality as yet. - -2020-07-07 19:31 brlcad - - * [r76279] misc/repoconv/account-map, misc/repoconv/cvs_authormap: - ben requested a different address - -2020-07-07 19:17 starseeker - - * [r76278] misc/mime_cad.types, - src/libgcv/plugins/asc/asc_read.cpp: - Generalize - BRL-CAD asc is not just Tcl based. - -2020-07-07 19:05 starseeker - - * [r76277] src/libgcv/plugins/asc, - src/libgcv/plugins/asc/CMakeLists.txt, - src/libgcv/plugins/asc/asc_read.cpp: - Start looking at what a Tcl-free asc2g will need. This a tall - order and not really possible in the general v5 ASC case, since - for v5 asc2g makes available libtclcad's commands and evaluates - the asc file as a Tcl script. The practical approach looks to be: - a) bring over v4 parsing without Tcl, which seems to be present - in asc2g. b) identify the subset of commands used by g2asc for - v5, and implement parsing and evaluation for those commands - specifically c) IFF b fails to read a file and Tcl is enabled - during compilation, fall back on the libtclcad Tcl evaluation to - import the file. Fully executed, we should be able to handle - anything written out by g2asc without Tcl (assuming there aren't - actual Tcl syntax evaluations buried in v5 somewhere) and if - someone has manually altered or created a more complex file that - actually hard requires Tcl we'll support if if Tcl is enabled. - -2020-07-07 15:12 starseeker - - * [r76276] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/gdal_gcv_plugin.txt, - doc/legal/embedded/gdal_gcv_plugin1.txt, - doc/legal/embedded/gdal_gcv_plugin2.txt, - src/libgcv/plugins/gdal/CMakeLists.txt, - src/libgcv/plugins/gdal/gdal.cpp, - src/libgcv/plugins/gdal/gdal_ll.cpp: - Break gdal derived code out of plugin into its own file - -2020-07-07 14:26 starseeker - - * [r76275] misc/CMakeLists.txt, misc/repoconv/gitattributes: - Start working on a gitattributes file which is intended to do - (more or less) what https://brlcad.org/wiki/Mime-types does for - subversion in terms of identifying file patterns with specific - line ending types to manage (or not, as the case may be). - -2020-07-06 13:41 starseeker - - * [r76274] misc/repoconv/CONVERT.sh: - Latest git cvs-fast-export changes the output of our conversion, - introducing a few differences in the SVN/CVS comparison. Not sure - which answer is 'better' at this point, but the difference - appears to be cvs-fast-export populating some RCS tags. We're - deliberately trying not to expand those at all for any of this, - so use the cvs-fast-export version used when the original - splicing work was done. - -2020-07-06 03:10 starseeker - - * [r76273] misc/repoconv/custom/r29886_cjohnson_mac_hack.fi: - Whoops, update both references - -2020-07-06 02:43 starseeker - - * [r76272] misc/repoconv/custom/r29886_cjohnson_mac_hack.fi: - From sha1 will still need to change - not sure if it'll be the - one we used in the last attempt or not, but give it a try. - -2020-07-06 02:42 starseeker - - * [r76271] misc/CMakeLists.txt: - list script for distcheck - -2020-07-06 02:38 starseeker - - * [r76270] misc/repoconv/custom/32009-blob.fi, - misc/repoconv/custom/32046-blob.fi, - misc/repoconv/custom/33147-blob.fi, - misc/repoconv/custom/33713-blob.fi, - misc/repoconv/custom/36631-blob.fi, - misc/repoconv/custom/54916-blob.fi, - misc/repoconv/custom/60192-blob.fi, - misc/repoconv/custom/60421-blob.fi, - misc/repoconv/custom/61579-blob.fi, - misc/repoconv/custom/61844-blob.fi, - misc/repoconv/custom/61845-blob.fi, - misc/repoconv/custom/r29886_cjohnson_mac_hack.fi, - misc/repoconv/custom/r29886_cvs_svn_trunk_sync.fi: - Revert inadvertent copyright statement changes in repoconv fast - import files - -2020-07-06 02:32 starseeker - - * [r76269] misc/repoconv/custom/r29886_cvs_svn_trunk_sync.fi: - Decent chance the copyright update explains the unanticiapted - file sha changes - revert to the old values until we get this - sorted out. - -2020-07-06 02:28 starseeker - - * [r76268] misc/repoconv/custom/r29886_cjohnson_mac_hack.fi: - Urk. The copyright update script looks like it got some of the fi - files. Revert the data size change - correct fix is to repair the - fi files. - -2020-07-05 13:43 starseeker - - * [r76267] misc/repoconv/NOTES, - misc/repoconv/custom/r29886_branches.fi, - misc/repoconv/custom/r29886_cjohnson_mac_hack.fi, - misc/repoconv/custom/r29886_cvs_svn_rel-5-1-branch_sync.fi, - misc/repoconv/custom/r29886_cvs_svn_trunk_sync.fi, - misc/repoconv/custom/r29886_tags.fi, misc/repoconv/tagmap.sh: - Couple odd things about these updates - in particular the - mac_hack file data block size was slightly different?? - but - updated so they can be applied to the current state. Since the - tag sha1 values keep getting updated, improve the script that - finds them for us given the availability of the older git - conversion - the manual mapping was a lot of work, so we don't - want to have to redo it if we can preserve the knowledge by sha1 - lookup instead. - -2020-07-04 13:26 starseeker - - * [r76266] misc/repoconv/cvs_authormap: - sync maps - -2020-07-03 13:59 brlcad - - * [r76265] misc/repoconv/account-map: - a couple update requests came in - -2020-07-03 02:51 starseeker - - * [r76264] misc/repoconv/account-map, misc/repoconv/cvs_authormap: - Incorrectly formatted entry - -2020-07-03 02:38 starseeker - - * [r76263] misc/repoconv/manual_merge_info.tar.gz: - Adjust committer info for manual merge data. - -2020-07-03 02:37 brlcad - - * [r76262] misc/repoconv/cvs_authormap: - sort alpha. now both comparable with a simple sed 's/ =//g' on - this one - -2020-07-03 02:33 brlcad - - * [r76261] misc/repoconv/account-map: - sort alphabetical - -2020-07-03 02:26 starseeker - - * [r76260] misc/repoconv/custom/30760-commit.fi, - misc/repoconv/custom/36053-commit.fi, - misc/repoconv/custom/36472-commit.fi, - misc/repoconv/custom/36633-commit.fi, - misc/repoconv/custom/36843-commit.fi, - misc/repoconv/custom/39465-commit.fi, - misc/repoconv/custom/61149-commit.fi, - misc/repoconv/custom/64060-commit.fi, - misc/repoconv/custom/65867-commit.fi, - misc/repoconv/custom/68611-commit.fi, - misc/repoconv/custom/69909-commit.fi, - misc/repoconv/custom/70326-commit.fi, - misc/repoconv/custom/71925-commit.fi, - misc/repoconv/custom/72855-commit.fi, - misc/repoconv/custom/73059-commit.fi: - Adjust committer info in custom commits to match new maps - -2020-07-03 02:08 starseeker - - * [r76259] misc/repoconv/cvs_authormap: - Update cvs authormap to match the svn version - -2020-07-03 02:02 starseeker - - * [r76258] misc/repoconv/account-map: - Restore the jebbly entry, using modern github email address (need - to confirm this is the right one to use, ideally). - -2020-07-02 22:09 brlcad - - * [r76257] misc/repoconv/account-map: - no reply to confirm the llnl address for john grosh, so replace - with alias - -2020-07-02 21:35 brlcad - - * [r76256] misc/repoconv/account-map: - armin requested to use his own mail server - -2020-07-02 08:42 brlcad - - * [r76255] misc/repoconv/account-map: - use jim's actual github address - -2020-07-02 08:34 brlcad - - * [r76254] misc/repoconv/account-map: - the cvs_authormap needs to be sync'd, but ... we should finally - be good to go - -2020-07-01 23:46 brlcad - - * [r76253] misc/repoconv/account-map: - nearly done, just need to finalize the aliases and follow back on - the responses. - -2020-07-01 19:52 starseeker - - * [r76252] include/bg/CMakeLists.txt, include/bg/polygon.h, - include/bg/polygon_types.h, include/dm/bview.h, - include/dm/bview_util.h, include/ged/view.h, - src/libbg/CMakeLists.txt, src/libbg/polygon_op.cpp, - src/libdm/CMakeLists.txt, src/libdm/bview_polygon.cpp, - src/libged/polyclip.cpp, src/libtclcad/tclcad_obj.c: - Push the polygon logic down into libbg - -2020-07-01 18:14 starseeker - - * [r76251] include/dm/bview_util.h, src/libdm/bview_polygon.cpp, - src/libged/polyclip.cpp, src/libtclcad/tclcad_obj.c: - Move more polygon code below libged - -2020-07-01 17:59 starseeker - - * [r76250] include/dm/bview_util.h, src/libdm/bview_polygon.cpp, - src/libged/polyclip.cpp: - Move polygon overlap check - -2020-07-01 17:22 starseeker - - * [r76249] include/dm/bview_util.h, include/ged/view.h, - src/libdm/CMakeLists.txt, src/libdm/bview_polygon.cpp, - src/libged/polyclip.cpp, src/libtclcad/tclcad_obj.c: - start shifting the polygon code - -2020-07-01 16:50 starseeker - - * [r76248] include/dm/CMakeLists.txt, include/dm/bview_util.h, - include/dm/util.h, src/libdm/CMakeLists.txt, - src/libdm/bview_util.c, src/libged/autoview.c, - src/libged/eye_pos.c, src/libged/ged.c, src/libged/ged_private.h, - src/libged/grid.c, src/libged/loadview.c, src/libged/lookat.c, - src/libged/mirror.c, src/libged/orient.c, - src/libged/perspective.c, src/libged/pmat.c, - src/libged/preview.c, src/libged/qvrot.c, src/libged/rect.c, - src/libged/rmat.c, src/libged/scale.c, src/libged/setview.c, - src/libged/view/aet.c, src/libged/view/center.cpp, - src/libged/view/eye.c, src/libged/view/quat.c, - src/libged/view/size.c, src/libged/view/snap.c, - src/libged/view/ypr.c, src/libged/vutil.c, - src/libged/zoom/zoom.c, src/mged/mged.c: - Set up to start pushing bview-only functionality down the library - stack. This won't impact functionality, but will make it more - immediately clear when functions are operating on the libtclcad, - libged, or bview levels. - -2020-06-30 22:45 starseeker - - * [r76247] src/libtclcad/tclcad_obj.c, src/tclscripts/lib/Ged.tcl: - Try using the libged mat4x3pnt call in libtclcad as well as mged - -2020-06-30 22:19 starseeker - - * [r76246] src/qged/TODO.qt: - Note a couple more widgets of possible interest - -2020-06-30 21:50 starseeker - - * [r76245] src/qged/TODO.qt: - Make a note that qicstable might be interesting for some data - manipulation scenarios - -2020-06-30 21:05 starseeker - - * [r76244] src/qged/display/AxesRenderer.cpp, - src/qged/display/AxesRenderer.h, src/qged/display/Camera.h, - src/qged/display/OrthographicCamera.cpp, - src/qged/display/OrthographicCamera.h, - src/qged/display/Renderable.h: - remove old headers - -2020-06-30 21:00 starseeker - - * [r76243] src/qged/cadtreemodel.cpp: - Sadeep found another use of obsolete Qt method. - -2020-06-30 20:58 starseeker - - * [r76242] src/qged/display/Display.cpp, - src/qged/display/Display.h, src/qged/display/DisplayManager.cpp, - src/qged/display/DisplayManager.h, - src/qged/display/GeometryRenderer.cpp, - src/qged/display/GeometryRenderer.h, src/qged/main_window.cpp: - Fix by Sadeep Darshana for the detachment of a display window - losing the display of the solid wireframe. - -2020-06-30 18:01 brlcad - - * [r76241] misc/repoconv/account-map: - commit some working notes from a while back to semaphore when - done - -2020-06-30 13:41 starseeker - - * [r76240] src/qged/cadattributes.cpp: - Sadeep noticed we're using an obsolete method here - comment out - for now, need to revisit when we have time. - -2020-06-30 13:22 starseeker - - * [r76239] src/qged/display/GeometryRenderer.cpp, - src/qged/display/GeometryRenderer.h: - Fix by Sadeep Darshana for solids not drawing on Linux - turns - out we can't call OpenGl methods inside Qt slots. - -2020-06-29 17:17 starseeker - - * [r76238] regress/repository/repocheck.cpp: - add qtads to the filters - -2020-06-29 17:14 starseeker - - * [r76237] include/ged/view.h, src/libged/view/snap.c, - src/libtclcad/tclcad_obj.c, src/tclscripts/lib/Ged.tcl: - At last, got view centering to respond to a line snap. Not sure - about other pieces of this - needs much more testing - but still, - got first sane result from a mouse input. - -2020-06-29 16:27 starseeker - - * [r76236] src/libged/view/data_lines.c, src/libged/view/snap.c, - src/libtclcad/tclcad_obj.c: - More work on line snapping... still not able to get it to respond - to the Archer mouse... - -2020-06-29 14:22 starseeker - - * [r76235] src/tclscripts/lib/Ged.tcl: - Write out a message when we're supposed to be line snapping - -2020-06-29 13:53 starseeker - - * [r76234] src/qged/CMakeLists.txt, src/qged/cadapp.cpp, - src/qged/display, src/qged/display/AxesRenderer.cpp, - src/qged/display/AxesRenderer.h, src/qged/display/Camera.h, - src/qged/display/Display.cpp, src/qged/display/Display.h, - src/qged/display/DisplayManager.cpp, - src/qged/display/DisplayManager.h, - src/qged/display/GeometryRenderer.cpp, - src/qged/display/GeometryRenderer.h, - src/qged/display/OrthographicCamera.cpp, - src/qged/display/OrthographicCamera.h, - src/qged/display/README.txt, src/qged/display/Renderable.h, - src/qged/display/glm, src/qged/display/glm/CMakeLists.txt, - src/qged/display/glm/cmake, src/qged/display/glm/cmake/glm, - src/qged/display/glm/cmake/glm/glmConfig-version.cmake, - src/qged/display/glm/cmake/glm/glmConfig.cmake, - src/qged/display/glm/copying.txt, src/qged/display/glm/glm, - src/qged/display/glm/glm/CMakeLists.txt, - src/qged/display/glm/glm/common.hpp, - src/qged/display/glm/glm/detail, - src/qged/display/glm/glm/detail/_features.hpp, - src/qged/display/glm/glm/detail/_fixes.hpp, - src/qged/display/glm/glm/detail/_noise.hpp, - src/qged/display/glm/glm/detail/_swizzle.hpp, - src/qged/display/glm/glm/detail/_swizzle_func.hpp, - src/qged/display/glm/glm/detail/_vectorize.hpp, - src/qged/display/glm/glm/detail/compute_common.hpp, - src/qged/display/glm/glm/detail/compute_vector_relational.hpp, - src/qged/display/glm/glm/detail/func_common.inl, - src/qged/display/glm/glm/detail/func_common_simd.inl, - src/qged/display/glm/glm/detail/func_exponential.inl, - src/qged/display/glm/glm/detail/func_exponential_simd.inl, - src/qged/display/glm/glm/detail/func_geometric.inl, - src/qged/display/glm/glm/detail/func_geometric_simd.inl, - src/qged/display/glm/glm/detail/func_integer.inl, - src/qged/display/glm/glm/detail/func_integer_simd.inl, - src/qged/display/glm/glm/detail/func_matrix.inl, - src/qged/display/glm/glm/detail/func_matrix_simd.inl, - src/qged/display/glm/glm/detail/func_packing.inl, - src/qged/display/glm/glm/detail/func_packing_simd.inl, - src/qged/display/glm/glm/detail/func_trigonometric.inl, - src/qged/display/glm/glm/detail/func_trigonometric_simd.inl, - src/qged/display/glm/glm/detail/func_vector_relational.inl, - src/qged/display/glm/glm/detail/func_vector_relational_simd.inl, - src/qged/display/glm/glm/detail/glm.cpp, - src/qged/display/glm/glm/detail/qualifier.hpp, - src/qged/display/glm/glm/detail/setup.hpp, - src/qged/display/glm/glm/detail/type_float.hpp, - src/qged/display/glm/glm/detail/type_half.hpp, - src/qged/display/glm/glm/detail/type_half.inl, - src/qged/display/glm/glm/detail/type_mat2x2.hpp, - src/qged/display/glm/glm/detail/type_mat2x2.inl, - src/qged/display/glm/glm/detail/type_mat2x3.hpp, - src/qged/display/glm/glm/detail/type_mat2x3.inl, - src/qged/display/glm/glm/detail/type_mat2x4.hpp, - src/qged/display/glm/glm/detail/type_mat2x4.inl, - src/qged/display/glm/glm/detail/type_mat3x2.hpp, - src/qged/display/glm/glm/detail/type_mat3x2.inl, - src/qged/display/glm/glm/detail/type_mat3x3.hpp, - src/qged/display/glm/glm/detail/type_mat3x3.inl, - src/qged/display/glm/glm/detail/type_mat3x4.hpp, - src/qged/display/glm/glm/detail/type_mat3x4.inl, - src/qged/display/glm/glm/detail/type_mat4x2.hpp, - src/qged/display/glm/glm/detail/type_mat4x2.inl, - src/qged/display/glm/glm/detail/type_mat4x3.hpp, - src/qged/display/glm/glm/detail/type_mat4x3.inl, - src/qged/display/glm/glm/detail/type_mat4x4.hpp, - src/qged/display/glm/glm/detail/type_mat4x4.inl, - src/qged/display/glm/glm/detail/type_mat4x4_simd.inl, - src/qged/display/glm/glm/detail/type_quat.hpp, - src/qged/display/glm/glm/detail/type_quat.inl, - src/qged/display/glm/glm/detail/type_quat_simd.inl, - src/qged/display/glm/glm/detail/type_vec1.hpp, - src/qged/display/glm/glm/detail/type_vec1.inl, - src/qged/display/glm/glm/detail/type_vec2.hpp, - src/qged/display/glm/glm/detail/type_vec2.inl, - src/qged/display/glm/glm/detail/type_vec3.hpp, - src/qged/display/glm/glm/detail/type_vec3.inl, - src/qged/display/glm/glm/detail/type_vec4.hpp, - src/qged/display/glm/glm/detail/type_vec4.inl, - src/qged/display/glm/glm/detail/type_vec4_simd.inl, - src/qged/display/glm/glm/exponential.hpp, - src/qged/display/glm/glm/ext, src/qged/display/glm/glm/ext.hpp, - src/qged/display/glm/glm/ext/matrix_clip_space.hpp, - src/qged/display/glm/glm/ext/matrix_clip_space.inl, - src/qged/display/glm/glm/ext/matrix_common.hpp, - src/qged/display/glm/glm/ext/matrix_common.inl, - src/qged/display/glm/glm/ext/matrix_double2x2.hpp, - src/qged/display/glm/glm/ext/matrix_double2x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double2x3.hpp, - src/qged/display/glm/glm/ext/matrix_double2x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double2x4.hpp, - src/qged/display/glm/glm/ext/matrix_double2x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double3x2.hpp, - src/qged/display/glm/glm/ext/matrix_double3x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double3x3.hpp, - src/qged/display/glm/glm/ext/matrix_double3x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double3x4.hpp, - src/qged/display/glm/glm/ext/matrix_double3x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double4x2.hpp, - src/qged/display/glm/glm/ext/matrix_double4x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double4x3.hpp, - src/qged/display/glm/glm/ext/matrix_double4x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_double4x4.hpp, - src/qged/display/glm/glm/ext/matrix_double4x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float2x2.hpp, - src/qged/display/glm/glm/ext/matrix_float2x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float2x3.hpp, - src/qged/display/glm/glm/ext/matrix_float2x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float2x4.hpp, - src/qged/display/glm/glm/ext/matrix_float2x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float3x2.hpp, - src/qged/display/glm/glm/ext/matrix_float3x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float3x3.hpp, - src/qged/display/glm/glm/ext/matrix_float3x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float3x4.hpp, - src/qged/display/glm/glm/ext/matrix_float3x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float4x2.hpp, - src/qged/display/glm/glm/ext/matrix_float4x2_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float4x3.hpp, - src/qged/display/glm/glm/ext/matrix_float4x3_precision.hpp, - src/qged/display/glm/glm/ext/matrix_float4x4.hpp, - src/qged/display/glm/glm/ext/matrix_float4x4_precision.hpp, - src/qged/display/glm/glm/ext/matrix_int2x2.hpp, - src/qged/display/glm/glm/ext/matrix_int2x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int2x3.hpp, - src/qged/display/glm/glm/ext/matrix_int2x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int2x4.hpp, - src/qged/display/glm/glm/ext/matrix_int2x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int3x2.hpp, - src/qged/display/glm/glm/ext/matrix_int3x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int3x3.hpp, - src/qged/display/glm/glm/ext/matrix_int3x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int3x4.hpp, - src/qged/display/glm/glm/ext/matrix_int3x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int4x2.hpp, - src/qged/display/glm/glm/ext/matrix_int4x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int4x3.hpp, - src/qged/display/glm/glm/ext/matrix_int4x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_int4x4.hpp, - src/qged/display/glm/glm/ext/matrix_int4x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_projection.hpp, - src/qged/display/glm/glm/ext/matrix_projection.inl, - src/qged/display/glm/glm/ext/matrix_relational.hpp, - src/qged/display/glm/glm/ext/matrix_relational.inl, - src/qged/display/glm/glm/ext/matrix_transform.hpp, - src/qged/display/glm/glm/ext/matrix_transform.inl, - src/qged/display/glm/glm/ext/matrix_uint2x2.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x3.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x4.hpp, - src/qged/display/glm/glm/ext/matrix_uint2x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x2.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x3.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x4.hpp, - src/qged/display/glm/glm/ext/matrix_uint3x4_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x2.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x2_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x3.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x3_sized.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x4.hpp, - src/qged/display/glm/glm/ext/matrix_uint4x4_sized.hpp, - src/qged/display/glm/glm/ext/quaternion_common.hpp, - src/qged/display/glm/glm/ext/quaternion_common.inl, - src/qged/display/glm/glm/ext/quaternion_common_simd.inl, - src/qged/display/glm/glm/ext/quaternion_double.hpp, - src/qged/display/glm/glm/ext/quaternion_double_precision.hpp, - src/qged/display/glm/glm/ext/quaternion_exponential.hpp, - src/qged/display/glm/glm/ext/quaternion_exponential.inl, - src/qged/display/glm/glm/ext/quaternion_float.hpp, - src/qged/display/glm/glm/ext/quaternion_float_precision.hpp, - src/qged/display/glm/glm/ext/quaternion_geometric.hpp, - src/qged/display/glm/glm/ext/quaternion_geometric.inl, - src/qged/display/glm/glm/ext/quaternion_relational.hpp, - src/qged/display/glm/glm/ext/quaternion_relational.inl, - src/qged/display/glm/glm/ext/quaternion_transform.hpp, - src/qged/display/glm/glm/ext/quaternion_transform.inl, - src/qged/display/glm/glm/ext/quaternion_trigonometric.hpp, - src/qged/display/glm/glm/ext/quaternion_trigonometric.inl, - src/qged/display/glm/glm/ext/scalar_common.hpp, - src/qged/display/glm/glm/ext/scalar_common.inl, - src/qged/display/glm/glm/ext/scalar_constants.hpp, - src/qged/display/glm/glm/ext/scalar_constants.inl, - src/qged/display/glm/glm/ext/scalar_int_sized.hpp, - src/qged/display/glm/glm/ext/scalar_integer.hpp, - src/qged/display/glm/glm/ext/scalar_integer.inl, - src/qged/display/glm/glm/ext/scalar_packing.hpp, - src/qged/display/glm/glm/ext/scalar_packing.inl, - src/qged/display/glm/glm/ext/scalar_relational.hpp, - src/qged/display/glm/glm/ext/scalar_relational.inl, - src/qged/display/glm/glm/ext/scalar_uint_sized.hpp, - src/qged/display/glm/glm/ext/scalar_ulp.hpp, - src/qged/display/glm/glm/ext/scalar_ulp.inl, - src/qged/display/glm/glm/ext/vector_bool1.hpp, - src/qged/display/glm/glm/ext/vector_bool1_precision.hpp, - src/qged/display/glm/glm/ext/vector_bool2.hpp, - src/qged/display/glm/glm/ext/vector_bool2_precision.hpp, - src/qged/display/glm/glm/ext/vector_bool3.hpp, - src/qged/display/glm/glm/ext/vector_bool3_precision.hpp, - src/qged/display/glm/glm/ext/vector_bool4.hpp, - src/qged/display/glm/glm/ext/vector_bool4_precision.hpp, - src/qged/display/glm/glm/ext/vector_common.hpp, - src/qged/display/glm/glm/ext/vector_common.inl, - src/qged/display/glm/glm/ext/vector_double1.hpp, - src/qged/display/glm/glm/ext/vector_double1_precision.hpp, - src/qged/display/glm/glm/ext/vector_double2.hpp, - src/qged/display/glm/glm/ext/vector_double2_precision.hpp, - src/qged/display/glm/glm/ext/vector_double3.hpp, - src/qged/display/glm/glm/ext/vector_double3_precision.hpp, - src/qged/display/glm/glm/ext/vector_double4.hpp, - src/qged/display/glm/glm/ext/vector_double4_precision.hpp, - src/qged/display/glm/glm/ext/vector_float1.hpp, - src/qged/display/glm/glm/ext/vector_float1_precision.hpp, - src/qged/display/glm/glm/ext/vector_float2.hpp, - src/qged/display/glm/glm/ext/vector_float2_precision.hpp, - src/qged/display/glm/glm/ext/vector_float3.hpp, - src/qged/display/glm/glm/ext/vector_float3_precision.hpp, - src/qged/display/glm/glm/ext/vector_float4.hpp, - src/qged/display/glm/glm/ext/vector_float4_precision.hpp, - src/qged/display/glm/glm/ext/vector_int1.hpp, - src/qged/display/glm/glm/ext/vector_int1_sized.hpp, - src/qged/display/glm/glm/ext/vector_int2.hpp, - src/qged/display/glm/glm/ext/vector_int2_sized.hpp, - src/qged/display/glm/glm/ext/vector_int3.hpp, - src/qged/display/glm/glm/ext/vector_int3_sized.hpp, - src/qged/display/glm/glm/ext/vector_int4.hpp, - src/qged/display/glm/glm/ext/vector_int4_sized.hpp, - src/qged/display/glm/glm/ext/vector_integer.hpp, - src/qged/display/glm/glm/ext/vector_integer.inl, - src/qged/display/glm/glm/ext/vector_packing.hpp, - src/qged/display/glm/glm/ext/vector_packing.inl, - src/qged/display/glm/glm/ext/vector_relational.hpp, - src/qged/display/glm/glm/ext/vector_relational.inl, - src/qged/display/glm/glm/ext/vector_uint1.hpp, - src/qged/display/glm/glm/ext/vector_uint1_sized.hpp, - src/qged/display/glm/glm/ext/vector_uint2.hpp, - src/qged/display/glm/glm/ext/vector_uint2_sized.hpp, - src/qged/display/glm/glm/ext/vector_uint3.hpp, - src/qged/display/glm/glm/ext/vector_uint3_sized.hpp, - src/qged/display/glm/glm/ext/vector_uint4.hpp, - src/qged/display/glm/glm/ext/vector_uint4_sized.hpp, - src/qged/display/glm/glm/ext/vector_ulp.hpp, - src/qged/display/glm/glm/ext/vector_ulp.inl, - src/qged/display/glm/glm/fwd.hpp, - src/qged/display/glm/glm/geometric.hpp, - src/qged/display/glm/glm/glm.hpp, src/qged/display/glm/glm/gtc, - src/qged/display/glm/glm/gtc/bitfield.hpp, - src/qged/display/glm/glm/gtc/bitfield.inl, - src/qged/display/glm/glm/gtc/color_space.hpp, - src/qged/display/glm/glm/gtc/color_space.inl, - src/qged/display/glm/glm/gtc/constants.hpp, - src/qged/display/glm/glm/gtc/constants.inl, - src/qged/display/glm/glm/gtc/epsilon.hpp, - src/qged/display/glm/glm/gtc/epsilon.inl, - src/qged/display/glm/glm/gtc/integer.hpp, - src/qged/display/glm/glm/gtc/integer.inl, - src/qged/display/glm/glm/gtc/matrix_access.hpp, - src/qged/display/glm/glm/gtc/matrix_access.inl, - src/qged/display/glm/glm/gtc/matrix_integer.hpp, - src/qged/display/glm/glm/gtc/matrix_inverse.hpp, - src/qged/display/glm/glm/gtc/matrix_inverse.inl, - src/qged/display/glm/glm/gtc/matrix_transform.hpp, - src/qged/display/glm/glm/gtc/matrix_transform.inl, - src/qged/display/glm/glm/gtc/noise.hpp, - src/qged/display/glm/glm/gtc/noise.inl, - src/qged/display/glm/glm/gtc/packing.hpp, - src/qged/display/glm/glm/gtc/packing.inl, - src/qged/display/glm/glm/gtc/quaternion.hpp, - src/qged/display/glm/glm/gtc/quaternion.inl, - src/qged/display/glm/glm/gtc/quaternion_simd.inl, - src/qged/display/glm/glm/gtc/random.hpp, - src/qged/display/glm/glm/gtc/random.inl, - src/qged/display/glm/glm/gtc/reciprocal.hpp, - src/qged/display/glm/glm/gtc/reciprocal.inl, - src/qged/display/glm/glm/gtc/round.hpp, - src/qged/display/glm/glm/gtc/round.inl, - src/qged/display/glm/glm/gtc/type_aligned.hpp, - src/qged/display/glm/glm/gtc/type_precision.hpp, - src/qged/display/glm/glm/gtc/type_precision.inl, - src/qged/display/glm/glm/gtc/type_ptr.hpp, - src/qged/display/glm/glm/gtc/type_ptr.inl, - src/qged/display/glm/glm/gtc/ulp.hpp, - src/qged/display/glm/glm/gtc/ulp.inl, - src/qged/display/glm/glm/gtc/vec1.hpp, - src/qged/display/glm/glm/gtx, - src/qged/display/glm/glm/gtx/associated_min_max.hpp, - src/qged/display/glm/glm/gtx/associated_min_max.inl, - src/qged/display/glm/glm/gtx/bit.hpp, - src/qged/display/glm/glm/gtx/bit.inl, - src/qged/display/glm/glm/gtx/closest_point.hpp, - src/qged/display/glm/glm/gtx/closest_point.inl, - src/qged/display/glm/glm/gtx/color_encoding.hpp, - src/qged/display/glm/glm/gtx/color_encoding.inl, - src/qged/display/glm/glm/gtx/color_space.hpp, - src/qged/display/glm/glm/gtx/color_space.inl, - src/qged/display/glm/glm/gtx/color_space_YCoCg.hpp, - src/qged/display/glm/glm/gtx/color_space_YCoCg.inl, - src/qged/display/glm/glm/gtx/common.hpp, - src/qged/display/glm/glm/gtx/common.inl, - src/qged/display/glm/glm/gtx/compatibility.hpp, - src/qged/display/glm/glm/gtx/compatibility.inl, - src/qged/display/glm/glm/gtx/component_wise.hpp, - src/qged/display/glm/glm/gtx/component_wise.inl, - src/qged/display/glm/glm/gtx/dual_quaternion.hpp, - src/qged/display/glm/glm/gtx/dual_quaternion.inl, - src/qged/display/glm/glm/gtx/easing.hpp, - src/qged/display/glm/glm/gtx/easing.inl, - src/qged/display/glm/glm/gtx/euler_angles.hpp, - src/qged/display/glm/glm/gtx/euler_angles.inl, - src/qged/display/glm/glm/gtx/extend.hpp, - src/qged/display/glm/glm/gtx/extend.inl, - src/qged/display/glm/glm/gtx/extended_min_max.hpp, - src/qged/display/glm/glm/gtx/extended_min_max.inl, - src/qged/display/glm/glm/gtx/exterior_product.hpp, - src/qged/display/glm/glm/gtx/exterior_product.inl, - src/qged/display/glm/glm/gtx/fast_exponential.hpp, - src/qged/display/glm/glm/gtx/fast_exponential.inl, - src/qged/display/glm/glm/gtx/fast_square_root.hpp, - src/qged/display/glm/glm/gtx/fast_square_root.inl, - src/qged/display/glm/glm/gtx/fast_trigonometry.hpp, - src/qged/display/glm/glm/gtx/fast_trigonometry.inl, - src/qged/display/glm/glm/gtx/float_notmalize.inl, - src/qged/display/glm/glm/gtx/functions.hpp, - src/qged/display/glm/glm/gtx/functions.inl, - src/qged/display/glm/glm/gtx/gradient_paint.hpp, - src/qged/display/glm/glm/gtx/gradient_paint.inl, - src/qged/display/glm/glm/gtx/handed_coordinate_space.hpp, - src/qged/display/glm/glm/gtx/handed_coordinate_space.inl, - src/qged/display/glm/glm/gtx/hash.hpp, - src/qged/display/glm/glm/gtx/hash.inl, - src/qged/display/glm/glm/gtx/integer.hpp, - src/qged/display/glm/glm/gtx/integer.inl, - src/qged/display/glm/glm/gtx/intersect.hpp, - src/qged/display/glm/glm/gtx/intersect.inl, - src/qged/display/glm/glm/gtx/io.hpp, - src/qged/display/glm/glm/gtx/io.inl, - src/qged/display/glm/glm/gtx/log_base.hpp, - src/qged/display/glm/glm/gtx/log_base.inl, - src/qged/display/glm/glm/gtx/matrix_cross_product.hpp, - src/qged/display/glm/glm/gtx/matrix_cross_product.inl, - src/qged/display/glm/glm/gtx/matrix_decompose.hpp, - src/qged/display/glm/glm/gtx/matrix_decompose.inl, - src/qged/display/glm/glm/gtx/matrix_factorisation.hpp, - src/qged/display/glm/glm/gtx/matrix_factorisation.inl, - src/qged/display/glm/glm/gtx/matrix_interpolation.hpp, - src/qged/display/glm/glm/gtx/matrix_interpolation.inl, - src/qged/display/glm/glm/gtx/matrix_major_storage.hpp, - src/qged/display/glm/glm/gtx/matrix_major_storage.inl, - src/qged/display/glm/glm/gtx/matrix_operation.hpp, - src/qged/display/glm/glm/gtx/matrix_operation.inl, - src/qged/display/glm/glm/gtx/matrix_query.hpp, - src/qged/display/glm/glm/gtx/matrix_query.inl, - src/qged/display/glm/glm/gtx/matrix_transform_2d.hpp, - src/qged/display/glm/glm/gtx/matrix_transform_2d.inl, - src/qged/display/glm/glm/gtx/mixed_product.hpp, - src/qged/display/glm/glm/gtx/mixed_product.inl, - src/qged/display/glm/glm/gtx/norm.hpp, - src/qged/display/glm/glm/gtx/norm.inl, - src/qged/display/glm/glm/gtx/normal.hpp, - src/qged/display/glm/glm/gtx/normal.inl, - src/qged/display/glm/glm/gtx/normalize_dot.hpp, - src/qged/display/glm/glm/gtx/normalize_dot.inl, - src/qged/display/glm/glm/gtx/number_precision.hpp, - src/qged/display/glm/glm/gtx/number_precision.inl, - src/qged/display/glm/glm/gtx/optimum_pow.hpp, - src/qged/display/glm/glm/gtx/optimum_pow.inl, - src/qged/display/glm/glm/gtx/orthonormalize.hpp, - src/qged/display/glm/glm/gtx/orthonormalize.inl, - src/qged/display/glm/glm/gtx/perpendicular.hpp, - src/qged/display/glm/glm/gtx/perpendicular.inl, - src/qged/display/glm/glm/gtx/polar_coordinates.hpp, - src/qged/display/glm/glm/gtx/polar_coordinates.inl, - src/qged/display/glm/glm/gtx/projection.hpp, - src/qged/display/glm/glm/gtx/projection.inl, - src/qged/display/glm/glm/gtx/quaternion.hpp, - src/qged/display/glm/glm/gtx/quaternion.inl, - src/qged/display/glm/glm/gtx/range.hpp, - src/qged/display/glm/glm/gtx/raw_data.hpp, - src/qged/display/glm/glm/gtx/raw_data.inl, - src/qged/display/glm/glm/gtx/rotate_normalized_axis.hpp, - src/qged/display/glm/glm/gtx/rotate_normalized_axis.inl, - src/qged/display/glm/glm/gtx/rotate_vector.hpp, - src/qged/display/glm/glm/gtx/rotate_vector.inl, - src/qged/display/glm/glm/gtx/scalar_multiplication.hpp, - src/qged/display/glm/glm/gtx/scalar_relational.hpp, - src/qged/display/glm/glm/gtx/scalar_relational.inl, - src/qged/display/glm/glm/gtx/spline.hpp, - src/qged/display/glm/glm/gtx/spline.inl, - src/qged/display/glm/glm/gtx/std_based_type.hpp, - src/qged/display/glm/glm/gtx/std_based_type.inl, - src/qged/display/glm/glm/gtx/string_cast.hpp, - src/qged/display/glm/glm/gtx/string_cast.inl, - src/qged/display/glm/glm/gtx/texture.hpp, - src/qged/display/glm/glm/gtx/texture.inl, - src/qged/display/glm/glm/gtx/transform.hpp, - src/qged/display/glm/glm/gtx/transform.inl, - src/qged/display/glm/glm/gtx/transform2.hpp, - src/qged/display/glm/glm/gtx/transform2.inl, - src/qged/display/glm/glm/gtx/type_aligned.hpp, - src/qged/display/glm/glm/gtx/type_aligned.inl, - src/qged/display/glm/glm/gtx/type_trait.hpp, - src/qged/display/glm/glm/gtx/type_trait.inl, - src/qged/display/glm/glm/gtx/vec_swizzle.hpp, - src/qged/display/glm/glm/gtx/vector_angle.hpp, - src/qged/display/glm/glm/gtx/vector_angle.inl, - src/qged/display/glm/glm/gtx/vector_query.hpp, - src/qged/display/glm/glm/gtx/vector_query.inl, - src/qged/display/glm/glm/gtx/wrap.hpp, - src/qged/display/glm/glm/gtx/wrap.inl, - src/qged/display/glm/glm/integer.hpp, - src/qged/display/glm/glm/mat2x2.hpp, - src/qged/display/glm/glm/mat2x3.hpp, - src/qged/display/glm/glm/mat2x4.hpp, - src/qged/display/glm/glm/mat3x2.hpp, - src/qged/display/glm/glm/mat3x3.hpp, - src/qged/display/glm/glm/mat3x4.hpp, - src/qged/display/glm/glm/mat4x2.hpp, - src/qged/display/glm/glm/mat4x3.hpp, - src/qged/display/glm/glm/mat4x4.hpp, - src/qged/display/glm/glm/matrix.hpp, - src/qged/display/glm/glm/packing.hpp, - src/qged/display/glm/glm/simd, - src/qged/display/glm/glm/simd/common.h, - src/qged/display/glm/glm/simd/exponential.h, - src/qged/display/glm/glm/simd/geometric.h, - src/qged/display/glm/glm/simd/integer.h, - src/qged/display/glm/glm/simd/matrix.h, - src/qged/display/glm/glm/simd/neon.h, - src/qged/display/glm/glm/simd/packing.h, - src/qged/display/glm/glm/simd/platform.h, - src/qged/display/glm/glm/simd/trigonometric.h, - src/qged/display/glm/glm/simd/vector_relational.h, - src/qged/display/glm/glm/trigonometric.hpp, - src/qged/display/glm/glm/vec2.hpp, - src/qged/display/glm/glm/vec3.hpp, - src/qged/display/glm/glm/vec4.hpp, - src/qged/display/glm/glm/vector_relational.hpp, - src/qged/display/glm/manual.md, src/qged/display/glm/readme.md, - src/qged/main_window.cpp, src/qged/main_window.h: - Add work by Sadeep Darshana on enabling a display manager in the - Qt based qged interface - -2020-06-27 15:12 starseeker - - * [r76233] src/tclscripts/archer/Archer.tcl, - src/tclscripts/archer/ArcherCore.tcl, src/tclscripts/lib/Ged.tcl: - Expose snapping to lines option in Archer menu, but still quite a - bit to do to actually enable the feature... - -2020-06-27 06:57 brlcad - - * [r76232] include/rt/db_fullpath.h: - provide a macro for getting the number of path/dp entries and - protect against crashing if there aren't any (e.g. '/') in - DB_FULL_PATH_CUR_DIR. these macros need some help. - -2020-06-27 05:59 brlcad - - * [r76231] src/libged/put_comb.c, src/libged/xpush.c: - eliminate calls to NAMEMOVE in favor of safer bu_strlcpy - -2020-06-27 05:49 brlcad - - * [r76230] src/libged/put_comb.c: - put_comb doesn't use a temp file - -2020-06-27 04:24 brlcad - - * [r76229] src/tclscripts/mged/attr_edit.tcl, - src/tclscripts/mged/color.tcl, - src/tclscripts/mged/color_scheme.tcl, - src/tclscripts/mged/comb.tcl, src/tclscripts/mged/qray.tcl, - src/tclscripts/mged/rt.tcl: - replace calls to getRGB and elimiante getRGBorReset as the - 'Reset' behavior is rather undesirable. it just assigns the - variable to whatever the current widget's background color is set - to, which is wrong in the general case. - -2020-06-26 19:59 starseeker - - * [r76228] src/libged/grid.c: - Ick - need to do something about grid drawing. - -2020-06-26 18:28 starseeker - - * [r76227] include/dm/bview.h, include/ged/view.h, - src/libged/ged.c, src/libged/grid.c, src/libged/view/snap.c, - src/libtclcad/tclcad_obj.c: - Start working on exposing line snapping up through tclcad. Looks - like grid drawing may have gotten broken... - -2020-06-26 17:11 starseeker - - * [r76226] include/dm/bview.h, src/libged/ged.c, - src/libged/view/snap.c: - Make the 'closeness' required for snapping at least theoretically - adjustable - -2020-06-26 16:43 starseeker - - * [r76225] src/adrt/CMakeLists.txt, src/art/CMakeLists.txt, - src/burst/CMakeLists.txt, src/burst/old/CMakeLists.txt, - src/remrt/CMakeLists.txt, src/sig/CMakeLists.txt: - More explicit deps for libdm apps - -2020-06-26 16:37 starseeker - - * [r76224] src/util/CMakeLists.txt: - Add explicit backend deps for the tools - -2020-06-26 16:34 starseeker - - * [r76223] src/fbserv/CMakeLists.txt: - fbserv uses libdm - -2020-06-26 16:33 starseeker - - * [r76222] src/fb/CMakeLists.txt: - Add backend dependencies to fb executables - -2020-06-26 16:28 starseeker - - * [r76221] src/rt/CMakeLists.txt, src/rt/heatgraph.c, - src/rt/main.c: - Add backend dependencies for rt targets, but in the process limit - the libdm linkage to those commands that might display - graphically. - -2020-06-26 16:01 starseeker - - * [r76220] src/archer/CMakeLists.txt, src/mged/CMakeLists.txt, - src/rtwizard/CMakeLists.txt: - With libdm backends as plugins, we no longer have implicit link - time dependencies to ensure they are built before applications. - Make the key backends explicit dependencies of Archer, MGED and - rtwizard - -2020-06-26 15:13 starseeker - - * [r76219] include/bu/opt.h: - update option validator comment - -2020-06-26 15:09 starseeker - - * [r76218] include/bu/opt.h: - Make a note to go back and add _ged_vopt as a standard libbu - option - verbosity incrementing via multiple -v options should be - a standard ability. - -2020-06-26 14:38 starseeker - - * [r76217] src/libged/view/snap.c: - Demonstrate (in principle) incorporating view size and line width - into snapping tolerance. - -2020-06-26 12:27 starseeker - - * [r76216] src/qged/qtads/DockComponentsFactory.cpp, - src/qged/qtads/DockFocusController.cpp, - src/qged/qtads/DockingStateReader.cpp, - src/qged/qtads/FloatingDragPreview.cpp, - src/qged/qtads/IconProvider.cpp: - Add license headers to files without them - -2020-06-26 12:24 starseeker - - * [r76215] src/qged/main.cpp: - add bu_setprogname - -2020-06-26 12:23 starseeker - - * [r76214] regress/repository/repocheck.cpp: - Period character prefixed matches should also be skipped - -2020-06-26 01:26 starseeker - - * [r76213] src/libged/view/snap.c: - note next step... - -2020-06-26 01:05 starseeker - - * [r76211] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/Inconsolata.txt, - doc/legal/embedded/ParaView.txt, - doc/legal/embedded/QFlowLayout.txt, doc/legal/embedded/QtADS.txt, - doc/legal/embedded/appleseed.txt, src/CMakeLists.txt, src/qged, - src/qged/CMakeLists.txt, src/qged/QAccordionWidget.cpp, - src/qged/QAccordionWidget.h, src/qged/QFlowLayout.cpp, - src/qged/QFlowLayout.h, src/qged/QToolPalette.cpp, - src/qged/QToolPalette.h, src/qged/Qt_Notes.txt, src/qged/TODO, - src/qged/TODO.qt, src/qged/cadaccordion.cpp, - src/qged/cadaccordion.h, src/qged/cadapp.cpp, src/qged/cadapp.h, - src/qged/cadappexec.cpp, src/qged/cadappexec.h, - src/qged/cadattributes.cpp, src/qged/cadattributes.h, - src/qged/cadcommands.cpp, src/qged/cadcommands.h, - src/qged/cadconsole.cpp, src/qged/cadconsole.h, - src/qged/cadhelp.cpp, src/qged/cadhelp.h, src/qged/cadimport.cpp, - src/qged/cadimport.h, src/qged/cadresources.qrc, - src/qged/cadstyle.qss, src/qged/cadtreemodel.cpp, - src/qged/cadtreemodel.h, src/qged/cadtreenode.cpp, - src/qged/cadtreenode.h, src/qged/cadtreestyle.qss, - src/qged/cadtreeview.cpp, src/qged/cadtreeview.h, - src/qged/cadview.cpp, src/qged/cadview.h, src/qged/console.cpp, - src/qged/console.h, src/qged/default.qss, src/qged/fonts, - src/qged/fonts/Inconsolata-LICENSE.txt, - src/qged/fonts/Inconsolata.otf, src/qged/images, - src/qged/images/appleseed, src/qged/images/appleseed/LICENSE.txt, - src/qged/images/appleseed/checkbox_checked_disabled.png, - src/qged/images/appleseed/checkbox_checked_enabled.png, - src/qged/images/appleseed/checkbox_indeterminate_disabled.png, - src/qged/images/appleseed/checkbox_indeterminate_enabled.png, - src/qged/images/appleseed/checkbox_unchecked_disabled.png, - src/qged/images/appleseed/checkbox_unchecked_enabled.png, - src/qged/images/appleseed/combobox_arrow_down_disabled.png, - src/qged/images/appleseed/combobox_arrow_down_enabled.png, - src/qged/images/appleseed/combobox_arrow_down_selected.png, - src/qged/images/appleseed/header_arrow_down_disabled.png, - src/qged/images/appleseed/header_arrow_down_enabled.png, - src/qged/images/appleseed/header_arrow_up_disabled.png, - src/qged/images/appleseed/header_arrow_up_enabled.png, - src/qged/images/appleseed/menu_arrow_right_disabled.png, - src/qged/images/appleseed/menu_arrow_right_enabled.png, - src/qged/images/appleseed/menu_arrow_right_selected.png, - src/qged/images/appleseed/radiobutton_checked_disabled.png, - src/qged/images/appleseed/radiobutton_checked_enabled.png, - src/qged/images/appleseed/radiobutton_checked_enabled_hover.png, - src/qged/images/appleseed/radiobutton_unchecked_disabled.png, - src/qged/images/appleseed/radiobutton_unchecked_enabled.png, - src/qged/images/appleseed/radiobutton_unchecked_enabled_hover.png, - src/qged/images/appleseed/scrollbar_arrow_down_disabled.png, - src/qged/images/appleseed/scrollbar_arrow_down_enabled.png, - src/qged/images/appleseed/scrollbar_arrow_left_disabled.png, - src/qged/images/appleseed/scrollbar_arrow_left_enabled.png, - src/qged/images/appleseed/scrollbar_arrow_right_disabled.png, - src/qged/images/appleseed/scrollbar_arrow_right_enabled.png, - src/qged/images/appleseed/scrollbar_arrow_up_disabled.png, - src/qged/images/appleseed/scrollbar_arrow_up_enabled.png, - src/qged/images/appleseed/spinbox_arrow_down_disabled.png, - src/qged/images/appleseed/spinbox_arrow_down_enabled.png, - src/qged/images/appleseed/spinbox_arrow_up_disabled.png, - src/qged/images/appleseed/spinbox_arrow_up_enabled.png, - src/qged/images/primitives, src/qged/images/primitives/air.png, - src/qged/images/primitives/airregion.png, - src/qged/images/primitives/arb4.png, - src/qged/images/primitives/arb5.png, - src/qged/images/primitives/arb6.png, - src/qged/images/primitives/arb7.png, - src/qged/images/primitives/arb8.png, - src/qged/images/primitives/arbn.png, - src/qged/images/primitives/ars.png, - src/qged/images/primitives/assembly.png, - src/qged/images/primitives/bot.png, - src/qged/images/primitives/brep.png, - src/qged/images/primitives/comb.png, - src/qged/images/primitives/dsp.png, - src/qged/images/primitives/ehy.png, - src/qged/images/primitives/ell.png, - src/qged/images/primitives/epa.png, - src/qged/images/primitives/eto.png, - src/qged/images/primitives/extrude.png, - src/qged/images/primitives/half.png, - src/qged/images/primitives/hyp.png, - src/qged/images/primitives/invalid.png, - src/qged/images/primitives/metaball.png, - src/qged/images/primitives/nmg.png, - src/qged/images/primitives/other.png, - src/qged/images/primitives/part.png, - src/qged/images/primitives/pipe.png, - src/qged/images/primitives/region.png, - src/qged/images/primitives/rhc.png, - src/qged/images/primitives/rpc.png, - src/qged/images/primitives/sketch.png, - src/qged/images/primitives/sph.png, - src/qged/images/primitives/tgc.png, - src/qged/images/primitives/tor.png, src/qged/images/tree, - src/qged/images/tree/branch-closed.png, - src/qged/images/tree/branch-end.png, - src/qged/images/tree/branch-more.png, - src/qged/images/tree/branch-open.png, - src/qged/images/tree/vline.png, src/qged/main.cpp, - src/qged/main_window.cpp, src/qged/main_window.h, - src/qged/pqConsoleWidget.cpp, src/qged/pqConsoleWidget.h, - src/qged/pqConsoleWidget_LICENSE.txt, src/qged/qtads, - src/qged/qtads/CMakeLists.txt, src/qged/qtads/DockAreaTabBar.cpp, - src/qged/qtads/DockAreaTabBar.h, - src/qged/qtads/DockAreaTitleBar.cpp, - src/qged/qtads/DockAreaTitleBar.h, - src/qged/qtads/DockAreaTitleBar_p.h, - src/qged/qtads/DockAreaWidget.cpp, - src/qged/qtads/DockAreaWidget.h, - src/qged/qtads/DockComponentsFactory.cpp, - src/qged/qtads/DockComponentsFactory.h, - src/qged/qtads/DockContainerWidget.cpp, - src/qged/qtads/DockContainerWidget.h, - src/qged/qtads/DockFocusController.cpp, - src/qged/qtads/DockFocusController.h, - src/qged/qtads/DockManager.cpp, src/qged/qtads/DockManager.h, - src/qged/qtads/DockOverlay.cpp, src/qged/qtads/DockOverlay.h, - src/qged/qtads/DockSplitter.cpp, src/qged/qtads/DockSplitter.h, - src/qged/qtads/DockWidget.cpp, src/qged/qtads/DockWidget.h, - src/qged/qtads/DockWidgetTab.cpp, src/qged/qtads/DockWidgetTab.h, - src/qged/qtads/DockingStateReader.cpp, - src/qged/qtads/DockingStateReader.h, - src/qged/qtads/ElidingLabel.cpp, src/qged/qtads/ElidingLabel.h, - src/qged/qtads/FloatingDockContainer.cpp, - src/qged/qtads/FloatingDockContainer.h, - src/qged/qtads/FloatingDragPreview.cpp, - src/qged/qtads/FloatingDragPreview.h, - src/qged/qtads/IconProvider.cpp, src/qged/qtads/IconProvider.h, - src/qged/qtads/LICENSE, src/qged/qtads/README.md, - src/qged/qtads/ads.qrc, src/qged/qtads/ads_globals.cpp, - src/qged/qtads/ads_globals.h, src/qged/qtads/images, - src/qged/qtads/images/close-button-disabled.svg, - src/qged/qtads/images/close-button-focused.svg, - src/qged/qtads/images/close-button.svg, - src/qged/qtads/images/detach-button-disabled.svg, - src/qged/qtads/images/detach-button.svg, - src/qged/qtads/images/tabs-menu-button.svg, src/qged/qtads/linux, - src/qged/qtads/linux/FloatingWidgetTitleBar.cpp, - src/qged/qtads/linux/FloatingWidgetTitleBar.h, - src/qged/qtads/stylesheets, - src/qged/qtads/stylesheets/default.css, - src/qged/qtads/stylesheets/default_linux.css, - src/qged/qtads/stylesheets/focus_highlighting.css, - src/qged/qtads/stylesheets/focus_highlighting_linux.css: - Add qged into the trunk build. This cleans up the license files, - adds files to distcheck, and generally cleans up the qged - directory with an eye towards mainstream integration compared to - the verison in the qged branch but doesn't intentionally change - the qged logic itself. - -2020-06-26 01:03 starseeker - - * [r76210] src/libdm/qt/dm-qt.cpp, src/libdm/qt/dm-qt.h, - src/libdm/qt/if_qt.cpp: - Turn off and update until this compiles. It was never finished, - and as things are now developing we should look at making this a - full fledged Qt-only dm/fb rather than trying to mix Tk and Qt. - -2020-06-25 21:48 starseeker - - * [r76208] include/config_win.h.in: - For C++, newer standards let us do - std::this_thread::sleep_for(std::chrono::milliseconds(1000)) and - avoid redefining sleep. Qt's qthread.h doesn't like our - (re)definition, so see if we can restrict it to C only - a quick - check doesn't seem to show much (any?) use of sleep in C++ in our - current code... - -2020-06-25 21:34 starseeker - - * [r76207] include/config_win.h.in: - Hopefully with the facetize breakout we can put these back inside - the C++ protections, because close -> _close is not so good for - for .close() calls in C++... - -2020-06-25 21:11 brlcad - - * [r76206] src/libged/CMakeLists.txt, src/libged/README: - give libged it's own readme so some design thoughts, intention, - and framing can be preserved - -2020-06-25 21:03 starseeker - - * [r76205] src/external/Unigraphics/CMakeLists.txt: - ug-g does need the Tcl library directly - -2020-06-25 19:11 starseeker - - * [r76203] CMakeLists.txt, misc/CMake/CMakeLists.txt, - misc/CMake/distcheck_no_tcl.cmake.in: - Add a no-tcl distcheck target. Need to disable the benchmark - runs, since there aren't any .g files without asc2g, but does - enough to be useful. - -2020-06-25 17:15 starseeker - - * [r76202] misc/pkgconfig/libfb.pc.in, - regress/burst/CMakeLists.txt, regress/gchecker/CMakeLists.txt, - regress/mged/CMakeLists.txt, regress/rtwizard/CMakeLists.txt, - src/conv/CMakeLists.txt, src/external/Unigraphics/CMakeLists.txt, - src/libdm/CMakeLists.txt, src/liboptical/CMakeLists.txt, - src/libtclcad/CMakeLists.txt: - List files for distcheck with Tcl disabled - -2020-06-25 17:00 starseeker - - * [r76201] CMakeLists.txt, bench/CMakeLists.txt, db/CMakeLists.txt, - regress/CMakeLists.txt, regress/burst/CMakeLists.txt, - regress/gchecker/CMakeLists.txt, regress/mged/CMakeLists.txt, - regress/rtwizard/CMakeLists.txt, regress/user/CMakeLists.txt, - src/brlman/CMakeLists.txt, src/bwish/CMakeLists.txt, - src/conv/CMakeLists.txt, src/conv/asc/CMakeLists.txt, - src/external/Unigraphics/CMakeLists.txt, - src/libdm/CMakeLists.txt, src/liboptical/CMakeLists.txt, - src/libtclcad/CMakeLists.txt, src/mged/CMakeLists.txt, - src/other/CMakeLists.txt, src/rtwizard/CMakeLists.txt, - src/tclscripts/CMakeLists.txt: - Add a BRLCAD_ENABLE_TCL option (defaults to ON) and fix up - remaining build issues with Tcl fully out of the picture. Protect - liboptical's sh_tcl.c to allow liboptical to build without Tcl - (should really have liboptical use a libdm style plugin setup, - but this is lower impact for now and liboptical's API doesn't - seem to expose any Tcl bits), conditionalize various other bits - of the build logic that were assuming Tcl as a given, disable a - bunch of regression tests needing Tcl based utilities... Large - swaths of the code are of course turned off (libtclcad, mged, - archer, various utilities, etc.) but cmake - -DBRLCAD_ENABLE_TCL=OFF should now work. See if distcheck logic - needs updating - once a full distcheck can pass in this mode, - need another distcheck-full regression test for this - configuration. - -2020-06-25 15:23 starseeker - - * [r76200] ., CHANGES, NEWS, TODO, bench, db, doc, - doc/docbook/system/mann/CMakeLists.txt, - doc/docbook/system/mann/overlay.xml, - doc/docbook/system/mann/screengrab.xml, - doc/legal/embedded/fontstash.txt, doc/legal/embedded/osg.txt, - doc/legal/embedded/stb_truetype.txt, doc/legal/embedded/x24.txt, - include, include/CMakeLists.txt, include/dm.h, - include/dm/CMakeLists.txt, include/dm/defines.h, - include/dm/dm_xvars.h, include/dm/util.h, include/fb, - include/fb.h, include/ged/defines.h, include/ged/framebuffer.h, - include/icv/io.h, include/tclcad.h, misc/CMake/BRLCAD_Util.cmake, - misc/doxygen/CMakeLists.txt, misc/doxygen/libfb.dox, - misc/pkgconfig/CMakeLists.txt, regress, src/CMakeLists.txt, - src/adrt/isst.c, src/art/CMakeLists.txt, - src/burst/CMakeLists.txt, src/burst/burst.cpp, src/burst/burst.h, - src/burst/grid.cpp, src/burst/old/CMakeLists.txt, - src/burst/old/burst.h, src/burst/old/extern.h, - src/burst/old/fb.c, src/burst/old/glob.c, src/burst/old/grid.c, - src/burst/old/paint.c, src/burst/paint.cpp, - src/fb/CMakeLists.txt, src/fb/bw-fb.c, src/fb/cmap-crunch.c, - src/fb/fb-bw.c, src/fb/fb-fb.c, src/fb/fb-pix.c, src/fb/fb-png.c, - src/fb/fbcbars.c, src/fb/fbclear.c, src/fb/fbcmap.c, - src/fb/fbcolor.c, src/fb/fbfade.c, src/fb/fbframe.c, - src/fb/fbfree.c, src/fb/fbgamma.c, src/fb/fbgrid.c, - src/fb/fbhelp.c, src/fb/fblabel.c, src/fb/fbline.c, - src/fb/fbpoint.c, src/fb/fbstretch.c, src/fb/fbzoom.c, - src/fb/gif-fb.c, src/fb/gif2fb.c, src/fb/ioutil.c, - src/fb/pix-fb.c, src/fb/pixautosize.c, src/fb/plot3-fb.c, - src/fb/png-fb.c, src/fb/spm-fb.c, src/fbserv/CMakeLists.txt, - src/fbserv/fbserv.c, src/fbserv/server.c, src/libbu, - src/libdm/CMakeLists.txt, src/libdm/X, src/libdm/adc.c, - src/libdm/asize.c, src/libdm/axes.c, src/libdm/clip.c, - src/libdm/color.c, src/libdm/dm-Null.c, src/libdm/dm-Null.h, - src/libdm/dm-X.c, src/libdm/dm-X.h, src/libdm/dm-generic.c, - src/libdm/dm-glx.h, src/libdm/dm-ogl.c, src/libdm/dm-ogl.h, - src/libdm/dm-osgl.cpp, src/libdm/dm-osgl.h, src/libdm/dm-plot.c, - src/libdm/dm-plot.h, src/libdm/dm-ps.c, src/libdm/dm-ps.h, - src/libdm/dm-qt.cpp, src/libdm/dm-qt.h, src/libdm/dm-tk.c, - src/libdm/dm-tk.h, src/libdm/dm-txt.c, src/libdm/dm-wgl.c, - src/libdm/dm-wgl.h, src/libdm/dm_init.cpp, src/libdm/dm_obj.c, - src/libdm/dm_plugins.cpp, src/libdm/dm_private.h, - src/libdm/dm_util.c, src/libdm/fb_generic.c, src/libdm/fb_log.c, - src/libdm/fb_paged_io.c, src/libdm/fb_rect.c, - src/libdm/fb_util.c, src/libdm/fontstash, src/libdm/glx, - src/libdm/grid.c, src/libdm/if_TEMPLATE.c, src/libdm/if_disk.c, - src/libdm/if_mem.c, src/libdm/if_remote.c, src/libdm/if_stack.c, - src/libdm/include, src/libdm/knob.c, src/libdm/labels.c, - src/libdm/null, src/libdm/options.c, src/libdm/osg-test.cpp, - src/libdm/osg_bob.cpp, src/libdm/osgl, src/libdm/plot, - src/libdm/postscript, src/libdm/qt, src/libdm/query.c, - src/libdm/rect.c, src/libdm/scale.c, src/libdm/tcl.c, - src/libdm/tests/CMakeLists.txt, src/libdm/tests/dm_test.c, - src/libdm/tk, src/libdm/txt, src/libdm/vers.c, src/libdm/wgl, - src/libfb, src/libged/CMakeLists.txt, src/libged/fb2pix.c, - src/libged/fbclear.c, src/libged/ged.c, src/libged/overlay.c, - src/libged/pix2fb.c, src/libged/png2fb.c, - src/libged/screengrab.c, src/libicv/bw.c, src/libicv/dpix.c, - src/libicv/encoding.c, src/libicv/icv_private.h, - src/libicv/pix.c, src/libicv/png.c, src/libicv/ppm.c, - src/libicv/rot.c, src/liboptical/sh_points.c, - src/liboptical/sh_spm.c, src/libtclcad/CMakeLists.txt, - src/libtclcad/dm_obj.c, src/libtclcad/dm_tcl.c, - src/libtclcad/fb_obj.c, src/libtclcad/fbserv_obj.c, - src/libtclcad/libfuncs.c, src/libtclcad/tclcad.c, - src/libtclcad/tclcad_init.c, src/libtclcad/tclcad_obj.c, - src/libtclcad/tkImgFmtPIX.c, src/mged/attach.c, src/mged/cmd.c, - src/mged/dm-generic.c, src/mged/doevent.c, src/mged/dozoom.c, - src/mged/edsol.c, src/mged/facedef.c, src/mged/fbserv.h, - src/mged/mged.h, src/mged/mged_dm.h, src/mged/overlay.c, - src/mged/rect.c, src/mged/set.c, src/mged/share.c, - src/remrt/CMakeLists.txt, src/remrt/remrt.c, src/remrt/rtsrv.c, - src/rt/CMakeLists.txt, src/rt/do.c, src/rt/ext.h, - src/rt/heatgraph.c, src/rt/libfb-dummy.c, src/rt/main.c, - src/rt/opt.c, src/rt/view.c, src/rt/viewedge.c, - src/rt/viewxray.c, src/rt/worker.c, src/rtwizard/CMakeLists.txt, - src/sig/CMakeLists.txt, src/sig/ddisp.c, - src/tclscripts/CMakeLists.txt, src/tclscripts/libdm.tcl, - src/tclscripts/libtclcad.tcl, src/util/CMakeLists.txt, - src/util/bw-a.c, src/util/bw-png.c, src/util/bwhist.c, - src/util/double-asc.c, src/util/halftone.c, src/util/imgdims.c, - src/util/pix-png.c, src/util/pix-ppm.c, src/util/pix-spm.c, - src/util/pixbgstrip.c, src/util/pixborder.c, - src/util/pixelswap.c, src/util/pixhalve.c, src/util/pixhist.c, - src/util/pixhist3d.c, src/util/pixmorph.c, src/util/plot3-dm.c, - src/util/wavelet.c: - Merge libdm and libfb into a plugin based library. - - This commit merges the dm-fb-merge branch's combination of libdm - and libfb into - a single library, using a new plugin-based architecture for - platform specific - backend logic. (The merger supports a clean plugin design - libdm - and libfb - must share backend specific information for features such as - embedded - framebuffers.) - - This commit marks a major milestone in that it is the realization - of a - years-long effort to lift Tcl/Tk usage up out of the core BRL-CAD - libraries - (libged and its dependencies.) Although it is true that Tcl/Tk is - currently - needed for all available graphical libdm backends, the new - plugin-based - architecture means Tcl/Tk is now a requirement only for the - plugin itself, - rather than all of BRL-CAD's libraries. There is no longer a - practical bar to - graphical libdm backends being implemented that are fully - independent of - Tcl/Tk. - - There are some API changes to support plugin loading and - information hiding, - but existing libdm/libfb users should find most functionality - relatively - unchanged - the libfb functions have not been reworked into a new - API, for - example (although someday that may be desirable to streamline the - libdm - design.) The major changes for developers will be including dm.h - rather than - fb.h, linking libdm rather than libfb, and using "struct dm" and - "struct fb" - rather than the dm and fb typedefs. - -2020-06-25 14:16 starseeker - - * [r76199] src/other, src/other/gdal, src/other/libgdiam, - src/other/libnetpbm, src/other/libregex, src/other/libspsr, - src/other/libvds, src/other/openscenegraph.dist, - src/other/openscenegraph/AUTHORS.txt, - src/other/openscenegraph/CMakeLists.txt, - src/other/openscenegraph/CMakeModules/CheckAtomicOps.cmake, - src/other/openscenegraph/CMakeModules/Find3rdPartyDependencies.cmake, - src/other/openscenegraph/CMakeModules/FindAVFoundation.cmake, - src/other/openscenegraph/CMakeModules/FindAndroidNDK.cmake, - src/other/openscenegraph/CMakeModules/FindAsio.cmake, - src/other/openscenegraph/CMakeModules/FindCOLLADA.cmake, - src/other/openscenegraph/CMakeModules/FindEGL.cmake, - src/other/openscenegraph/CMakeModules/FindFBX.cmake, - src/other/openscenegraph/CMakeModules/FindFFmpeg.cmake, - src/other/openscenegraph/CMakeModules/FindFLTK.cmake, - src/other/openscenegraph/CMakeModules/FindFOX.cmake, - src/other/openscenegraph/CMakeModules/FindFontconfig.cmake, - src/other/openscenegraph/CMakeModules/FindFreetype.cmake, - src/other/openscenegraph/CMakeModules/FindGDAL.cmake, - src/other/openscenegraph/CMakeModules/FindGIFLIB.cmake, - src/other/openscenegraph/CMakeModules/FindGLCORE.cmake, - src/other/openscenegraph/CMakeModules/FindGLIB.cmake, - src/other/openscenegraph/CMakeModules/FindGStreamer.cmake, - src/other/openscenegraph/CMakeModules/FindGTA.cmake, - src/other/openscenegraph/CMakeModules/FindGtkGl.cmake, - src/other/openscenegraph/CMakeModules/FindInventor.cmake, - src/other/openscenegraph/CMakeModules/FindJasper.cmake, - src/other/openscenegraph/CMakeModules/FindLIBLAS.cmake, - src/other/openscenegraph/CMakeModules/FindLibVNCServer.cmake, - src/other/openscenegraph/CMakeModules/FindLua52.cmake, - src/other/openscenegraph/CMakeModules/FindNVTT.cmake, - src/other/openscenegraph/CMakeModules/FindOSG.cmake, - src/other/openscenegraph/CMakeModules/FindOpenCascade.cmake, - src/other/openscenegraph/CMakeModules/FindOpenEXR.cmake, - src/other/openscenegraph/CMakeModules/FindOpenThreads.cmake, - src/other/openscenegraph/CMakeModules/FindOpenVRML.cmake, - src/other/openscenegraph/CMakeModules/FindPoppler-glib.cmake, - src/other/openscenegraph/CMakeModules/FindQuickTime.cmake, - src/other/openscenegraph/CMakeModules/FindRSVG.cmake, - src/other/openscenegraph/CMakeModules/FindSDL2.cmake, - src/other/openscenegraph/CMakeModules/FindV8.cmake, - src/other/openscenegraph/CMakeModules/FindXine.cmake, - src/other/openscenegraph/CMakeModules/FindZLIB.cmake, - src/other/openscenegraph/CMakeModules/Findilmbase.cmake, - src/other/openscenegraph/CMakeModules/ModuleInstall.cmake, - src/other/openscenegraph/CMakeModules/OsgAndroidMacroUtils.cmake, - src/other/openscenegraph/CMakeModules/OsgCPack.cmake, - src/other/openscenegraph/CMakeModules/OsgCPackConfig.cmake.in, - src/other/openscenegraph/CMakeModules/OsgDetermineWinVersion.cmake, - src/other/openscenegraph/CMakeModules/OsgMacroUtils.cmake, - src/other/openscenegraph/CMakeModules/Path_Setup.cmake, - src/other/openscenegraph/CMakeModules/UtilityMacros.cmake, - src/other/openscenegraph/LICENSE.txt, - src/other/openscenegraph/NEWS.txt, - src/other/openscenegraph/PlatformSpecifics/Windows/OpenThreadsVersionInfo.rc.in, - src/other/openscenegraph/README.md, - src/other/openscenegraph/README.txt, - src/other/openscenegraph/include/OpenThreads/Affinity, - src/other/openscenegraph/include/OpenThreads/Exports, - src/other/openscenegraph/include/OpenThreads/Thread, - src/other/openscenegraph/include/OpenThreads/Version, - src/other/openscenegraph/include/osg/AlphaFunc, - src/other/openscenegraph/include/osg/AnimationPath, - src/other/openscenegraph/include/osg/Array, - src/other/openscenegraph/include/osg/ArrayDispatchers, - src/other/openscenegraph/include/osg/AttributeDispatchers, - src/other/openscenegraph/include/osg/AudioStream, - src/other/openscenegraph/include/osg/AutoTransform, - src/other/openscenegraph/include/osg/Billboard, - src/other/openscenegraph/include/osg/BindImageTexture, - src/other/openscenegraph/include/osg/BlendColor, - src/other/openscenegraph/include/osg/BlendEquation, - src/other/openscenegraph/include/osg/BlendEquationi, - src/other/openscenegraph/include/osg/BlendFunc, - src/other/openscenegraph/include/osg/BlendFunci, - src/other/openscenegraph/include/osg/BoundingSphere, - src/other/openscenegraph/include/osg/BoundsChecking, - src/other/openscenegraph/include/osg/BufferIndexBinding, - src/other/openscenegraph/include/osg/BufferObject, - src/other/openscenegraph/include/osg/BufferTemplate, - src/other/openscenegraph/include/osg/Callback, - src/other/openscenegraph/include/osg/Camera, - src/other/openscenegraph/include/osg/CameraNode, - src/other/openscenegraph/include/osg/Capability, - src/other/openscenegraph/include/osg/ClampColor, - src/other/openscenegraph/include/osg/ClipControl, - src/other/openscenegraph/include/osg/ClusterCullingCallback, - src/other/openscenegraph/include/osg/CollectOccludersVisitor, - src/other/openscenegraph/include/osg/ColorMaski, - src/other/openscenegraph/include/osg/ComputeBoundsVisitor, - src/other/openscenegraph/include/osg/ContextData, - src/other/openscenegraph/include/osg/CoordinateSystemNode, - src/other/openscenegraph/include/osg/CopyOp, - src/other/openscenegraph/include/osg/CullSettings, - src/other/openscenegraph/include/osg/CullStack, - src/other/openscenegraph/include/osg/CullingSet, - src/other/openscenegraph/include/osg/DepthRangeIndexed, - src/other/openscenegraph/include/osg/DispatchCompute, - src/other/openscenegraph/include/osg/DisplaySettings, - src/other/openscenegraph/include/osg/DrawPixels, - src/other/openscenegraph/include/osg/Drawable, - src/other/openscenegraph/include/osg/Export, - src/other/openscenegraph/include/osg/FragmentProgram, - src/other/openscenegraph/include/osg/FrameBufferObject, - src/other/openscenegraph/include/osg/GL, - src/other/openscenegraph/include/osg/GL2Extensions, - src/other/openscenegraph/include/osg/GLBeginEndAdapter, - src/other/openscenegraph/include/osg/GLDefines, - src/other/openscenegraph/include/osg/GLExtensions, - src/other/openscenegraph/include/osg/GLObjects, - src/other/openscenegraph/include/osg/GLU, - src/other/openscenegraph/include/osg/Geode, - src/other/openscenegraph/include/osg/Geometry, - src/other/openscenegraph/include/osg/GraphicsContext, - src/other/openscenegraph/include/osg/GraphicsThread, - src/other/openscenegraph/include/osg/Group, - src/other/openscenegraph/include/osg/Identifier, - src/other/openscenegraph/include/osg/Image, - src/other/openscenegraph/include/osg/ImageSequence, - src/other/openscenegraph/include/osg/ImageUtils, - src/other/openscenegraph/include/osg/KdTree, - src/other/openscenegraph/include/osg/LOD, - src/other/openscenegraph/include/osg/LineSegment, - src/other/openscenegraph/include/osg/Math, - src/other/openscenegraph/include/osg/Matrixd, - src/other/openscenegraph/include/osg/Matrixf, - src/other/openscenegraph/include/osg/Multisample, - src/other/openscenegraph/include/osg/Node, - src/other/openscenegraph/include/osg/NodeCallback, - src/other/openscenegraph/include/osg/NodeTrackerCallback, - src/other/openscenegraph/include/osg/NodeVisitor, - src/other/openscenegraph/include/osg/Object, - src/other/openscenegraph/include/osg/OcclusionQueryNode, - src/other/openscenegraph/include/osg/OperationThread, - src/other/openscenegraph/include/osg/PagedLOD, - src/other/openscenegraph/include/osg/PatchParameter, - src/other/openscenegraph/include/osg/Point, - src/other/openscenegraph/include/osg/PointSprite, - src/other/openscenegraph/include/osg/PolygonMode, - src/other/openscenegraph/include/osg/Polytope, - src/other/openscenegraph/include/osg/PrimitiveRestartIndex, - src/other/openscenegraph/include/osg/PrimitiveSet, - src/other/openscenegraph/include/osg/PrimitiveSetIndirect, - src/other/openscenegraph/include/osg/Program, - src/other/openscenegraph/include/osg/ProxyNode, - src/other/openscenegraph/include/osg/Quat, - src/other/openscenegraph/include/osg/Referenced, - src/other/openscenegraph/include/osg/RenderInfo, - src/other/openscenegraph/include/osg/SampleMaski, - src/other/openscenegraph/include/osg/Sampler, - src/other/openscenegraph/include/osg/ScissorIndexed, - src/other/openscenegraph/include/osg/ScriptEngine, - src/other/openscenegraph/include/osg/Sequence, - src/other/openscenegraph/include/osg/Shader, - src/other/openscenegraph/include/osg/ShaderComposer, - src/other/openscenegraph/include/osg/Shape, - src/other/openscenegraph/include/osg/ShapeDrawable, - src/other/openscenegraph/include/osg/State, - src/other/openscenegraph/include/osg/StateAttribute, - src/other/openscenegraph/include/osg/StateAttributeCallback, - src/other/openscenegraph/include/osg/StateSet, - src/other/openscenegraph/include/osg/Stencil, - src/other/openscenegraph/include/osg/StencilTwoSided, - src/other/openscenegraph/include/osg/Switch, - src/other/openscenegraph/include/osg/TemplatePrimitiveFunctor, - src/other/openscenegraph/include/osg/TemplatePrimitiveIndexFunctor, - src/other/openscenegraph/include/osg/TexGen, - src/other/openscenegraph/include/osg/Texture, - src/other/openscenegraph/include/osg/Texture1D, - src/other/openscenegraph/include/osg/Texture2D, - src/other/openscenegraph/include/osg/Texture2DArray, - src/other/openscenegraph/include/osg/Texture2DMultisample, - src/other/openscenegraph/include/osg/Texture3D, - src/other/openscenegraph/include/osg/TextureBuffer, - src/other/openscenegraph/include/osg/TextureCubeMap, - src/other/openscenegraph/include/osg/TextureRectangle, - src/other/openscenegraph/include/osg/Timer, - src/other/openscenegraph/include/osg/TransferFunction, - src/other/openscenegraph/include/osg/Transform, - src/other/openscenegraph/include/osg/TriangleFunctor, - src/other/openscenegraph/include/osg/TriangleIndexFunctor, - src/other/openscenegraph/include/osg/TriangleLinePointIndexFunctor, - src/other/openscenegraph/include/osg/Types, - src/other/openscenegraph/include/osg/Uniform, - src/other/openscenegraph/include/osg/UserDataContainer, - src/other/openscenegraph/include/osg/ValueMap, - src/other/openscenegraph/include/osg/ValueObject, - src/other/openscenegraph/include/osg/ValueStack, - src/other/openscenegraph/include/osg/Vec2f, - src/other/openscenegraph/include/osg/Vec2i, - src/other/openscenegraph/include/osg/Vec2ui, - src/other/openscenegraph/include/osg/Vec3i, - src/other/openscenegraph/include/osg/Vec3ui, - src/other/openscenegraph/include/osg/Vec4i, - src/other/openscenegraph/include/osg/Vec4ub, - src/other/openscenegraph/include/osg/Vec4ui, - src/other/openscenegraph/include/osg/Version, - src/other/openscenegraph/include/osg/VertexArrayState, - src/other/openscenegraph/include/osg/VertexAttribDivisor, - src/other/openscenegraph/include/osg/VertexProgram, - src/other/openscenegraph/include/osg/View, - src/other/openscenegraph/include/osg/ViewportIndexed, - src/other/openscenegraph/include/osg/io_utils, - src/other/openscenegraph/include/osg/observer_ptr, - src/other/openscenegraph/include/osg/os_utils, - src/other/openscenegraph/include/osg/ref_ptr, - src/other/openscenegraph/include/osgDB/AuthenticationMap, - src/other/openscenegraph/include/osgDB/Callbacks, - src/other/openscenegraph/include/osgDB/ClassInterface, - src/other/openscenegraph/include/osgDB/ConvertBase64, - src/other/openscenegraph/include/osgDB/ConvertUTF, - src/other/openscenegraph/include/osgDB/DataTypes, - src/other/openscenegraph/include/osgDB/DatabasePager, - src/other/openscenegraph/include/osgDB/DatabaseRevisions, - src/other/openscenegraph/include/osgDB/ExternalFileWriter, - src/other/openscenegraph/include/osgDB/FileNameUtils, - src/other/openscenegraph/include/osgDB/FileUtils, - src/other/openscenegraph/include/osgDB/ImageOptions, - src/other/openscenegraph/include/osgDB/ImagePager, - src/other/openscenegraph/include/osgDB/Input, - src/other/openscenegraph/include/osgDB/InputStream, - src/other/openscenegraph/include/osgDB/ObjectCache, - src/other/openscenegraph/include/osgDB/ObjectWrapper, - src/other/openscenegraph/include/osgDB/Options, - src/other/openscenegraph/include/osgDB/OutputStream, - src/other/openscenegraph/include/osgDB/PluginQuery, - src/other/openscenegraph/include/osgDB/ReadFile, - src/other/openscenegraph/include/osgDB/ReaderWriter, - src/other/openscenegraph/include/osgDB/Registry, - src/other/openscenegraph/include/osgDB/Serializer, - src/other/openscenegraph/include/osgDB/SharedStateManager, - src/other/openscenegraph/include/osgDB/StreamOperator, - src/other/openscenegraph/include/osgDB/WriteFile, - src/other/openscenegraph/include/osgDB/XmlParser, - src/other/openscenegraph/include/osgDB/fstream, - src/other/openscenegraph/include/osgGA/CameraManipulator, - src/other/openscenegraph/include/osgGA/Device, - src/other/openscenegraph/include/osgGA/Event, - src/other/openscenegraph/include/osgGA/EventHandler, - src/other/openscenegraph/include/osgGA/EventQueue, - src/other/openscenegraph/include/osgGA/EventVisitor, - src/other/openscenegraph/include/osgGA/Export, - src/other/openscenegraph/include/osgGA/GUIActionAdapter, - src/other/openscenegraph/include/osgGA/GUIEventAdapter, - src/other/openscenegraph/include/osgGA/GUIEventHandler, - src/other/openscenegraph/include/osgGA/KeySwitchMatrixManipulator, - src/other/openscenegraph/include/osgGA/MultiTouchTrackballManipulator, - src/other/openscenegraph/include/osgGA/StandardManipulator, - src/other/openscenegraph/include/osgGA/UFOManipulator, - src/other/openscenegraph/include/osgGA/Widget, - src/other/openscenegraph/include/osgQt, - src/other/openscenegraph/include/osgText/Font, - src/other/openscenegraph/include/osgText/Font3D, - src/other/openscenegraph/include/osgText/Glyph, - src/other/openscenegraph/include/osgText/String, - src/other/openscenegraph/include/osgText/Style, - src/other/openscenegraph/include/osgText/Text, - src/other/openscenegraph/include/osgText/Text3D, - src/other/openscenegraph/include/osgText/TextBase, - src/other/openscenegraph/include/osgUtil/CullVisitor, - src/other/openscenegraph/include/osgUtil/DelaunayTriangulator, - src/other/openscenegraph/include/osgUtil/DisplayRequirementsVisitor, - src/other/openscenegraph/include/osgUtil/DrawElementTypeSimplifier, - src/other/openscenegraph/include/osgUtil/GLObjectsVisitor, - src/other/openscenegraph/include/osgUtil/IncrementalCompileOperation, - src/other/openscenegraph/include/osgUtil/IntersectVisitor, - src/other/openscenegraph/include/osgUtil/IntersectionVisitor, - src/other/openscenegraph/include/osgUtil/LineSegmentIntersector, - src/other/openscenegraph/include/osgUtil/MeshOptimizers, - src/other/openscenegraph/include/osgUtil/Optimizer, - src/other/openscenegraph/include/osgUtil/PolytopeIntersector, - src/other/openscenegraph/include/osgUtil/PositionalStateContainer, - src/other/openscenegraph/include/osgUtil/RayIntersector, - src/other/openscenegraph/include/osgUtil/RenderBin, - src/other/openscenegraph/include/osgUtil/RenderLeaf, - src/other/openscenegraph/include/osgUtil/RenderStage, - src/other/openscenegraph/include/osgUtil/SceneGraphBuilder, - src/other/openscenegraph/include/osgUtil/SceneView, - src/other/openscenegraph/include/osgUtil/ShaderGen, - src/other/openscenegraph/include/osgUtil/Simplifier, - src/other/openscenegraph/include/osgUtil/SmoothingVisitor, - src/other/openscenegraph/include/osgUtil/StateGraph, - src/other/openscenegraph/include/osgUtil/Tessellator, - src/other/openscenegraph/include/osgUtil/TransformCallback, - src/other/openscenegraph/include/osgUtil/TriStripVisitor, - src/other/openscenegraph/include/osgUtil/UpdateVisitor, - src/other/openscenegraph/include/osgViewer/CompositeViewer, - src/other/openscenegraph/include/osgViewer/GraphicsWindow, - src/other/openscenegraph/include/osgViewer/Keystone, - src/other/openscenegraph/include/osgViewer/Renderer, - src/other/openscenegraph/include/osgViewer/Scene, - src/other/openscenegraph/include/osgViewer/View, - src/other/openscenegraph/include/osgViewer/Viewer, - src/other/openscenegraph/include/osgViewer/ViewerBase, - src/other/openscenegraph/include/osgViewer/ViewerEventHandlers, - src/other/openscenegraph/include/osgViewer/api/IOS/GraphicsWindowIOS, - src/other/openscenegraph/include/osgViewer/api/Win32/GraphicsHandleWin32, - src/other/openscenegraph/include/osgViewer/api/Win32/GraphicsWindowWin32, - src/other/openscenegraph/include/osgViewer/api/X11/GraphicsWindowX11, - src/other/openscenegraph/include/osgViewer/api/X11/PixelBufferX11, - src/other/openscenegraph/include/osgWidget/EventInterface, - src/other/openscenegraph/include/osgWidget/Frame, - src/other/openscenegraph/include/osgWidget/Lua, - src/other/openscenegraph/include/osgWidget/PdfReader, - src/other/openscenegraph/include/osgWidget/StyleManager, - src/other/openscenegraph/include/osgWidget/Util, - src/other/openscenegraph/include/osgWidget/VncClient, - src/other/openscenegraph/include/osgWidget/Widget, - src/other/openscenegraph/include/osgWidget/Window, - src/other/openscenegraph/include/osgWidget/WindowManager, - src/other/openscenegraph/src/CMakeLists.txt, - src/other/openscenegraph/src/OpenThreads/CMake, - src/other/openscenegraph/src/OpenThreads/CMakeLists.txt, - src/other/openscenegraph/src/OpenThreads/PlatformSpecifics, - src/other/openscenegraph/src/OpenThreads/include, - src/other/openscenegraph/src/OpenThreads/pthreads/CMakeLists.txt, - src/other/openscenegraph/src/OpenThreads/pthreads/PThread.cpp, - src/other/openscenegraph/src/OpenThreads/pthreads/PThreadBarrier.cpp, - src/other/openscenegraph/src/OpenThreads/pthreads/PThreadBarrierPrivateData.h, - src/other/openscenegraph/src/OpenThreads/pthreads/PThreadCondition.cpp, - src/other/openscenegraph/src/OpenThreads/pthreads/PThreadMutex.cpp, - src/other/openscenegraph/src/OpenThreads/pthreads/PThreadPrivateData.h, - src/other/openscenegraph/src/OpenThreads/qt, - src/other/openscenegraph/src/OpenThreads/sproc, - src/other/openscenegraph/src/OpenThreads/win32/CMakeLists.txt, - src/other/openscenegraph/src/OpenThreads/win32/Win32BarrierPrivateData.h, - src/other/openscenegraph/src/OpenThreads/win32/Win32Thread.cpp, - src/other/openscenegraph/src/OpenThreads/win32/Win32ThreadPrivateData.h, - src/other/openscenegraph/src/osg/ApplicationUsage.cpp, - src/other/openscenegraph/src/osg/ArgumentParser.cpp, - src/other/openscenegraph/src/osg/Array.cpp, - src/other/openscenegraph/src/osg/ArrayDispatchers.cpp, - src/other/openscenegraph/src/osg/AttributeDispatchers.cpp, - src/other/openscenegraph/src/osg/AutoTransform.cpp, - src/other/openscenegraph/src/osg/Billboard.cpp, - src/other/openscenegraph/src/osg/BindImageTexture.cpp, - src/other/openscenegraph/src/osg/BlendColor.cpp, - src/other/openscenegraph/src/osg/BlendEquation.cpp, - src/other/openscenegraph/src/osg/BlendEquationi.cpp, - src/other/openscenegraph/src/osg/BlendFunc.cpp, - src/other/openscenegraph/src/osg/BlendFunci.cpp, - src/other/openscenegraph/src/osg/BufferIndexBinding.cpp, - src/other/openscenegraph/src/osg/BufferObject.cpp, - src/other/openscenegraph/src/osg/CMakeLists.txt, - src/other/openscenegraph/src/osg/Callback.cpp, - src/other/openscenegraph/src/osg/Camera.cpp, - src/other/openscenegraph/src/osg/Capability.cpp, - src/other/openscenegraph/src/osg/ClampColor.cpp, - src/other/openscenegraph/src/osg/ClipControl.cpp, - src/other/openscenegraph/src/osg/ClipPlane.cpp, - src/other/openscenegraph/src/osg/ClusterCullingCallback.cpp, - src/other/openscenegraph/src/osg/CollectOccludersVisitor.cpp, - src/other/openscenegraph/src/osg/ColorMaski.cpp, - src/other/openscenegraph/src/osg/ComputeBoundsVisitor.cpp, - src/other/openscenegraph/src/osg/Config.in, - src/other/openscenegraph/src/osg/ContextData.cpp, - src/other/openscenegraph/src/osg/CopyOp.cpp, - src/other/openscenegraph/src/osg/CullSettings.cpp, - src/other/openscenegraph/src/osg/Depth.cpp, - src/other/openscenegraph/src/osg/DepthRangeIndexed.cpp, - src/other/openscenegraph/src/osg/DispatchCompute.cpp, - src/other/openscenegraph/src/osg/DisplaySettings.cpp, - src/other/openscenegraph/src/osg/DrawPixels.cpp, - src/other/openscenegraph/src/osg/Drawable.cpp, - src/other/openscenegraph/src/osg/FragmentProgram.cpp, - src/other/openscenegraph/src/osg/FrameBufferObject.cpp, - src/other/openscenegraph/src/osg/GL.in, - src/other/openscenegraph/src/osg/GL2Extensions.cpp, - src/other/openscenegraph/src/osg/GLBeginEndAdapter.cpp, - src/other/openscenegraph/src/osg/GLExtensions.cpp, - src/other/openscenegraph/src/osg/GLObjects.cpp, - src/other/openscenegraph/src/osg/Geode.cpp, - src/other/openscenegraph/src/osg/Geometry.cpp, - src/other/openscenegraph/src/osg/GraphicsContext.cpp, - src/other/openscenegraph/src/osg/GraphicsCostEstimator.cpp, - src/other/openscenegraph/src/osg/GraphicsThread.cpp, - src/other/openscenegraph/src/osg/Group.cpp, - src/other/openscenegraph/src/osg/Hint.cpp, - src/other/openscenegraph/src/osg/Identifier.cpp, - src/other/openscenegraph/src/osg/Image.cpp, - src/other/openscenegraph/src/osg/ImageSequence.cpp, - src/other/openscenegraph/src/osg/ImageUtils.cpp, - src/other/openscenegraph/src/osg/KdTree.cpp, - src/other/openscenegraph/src/osg/LOD.cpp, - src/other/openscenegraph/src/osg/Light.cpp, - src/other/openscenegraph/src/osg/LightModel.cpp, - src/other/openscenegraph/src/osg/LightSource.cpp, - src/other/openscenegraph/src/osg/LineSegment.cpp, - src/other/openscenegraph/src/osg/Material.cpp, - src/other/openscenegraph/src/osg/MatrixDecomposition.cpp, - src/other/openscenegraph/src/osg/Matrix_implementation.cpp, - src/other/openscenegraph/src/osg/Multisample.cpp, - src/other/openscenegraph/src/osg/Node.cpp, - src/other/openscenegraph/src/osg/NodeCallback.cpp, - src/other/openscenegraph/src/osg/NodeVisitor.cpp, - src/other/openscenegraph/src/osg/Notify.cpp, - src/other/openscenegraph/src/osg/OcclusionQueryNode.cpp, - src/other/openscenegraph/src/osg/OperationThread.cpp, - src/other/openscenegraph/src/osg/PagedLOD.cpp, - src/other/openscenegraph/src/osg/PatchParameter.cpp, - src/other/openscenegraph/src/osg/Point.cpp, - src/other/openscenegraph/src/osg/PointSprite.cpp, - src/other/openscenegraph/src/osg/PolygonMode.cpp, - src/other/openscenegraph/src/osg/Polytope.cpp, - src/other/openscenegraph/src/osg/PrimitiveRestartIndex.cpp, - src/other/openscenegraph/src/osg/PrimitiveSet.cpp, - src/other/openscenegraph/src/osg/PrimitiveSetIndirect.cpp, - src/other/openscenegraph/src/osg/Program.cpp, - src/other/openscenegraph/src/osg/Referenced.cpp, - src/other/openscenegraph/src/osg/SampleMaski.cpp, - src/other/openscenegraph/src/osg/Sampler.cpp, - src/other/openscenegraph/src/osg/ScissorIndexed.cpp, - src/other/openscenegraph/src/osg/ScriptEngine.cpp, - src/other/openscenegraph/src/osg/Sequence.cpp, - src/other/openscenegraph/src/osg/Shader.cpp, - src/other/openscenegraph/src/osg/ShaderComposer.cpp, - src/other/openscenegraph/src/osg/ShadowVolumeOccluder.cpp, - src/other/openscenegraph/src/osg/Shape.cpp, - src/other/openscenegraph/src/osg/ShapeDrawable.cpp, - src/other/openscenegraph/src/osg/State.cpp, - src/other/openscenegraph/src/osg/StateAttribute.cpp, - src/other/openscenegraph/src/osg/StateSet.cpp, - src/other/openscenegraph/src/osg/Stats.cpp, - src/other/openscenegraph/src/osg/Stencil.cpp, - src/other/openscenegraph/src/osg/StencilTwoSided.cpp, - src/other/openscenegraph/src/osg/Switch.cpp, - src/other/openscenegraph/src/osg/TexGen.cpp, - src/other/openscenegraph/src/osg/Texture.cpp, - src/other/openscenegraph/src/osg/Texture1D.cpp, - src/other/openscenegraph/src/osg/Texture2D.cpp, - src/other/openscenegraph/src/osg/Texture2DArray.cpp, - src/other/openscenegraph/src/osg/Texture2DMultisample.cpp, - src/other/openscenegraph/src/osg/Texture3D.cpp, - src/other/openscenegraph/src/osg/TextureBuffer.cpp, - src/other/openscenegraph/src/osg/TextureCubeMap.cpp, - src/other/openscenegraph/src/osg/TextureRectangle.cpp, - src/other/openscenegraph/src/osg/TransferFunction.cpp, - src/other/openscenegraph/src/osg/Transform.cpp, - src/other/openscenegraph/src/osg/Uniform.cpp, - src/other/openscenegraph/src/osg/ValueMap.cpp, - src/other/openscenegraph/src/osg/ValueStack.cpp, - src/other/openscenegraph/src/osg/VertexArrayState.cpp, - src/other/openscenegraph/src/osg/VertexAttribDivisor.cpp, - src/other/openscenegraph/src/osg/VertexProgram.cpp, - src/other/openscenegraph/src/osg/View.cpp, - src/other/openscenegraph/src/osg/ViewportIndexed.cpp, - src/other/openscenegraph/src/osg/dxtctool.cpp, - src/other/openscenegraph/src/osg/dxtctool.h, - src/other/openscenegraph/src/osg/glu/libtess/geom.cpp, - src/other/openscenegraph/src/osg/glu/libtess/memalloc.cpp, - src/other/openscenegraph/src/osg/glu/libtess/memalloc.h, - src/other/openscenegraph/src/osg/glu/libtess/mesh.cpp, - src/other/openscenegraph/src/osg/glu/libtess/render.cpp, - src/other/openscenegraph/src/osg/glu/libtess/tess.cpp, - src/other/openscenegraph/src/osg/glu/libutil/error.cpp, - src/other/openscenegraph/src/osg/glu/libutil/mipmap.cpp, - src/other/openscenegraph/src/osg/os_utils.cpp, - src/other/openscenegraph/src/osgDB/CMakeLists.txt, - src/other/openscenegraph/src/osgDB/Callbacks.cpp, - src/other/openscenegraph/src/osgDB/ClassInterface.cpp, - src/other/openscenegraph/src/osgDB/Compressors.cpp, - src/other/openscenegraph/src/osgDB/ConvertBase64.cpp, - src/other/openscenegraph/src/osgDB/DatabasePager.cpp, - src/other/openscenegraph/src/osgDB/DotOsgWrapper.cpp, - src/other/openscenegraph/src/osgDB/DynamicLibrary.cpp, - src/other/openscenegraph/src/osgDB/FieldReader.cpp, - src/other/openscenegraph/src/osgDB/FieldReaderIterator.cpp, - src/other/openscenegraph/src/osgDB/FileCache.cpp, - src/other/openscenegraph/src/osgDB/FileNameUtils.cpp, - src/other/openscenegraph/src/osgDB/FileUtils.cpp, - src/other/openscenegraph/src/osgDB/ImagePager.cpp, - src/other/openscenegraph/src/osgDB/Input.cpp, - src/other/openscenegraph/src/osgDB/InputStream.cpp, - src/other/openscenegraph/src/osgDB/ObjectCache.cpp, - src/other/openscenegraph/src/osgDB/ObjectWrapper.cpp, - src/other/openscenegraph/src/osgDB/Options.cpp, - src/other/openscenegraph/src/osgDB/OutputStream.cpp, - src/other/openscenegraph/src/osgDB/PluginQuery.cpp, - src/other/openscenegraph/src/osgDB/ReadFile.cpp, - src/other/openscenegraph/src/osgDB/ReaderWriter.cpp, - src/other/openscenegraph/src/osgDB/Registry.cpp, - src/other/openscenegraph/src/osgDB/SharedStateManager.cpp, - src/other/openscenegraph/src/osgDB/StreamOperator.cpp, - src/other/openscenegraph/src/osgDB/WriteFile.cpp, - src/other/openscenegraph/src/osgDB/XmlParser.cpp, - src/other/openscenegraph/src/osgGA/AnimationPathManipulator.cpp, - src/other/openscenegraph/src/osgGA/CMakeLists.txt, - src/other/openscenegraph/src/osgGA/CameraManipulator.cpp, - src/other/openscenegraph/src/osgGA/Device.cpp, - src/other/openscenegraph/src/osgGA/DriveManipulator.cpp, - src/other/openscenegraph/src/osgGA/Event.cpp, - src/other/openscenegraph/src/osgGA/EventHandler.cpp, - src/other/openscenegraph/src/osgGA/EventQueue.cpp, - src/other/openscenegraph/src/osgGA/EventVisitor.cpp, - src/other/openscenegraph/src/osgGA/FirstPersonManipulator.cpp, - src/other/openscenegraph/src/osgGA/FlightManipulator.cpp, - src/other/openscenegraph/src/osgGA/GUIEventAdapter.cpp, - src/other/openscenegraph/src/osgGA/GUIEventHandler.cpp, - src/other/openscenegraph/src/osgGA/KeySwitchMatrixManipulator.cpp, - src/other/openscenegraph/src/osgGA/MultiTouchTrackballManipulator.cpp, - src/other/openscenegraph/src/osgGA/NodeTrackerManipulator.cpp, - src/other/openscenegraph/src/osgGA/OrbitManipulator.cpp, - src/other/openscenegraph/src/osgGA/SphericalManipulator.cpp, - src/other/openscenegraph/src/osgGA/StandardManipulator.cpp, - src/other/openscenegraph/src/osgGA/StateSetManipulator.cpp, - src/other/openscenegraph/src/osgGA/TerrainManipulator.cpp, - src/other/openscenegraph/src/osgGA/TrackballManipulator.cpp, - src/other/openscenegraph/src/osgGA/UFOManipulator.cpp, - src/other/openscenegraph/src/osgGA/Widget.cpp, - src/other/openscenegraph/src/osgPlugins/CMakeLists.txt, - src/other/openscenegraph/src/osgPlugins/Path_Setup.cmake, - src/other/openscenegraph/src/osgPlugins/freetype/CMakeLists.txt, - src/other/openscenegraph/src/osgPlugins/freetype/FreeTypeFont.cpp, - src/other/openscenegraph/src/osgPlugins/freetype/FreeTypeFont.h, - src/other/openscenegraph/src/osgPlugins/freetype/FreeTypeLibrary.cpp, - src/other/openscenegraph/src/osgPlugins/freetype/ReaderWriterFreeType.cpp, - src/other/openscenegraph/src/osgPlugins/osg/AsciiStreamOperator.h, - src/other/openscenegraph/src/osgPlugins/osg/BinaryStreamOperator.h, - src/other/openscenegraph/src/osgPlugins/osg/CMakeLists.txt, - src/other/openscenegraph/src/osgPlugins/osg/ReaderWriterOSG.cpp, - src/other/openscenegraph/src/osgPlugins/osg/ReaderWriterOSG2.cpp, - src/other/openscenegraph/src/osgPlugins/osg/XmlStreamOperator.h, - src/other/openscenegraph/src/osgPlugins/png/CMakeLists.txt, - src/other/openscenegraph/src/osgPlugins/png/ReaderWriterPNG.cpp, - src/other/openscenegraph/src/osgQt, - src/other/openscenegraph/src/osgText/CMakeLists.txt, - src/other/openscenegraph/src/osgText/DefaultFont.cpp, - src/other/openscenegraph/src/osgText/DefaultFont.h, - src/other/openscenegraph/src/osgText/FadeText.cpp, - src/other/openscenegraph/src/osgText/Font.cpp, - src/other/openscenegraph/src/osgText/Glyph.cpp, - src/other/openscenegraph/src/osgText/GlyphGeometry.cpp, - src/other/openscenegraph/src/osgText/GlyphGeometry.h, - src/other/openscenegraph/src/osgText/String.cpp, - src/other/openscenegraph/src/osgText/Style.cpp, - src/other/openscenegraph/src/osgText/Text.cpp, - src/other/openscenegraph/src/osgText/Text3D.cpp, - src/other/openscenegraph/src/osgText/TextBase.cpp, - src/other/openscenegraph/src/osgText/shaders, - src/other/openscenegraph/src/osgUtil/CMakeLists.txt, - src/other/openscenegraph/src/osgUtil/CullVisitor.cpp, - src/other/openscenegraph/src/osgUtil/DelaunayTriangulator.cpp, - src/other/openscenegraph/src/osgUtil/DisplayRequirementsVisitor.cpp, - src/other/openscenegraph/src/osgUtil/DrawElementTypeSimplifier.cpp, - src/other/openscenegraph/src/osgUtil/GLObjectsVisitor.cpp, - src/other/openscenegraph/src/osgUtil/IncrementalCompileOperation.cpp, - src/other/openscenegraph/src/osgUtil/IntersectVisitor.cpp, - src/other/openscenegraph/src/osgUtil/IntersectionVisitor.cpp, - src/other/openscenegraph/src/osgUtil/LineSegmentIntersector.cpp, - src/other/openscenegraph/src/osgUtil/MeshOptimizers.cpp, - src/other/openscenegraph/src/osgUtil/Optimizer.cpp, - src/other/openscenegraph/src/osgUtil/PerlinNoise.cpp, - src/other/openscenegraph/src/osgUtil/PlaneIntersector.cpp, - src/other/openscenegraph/src/osgUtil/PolytopeIntersector.cpp, - src/other/openscenegraph/src/osgUtil/RayIntersector.cpp, - src/other/openscenegraph/src/osgUtil/RenderBin.cpp, - src/other/openscenegraph/src/osgUtil/RenderStage.cpp, - src/other/openscenegraph/src/osgUtil/ReversePrimitiveFunctor.cpp, - src/other/openscenegraph/src/osgUtil/SceneView.cpp, - src/other/openscenegraph/src/osgUtil/ShaderGen.cpp, - src/other/openscenegraph/src/osgUtil/Simplifier.cpp, - src/other/openscenegraph/src/osgUtil/SmoothingVisitor.cpp, - src/other/openscenegraph/src/osgUtil/Statistics.cpp, - src/other/openscenegraph/src/osgUtil/TangentSpaceGenerator.cpp, - src/other/openscenegraph/src/osgUtil/Tessellator.cpp, - src/other/openscenegraph/src/osgUtil/TriStripVisitor.cpp, - src/other/openscenegraph/src/osgUtil/UpdateVisitor.cpp, - src/other/openscenegraph/src/osgUtil/shaders, - src/other/openscenegraph/src/osgUtil/tristripper/include/detail/types.h, - src/other/openscenegraph/src/osgViewer/CMakeLists.txt, - src/other/openscenegraph/src/osgViewer/CompositeViewer.cpp, - src/other/openscenegraph/src/osgViewer/DarwinUtils.h, - src/other/openscenegraph/src/osgViewer/DarwinUtils.mm, - src/other/openscenegraph/src/osgViewer/GraphicsWindowCarbon.cpp, - src/other/openscenegraph/src/osgViewer/GraphicsWindowCocoa.mm, - src/other/openscenegraph/src/osgViewer/GraphicsWindowIOS.mm, - src/other/openscenegraph/src/osgViewer/GraphicsWindowWin32.cpp, - src/other/openscenegraph/src/osgViewer/GraphicsWindowX11.cpp, - src/other/openscenegraph/src/osgViewer/HelpHandler.cpp, - src/other/openscenegraph/src/osgViewer/IOSUtils.h, - src/other/openscenegraph/src/osgViewer/IOSUtils.mm, - src/other/openscenegraph/src/osgViewer/Keystone.cpp, - src/other/openscenegraph/src/osgViewer/PixelBufferCocoa.mm, - src/other/openscenegraph/src/osgViewer/PixelBufferWin32.cpp, - src/other/openscenegraph/src/osgViewer/PixelBufferX11.cpp, - src/other/openscenegraph/src/osgViewer/Renderer.cpp, - src/other/openscenegraph/src/osgViewer/Scene.cpp, - src/other/openscenegraph/src/osgViewer/ScreenCaptureHandler.cpp, - src/other/openscenegraph/src/osgViewer/StatsHandler.cpp, - src/other/openscenegraph/src/osgViewer/View.cpp, - src/other/openscenegraph/src/osgViewer/Viewer.cpp, - src/other/openscenegraph/src/osgViewer/ViewerBase.cpp, - src/other/openscenegraph/src/osgViewer/ViewerEventHandlers.cpp, - src/other/openscenegraph/src/osgViewer/config/PanoramicSphericalDisplay.cpp, - src/other/openscenegraph/src/osgViewer/config/SingleWindow.cpp, - src/other/openscenegraph/src/osgViewer/config/SphericalDisplay.cpp, - src/other/openscenegraph/src/osgViewer/config/WoWVxDisplay.cpp, - src/other/openscenegraph/src/osgWidget/Box.cpp, - src/other/openscenegraph/src/osgWidget/Browser.cpp, - src/other/openscenegraph/src/osgWidget/CMakeLists.txt, - src/other/openscenegraph/src/osgWidget/Frame.cpp, - src/other/openscenegraph/src/osgWidget/Input.cpp, - src/other/openscenegraph/src/osgWidget/Label.cpp, - src/other/openscenegraph/src/osgWidget/Lua.cpp, - src/other/openscenegraph/src/osgWidget/PdfReader.cpp, - src/other/openscenegraph/src/osgWidget/StyleManager.cpp, - src/other/openscenegraph/src/osgWidget/ViewerEventHandlers.cpp, - src/other/openscenegraph/src/osgWidget/VncClient.cpp, - src/other/openscenegraph/src/osgWidget/Widget.cpp, - src/other/openscenegraph/src/osgWidget/Window.cpp, - src/other/poly2tri, src/other/stepcode: - Merge dm-fb-merge branch's update of openscenegraph. - -2020-06-24 20:14 starseeker - - * [r76195] src/libged/view/snap.c: - Demonstrate in principle snapping to the closest point to two - line segments if we are close to both of them. Need something - much better than a hard coded number for the tolerance, but the - mechanism itself seems to function. - -2020-06-24 16:09 starseeker - - * [r76194] src/libged/view/data_lines.c, src/libged/view/snap.c: - Start roughing in the necessary logic to identify snapping points - from lines. - -2020-06-24 15:15 starseeker - - * [r76193] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/lseg_pt.txt, include/bg/lseg.h, - src/libbg/CMakeLists.txt, src/libbg/lseg_pt.c, - src/libbg/tests/CMakeLists.txt, src/libbg/tests/lseg_pt.c: - add lseg-pt distance to libbg - -2020-06-24 13:48 starseeker - - * [r76192] src/libged/view/snap.c: - checkpoint - -2020-06-24 13:47 starseeker - - * [r76191] include/bg/lseg.h, src/libbg/lseg_lseg.c, - src/libbg/tests/lseg_lseg.c, src/libbrep/opennurbs_ext.cpp: - API shouldn't insist on sqrt - it isn't always needed, and the - caller may not wish to pay the performance penalty. - -2020-06-24 06:47 brlcad - - * [r76190] src/libged/qray.c: - since the error persisted for years, detect corrupt .mgedrc so a - more meaningful error can be reported. - -2020-06-24 04:56 brlcad - - * [r76189] NEWS: - latently document a user-visible bug cliff fixed back in r66733 - where corrupt .mgedrc files were being generated if a database - wasn't open. fix made the monster 7.26.0 release. - -2020-06-23 19:22 starseeker - - * [r76188] include/bn/plane.h: - Note that plane.h really isn't a numerics API - needs to be - migrated to libbg now that it exists. Probably there are others - to move as well - clip.h and vlist.h are obvious candidates. - -2020-06-23 15:31 starseeker - - * [r76184] src/libged/view/data_lines.c: - Add a few notes - -2020-06-22 22:13 starseeker - - * [r76183] src/libtclcad/tclcad_obj.c: - Test calling higher level view command. - -2020-06-22 21:56 starseeker - - * [r76182] src/libtclcad/tclcad_obj.c: - shift all args - -2020-06-22 21:52 starseeker - - * [r76181] include/dm/bview.h, src/libged/view/data_lines.c, - src/libtclcad/tclcad_obj.c: - It looks like this might be the use case for which the - ged_refresh_handler callback was introduced. - -2020-06-22 18:56 starseeker - - * [r76180] src/libged/ged_private.h, src/libtclcad/tclcad_obj.c: - Initial stab at shifting libtclcad to calling libged function - - eventually will need to stage this properly through the view - command - -2020-06-22 15:22 starseeker - - * [r76176] CMakeLists.txt, misc/CMake/RPath_Setup.cmake: - One of the things an eventual superbuild migration will require - is a separation between CMAKE_INSTALL_PREFIX and the ultimate - BRLCAD_INSTALL_PREFIX (the latter being the superbuild's ultimate - installation destination, as opposed to the local paths used to - install the intermediate subbuilds.) BRL-CAD itself would be - build as a subbuild in this scenario, so it would have to target - an install step to a local CMAKE_INSTALL_PREFIX but still have a - different installed location 'baked in' to the code itself via - the configure headers and rpaths, which is something we haven't - previously done. - -2020-06-22 14:24 starseeker - - * [r76175] include/dm/bview.h, src/libged/CMakeLists.txt, - src/libged/ged_private.h, src/libged/view/data_lines.c, - src/libged/view/view.c: - Start trying to figure out how to exercise the data_lines code. - Right now this is an Archer/libtclcad only functionality from the - looks of things... see if it can be factored down into libged so - we can test it in MGED. - -2020-06-19 19:16 starseeker - - * [r76166] src/mged/attach.c: - make sure we have a GEDP before NULLing out - -2020-06-19 19:04 starseeker - - * [r76165] src/mged/adc.c, src/mged/attach.c, src/mged/buttons.c, - src/mged/chgview.c, src/mged/cmd.c, src/mged/color_scheme.c, - src/mged/doevent.c, src/mged/dozoom.c, src/mged/fbserv.c, - src/mged/menu.c, src/mged/mged.c, src/mged/mged_dm.h, - src/mged/set.c, src/mged/share.c: - Wrap the curr_dm_list setting in order to also update relevant - GEDP variables. - -2020-06-19 18:30 starseeker - - * [r76164] include/dm/bview.h, src/mged/attach.c, - src/mged/dm-generic.c, src/mged/doevent.c, src/mged/grid.c, - src/mged/mged.c, src/mged/mged_dm.h, src/mged/share.c: - Replace MGED's _grid_state with the bview.h version of the - structure (used by libged) - -2020-06-19 18:29 starseeker - - * [r76163] src/libged/view/snap.c: - Start working on actually getting some sort of snapping to work. - -2020-06-19 15:33 starseeker - - * [r76162] src/libged/view/snap.c: - Read inputs - -2020-06-19 15:11 starseeker - - * [r76161] src/libged/CMakeLists.txt, src/libged/ged_private.h, - src/libged/view/snap.c, src/libged/view/view.c: - stub in a view snap subcommand for experimentation - -2020-06-19 14:21 starseeker - - * [r76160] src/libged/CMakeLists.txt, src/libged/aet.c, - src/libged/center.cpp, src/libged/eye.c, src/libged/quat.c, - src/libged/size.c, src/libged/view, src/libged/view.c, - src/libged/view/aet.c, src/libged/view/center.cpp, - src/libged/view/eye.c, src/libged/view/quat.c, - src/libged/view/size.c, src/libged/view/view.c, - src/libged/view/ypr.c, src/libged/ypr.c: - Move view files to subdirectory - -2020-06-18 17:47 starseeker - - * [r76157] src/burst/burst.cpp: - fix bu_cmd_valid check - -2020-06-18 17:18 starseeker - - * [r76156] regress/burst/CMakeLists.txt, src/burst/CMakeLists.txt, - src/burst/old/CMakeLists.txt: - give the newer version the different name for now - -2020-06-18 17:10 starseeker - - * [r76154] ., NEWS, doc, include, regress, - regress/burst/CMakeLists.txt, regress/burst/echo.b, - regress/burst/ktank.b, regress/burst/ktank_colors.ids, - src/burst/CMakeLists.txt, src/burst/Hm.c, src/burst/HmGetc.c, - src/burst/HmGlob.c, src/burst/Mm.h, src/burst/Sc.c, - src/burst/Sc.h, src/burst/ascii.h, src/burst/burst.c, - src/burst/burst.cpp, src/burst/burst.h, src/burst/error.c, - src/burst/extern.h, src/burst/fb.c, src/burst/glob.c, - src/burst/grid.c, src/burst/grid.cpp, src/burst/gridrotate.c, - src/burst/idents.c, src/burst/idents.cpp, src/burst/old, - src/burst/paint.c, src/burst/paint.cpp, src/burst/plot.c, - src/burst/prnt.c, src/burst/trie.c, src/burst/ui.c, src/libbu, - src/libbu/units.c: - Go ahead and merge the burst changes back from the branch - this - should be fairly self contained. - -2020-06-16 22:15 starseeker - - * [r76146] src/util/CMakeLists.txt: - halftone2 -> halftone - -2020-06-15 18:01 starseeker - - * [r76144] misc/tools/debug2c/CMakeLists.txt, - misc/tools/env2c/CMakeLists.txt: - O3 seems to really help C++ regex, so add it to the scanning - tools as well. - -2020-06-15 17:06 starseeker - - * [r76142] src/libfft/CMakeLists.txt: - libfft executables were getting defines from src/CMakeLists.txt - - add them explicitly per target. - -2020-06-15 15:28 brlcad - - * [r76141] INSTALL: - e key sticks - -2020-06-12 19:47 starseeker - - * [r76140] NEWS, include/dm.h, src/libdm/dm_obj.c, - src/libdm/scale.c, src/libtclcad/tclcad_obj.c, - src/tclscripts/lib/Display.tcl: - Per user request, added units to the faceplate scale display in - Archer - -2020-06-12 15:43 starseeker - - * [r76137] misc/CMake/CMakeLists.txt, - misc/CMake/FindFontconfig.cmake: - Put back FindFontconfig.cmake, not present in all active versions - of CMake - -2020-06-10 00:38 starseeker - - * [r76098] doc/docbook/system/man1/burst.xml: - typo - -2020-06-09 22:03 starseeker - - * [r76095] src/util/halftone.c: - fix regress repository - bio.h check - -2020-06-09 20:54 starseeker - - * [r76094] src/CMakeLists.txt, src/halftone, - src/util/CMakeLists.txt, src/util/halftone.c: - Consolidate halftone into a single file and move it to src/util - -2020-06-09 17:54 starseeker - - * [r76090] include/bu/opt.h: - Make a note what the return value is when a problem arises - -2020-06-09 16:50 starseeker - - * [r76089] misc/CMake/BRLCAD_Targets.cmake, - regress/user/CMakeLists.txt: - Add a 'managed_files' target to allow other targets to depend on - the files being set up properly. - -2020-06-09 02:48 starseeker - - * [r76084] include/gcv/api.h: - This function is internal to the plugin mechanism - don't expose - in the public header - -2020-06-09 02:36 starseeker - - * [r76083] include/gcv/util.h, include/rt/tree.h, - src/adrt/load_g.c, src/conv/CMakeLists.txt, src/conv/dxf/g-dxf.c, - src/conv/g-egg.c, src/conv/raw/g-raw.c, src/conv/stl/g-stl.c, - src/libgcv/CMakeLists.txt, src/libgcv/plugins/CMakeLists.txt, - src/libgcv/plugins/decimate/decimate.c, - src/libgcv/plugins/fastgen4/CMakeLists.txt, - src/libgcv/plugins/fastgen4/fastgen4_read.c, - src/libgcv/plugins/fastgen4/fastgen4_write.cpp, - src/libgcv/plugins/gdal/CMakeLists.txt, - src/libgcv/plugins/gdal/gdal.cpp, - src/libgcv/plugins/obj/CMakeLists.txt, - src/libgcv/plugins/obj/obj_read.c, - src/libgcv/plugins/rhino/rhino_read.cpp, - src/libgcv/plugins/stl/CMakeLists.txt, - src/libgcv/plugins/stl/stl_read.c, - src/libgcv/plugins/stl/stl_write.c, - src/libgcv/plugins/vrml/CMakeLists.txt, - src/libgcv/plugins/vrml/vrml_write.c, src/libgcv/region_end.c, - src/libgcv/region_end_mc.c, src/librt/CMakeLists.txt, - src/librt/region_end.c, src/librt/region_end_mc.c: - Revert most of the libgcv changes, and try the libdm approach - from the branch of just using the export definition. Plugins - aren't going to be linked as libraries to executables, so they - shouldn't need the dual behavior... - -2020-06-08 21:00 starseeker - - * [r76077] src/conv/raw/g-raw.c: - add header - -2020-06-08 20:10 starseeker - - * [r76076] include/gcv/util.h, include/rt/tree.h, - src/conv/CMakeLists.txt, src/conv/g-egg.c, src/conv/raw/g-raw.c, - src/conv/stl/g-stl.c, src/libgcv/CMakeLists.txt, - src/libgcv/plugins/stl/stl_write.c, src/libgcv/region_end_mc.c, - src/librt/CMakeLists.txt, src/librt/region_end_mc.c: - move the mc version as well - -2020-06-08 19:45 starseeker - - * [r76075] include/gcv/util.h, include/rt/tree.h, - src/adrt/load_g.c, src/conv/dxf/g-dxf.c, src/conv/g-egg.c, - src/conv/raw/g-raw.c, src/conv/stl/g-stl.c, - src/libgcv/CMakeLists.txt, - src/libgcv/plugins/fastgen4/fastgen4_write.cpp, - src/libgcv/plugins/stl/stl_write.c, src/libgcv/region_end.c, - src/libgcv/region_end_mc.c, src/librt/CMakeLists.txt, - src/librt/region_end.c: - Shift logic around so that libgcv plugins don't depend on libgcv. - -2020-06-08 19:23 starseeker - - * [r76074] src/libgcv/plugins/gdal/CMakeLists.txt: - missed a libwdb addition - -2020-06-08 19:20 starseeker - - * [r76073] src/libgcv/CMakeLists.txt: - Add explicit libgcv dependency on plugins - -2020-06-08 19:16 starseeker - - * [r76072] src/libgcv/plugins/fastgen4/CMakeLists.txt, - src/libgcv/plugins/obj/CMakeLists.txt, - src/libgcv/plugins/stl/CMakeLists.txt, - src/libgcv/plugins/vrml/CMakeLists.txt: - Add libwdb library dependency to link lists - -2020-06-08 19:11 starseeker - - * [r76071] src/libgcv/plugins/CMakeLists.txt: - libgcv shouldn't be in this list - -2020-06-08 18:59 starseeker - - * [r76070] src/libgcv/plugins/CMakeLists.txt: - Hmm. Using INTERFACE_COMPILE_DEFINITIONS on libgcv complicates - this quite a bit, since the GCV_DLL* piece comes automatically - from the linking of the lib at a level we can't interfere with - directly... - -2020-06-08 18:14 starseeker - - * [r76069] src/libgcv/plugins/CMakeLists.txt: - Hmm... need to sort out how to deal with this for plugins... - -2020-06-08 17:31 starseeker - - * [r76068] src/libbrep/CMakeLists.txt: - libbrep needs the import, not just libbrep users - -2020-06-08 15:56 starseeker - - * [r76067] misc/CMake/BRLCAD_Targets.cmake, - src/libbrep/CMakeLists.txt: - Replace our custom DLL defines management logic with CMake's - COMPILE_DEFINITIONS and INTERFACE_COMPILE_DEFINITIONS. The latter - in particular should be what we need to automatically propagate - the DLL definitions to targets using the libraries. - -2020-06-08 02:05 starseeker - - * [r76063] doc/docbook/CMakeLists.txt: - Need relative path for distclean - -2020-06-07 17:56 starseeker - - * [r76061] src/burst/CMakeLists.txt, src/burst/Hm.c, - src/burst/Hm.h, src/burst/HmGetc.c, src/burst/burst.c, - src/burst/burst.h, src/burst/extern.h, src/burst/trie.c, - src/burst/trie.h, src/burst/ui.c: - checkpoint - -2020-06-07 15:57 starseeker - - * [r76060] regress/user/CMakeLists.txt: - Include directory needs to be config aware in multiconfig builds - -2020-06-07 15:54 starseeker - - * [r76059] doc/docbook/CMakeLists.txt: - Set target folders - -2020-06-07 15:47 starseeker - - * [r76058] src/librt/cache_lz4.c: - add common.h - -2020-06-07 15:43 starseeker - - * [r76057] doc/docbook/CMakeLists.txt, regress/user/CMakeLists.txt: - list files for distcheck - -2020-06-07 14:17 starseeker - - * [r76056] doc/docbook/resources/other/CMakeLists.txt: - mark as advanced - -2020-06-07 13:35 starseeker - - * [r76055] INSTALL, configure, doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/lz4.txt, doc/legal/other/CMakeLists.txt, - doc/legal/other/lz4.txt, misc/CMake/CMakeLists.txt, - misc/CMake/FindLZ4.cmake, src/librt/CMakeLists.txt, - src/librt/cache.c, src/librt/cache_lz4.c, - src/other/CMakeLists.txt, src/other/lz4, src/other/lz4.dist: - Extract the bits of lz4 we're using for the librt cache and embed - them with librt. - -2020-06-07 13:25 starseeker - - * [r76054] regress/gchecker/regress-gchecker.cmake.in: - use LOGFILE var - -2020-06-07 13:23 starseeker - - * [r76053] regress/licenses/regress-licenses.cmake.in, - regress/repository/regress-repository.cmake.in: - Mention where the log file is in the message CTest will output. - -2020-06-06 19:21 starseeker - - * [r76050] include/common.h: - Protect the HAVE_ tests in common.h with a check for the - BRLCADBUILD and HAVE_CONFIG_H defines. - -2020-06-06 19:15 starseeker - - * [r76049] include/bu/tc.h: - Once we untangle the gct decimation and tienet codes, this header - will go away and in the meantime it is documented as not being - considered public API. Enforce that further with BRLCADBUILD and - HAVE_CONFIG_H guards. - -2020-06-06 19:09 starseeker - - * [r76048] include/bu/path.h: - path.h doesn't seem to be using any RTLD_ symbols in the header - itself... - -2020-06-06 18:55 starseeker - - * [r76047] regress/user/CMakeLists.txt: - adjust comments - -2020-06-06 18:53 starseeker - - * [r76046] include/bu/cmd.h, regress/user/CMakeLists.txt, - src/bwish/cmd.c, src/libbu/CMakeLists.txt, src/libbu/cmdhist.c: - Remove deprecated API from bu/cmd.h - avoids the compile-time API - issue that was keeping the user regression program from building. - -2020-06-06 18:45 starseeker - - * [r76045] regress/user/CMakeLists.txt, regress/user/cad_user.c, - src/bwish/CMakeLists.txt, src/conv/step/ap203e2-g/CMakeLists.txt, - src/conv/step/ap214-g/CMakeLists.txt, - src/conv/step/ap242-g/CMakeLists.txt, - src/conv/step/g-ap203e2/CMakeLists.txt, - src/conv/step/g-ap214/CMakeLists.txt, - src/conv/step/g-ap242/CMakeLists.txt, - src/conv/step/g-step/CMakeLists.txt, - src/conv/step/ifc-g/CMakeLists.txt, - src/conv/step/util/CMakeLists.txt, - src/external/Creo/CMakeLists.txt, - src/external/Cubit/CMakeLists.txt, - src/external/Unigraphics/CMakeLists.txt, - src/libbu/tests/dylib/CMakeLists.txt, src/remrt/CMakeLists.txt: - Shifting the target property setting to private exposed some - issues with how we were applying compile definitions. - -2020-06-06 17:20 starseeker - - * [r76044] regress/CMakeLists.txt, - regress/rtwizard/regress-rtwiz.cmake.in, regress/user, - regress/user/CMakeLists.txt, regress/user/cad_user.c, - regress/user/regress-user.cmake.in: - Start setting up a test intended to build and run against the CAD - libraries the way an external project would (i.e. without using - the compile-time definitions or APIs.) Not turning on right now - as it won't build... - -2020-06-06 17:10 starseeker - - * [r76043] misc/CMake/BRLCAD_Targets.cmake: - BRLCADBUILD and HAVE_CONFIG_H target defines need to be PRIVATE, - or they will propagate to targets linking libraries - automatically. We should replace our custom management of define - propagation with this feature, but in the specific case of these - definitions they should not propagate - they are specific to each - compile. - -2020-06-06 15:43 starseeker - - * [r76042] CMakeLists.txt, include/brlcad_ident.h.in: - Add define-checking messages for other compile-time API headers. - -2020-06-06 15:15 starseeker - - * [r76041] bench/CMakeLists.txt, misc/CMake/BRLCAD_Targets.cmake, - regress/ged/CMakeLists.txt, regress/pkg/CMakeLists.txt, - regress/repository/CMakeLists.txt, src/CMakeLists.txt: - Rather than setting top level definitions, use our wrapper - functions to set BRLCADBUILD and HAVE_CONFIG_H definitions - per-target. - -2020-06-06 15:13 starseeker - - * [r76040] include/brlcad_version.h.in: - Be a bit noisy if someone includes brlcad_version.h without - BRLCADBUILD or HAVE_CONFIG_H. Not intended to be a fatal error - - brlcad_version.h stills function without the defines, if I'm - reading the header correctly - but will reinforce separation - between compile-time and non-compile-time APIs. - -2020-06-06 14:25 starseeker - - * [r76039] ., include, misc/debian/changelog, - misc/macosx/Resources/ReadMe.rtfd/TXT.rtf, - misc/macosx/Resources/Welcome.rtfd/TXT.rtf, regress, src/libbu, - src/mged/dozoom.c, src/other, src/other/libregex, - src/rt/viewedge.c: - Merge remaining RELEASE changes back into trunk (r76038) - -2020-06-05 19:11 starseeker - - * [r76037] CMakeLists.txt, include/common.h: - Client codes need these definitions without including - brlcad_config.h, and ideally shouldn't have to do their own - configure tests either (historically they haven't needed to.) - -2020-06-05 18:07 starseeker - - * [r76036] db/conv_run.cmake.in: - Switch the database build cmake script to using the BIN_DIR - variable to deduce the root dir. - -2020-06-05 17:56 starseeker - - * [r76034] include/common.h: - Make sure the COMPILER_DLL* defines are empty in situations where - brlcad_config.h isn't available. - -2020-06-05 08:08 brlcad - - * [r76033] CMakeLists.txt: - don't warn about function mismatches during the second profile - guided pass when compiling with clang, otherwise the cmake tests - themselves will fail because they have a mismatched main(). also - don't bark if it's code we didn't run on the first pass. - -2020-06-05 07:09 brlcad - - * [r76032] INSTALL, README: - document the different test targets and pgo build flags. try to - reduce the language a bit (much more overdue, but later. - -2020-06-05 06:40 d_rossberg - - * [r76031] misc/win32-msvc/Dll/CMakeLists.txt: - added the newly added VectorList for compiling - -2020-06-02 07:00 brlcad - - * [r76000] regress/flawfinder.sh: - provide flawfinder an explicit list of files, shaves 17sec down - to 12sec. excluding realpath_bsd since it's not our code, even - though the reports is a genuine security concern with readlink. - the 3rd party code is properly nul-terminating and checking - return codes, but it is vulnerable to TOCTOU attacks and buffer - truncation. don't have a good answer other than finding - better/different 3rd party code without this vulnerability. ugh. - -2020-06-02 06:35 brlcad - - * [r75999] misc/flawfinder: - upgrade flawfinder from 2.0.4 to 2.0.11 which adds 5 new - detections - -2020-06-01 19:37 starseeker - - * [r75998] src/libdm/dm-tk.c, src/libdm/dm-tk.h: - Need to look a little more to be sure, but I think once this is - put into the photo we no longer need the local copy... - -2020-06-01 19:24 starseeker - - * [r75997] src/libdm/dm-tk.c, src/libdm/dm-tk.h: - Add a Tk_Photo - -2020-06-01 17:04 starseeker - - * [r75996] doc/notes/cmake_paths/CMakeLists.txt, - doc/notes/cmake_paths/test.cmake.in: - CMake's install() throws a wrinkle into the generator expression - usage when - combined with add_custom_command. Somewhat surprisingly it looks - as if it can - work, but requires that the custom command be linked to a custom - target that - has ALL set so it gets triggered before install takes place. This - is necessary - because we can't pass generator expression paths into the OUTPUT - entry of - add_custom_command, so we can't establish a direct file - dependency in the build - process. Nor (as far as I can tell) can we explicitly set target - dependencies - for install rules, so we need the ALL enabled target to hook our - custom target - in under the install process. - - Until the lack of generator expression support in - add_custom_command's OUTPUT - specifiers is addressed - (https://gitlab.kitware.com/cmake/cmake/-/issues/12877) - it's probably not worth reengineering the DocBook build to shift - us off the - existing mechanism - right now it looks like we would be trading - one - functional-but-ackward solution for what would probably end up - being another - functional-but-ackward solution. - -2020-06-01 16:07 starseeker - - * [r75995] doc/docbook/README: - Don't have the various tool options anymore - remove doc - -2020-06-01 14:51 starseeker - - * [r75994] doc/docbook/CMakeLists.txt, doc/docbook/db_dir_info.c, - misc/CMake/DocBook.cmake, misc/CMake/Path_Setup.cmake: - Experiment with generator expressions and - add_custom_command/add_custom_target. Generator expressions will - work only in COMMAND, so unfortunately we can't implement the - most robust approach - i.e. specify the actual file outputs as - the OUTPUT and DEPENDS arguments. Instead, we use a stamp file - specific to the command that generates a per-configuration stamp - file using the CMAKE_CFG_INTDIR variable to detect if the build - target has run for the current configuration. This has the - drawback that the build target will fail to detect the removal of - the per-config output and re-run, but it will re-run if the stamp - file is removed or (more importantly) if the source file is - edited. - -2020-06-01 14:05 starseeker - - * [r75993] doc/CMakeLists.txt, doc/notes/cmake_paths, - doc/notes/cmake_paths/CMakeLists.txt, - doc/notes/cmake_paths/README.txt, - doc/notes/cmake_paths/dir_info.c, - doc/notes/cmake_paths/test.cmake.in: - Add a minimal example showing the combination of configure_file - and generator expressions being used for runtime identification - of the current BRL-CAD root hierarchy path in build scripts. This - is a bit tricky, but should be a bit more 'standard' than the - CURRENT_PATH custom mechanism originally added years ago for - pre-generator-expressions CMake builds to achieve the same - result. Regression tests are using this method currently - next - step will be to convert the DocBook logic to using it. It's not - clear yet if the build-type based install path customization can - use this approach. (Some portion of it will have to persist - regardless, as the once-per-configuration-change logic that - reworks the install files to update their paths depends on the - current-configuration-named file not being present on the - filesystem to trigger.) - -2020-06-01 13:45 starseeker - - * [r75992] regress/burst/regress-burst.cmake.in, - regress/nurbs/regress-nurbs-test.cmake.in, - regress/rtwizard/regress-rtwiz.cmake.in: - Switch to an approach that makes fewer assumptions about BIN_DIR - -2020-06-01 00:13 starseeker - - * [r75991] doc/docbook/CMakeLists.txt: - This bit should be redundant now - -2020-06-01 00:07 starseeker - - * [r75990] doc/docbook/CMakeLists.txt, - doc/docbook/resources/CMakeLists.txt, - doc/docbook/resources/brlcad/CMakeLists.txt, - doc/docbook/resources/other/CMakeLists.txt, - doc/docbook/resources/other/expand.cmake: - Adjust DocBook logic for setting up resource files - -2020-05-31 15:36 starseeker - - * [r75989] db/CMakeLists.txt, db/conv_run.cmake.in, - misc/CMake/BRLCAD_Util.cmake: - Rework the 3dm-g conversion build target to use generator - expressions rather than the CURRENT_PATH mechanism. - -2020-05-31 14:20 starseeker - - * [r75987] ., CMakeLists.txt, NEWS, doc, include, - misc/CMake/BRLCAD_Targets.cmake, regress, regress/CMakeLists.txt, - regress/burst/CMakeLists.txt, - regress/burst/regress-burst-ktank.cmake.in, - regress/burst/regress-burst.cmake.in, - regress/gchecker/CMakeLists.txt, - regress/gchecker/regress-gchecker.cmake.in, - regress/gcv/CMakeLists.txt, regress/gcv/dem/CMakeLists.txt, - regress/gcv/dem/regress-dem.cmake.in, regress/gcv/fastgen, - regress/gcv/fastgen_box.fast4, regress/gcv/fastgen_dos.fast4, - regress/gcv/regress-fastgen.cmake.in, regress/ged/CMakeLists.txt, - regress/ged/mater.c, regress/ged/regress-ged_mater.cmake.in, - regress/ged/regress-mater.cmake.in, regress/icv/CMakeLists.txt, - regress/icv/regress-icv_export.cmake.in, - regress/icv/regress-icv_import.cmake.in, - regress/licenses/CMakeLists.txt, - regress/licenses/regress-licenses.cmake, - regress/licenses/regress-licenses.cmake.in, - regress/mged/CMakeLists.txt, regress/mged/regress-mged.cmake.in, - regress/mged/run_test, regress/nurbs/CMakeLists.txt, - regress/nurbs/regress-nurbs-nirt.cmake.in, - regress/nurbs/regress-nurbs-test.cmake.in, - regress/pkg/CMakeLists.txt, regress/pkg/regress-pkg.cmake.in, - regress/repository/CMakeLists.txt, - regress/repository/regress-repository.cmake, - regress/repository/regress-repository.cmake.in, - regress/rtwizard/CMakeLists.txt, - regress/rtwizard/regress-rtwiz.cmake.in, src/libbu, - src/libged/tests/CMakeLists.txt, src/libged/tests/mater.c, - src/other, src/other/libgdiam, src/other/libnetpbm, - src/other/libspsr, src/other/libvds, src/other/poly2tri, - src/other/stepcode: - Merge regression test system changes from bioh branch (through - r75986) - -2020-05-29 16:33 brlcad - - * [r75985] src/librt/roots.c: - register is no longer cool, but still removing with caution as - our hints are making a difference on performance - -2020-05-29 16:32 brlcad - - * [r75984] src/libbn/poly.c: - document the struct copy - -2020-05-29 15:38 jordisayol - - * [r75983] misc/debian/CMakeLists.txt, - misc/debian/brlcad-doc-animation.desktop, - misc/debian/brlcad.install, sh/make_rpm.sh: - remove obsolete menu entry - -2020-05-29 15:28 jordisayol - - * [r75982] misc/debian/archer.desktop, misc/debian/mged.desktop, - misc/debian/rtwizard.desktop: - update desktop menu entries - -2020-05-29 12:48 starseeker - - * [r75981] doc/html/manuals/mged/default_key_bindings.html: - Mention the nirt key binding - -2020-05-29 12:05 jordisayol - - * [r75980] misc/debian/rules: - do not treat warnings as errors - -2020-05-29 00:57 starseeker - - * [r75979] doc/CMakeLists.txt, doc/archer_ack.txt, - src/archer/CMakeLists.txt, src/archer/archer_ack.txt: - Put the archer acknowledgement with archer itself - -2020-05-29 00:49 starseeker - - * [r75978] doc/CMakeLists.txt, - doc/docbook/system/man3/CMakeLists.txt, - doc/docbook/system/man3/libpkg.xml, doc/pkg.tr: - Transcribe pkg.tr into Docbook - -2020-05-28 22:07 starseeker - - * [r75977] doc/CMakeLists.txt: - fix file path - -2020-05-28 21:46 starseeker - - * [r75976] doc/CMakeLists.txt, doc/README, doc/README.Linux, - doc/README.MacOSX, doc/README.Windows, doc/README.other, - doc/README.other/README.Linux, doc/README.other/README.MacOSX, - doc/README.other/README.Windows: - Put the three most common platforms at the top level - -2020-05-28 21:33 starseeker - - * [r75975] doc/CMakeLists.txt, doc/mk.tr, src/shapes/bolt.c, - src/shapes/gastank.c, src/shapes/handle.c, src/shapes/window.c, - src/shapes/window_frame.c, src/shapes/wire.c: - Transfer some notes to the files in question and delete mk.tr - -2020-05-28 21:21 starseeker - - * [r75974] doc/CMakeLists.txt, doc/ged.tr: - We have a Docbook version of this, and VCS has the .tr file if we - need to refer back - -2020-05-28 20:50 starseeker - - * [r75973] doc/CMakeLists.txt, doc/c_cxx_patterns, - doc/notes/c_cxx_patterns, doc/notes/parsers, doc/parsers: - More moves to subdirectories - -2020-05-28 20:47 starseeker - - * [r75972] doc/CMakeLists.txt, doc/README, doc/README.AIX, - doc/README.BSD, doc/README.IRIX, doc/README.Linux, - doc/README.MacOSX, doc/README.OSCON-2014, doc/README.Solaris, - doc/README.VAX, doc/README.Windows, doc/README/README.AIX, - doc/README/README.BSD, doc/README/README.IRIX, - doc/README/README.Linux, doc/README/README.MacOSX, - doc/README/README.OSCON-2014, doc/README/README.Solaris, - doc/README/README.VAX, doc/README/README.Windows, doc/TODO.BREP, - doc/TODO.shaded_displays, doc/brep.txt, - doc/bsd_semaphore_bug.txt, doc/bu_opt_design_notes.txt, - doc/cmake_vars.txt, doc/csv_to_comgeom.txt, doc/cvs.txt, - doc/ecosystem.dot, doc/editors.txt, doc/history.txt, - doc/hypot.txt, doc/implicit_constraints.txt, doc/lcov.txt, - doc/mater.txt, doc/matrix.txt, doc/notes, doc/notes/TODO.BREP, - doc/notes/TODO.shaded_displays, doc/notes/brep.txt, - doc/notes/bsd_semaphore_bug.txt, - doc/notes/bu_opt_design_notes.txt, doc/notes/cmake_vars.txt, - doc/notes/csv_to_comgeom.txt, doc/notes/cvs.txt, - doc/notes/ecosystem.dot, doc/notes/editors.txt, - doc/notes/history.txt, doc/notes/hypot.txt, - doc/notes/implicit_constraints.txt, doc/notes/lcov.txt, - doc/notes/mater.txt, doc/notes/matrix.txt, doc/notes/regions.txt, - doc/notes/rounding.txt, doc/notes/tool_categories.txt, - doc/regions.txt, doc/rounding.txt, doc/tool_categories.txt: - Try to reduce the clutter accumulating at the toplevel doc - directory. - -2020-05-28 20:36 starseeker - - * [r75971] doc/CMakeLists.txt, doc/irprep.tr: - obsolete - -2020-05-28 20:33 starseeker - - * [r75970] doc/cmake_vars.txt: - Remove a couple options we don't define anymore - -2020-05-28 20:26 starseeker - - * [r75969] doc/CMakeLists.txt, doc/trunk_hierarchy.org: - Rather than a static file, this should probably be coming from a - build target - it gets out of date to easily as is. - -2020-05-28 20:20 starseeker - - * [r75968] doc/CMakeLists.txt, doc/benchmark.tr, - doc/docbook/system/man5/CMakeLists.txt, - doc/docbook/system/man5/benchmark.xml: - It will need considerably more updating to be valid, but get the - benchmark.tr file into Docbook via doclifter and building. - -2020-05-28 19:35 starseeker - - * [r75967] doc/html/CMakeLists.txt, - doc/html/manuals/mged/brlcad_glossary.html, - doc/html/manuals/mged/brlcad_solids.html, - doc/html/manuals/mged/cmd_line_ed.html, - doc/html/manuals/mged/concl.html, - doc/html/manuals/mged/default_key_bindings.html, - doc/html/manuals/mged/default_mouse_bindings.html, - doc/html/manuals/mged/ged.html, doc/html/manuals/mged/mged.html, - doc/html/manuals/mged/mged1.html, - doc/html/manuals/mged/mged2.html, - doc/html/manuals/mged/mged3.html, - doc/html/manuals/mged/mged_callbacks.html, - doc/html/manuals/mged/mged_cmd_index.html, - doc/html/manuals/mged/mged_env_vars.html, - doc/html/manuals/mged/mged_gui.html, - doc/html/manuals/mged/mged_tcl_vars.html, - doc/html/manuals/mged/notes.html, doc/html/manuals/mged/outline, - doc/html/manuals/mged/shaders.html, - doc/html/manuals/mged/skipped: - Run the MGED HTML pages through Tidy - -2020-05-28 18:58 starseeker - - * [r75966] doc/html/manuals/mged/contents.html, - doc/html/manuals/mged/index.html, - doc/html/manuals/mged/preface.html: - Try running some of the HTML pages through tidy - -2020-05-28 18:13 starseeker - - * [r75965] regress/repository/repocheck.cpp: - Add a check to make sure we don't introduce std::system into - repocheck. (Can't do plain 'system' yet as it's currently used by - tienet_master.c in adrt.) - -2020-05-28 17:28 starseeker - - * [r75962] src/libdm/dm-X.c, src/libdm/dm-ogl.c, - src/libdm/dm-osgl.cpp, src/libdm/dm-qt.cpp, src/libdm/dm-tk.c, - src/libdm/dm-wgl.c, src/tclscripts/libdm.tcl: - bind_dm is an empty no-op, stubbed in so the default libdm stub - has a proc to execute. Remove both the empty stub and the default - init string setting in the dm backends, instead executing the - init Tcl_Eval only if the caller has supplied something for us to - init. - -2020-05-28 17:15 starseeker - - * [r75961] src/libdm/dm-tk.c: - Print something more informative if the init fails - -2020-05-28 17:04 starseeker - - * [r75959] src/libdm/dm-X.c, src/libdm/dm-ogl.c, - src/libdm/dm-osgl.cpp, src/libdm/dm-qt.cpp, src/libdm/dm-tk.c, - src/libdm/dm-wgl.c, src/tclscripts/libdm.tcl: - There doesn't seem to be any 'init_dm' to call and the _init_dm - wrapper just calls the arguments libdm is supplying. Dispense - with the _init_dm proc. - -2020-05-28 15:17 starseeker - - * [r75958] doc/docbook/system/mann/whichid.xml: - update whichid man page - -2020-05-28 13:54 starseeker - - * [r75957] src/tclscripts/mged/bindings.tcl: - Thanks Bob - 'puts' redirects the nirt output to the MGED console - -2020-05-28 00:36 starseeker - - * [r75956] src/libged/which.cpp: - Don't use -1 as a magic number, as there isn't anything - preventing it being supplied in a range to whichid - -2020-05-28 00:11 starseeker - - * [r75955] src/libged/which.cpp: - trim unneeded checks - -2020-05-27 23:52 starseeker - - * [r75954] src/libged/which.cpp: - Per user feedback, implement a feature similar to a script by - Nick that prints ranges of unused ids rather than each individual - id. Also, don't silently ignore invalid range specifications. - -2020-05-27 18:40 starseeker - - * [r75953] NEWS, src/libged/comb.c, src/libged/search.c: - Use the alphanum sorting for search outputs - produces a more - intuitive ordering for .g files like m35.g which have r#[#][#] - naming patterns. - -2020-05-27 02:35 starseeker - - * [r75951] src/libpkg/pkg.c: - I think we need to call WSAGetLastError to get the right value - here - without this, the regress-pkg test fails using the - threaded approach on Windows. - -2020-05-26 21:49 starseeker - - * [r75944] src/libged/alphanum.h: - regress-repository doesn't like the comment - -2020-05-26 21:43 starseeker - - * [r75943] src/libged/alphanum.h: - In this case we can simplify down to a C header - -2020-05-26 20:56 starseeker - - * [r75942] src/libged/alphanum.h, src/libged/alphanum.hpp, - src/libged/which.cpp: - HACKING says headers should be .h but the footer.sh tool - recognizes hpp. Go with .h for now - wonder if HACKING should go - with .hpp so we can distinguish C and C++ header files? - -2020-05-26 20:53 starseeker - - * [r75941] src/libged/alphanum.h, src/libged/alphanum.hpp, - src/libged/which.cpp: - simplify - -2020-05-26 19:48 starseeker - - * [r75940] src/libged/alphanum.h: - svn add - -2020-05-26 19:48 starseeker - - * [r75939] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/alphanum.txt, src/libged/CMakeLists.txt, - src/libged/which.cpp: - Experiment with some additional options to whichid and whichair. - By default don't print out id lines with no matching regions (can - be turned back on), support reporting unused number in ranges - with -U, and allow specification of a root object - if supplied, - only that object and regions in its tree will be considered for - matches. - -2020-05-26 15:37 starseeker - - * [r75938] src/libged/CMakeLists.txt, src/libged/which.c, - src/libged/which.cpp: - C->C++ - -2020-05-26 01:40 starseeker - - * [r75933] src/other/openNURBS/opennurbs_extensions.cpp, - src/other/openNURBS/opennurbs_extensions.h: - ON_DLL_EXPORTS/ON_DLL_IMPORTS is no longer specific enough for an - MSVC only override. - -2020-05-26 00:09 starseeker - - * [r75931] src/libbg/CMakeLists.txt, src/libicv/CMakeLists.txt, - src/librt/CMakeLists.txt: - Directly check the targets here, since the library variables - might conceivably hold more than one target for linking purposes. - -2020-05-26 00:02 starseeker - - * [r75930] CMakeLists.txt, src/libbg/CMakeLists.txt, - src/libdm/CMakeLists.txt, src/libicv/CMakeLists.txt, - src/librt/CMakeLists.txt, src/other/libgdiam/gdiam.hpp, - src/other/libnetpbm/pm.h, src/other/libnetpbm/ppm.h, - src/other/libvds/vds.h, src/other/lz4/lz4.h: - Propagate lib*-obj visibility settings. For src/other libs, only - do this when we're either building local versions of the libs - with headers set up to accomidate both GCC and MSVC style - labeling, or with MSVC when it's a functional necessity even for - system libs. - -2020-05-25 23:41 starseeker - - * [r75929] src/other/libspsr/Src/SPSR.h, - src/other/poly2tri/poly2tri/common/shapes.h, - src/other/poly2tri/poly2tri/sweep/cdt.h, - src/other/stepcode/include/sc_export.h: - Ah, cute - the lib*-obj targets weren't getting the visibility - flag, so the objects were built vanilla and the lib linking - didn't catch this. Go ahead and add the new definitions for the - libs where we've added the necessary logic for MSVC ourselves, - since that's one of the things we want to check when building. - Will get tricker when we get to upstream libs where we might - actually build against a system lib that does have the - __declspec(dllexport) style definitions defined on its own, since - our redefinition approach won't be in place there. - -2020-05-25 18:26 starseeker - - * [r75926] src/libged/bot/extrude.cpp: - initialize - -2020-05-25 18:24 starseeker - - * [r75925] src/libgcv/plugins/obj/obj_read.c: - initialize - -2020-05-25 18:21 starseeker - - * [r75924] src/librt/primitives/sketch/sketch.c: - initialize - -2020-05-25 18:17 starseeker - - * [r75923] src/libbu/realpath_bsd.c: - slen, not len - -2020-05-25 18:11 starseeker - - * [r75922] src/libbu/realpath_bsd.c: - Make sure the readlink return is NULL terminated - -2020-05-24 00:50 starseeker - - * [r75906] regress/pkg/CMakeLists.txt: - regress-pkg can't be run by default, since multiple instances of - it can collide. - -2020-05-24 00:43 starseeker - - * [r75905] misc/CMake/FindTCL.cmake, src/other/CMakeLists.txt: - cleanup, organize - -2020-05-23 21:50 starseeker - - * [r75904] src/other/CMakeLists.txt: - At this point there's not much utility in forcing the X11 check. - -2020-05-23 21:46 starseeker - - * [r75903] misc/CMake/FindTCL.cmake, src/other/CMakeLists.txt: - Use unset(var CACHE) - shorter than explicitly forcing the value - to empty in the cache, and seems to have the same result for the - find_package cycle. - -2020-05-23 21:39 starseeker - - * [r75902] src/other/CMakeLists.txt: - Set the graphics system up front, ahead of any Tcl related - find_package calls. - -2020-05-23 21:08 starseeker - - * [r75901] misc/CMake/CMakeLists.txt, misc/CMake/FindGDAL.cmake: - remove FindGDAL.cmake - identical to upstream file - -2020-05-23 21:07 starseeker - - * [r75900] misc/CMake/CMakeLists.txt, - misc/CMake/FindFontconfig.cmake: - remove FindFontconfig.cmake - identical to upstream file - -2020-05-23 20:07 starseeker - - * [r75899] misc/CMake/FindTCL.cmake, src/other/CMakeLists.txt: - Optionally check platform system graphics for Tcl/Tk - -2020-05-23 17:05 brlcad - - * [r75897] HACKING: - mention the EXPORT markers now required - -2020-05-23 16:59 brlcad - - * [r75894] HACKING: - note that MOOSE now exists as the C++ API. - -2020-05-23 13:42 starseeker - - * [r75892] ., CMakeLists.txt, include, include/analyze/defines.h, - include/bg/defines.h, include/bn/defines.h, - include/brep/defines.h, include/bu/defines.h, include/common.h, - include/dm/defines.h, include/fb.h, include/fft.h, - include/gcv/defines.h, include/ged/defines.h, - include/icv/defines.h, include/libtermio.h, include/nmg.h, - include/optical/defines.h, include/pc.h, include/pkg.h, - include/rt/db5.h, include/rt/defines.h, include/rt/tie.h, - include/tclcad.h, include/wdb.h, misc/CMake/BRLCAD_Targets.cmake, - misc/win32-msvc/CMakeLists.txt, regress, - regress/pkg/CMakeLists.txt, regress/pkg/regress_pkg.cpp, - src/CMakeLists.txt, src/adrt/CMakeLists.txt, - src/adrt/librender/render_internal.h, src/archer/CMakeLists.txt, - src/brlman/CMakeLists.txt, src/bwish/CMakeLists.txt, - src/conv/iges/CMakeLists.txt, src/conv/ply/CMakeLists.txt, - src/conv/ply/rply.h, src/conv/step/ap203e2-g/CMakeLists.txt, - src/conv/step/ap214-g/CMakeLists.txt, - src/conv/step/ap242-g/CMakeLists.txt, - src/conv/step/g-ap203e2/CMakeLists.txt, - src/conv/step/g-ap214/CMakeLists.txt, - src/conv/step/g-ap242/CMakeLists.txt, - src/conv/step/g-step/CMakeLists.txt, - src/conv/step/ifc-g/CMakeLists.txt, - src/conv/step/step-g/CMakeLists.txt, - src/conv/step/util/CMakeLists.txt, - src/external/Creo/CMakeLists.txt, - src/external/Cubit/CMakeLists.txt, - src/external/Unigraphics/CMakeLists.txt, - src/libbg/CMakeLists.txt, src/libbrep/CMakeLists.txt, src/libbu, - src/libbu/tests/dylib/CMakeLists.txt, - src/libbu/tests/dylib/dylib.h, src/libdm/CMakeLists.txt, - src/libfb/CMakeLists.txt, src/libgcv/CMakeLists.txt, - src/libgcv/plugins/CMakeLists.txt, - src/libgcv/plugins/obj/wfobj/CMakeLists.txt, - src/libgcv/plugins/obj/wfobj/obj_util.h, - src/libicv/CMakeLists.txt, src/librt/CMakeLists.txt, - src/libtclcad/tkImgFmtPIX.c, src/mged/CMakeLists.txt, src/other, - src/other/openNURBS/CMakeLists.txt, - src/other/openNURBS/opennurbs_defines.h, src/other/stepcode, - src/other/stepcode/include/sc_export.h, - src/other/stepcode/src/base/judy/src/judy.h, - src/other/stepcode/src/exp2cxx/classes_wrapper.cc: - Merge bioh branch addition of fvisibility=hidden back into trunk. - This will exercise what had previously been Windows-only logic - for hiding library internal symbols during compilation, and - eliminate one of the common sources of Windows build problems - introduced by development on other platforms. The practical - consequence visible to developers will be that *_EXPORT labeling - of public functions in headers will now be necessary for all - platforms, not just Windows. - -2020-05-22 20:28 starseeker - - * [r75890] src/libdm/CMakeLists.txt: - Set a specific variable for building dm-tk.c - -2020-05-21 19:37 starseeker - - * [r75884] src/libbu/whereami.c: - Set up the libbu fallback as something that can be called if the - other mechanisms fail, not just as a compile-time fallback if - system methods aren't available. - -2020-05-21 15:14 starseeker - - * [r75878] src/libfb/CMakeLists.txt, src/libfb/if_tk.c, - src/libfb/if_tk.cpp: - So far at least we're not using C++ here - -2020-05-21 15:00 starseeker - - * [r75876] src/libfb/if_tk.cpp: - Whoops - don't use return before TCL_THREAD_CREATE_RETURN - -2020-05-21 14:55 starseeker - - * [r75874] src/libfb/if_tk.cpp: - Returning from a Tcl thread, adjust return types - -2020-05-21 14:45 starseeker - - * [r75871] regress/repository/repocheck.cpp: - Add a verbosity option to repocheck so we can optionally get a - report of platform symbols even if there aren't more than - expected. - -2020-05-21 14:05 starseeker - - * [r75866] regress/repository/repocheck.cpp: - Ah, right - MSVC needs to be in the platform symbol list for - CMake. - -2020-05-21 13:58 starseeker - - * [r75865] regress/repository/repocheck.cpp: - Make sure to set ret if the symbol count goes too high. - -2020-05-21 06:02 brlcad - - * [r75862] src/libdm/dm-tk.c: - release it too - -2020-05-21 06:01 brlcad - - * [r75861] src/libdm/dm-tk.c: - missing var - -2020-05-21 00:45 starseeker - - * [r75859] src/libdm/dm-tk.c: - checkpoint - -2020-05-21 00:32 starseeker - - * [r75857] misc/CMake/BRLCAD_Targets.cmake: - We're (eventually) going to need the export definition for the - object target as well as the main lib target. Not used yet, but - put it in so it's ready to go when needed. - -2020-05-20 22:01 starseeker - - * [r75856] regress/pkg/CMakeLists.txt, regress/pkg/regress_pkg.cpp, - regress/pkg/regress_pkg_client.cpp, - regress/pkg/regress_pkg_protocol.h, - regress/pkg/regress_pkg_server.cpp: - Switch to a multithreading approach - -2020-05-20 21:29 brlcad - - * [r75855] regress/pkg/regress_pkg_client.cpp, - regress/pkg/regress_pkg_server.cpp: - wording - -2020-05-20 21:09 brlcad - - * [r75854] regress/pkg/CMakeLists.txt, - regress/pkg/regress_pkg_client.cpp, - regress/pkg/regress_pkg_server.cpp: - simplify the looping. wait for up to 5 secs, checking 10 times. - -2020-05-20 20:53 starseeker - - * [r75853] regress/pkg/regress_pkg_server.cpp: - Sean noted prior message wasn't correct - not busy, just don't - have a client message to process. - -2020-05-20 20:25 starseeker - - * [r75852] regress/pkg/regress_pkg_client.cpp: - fix comments - -2020-05-20 20:24 starseeker - - * [r75851] regress/pkg/regress_pkg_client.cpp, - regress/pkg/regress_pkg_server.cpp: - Use BU_SEC2USEC to make timings more intuitive, wait up to 10 - sec. - -2020-05-20 20:02 starseeker - - * [r75850] regress/pkg/regress_pkg_client.cpp, - regress/pkg/regress_pkg_server.cpp: - Adjustments to pkg test client and server - make server listening - non-blocking, and time out both client and server after 1 second - if communications can't be established. - -2020-05-20 18:41 brlcad - - * [r75849] regress/pkg/CMakeLists.txt: - we don't want these installed, so use BRLCAD_ADDEXEC for its - NO_INSTALL logic instead of add_executable() - -2020-05-20 18:40 brlcad - - * [r75848] regress/pkg/regress_pkg.cpp: - with more debugging, the threads are initializing, but the second - system() call (the client) seems to stall. - -2020-05-20 17:07 brlcad - - * [r75847] regress/pkg/regress_pkg.cpp: - something's not right. threads don't appeear to be running - asynchronously, so this stalls out every time on bsd and mac. add - some debugging statements, ditch the vector. - -2020-05-20 14:27 starseeker - - * [r75846] src/libdm/dm-tk.c: - Tk dm doesn't seem to be properly working, and wasn't ever really - finished. Scrub it back down to build up again using a different - approach. - -2020-05-20 12:37 starseeker - - * [r75845] src/libdm/tests/tcl_img.cpp: - Add a few more thread guards to the example - -2020-05-20 01:03 starseeker - - * [r75844] src/libfb/if_tk.cpp: - Switch Tk libfb backend to using Tcl threads, which should (in - theory) be a cross platform solution. - -2020-05-19 20:07 starseeker - - * [r75843] src/libfb/CMakeLists.txt, src/libfb/if_tk.c, - src/libfb/if_tk.cpp: - C->C++ - -2020-05-19 20:05 jebbly - - * [r75842] src/art/art.h: - Remove 'extern "C"' keyword from brlcad_miss() and brlcad_hit() - function declarations in art/art.h to resolve art compilation on - Windows. - -2020-05-19 19:28 starseeker - - * [r75841] src/libfb/if_tk.c: - Go ahead and explicitly delete the interp as well. - -2020-05-19 19:20 starseeker - - * [r75840] src/libfb/if_tk.c: - Use an ogl style local struct container instead of globals to - hold Tk specific fb data. - -2020-05-19 14:49 starseeker - - * [r75838] src/libfb/if_tk.c: - Make a few adjustments to fb_tk_open. This is currently relying - on fork, which won't work on Windows... hmm. - -2020-05-18 17:23 starseeker - - * [r75834] regress/pkg/CMakeLists.txt, - regress/pkg/regress_pkg_client.c, - regress/pkg/regress_pkg_client.cpp, - regress/pkg/regress_pkg_server.c, - regress/pkg/regress_pkg_server.cpp: - C->C++ - -2020-05-18 17:13 starseeker - - * [r75833] regress/CMakeLists.txt, regress/licenses/CMakeLists.txt, - regress/repository/CMakeLists.txt: - Add_Regression_Test can be a function rather than a macro - -2020-05-18 17:02 starseeker - - * [r75832] regress/pkg/CMakeLists.txt: - This has a problem similar to the rtwizard test - if we're - running multiple parallel tests, we don't have unique pairings - between the client and server to tell them the running process is - their correct pairing process. - -2020-05-18 15:33 starseeker - - * [r75831] regress/icv/CMakeLists.txt, - regress/nurbs/CMakeLists.txt, regress/rtwizard/CMakeLists.txt: - override with local specific folder - -2020-05-18 15:26 starseeker - - * [r75830] regress/icv/CMakeLists.txt, - regress/licenses/CMakeLists.txt, regress/mged/CMakeLists.txt, - regress/nurbs/CMakeLists.txt, regress/pkg/CMakeLists.txt, - regress/repository/CMakeLists.txt, - regress/rtwizard/CMakeLists.txt: - see if we can organize the regression targets a bit better in - MSVC - -2020-05-18 15:16 starseeker - - * [r75829] regress/pkg/regress_pkg_client.c: - Put back the header for the client - -2020-05-18 15:03 starseeker - - * [r75828] regress/pkg/regress_pkg.cpp: - Spaces in pathnames are an issue. - -2020-05-18 14:15 starseeker - - * [r75827] regress/pkg/regress_pkg.cpp, - regress/pkg/regress_pkg_client.c, - regress/pkg/regress_pkg_server.c: - new regress repository test correctly identified the missing - bu_setprogname calls. - -2020-05-18 14:01 starseeker - - * [r75826] regress/CMakeLists.txt, regress/pkg, - regress/pkg/CMakeLists.txt, regress/pkg/regress_pkg.cpp, - regress/pkg/regress_pkg_client.c, - regress/pkg/regress_pkg_protocol.h, - regress/pkg/regress_pkg_server.c: - See if we can turn the libpkg example into a regression test for - libpkg functionality. - -2020-05-15 17:04 starseeker - - * [r75825] regress/repository/repocheck.cpp: - Go with one entry per line, for ease of sorting and - addition/removal - -2020-05-15 15:11 starseeker - - * [r75822] regress/licenses/CMakeLists.txt, - regress/licenses/regress-licenses.cmake: - Adjust the regress-licenses invocation logic to match the style - of the regress-repository test - same constraints will apply. - -2020-05-15 15:00 starseeker - - * [r75821] regress/repository/CMakeLists.txt: - Hmm. Must not have activated a regression test using this - approach on MSVC before - looks like ctest is going to insist on - a configuration specification. Make a stab a it... - -2020-05-15 14:56 starseeker - - * [r75820] regress/repository/repocheck.cpp: - include cctype for std::tolower with MSVC - -2020-05-15 14:17 starseeker - - * [r75818] regress/repository/CMakeLists.txt: - Using libbu, need header includes - -2020-05-15 12:49 starseeker - - * [r75814] regress/CMakeLists.txt, regress/repository.sh: - Should be migrated now - VCS has it if we need to refer to it. - -2020-05-15 12:46 starseeker - - * [r75813] regress/repository/repocheck.cpp: - Add message if we have fewer platform symbols than expected. - -2020-05-15 12:40 starseeker - - * [r75812] regress/repository/repocheck.cpp: - tighten the header regexes - -2020-05-15 12:28 starseeker - - * [r75811] NEWS, src/libgcv/plugins/rhino/rhino_read.cpp: - Per user request, update the failure message of 3dm-g to point - the user in the direction of the most common problem - using a - 3dm file saved in a version newer than that supported by - BRL-CAD's version of openNURBS. - -2020-05-15 02:07 starseeker - - * [r75810] regress/repository/repocheck.cpp, - src/adrt/master/master.c, src/adrt/slave/slave.c, - src/external/Cubit/g-sat.cpp, src/external/Unigraphics/ug-g.c, - src/mged/cad_boundp.c, src/mged/cad_parea.c, src/remrt/remrt.c, - src/remrt/rtsrv.c, src/util/alias-pix.c, src/util/ap-pix.c, - src/util/asc-plot3.c, src/util/bombardier.c, src/util/bw-a.c, - src/util/bw-pix.c, src/util/bw-png.c, src/util/bw-ps.c, - src/util/bwcrop.c, src/util/bwdiff.c, src/util/bwfilter.c, - src/util/bwhist.c, src/util/bwhisteq.c, src/util/bwmod.c, - src/util/bwrect.c, src/util/bwscale.c, src/util/bwstat.c, - src/util/bwthresh.c, src/util/cv.c, src/util/decimate.c, - src/util/double-asc.c, src/util/dpix-pix.c, src/util/gencolor.c, - src/util/icv.cpp, src/util/imgdims.c, src/util/loop.c, - src/util/lowp.c, src/util/mac-pix.c, src/util/pc_test.c, - src/util/pix-alias.c, src/util/pix-bw.c, src/util/pix-ps.c, - src/util/pix-spm.c, src/util/pix-sun.c, src/util/pix3filter.c, - src/util/pixbackgnd.c, src/util/pixbgstrip.c, - src/util/pixblend.c, src/util/pixborder.c, src/util/pixbustup.c, - src/util/pixclump.c, src/util/pixcolors.c, src/util/pixcount.cpp, - src/util/pixcrop.c, src/util/pixdiff.c, src/util/pixembed.c, - src/util/pixfade.c, src/util/pixfilter.c, src/util/pixhalve.c, - src/util/pixhist.c, src/util/pixhist3d-plot3.c, - src/util/pixhist3d.c, src/util/pixinterp2x.c, - src/util/pixmatte.c, src/util/pixmerge.c, src/util/pixmorph.c, - src/util/pixrect.c, src/util/pixrot.c, src/util/pixsaturate.c, - src/util/pixscale.c, src/util/pixstat.c, src/util/pixsubst.c, - src/util/pixtile.c, src/util/pixuntile.c, src/util/plot3-asc.c, - src/util/plot3-plot3.c, src/util/plot3-ps.c, - src/util/plot3color.c, src/util/plot3getframe.c, - src/util/plot3line2.c, src/util/plot3rot.c, src/util/plot3stat.c, - src/util/png-bw.c, src/util/png-pix.c, src/util/random.c, - src/util/roots_example.c, src/util/sun-pix.c, src/util/terrain.c, - src/util/wavelet.c: - Add the remainder of the bu_setprogname calls, enable the new - regress-repository check. - -2020-05-15 01:35 starseeker - - * [r75809] src/art/art.cpp, src/gtools/gdiff/gdiff.c, - src/gtools/tests/bigdb.c, src/proc-db/naca/CMakeLists.txt, - src/proc-db/naca/naca456.c, src/rt/reshoot.c, src/rt/rtexample.c, - src/rt/rtscale.c, src/rt/rtshot.c, src/shapes/bolt.c, - src/shapes/coil.c, src/shapes/fence.c, src/shapes/gastank.c, - src/shapes/handle.c, src/shapes/picket_fence.c, - src/shapes/window.c, src/shapes/window_frame.c, - src/shapes/wire.c, src/sig/a-d.c, src/sig/butter.c, - src/sig/bw-d.c, src/sig/c-d.c, src/sig/d-a.c, src/sig/d-bw.c, - src/sig/d-f.c, src/sig/d-i.c, src/sig/d-u.c, src/sig/d2-c.c, - src/sig/damdf.c, src/sig/dauto.c, src/sig/dauto2.c, - src/sig/dconv.c, src/sig/ddisp.c, src/sig/dfft.c, src/sig/dmod.c, - src/sig/dpeak.c, src/sig/dsel.c, src/sig/dstats.c, - src/sig/dwin.c, src/sig/f-d.c, src/sig/f-i.c, src/sig/i-a.c, - src/sig/i-d.c, src/sig/i-f.c, src/sig/ihist.c, src/sig/imod.c, - src/sig/istats.c, src/sig/smod.c, src/sig/u-a.c, src/sig/u-bw.c, - src/sig/u-d.c, src/sig/u-f.c, src/sig/umod.c, src/sig/ustats.c: - more setprogname additions - -2020-05-15 01:11 starseeker - - * [r75808] src/fb/bw-fb.c, src/fb/fb-bw.c, src/fb/fb-fb.c, - src/fb/fb-pix.c, src/fb/fb-png.c, src/fb/fbcbars.c, - src/fb/fbclear.c, src/fb/fbcmap.c, src/fb/fbcolor.c, - src/fb/fbfade.c, src/fb/fbframe.c, src/fb/fbfree.c, - src/fb/fbgamma.c, src/fb/fbgrid.c, src/fb/fbhelp.c, - src/fb/fbline.c, src/fb/fbpoint.c, src/fb/fbstretch.c, - src/fb/fbzoom.c, src/fb/gif-fb.c, src/fb/gif2fb.c, - src/fb/pix-fb.c, src/fb/pixautosize.c, src/fb/plot3-fb.c, - src/fb/png-fb.c, src/fb/spm-fb.c, src/fbserv/fbserv.c, - src/gtools/gex.cpp, src/gtools/glint.cpp, src/gtools/gqa.c, - src/gtools/gtransfer.c, src/halftone/main.c, src/nirt/showshot.c, - src/proc-db/bottest.c, src/proc-db/brep_cobb.cpp, - src/proc-db/brep_cube.cpp, src/proc-db/brep_invalid.cpp, - src/proc-db/brep_simple.cpp, src/proc-db/brep_surface.cpp, - src/proc-db/brep_trimmed.cpp, src/proc-db/brepintersect.cpp, - src/proc-db/breplicator.cpp, src/proc-db/cchannel.c, - src/proc-db/clutter.c, src/proc-db/csgbrep.cpp, - src/proc-db/globe.c, src/proc-db/gtimes.c, src/proc-db/kurt.c, - src/proc-db/lens.c, src/proc-db/masonry.c, src/proc-db/menger.c, - src/proc-db/metaball.c, src/proc-db/mkbuilding.c, - src/proc-db/molecule.c, src/proc-db/nmgmodel.c, - src/proc-db/pdb-g.c, src/proc-db/pipe.c, src/proc-db/pipetest.c, - src/proc-db/pix2g.c, src/proc-db/pyramid.c, - src/proc-db/ringworld.c, src/proc-db/sketch.c, - src/proc-db/spltest.c, src/proc-db/surfaceintersect.cpp, - src/proc-db/tea.c, src/proc-db/tea_nmg.c, src/proc-db/torii.c, - src/proc-db/tube.c, src/proc-db/vegetation.c, src/proc-db/wavy.c, - src/proc-db/wdb_example.c: - more bu_setprogname - -2020-05-15 00:43 starseeker - - * [r75807] bench/pixcmp.c, regress/repository/repocheck.cpp, - src/burst/burst.c, src/conv/asc/asc2dsp.c, src/conv/asc/asc2g.c, - src/conv/asc/asc2pix.c, src/conv/asc/g2asc.c, - src/conv/asc/pix2asc.c, src/conv/comgeom/cvt.c, - src/conv/csg/csg.c, src/conv/dxf/dxf-g.c, src/conv/dxf/g-dxf.c, - src/conv/g-vdb.cpp, src/conv/g-voxel.c, src/conv/g-vrml.c, - src/conv/iges/n_main.cpp, src/conv/jack/jack-g.c, - src/conv/k-g.cpp, src/conv/patch/patch-g.c, - src/conv/patch/rpatch.c, src/conv/raw/g-raw.c, - src/conv/shp/shp-g.c, src/conv/step/g-ap203e2/g-ap203e2.cpp, - src/conv/step/g-ap214/g-ap214.cpp, - src/conv/step/g-ap242/g-ap242.cpp, - src/conv/step/g-step/g-step.cpp, src/conv/step/ifc-g/ifc-g.cpp, - src/conv/step/step-g/step-g.cpp, src/conv/stl/g-stl.c, - src/conv/stl/stl-g.c, src/conv/vdeck/vdeck.c, - src/libanalyze/tests/density.cpp, src/libanalyze/tests/nhit.cpp, - src/libanalyze/tests/raydiff.c, - src/libanalyze/tests/solid_partitions.c, src/libbg/tests/chull.c, - src/libbg/tests/chull3d.c, src/libbg/tests/lseg_lseg.c, - src/libbg/tests/obr.c, src/libbg/tests/polygon_triangulate.c, - src/libbg/tests/tri_closest_pt.c, - src/libbg/tests/tri_ray_isect.cpp, - src/libbg/tests/tri_tri_isect.c, - src/libbg/tests/tri_tri_isect_coplanar.cpp, - src/libbg/tests/trimesh_pt_in.c, src/libbn/tests/bn_test.c.in, - src/libbn/tests/bntester.c, src/libbn/tests/poly_cubic_roots.c, - src/libbn/tests/poly_quartic_roots.c, src/libbn/tests/randsph.c, - src/libbrep/tests/brep_cdt_mesh.cpp, - src/libbrep/tests/test_curve_intersect.cpp, - src/libbrep/tests/test_point_intersect.cpp, - src/libbu/tests/b64.c, src/libbu/tests/backtrace.c, - src/libbu/tests/badmagic.c, src/libbu/tests/basename.c, - src/libbu/tests/bitv.c, src/libbu/tests/booleanize.c, - src/libbu/tests/bu_test.c.in, src/libbu/tests/color.c, - src/libbu/tests/datetime.c, src/libbu/tests/dir.c, - src/libbu/tests/dirname.c, src/libbu/tests/encode.c, - src/libbu/tests/escape.c, src/libbu/tests/file.c, - src/libbu/tests/file_mime.c, src/libbu/tests/gethostname.c, - src/libbu/tests/hash.cpp, src/libbu/tests/heap.c, - src/libbu/tests/hook.c, src/libbu/tests/humanize_number.c, - src/libbu/tests/mappedfile.c, src/libbu/tests/opt.c, - src/libbu/tests/parallel.c, src/libbu/tests/path_component.c, - src/libbu/tests/process.c, src/libbu/tests/progname.c, - src/libbu/tests/ptbl.c, src/libbu/tests/realpath.c, - src/libbu/tests/semaphore.c, src/libbu/tests/semchk.cpp, - src/libbu/tests/sort.c, src/libbu/tests/sscanf.c, - src/libbu/tests/str.c, src/libbu/tests/str_isprint.c, - src/libbu/tests/subprocess.cpp, src/libbu/tests/uuid.c, - src/libbu/tests/vls.c, src/libbu/tests/vls_incr.c, - src/libbu/tests/vls_incr_uniq.cpp, - src/libbu/tests/vls_simplify.c, src/libbu/tests/vls_vprintf.c, - src/libdm/osg-test.cpp, src/libdm/tests/tcl_img.cpp, - src/libdm/tests/tcl_tevent.cpp, src/libgcv/test_bottess.c, - src/libged/simulate/tests/simulate_test.cpp, - src/libged/tests/test_list.c, src/libged/tests/test_tops.c, - src/libnmg/tests/nmg_copy.c, src/libnmg/tests/nmg_mk.c, - src/librt/nurb_example.c, src/librt/prcomb.c, - src/librt/test_bot2nurbs.cpp, src/librt/test_brepreport.cpp, - src/librt/test_dbio.c, src/librt/test_nurbsfit.cpp, - src/librt/test_root3-subd.cpp, - src/librt/tests/binary_attribute.c, src/librt/tests/bundle.c, - src/librt/tests/cache.cpp, src/librt/tests/db5_size.c, - src/librt/tests/diff.c, src/librt/tests/dvec.cpp, - src/librt/tests/nurbs_tests.cpp, src/librt/tests/rt_datum.c, - src/librt/tests/rt_pattern.c, src/librt/tests/ssi.cpp: - start working through the apps adding setprogname - -2020-05-14 22:19 starseeker - - * [r75806] regress/repository/repocheck.cpp: - Fix a couple parts of the test. Turned off for now as it'll break - make regress - reporting over 300 failures. Will turn on once - things are cleaned up. - -2020-05-14 21:49 starseeker - - * [r75805] regress/repository/repocheck.cpp, - src/conv/raw/raw-g.cpp, src/conv/step/util/list_elements.cpp, - src/conv/walk_example.c, src/gtools/beset/beset.c, - src/gtools/ganalyze.cpp, src/libged/help/help.cpp, - src/libged/help/test_help.c, src/libicv/tests/crop.c, - src/libicv/tests/fade.c, src/libicv/tests/filter.c, - src/libicv/tests/operations.c, src/libicv/tests/read_write.c, - src/libicv/tests/rect.c, src/libicv/tests/saturate.c, - src/libicv/tests/size_down.c, src/libicv/tests/size_up.c, - src/libpc/cartesian-heart.cpp, src/libpc/gecode_librt_test.cpp, - src/libpc/gecode_solver_test.cpp, src/libpc/solver_test.cpp, - src/libpc/vm_test.cpp, src/librt/uvpoints.cpp, - src/proc-db/brickwall.c, src/proc-db/sphflake.c, src/rt/main.c, - src/shapes/human.c, src/shapes/tire.c, src/util/bwshrink.c, - src/util/pixcolors.c, src/util/pixelswap.c, src/util/pixshrink.c: - Add a new regress-repository test to check that all of our files - with a main() in them call bu_setprogname. It may not matter if - none of the path aware functions are called, but it won't do any - harm and the subsequent consequences (weird/nonintuitive/spotty - breakage) when later adding something that needed it justify a - blanket 'always call it' rule. - -2020-05-14 20:41 starseeker - - * [r75804] regress/CMakeLists.txt, - regress/repository/CMakeLists.txt, - regress/repository/regress-repository.cmake, - regress/repository/repocheck.cpp: - Wire in the C++ regress-repository test the same way we had - repository.sh wired in, where the build target runs the ctest. - This way the target runs every time, and it's not necessary to - try and have the build target depend on every file it needs to - test in order to recognized the need to re-run. - -2020-05-14 20:05 starseeker - - * [r75803] regress/repository/repocheck.cpp: - FreeBSD doesn't like this as well for some reason - VCS has it to - revisit later, but need to finish other aspects of getting this - ready so for now back it up to the fastest working state overall. - -2020-05-14 18:26 starseeker - - * [r75802] regress/repository/repocheck.cpp: - Start experimenting with not using streams to mainipulate lines - at all, just going with the mapped buffer and regex. Only - migrated the three simplest tests so far. - -2020-05-14 15:20 starseeker - - * [r75801] regress/repository/repocheck.cpp: - Don't actually need regex for the initial rejection filters or - the hdrfile categorization. - -2020-05-14 15:09 starseeker - - * [r75800] regress/repository/repocheck.cpp: - Ignore anything that's not an include line for the bio/bnetwork - header checks - -2020-05-14 14:31 starseeker - - * [r75799] regress/repository/CMakeLists.txt, - regress/repository/repocheck.cpp: - Try using bu_mapped_file, more strstr prelim checks. - -2020-05-14 14:04 starseeker - - * [r75798] regress/repository/repocheck.cpp: - compile regexes once, use for all tests - -2020-05-14 12:57 starseeker - - * [r75797] regress/repository/repocheck.cpp: - Back down to single threaded execution - -2020-05-14 12:11 starseeker - - * [r75796] regress/licenses/CMakeLists.txt: - Missed a LICENSE_LIST variable swap - -2020-05-14 05:32 starseeker - - * [r75795] regress/CMakeLists.txt: - Protect the repository.sh test definition - -2020-05-14 05:30 starseeker - - * [r75794] regress/repository/repocheck.cpp: - Sean suggested using stringstream - make a quick stab it it - -2020-05-14 04:59 starseeker - - * [r75793] regress/repository/repocheck.cpp: - On Linux, a preliminary filter with strstr, even with the - acknowledged inefficiency of continually recreating the lower - case keys, gets us under two seconds - -2020-05-14 03:33 starseeker - - * [r75792] regress/repository/CMakeLists.txt, - regress/repository/repocheck.cpp: - Set up to use threads. About 3x faster than regress-repository.sh - at this point. - -2020-05-14 02:36 starseeker - - * [r75791] src/libicv/CMakeLists.txt: - Something strange about this - we shouldn't need this, if I'm - reading the docs right, and it's not working on OSX anyway... - -2020-05-14 02:02 starseeker - - * [r75790] src/libicv/CMakeLists.txt: - Make the dependency on pnglibconf.h at the object level explicit - -2020-05-14 01:34 starseeker - - * [r75789] doc/legal/embedded/DejaVu_Fonts.txt, - doc/legal/embedded/Eigen.txt, doc/legal/embedded/OpenNURBS.txt, - doc/legal/embedded/QuickHull.txt, doc/legal/embedded/RTree.txt, - doc/legal/embedded/SPSR.txt, - doc/legal/embedded/STIX_Font_License_2010.txt, - doc/legal/embedded/apple.txt, doc/legal/embedded/art.txt, - doc/legal/embedded/ayam.txt, doc/legal/embedded/b64.txt, - doc/legal/embedded/bullet.txt, doc/legal/embedded/chull2d.txt, - doc/legal/embedded/clipper.txt, - doc/legal/embedded/db_faa-info.txt, - doc/legal/embedded/db_nist-info.txt, - doc/legal/embedded/dehumanize.txt, - doc/legal/embedded/delaunator.txt, doc/legal/embedded/earcut.txt, - doc/legal/embedded/fnmatch.txt, doc/legal/embedded/fontstash.txt, - doc/legal/embedded/gct.txt, - doc/legal/embedded/gdal_gcv_plugin.txt, - doc/legal/embedded/gecode.txt, doc/legal/embedded/halfedge.txt, - doc/legal/embedded/humanize.txt, doc/legal/embedded/hv3.txt, - doc/legal/embedded/hv3_combobox.txt, - doc/legal/embedded/hv3_snit.txt, - doc/legal/embedded/libtermlib.txt, - doc/legal/embedded/lseg_lseg.txt, - doc/legal/embedded/marching_cubes.txt, - doc/legal/embedded/msinttypes.txt, - doc/legal/embedded/mt19937ar.txt, doc/legal/embedded/naca.txt, - doc/legal/embedded/normalize.txt, - doc/legal/embedded/nurbs_fit.txt, doc/legal/embedded/obr.txt, - doc/legal/embedded/osg.txt, doc/legal/embedded/osl.txt, - doc/legal/embedded/pbrt.txt, - doc/legal/embedded/point_in_polygon.txt, - doc/legal/embedded/point_in_polyhedron.txt, - doc/legal/embedded/polygonizer.txt, - doc/legal/embedded/pstdint.txt, doc/legal/embedded/qsort.txt, - doc/legal/embedded/realpath.txt, doc/legal/embedded/rply.txt, - doc/legal/embedded/search.txt, doc/legal/embedded/sh_wood.txt, - doc/legal/embedded/sha1.txt, doc/legal/embedded/shapelib.txt, - doc/legal/embedded/sobolseq.txt, doc/legal/embedded/sscanf.txt, - doc/legal/embedded/stb_truetype.txt, doc/legal/embedded/tcl.txt, - doc/legal/embedded/tcllib.txt, doc/legal/embedded/tinythread.txt, - doc/legal/embedded/tkcon.txt, doc/legal/embedded/tri_pt.txt, - doc/legal/embedded/uce_dirent.txt, - doc/legal/embedded/whereami.txt, doc/legal/embedded/winmmap.txt, - doc/legal/embedded/x24.txt, doc/legal/embedded/y2038.txt, - regress/licenses/licenses_check.cpp: - Make the file references URIs relative to the root of the BRL-CAD - source tree (paths were set up that way, but prefix wasn't a - valid URI prefix.) - -2020-05-13 21:18 starseeker - - * [r75788] doc/legal/embedded/CMakeLists.txt, - regress/licenses/CMakeLists.txt: - Make the generation of the embedded_licenses.txt file local to - regress/licenses - -2020-05-13 20:22 starseeker - - * [r75787] regress/repository/repocheck.cpp: - Shift functions to per-file processing - -2020-05-13 19:45 starseeker - - * [r75786] regress/repository/repocheck.cpp: - Push the regex setup into the class creation. - -2020-05-13 17:49 starseeker - - * [r75785] regress/repository/repocheck.cpp: - adjust logging - -2020-05-13 16:46 starseeker - - * [r75784] misc/CMake/BRLCAD_Util.cmake: - Resolve pathname before adding it to the ignore files list - -2020-05-13 16:36 starseeker - - * [r75783] regress/repository/CMakeLists.txt, - regress/repository/repocheck.cpp: - Strip the prefix of the path off for less verbose reporting - -2020-05-13 16:28 starseeker - - * [r75782] regress/repository/regress-repository.cmake: - this will eventually need the same path logic as the license - check - -2020-05-13 14:11 d_rossberg - - * [r75781] misc/win32-msvc/Dll/CMakeLists.txt: - using the changed other library names for the brlcad.dll - -2020-05-13 08:31 d_rossberg - - * [r75780] src/other/openNURBS/CMakeLists.txt: - it is counterproductive to link a static library with other - libraries; this should be done by the linker of the final binary - (executable or shared library) instead - -2020-05-13 01:36 starseeker - - * [r75779] regress/repository/repocheck.cpp: - checkpoint - -2020-05-12 20:58 starseeker - - * [r75778] regress/repository/CMakeLists.txt, - regress/repository/regress-repository.cmake, - regress/repository/repocheck.cpp: - checkpoint - -2020-05-12 20:16 starseeker - - * [r75777] src/libged/bot/extrude.cpp: - fix comment - -2020-05-12 20:11 starseeker - - * [r75776] src/libged/bot/extrude.cpp: - Make a stab at checking the face_mode bits - -2020-05-12 19:37 starseeker - - * [r75775] src/libged/bot/extrude.cpp: - remove debug msg - -2020-05-12 19:25 starseeker - - * [r75774] src/libged/bot/extrude.cpp: - Just go with the simple ARB6 method, with a note about why this - is hard to do 'right' - -2020-05-12 17:59 starseeker - - * [r75773] src/libged/bot/bot.cpp, src/libged/bot/check.cpp: - Leave the bot check drawing code closer to the form of the - original, rather than attempting to accumulate vlists and draw at - the end, so we get similar results. Either using bn_vlblock - containers incorrectly or they're not the right container for the - original approach... - -2020-05-12 17:26 starseeker - - * [r75772] src/libged/bot/bot.cpp: - Adjust argc as well, if we're manipulating argv - -2020-05-12 17:15 starseeker - - * [r75771] src/libged/bot/bot.cpp, src/libged/bot/extrude.cpp, - src/libged/bot/remesh.cpp: - more arg adjustments - -2020-05-12 17:05 starseeker - - * [r75770] src/libged/bot/bot.cpp: - fix chull subcommand arg checks - -2020-05-12 15:14 starseeker - - * [r75768] src/libged/bot/bot.cpp, src/libged/bot/check.cpp, - src/libged/bot/extrude.cpp, src/libged/bot/ged_bot.h, - src/libged/bot/remesh.cpp: - Start reworking arg handling for bot command - -2020-05-12 13:14 starseeker - - * [r75766] ChangeLog, NEWS, README: - Pull in the NEWS and Changelog changes from RELEASE. (In this - case we've been making changes to trunk in parallel with fixing - them in RELEASE, so svn merge-ing them in isn't practical.) - -2020-05-11 23:37 starseeker - - * [r75764] src/libged/bot/bot.cpp: - Will have to deprecate the original bot arg ordering - bot get is - used, and bot check is also documented. That constrains how - self-contained we can make subcommands and still do the object - verification in one place, since we need to do some argv - management up front to match the old behavior (ick.) Might be - better to wrap the object lookup and check into a function and - call it in each subcommand - will need to experiment. - -2020-05-08 19:31 starseeker - - * [r75763] src/other/gdal/frmts/png/CMakeLists.txt: - Add png dep for frmt_png in GDAL as well. - -2020-05-08 15:51 starseeker - - * [r75762] regress/licenses/regress-licenses.cmake: - Similar odd path issues with running regress-licenses - -2020-05-08 15:28 starseeker - - * [r75761] src/other/itcl3/pkg_mkIndex.cmake, - src/other/itk3/pkg_mkIndex.cmake: - get_filename_component REALPATH doesn't do what we need here... - manually adjust names. - -2020-05-08 15:16 starseeker - - * [r75760] src/other/itcl3/ITCL_PKGINDEX.cmake, - src/other/itcl3/pkg_mkIndex.cmake, - src/other/itk3/ITK_PKGINDEX.cmake, - src/other/itk3/pkg_mkIndex.cmake: - New itcl/itk logic doesn't like the odd-pathnames test - -2020-05-08 13:07 starseeker - - * [r75755] regress/repository.sh: - in-src-dir builds running repository.sh were picking up the - Tcl/Tk headers - filter - -2020-05-08 12:43 starseeker - - * [r75754] src/other/stepcode/src/clstepcore/complexSupport.h: - Still getting lseek complaints with MSVC 2017 and step-g - see if - this is the source. - -2020-05-08 02:09 starseeker - - * [r75753] src/other/CMakeLists.txt: - If we're not using Tk at all, force the Tk variables to empty - -2020-05-08 01:08 starseeker - - * [r75752] misc/CMake/BRLCAD_Targets.cmake: - AH! A subtle problem with the ENABLE_ALL build - if the build - decided to go ahead and do libged-obj as one of the first builds - (which it could because the obj build didn't have dependencies - set up - they're on the lib target itself) and it was using the - bundled png, it wouldn't be able to build successfully because - pnglibconf.h is generated by the png build. Since it wasn't - firing, libged-obj would only complete successfully if it could - a) find a pnglibconf.h somewhere else (which it apparently does - on some systems, even though with ENABLE_ALL it would be better - not to) or b) the ordering the build tool picked happend to - produce pnglibconf.h before getting the the libged-obj build. Fix - this by checking the libs list for build targets, and if any are - found make the object library target dependent on them so we - don't start on the lib objects until everything they depend on is - done. - -2020-05-08 00:37 starseeker - - * [r75751] include/CMakeLists.txt: - Helps to make the correct stamp file... - -2020-05-08 00:28 starseeker - - * [r75750] src/libged/CMakeLists.txt: - Add png to the necessary libged libraries - -2020-05-08 00:14 starseeker - - * [r75749] include/CMakeLists.txt: - Skip RtServerImpl.h - that header doesn't appear to be a - practical candidate for stand-alone build testing. - -2020-05-08 00:07 starseeker - - * [r75748] include/bn/CMakeLists.txt, include/bn/dvec.h, - include/bn/vector_fpu.h, include/bn/vector_x86.h: - Consolidate dvec.h and vector_*.h so in combination they are - stand-alone. - -2020-05-08 00:06 starseeker - - * [r75747] include/CMakeLists.txt: - We don't want check-headers to be run by default - -2020-05-07 22:05 starseeker - - * [r75746] include/analyze/density.h, include/analyze/nirt.h, - include/analyze/voxelize.h, include/bg/pointgen.h, - include/bn/numgen.h, include/bn/poly.h, include/bn/vector_fpu.h, - include/bn/vector_x86.h, include/bn/vert_tree.h, - include/dm/dm-design.h, include/optical/plastic.h, - include/rt/calc.h, include/rt/db_fp.h, include/rt/db_fullpath.h, - include/rt/dspline.h, include/rt/vlist.h, include/rtserver.h: - Add some missing includes - -2020-05-07 21:40 starseeker - - * [r75745] include/CMakeLists.txt, include/analyze/CMakeLists.txt, - include/bg/CMakeLists.txt, include/bn/CMakeLists.txt, - include/brep/CMakeLists.txt, include/bu/CMakeLists.txt, - include/dm/CMakeLists.txt, include/fb/CMakeLists.txt, - include/gcv/CMakeLists.txt, include/ged/CMakeLists.txt, - include/icv/CMakeLists.txt, include/nmg/CMakeLists.txt, - include/optical/CMakeLists.txt, include/rt/CMakeLists.txt, - misc/CMake/BRLCAD_Targets.cmake: - Consolidate to one definition of the check-headers targets in - include - -2020-05-07 20:59 starseeker - - * [r75744] misc/CMake/BRLCAD_Targets.cmake: - mime types header is in the build directory - -2020-05-07 20:53 starseeker - - * [r75743] ., include, include/CMakeLists.txt, - include/analyze/CMakeLists.txt, include/bg/CMakeLists.txt, - include/bn/CMakeLists.txt, include/brep/CMakeLists.txt, - include/bu/CMakeLists.txt, include/dm/CMakeLists.txt, - include/fb/CMakeLists.txt, include/gcv/CMakeLists.txt, - include/ged/CMakeLists.txt, include/icv/CMakeLists.txt, - include/nmg/CMakeLists.txt, include/optical/CMakeLists.txt, - include/rt/CMakeLists.txt, misc/CMake/BRLCAD_Targets.cmake: - Quick stab at a header checking target. To use: cmake .. - -DBRLCAD_HDR_CHECK=ON && make check-headers (or to test all in - spite of failures: make check-headers -k) - -2020-05-07 19:41 starseeker - - * [r75739] CMakeLists.txt: - Don't forget to check for _lseeki64 as well - -2020-05-07 19:18 starseeker - - * [r75738] regress/repository/repocheck.cpp: - match repository.sh - don't need this check anymore - -2020-05-07 19:15 starseeker - - * [r75737] ., include, src/libbu, src/libbu/progname.c, - src/libbu/tests/dylib/run.c, src/libbu/whereami.c, src/other, - src/other/libregex: - Merge whereami.c OpenBSD libbu fallback from bioh - -2020-05-07 19:02 starseeker - - * [r75736] include/brep/defines.h, include/bu/tc.h, - include/fb/fb_wgl.h: - bio.h is no longer forbidden in public headers (repository.sh - comment was outdated) so restore bio.h for windows.h inclusions - for brevity. - -2020-05-07 18:52 brlcad - - * [r75735] regress/repository.sh: - remove the b-header public inclusion test since that restriction - went away a long time ago. looks like that test was broken - (always passing) anyways -- shell doesn't expand variables in - single quote strings. - -2020-05-07 17:21 starseeker - - * [r75729] ., include, include/bio.h, include/brep/defines.h, - include/bu/cmd.h, include/bu/file.h, include/bu/glob.h, - include/bu/ptbl.h, include/bu/tc.h, include/bu/time.h, - include/bu/vls.h, include/common.h, include/fb.h, - include/fb/fb_osgl.h, include/fb/fb_wgl.h, include/ged/defines.h, - include/nmg.h, include/rt/anim.h, include/rt/calc.h, - include/rt/cmd.h, include/rt/db_fullpath.h, - include/rt/db_instance.h, include/rt/db_internal.h, - include/rt/db_io.h, include/rt/directory.h, include/rt/mater.h, - include/rt/mem.h, include/rt/vlist.h, src/burst/ui.c, - src/conv/asc/asc2g.c, src/conv/conv-vg2g.c, src/conv/dxf/dxf-g.c, - src/conv/fast4-g.c, src/conv/g-acad.c, src/conv/iges/findp.c, - src/conv/iges/g-iges.c, src/conv/iges/n_iges.cpp, - src/conv/iges/n_iges.hpp, src/conv/iges/readrec.c, - src/conv/iges/recsize.c, src/conv/nastran-g.c, - src/conv/shp/shapelib/shpopen.c, src/conv/stl/g-stl.c, - src/conv/vdeck/vdeck.c, src/fb/bw-fb.c, src/fb/fb-bw.c, - src/fb/fb-pix.c, src/fb/fb-png.c, src/fb/fbcbars.c, - src/fb/fbcmap.c, src/fb/fbcolor.c, src/fb/fbfade.c, - src/fb/fbframe.c, src/fb/fbgrid.c, src/fb/fbpoint.c, - src/fb/fbstretch.c, src/fb/fbzoom.c, src/fb/gif-fb.c, - src/fb/gif2fb.c, src/fb/pix-fb.c, src/fb/plot3-fb.c, - src/fb/png-fb.c, src/fb/spm-fb.c, src/gtools/ganalyze.cpp, - src/halftone/main.c, src/libbu, src/libbu/file.c, - src/libbu/vfont.c, src/libfb/fb_generic.c, - src/libfb/fbserv_obj.c, src/libfb/if_X24.c, src/libfb/if_disk.c, - src/libfb/if_tk.c, src/libgcv/plugins/fastgen4/fastgen4_read.c, - src/libgcv/plugins/stl/stl_write.c, src/libged/bot_dump.c, - src/libged/editit.c, src/libged/facetize_log.c, - src/libged/fb2pix.c, src/libged/pix2fb.c, src/libged/tables.c, - src/libicv/rot.c, src/librt/cache.c, src/librt/db5_scan.c, - src/librt/db_corrupt.c, src/librt/db_io.c, src/librt/db_scan.c, - src/librt/primitives/primitive_util.c, - src/libtclcad/tclcad_obj.c, src/mged/cmd.c, src/mged/fbserv.c, - src/mged/mged.c, src/mged/plot.c, src/other, src/other/libregex, - src/remrt/remrt.c, src/remrt/rtsrv.c, src/rt/do.c, src/rt/main.c, - src/rt/view.c, src/sig/ddisp.c, src/util/ap-pix.c, - src/util/bw-a.c, src/util/bw-png.c, src/util/bwcrop.c, - src/util/bwhist.c, src/util/bwhisteq.c, src/util/bwrot.c, - src/util/bwscale.c, src/util/double-asc.c, src/util/dpix-pix.c, - src/util/pix-png.c, src/util/pix-ppm.c, src/util/pixbgstrip.c, - src/util/pixborder.c, src/util/pixbustup.c, src/util/pixcrop.c, - src/util/pixelswap.c, src/util/pixhalve.c, src/util/pixhist.c, - src/util/pixhist3d.c, src/util/pixmorph.c, src/util/pixrot.c, - src/util/pixscale.c, src/util/plot3rot.c, src/util/wavelet.c: - Get bio.h out of public headers and fix windows build for lseek - and friends. Passes make check on MSVC 2017, Linux GCC 9.2, Linux - clang 9, OSX (github runner), and OpenBSD (clang 8). - -2020-05-07 14:40 starseeker - - * [r75726] src/libbu/tests/dylib/run.c: - Make success a bit more verbose for bu_dylib test - -2020-05-07 14:34 starseeker - - * [r75725] CMakeLists.txt: - __WORDSIZE, not __WORD_SIZE - -2020-05-07 14:22 starseeker - - * [r75724] src/other/libregex/regex.h.in: - OpenBSD defines __BEGIN_DECLS - check first - -2020-05-07 12:51 starseeker - - * [r75718] src/other/stepcode/src/base/judy/misc/judy64n.c, - src/other/stepcode/src/base/judy/test/pennySort.c, - src/other/stepcode/src/base/judy/test/sort.c: - Don't force the integers here to long - _lseeki64 doesn't use - long in that position. - -2020-05-07 01:22 starseeker - - * [r75717] src/external/Unigraphics/ug-g.c: - OpenBSD is using long long here - go with the bigger value type - generally - -2020-05-07 01:19 starseeker - - * [r75716] CMakeLists.txt: - OpenBSD needs __WORD_SIZE defined. - -2020-05-07 01:15 starseeker - - * [r75715] misc/CMake/ThirdParty.cmake: - execute_process doesn't use the ARGS syntax - this was the source - of the "build/remove" source directory does not exist messages - -2020-05-07 01:02 starseeker - - * [r75714] src/remrt/ihost.c: - Unless this varies by platform, it looks like the signature - should be void* not char* - -2020-05-06 23:48 starseeker - - * [r75713] src/other/gdal/port/cpl_conv.cpp: - OpenBSD doesn't like the XOPEN_SOURCE definition - -2020-05-06 23:34 starseeker - - * [r75712] CMakeLists.txt: - Add an iostream C++ test for the POSIX_C_SOURCE and XOPEN_SOURCE - definitions for OpenBSD. - -2020-05-06 23:04 starseeker - - * [r75711] src/other/libspsr/CMakeLists.txt, - src/other/libspsr/Src/MyTime.h: - OpenBSD doesn't have sys/timeb.h - -2020-05-06 22:54 starseeker - - * [r75710] src/libbu/whereami.c: - Apparently this functionality is deliberately not supported on - OpenBSD? - -2020-05-06 22:37 starseeker - - * [r75709] CMakeLists.txt: - For some reason these flags introduce errors with OpenBSD's - iostream locale inclusions - will have to cook up a test. - -2020-05-06 18:52 starseeker - - * [r75708] INSTALL, configure, doc/legal/embedded/OpenNURBS.txt, - include/brep/defines.h, misc/attributes/CMakeLists.txt, - misc/external_build_testing/CMakeLists.txt, - misc/win32-msvc/Dll/CMakeLists.txt, src/conv/iges/CMakeLists.txt, - src/conv/step/ap203e2-g/CMakeLists.txt, - src/conv/step/ap214-g/CMakeLists.txt, - src/conv/step/ap242-g/CMakeLists.txt, - src/conv/step/g-ap203e2/CMakeLists.txt, - src/conv/step/g-ap214/CMakeLists.txt, - src/conv/step/g-ap242/CMakeLists.txt, - src/conv/step/g-step/CMakeLists.txt, - src/conv/step/ifc-g/CMakeLists.txt, - src/conv/step/step-g/CMakeLists.txt, - src/conv/step/util/CMakeLists.txt, - src/external/Creo/CMakeLists.txt, - src/external/Cubit/CMakeLists.txt, - src/external/Unigraphics/CMakeLists.txt, - src/libbrep/CMakeLists.txt, src/libbrep/openNURBS, - src/libbrep/opennurbs_basic.cpp, - src/libbrep/opennurbs_brep_changesrf.cpp, - src/libbrep/opennurbs_brep_kinky.cpp, - src/libbrep/opennurbs_x.cpp, src/libfb/CMakeLists.txt, - src/libgcv/plugins/rhino/CMakeLists.txt, - src/librt/CMakeLists.txt, src/librt/primitives/dsp/dsp_brep.cpp, - src/librt/primitives/revolve/revolve_brep.cpp, - src/librt/primitives/sketch/sketch_brep.cpp, - src/libwdb/CMakeLists.txt, src/other/CMakeLists.txt, - src/other/openNURBS, src/proc-db/CMakeLists.txt, - src/proc-db/naca/CMakeLists.txt: - Revert openNURBS move - -2020-05-06 18:01 starseeker - - * [r75707] doc/legal/embedded/OpenNURBS.txt, - src/libbrep/CMakeLists.txt, src/libbrep/openNURBS/CMakeLists.txt, - src/libbrep/openNURBS/opennurbs_lookup.cpp, - src/libbrep/openNURBS/opennurbs_mesh.cpp, - src/libbrep/openNURBS/opennurbs_qsort_template.h, - src/libbrep/openNURBS/opennurbs_sort.cpp: - cleanup, use bu_sort - -2020-05-06 17:14 starseeker - - * [r75706] INSTALL, configure, doc/legal/embedded/OpenNURBS.txt, - include/brep/defines.h, misc/attributes/CMakeLists.txt, - misc/external_build_testing/CMakeLists.txt, - misc/win32-msvc/Dll/CMakeLists.txt, src/conv/iges/CMakeLists.txt, - src/conv/step/ap203e2-g/CMakeLists.txt, - src/conv/step/ap214-g/CMakeLists.txt, - src/conv/step/ap242-g/CMakeLists.txt, - src/conv/step/g-ap203e2/CMakeLists.txt, - src/conv/step/g-ap214/CMakeLists.txt, - src/conv/step/g-ap242/CMakeLists.txt, - src/conv/step/g-step/CMakeLists.txt, - src/conv/step/ifc-g/CMakeLists.txt, - src/conv/step/step-g/CMakeLists.txt, - src/conv/step/util/CMakeLists.txt, - src/external/Creo/CMakeLists.txt, - src/external/Cubit/CMakeLists.txt, - src/external/Unigraphics/CMakeLists.txt, - src/libbrep/CMakeLists.txt, src/libbrep/openNURBS, - src/libbrep/openNURBS/opennurbs_array_defs.h, - src/libbrep/openNURBS/opennurbs_basic.cpp, - src/libbrep/openNURBS/opennurbs_beam.cpp, - src/libbrep/openNURBS/opennurbs_beam.h, - src/libbrep/openNURBS/opennurbs_box.cpp, - src/libbrep/openNURBS/opennurbs_brep_changesrf.cpp, - src/libbrep/openNURBS/opennurbs_brep_kinky.cpp, - src/libbrep/openNURBS/opennurbs_dll_resource.h, - src/libbrep/openNURBS/opennurbs_fsp.cpp, - src/libbrep/openNURBS/opennurbs_hsort_template.h, - src/libbrep/openNURBS/opennurbs_memory.c, - src/libbrep/openNURBS/opennurbs_mesh_ngon.cpp, - src/libbrep/openNURBS/opennurbs_polyedgecurve.cpp, - src/libbrep/openNURBS/opennurbs_qsort_template.h, - src/libbrep/openNURBS/opennurbs_sort.cpp, - src/libbrep/openNURBS/opennurbs_string.cpp, - src/libbrep/openNURBS/opennurbs_wstring.cpp, - src/libbrep/openNURBS/opennurbs_x.cpp, - src/libbrep/opennurbs_basic.cpp, - src/libbrep/opennurbs_brep_changesrf.cpp, - src/libbrep/opennurbs_brep_kinky.cpp, - src/libbrep/opennurbs_x.cpp, src/libfb/CMakeLists.txt, - src/libgcv/plugins/rhino/CMakeLists.txt, - src/librt/CMakeLists.txt, src/librt/primitives/dsp/dsp_brep.cpp, - src/librt/primitives/revolve/revolve_brep.cpp, - src/librt/primitives/sketch/sketch_brep.cpp, - src/libwdb/CMakeLists.txt, src/other/CMakeLists.txt, - src/other/openNURBS, src/proc-db/CMakeLists.txt, - src/proc-db/naca/CMakeLists.txt: - Shift openNURBS to building as a component of libbrep - -2020-05-06 13:00 starseeker - - * [r75705] regress/CMakeLists.txt, regress/repository, - regress/repository/CMakeLists.txt, - regress/repository/regress-repository.cmake, - regress/repository/repocheck.cpp: - checkpoint (WIP, not functional) - -2020-05-06 09:36 brlcad - - * [r75704] regress/CMakeLists.txt, regress/fuzz/CMakeLists.txt: - can't fully test if this works yet, but appears to have at least - passed cmake successfully and traverses correctly into fuzz - -2020-05-06 09:33 brlcad - - * [r75703] misc/CMake/Fuzzer.cmake: - promote the current value to the parent scope, not zero - -2020-05-06 08:41 brlcad - - * [r75702] misc/CMake/CMakeLists.txt, misc/CMake/Fuzzer.cmake: - initial addition of functions that test for and enable fuzzing on - a target - -2020-05-05 20:03 starseeker - - * [r75701] regress/fuzz/fuzz_ged.cpp, regress/fuzz/fuzz_test1.cxx: - Add headers - -2020-05-05 19:38 starseeker - - * [r75700] regress/CMakeLists.txt, src/tclscripts/CMakeLists.txt: - List a few files for distcheck - -2020-05-05 19:04 starseeker - - * [r75699] doc/legal/embedded/CMakeLists.txt, - regress/licenses/CMakeLists.txt, - regress/licenses/regress-licenses.cmake: - Don't file(GLOB) the license list - generate a specific input - file with the CMake set of defined licenses. Should avoid - treating any garbage files in the license directory as licenses. - -2020-05-05 18:42 starseeker - - * [r75698] src/other/libregex/regex.h.in: - libregex doesn't appear to use lseek and it's making VS2019 - unhappy to redefine it. - -2020-05-05 17:55 starseeker - - * [r75696] misc/CMake/CMakeLists.txt, - misc/CMake/FindFontconfig.cmake: - Put recent FindFontconfig.cmake back in misc/CMake - -2020-05-05 16:12 starseeker - - * [r75695] src/libged/bot/extrude.cpp: - fix function name - -2020-05-05 16:12 starseeker - - * [r75694] src/libged/CMakeLists.txt, src/libged/bot/arb6.cpp, - src/libged/bot/extrude.cpp: - rename file - -2020-05-05 16:11 starseeker - - * [r75693] ., src/libged/CMakeLists.txt, src/libged/bot/arb6.cpp, - src/libged/bot/bot.cpp, src/libged/bot/ged_bot.h, src/other, - src/other/stepcode: - Not sure how useful this is really, but it does produce - individual BoTs for each plate mode BoT face and a region - unioning them all together. Doesn't respect the various plate - mode settings, and the averaging of the normals at vertices has - some definite drawbacks, but in at least some cases it will avoid - visual cracks. Too much thickness with the plate mode compared to - a face's area and the 'inner' extruded face will twist/invert - - need to come up with a check for that. - -2020-05-05 15:54 starseeker - - * [r75692] src/libged/bot/arb6.cpp: - checkpoint - -2020-05-05 14:22 starseeker - - * [r75691] src/libged/bot/arb6.cpp: - checkpoint - -2020-05-05 13:45 starseeker - - * [r75690] src/libged/bot/arb6.cpp: - Oh, of course - this makes non-planar sides of the arbs in - general, which won't work. - -2020-05-05 13:13 starseeker - - * [r75689] src/libged/bot/arb6.cpp: - Fix indexing offset. Still have twisted arbs, but looking better. - -2020-05-04 17:36 starseeker - - * [r75688] include/bu/vls.h: - don't need stdio.h here - -2020-05-04 16:25 starseeker - - * [r75686] misc/attributes/gen-attributes-file.cpp, - src/libpkg/pkg.c, - src/other/stepcode/src/clstepcore/complexSupport.h: - Pull in RELEASE branch changes for off_t - -2020-05-04 16:04 starseeker - - * [r75683] src/other/libregex/regex.h.in: - Bring the RELEASE regex.h changes into trunk's regex.h.in - -2020-05-04 15:22 starseeker - - * [r75678] include/bu/glob.h, include/bu/vls.h: - Missed a couple off_t -> b_off_t changes - -2020-05-04 13:33 starseeker - - * [r75675] src/gtools/gchecker.cpp: - Check return value of chdir - -2020-05-04 12:58 starseeker - - * [r75672] regress/gchecker/CMakeLists.txt: - gchecker test needs gqa, rtcheck and mged present. - -2020-05-02 11:11 starseeker - - * [r75669] src/libged/bot/arb6.cpp: - header - -2020-05-02 03:18 starseeker - - * [r75668] src/libged/bot/bot.cpp: - Fill in bot get - -2020-05-02 03:08 starseeker - - * [r75667] src/libged/bot/check.cpp: - check type once, up front - -2020-05-02 02:57 starseeker - - * [r75666] src/libged/bot/check.cpp: - Need purpose string for check subcommand - -2020-05-02 01:20 starseeker - - * [r75665] src/libged/CMakeLists.txt, src/libged/bot/arb6.cpp: - checkpoint - compiling, definitely not working - -2020-05-02 00:06 starseeker - - * [r75664] src/libged/bot/check.cpp: - The license regression caught me - forgot to put the header back - on the check.cpp breakout. - -2020-05-01 21:39 starseeker - - * [r75663] src/libged/CMakeLists.txt, src/libged/bot, - src/libged/bot.c, src/libged/bot/bot.cpp, - src/libged/bot/check.cpp, src/libged/bot/ged_bot.h, - src/libged/bot/remesh.cpp, src/libged/bot_remesh.cpp: - Start roughing out a rework of the bot command to make it similar - to the new form of the brep command. Still needs a fair bit of - testing - in particular the visualization for the bot checking - code hasn't been tried, and the openvdb based rework needs to be - enabled/tested after moving. Goal is to bring organization to the - bot subcommands and make it cleaner to add new functionality. Not - going to move any of the bot_* commands until the initial setup - is complete and tested - right now just sticking to the commands - that were already in bot.c - -2020-05-01 17:33 starseeker - - * [r75662] src/libged/brep/brep.cpp: - Fix for indentation of help strings off of subcommands in help - msg - -2020-05-01 14:31 starseeker - - * [r75661] regress/gchecker/regress-gchecker.cmake.in: - More preliminary clean-up (note in passing - newer CMake are - switching to an -E rm commadn instead of these older ones, which - are now marked deprecated. Will need to figure out what version - is the minimum for -E rm so we know when to switch.) - -2020-05-01 14:23 starseeker - - * [r75660] src/gtools/gchecker.cpp: - Fix comment - -2020-05-01 14:18 starseeker - - * [r75659] regress/CMakeLists.txt, regress/gchecker, - regress/gchecker/CMakeLists.txt, - regress/gchecker/gchecker_test.g, - regress/gchecker/regress-gchecker.cmake.in: - Add a (very) basic regression test for the checker logic - -2020-05-01 14:17 starseeker - - * [r75658] src/gtools/gchecker.cpp: - Don't write a file if there is nothing to write - -2020-05-01 14:01 starseeker - - * [r75657] src/gtools/gchecker.cpp: - Add direct.h for chdir with MSVC - -2020-05-01 13:33 starseeker - - * [r75656] src/gtools/CMakeLists.txt, src/gtools/gchecker.cpp: - Add a C++ version of the check.tcl/check.sh logic. Idea is to - allow generating overlap files independent of MGED and without - requiring unix shells/commands. - -2020-05-01 03:55 brlcad - - * [r75655] regress/fuzz/CMakeLists.txt: - needs libged now - -2020-04-30 17:43 starseeker - - * [r75654] src/libdm/tests/tcl_img.cpp: - Make a note on how we might be able to improve the visual for - Tk_Photo during resize... - -2020-04-30 15:06 starseeker - - * [r75653] src/libdm/tests/tcl_img.cpp: - Get the fb and dm images updating independently. - -2020-04-30 12:42 starseeker - - * [r75652] src/other/CMakeLists.txt: - Set TK_WISH - we don't use it during the build, but we'd like to - keep FindTCL happy... - -2020-04-30 06:43 brlcad - - * [r75651] src/libbg/QuickHull.hpp: - this warrants testing if it's code in use anywhere (couldn't - ascertain for sure), but the func sig seems to imply this is fine - (pointer is shared). let the compiler return an elided copy - instead of explicitly moving it. - -2020-04-30 06:41 brlcad - - * [r75650] include/bu/str.h: - quell documentation warning. let clang know these are code - samples - -2020-04-30 05:23 brlcad - - * [r75649] regress/fuzz/CMakeLists.txt: - simplify the include dirs to the ones actually in use, not the - recursive ones needed for standalone compilation - -2020-04-30 05:22 brlcad - - * [r75648] CMakeLists.txt: - check for the fuzzer flag - -2020-04-30 05:09 brlcad - - * [r75647] AUTHORS: - credit sahil vaidya for his work on fuzzing test infrastructure - -2020-04-30 05:05 brlcad - - * [r75646] regress/fuzz/fuzz_ged.cpp: - add support to the fuzzer to actually run the ged commands it - generates. almost immediately finds issues worth fixing. - -2020-04-30 05:03 brlcad - - * [r75645] regress/CMakeLists.txt: - disable traversal into fuzz until top level has a proper test for - the fsanitize=fuzzer compiler option, so we know we can actually - compile a llvm fuzzer. - -2020-04-30 05:01 brlcad - - * [r75644] regress/CMakeLists.txt, regress/fuzz, - regress/fuzz/CMakeLists.txt, regress/fuzz/fuzz_ged.cpp, - regress/fuzz/fuzz_test1.cxx, regress/fuzz/run.sh: - added initial patch from Sahil Vaidya that provides a new 'make - fuzz' build target. this adds two new fuzzing tests that rely on - llvm/clang's libFuzzer (aka -fsanitize=fuzzer build option). - committing as-is first, then will make adjustments as needed in - following. - -2020-04-30 04:57 brlcad - - * [r75643] src/gtools/gsh.cpp: - added fixme label. shouldn't need to set a global. - -2020-04-30 00:25 starseeker - - * [r75642] src/libdm/tests/tcl_img.cpp: - Generate an event from the fb only if the dm isn't already about - to do so. - -2020-04-30 00:21 starseeker - - * [r75641] src/libdm/tests/tcl_img.cpp: - Make the fb render slightly more interesting - -2020-04-29 22:38 starseeker - - * [r75640] src/libdm/tests/tcl_img.cpp: - First crude stab at getting some kind of an fb render - incorporated into the Tk_Photo image. - -2020-04-29 20:27 starseeker - - * [r75639] src/libdm/tests/tcl_img.cpp: - variable rename - -2020-04-29 20:10 starseeker - - * [r75638] src/libdm/tests/tcl_img.cpp: - add a couple of fb specific pieces - -2020-04-29 18:42 starseeker - - * [r75637] src/libdm/tests/tcl_img.cpp: - An embedded MGED dm has to be able to show the framebuffer as - well - need to start thinking about how to manage that... - -2020-04-29 18:38 starseeker - - * [r75636] src/libdm/tests/tcl_img.cpp: - Don't bother drawing if the image is on its way out. - -2020-04-29 17:47 starseeker - - * [r75635] src/libdm/tests/tcl_img.cpp: - I think this situation occurs when we have another event queued. - -2020-04-29 17:44 starseeker - - * [r75634] src/libdm/tests/tcl_img.cpp: - Don't update mid-render - -2020-04-29 17:26 starseeker - - * [r75633] src/libdm/tests/tcl_img.cpp: - Check to make sure our XY coordinate hasn't gotten beyond our - buffer size - can happen right at the end. - -2020-04-29 16:35 starseeker - - * [r75632] CMakeLists.txt, src/other/tcl/CMakeLists.txt, - src/other/tk/CMakeLists.txt: - CMAKE_THREAD_LIBS_INIT isn't defined with Visual Studio, which - turned off threads for Tcl/Tk on Windows. - -2020-04-29 16:13 starseeker - - * [r75631] src/libdm/tests/tcl_img.cpp: - include string header - -2020-04-29 15:00 starseeker - - * [r75629] src/libdm/tests/tcl_img.cpp: - fix a few comments - -2020-04-29 14:44 starseeker - - * [r75628] src/libdm/tests/tcl_img.cpp, - src/libdm/tests/tcl_tevent.cpp: - Needs to be hammered on/thought on a bit more, but set up the - image test to use ephemeral rendering threads that are managed by - an update manager that operates based on events. Idea is to - completely avoid time-based polling to see if work needs to be - done, but also to avoid having a lot of rendering events piling - up in an event queue and trialing on after we stop resizing. The - update manager takes the events and either triggers a render or - keeps track of the need to do another render once the current one - finishes. The render thread notifies the update manager once it - is complete via an event, which will kick off the GUI window - update and (if needed) start another render pass. Otherwise, - everything waits for a toplevel action to kick things off. - -2020-04-29 04:51 brlcad - - * [r75627] src/libged/typein.c: - the script 'in' command erroneously assumes the argv is - null-terminated, but not necessarily. - -2020-04-29 00:35 starseeker - - * [r75626] src/libdm/tests/CMakeLists.txt, - src/libdm/tests/tcl_tevent.cpp: - Making a simpler example to test the behavior of multiple threads - sending each other events. Looks like key missing ingredient in - earlier test was that the worker thread has to have its own Tcl - interp to process events successfully - it's not backed in to the - basic thread setup. With this setup, the goal is eventually val2 - and val3 get large enough that the program exits if you resize - the Tk window - so far it looks like it works. - -2020-04-28 20:29 starseeker - - * [r75625] src/libdm/tests/tcl_img.cpp: - Shorten the sleep interval a bit. A quick stab at sending events - to the image generating thread didn't work - more experimenting - will be needed if that approach proves necessary. - -2020-04-28 19:35 starseeker - - * [r75624] src/libdm/tests/tcl_img.cpp: - Adjust comment - -2020-04-28 18:12 starseeker - - * [r75623] src/libdm/tests/tcl_img.cpp: - tweaks, comments - -2020-04-28 17:58 starseeker - - * [r75622] src/libdm/tests/tcl_img.cpp: - note - -2020-04-28 17:44 starseeker - - * [r75621] src/fb/CMakeLists.txt, src/fb/tests: - Remove old unfinished test code from 2010 - -2020-04-28 17:38 starseeker - - * [r75620] src/libdm/tests/CMakeLists.txt, - src/libdm/tests/tcl_img.cpp: - There we go. Tcl/Tk application with a rendering thread that's - updating a local pixel buffer and triggering update events in the - parent, which reads that buffer and updates its Tk_Photo - accordingly. Incorporates a delay in the rendering thread to - simulate a slow rendering pass. Doesn't start a new rendering - pass until the previous one is done - we don't want to waste time - catching up through a ton of queued rendering passes which are - already obsolete. However, it should always end up doing the - 'final' rendering pass once things stabelize, as the last - movement will either coincide with the last rendering trigger or - will set the flag to do another rendering pass once the rendering - thread completes its current work. - -2020-04-28 15:38 starseeker - - * [r75619] src/libdm/tests/tcl_img.cpp: - checkpoint - -2020-04-28 12:03 starseeker - - * [r75618] src/libdm/tests/tcl_img.cpp: - This slows the refresh rate, but doesn't do a 'final' update once - things stabelize. Will probably need to trigger an event in the - main thread with Tcl_ThreadQueueEvent and Tcl_ThreadAlert for - that to work... - -2020-04-28 11:40 starseeker - - * [r75617] src/libdm/tests/tcl_img.cpp: - First rudimentary test of using a thread to time setting a flag - that can be used to help pace redraw calls. - -2020-04-27 20:14 starseeker - - * [r75616] src/libdm/CMakeLists.txt, src/libdm/tcl_img.cpp, - src/libdm/tests, src/libdm/tests/CMakeLists.txt, - src/libdm/tests/tcl_img.cpp: - Move tcl_img to a tests subdir - -2020-04-27 19:54 starseeker - - * [r75615] src/libdm/tcl_img.cpp: - Need to study the guts of the implementation to figure this out, - don't worry about it right now - -2020-04-27 18:46 starseeker - - * [r75614] src/libdm/tcl_img.cpp: - Resize and update the image on - -2020-04-26 17:17 starseeker - - * [r75612] src/libdm/tcl_img.cpp: - Expand canvas size with parent window. - -2020-04-26 17:09 starseeker - - * [r75611] src/libdm/tcl_img.cpp: - Specify canvas size - -2020-04-26 17:04 starseeker - - * [r75610] src/libdm/tcl_img.cpp: - Try using a canvas for the image, rather than a label - -2020-04-25 19:52 starseeker - - * [r75609] src/libdm/tcl_img.cpp: - Resizing is the next necessary piece to understand. - -2020-04-25 19:34 starseeker - - * [r75608] src/libdm/tcl_img.cpp: - Adjust Tcl main loop - was burning full CPU previously... - -2020-04-25 19:26 starseeker - - * [r75607] src/libdm/tcl_img.cpp: - Not really sure we need to, but go ahead and check errno here. - -2020-04-25 19:11 starseeker - - * [r75606] src/libdm/tcl_img.cpp: - Draw white dots in the image buffer based on click+drag mouse - events. Similar requirements to altering the image buffer with a - new view rendering in response to camera adjustments via mouse - movement. - -2020-04-25 15:19 starseeker - - * [r75605] src/libdm/tcl_img.cpp: - Code cleanup, add comments. Next step will be to try and get an - update response for mouse motion, not simply button clicking. - -2020-04-25 14:51 starseeker - - * [r75604] src/libdm/tcl_img.cpp: - Switch to using the mouse event to trigger an image change, - instead of using a timer. - -2020-04-25 14:33 starseeker - - * [r75603] src/libdm/tcl_img.cpp: - Turn the image generation back on, it was unrelated to the - binding issue. Per suggestion from tcl channel, add - Tcl_FindExecutable call. - -2020-04-25 14:30 starseeker - - * [r75602] src/libdm/tcl_img.cpp: - Need explicit Tcl_Init - Tk_Init won't take care of it - automatically if not already called. - -2020-04-25 02:01 starseeker - - * [r75601] src/libdm/CMakeLists.txt: - Leave commented out - -2020-04-25 02:00 starseeker - - * [r75600] src/libdm/CMakeLists.txt, src/libdm/tcl_img.cpp: - Start experimenting with setting a binding. Turn everything else - off, as this is producing an error... - -2020-04-24 21:00 starseeker - - * [r75599] src/libdm/CMakeLists.txt, src/libdm/tcl_img.cpp: - Checkpoint an experiment with Tk_PhotoImage - after studying the - C api and some discussions with the tcl IRC channel, it should be - possible to leverage Tk_Photo for image data display from C. This - program generates patterns of data in an image and uses - Tk_PhotoPutBlock to both update the image data itself and let Tk - know it needs to redraw. In theory this should be no different - than getting RGBA values from a rasterizer or raytracer. Not - doing any event handling yet, however. - -2020-04-23 23:26 starseeker - - * [r75597] src/other/CMakeLists.txt: - Grr. A quick check doesn't find any way to package require Tk - without the graphics window initialization, which precludes - getting tk windowingsystem to reliably return in headless - configuration. Only an issue on OSX at the moment, and will not - be an issue there if we shift to cross-platform DM/FB backends... - -2020-04-23 23:14 starseeker - - * [r75596] src/other/CMakeLists.txt: - Ah, right - that trick requires access to a display, which isn't - guaranteed at configure time. - -2020-04-23 22:16 starseeker - - * [r75595] src/libbu/CMakeLists.txt: - helps to remove the old line too... - -2020-04-23 22:13 starseeker - - * [r75594] src/libbu/CMakeLists.txt: - Ah, right - this is set to NOTFOUND on Windows and CMake doesn't - like that. - -2020-04-23 22:07 starseeker - - * [r75593] src/other/CMakeLists.txt: - Test the windowing system of the system Tcl/Tk - -2020-04-23 21:59 starseeker - - * [r75592] CMakeLists.txt: - Don't do the Fink_Macports.cmake logic - don't know if it's still - current/relevant in 2020 - -2020-04-23 21:46 starseeker - - * [r75591] misc/CMake/CMakeLists.txt, - misc/CMake/Fink_MacPorts.cmake, src/other/CMakeLists.txt: - Need to go fish out the graphics check and add it here, since - FindTCL isn't doing it any more - -2020-04-23 21:42 starseeker - - * [r75590] src/other/CMakeLists.txt, src/other/tkhtml.dist, - src/other/tkhtml/CMake, src/other/tkhtml/CMakeLists.txt, - src/other/tktable.dist, src/other/tktable/CMake, - src/other/tktable/CMakeLists.txt: - More cleanup work - vanilla FindTCL logic (even when concated - together) doesn't set some of the information our original - FindTCL did. - -2020-04-23 21:22 starseeker - - * [r75589] src/other/itcl3/CMakeLists.txt: - Just rely on find_package(TCL) - either it's finding what we - need, or we're setting it in src/other/CMakeLists.txt (or we need - to fix something.) - -2020-04-23 21:17 starseeker - - * [r75588] misc/CMake/FindTCL.cmake, - src/other/itcl3/CMakeLists.txt, src/other/itk3/CMakeLists.txt: - Make it FindTCL.cmake's business to pick up the stub libraries as - well. - -2020-04-23 20:57 starseeker - - * [r75587] src/other/itcl3/CMakeLists.txt, - src/other/itk3/CMakeLists.txt: - Interesting. On modern Ubuntu, the packages do install the - headers necessary to build itcl/itk3 but they do it in a - subdirectory. Don't know yet if this is a new standard practice - for Tcl/Tk 8.6 packaging, but would be nice if it is - set up the - logic to check. This actually lets us build our Tcl/Tk packages - against a system install with the src/other/tcl and src/other/tk - directories being completely removed when those headers are - present, and should also be a better bet for compiling compatibly - with the system libs (our local copy may not match the system - version - there's certainly no guarantee.) - -2020-04-23 20:35 brlcad - - * [r75586] src/other/itk3/CMakeLists.txt: - itk should be looking for tk, not tcl - -2020-04-23 20:24 starseeker - - * [r75585] CMakeLists.txt: - Only find Qt libraries if we need them - -2020-04-23 20:10 starseeker - - * [r75584] INSTALL, configure, src/other/CMakeLists.txt, - src/other/freetype, src/other/freetype.dist: - If we're using system fontconfig, we're using system freetype - (for Tk) - fontconfig links in freetype. - -2020-04-23 19:56 starseeker - - * [r75583] misc/CMake/FindTCL.cmake, src/other/CMakeLists.txt: - Use a proper unset CACHE to setup for the third party check. - -2020-04-23 19:11 starseeker - - * [r75582] misc/CMake/ThirdParty.cmake: - Don't special case in ThirdParty - -2020-04-23 19:08 starseeker - - * [r75581] misc/CMake/CMakeLists.txt, misc/CMake/FindTCL.cmake: - FindTCL.cmake in the main CMake distribution is generating - warnings at configure time and doesn't require enough for us - it - will accept a libtcl86.so without any headers or tclsh as a FOUND - Tcl, which doesn't work. Grab the relvant three Find* modules and - assemble them into something which is hopefully closer to what we - need, sticking as close as we can to the vanilla upstream names, - etc. - -2020-04-23 18:41 starseeker - - * [r75580] src/other/CMakeLists.txt, src/other/fontconfig, - src/other/fontconfig.dist: - fontconfig probably won't be worth the trouble - VCS has it if - need be. - -2020-04-23 18:15 starseeker - - * [r75579] INSTALL, configure, misc/CMake/CMakeLists.txt, - misc/CMake/FindFontconfig.cmake, src/other/CMakeLists.txt: - The png and zlib prefixing now allows us to permit Tk to build - against system freetype and fontconfig again. - -2020-04-23 18:01 starseeker - - * [r75578] src/other/tk/CMakeLists.txt: - At least on Linux, we're not getting a stray inclustion of the - local X.h and friends... an experiment forcing them into the - include path resulted in an immediately crashing MGED, rather - than a crash occurring with the embedded framebuffer. - -2020-04-23 17:49 starseeker - - * [r75577] src/other/tk/CMakeLists.txt: - Embedded framebuffer still doesn't work with X - try adjusting - X11 include ordering - -2020-04-23 17:46 starseeker - - * [r75576] src/other/CMakeLists.txt, src/other/tk.dist, - src/other/tk/CMake, src/other/tk/CMakeLists.txt: - Use the include path from Tk as well. In a quick test, a dmtype - set X works now with bundled Tcl/Tk. - -2020-04-23 16:26 starseeker - - * [r75575] src/other/CMakeLists.txt: - Ah! Finally figure out how to use CMAKE_IGNORE_PATH - it requires - an explicit directory list, not ignoring subdirectories - automatically (???). - -2020-04-23 16:23 starseeker - - * [r75574] misc/CMake/ThirdParty.cmake: - Don't know if this really helps, but try to work around the issue - warned about calling FindTCL in more modern CMake. (This is an - issue in their own default FindTCL.cmake module, not ours.) - -2020-04-23 15:50 starseeker - - * [r75573] src/other/CMakeLists.txt: - Extract TCL_INCLUDE_PATH from tcl subdir, per suggestion from - Sean. Having a problem with repeated configures detecting built - files, so something is off in the setup for the THIRD_PARTY - logic. - -2020-04-23 15:40 starseeker - - * [r75572] src/other/CMakeLists.txt, src/other/tcl/CMakeLists.txt: - Make sure the relevant variables are zeroed out before starting - the Tcl/Tk search, so we don't get strange results on a repeat - configure. - -2020-04-23 15:13 starseeker - - * [r75571] src/other/CMakeLists.txt: - Whoops, didn't want to indent the script - -2020-04-23 15:12 starseeker - - * [r75570] src/other/CMakeLists.txt, src/other/itcl, - src/other/itcl.dist, src/other/itk, src/other/itk.dist: - Doesn't look like we'll be using itcl/itk 4 in the near term - - simplify the build - -2020-04-23 04:21 starseeker - - * [r75569] doc/bsd_semaphore_bug.txt: - Add some notes. Failures seem to be associated with raytracing - code (gqa, rt) so perhaps the semaphores are a secondary - consequence of some other issue? - -2020-04-23 04:11 starseeker - - * [r75568] doc/bsd_semaphore_bug.txt, src/libbu/semaphore.c: - Make the bu_bomb message a bit more informative, since that's - often times all we can see. It reveals that the BSD failure is an - EPERM error: - https://pubs.opengroup.org/onlinepubs/009695399/functions/pthread_mutex_lock.html - -2020-04-23 03:34 starseeker - - * [r75567] doc/CMakeLists.txt, doc/bsd_semaphore_bug.txt: - Stash the two backtraces we have of the FreeBSD semaphore - acquisition failure bug in action - doubt they have enough - information to be diagnostic but they're the best starting point - available... - -2020-04-23 03:13 brlcad - - * [r75566] NEWS, TODO: - fixed bw-png writing corrupted png files on windows, but there - are many others that require similar attention. - -2020-04-23 03:07 brlcad - - * [r75565] src/util/bw-png.c: - fix a bug reported by russell where bw-png was writing out - corrupt pngs with extra carriage returns embedded. this is due to - the utility, like many others, not setting binary-mode (O_BINARY) - explicitly before writing binary to stdout. needs comprehensive - audit as, at glance, there are dozens of other utilities that - still don't (and are thus broken on Windows). - -2020-04-23 02:32 starseeker - - * [r75564] regress/CMakeLists.txt: - Add a configure-time option to run the regression tests in - series. - -2020-04-23 01:50 starseeker - - * [r75563] regress/licenses/licenses_check.cpp: - If we've got an old style svn checkout, skip files from .svn - directory - -2020-04-23 00:11 starseeker - - * [r75561] src/other/itk3/CMakeLists.txt: - Ah, right, FindX11 doesn't use the plural - -2020-04-23 00:07 starseeker - - * [r75560] src/other/itk3/CMakeLists.txt: - Use the normal X11 include dirs variable - -2020-04-22 23:17 starseeker - - * [r75559] src/libbu/CMakeLists.txt: - We'll always have at lesat y2038 - simplify - -2020-04-22 22:58 starseeker - - * [r75558] CMakeLists.txt, misc/CMake/BRLCAD_Targets.cmake: - Doing include_directories at the top level looks like it was a - bad idea... - -2020-04-22 22:03 starseeker - - * [r75557] misc/CMake/BRLCAD_Targets.cmake: - Don't use AFTER on directories from other - -2020-04-22 21:48 starseeker - - * [r75556] misc/CMake/BRLCAD_Targets.cmake: - Getting a /usr/local/include ahead of some of our bundled - versions, which is causing a system header to get found first - even with ours enabled. Try getting more aggressive about sending - system includes to the back of the line. - -2020-04-22 21:29 starseeker - - * [r75555] src/librt/cache.c: - Prefer local lz4.h if we have it - -2020-04-22 19:01 n_reed - - * [r75549] src/libged/draw.c, src/libged/vdraw.c, - src/mged/dodraw.c: - Fix vlist drawing by nirt, rtcheck, etc. broken by r75470. - - Fixing transparency exposed a problem in calls to invent_solid, - all of which had "0.0" as the transparency argument. It's pretty - clear the intention was to make temp vlists opaque (0% - transparent), but confusingly we use "transparency" as a synonym - for "alpha", so a transparency value of 0 actually means fully - transparent. - -2020-04-22 05:43 brlcad - - * [r75523] src/other/tk/CMakeLists.txt: - if mac build is not aqua, make sure the xlib dir is still - included since we're not using the X11 framework - -2020-04-22 05:19 brlcad - - * [r75522] src/libbrep/PullbackCurve.cpp: - break out one-per-line to see what's going on with the args more - clearly - -2020-04-21 16:49 n_reed - - * [r75495] src/tclscripts/checker/check.tcl: - Add a checkbutton to the overlap checker to toggle fullpath - display. This makes it possible to still view and sort by - fullpath if so desired. - -2020-04-21 15:24 n_reed - - * [r75492] src/tclscripts/checker/check.tcl: - Restore behavior inadvertently changed in r75472. Overlap checker - should still use fullpaths for drawing, subtraction, and marks, - just not for display in the treeview. - -2020-04-20 20:41 n_reed - - * [r75477] src/tclscripts/checker/menu.tcl: - Adjust the layout of the overlap checker's launch menu to avoid a - flickering update loop that would occur when hovering over the - "Use Last File" button. - - A long pathname displayed in the hint text when hovering over the - button was causing the window to resize, which would move the - button out from underneath the cursor, reverting the hint text to - a shorter string, moving the button back under the cursor, - triggering the longer hint text, ad infinitum. Now the buttons - stay in place when the window auto-resizes. - -2020-04-20 20:01 n_reed - - * [r75472] src/tclscripts/checker/check.tcl: - Have overlap checker display only region names, but make it - possible to copy fullpaths to clipboard via right-click menu. - -2020-04-20 19:59 n_reed - - * [r75471] src/tclscripts/checker/menu.tcl: - Fix truncation of overlap checker columns when path names are - long. - -2020-04-20 17:36 n_reed - - * [r75470] src/libdm/dm-generic.c, src/mged/dozoom.c: - Take another stab at r74969. - - Fix transparency, but without breaking highlight on solid - editing. I just missed updating the last call to - dm_draw_display_list for the editing solids on the first - go-around. - -2020-04-20 13:54 starseeker - - * [r75467] src/librt/cache.c: - Revert r75459. The save alternative to LZ4_decompress_fast is - apparently not a drop-in replacement. Attempting to raytrace with - an active cache using this call results in an unsuccessful - (aborted) raytrace with NIST2. - -2020-04-20 13:46 starseeker - - * [r75466] include/tclcad.h, src/libtclcad/tclcad_obj.c, - src/mged/setup.c: - Whoops, revert deleted the tclcad io setup - -2020-04-18 13:15 starseeker - - * [r75462] src/other/tcl/CMakeLists.txt: - Don't double list tclLoadDl.c, minor style updates - -2020-04-18 13:04 starseeker - - * [r75461] src/libtermio/termcap.c, src/libtermio/tgoto.c: - Use explicit buffer sizes - sizeof isn't right in that context - -2020-04-18 13:00 starseeker - - * [r75460] src/libtermio/CMakeLists.txt: - libtermio needs libbu - -2020-04-18 05:20 brlcad - - * [r75459] src/librt/cache.c: - LZ4_decompress_fast() is deprecated, so call it's slightly slower - 'safe' alternative. - -2020-04-18 04:10 brlcad - - * [r75458] CHANGES, src/conv/CMakeLists.txt, src/conv/proe-g.c: - proe-g has long since been replaced by the newer creo-g export - plugin. newer directly writes out binary instead of using an - ascii intermediary. - -2020-04-17 20:00 starseeker - - * [r75443] TODO: - Ah! Didn't notice right away since the X dm doesn't get used a - lot, but something about Tcl/Tk 8.6 isn't compatible with the X24 - embedded framebuffer in mged - gdb with a break on exit shows it - bailing out from an X error when trying to fb_refresh. - -2020-04-17 16:46 starseeker - - * [r75438] include/CMakeLists.txt, include/dm.h, - include/dm/CMakeLists.txt, include/dm/dm_xvars.h, include/fb.h, - include/fb/CMakeLists.txt, include/fb/defines.h, - include/tclcad.h, src/adrt/isst.c, src/burst/extern.h, - src/burst/glob.c, src/fb/bw-fb.c, src/fb/fb-bw.c, src/fb/fb-fb.c, - src/fb/fb-pix.c, src/fb/fb-png.c, src/fb/fbcbars.c, - src/fb/fbclear.c, src/fb/fbcmap.c, src/fb/fbcolor.c, - src/fb/fbfade.c, src/fb/fbframe.c, src/fb/fbfree.c, - src/fb/fbgamma.c, src/fb/fbgrid.c, src/fb/fbhelp.c, - src/fb/fblabel.c, src/fb/fbline.c, src/fb/fbpoint.c, - src/fb/fbstretch.c, src/fb/fbzoom.c, src/fb/gif-fb.c, - src/fb/gif2fb.c, src/fb/ioutil.c, src/fb/pix-fb.c, - src/fb/plot3-fb.c, src/fb/png-fb.c, src/fb/spm-fb.c, - src/fb/tests/fbthreadtest.c, src/fbserv/fbserv.c, - src/fbserv/server.c, src/libdm/CMakeLists.txt, src/libdm/adc.c, - src/libdm/axes.c, src/libdm/clip.c, src/libdm/color.c, - src/libdm/dm-Null.c, src/libdm/dm-Null.h, src/libdm/dm-X.c, - src/libdm/dm-X.h, src/libdm/dm-generic.c, src/libdm/dm-glx.h, - src/libdm/dm-ogl.c, src/libdm/dm-ogl.h, src/libdm/dm-osgl.cpp, - src/libdm/dm-osgl.h, src/libdm/dm-plot.c, src/libdm/dm-plot.h, - src/libdm/dm-ps.c, src/libdm/dm-ps.h, src/libdm/dm-qt.cpp, - src/libdm/dm-qt.h, src/libdm/dm-tk.c, src/libdm/dm-tk.h, - src/libdm/dm-txt.c, src/libdm/dm-wgl.c, src/libdm/dm-wgl.h, - src/libdm/dm_obj.c, src/libdm/dm_private.h, src/libdm/dm_util.c, - src/libdm/dm_xvars.h, src/libdm/grid.c, src/libdm/include, - src/libdm/labels.c, src/libdm/options.c, src/libdm/osg_bob.cpp, - src/libdm/query.c, src/libdm/rect.c, src/libdm/scale.c, - src/libfb/CMakeLists.txt, src/libfb/asize.c, - src/libfb/fb_generic.c, src/libfb/fb_log.c, src/libfb/fb_obj.c, - src/libfb/fb_paged_io.c, src/libfb/fb_private.h, - src/libfb/fb_rect.c, src/libfb/fb_util.c, src/libfb/fbserv_obj.c, - src/libfb/if_TEMPLATE.c, src/libfb/if_X24.c, - src/libfb/if_debug.c, src/libfb/if_disk.c, src/libfb/if_mem.c, - src/libfb/if_null.c, src/libfb/if_ogl.c, src/libfb/if_osgl.cpp, - src/libfb/if_qt.cpp, src/libfb/if_remote.c, src/libfb/if_stack.c, - src/libfb/if_tk.c, src/libfb/if_wgl.c, src/libfb/include, - src/libfb/osg_fb_manipulator.h, src/libfb/tcl.c, - src/libtclcad/tclcad.c, src/libtclcad/tclcad_init.c, - src/libtclcad/tclcad_obj.c, src/mged/attach.c, src/mged/cmd.c, - src/mged/dm-generic.c, src/mged/doevent.c, src/mged/dozoom.c, - src/mged/edsol.c, src/mged/facedef.c, src/mged/mged.h, - src/mged/mged_dm.h, src/mged/set.c, src/mged/share.c, - src/remrt/remrt.c, src/remrt/rtsrv.c, src/rt/do.c, src/rt/ext.h, - src/rt/heatgraph.c, src/rt/libfb-dummy.c, src/rt/main.c, - src/rt/view.c, src/rt/viewedge.c, src/rt/viewxray.c, - src/sig/ddisp.c, src/util/bwhist.c, src/util/pixhist.c, - src/util/pixhist3d.c, src/util/plot3-dm.c: - Put back the libdm/libfb API in trunk. Work will proceed in the - branch, and after discussing with Sean we want to do a release - with Tcl/Tk 8.6 first before taking on the rollout of the - libdm/libfb rework. - -2020-04-16 21:17 starseeker - - * [r75428] include/dm/CMakeLists.txt, include/dm/calltable.h, - include/fb/CMakeLists.txt, include/fb/calltable.h, - src/libdm/CMakeLists.txt, src/libdm/dm_private.h, - src/libdm/include, src/libdm/include/calltable.h, - src/libfb/CMakeLists.txt, src/libfb/fb_private.h, - src/libfb/include, src/libfb/include/calltable.h: - Per suggstion from Sean, move calltable.h headers into src - subdirs. They're 'api' in the sense of being what plugins will - need to implement, but they're not public API for the library and - having them in include/dm or include/fb runs the risk of someone - including it when using libfb/libdm - -2020-04-16 01:31 starseeker - - * [r75423] include/fb/CMakeLists.txt, include/fb/calltable.h, - src/libfb/fb_private.h: - break libfb calltable out into a header - -2020-04-16 01:22 starseeker - - * [r75422] include/CMakeLists.txt, include/fb.h, - include/fb/CMakeLists.txt, include/fb/defines.h: - Break out libfb defines into separate header - -2020-04-16 01:14 starseeker - - * [r75421] src/libtclcad/tclcad_obj.c: - At a glance it looks like the fb headers are just providing some - system headers for this part of tclcad? - -2020-04-16 01:05 starseeker - - * [r75420] src/libfb/if_wgl.c: - Fix wgl fb - -2020-04-16 00:57 starseeker - - * [r75419] include/fb.h, src/libfb/fb_generic.c, - src/libfb/fb_obj.c, src/libfb/fb_paged_io.c, - src/libfb/fb_private.h, src/libfb/fb_util.c, - src/libfb/fbserv_obj.c, src/libfb/if_X24.c, src/libfb/if_debug.c, - src/libfb/if_disk.c, src/libfb/if_mem.c, src/libfb/if_null.c, - src/libfb/if_ogl.c, src/libfb/if_osgl.cpp, src/libfb/if_qt.cpp, - src/libfb/if_remote.c, src/libfb/if_stack.c, src/libfb/if_tk.c, - src/libfb/if_wgl.c: - Make a stab at converting libfb to PImpl pattern (untested on - Windows) - -2020-04-15 23:38 starseeker - - * [r75418] src/libdm/dm-wgl.c: - Fix initialization of wgl dm - -2020-04-15 23:08 starseeker - - * [r75417] src/libbu/tests/dylib/CMakeLists.txt: - Right, plugins are using libbu now - -2020-04-15 21:20 starseeker - - * [r75416] include/dm.h, include/dm/calltable.h, src/libdm/adc.c, - src/libdm/axes.c, src/libdm/dm-Null.c, src/libdm/dm-X.c, - src/libdm/dm-generic.c, src/libdm/dm-ogl.c, - src/libdm/dm-osgl.cpp, src/libdm/dm-plot.c, src/libdm/dm-ps.c, - src/libdm/dm-qt.cpp, src/libdm/dm-tk.c, src/libdm/dm-txt.c, - src/libdm/dm-wgl.c, src/libdm/dm_obj.c, src/libdm/dm_private.h, - src/libdm/dm_util.c, src/libdm/grid.c, src/libdm/options.c, - src/libdm/rect.c, src/libdm/scale.c: - Make a stab at shifting libdm to the PImpl pattern for struct dm. - Untested on Windows. - -2020-04-15 20:45 starseeker - - * [r75415] src/libdm/CMakeLists.txt, src/libdm/dm-generic.c, - src/libdm/dm_util.c, src/libdm/dm_xvars.h, src/libdm/query.c, - src/mged/attach.c, src/mged/dozoom.c: - Remove some code for inactive DMs - -2020-04-15 20:31 starseeker - - * [r75414] include/dm.h, src/libdm/clip.c, src/libdm/dm_private.h, - src/mged/doevent.c, src/util/plot3-dm.c: - See if we can shift some code from dm.h into dm_private.h - -2020-04-15 19:48 starseeker - - * [r75413] include/dm.h: - Remove the backwards compatibility exposure of internals - -2020-04-15 19:20 starseeker - - * [r75412] include/dm.h, include/dm/calltable.h, include/fb.h, - src/burst/extern.h, src/burst/glob.c, src/fb/bw-fb.c, - src/fb/fb-bw.c, src/fb/fb-fb.c, src/fb/fb-pix.c, src/fb/fb-png.c, - src/fb/fbcbars.c, src/fb/fbclear.c, src/fb/fbcmap.c, - src/fb/fbcolor.c, src/fb/fbfade.c, src/fb/fbframe.c, - src/fb/fbfree.c, src/fb/fbgamma.c, src/fb/fbgrid.c, - src/fb/fbhelp.c, src/fb/fblabel.c, src/fb/fbline.c, - src/fb/fbpoint.c, src/fb/fbstretch.c, src/fb/fbzoom.c, - src/fb/gif-fb.c, src/fb/gif2fb.c, src/fb/ioutil.c, - src/fb/pix-fb.c, src/fb/plot3-fb.c, src/fb/png-fb.c, - src/fb/spm-fb.c, src/fb/tests/fbthreadtest.c, - src/fbserv/fbserv.c, src/fbserv/server.c, src/libdm/dm-generic.c, - src/libfb/asize.c, src/libfb/fb_generic.c, src/libfb/fb_log.c, - src/libfb/fb_obj.c, src/libfb/fb_paged_io.c, - src/libfb/fb_private.h, src/libfb/fb_rect.c, src/libfb/fb_util.c, - src/libfb/fbserv_obj.c, src/libfb/if_TEMPLATE.c, - src/libfb/if_X24.c, src/libfb/if_debug.c, src/libfb/if_disk.c, - src/libfb/if_mem.c, src/libfb/if_null.c, src/libfb/if_ogl.c, - src/libfb/if_osgl.cpp, src/libfb/if_qt.cpp, - src/libfb/if_remote.c, src/libfb/if_stack.c, src/libfb/if_tk.c, - src/libfb/if_wgl.c, src/libfb/osg_fb_manipulator.h, - src/libfb/tcl.c, src/mged/attach.c, src/mged/edsol.c, - src/mged/facedef.c, src/mged/mged_dm.h, src/mged/set.c, - src/remrt/remrt.c, src/remrt/rtsrv.c, src/rt/do.c, src/rt/ext.h, - src/rt/heatgraph.c, src/rt/libfb-dummy.c, src/rt/main.c, - src/rt/view.c, src/rt/viewedge.c, src/rt/viewxray.c, - src/sig/ddisp.c, src/util/bwhist.c, src/util/pixhist.c, - src/util/pixhist3d.c: - Same thing with fb - eliminate the typedef - -2020-04-15 19:13 brlcad - - * [r75411] src/libbu/tests/dylib/plugin_1.cpp, - src/libbu/tests/dylib/plugin_2.cpp: - it doesn't like strncpy because of off-by-one errors, which - consequently was introduced by converting this to bu_strlcpy. - strlcpy guarantees nul-termination and just takes the size of the - buffer being written into. - -2020-04-15 18:41 starseeker - - * [r75410] include/dm.h, include/dm/calltable.h, include/tclcad.h, - src/adrt/isst.c, src/libdm/adc.c, src/libdm/axes.c, - src/libdm/dm-Null.c, src/libdm/dm-Null.h, src/libdm/dm-X.c, - src/libdm/dm-X.h, src/libdm/dm-generic.c, src/libdm/dm-glx.h, - src/libdm/dm-ogl.c, src/libdm/dm-ogl.h, src/libdm/dm-osgl.cpp, - src/libdm/dm-osgl.h, src/libdm/dm-plot.c, src/libdm/dm-plot.h, - src/libdm/dm-ps.c, src/libdm/dm-ps.h, src/libdm/dm-qt.cpp, - src/libdm/dm-qt.h, src/libdm/dm-tk.c, src/libdm/dm-tk.h, - src/libdm/dm-txt.c, src/libdm/dm-wgl.c, src/libdm/dm-wgl.h, - src/libdm/dm_obj.c, src/libdm/dm_private.h, src/libdm/dm_util.c, - src/libdm/dm_xvars.h, src/libdm/grid.c, src/libdm/labels.c, - src/libdm/options.c, src/libdm/osg_bob.cpp, src/libdm/rect.c, - src/libdm/scale.c, src/libtclcad/tclcad.c, - src/libtclcad/tclcad_init.c, src/libtclcad/tclcad_obj.c, - src/mged/attach.c, src/mged/cmd.c, src/mged/mged_dm.h, - src/mged/share.c, src/util/plot3-dm.c: - switch the typedef out for just a struct dm declaration - -2020-04-15 18:09 starseeker - - * [r75409] src/libbu/tests/dylib/plugin_1.cpp, - src/libbu/tests/dylib/plugin_2.cpp: - right, regress-repository doesn't like strncpy - -2020-04-15 11:49 starseeker - - * [r75408] include/dm/calltable.h: - Whoops, actually svn add file... - -2020-04-15 11:49 starseeker - - * [r75407] include/dm/CMakeLists.txt, src/libdm/dm_private.h: - Move some logic around to help organize thinking... - -2020-04-15 01:38 starseeker - - * [r75406] src/libbu/tests/dylib/dylib.c, - src/libbu/tests/dylib/dylib.h, - src/libbu/tests/dylib/plugin_1.cpp, - src/libbu/tests/dylib/plugin_2.cpp, src/libbu/tests/dylib/run.c: - Add headers - -2020-04-15 01:24 starseeker - - * [r75405] src/librt/search.h: - search.h header doesn't directly use regex types - -2020-04-15 01:04 starseeker - - * [r75404] src/librt/CMakeLists.txt, src/librt/columnparse.c: - remove unused columnparse.c file - -2020-04-15 00:54 starseeker - - * [r75403] src/libbu/vls_incr.cpp: - Use C++11 regex for bu_vls_incr - -2020-04-14 19:05 starseeker - - * [r75402] src/libbu/CMakeLists.txt, src/libbu/vls.c, - src/libbu/vls_incr.cpp: - Break regex using part of vls out into a C++ file (uuid.h isn't - happy in C++, so can't just shift vls.c to C++) - -2020-04-14 18:20 starseeker - - * [r75401] src/libbu/tests/vls_incr.c: - free vls - -2020-04-14 16:22 starseeker - - * [r75400] src/libbu/tests/dylib/CMakeLists.txt: - Assign VS directories - -2020-04-14 16:17 starseeker - - * [r75399] src/libbu/tests/dylib/plugin_1.cpp, - src/libbu/tests/dylib/plugin_2.cpp: - extern "C" needs to come first - -2020-04-14 16:13 starseeker - - * [r75398] src/libbu/tests/dylib/plugin_1.cpp, - src/libbu/tests/dylib/plugin_2.cpp: - Try adding exports to the plugins. - -2020-04-14 16:04 starseeker - - * [r75397] src/libbu/tests/dylib/CMakeLists.txt: - Hmm... try following the GCV logic for this... - -2020-04-14 15:40 starseeker - - * [r75396] src/libbu/tests/dylib/CMakeLists.txt: - have bu_dylib require building everything - -2020-04-14 14:58 starseeker - - * [r75395] src/libbu/tests/dylib/CMakeLists.txt: - defines need to match header - -2020-04-14 14:52 starseeker - - * [r75394] src/libbu/tests/dylib/CMakeLists.txt: - er, right - libdylib uses libbu - -2020-04-14 14:49 starseeker - - * [r75391] NEWS: - Nick fixed the startup dimensions of the overlap checker tool's - window - was launching too small. - -2020-04-14 14:23 starseeker - - * [r75390] src/libbu/tests/CMakeLists.txt, - src/libbu/tests/dylib/CMakeLists.txt, - src/libbu/tests/dylib/dylib.c, src/libbu/tests/dylib/dylib.h, - src/libbu/tests/dylib/run.c: - Put together a (relatively) minimal exercising of the bu_dlopen - et. al. API that lets us do runtime loadable plugins. - -2020-04-14 12:01 starseeker - - * [r75387] src/librt/primitives/brep/brep.cpp: - Don't bu_log quite so much during brep prep - -2020-04-14 11:52 starseeker - - * [r75386] src/libbu/tests/CMakeLists.txt: - don't try to ignore directory - -2020-04-14 03:19 starseeker - - * [r75385] src/libbu/tests/CMakeLists.txt, src/libbu/tests/dylib, - src/libbu/tests/dylib/CMakeLists.txt, - src/libbu/tests/dylib/README.txt, src/libbu/tests/dylib/dylib.c, - src/libbu/tests/dylib/dylib.h, - src/libbu/tests/dylib/plugin_1.cpp, - src/libbu/tests/dylib/plugin_2.cpp, src/libbu/tests/dylib/run.c: - checkpoint - -2020-04-13 18:40 starseeker - - * [r75384] src/tclscripts/mged/bindings.tcl: - Numerical bindings for views aren't hard... - -2020-04-13 17:33 starseeker - - * [r75381] include/conf/MINOR, include/conf/PATCH: - With the Tcl/Tk upgrade, the next release incorporating all the - current trunk changes will be a minor, not a patch. - -2020-04-13 16:30 starseeker - - * [r75378] NEWS, src/rt/viewedge.c: - Work around the rtedge -W problem reported by a user where the - rtedge lines are still drawn white even though the white - background is specified. This broke in commit r68597, but it - looks as if the implementation even prior to that does what's - intended rather oddly, in a way only considered the -W white - background case. -C 240/240/240, for example, does not produce - the dark line but is clearly a background that would benefit from - it. Only -W changes the default_background flag internally, but - adjusting -C to do the same won't do either, since -C 1/1/1 would - then produce a black line and a black-on-black image. The correct - answer is to calculate a color difference metric, but until - that's solved this should restore the black/white and white/black - cases where are the most common for line drawings. - -2020-04-13 14:45 starseeker - - * [r75377] NEWS, doc/docbook/system/mann/lint.xml, - src/libged/lint.cpp: - Use the gdiff trick for the lint command and add the ability to - specify search style filters to only examine subsets of the .g - database. - -2020-04-13 13:51 starseeker - - * [r75375] NEWS, src/tclscripts/mged/bindings.tcl: - Needs to be tested cross platform, but per user request add - bindings to MGED's display manager for zooming using a mouse - wheel - -2020-04-13 13:05 starseeker - - * [r75371] src/mged/dozoom.c: - Whoops - reverted the copyright update too - -2020-04-13 12:45 starseeker - - * [r75370] src/libbn/mt19937ar.c: - right... Windows needs the header for import/export - -2020-04-13 12:37 starseeker - - * [r75369] src/other/CMakeLists.txt: - Mark a few variables as advanced - -2020-04-13 12:35 starseeker - - * [r75368] regress/licenses/CMakeLists.txt: - VS folder for the lcheck target - -2020-04-11 13:01 starseeker - - * [r75367] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/marching_cubes.txt, - regress/licenses/licenses_check.cpp: - don't bother with the PD abbreviation - -2020-04-11 12:58 starseeker - - * [r75366] regress/licenses/licenses_check.cpp: - Unsurprisingly in retrospect, a more agressive read of file - contents matches the text strings in this file... - -2020-04-11 12:49 starseeker - - * [r75365] src/conv/ply/rply.c: - do the simple thing to make regress-repository happy. - -2020-04-11 02:09 starseeker - - * [r75364] src/conv/ply/rplyfile.h: - Add common.h. regress spots strcpy and strcmp in here - easy - enough to swap in the libbu versions, but may also be possible to - make the auditing regression code aware of the embedded license - file info and know to skip such files. Needs thought... - -2020-04-11 02:05 starseeker - - * [r75363] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/rply.txt, doc/legal/other/CMakeLists.txt, - doc/legal/other/rply.txt, src/conv/ply/CMakeLists.txt, - src/conv/ply/rply.c, src/conv/ply/rply.h, - src/conv/ply/rply_license.txt, src/conv/ply/rplyfile.h: - Update rply to 1.1.4, add embedded license info - -2020-04-11 01:48 starseeker - - * [r75362] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/OpenNURBS.txt, doc/legal/embedded/art.txt, - doc/legal/embedded/ayam.txt, doc/legal/embedded/ayam_icons.txt, - doc/legal/embedded/bullet.txt, doc/legal/embedded/chull2d.txt, - doc/legal/embedded/tcl.txt: - Clear the other non-rply failures - -2020-04-11 01:41 starseeker - - * [r75361] regress/licenses/licenses_check.cpp: - Make problems failures for the program - forgot to print messages - for one case, so wasn't quite clean yet, but it spotted the rply - change as expected/hoped - -2020-04-11 01:34 starseeker - - * [r75360] src/conv/ply/CMakeLists.txt, src/conv/ply/rply.c, - src/conv/ply/rply.h, src/conv/ply/rply_license.txt, - src/other/CMakeLists.txt, src/other/rply, src/other/rply.dist: - Shift rply from a src/other library to embedded files. - -2020-04-11 01:27 starseeker - - * [r75359] src/other/rply/rply.c, src/other/rply/rply.h: - Clear the Wc++-compat problems in rply - -2020-04-11 00:46 starseeker - - * [r75358] regress/licenses/CMakeLists.txt: - Optimization makes a huge runtime difference here... - -2020-04-11 00:33 starseeker - - * [r75357] regress/licenses/CMakeLists.txt: - Ah, can't have quotes around args in add_test - -2020-04-11 00:18 starseeker - - * [r75356] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/apple.txt, doc/legal/embedded/bullet.txt, - doc/legal/embedded/naca.txt, doc/legal/embedded/osl.txt, - doc/legal/embedded/tcl.txt, doc/legal/embedded/tcllib.txt, - misc/attributes/gen-attributes-file.cpp, - misc/opencl-raytracer-tests/version1/clhost.cpp, - misc/opencl-raytracer-tests/version1/clhost.hpp, - misc/opencl-raytracer-tests/version1/main.cpp, - misc/opencl-raytracer-tests/version1/raytracer.hpp, - misc/opencl-raytracer-tests/version1/utility.hpp, - misc/opencl-raytracer-tests/version2/main.cpp, - misc/opencl-raytracer-tests/version2/raytracer.cpp, - misc/opencl-raytracer-tests/version2/raytracer.hpp, - misc/opencl-raytracer-tests/version2/rt.cl, - misc/opencl-raytracer-tests/version2/utility.hpp, - misc/win32-msvc/bootstrap.cpp, - regress/mged/regression_resources.tcl, src/proc-db/naca/epspsi.c, - src/proc-db/naca/naca.h, src/proc-db/naca/naca456.c, - src/proc-db/naca/nacax.c, src/proc-db/naca/splprocs.c, - src/tclscripts/CMakeLists.txt, - src/tclscripts/checker/test_checker.tcl, - src/tclscripts/hv3/demo/viewpage.tcl, src/tclscripts/hv3/hv3.tcl, - src/tclscripts/hv3/hv3_encodings.tcl, - src/tclscripts/hv3/hv3_form.tcl, - src/tclscripts/hv3/hv3_request.tcl, - src/tclscripts/hv3/hv3_util.tcl, - src/tclscripts/hv3_man_browser_test.tcl: - Finally - clear the remainder of the issues the first prototype - version of the checker code spotted. - -2020-04-11 00:07 starseeker - - * [r75355] include/RtServerImpl.h: - Add header to RtServerImpl.h (do we still need this file?) - -2020-04-10 23:56 starseeker - - * [r75354] src/external/Creo/shim.cpp, src/external/Creo/shim.h, - src/external/Cubit/shim.h, src/external/Unigraphics/shim.cpp, - src/external/Unigraphics/shim.h: - headers for the shim files - -2020-04-10 23:53 starseeker - - * [r75353] src/util/ttcp.c: - Per original note in file, this one is supposed to be PD... - -2020-04-10 23:35 starseeker - - * [r75352] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/gecode.txt, - src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.cpp, - src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.h, - src/conv/step/step-g/OpenShell.h, - src/conv/step/step-g/ShellBasedSurfaceModel.cpp, - src/conv/step/step-g/ShellBasedSurfaceModel.h, - src/conv/step/util/list_elements.cpp, - src/libanalyze/find_subtracted_shapes.cpp, - src/libanalyze/wnsurface.cpp, src/libged/help/test_help.c, - src/libged/simulate/tests/simulate_test.cpp, - src/libpc/cartesian-heart.cpp, - src/libpc/domain_constraint_propagator.cpp, - src/librt/primitives/bot/bot_wireframe.cpp, - src/librt/tests/nurbs_tests.cpp: - checkpoint - -2020-04-10 23:32 starseeker - - * [r75351] - src/libged/simulate/bullet/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h, - src/libged/simulate/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp, - src/libged/simulate/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h, - src/libged/simulate/bullet/BulletCollision/Gimpact/btCompoundFromGimpact.h, - src/libged/simulate/bullet/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp, - src/libged/simulate/bullet/LinearMath/btCpuFeatureUtility.h, - src/libged/simulate/bullet/LinearMath/btDefaultMotionState.h, - src/libged/simulate/bullet/LinearMath/btPolarDecomposition.cpp, - src/libged/simulate/bullet/LinearMath/btPolarDecomposition.h, - src/libged/simulate/bullet/LinearMath/btQuickprof.cpp, - src/libged/simulate/bullet/LinearMath/btQuickprof.h, - src/libged/simulate/bullet/LinearMath/btSerializer.cpp: - Add some license headers to Bullet files - -2020-04-10 21:36 starseeker - - * [r75350] src/libbrep/shape_recognition/pipeline.cpp, - src/libbrep/shape_recognition/planar.cpp, - src/libbrep/shape_recognition/sphere.cpp, - src/libbrep/shape_recognition/torus.cpp, - src/libbrep/shape_recognition/util.cpp: - Add some missing headers - -2020-04-10 21:34 starseeker - - * [r75349] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/RTree.txt, doc/legal/embedded/lseg_lseg.txt, - src/libbg/aabb_ray.c, src/libbrep/cdt/RTree.h: - checkpoint - -2020-04-10 21:22 starseeker - - * [r75348] src/conv/CMakeLists.txt: - Didn't end up deleting those - -2020-04-10 21:20 starseeker - - * [r75347] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/fnmatch.txt, doc/legal/embedded/humanize.txt, - doc/legal/embedded/sha1.txt, doc/legal/embedded/shapelib.txt, - regress/licenses/licenses_check.cpp, src/conv/CMakeLists.txt: - checkpoint - -2020-04-10 21:16 starseeker - - * [r75346] src/libbu/tcllist.c: - Make this an copyright notice that will match the check - -2020-04-10 21:01 starseeker - - * [r75345] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/SPSR.txt, doc/legal/embedded/b64.txt, - doc/legal/embedded/chull2d.txt, doc/legal/embedded/halfedge.txt, - doc/legal/embedded/normalize.txt, - doc/legal/embedded/realpath.txt, doc/legal/embedded/sha1.txt, - doc/legal/embedded/tcl.txt, doc/legal/embedded/winmmap.txt, - regress/CMakeLists.txt: - checkpoint - -2020-04-10 20:40 starseeker - - * [r75344] src/libbu/y2038/time64.c, src/libbu/y2038/time64.h, - src/libbu/y2038/time64_config.h, src/libbu/y2038/time64_limits.h: - Put copyright info in all y2038 files - -2020-04-10 20:27 starseeker - - * [r75343] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/DejaVu_Fonts.txt, - doc/legal/embedded/Eigen.txt, doc/legal/embedded/OpenNURBS.txt, - doc/legal/embedded/QuickHull.txt, doc/legal/embedded/RTree.txt, - doc/legal/embedded/SPSR.txt, - doc/legal/embedded/STIX_Font_License_2010.txt, - doc/legal/embedded/ayam_icons.txt, doc/legal/embedded/bullet.txt, - doc/legal/embedded/chull2d.txt, doc/legal/embedded/chull3d.txt, - doc/legal/embedded/clipper.txt, - doc/legal/embedded/db_faa-info.txt, - doc/legal/embedded/db_nist-info.txt, - doc/legal/embedded/dehumanize.txt, - doc/legal/embedded/delaunator.txt, doc/legal/embedded/earcut.txt, - doc/legal/embedded/fnmatch.txt, doc/legal/embedded/fontstash.txt, - doc/legal/embedded/gct.txt, - doc/legal/embedded/gdal_gcv_plugin.txt, - doc/legal/embedded/humanize.txt, doc/legal/embedded/hv3.txt, - doc/legal/embedded/hv3_combobox.txt, - doc/legal/embedded/hv3_snit.txt, - doc/legal/embedded/libtermlib.txt, - doc/legal/embedded/msinttypes.txt, - doc/legal/embedded/mt19937ar.txt, - doc/legal/embedded/nurbs_fit.txt, doc/legal/embedded/obr.txt, - doc/legal/embedded/openimageio.txt, doc/legal/embedded/osg.txt, - doc/legal/embedded/osl.txt, doc/legal/embedded/pbrt.txt, - doc/legal/embedded/point_in_polygon.txt, - doc/legal/embedded/point_in_polyhedron.txt, - doc/legal/embedded/polygonizer.txt, - doc/legal/embedded/pstdint.txt, doc/legal/embedded/qsort.txt, - doc/legal/embedded/randmt.txt, doc/legal/embedded/realpath.txt, - doc/legal/embedded/scriptsort.txt, doc/legal/embedded/search.txt, - doc/legal/embedded/sh_wood.txt, doc/legal/embedded/sobolseq.txt, - doc/legal/embedded/sscanf.txt, doc/legal/embedded/tcl.txt, - doc/legal/embedded/tinythread.txt, doc/legal/embedded/tkcon.txt, - doc/legal/embedded/tri_pt.txt, doc/legal/embedded/uce_dirent.txt, - doc/legal/embedded/whereami.txt, doc/legal/embedded/x24.txt, - doc/legal/embedded/y2038.txt, - regress/licenses/licenses_check.cpp, - src/libdm/fontstash/stb_truetype.h: - checkpoint - -2020-04-10 20:11 starseeker - - * [r75342] src/other/openNURBS.dist, - src/other/openNURBS/example_brep/example_brep.xcodeproj, - src/other/openNURBS/example_read/example_read.xcodeproj, - src/other/openNURBS/example_roundtrip/example_roundtrip.xcodeproj, - src/other/openNURBS/example_userdata/example_userdata.xcodeproj, - src/other/openNURBS/example_write/example_write.xcodeproj: - Clear some stray xcode projects - -2020-04-10 19:51 starseeker - - * [r75341] src/libbn/CMakeLists.txt, src/libbn/mt19937ar.c, - src/libbn/randmt.c: - Make a stab at swapping in the newer BSD licensed version of - mt19937ar. This isn't the newer faster one, but the version from - http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/CODES/mt19937ar.c - -2020-04-10 18:29 starseeker - - * [r75340] src/libbu/y2038/time64.c, src/libbu/y2038/time64.h: - Make a stab at merging upstream y2038 changes - -2020-04-10 17:46 starseeker - - * [r75339] regress/licenses/licenses_check.cpp, - regress/licenses/regress-licenses.cmake: - checkpoint - -2020-04-10 17:05 starseeker - - * [r75338] doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/stb_truetype.txt: - stb_truetype is separate from fontstash - -2020-04-10 17:02 starseeker - - * [r75337] src/libdm/dm-osgl.cpp, src/libdm/dm-osgl.h: - Fixes for osgl compilation - -2020-04-10 17:02 starseeker - - * [r75336] src/libdm/fontstash/stb_truetype.h: - Update to latest stb_truetype.h - -2020-04-10 15:48 starseeker - - * [r75335] regress/CMakeLists.txt, regress/license_check.cpp, - regress/licenses, regress/licenses/CMakeLists.txt, - regress/licenses/licenses_check.cpp, - regress/licenses/regress-licenses.cmake: - checkpoint - -2020-04-10 14:45 starseeker - - * [r75334] src/librt/CMakeLists.txt: - Use the plural forms of names - -2020-04-10 13:38 starseeker - - * [r75333] include/dm.h, include/dm/CMakeLists.txt, - include/dm/dm_xvars.h, src/libdm/CMakeLists.txt, - src/libdm/color.c, src/libdm/dm-X.c, src/libdm/dm-generic.c, - src/libdm/dm-ogl.c, src/libdm/dm-osgl.cpp, src/libdm/dm-qt.cpp, - src/libdm/dm-tk.c, src/libdm/dm-wgl.c, src/libdm/dm_obj.c, - src/libdm/dm_xvars.h, src/libtclcad/tclcad_obj.c, - src/mged/dm-generic.c, src/mged/doevent.c, src/mged/mged.h, - src/mged/mged_dm.h: - Make dm_xvars.h private - -2020-04-10 12:29 starseeker - - * [r75332] include/dm/dm_xvars.h, src/libdm/dm-tk.c, - src/libdm/dm-tk.h: - The tkfont vars never belonged in xvars to begin with - move to - dm-tk.h - -2020-04-10 12:06 starseeker - - * [r75331] include/dm.h, src/adrt/isst.c, src/libdm/dm-generic.c, - src/libdm/dm-ogl.c, src/libdm/dm-osgl.cpp, src/libdm/dm-plot.c, - src/libdm/dm-ps.c, src/libdm/dm-tk.c, src/libdm/dm-txt.c, - src/libdm/dm-wgl.c, src/libdm/dm_obj.c, src/libdm/dm_private.h, - src/libtclcad/tclcad_obj.c, src/mged/attach.c: - void cast the Tcl_Interp for the dm container, so dm_open (public - libdm api) doesn't explicitly use the Tcl type - -2020-04-09 21:17 starseeker - - * [r75330] src/libdm/dm-ogl.c: - Use variables instead of verbose casting for public and private - variables in dm-ogl.c - -2020-04-09 20:04 starseeker - - * [r75329] src/libdm/dm-plot.c, src/libdm/dm-plot.h: - Move the static vars in dm-plot into the private variables - container - -2020-04-09 19:58 starseeker - - * [r75328] src/libdm/dm-plot.c: - ws - -2020-04-09 19:51 starseeker - - * [r75327] src/libdm/dm-plot.c: - Define a local var for readability - -2020-04-09 19:33 starseeker - - * [r75326] src/other/CMakeLists.txt: - Whoops - set other LZ4 variables - -2020-04-09 18:36 starseeker - - * [r75325] NEWS, src/libdm/dm-generic.c, src/mged/dozoom.c: - Revert r74969 - the change to enable transparency had the side - effect of breaking illumination, which meant (among other things) - that the wireframes of solids vanished when trying to edit them. - This breaks transparency again - we'll have to back up and take - another look at it. - -2020-04-09 18:02 starseeker - - * [r75324] include/dm.h, include/dm/bview.h, include/dm/defines.h, - include/dm/dm_xvars.h, include/fb.h, include/tclcad.h, - src/adrt/isst.c, src/libdm/CMakeLists.txt, src/libdm/dm-Null.c, - src/libdm/dm-Null.h, src/libdm/dm-X.c, src/libdm/dm-generic.c, - src/libdm/dm-glx.h, src/libdm/dm-ogl.c, src/libdm/dm-osgl.cpp, - src/libdm/dm-plot.c, src/libdm/dm-ps.c, src/libdm/dm-qt.cpp, - src/libdm/dm-tk.c, src/libdm/dm-tk.h, src/libdm/dm-txt.c, - src/libdm/dm-wgl.c, src/libdm/dm_obj.c, src/libdm/dm_private.h, - src/libdm/query.c, src/libdm/tcl.c, src/libfb/CMakeLists.txt, - src/libfb/fb_generic.c, src/libfb/fb_private.h, - src/libfb/if_tk.c, src/libfb/tcl.c, src/libtclcad/CMakeLists.txt, - src/libtclcad/dm_tcl.c, src/libtclcad/libfuncs.c, - src/libtclcad/tclcad_obj.c, src/mged/attach.c, - src/mged/doevent.c, src/mged/mged.c, src/mged/mged.h, - src/mged/mged_dm.h, src/mged/setup.c, src/util/plot3-dm.c: - Revert back the attempt to push Tcl/Tk out of libdm/libfb - - close, but Windows isn't happy and there is no telling how deep - that rabbit hole goes. - -2020-04-09 17:21 starseeker - - * [r75323] src/libdm/dm-generic.c: - Pass context in. - -2020-04-09 16:02 starseeker - - * [r75322] src/libtclcad/libfuncs.c: - in fb.h, don't need here - -2020-04-09 16:00 starseeker - - * [r75321] include/dm.h, include/fb.h, src/libtclcad/dm_tcl.c: - export a few functions for Windows - -2020-04-09 15:41 starseeker - - * [r75320] include/dm.h, src/libdm/dm-generic.c, - src/libtclcad/dm_tcl.c: - Rough in a way to get the hdc (untested) - -2020-04-09 15:31 starseeker - - * [r75319] include/dm/dm_xvars.h, src/libdm/dm-generic.c, - src/libdm/dm-wgl.c: - Start working on completing dm-wgl.c rework - -2020-04-09 15:29 starseeker - - * [r75318] src/other/CMakeLists.txt, - src/other/libpng/CMakeLists.txt, - src/other/libregex/CMakeLists.txt, src/other/libz/CMakeLists.txt, - src/other/lz4/CMakeLists.txt: - Use a convenient CMake property to adjust the output names of the - bundled versions of libraries that are most likely to conflict - with system versions. - -2020-04-09 15:27 starseeker - - * [r75317] src/other/CMakeLists.txt: - With the deliberate exceptions of Tcl/Tk and openNURBS, don't - install the headers of the src/other libs. Our bundled versions - aren't really intended to (and can't always successfully) - substitute for 3rd party libs in other codes as well as our own, - and putting our versions of those headers where they can be found - invites trouble. openNURBS we modify for our uses (a system - version, which doesn't usually exist anyway, won't work). - -2020-04-09 15:19 starseeker - - * [r75316] src/other/libgdiam/CMakeLists.txt, - src/other/libnetpbm/CMakeLists.txt, - src/other/libspsr/CMakeLists.txt, - src/other/libutahrle/CMakeLists.txt, - src/other/libvds/CMakeLists.txt, - src/other/poly2tri/CMakeLists.txt, - src/other/proj-4/src/CMakeLists.txt, - src/other/rply/CMakeLists.txt, - src/other/stepcode/include/CMakeLists.txt, - src/other/stepcode/src/base/CMakeLists.txt, - src/other/stepcode/src/cldai/CMakeLists.txt, - src/other/stepcode/src/cleditor/CMakeLists.txt, - src/other/stepcode/src/cllazyfile/CMakeLists.txt, - src/other/stepcode/src/clstepcore/CMakeLists.txt, - src/other/stepcode/src/clutils/CMakeLists.txt: - Wrap header installs - -2020-04-09 02:20 starseeker - - * [r75315] include/dm.h, include/dm/dm_xvars.h, - src/libdm/CMakeLists.txt, src/libdm/dm-X.c, src/libdm/dm-glx.h, - src/libdm/dm-ogl.c, src/libdm/dm-osgl.cpp: - checkpoint - -2020-04-09 01:40 starseeker - - * [r75314] include/dm.h, src/libdm/dm-wgl.c, - src/libtclcad/dm_tcl.c: - rough in logic for eventhandlers - -2020-04-08 23:17 starseeker - - * [r75313] src/libdm/dm-generic.c, src/libdm/dm-osgl.cpp: - osgl isn't working, but get it building. Not sure if it's these - changes that broke it, Tk 8.6, or something else... - -2020-04-08 23:11 starseeker - - * [r75312] src/libdm/osg-test.cpp: - Fix initialization - -2020-04-08 22:07 starseeker - - * [r75311] src/libdm/dm-X.c, src/libdm/dm-ogl.c, - src/libdm/dm-osgl.cpp, src/libdm/dm-qt.cpp, src/libdm/dm-wgl.c: - Do some of the translation for the other dm backends - -2020-04-08 21:36 starseeker - - * [r75310] CMakeLists.txt, src/libdm/CMakeLists.txt, - src/libdm/dm-rtgl.c, src/libdm/dm-rtgl.h: - rtgl code is very dated (still has ged references) - VC has it if - we need to revisit. - -2020-04-08 20:44 starseeker - - * [r75309] src/libdm/CMakeLists.txt, src/libdm/dm-pex.h, - src/libdm/dm-wgl.c: - Make a stab at adapting wgl.c - untested, clearly will need - additional wrappers. - -2020-04-08 20:11 starseeker - - * [r75308] src/libdm/CMakeLists.txt, src/libdm/dm-generic.c, - src/libdm/dm-tk.c, src/libdm/dm-tk.h, src/libdm/query.c: - At least for now, yank dm-tk - tautologically it's got a lot of - Tk calls - -2020-04-08 19:54 starseeker - - * [r75307] src/libdm/dm-X.c: - switch X dm to context calls - -2020-04-08 19:45 starseeker - - * [r75306] include/dm.h, src/libtclcad/dm_tcl.c: - X dm calls Tk_Screen - set up to wrap it - -2020-04-08 18:56 starseeker - - * [r75305] include/dm.h, src/libdm/dm-Null.c, src/libdm/dm-Null.h, - src/libdm/dm-X.c, src/libdm/dm-generic.c, src/libdm/dm-ogl.c, - src/libdm/dm-tk.c, src/libdm/dm-txt.c, src/libdm/dm-wgl.c, - src/libdm/dm_private.h, src/libtclcad/dm_tcl.c, - src/libtclcad/tclcad_obj.c, src/mged/attach.c, - src/mged/doevent.c: - more context propagation - -2020-04-08 18:41 starseeker - - * [r75304] src/libdm/dm-ogl.c: - Reduce Tk prefixed code in dm-ogl to the Tk_Window casts - -2020-04-08 18:31 starseeker - - * [r75303] include/dm.h, src/libdm/dm-X.c, src/libtclcad/dm_tcl.c: - Wrap a few more Tk functions in context calls - -2020-04-08 17:37 starseeker - - * [r75302] src/libdm/dm-X.c: - use context in X_close - -2020-04-08 17:34 starseeker - - * [r75301] src/libdm/dm-generic.c: - correct X_open_dm call - -2020-04-08 17:32 starseeker - - * [r75300] src/libdm/dm-X.c: - do a few more context switches - -2020-04-08 17:27 starseeker - - * [r75299] src/libdm/dm-ogl.c: - more context translations - -2020-04-08 16:31 starseeker - - * [r75298] src/libdm/dm-ogl.c: - Start easing in the context calls. Need to test as I go here, - because any step could break things and too many changes will - make debugging impractical. - -2020-04-08 16:22 starseeker - - * [r75297] src/libtclcad/tclcad_obj.c: - use context - -2020-04-08 16:16 starseeker - - * [r75296] src/mged/mged.h, src/mged/mged_dm.h: - Have MGED do it's own Tk includes (apparently relying on libdm - previously...) - -2020-04-08 16:14 starseeker - - * [r75295] include/dm.h, src/libdm/dm-Null.c, src/libdm/dm-Null.h, - src/libdm/dm-X.c, src/libdm/dm-generic.c, src/libdm/dm-ogl.c, - src/libdm/dm-plot.c, src/libdm/dm-ps.c, src/libdm/dm-tk.c, - src/libdm/dm-txt.c, src/libdm/dm-wgl.c, src/libdm/dm_private.h, - src/libtclcad/dm_tcl.c, src/libtclcad/tclcad_obj.c, - src/mged/attach.c, src/mged/mged.c, src/util/plot3-dm.c: - More propagation of the context - -2020-04-08 15:53 starseeker - - * [r75294] misc/CMake/FindGDAL.cmake: - See if we can use (essentially) the vanilla FindGDAL.cmake - -2020-04-07 23:41 starseeker - - * [r75293] src/libdm/dm-generic.c, src/libdm/dm-ogl.c: - First tentative test of context - -2020-04-07 23:30 starseeker - - * [r75292] include/dm.h, include/tclcad.h, src/adrt/isst.c, - src/libdm/dm-generic.c, src/libtclcad/dm_tcl.c, - src/libtclcad/tclcad_obj.c, src/mged/attach.c, - src/util/CMakeLists.txt, src/util/plot3-dm.c: - Begin preparing to pass a context to dm_open. (Right now it's a - no-op.) - -2020-04-07 20:19 starseeker - - * [r75291] include/dm.h, src/libtclcad/dm_tcl.c: - checkpoint - -2020-04-07 18:45 starseeker - - * [r75290] include/ged/framebuffer.h, src/libged/ged_private.h, - src/libged/png2fb.c, src/libged/preview.c, src/libged/rt.c, - src/libged/rtcheck.c, src/libged/rtwizard.c: - narrow scope of fb.h includes to limit tcl.h propagation, remove - remaining tcl.h includes in libged. - -2020-04-07 18:30 starseeker - - * [r75289] src/libged/rect.c: - rect.c doesn't appear to be using fb directly - -2020-04-07 17:27 starseeker - - * [r75288] include/dm.h, src/libdm/CMakeLists.txt, - src/libdm/dm-generic.c, src/libdm/dm_obj.c, - src/libtclcad/CMakeLists.txt, src/libtclcad/dm_tcl.c, - src/libtclcad/libfuncs.c: - Move dm_obj into libtclcad - -2020-04-07 15:02 starseeker - - * [r75287] src/libfb/CMakeLists.txt, src/libfb/fb_generic.c, - src/libfb/fb_private.h, src/libfb/if_tk.c: - The libfb interface (and libdm too for that matter) really beg - for some kind of dynamic library plugin arrangement. In the - meantime, we're not using the tk framebuffer and VC has it if we - want it again. - -2020-04-07 14:55 starseeker - - * [r75286] include/dm.h, include/dm/defines.h, include/tclcad.h, - src/libdm/CMakeLists.txt, src/libdm/dm-X.c, - src/libdm/dm-generic.c, src/libdm/dm-rtgl.c, src/libdm/dm-tk.c, - src/libdm/tcl.c, src/libtclcad/libfuncs.c: - Move Dm_Init to libtclcad - -2020-04-07 14:44 starseeker - - * [r75285] include/fb.h, include/tclcad.h, - src/libfb/CMakeLists.txt, src/libfb/tcl.c, - src/libtclcad/libfuncs.c, src/mged/attach.c: - move Fb_Init to libtclcad - -2020-04-07 14:16 starseeker - - * [r75284] include/ged/defines.h, src/libged/rt.c, - src/libged/rtcheck.c, src/libged/rtwizard.c, - src/libtclcad/tclcad_obj.c, src/mged/setup.c: - Pass TCL_READABLE in from further up the stack - -2020-04-07 14:05 starseeker - - * [r75283] src/libged/draw.c, src/libged/editit.c, - src/libged/edmater.c, src/libged/erase.c, src/libged/eye.c, - src/libged/get_obj_bounds.c, src/libged/move_arb_face.c, - src/libged/oscale.c, src/libged/pmat.c, src/libged/qray.c, - src/libged/remove.c, src/libged/rmat.c, src/libged/rmater.c, - src/libged/savekey.c, src/libged/showmats.c, - src/libged/wdb_importFg4Section.c: - Use GED_* returns consistently - -2020-04-07 13:39 starseeker - - * [r75282] include/ged/defines.h, include/tclcad.h, - src/libged/ged_private.h, src/libged/ged_util.c, src/libged/rt.c, - src/libged/rtcheck.c, src/libged/rtwizard.c, - src/libtclcad/tclcad_obj.c, src/mged/setup.c: - Push the I/O handler functions up into libtclcad, adding function - pointer slots for them in struct ged. Working to hide the details - of I/O channel setup inside the libged library. - -2020-04-07 12:49 starseeker - - * [r75281] src/libged/concat.cpp: - Use C++ set and unordered_map instead of the Tcl hash table for - dbconcat - -2020-04-07 11:22 starseeker - - * [r75280] src/libged/CMakeLists.txt, src/libged/concat.c, - src/libged/concat.cpp, src/libged/putmat.c: - C->C++ - -2020-04-07 01:27 starseeker - - * [r75279] regress/license_check.cpp: - check for public domain references as well - -2020-04-07 01:20 starseeker - - * [r75278] regress/CMakeLists.txt, regress/license_check.cpp: - Throw together a quick utility to look for copyright statements - with the idea of categorizing the files containing them. - -2020-04-07 00:44 starseeker - - * [r75277] regress/CMakeLists.txt: - list files for distclean - -2020-04-07 00:41 starseeker - - * [r75276] src/other/CMakeLists.txt: - Fix versions in distclean rules - -2020-04-07 00:39 starseeker - - * [r75275] src/libbu/uce-dirent.h: - Make a note to check the (much newer) Windows dirent.h from the - same author at some point. - -2020-04-06 19:06 starseeker - - * [r75274] misc/nirt/CMakeLists.txt, src/libtermio/CMakeLists.txt, - src/other/CMakeLists.txt, src/other/fontconfig.dist, - src/other/gdal.dist, src/other/itcl.dist, src/other/itk.dist, - src/other/tcl.dist, src/other/tk.dist, src/other/tkhtml.dist: - Update distcheck info for new files - -2020-04-06 15:24 starseeker - - * [r75273] src/rt/CMakeLists.txt: - Yeesh. The zlib prefix exposes another issue - the MPI libraries - when building with clang pull in a libopen-rte library that links - to system zlib. Apparently we'll need to bootstrap MPI if we want - to use our bundled zlib in this context... - -2020-04-06 15:16 starseeker - - * [r75272] src/other/CMakeLists.txt: - Ah, right - don't do XFT in Tk unless we're doing fontconfig - experimentation. - -2020-04-06 15:05 starseeker - - * [r75271] src/libged/CMakeLists.txt, src/libged/view_obj.c: - Unless I'm missing something, libged's view_obj isn't used or - exposed anywhere. - -2020-04-06 14:42 starseeker - - * [r75270] include/dm/bview.h, src/libged/view_obj.c: - vo_eval is a tcl.h usage in libged - need to get it out of - there... - -2020-04-06 13:03 starseeker - - * [r75269] src/libdm/dm-generic.c, src/mged/dozoom.c: - ws - -2020-04-04 16:11 starseeker - - * [r75268] src/other/CMakeLists.txt: - notes on fontconfig - -2020-04-04 00:50 starseeker - - * [r75267] src/libtclcad/CMakeLists.txt: - Need pkgIndex files for libtclcad - -2020-04-04 00:17 starseeker - - * [r75266] INSTALL, configure, misc/CMake/FindFontconfig.cmake, - src/other/CMakeLists.txt, src/other/fontconfig, - src/other/fontconfig.dist, src/other/fontconfig/CMakeLists.txt, - src/other/fontconfig/COPYING, src/other/fontconfig/COPYING.expat, - src/other/fontconfig/README, src/other/fontconfig/README.cmake, - src/other/fontconfig/expat, - src/other/fontconfig/expat/ConfigureChecks.cmake, - src/other/fontconfig/expat/README.md, - src/other/fontconfig/expat/ascii.h, - src/other/fontconfig/expat/asciitab.h, - src/other/fontconfig/expat/expat.h, - src/other/fontconfig/expat/expat_config.h.cmake, - src/other/fontconfig/expat/expat_external.h, - src/other/fontconfig/expat/iasciitab.h, - src/other/fontconfig/expat/internal.h, - src/other/fontconfig/expat/latin1tab.h, - src/other/fontconfig/expat/nametab.h, - src/other/fontconfig/expat/siphash.h, - src/other/fontconfig/expat/utf8tab.h, - src/other/fontconfig/expat/winconfig.h, - src/other/fontconfig/expat/xmlparse.c, - src/other/fontconfig/expat/xmlrole.c, - src/other/fontconfig/expat/xmlrole.h, - src/other/fontconfig/expat/xmltok.c, - src/other/fontconfig/expat/xmltok.h, - src/other/fontconfig/expat/xmltok_impl.c, - src/other/fontconfig/expat/xmltok_impl.h, - src/other/fontconfig/expat/xmltok_ns.c, - src/other/fontconfig/include, - src/other/fontconfig/include/config.h.in, - src/other/fontconfig/include/fc-case, - src/other/fontconfig/include/fc-case/fccase.h, - src/other/fontconfig/include/fc-lang, - src/other/fontconfig/include/fc-lang/fclang.h, - src/other/fontconfig/include/fcalias.h, - src/other/fontconfig/include/fcaliastail.h, - src/other/fontconfig/include/fcarch.h, - src/other/fontconfig/include/fcatomic.h, - src/other/fontconfig/include/fcdeprecate.h, - src/other/fontconfig/include/fcftalias.h, - src/other/fontconfig/include/fcftaliastail.h, - src/other/fontconfig/include/fcftint.h, - src/other/fontconfig/include/fcint.h, - src/other/fontconfig/include/fcmutex.h, - src/other/fontconfig/include/fcobjs.h, - src/other/fontconfig/include/fcobjshash.gperf.h, - src/other/fontconfig/include/fcobjshash.h, - src/other/fontconfig/include/fcstdint.h, - src/other/fontconfig/include/fcwindows.h, - src/other/fontconfig/include/fontconfig, - src/other/fontconfig/include/fontconfig/fcfreetype.h, - src/other/fontconfig/include/fontconfig/fcprivate.h, - src/other/fontconfig/include/fontconfig/fontconfig.h, - src/other/fontconfig/include/ftglue.h, src/other/fontconfig/src, - src/other/fontconfig/src/CMakeLists.txt, - src/other/fontconfig/src/fcarch.c, - src/other/fontconfig/src/fcatomic.c, - src/other/fontconfig/src/fccache.c, - src/other/fontconfig/src/fccfg.c, - src/other/fontconfig/src/fccharset.c, - src/other/fontconfig/src/fccompat.c, - src/other/fontconfig/src/fcdbg.c, - src/other/fontconfig/src/fcdefault.c, - src/other/fontconfig/src/fcdir.c, - src/other/fontconfig/src/fcformat.c, - src/other/fontconfig/src/fcfreetype.c, - src/other/fontconfig/src/fcfs.c, - src/other/fontconfig/src/fchash.c, - src/other/fontconfig/src/fcinit.c, - src/other/fontconfig/src/fclang.c, - src/other/fontconfig/src/fclist.c, - src/other/fontconfig/src/fcmatch.c, - src/other/fontconfig/src/fcmatrix.c, - src/other/fontconfig/src/fcname.c, - src/other/fontconfig/src/fcobjs.c, - src/other/fontconfig/src/fcpat.c, - src/other/fontconfig/src/fcptrlist.c, - src/other/fontconfig/src/fcrange.c, - src/other/fontconfig/src/fcserialize.c, - src/other/fontconfig/src/fcstat.c, - src/other/fontconfig/src/fcstr.c, - src/other/fontconfig/src/fcweight.c, - src/other/fontconfig/src/fcxml.c, - src/other/fontconfig/src/ftglue.c: - One of the major hold-ups for using Xft/Freetype by default in Tk - has been - fontconfig - when we mix our bundled freetype (and libpng and - zlib) with a - system fontconfig it's generally no-go. - - A bundled fontconfig has been a daunting challenge to date - its - build is - multi-step, using Perl to generate headers and autotools for the - main build - flow. Moreover, at compile time directories are hardcoded where - fontconfig - expects to look for fonts and cache entries. Both of these need - to be addressed - somehow for a 'bundled' fontconfig to work. - - This commit is the beginnings of addressing the problem, starting - with the - build process. Rather than attempt to duplicate the full build - process, we'll - take a stripped down, minimalist approach of pulling in any - generated headers - we can unless/until there is some clear utility in implementing - all the build - steps in a more self contained manner. Building is untested on - Windows (it may - not be needed there, I'll have to check Tk to see). - - The second part of the embedding - looking for fonts and - processing them - - hasn't been looked at yet - right now if you enable this mged - will segfault - with the message "Fontconfig error: Cannot load default config - file". It will - need some design thought, since what we actually want for this is - a relative - path runtime lookup in a share/fonts directory in BRL-CAD's - runtime hierarchy. - It's not clear yet what the best way to achieve that is. - -2020-04-03 23:51 starseeker - - * [r75265] src/other/freetype.dist: - update dist file - -2020-04-03 23:51 starseeker - - * [r75264] src/other/freetype/CMakeLists.txt, - src/other/freetype/src/gzip/adler32.c, - src/other/freetype/src/gzip/infblock.c, - src/other/freetype/src/gzip/infblock.h, - src/other/freetype/src/gzip/infcodes.c, - src/other/freetype/src/gzip/infcodes.h, - src/other/freetype/src/gzip/inffixed.h, - src/other/freetype/src/gzip/inflate.c, - src/other/freetype/src/gzip/inftrees.c, - src/other/freetype/src/gzip/inftrees.h, - src/other/freetype/src/gzip/infutil.c, - src/other/freetype/src/gzip/infutil.h, - src/other/freetype/src/gzip/zconf.h, - src/other/freetype/src/gzip/zlib.h, - src/other/freetype/src/gzip/zutil.c, - src/other/freetype/src/gzip/zutil.h: - Get the embedded zlib out of freetype - -2020-04-03 23:49 starseeker - - * [r75263] src/other/tk/CMakeLists.txt: - Note - it will be important to have freetype and fontconfig come - before the X11 libraries in the link lines, otherwise the system - versions get picked up... - -2020-04-03 16:21 starseeker - - * [r75262] src/libtermio/termcap.c: - write -> bu_log - -2020-04-03 14:30 starseeker - - * [r75261] src/other/gdal/CMakeLists.txt, - src/other/poly2tri/CMakeLists.txt, src/other/rply/CMakeLists.txt: - get the others too - -2020-04-03 14:29 starseeker - - * [r75260] src/other/tcl/CMakeLists.txt: - Ah, right - not using the _ROOT feature of find_package in this - mode, so don't need such a new CMake. - -2020-04-02 21:48 starseeker - - * [r75259] src/archer/archer_launch.tcl, - src/archer/plugins/Wizards/humanwizard/HumanWizard.tcl, - src/archer/plugins/Wizards/tankwizard/TankWizard.tcl, - src/archer/plugins/Wizards/tirewizard/TireWizard.tcl, - src/tclscripts/archer, src/tclscripts/archer/Archer.tcl, - src/tclscripts/archer/AttrGroupsDisplayUtility.tcl, - src/tclscripts/archer/BotUtility.tcl, - src/tclscripts/archer/GeometryEditFrame.tcl, - src/tclscripts/archer/LODUtility.tcl: - Revert some Archer changes made long ago when testing Itcl/Itk 4 - - not sure yet how we'll proceed to upgrade. - -2020-04-02 21:41 starseeker - - * [r75258] ., INSTALL, NEWS, bench, configure, db, doc, - doc/docbook/articles, doc/docbook/books, doc/docbook/lessons, - include, misc/CMake/BRLCAD_Summary.cmake, - misc/CMake/CMakeLists.txt, misc/CMake/FindBRLCADTCL.cmake, - misc/CMake/ThirdParty.cmake, regress, src/archer/CMakeLists.txt, - src/archer/archer_launch.tcl, - src/archer/plugins/Wizards/humanwizard/HumanWizard.tcl, - src/archer/plugins/Wizards/tankwizard/TankWizard.tcl, - src/archer/plugins/Wizards/tirewizard/TireWizard.tcl, - src/bwish/CMakeLists.txt, - src/external/Unigraphics/CMakeLists.txt, - src/libanalyze/CMakeLists.txt, src/libbu, - src/libged/polyclip.cpp, src/libtclcad/tclcadAutoPath.c, - src/libtclcad/tclcad_init.c, src/libtermio/termcap.c, - src/libtermio/termcap.h, src/libtermio/tgoto.c, - src/libtermio/tputs.c, src/other, src/other/CMakeLists.txt, - src/other/gdal, src/other/incrTcl, src/other/incrTcl.dist, - src/other/itcl, src/other/itcl.dist, src/other/itcl3, - src/other/itcl3.dist, src/other/itk, src/other/itk.dist, - src/other/itk3, src/other/itk3.dist, src/other/iwidgets.dist, - src/other/iwidgets/CHANGES, src/other/iwidgets/CMakeLists.txt, - src/other/iwidgets/ChangeLog, src/other/iwidgets/Makefile.am, - src/other/iwidgets/README, src/other/iwidgets/aclocal.m4, - src/other/iwidgets/configure.in, src/other/iwidgets/demos, - src/other/iwidgets/doc, src/other/iwidgets/generic/Makefile.am, - src/other/iwidgets/generic/combobox.itk, - src/other/iwidgets/generic/datefield.itk, - src/other/iwidgets/generic/entryfield.itk, - src/other/iwidgets/generic/fileselectionbox.itk, - src/other/iwidgets/generic/fileselectiondialog.itk, - src/other/iwidgets/generic/hierarchy.itk, - src/other/iwidgets/generic/panedwindow.itk, - src/other/iwidgets/generic/scopedobject.itcl, - src/other/iwidgets/generic/scrolledlistbox.itk, - src/other/iwidgets/generic/scrolledtext.itk, - src/other/iwidgets/generic/scrolledwidget.itk, - src/other/iwidgets/generic/tclIndex, - src/other/iwidgets/generic/timefield.itk, - src/other/iwidgets/iwidgets.tcl.in, src/other/iwidgets/outgoing, - src/other/iwidgets/pkgIndex.tcl.in, src/other/iwidgets/tclconfig, - src/other/iwidgets/tests, src/other/iwidgets/win, - src/other/libgdiam, src/other/libnetpbm, - src/other/libpng/scripts/macro.lst, src/other/libregex, - src/other/libspsr, src/other/libutahrle, src/other/libvds, - src/other/libz, src/other/poly2tri, - src/other/poly2tri/CMakeLists.txt, src/other/proj-4, - src/other/rply, src/other/stepcode, src/other/tcl.dist, - src/other/tcl/CMake/CheckCSourceRuns.cmake, - src/other/tcl/CMake/CheckPrototypeExists.cmake, - src/other/tcl/CMake/CheckSystemFunctionality.cmake, - src/other/tcl/CMake/FindTIMEZONE.cmake, - src/other/tcl/CMake/Path_Setup.cmake, - src/other/tcl/CMake/RPath_Setup.cmake, - src/other/tcl/CMake/ac_std_funcs.cmake, - src/other/tcl/CMake/tcl.cmake, src/other/tcl/CMakeLists.txt, - src/other/tcl/ChangeLog, src/other/tcl/ChangeLog.1999, - src/other/tcl/ChangeLog.2000, src/other/tcl/ChangeLog.2001, - src/other/tcl/ChangeLog.2002, src/other/tcl/ChangeLog.2003, - src/other/tcl/ChangeLog.2004, src/other/tcl/ChangeLog.2005, - src/other/tcl/ChangeLog.2007, src/other/tcl/ChangeLog.2008, - src/other/tcl/README, src/other/tcl/README.md, - src/other/tcl/changes, src/other/tcl/compat/fake-rfc2553.c, - src/other/tcl/compat/fake-rfc2553.h, - src/other/tcl/compat/fixstrtod.c, src/other/tcl/compat/gettod.c, - src/other/tcl/compat/license.terms, - src/other/tcl/compat/limits.h, src/other/tcl/compat/memcmp.c, - src/other/tcl/compat/mkstemp.c, src/other/tcl/compat/opendir.c, - src/other/tcl/compat/stdlib.h, - src/other/tcl/compat/strncasecmp.c, - src/other/tcl/compat/strstr.c, src/other/tcl/compat/strtod.c, - src/other/tcl/compat/strtol.c, src/other/tcl/compat/strtoul.c, - src/other/tcl/compat/unistd.h, src/other/tcl/compat/waitpid.c, - src/other/tcl/doc, src/other/tcl/generic/regc_color.c, - src/other/tcl/generic/regc_cvec.c, - src/other/tcl/generic/regc_lex.c, - src/other/tcl/generic/regc_locale.c, - src/other/tcl/generic/regc_nfa.c, - src/other/tcl/generic/regcomp.c, - src/other/tcl/generic/regcustom.h, - src/other/tcl/generic/rege_dfa.c, - src/other/tcl/generic/regerror.c, - src/other/tcl/generic/regerrs.h, src/other/tcl/generic/regexec.c, - src/other/tcl/generic/regextcl.h, - src/other/tcl/generic/regfronts.c, - src/other/tcl/generic/regguts.h, src/other/tcl/generic/tcl.decls, - src/other/tcl/generic/tcl.h, src/other/tcl/generic/tclAlloc.c, - src/other/tcl/generic/tclAssembly.c, - src/other/tcl/generic/tclAsync.c, - src/other/tcl/generic/tclBasic.c, - src/other/tcl/generic/tclBinary.c, - src/other/tcl/generic/tclCkalloc.c, - src/other/tcl/generic/tclClock.c, - src/other/tcl/generic/tclCmdAH.c, - src/other/tcl/generic/tclCmdIL.c, - src/other/tcl/generic/tclCmdMZ.c, - src/other/tcl/generic/tclCompCmds.c, - src/other/tcl/generic/tclCompCmdsGR.c, - src/other/tcl/generic/tclCompCmdsSZ.c, - src/other/tcl/generic/tclCompExpr.c, - src/other/tcl/generic/tclCompile.c, - src/other/tcl/generic/tclCompile.h, - src/other/tcl/generic/tclConfig.c, - src/other/tcl/generic/tclDTrace.d, - src/other/tcl/generic/tclDate.c, - src/other/tcl/generic/tclDecls.h, - src/other/tcl/generic/tclDictObj.c, - src/other/tcl/generic/tclDisassemble.c, - src/other/tcl/generic/tclEncoding.c, - src/other/tcl/generic/tclEnsemble.c, - src/other/tcl/generic/tclEnv.c, src/other/tcl/generic/tclEvent.c, - src/other/tcl/generic/tclExecute.c, - src/other/tcl/generic/tclFCmd.c, - src/other/tcl/generic/tclFileName.c, - src/other/tcl/generic/tclFileSystem.h, - src/other/tcl/generic/tclGet.c, - src/other/tcl/generic/tclGetDate.y, - src/other/tcl/generic/tclHash.c, - src/other/tcl/generic/tclHistory.c, - src/other/tcl/generic/tclIO.c, src/other/tcl/generic/tclIO.h, - src/other/tcl/generic/tclIOCmd.c, - src/other/tcl/generic/tclIOGT.c, - src/other/tcl/generic/tclIORChan.c, - src/other/tcl/generic/tclIORTrans.c, - src/other/tcl/generic/tclIOSock.c, - src/other/tcl/generic/tclIOUtil.c, - src/other/tcl/generic/tclIndexObj.c, - src/other/tcl/generic/tclInt.decls, - src/other/tcl/generic/tclInt.h, - src/other/tcl/generic/tclIntDecls.h, - src/other/tcl/generic/tclIntPlatDecls.h, - src/other/tcl/generic/tclInterp.c, - src/other/tcl/generic/tclLink.c, - src/other/tcl/generic/tclListObj.c, - src/other/tcl/generic/tclLiteral.c, - src/other/tcl/generic/tclLoad.c, - src/other/tcl/generic/tclLoadNone.c, - src/other/tcl/generic/tclMain.c, - src/other/tcl/generic/tclNamesp.c, - src/other/tcl/generic/tclNotify.c, src/other/tcl/generic/tclOO.c, - src/other/tcl/generic/tclOO.decls, src/other/tcl/generic/tclOO.h, - src/other/tcl/generic/tclOOBasic.c, - src/other/tcl/generic/tclOOCall.c, - src/other/tcl/generic/tclOODecls.h, - src/other/tcl/generic/tclOODefineCmds.c, - src/other/tcl/generic/tclOOInfo.c, - src/other/tcl/generic/tclOOInt.h, - src/other/tcl/generic/tclOOIntDecls.h, - src/other/tcl/generic/tclOOMethod.c, - src/other/tcl/generic/tclOOStubInit.c, - src/other/tcl/generic/tclOOStubLib.c, - src/other/tcl/generic/tclObj.c, - src/other/tcl/generic/tclOptimize.c, - src/other/tcl/generic/tclPanic.c, - src/other/tcl/generic/tclParse.c, - src/other/tcl/generic/tclParse.h, - src/other/tcl/generic/tclPathObj.c, - src/other/tcl/generic/tclPipe.c, src/other/tcl/generic/tclPkg.c, - src/other/tcl/generic/tclPkgConfig.c, - src/other/tcl/generic/tclPlatDecls.h, - src/other/tcl/generic/tclPort.h, - src/other/tcl/generic/tclPosixStr.c, - src/other/tcl/generic/tclPreserve.c, - src/other/tcl/generic/tclProc.c, - src/other/tcl/generic/tclRegexp.c, - src/other/tcl/generic/tclRegexp.h, - src/other/tcl/generic/tclResolve.c, - src/other/tcl/generic/tclResult.c, - src/other/tcl/generic/tclScan.c, - src/other/tcl/generic/tclStrToD.c, - src/other/tcl/generic/tclStringObj.c, - src/other/tcl/generic/tclStringRep.h, - src/other/tcl/generic/tclStringTrim.h, - src/other/tcl/generic/tclStubInit.c, - src/other/tcl/generic/tclStubLib.c, - src/other/tcl/generic/tclTest.c, - src/other/tcl/generic/tclTestObj.c, - src/other/tcl/generic/tclTestProcBodyObj.c, - src/other/tcl/generic/tclThread.c, - src/other/tcl/generic/tclThreadAlloc.c, - src/other/tcl/generic/tclThreadJoin.c, - src/other/tcl/generic/tclThreadStorage.c, - src/other/tcl/generic/tclThreadTest.c, - src/other/tcl/generic/tclTimer.c, - src/other/tcl/generic/tclTomMath.decls, - src/other/tcl/generic/tclTomMath.h, - src/other/tcl/generic/tclTomMathDecls.h, - src/other/tcl/generic/tclTomMathInt.h, - src/other/tcl/generic/tclTomMathInterface.c, - src/other/tcl/generic/tclTomMathStubLib.c, - src/other/tcl/generic/tclTrace.c, - src/other/tcl/generic/tclUniData.c, - src/other/tcl/generic/tclUtf.c, src/other/tcl/generic/tclUtil.c, - src/other/tcl/generic/tclVar.c, src/other/tcl/generic/tclZlib.c, - src/other/tcl/library/CMakeLists.txt, - src/other/tcl/library/auto.tcl, src/other/tcl/library/clock.tcl, - src/other/tcl/library/dde/pkgIndex.tcl, - src/other/tcl/library/history.tcl, - src/other/tcl/library/http/http.tcl, - src/other/tcl/library/http/pkgIndex.tcl, - src/other/tcl/library/http1.0/http.tcl, - src/other/tcl/library/init.tcl, - src/other/tcl/library/license.terms, - src/other/tcl/library/msgcat/msgcat.tcl, - src/other/tcl/library/msgcat/pkgIndex.tcl, - src/other/tcl/library/msgs/ja.msg, - src/other/tcl/library/opt/optparse.tcl, - src/other/tcl/library/opt/pkgIndex.tcl, - src/other/tcl/library/package.tcl, - src/other/tcl/library/reg/pkgIndex.tcl, - src/other/tcl/library/safe.tcl, src/other/tcl/library/tclIndex, - src/other/tcl/library/tcltest/pkgIndex.tcl, - src/other/tcl/library/tcltest/tcltest.tcl, - src/other/tcl/library/tm.tcl, - src/other/tcl/library/tzdata/Africa/Accra, - src/other/tcl/library/tzdata/Africa/Bissau, - src/other/tcl/library/tzdata/Africa/Casablanca, - src/other/tcl/library/tzdata/Africa/Ceuta, - src/other/tcl/library/tzdata/Africa/El_Aaiun, - src/other/tcl/library/tzdata/Africa/Sao_Tome, - src/other/tcl/library/tzdata/Africa/Windhoek, - src/other/tcl/library/tzdata/America/Araguaina, - src/other/tcl/library/tzdata/America/Argentina/Buenos_Aires, - src/other/tcl/library/tzdata/America/Argentina/Catamarca, - src/other/tcl/library/tzdata/America/Argentina/Cordoba, - src/other/tcl/library/tzdata/America/Argentina/Jujuy, - src/other/tcl/library/tzdata/America/Argentina/La_Rioja, - src/other/tcl/library/tzdata/America/Argentina/Mendoza, - src/other/tcl/library/tzdata/America/Argentina/Rio_Gallegos, - src/other/tcl/library/tzdata/America/Argentina/Salta, - src/other/tcl/library/tzdata/America/Argentina/San_Juan, - src/other/tcl/library/tzdata/America/Argentina/San_Luis, - src/other/tcl/library/tzdata/America/Argentina/Tucuman, - src/other/tcl/library/tzdata/America/Argentina/Ushuaia, - src/other/tcl/library/tzdata/America/Asuncion, - src/other/tcl/library/tzdata/America/Bahia, - src/other/tcl/library/tzdata/America/Belem, - src/other/tcl/library/tzdata/America/Boa_Vista, - src/other/tcl/library/tzdata/America/Bogota, - src/other/tcl/library/tzdata/America/Campo_Grande, - src/other/tcl/library/tzdata/America/Cuiaba, - src/other/tcl/library/tzdata/America/Detroit, - src/other/tcl/library/tzdata/America/Edmonton, - src/other/tcl/library/tzdata/America/Eirunepe, - src/other/tcl/library/tzdata/America/Fortaleza, - src/other/tcl/library/tzdata/America/Grand_Turk, - src/other/tcl/library/tzdata/America/Guayaquil, - src/other/tcl/library/tzdata/America/Indiana/Tell_City, - src/other/tcl/library/tzdata/America/Jamaica, - src/other/tcl/library/tzdata/America/Kentucky/Louisville, - src/other/tcl/library/tzdata/America/La_Paz, - src/other/tcl/library/tzdata/America/Lima, - src/other/tcl/library/tzdata/America/Maceio, - src/other/tcl/library/tzdata/America/Manaus, - src/other/tcl/library/tzdata/America/Metlakatla, - src/other/tcl/library/tzdata/America/Montevideo, - src/other/tcl/library/tzdata/America/Noronha, - src/other/tcl/library/tzdata/America/Porto_Velho, - src/other/tcl/library/tzdata/America/Punta_Arenas, - src/other/tcl/library/tzdata/America/Recife, - src/other/tcl/library/tzdata/America/Rio_Branco, - src/other/tcl/library/tzdata/America/Santarem, - src/other/tcl/library/tzdata/America/Santiago, - src/other/tcl/library/tzdata/America/Sao_Paulo, - src/other/tcl/library/tzdata/America/Vancouver, - src/other/tcl/library/tzdata/Antarctica/Casey, - src/other/tcl/library/tzdata/Antarctica/Palmer, - src/other/tcl/library/tzdata/Asia/Almaty, - src/other/tcl/library/tzdata/Asia/Aqtau, - src/other/tcl/library/tzdata/Asia/Aqtobe, - src/other/tcl/library/tzdata/Asia/Ashgabat, - src/other/tcl/library/tzdata/Asia/Atyrau, - src/other/tcl/library/tzdata/Asia/Baghdad, - src/other/tcl/library/tzdata/Asia/Baku, - src/other/tcl/library/tzdata/Asia/Bishkek, - src/other/tcl/library/tzdata/Asia/Choibalsan, - src/other/tcl/library/tzdata/Asia/Dhaka, - src/other/tcl/library/tzdata/Asia/Dushanbe, - src/other/tcl/library/tzdata/Asia/Gaza, - src/other/tcl/library/tzdata/Asia/Hebron, - src/other/tcl/library/tzdata/Asia/Hong_Kong, - src/other/tcl/library/tzdata/Asia/Hovd, - src/other/tcl/library/tzdata/Asia/Jerusalem, - src/other/tcl/library/tzdata/Asia/Kuching, - src/other/tcl/library/tzdata/Asia/Macau, - src/other/tcl/library/tzdata/Asia/Manila, - src/other/tcl/library/tzdata/Asia/Oral, - src/other/tcl/library/tzdata/Asia/Pyongyang, - src/other/tcl/library/tzdata/Asia/Qostanay, - src/other/tcl/library/tzdata/Asia/Qyzylorda, - src/other/tcl/library/tzdata/Asia/Samarkand, - src/other/tcl/library/tzdata/Asia/Seoul, - src/other/tcl/library/tzdata/Asia/Shanghai, - src/other/tcl/library/tzdata/Asia/Tashkent, - src/other/tcl/library/tzdata/Asia/Tbilisi, - src/other/tcl/library/tzdata/Asia/Tehran, - src/other/tcl/library/tzdata/Asia/Tokyo, - src/other/tcl/library/tzdata/Asia/Ulaanbaatar, - src/other/tcl/library/tzdata/Asia/Yerevan, - src/other/tcl/library/tzdata/Atlantic/Azores, - src/other/tcl/library/tzdata/Atlantic/Cape_Verde, - src/other/tcl/library/tzdata/Atlantic/Madeira, - src/other/tcl/library/tzdata/Atlantic/Reykjavik, - src/other/tcl/library/tzdata/Atlantic/Stanley, - src/other/tcl/library/tzdata/Australia/Lord_Howe, - src/other/tcl/library/tzdata/Etc/UCT, - src/other/tcl/library/tzdata/Europe/Brussels, - src/other/tcl/library/tzdata/Europe/Dublin, - src/other/tcl/library/tzdata/Europe/Istanbul, - src/other/tcl/library/tzdata/Europe/Kaliningrad, - src/other/tcl/library/tzdata/Europe/Lisbon, - src/other/tcl/library/tzdata/Europe/Prague, - src/other/tcl/library/tzdata/Europe/Rome, - src/other/tcl/library/tzdata/Europe/Vienna, - src/other/tcl/library/tzdata/Europe/Volgograd, - src/other/tcl/library/tzdata/Indian/Mauritius, - src/other/tcl/library/tzdata/Pacific/Apia, - src/other/tcl/library/tzdata/Pacific/Chatham, - src/other/tcl/library/tzdata/Pacific/Chuuk, - src/other/tcl/library/tzdata/Pacific/Easter, - src/other/tcl/library/tzdata/Pacific/Efate, - src/other/tcl/library/tzdata/Pacific/Enderbury, - src/other/tcl/library/tzdata/Pacific/Fiji, - src/other/tcl/library/tzdata/Pacific/Galapagos, - src/other/tcl/library/tzdata/Pacific/Guam, - src/other/tcl/library/tzdata/Pacific/Honolulu, - src/other/tcl/library/tzdata/Pacific/Kiritimati, - src/other/tcl/library/tzdata/Pacific/Kosrae, - src/other/tcl/library/tzdata/Pacific/Kwajalein, - src/other/tcl/library/tzdata/Pacific/Majuro, - src/other/tcl/library/tzdata/Pacific/Nauru, - src/other/tcl/library/tzdata/Pacific/Norfolk, - src/other/tcl/library/tzdata/Pacific/Noumea, - src/other/tcl/library/tzdata/Pacific/Palau, - src/other/tcl/library/tzdata/Pacific/Pohnpei, - src/other/tcl/library/tzdata/Pacific/Rarotonga, - src/other/tcl/library/tzdata/Pacific/Tongatapu, - src/other/tcl/library/tzdata/UCT, - src/other/tcl/libtommath/bn_cutoffs.c, - src/other/tcl/libtommath/bn_deprecated.c, - src/other/tcl/libtommath/bn_mp_2expt.c, - src/other/tcl/libtommath/bn_mp_abs.c, - src/other/tcl/libtommath/bn_mp_add.c, - src/other/tcl/libtommath/bn_mp_add_d.c, - src/other/tcl/libtommath/bn_mp_addmod.c, - src/other/tcl/libtommath/bn_mp_and.c, - src/other/tcl/libtommath/bn_mp_clamp.c, - src/other/tcl/libtommath/bn_mp_clear.c, - src/other/tcl/libtommath/bn_mp_clear_multi.c, - src/other/tcl/libtommath/bn_mp_cmp.c, - src/other/tcl/libtommath/bn_mp_cmp_d.c, - src/other/tcl/libtommath/bn_mp_cmp_mag.c, - src/other/tcl/libtommath/bn_mp_cnt_lsb.c, - src/other/tcl/libtommath/bn_mp_complement.c, - src/other/tcl/libtommath/bn_mp_copy.c, - src/other/tcl/libtommath/bn_mp_count_bits.c, - src/other/tcl/libtommath/bn_mp_decr.c, - src/other/tcl/libtommath/bn_mp_div.c, - src/other/tcl/libtommath/bn_mp_div_2.c, - src/other/tcl/libtommath/bn_mp_div_2d.c, - src/other/tcl/libtommath/bn_mp_div_3.c, - src/other/tcl/libtommath/bn_mp_div_d.c, - src/other/tcl/libtommath/bn_mp_dr_is_modulus.c, - src/other/tcl/libtommath/bn_mp_dr_reduce.c, - src/other/tcl/libtommath/bn_mp_dr_setup.c, - src/other/tcl/libtommath/bn_mp_error_to_string.c, - src/other/tcl/libtommath/bn_mp_exch.c, - src/other/tcl/libtommath/bn_mp_expt_u32.c, - src/other/tcl/libtommath/bn_mp_exptmod.c, - src/other/tcl/libtommath/bn_mp_exteuclid.c, - src/other/tcl/libtommath/bn_mp_fread.c, - src/other/tcl/libtommath/bn_mp_from_sbin.c, - src/other/tcl/libtommath/bn_mp_from_ubin.c, - src/other/tcl/libtommath/bn_mp_fwrite.c, - src/other/tcl/libtommath/bn_mp_gcd.c, - src/other/tcl/libtommath/bn_mp_get_double.c, - src/other/tcl/libtommath/bn_mp_get_i32.c, - src/other/tcl/libtommath/bn_mp_get_i64.c, - src/other/tcl/libtommath/bn_mp_get_l.c, - src/other/tcl/libtommath/bn_mp_get_ll.c, - src/other/tcl/libtommath/bn_mp_get_mag_u32.c, - src/other/tcl/libtommath/bn_mp_get_mag_u64.c, - src/other/tcl/libtommath/bn_mp_get_mag_ul.c, - src/other/tcl/libtommath/bn_mp_get_mag_ull.c, - src/other/tcl/libtommath/bn_mp_grow.c, - src/other/tcl/libtommath/bn_mp_incr.c, - src/other/tcl/libtommath/bn_mp_init.c, - src/other/tcl/libtommath/bn_mp_init_copy.c, - src/other/tcl/libtommath/bn_mp_init_i32.c, - src/other/tcl/libtommath/bn_mp_init_i64.c, - src/other/tcl/libtommath/bn_mp_init_l.c, - src/other/tcl/libtommath/bn_mp_init_ll.c, - src/other/tcl/libtommath/bn_mp_init_multi.c, - src/other/tcl/libtommath/bn_mp_init_set.c, - src/other/tcl/libtommath/bn_mp_init_size.c, - src/other/tcl/libtommath/bn_mp_init_u32.c, - src/other/tcl/libtommath/bn_mp_init_u64.c, - src/other/tcl/libtommath/bn_mp_init_ul.c, - src/other/tcl/libtommath/bn_mp_init_ull.c, - src/other/tcl/libtommath/bn_mp_invmod.c, - src/other/tcl/libtommath/bn_mp_is_square.c, - src/other/tcl/libtommath/bn_mp_iseven.c, - src/other/tcl/libtommath/bn_mp_isodd.c, - src/other/tcl/libtommath/bn_mp_kronecker.c, - src/other/tcl/libtommath/bn_mp_lcm.c, - src/other/tcl/libtommath/bn_mp_log_u32.c, - src/other/tcl/libtommath/bn_mp_lshd.c, - src/other/tcl/libtommath/bn_mp_mod.c, - src/other/tcl/libtommath/bn_mp_mod_2d.c, - src/other/tcl/libtommath/bn_mp_mod_d.c, - src/other/tcl/libtommath/bn_mp_montgomery_calc_normalization.c, - src/other/tcl/libtommath/bn_mp_montgomery_reduce.c, - src/other/tcl/libtommath/bn_mp_montgomery_setup.c, - src/other/tcl/libtommath/bn_mp_mul.c, - src/other/tcl/libtommath/bn_mp_mul_2.c, - src/other/tcl/libtommath/bn_mp_mul_2d.c, - src/other/tcl/libtommath/bn_mp_mul_d.c, - src/other/tcl/libtommath/bn_mp_mulmod.c, - src/other/tcl/libtommath/bn_mp_neg.c, - src/other/tcl/libtommath/bn_mp_or.c, - src/other/tcl/libtommath/bn_mp_pack.c, - src/other/tcl/libtommath/bn_mp_pack_count.c, - src/other/tcl/libtommath/bn_mp_prime_fermat.c, - src/other/tcl/libtommath/bn_mp_prime_frobenius_underwood.c, - src/other/tcl/libtommath/bn_mp_prime_is_prime.c, - src/other/tcl/libtommath/bn_mp_prime_miller_rabin.c, - src/other/tcl/libtommath/bn_mp_prime_next_prime.c, - src/other/tcl/libtommath/bn_mp_prime_rabin_miller_trials.c, - src/other/tcl/libtommath/bn_mp_prime_rand.c, - src/other/tcl/libtommath/bn_mp_prime_strong_lucas_selfridge.c, - src/other/tcl/libtommath/bn_mp_radix_size.c, - src/other/tcl/libtommath/bn_mp_radix_smap.c, - src/other/tcl/libtommath/bn_mp_rand.c, - src/other/tcl/libtommath/bn_mp_read_radix.c, - src/other/tcl/libtommath/bn_mp_reduce.c, - src/other/tcl/libtommath/bn_mp_reduce_2k.c, - src/other/tcl/libtommath/bn_mp_reduce_2k_l.c, - src/other/tcl/libtommath/bn_mp_reduce_2k_setup.c, - src/other/tcl/libtommath/bn_mp_reduce_2k_setup_l.c, - src/other/tcl/libtommath/bn_mp_reduce_is_2k.c, - src/other/tcl/libtommath/bn_mp_reduce_is_2k_l.c, - src/other/tcl/libtommath/bn_mp_reduce_setup.c, - src/other/tcl/libtommath/bn_mp_root_u32.c, - src/other/tcl/libtommath/bn_mp_rshd.c, - src/other/tcl/libtommath/bn_mp_sbin_size.c, - src/other/tcl/libtommath/bn_mp_set.c, - src/other/tcl/libtommath/bn_mp_set_double.c, - src/other/tcl/libtommath/bn_mp_set_i32.c, - src/other/tcl/libtommath/bn_mp_set_i64.c, - src/other/tcl/libtommath/bn_mp_set_l.c, - src/other/tcl/libtommath/bn_mp_set_ll.c, - src/other/tcl/libtommath/bn_mp_set_u32.c, - src/other/tcl/libtommath/bn_mp_set_u64.c, - src/other/tcl/libtommath/bn_mp_set_ul.c, - src/other/tcl/libtommath/bn_mp_set_ull.c, - src/other/tcl/libtommath/bn_mp_shrink.c, - src/other/tcl/libtommath/bn_mp_signed_rsh.c, - src/other/tcl/libtommath/bn_mp_sqr.c, - src/other/tcl/libtommath/bn_mp_sqrmod.c, - src/other/tcl/libtommath/bn_mp_sqrt.c, - src/other/tcl/libtommath/bn_mp_sqrtmod_prime.c, - src/other/tcl/libtommath/bn_mp_sub.c, - src/other/tcl/libtommath/bn_mp_sub_d.c, - src/other/tcl/libtommath/bn_mp_submod.c, - src/other/tcl/libtommath/bn_mp_to_radix.c, - src/other/tcl/libtommath/bn_mp_to_sbin.c, - src/other/tcl/libtommath/bn_mp_to_ubin.c, - src/other/tcl/libtommath/bn_mp_ubin_size.c, - src/other/tcl/libtommath/bn_mp_unpack.c, - src/other/tcl/libtommath/bn_mp_xor.c, - src/other/tcl/libtommath/bn_mp_zero.c, - src/other/tcl/libtommath/bn_prime_tab.c, - src/other/tcl/libtommath/bn_s_mp_add.c, - src/other/tcl/libtommath/bn_s_mp_balance_mul.c, - src/other/tcl/libtommath/bn_s_mp_exptmod.c, - src/other/tcl/libtommath/bn_s_mp_exptmod_fast.c, - src/other/tcl/libtommath/bn_s_mp_get_bit.c, - src/other/tcl/libtommath/bn_s_mp_invmod_fast.c, - src/other/tcl/libtommath/bn_s_mp_invmod_slow.c, - src/other/tcl/libtommath/bn_s_mp_karatsuba_mul.c, - src/other/tcl/libtommath/bn_s_mp_karatsuba_sqr.c, - src/other/tcl/libtommath/bn_s_mp_montgomery_reduce_fast.c, - src/other/tcl/libtommath/bn_s_mp_mul_digs.c, - src/other/tcl/libtommath/bn_s_mp_mul_digs_fast.c, - src/other/tcl/libtommath/bn_s_mp_mul_high_digs.c, - src/other/tcl/libtommath/bn_s_mp_mul_high_digs_fast.c, - src/other/tcl/libtommath/bn_s_mp_prime_is_divisible.c, - src/other/tcl/libtommath/bn_s_mp_rand_jenkins.c, - src/other/tcl/libtommath/bn_s_mp_rand_platform.c, - src/other/tcl/libtommath/bn_s_mp_reverse.c, - src/other/tcl/libtommath/bn_s_mp_sqr.c, - src/other/tcl/libtommath/bn_s_mp_sqr_fast.c, - src/other/tcl/libtommath/bn_s_mp_sub.c, - src/other/tcl/libtommath/bn_s_mp_toom_mul.c, - src/other/tcl/libtommath/bn_s_mp_toom_sqr.c, - src/other/tcl/libtommath/tommath.h, - src/other/tcl/libtommath/tommath_class.h, - src/other/tcl/libtommath/tommath_cutoffs.h, - src/other/tcl/libtommath/tommath_private.h, - src/other/tcl/libtommath/tommath_superclass.h, - src/other/tcl/license.terms, src/other/tcl/macosx/GNUmakefile, - src/other/tcl/macosx/README, - src/other/tcl/macosx/Tcl-Common.xcconfig, - src/other/tcl/macosx/Tcl-Debug.xcconfig, - src/other/tcl/macosx/Tcl-Release.xcconfig, - src/other/tcl/macosx/Tcl.pbproj, src/other/tcl/macosx/Tcl.xcode, - src/other/tcl/macosx/Tcl.xcodeproj, - src/other/tcl/macosx/configure, - src/other/tcl/macosx/configure.ac, - src/other/tcl/macosx/license.terms, - src/other/tcl/macosx/tclMacOSXBundle.c, - src/other/tcl/macosx/tclMacOSXFCmd.c, - src/other/tcl/macosx/tclMacOSXNotify.c, src/other/tcl/tests, - src/other/tcl/tools, src/other/tcl/unix/Makefile.in, - src/other/tcl/unix/README, src/other/tcl/unix/aclocal.m4, - src/other/tcl/unix/configure, src/other/tcl/unix/configure.in, - src/other/tcl/unix/dltest/Makefile.in, - src/other/tcl/unix/dltest/pkga.c, - src/other/tcl/unix/dltest/pkgb.c, - src/other/tcl/unix/dltest/pkgc.c, - src/other/tcl/unix/dltest/pkgd.c, - src/other/tcl/unix/dltest/pkge.c, - src/other/tcl/unix/dltest/pkgooa.c, - src/other/tcl/unix/dltest/pkgua.c, src/other/tcl/unix/install-sh, - src/other/tcl/unix/installManPage, src/other/tcl/unix/ldAix, - src/other/tcl/unix/tcl.m4, src/other/tcl/unix/tcl.pc.in, - src/other/tcl/unix/tcl.spec, src/other/tcl/unix/tclAppInit.c, - src/other/tcl/unix/tclConfig.h.in, - src/other/tcl/unix/tclConfig.sh.in, - src/other/tcl/unix/tclLoadAix.c, src/other/tcl/unix/tclLoadDl.c, - src/other/tcl/unix/tclLoadDyld.c, - src/other/tcl/unix/tclLoadNext.c, - src/other/tcl/unix/tclLoadOSF.c, src/other/tcl/unix/tclLoadShl.c, - src/other/tcl/unix/tclUnixChan.c, - src/other/tcl/unix/tclUnixCompat.c, - src/other/tcl/unix/tclUnixEvent.c, - src/other/tcl/unix/tclUnixFCmd.c, - src/other/tcl/unix/tclUnixFile.c, - src/other/tcl/unix/tclUnixInit.c, - src/other/tcl/unix/tclUnixNotfy.c, - src/other/tcl/unix/tclUnixPipe.c, - src/other/tcl/unix/tclUnixPort.h, - src/other/tcl/unix/tclUnixSock.c, - src/other/tcl/unix/tclUnixTest.c, - src/other/tcl/unix/tclUnixThrd.c, - src/other/tcl/unix/tclUnixThrd.h, - src/other/tcl/unix/tclUnixTime.c, - src/other/tcl/unix/tclXtNotify.c, src/other/tcl/unix/tclXtTest.c, - src/other/tcl/win/CMakeLists.txt, src/other/tcl/win/Makefile.in, - src/other/tcl/win/README, src/other/tcl/win/aclocal.m4, - src/other/tcl/win/buildall.vc.bat, src/other/tcl/win/cat.c, - src/other/tcl/win/configure, src/other/tcl/win/configure.in, - src/other/tcl/win/license.terms, src/other/tcl/win/makefile.bc, - src/other/tcl/win/makefile.vc, src/other/tcl/win/nmakehlp.c, - src/other/tcl/win/rules.vc, src/other/tcl/win/stub16.c, - src/other/tcl/win/tcl.dsp, src/other/tcl/win/tcl.dsw, - src/other/tcl/win/tcl.hpj.in, src/other/tcl/win/tcl.m4, - src/other/tcl/win/tclAppInit.c, - src/other/tcl/win/tclConfig.sh.in, - src/other/tcl/win/tclMainUNICODE.c, - src/other/tcl/win/tclWin32Dll.c, src/other/tcl/win/tclWinChan.c, - src/other/tcl/win/tclWinConsole.c, src/other/tcl/win/tclWinDde.c, - src/other/tcl/win/tclWinError.c, src/other/tcl/win/tclWinFCmd.c, - src/other/tcl/win/tclWinFile.c, src/other/tcl/win/tclWinInit.c, - src/other/tcl/win/tclWinInt.h, src/other/tcl/win/tclWinLoad.c, - src/other/tcl/win/tclWinNotify.c, src/other/tcl/win/tclWinPipe.c, - src/other/tcl/win/tclWinPort.h, src/other/tcl/win/tclWinReg.c, - src/other/tcl/win/tclWinSerial.c, src/other/tcl/win/tclWinSock.c, - src/other/tcl/win/tclWinTest.c, src/other/tcl/win/tclWinThrd.c, - src/other/tcl/win/tclWinThrd.h, src/other/tcl/win/tclWinTime.c, - src/other/tcl/win/tclsh.ico, src/other/tcl/win/tclsh.rc, - src/other/tk.dist, src/other/tk/CMake/Path_Setup.cmake, - src/other/tk/CMake/RPath_Setup.cmake, - src/other/tk/CMake/TCL_PKGINDEX.cmake, - src/other/tk/CMake/tcl.cmake, src/other/tk/CMakeLists.txt, - src/other/tk/ChangeLog, src/other/tk/ChangeLog.2002, - src/other/tk/ChangeLog.2004, src/other/tk/README, - src/other/tk/README.md, src/other/tk/changes, - src/other/tk/compat/license.terms, src/other/tk/compat/limits.h, - src/other/tk/compat/stdlib.h, src/other/tk/compat/unistd.h, - src/other/tk/doc, src/other/tk/generic/default.h, - src/other/tk/generic/ks_names.h, src/other/tk/generic/tk.decls, - src/other/tk/generic/tk.h, src/other/tk/generic/tk3d.c, - src/other/tk/generic/tk3d.h, src/other/tk/generic/tkArgv.c, - src/other/tk/generic/tkArray.h, src/other/tk/generic/tkAtom.c, - src/other/tk/generic/tkBind.c, src/other/tk/generic/tkBitmap.c, - src/other/tk/generic/tkBusy.c, src/other/tk/generic/tkBusy.h, - src/other/tk/generic/tkButton.c, src/other/tk/generic/tkButton.h, - src/other/tk/generic/tkCanvArc.c, - src/other/tk/generic/tkCanvBmap.c, - src/other/tk/generic/tkCanvImg.c, - src/other/tk/generic/tkCanvLine.c, - src/other/tk/generic/tkCanvPoly.c, - src/other/tk/generic/tkCanvPs.c, - src/other/tk/generic/tkCanvText.c, - src/other/tk/generic/tkCanvUtil.c, - src/other/tk/generic/tkCanvWind.c, - src/other/tk/generic/tkCanvas.c, src/other/tk/generic/tkCanvas.h, - src/other/tk/generic/tkClipboard.c, - src/other/tk/generic/tkCmds.c, src/other/tk/generic/tkColor.c, - src/other/tk/generic/tkColor.h, src/other/tk/generic/tkConfig.c, - src/other/tk/generic/tkConsole.c, - src/other/tk/generic/tkCursor.c, src/other/tk/generic/tkDList.h, - src/other/tk/generic/tkDecls.h, src/other/tk/generic/tkEntry.c, - src/other/tk/generic/tkEntry.h, src/other/tk/generic/tkError.c, - src/other/tk/generic/tkEvent.c, - src/other/tk/generic/tkFileFilter.c, - src/other/tk/generic/tkFileFilter.h, - src/other/tk/generic/tkFocus.c, src/other/tk/generic/tkFont.c, - src/other/tk/generic/tkFont.h, src/other/tk/generic/tkFrame.c, - src/other/tk/generic/tkGC.c, src/other/tk/generic/tkGeometry.c, - src/other/tk/generic/tkGet.c, src/other/tk/generic/tkGrab.c, - src/other/tk/generic/tkGrid.c, src/other/tk/generic/tkImage.c, - src/other/tk/generic/tkImgBmap.c, - src/other/tk/generic/tkImgGIF.c, src/other/tk/generic/tkImgPNG.c, - src/other/tk/generic/tkImgPPM.c, - src/other/tk/generic/tkImgPhInstance.c, - src/other/tk/generic/tkImgPhoto.c, - src/other/tk/generic/tkImgPhoto.h, - src/other/tk/generic/tkImgUtil.c, - src/other/tk/generic/tkInt.decls, src/other/tk/generic/tkInt.h, - src/other/tk/generic/tkIntDecls.h, - src/other/tk/generic/tkIntPlatDecls.h, - src/other/tk/generic/tkIntXlibDecls.h, - src/other/tk/generic/tkListbox.c, - src/other/tk/generic/tkMacWinMenu.c, - src/other/tk/generic/tkMain.c, src/other/tk/generic/tkMenu.c, - src/other/tk/generic/tkMenu.h, src/other/tk/generic/tkMenuDraw.c, - src/other/tk/generic/tkMenubutton.c, - src/other/tk/generic/tkMenubutton.h, - src/other/tk/generic/tkMessage.c, src/other/tk/generic/tkObj.c, - src/other/tk/generic/tkOldConfig.c, - src/other/tk/generic/tkOldTest.c, - src/other/tk/generic/tkOption.c, src/other/tk/generic/tkPack.c, - src/other/tk/generic/tkPanedWindow.c, - src/other/tk/generic/tkPlace.c, - src/other/tk/generic/tkPlatDecls.h, - src/other/tk/generic/tkPointer.c, src/other/tk/generic/tkPort.h, - src/other/tk/generic/tkRectOval.c, - src/other/tk/generic/tkScale.c, src/other/tk/generic/tkScale.h, - src/other/tk/generic/tkScrollbar.c, - src/other/tk/generic/tkScrollbar.h, - src/other/tk/generic/tkSelect.c, src/other/tk/generic/tkSelect.h, - src/other/tk/generic/tkSquare.c, - src/other/tk/generic/tkStubInit.c, - src/other/tk/generic/tkStubLib.c, src/other/tk/generic/tkStyle.c, - src/other/tk/generic/tkTest.c, src/other/tk/generic/tkText.c, - src/other/tk/generic/tkText.h, - src/other/tk/generic/tkTextBTree.c, - src/other/tk/generic/tkTextDisp.c, - src/other/tk/generic/tkTextImage.c, - src/other/tk/generic/tkTextIndex.c, - src/other/tk/generic/tkTextMark.c, - src/other/tk/generic/tkTextTag.c, - src/other/tk/generic/tkTextWind.c, src/other/tk/generic/tkTrig.c, - src/other/tk/generic/tkUndo.c, src/other/tk/generic/tkUndo.h, - src/other/tk/generic/tkUtil.c, src/other/tk/generic/tkVisual.c, - src/other/tk/generic/tkWindow.c, - src/other/tk/generic/ttk/ttk.decls, - src/other/tk/generic/ttk/ttkBlink.c, - src/other/tk/generic/ttk/ttkButton.c, - src/other/tk/generic/ttk/ttkCache.c, - src/other/tk/generic/ttk/ttkClamTheme.c, - src/other/tk/generic/ttk/ttkClassicTheme.c, - src/other/tk/generic/ttk/ttkDecls.h, - src/other/tk/generic/ttk/ttkDefaultTheme.c, - src/other/tk/generic/ttk/ttkElements.c, - src/other/tk/generic/ttk/ttkEntry.c, - src/other/tk/generic/ttk/ttkFrame.c, - src/other/tk/generic/ttk/ttkGenStubs.tcl, - src/other/tk/generic/ttk/ttkImage.c, - src/other/tk/generic/ttk/ttkInit.c, - src/other/tk/generic/ttk/ttkLabel.c, - src/other/tk/generic/ttk/ttkLayout.c, - src/other/tk/generic/ttk/ttkManager.c, - src/other/tk/generic/ttk/ttkNotebook.c, - src/other/tk/generic/ttk/ttkPanedwindow.c, - src/other/tk/generic/ttk/ttkProgress.c, - src/other/tk/generic/ttk/ttkScale.c, - src/other/tk/generic/ttk/ttkScroll.c, - src/other/tk/generic/ttk/ttkState.c, - src/other/tk/generic/ttk/ttkTagSet.c, - src/other/tk/generic/ttk/ttkTheme.c, - src/other/tk/generic/ttk/ttkTheme.h, - src/other/tk/generic/ttk/ttkTrace.c, - src/other/tk/generic/ttk/ttkTrack.c, - src/other/tk/generic/ttk/ttkTreeview.c, - src/other/tk/generic/ttk/ttkWidget.c, - src/other/tk/generic/ttk/ttkWidget.h, - src/other/tk/library/CMakeLists.txt, - src/other/tk/library/bgerror.tcl, - src/other/tk/library/button.tcl, - src/other/tk/library/choosedir.tcl, - src/other/tk/library/clrpick.tcl, - src/other/tk/library/comdlg.tcl, - src/other/tk/library/console.tcl, - src/other/tk/library/demos/aniwave.tcl, - src/other/tk/library/demos/arrow.tcl, - src/other/tk/library/demos/bind.tcl, - src/other/tk/library/demos/combo.tcl, - src/other/tk/library/demos/cscroll.tcl, - src/other/tk/library/demos/ctext.tcl, - src/other/tk/library/demos/dialog1.tcl, - src/other/tk/library/demos/dialog2.tcl, - src/other/tk/library/demos/entry2.tcl, - src/other/tk/library/demos/entry3.tcl, - src/other/tk/library/demos/filebox.tcl, - src/other/tk/library/demos/floor.tcl, - src/other/tk/library/demos/fontchoose.tcl, - src/other/tk/library/demos/image2.tcl, - src/other/tk/library/demos/images/earthmenu.png, - src/other/tk/library/demos/images/ouster.png, - src/other/tk/library/demos/items.tcl, - src/other/tk/library/demos/ixset, - src/other/tk/library/demos/knightstour.tcl, - src/other/tk/library/demos/label.tcl, - src/other/tk/library/demos/license.terms, - src/other/tk/library/demos/mclist.tcl, - src/other/tk/library/demos/menu.tcl, - src/other/tk/library/demos/menubu.tcl, - src/other/tk/library/demos/msgbox.tcl, - src/other/tk/library/demos/paned1.tcl, - src/other/tk/library/demos/paned2.tcl, - src/other/tk/library/demos/pendulum.tcl, - src/other/tk/library/demos/puzzle.tcl, - src/other/tk/library/demos/ruler.tcl, - src/other/tk/library/demos/sayings.tcl, - src/other/tk/library/demos/search.tcl, - src/other/tk/library/demos/square, - src/other/tk/library/demos/states.tcl, - src/other/tk/library/demos/style.tcl, - src/other/tk/library/demos/text.tcl, - src/other/tk/library/demos/textpeer.tcl, - src/other/tk/library/demos/toolbar.tcl, - src/other/tk/library/demos/tree.tcl, - src/other/tk/library/demos/ttkbut.tcl, - src/other/tk/library/demos/ttkmenu.tcl, - src/other/tk/library/demos/ttknote.tcl, - src/other/tk/library/demos/ttkpane.tcl, - src/other/tk/library/demos/ttkprogress.tcl, - src/other/tk/library/demos/twind.tcl, - src/other/tk/library/demos/unicodeout.tcl, - src/other/tk/library/demos/widget, - src/other/tk/library/dialog.tcl, src/other/tk/library/entry.tcl, - src/other/tk/library/fontchooser.tcl, - src/other/tk/library/iconlist.tcl, - src/other/tk/library/icons.tcl, - src/other/tk/library/license.terms, - src/other/tk/library/listbox.tcl, - src/other/tk/library/megawidget.tcl, - src/other/tk/library/menu.tcl, src/other/tk/library/mkpsenc.tcl, - src/other/tk/library/msgbox.tcl, - src/other/tk/library/msgs/cs.msg, - src/other/tk/library/msgs/da.msg, - src/other/tk/library/msgs/de.msg, - src/other/tk/library/msgs/el.msg, - src/other/tk/library/msgs/en.msg, - src/other/tk/library/msgs/eo.msg, - src/other/tk/library/msgs/es.msg, - src/other/tk/library/msgs/fr.msg, - src/other/tk/library/msgs/hu.msg, - src/other/tk/library/msgs/it.msg, - src/other/tk/library/msgs/nl.msg, - src/other/tk/library/msgs/pl.msg, - src/other/tk/library/msgs/pt.msg, - src/other/tk/library/msgs/ru.msg, - src/other/tk/library/msgs/sv.msg, - src/other/tk/library/palette.tcl, - src/other/tk/library/panedwindow.tcl, - src/other/tk/library/safetk.tcl, src/other/tk/library/scale.tcl, - src/other/tk/library/scrlbar.tcl, - src/other/tk/library/spinbox.tcl, src/other/tk/library/tclIndex, - src/other/tk/library/tearoff.tcl, src/other/tk/library/text.tcl, - src/other/tk/library/tk.tcl, src/other/tk/library/tkfbox.tcl, - src/other/tk/library/ttk/altTheme.tcl, - src/other/tk/library/ttk/aquaTheme.tcl, - src/other/tk/library/ttk/clamTheme.tcl, - src/other/tk/library/ttk/classicTheme.tcl, - src/other/tk/library/ttk/combobox.tcl, - src/other/tk/library/ttk/defaults.tcl, - src/other/tk/library/ttk/entry.tcl, - src/other/tk/library/ttk/menubutton.tcl, - src/other/tk/library/ttk/notebook.tcl, - src/other/tk/library/ttk/scale.tcl, - src/other/tk/library/ttk/scrollbar.tcl, - src/other/tk/library/ttk/sizegrip.tcl, - src/other/tk/library/ttk/spinbox.tcl, - src/other/tk/library/ttk/treeview.tcl, - src/other/tk/library/ttk/utils.tcl, - src/other/tk/library/ttk/vistaTheme.tcl, - src/other/tk/library/ttk/winTheme.tcl, - src/other/tk/library/ttk/xpTheme.tcl, - src/other/tk/library/unsupported.tcl, - src/other/tk/library/xmfbox.tcl, src/other/tk/license.terms, - src/other/tk/macosx/GNUmakefile, src/other/tk/macosx/README, - src/other/tk/macosx/Tk-Info.plist.in, - src/other/tk/macosx/Wish-Common.xcconfig, - src/other/tk/macosx/Wish-Debug.xcconfig, - src/other/tk/macosx/Wish-Info.plist.in, - src/other/tk/macosx/Wish-Release.xcconfig, - src/other/tk/macosx/Wish.sdef, src/other/tk/macosx/Wish.xcode, - src/other/tk/macosx/Wish.xcodeproj, - src/other/tk/macosx/configure, src/other/tk/macosx/configure.ac, - src/other/tk/macosx/license.terms, - src/other/tk/macosx/tkMacOSXBitmap.c, - src/other/tk/macosx/tkMacOSXButton.c, - src/other/tk/macosx/tkMacOSXClipboard.c, - src/other/tk/macosx/tkMacOSXColor.c, - src/other/tk/macosx/tkMacOSXConfig.c, - src/other/tk/macosx/tkMacOSXConstants.h, - src/other/tk/macosx/tkMacOSXCursor.c, - src/other/tk/macosx/tkMacOSXDefault.h, - src/other/tk/macosx/tkMacOSXDialog.c, - src/other/tk/macosx/tkMacOSXDraw.c, - src/other/tk/macosx/tkMacOSXEmbed.c, - src/other/tk/macosx/tkMacOSXEntry.c, - src/other/tk/macosx/tkMacOSXEvent.c, - src/other/tk/macosx/tkMacOSXFont.c, - src/other/tk/macosx/tkMacOSXFont.h, - src/other/tk/macosx/tkMacOSXHLEvents.c, - src/other/tk/macosx/tkMacOSXImage.c, - src/other/tk/macosx/tkMacOSXInit.c, - src/other/tk/macosx/tkMacOSXInt.h, - src/other/tk/macosx/tkMacOSXKeyEvent.c, - src/other/tk/macosx/tkMacOSXKeyboard.c, - src/other/tk/macosx/tkMacOSXMenu.c, - src/other/tk/macosx/tkMacOSXMenubutton.c, - src/other/tk/macosx/tkMacOSXMenus.c, - src/other/tk/macosx/tkMacOSXMouseEvent.c, - src/other/tk/macosx/tkMacOSXNotify.c, - src/other/tk/macosx/tkMacOSXPort.h, - src/other/tk/macosx/tkMacOSXPrivate.h, - src/other/tk/macosx/tkMacOSXRegion.c, - src/other/tk/macosx/tkMacOSXScale.c, - src/other/tk/macosx/tkMacOSXScrlbr.c, - src/other/tk/macosx/tkMacOSXSend.c, - src/other/tk/macosx/tkMacOSXServices.c, - src/other/tk/macosx/tkMacOSXSubwindows.c, - src/other/tk/macosx/tkMacOSXTest.c, - src/other/tk/macosx/tkMacOSXWindowEvent.c, - src/other/tk/macosx/tkMacOSXWm.c, - src/other/tk/macosx/tkMacOSXWm.h, - src/other/tk/macosx/tkMacOSXXStubs.c, - src/other/tk/macosx/ttkMacOSXTheme.c, src/other/tk/tests, - src/other/tk/unix/Makefile.in, src/other/tk/unix/README, - src/other/tk/unix/aclocal.m4, src/other/tk/unix/configure, - src/other/tk/unix/configure.in, src/other/tk/unix/install-sh, - src/other/tk/unix/installManPage, - src/other/tk/unix/license.terms, src/other/tk/unix/tcl.m4, - src/other/tk/unix/tk.pc.in, src/other/tk/unix/tk.spec, - src/other/tk/unix/tkAppInit.c, src/other/tk/unix/tkConfig.h.in, - src/other/tk/unix/tkUnix.c, src/other/tk/unix/tkUnix3d.c, - src/other/tk/unix/tkUnixButton.c, - src/other/tk/unix/tkUnixColor.c, - src/other/tk/unix/tkUnixConfig.c, - src/other/tk/unix/tkUnixCursor.c, - src/other/tk/unix/tkUnixDefault.h, - src/other/tk/unix/tkUnixDialog.c, src/other/tk/unix/tkUnixDraw.c, - src/other/tk/unix/tkUnixEmbed.c, src/other/tk/unix/tkUnixEvent.c, - src/other/tk/unix/tkUnixFocus.c, src/other/tk/unix/tkUnixFont.c, - src/other/tk/unix/tkUnixInit.c, src/other/tk/unix/tkUnixKey.c, - src/other/tk/unix/tkUnixMenu.c, src/other/tk/unix/tkUnixMenubu.c, - src/other/tk/unix/tkUnixPort.h, src/other/tk/unix/tkUnixRFont.c, - src/other/tk/unix/tkUnixScale.c, - src/other/tk/unix/tkUnixScrlbr.c, - src/other/tk/unix/tkUnixSelect.c, src/other/tk/unix/tkUnixSend.c, - src/other/tk/unix/tkUnixWm.c, src/other/tk/unix/tkUnixXId.c, - src/other/tk/win/Makefile.in, src/other/tk/win/README, - src/other/tk/win/aclocal.m4, src/other/tk/win/buildall.vc.bat, - src/other/tk/win/configure, src/other/tk/win/configure.in, - src/other/tk/win/license.terms, src/other/tk/win/makefile.bc, - src/other/tk/win/makefile.vc, src/other/tk/win/mkd.bat, - src/other/tk/win/nmakehlp.c, src/other/tk/win/rc/lamp.bmp, - src/other/tk/win/rc/tk.ico, src/other/tk/win/rc/wish.ico, - src/other/tk/win/rmd.bat, src/other/tk/win/rules.vc, - src/other/tk/win/stubs.c, src/other/tk/win/tcl.m4, - src/other/tk/win/tkMainASCII.c, src/other/tk/win/tkWin.h, - src/other/tk/win/tkWin3d.c, src/other/tk/win/tkWinButton.c, - src/other/tk/win/tkWinClipboard.c, src/other/tk/win/tkWinColor.c, - src/other/tk/win/tkWinConfig.c, src/other/tk/win/tkWinCursor.c, - src/other/tk/win/tkWinDefault.h, src/other/tk/win/tkWinDialog.c, - src/other/tk/win/tkWinDraw.c, src/other/tk/win/tkWinEmbed.c, - src/other/tk/win/tkWinFont.c, src/other/tk/win/tkWinImage.c, - src/other/tk/win/tkWinInit.c, src/other/tk/win/tkWinInt.h, - src/other/tk/win/tkWinKey.c, src/other/tk/win/tkWinMenu.c, - src/other/tk/win/tkWinPixmap.c, src/other/tk/win/tkWinPointer.c, - src/other/tk/win/tkWinPort.h, src/other/tk/win/tkWinRegion.c, - src/other/tk/win/tkWinScrlbr.c, src/other/tk/win/tkWinSend.c, - src/other/tk/win/tkWinSendCom.c, src/other/tk/win/tkWinSendCom.h, - src/other/tk/win/tkWinTest.c, src/other/tk/win/tkWinWindow.c, - src/other/tk/win/tkWinWm.c, src/other/tk/win/tkWinX.c, - src/other/tk/win/ttkWinMonitor.c, src/other/tk/win/ttkWinTheme.c, - src/other/tk/win/ttkWinXPTheme.c, src/other/tk/win/winMain.c, - src/other/tk/xlib/X11/DECkeysym.h, - src/other/tk/xlib/X11/HPkeysym.h, - src/other/tk/xlib/X11/Sunkeysym.h, src/other/tk/xlib/X11/X.h, - src/other/tk/xlib/X11/XF86keysym.h, src/other/tk/xlib/X11/Xlib.h, - src/other/tk/xlib/X11/ap_keysym.h, - src/other/tk/xlib/X11/keysymdef.h, - src/other/tk/xlib/X11/license.terms, - src/other/tk/xlib/license.terms, src/other/tk/xlib/rgb.txt, - src/other/tk/xlib/xcolors.c, src/other/tk/xlib/xgc.c, - src/other/tk/xlib/ximage.c, src/other/tk/xlib/xutil.c, - src/other/tkhtml.dist, src/other/tkhtml/CMake, - src/other/tkhtml/CMakeLists.txt, - src/other/tkhtml/TCL_PKGINDEX.cmake, src/other/tkpng, - src/other/tkpng.dist, src/other/tktable.dist, - src/other/tktable/CMake, src/other/tktable/CMakeLists.txt, - src/other/tktable/win, src/tclscripts/archer, - src/tclscripts/archer/Archer.tcl, - src/tclscripts/archer/AttrGroupsDisplayUtility.tcl, - src/tclscripts/archer/BotUtility.tcl, - src/tclscripts/archer/GeometryEditFrame.tcl, - src/tclscripts/archer/LODUtility.tcl, - src/tclscripts/archer/LoadArcherLibs.tcl, - src/tclscripts/hv3_man_browser_test.tcl, - src/tclscripts/sdialogs/sdialogs.tcl, - src/tclscripts/swidgets/swidgets.tcl: - Merge tcltk86 branch back into trunk, using Tcl/Tk 8.6.10. - Itcl/Itk 3.4 enabled by default for Archer. Untested on Mac OSX - (especially with Aqua) - there's almost certainly build work - needed on that platform. Doing this now to modernize our Tcl/Tk - foundation - even if we have to keep Itcl/Itk 3 for a while 8.6 - is the mainstream version. - -2020-03-31 19:39 starseeker - - * [r75207] misc/tools/dom2dox/CMakeLists.txt, - misc/win32-msvc/Dll/CMakeLists.txt, src/adrt/CMakeLists.txt, - src/archer/CMakeLists.txt, src/brlman/CMakeLists.txt, - src/bwish/CMakeLists.txt, src/fb/tests/CMakeLists.txt, - src/libdm/CMakeLists.txt, src/libfb/CMakeLists.txt, - src/liboptical/CMakeLists.txt, src/libtclcad/CMakeLists.txt, - src/remrt/CMakeLists.txt: - Look at the variables provided by FindTCL.cmake in CMake itself - and shift to them - the complexity of the FindBRLCADTCL.cmake - approach has proven to be largely not worthwhile, and the new - find_package -D_ROOT searching behavior in post 3.12 should - provide a simple way to point at a specific Tcl/Tk installation - for those that want/need the flexibility. - -2020-03-31 18:44 starseeker - - * [r75206] misc/CMake/CMakeLists.txt, - misc/CMake/FindBRLCADZLIB.cmake, misc/CMake/ThirdParty.cmake, - src/other/CMakeLists.txt: - Adjust non-enable-all logic - -2020-03-31 18:22 starseeker - - * [r75205] misc/tools/xmltools/libxml/config.h.in, - misc/tools/xmltools/libxml/src/HTMLparser.c, - misc/tools/xmltools/libxml/src/parser.c, - misc/tools/xmltools/libxml/src/parserInternals.c, - misc/tools/xmltools/libxml/src/tree.c, - misc/tools/xmltools/libxml/src/xlink.c, - misc/tools/xmltools/libxml/src/xmlIO.c, - misc/win32-msvc/Dll/CMakeLists.txt, src/adrt/master/master.c, - src/adrt/master/tienet_master.c, src/adrt/slave/tienet_slave.c, - src/fb/CMakeLists.txt, src/fb/fb-png.c, src/fb/png-fb.c, - src/libdm/CMakeLists.txt, src/libdm/dm_obj.c, - src/libfb/CMakeLists.txt, src/libfb/fb_generic.c, - src/libged/CMakeLists.txt, src/libged/png.c, - src/libicv/CMakeLists.txt, src/libicv/fileformat.c, - src/libicv/png.c, src/libtclcad/CMakeLists.txt, - src/libtclcad/tclcad_obj.c, src/other/CMakeLists.txt, - src/other/freetype/src/gzip/ftgzip.c, - src/other/freetype/src/sfnt/pngshim.c, - src/other/gdal/CMakeLists.txt, - src/other/gdal/port/cpl_config.h.in, - src/other/openscenegraph/CMakeLists.txt, - src/other/tk/CMakeLists.txt, src/util/CMakeLists.txt, - src/util/bw-png.c, src/util/pix-png.c, src/util/png-bw.c, - src/util/png-pix.c: - More zlib/png cleanup - -2020-03-31 18:19 starseeker - - * [r75204] misc/CMake/BRLCAD_Summary.cmake: - Remove termlib summary reference - -2020-03-31 17:47 starseeker - - * [r75203] src/external/Creo/CMakeLists.txt, - src/external/Cubit/CMakeLists.txt, - src/external/Unigraphics/CMakeLists.txt, - src/other/CMakeLists.txt, - src/other/openscenegraph/CMakeLists.txt, - src/other/openscenegraph/src/osgDB/CMakeLists.txt, - src/other/openscenegraph/src/osgDB/Compressors.cpp, - src/other/openscenegraph/src/osgPlugins/png/CMakeLists.txt, - src/other/openscenegraph/src/osgPlugins/png/ReaderWriterPNG.cpp: - More cleanup of low level includes - -2020-03-31 17:41 starseeker - - * [r75202] src/other/openNURBS/CMakeLists.txt: - plural forms - -2020-03-31 17:40 starseeker - - * [r75201] src/other/gdal/CMakeLists.txt, - src/other/gdal/frmts/rik/rikdataset.cpp, - src/other/gdal/port/cpl_minizip_unzip.h, - src/other/gdal/port/cpl_vsil_gzip.cpp: - Plural build forms, prefer local zlib.h - -2020-03-31 17:35 starseeker - - * [r75200] src/other/libpng/CMakeLists.txt: - Use plural form - -2020-03-31 17:33 starseeker - - * [r75199] src/other/libpng/scripts/pnglibconf.dfa: - Include local zlib.h in preference to system zlib.h if available - -2020-03-31 17:31 starseeker - - * [r75198] src/other/poly2tri/CMakeLists.txt: - Actually, looks like zlib isn't used by poly2tri - -2020-03-31 17:30 starseeker - - * [r75197] src/other/poly2tri/CMakeLists.txt: - include zlib dir, use plural forms - -2020-03-31 17:29 starseeker - - * [r75196] src/other/tkpng/CMakeLists.txt, - src/other/tkpng/generic/tkImgPNG.c: - Use local zlib.h if available - -2020-03-31 17:26 starseeker - - * [r75195] misc/CMake/FindREGEX.cmake, src/libbu/CMakeLists.txt, - src/librt/CMakeLists.txt: - Use plural form for regex lib and include - -2020-03-31 17:25 starseeker - - * [r75194] src/libwdb/CMakeLists.txt: - Clean up on libwdb CMakeLists.txt - -2020-03-31 17:23 starseeker - - * [r75193] src/libged/CMakeLists.txt, src/libged/red.c: - We want the local regex.h if we're using it, not the system - version - fix include - -2020-03-31 16:59 starseeker - - * [r75192] misc/CMake/ThirdParty.cmake: - Set plural versions of _LIBRARY and _DIRECTORY variables - those - are conventionally the ones provided by the Find packages. - -2020-03-31 15:17 starseeker - - * [r75190] misc/CMake/FindPROJ4.cmake, src/other/CMakeLists.txt, - src/other/gdal, src/other/gdal/CMake, - src/other/gdal/CMakeLists.txt: - GDAL build changes - -2020-03-31 14:50 starseeker - - * [r75189] src/other/proj-4, src/other/proj-4/CMakeLists.txt, - src/other/proj-4/src/CMakeLists.txt: - proj-4 build tweaks - -2020-03-31 14:47 starseeker - - * [r75188] src/other/rply, src/other/rply/CMakeLists.txt: - rply build file tweaks - -2020-03-31 14:45 starseeker - - * [r75187] src/other/CMakeLists.txt, src/other/poly2tri, - src/other/poly2tri/CMakeLists.txt: - poly2tri build file tweaks - -2020-03-31 14:41 starseeker - - * [r75186] src/other/CMakeLists.txt, src/other/libgdiam, - src/other/libgdiam/CMakeLists.txt: - gdiam build changes - -2020-03-31 14:35 starseeker - - * [r75185] src/other/CMakeLists.txt, src/other/libvds, - src/other/libvds/CMakeLists.txt: - vds CMake updates - -2020-03-31 14:27 starseeker - - * [r75184] misc/CMake/FindLEMON.cmake, src/other/stepcode, - src/other/stepcode/CMakeLists.txt, - src/other/stepcode/cmake/FindLEMON.cmake: - Tweak lemon output - -2020-03-31 14:23 starseeker - - * [r75183] src/libbg/CMakeLists.txt, src/other/CMakeLists.txt, - src/other/libspsr, src/other/libspsr/CMakeLists.txt: - Misc. changes from thirdparty branch - -2020-03-31 14:17 starseeker - - * [r75182] src/other/openNURBS/opennurbs_zlib.h: - If there is a local zlib.h we want it in preference to the system - version. - -2020-03-31 14:16 starseeker - - * [r75181] src/other/libutahrle, - src/other/libutahrle/CMakeLists.txt, - src/other/libutahrle/include/rle_config.h: - Check for sys/wait.h - -2020-03-31 14:13 starseeker - - * [r75180] src/other/libnetpbm, src/other/libnetpbm/CMakeLists.txt: - ws, case - -2020-03-31 14:08 starseeker - - * [r75179] src/other/CMakeLists.txt: - Use the prefix mechanism instead of config.h and common.h - -2020-03-31 13:59 starseeker - - * [r75178] src/other/CMakeLists.txt: - regex.h is now generated - -2020-03-31 13:54 starseeker - - * [r75177] src/other/libregex.dist, src/other/libz.dist: - fix dist files - -2020-03-31 13:52 starseeker - - * [r75176] src/other/libregex, src/other/libregex/CMakeLists.txt, - src/other/libregex/regex.h, src/other/libregex/regex.h.in: - Pull in the zlib-style prefix changes for libregex from - thirdparty_rework - -2020-03-31 13:48 starseeker - - * [r75175] src/other/libz, src/other/libz/CMakeLists.txt, - src/other/libz/zconf.h, src/other/libz/zconf.h.in: - Pull the zlib change in from the thirdparty_rework branch - -2020-03-26 20:40 starseeker - - * [r75141] ., CHANGES, ChangeLog, NEWS, doc, doc/STRATEGY, include, - include/conf/PATCH, misc/debian/changelog, - misc/macosx/Resources/ReadMe.rtfd/TXT.rtf, - misc/macosx/Resources/Welcome.rtfd/TXT.rtf, - src/libged/polyclip.cpp: - Merge back news and changelog from release. - -2020-03-26 00:34 starseeker - - * [r75115] CMakeLists.txt, INSTALL, configure, doc/ecosystem.dot, - doc/legal/embedded/CMakeLists.txt, - doc/legal/embedded/libtermlib.txt, - doc/legal/other/CMakeLists.txt, doc/legal/other/libtermlib.txt, - misc/CMake/CMakeLists.txt, misc/CMake/FindTERMLIB.cmake, - src/fb/CMakeLists.txt, src/libtermio/CMakeLists.txt, - src/libtermio/termcap, src/libtermio/termcap.c, - src/libtermio/termcap.h, src/libtermio/tgoto.c, - src/libtermio/tputs.c, src/other/CMakeLists.txt, - src/other/README, src/other/libtermlib, - src/other/libtermlib.dist: - Use of termlib is down to just a few users of libtermio. Fold the - basic termlib pieces into libtermio. Removes the (considerable) - complexity inherent in trying to correctly detect all the various - system options. Eventually we'll replace the last remaining - pieces of functionality using this API (which still doesn't work - on Windows) - in the meantime this maintains the functionality we - need. - -2020-03-25 23:37 starseeker - - * [r75114] HACKING, doc/docbook/articles/main_menu.xml, - doc/docbook/system/man3/CMakeLists.txt, - doc/docbook/system/man3/libcursor.xml, doc/trunk_hierarchy.org, - include/CMakeLists.txt, include/cursor.h, - misc/clang-static-analyzer-run.sh, misc/doxygen/CMakeLists.txt, - misc/doxygen/libcursor.dox, src/CMakeLists.txt, src/README, - src/libcursor: - libcursor is no longer used - -2020-03-25 00:48 starseeker - - * [r75096] misc/repoconv/cvs_authormap: - fix syntax - -2020-03-25 00:47 starseeker - - * [r75095] misc/repoconv/account-map, misc/repoconv/cvs_authormap: - new committer - -2020-03-25 00:42 starseeker - - * [r75094] src/art/CMakeLists.txt, src/art/art.cpp, src/art/art.h, - src/art/brlcadplugin.cpp, src/art/brlcadplugin.h: - Suppress art header warnings in new files, hardcode the filename - and a few other shortest path changes. Able to successfully - generate an image of all.g from moss.g example. - -2020-03-24 14:14 jebbly - - * [r75086] src/art/brlcadplugin.cpp: - Remove unnecessary type-casting from art/brlcadplugin.cpp - -2020-03-24 13:56 jebbly - - * [r75085] src/art/art.cpp, src/art/brlcadplugin.cpp, - src/art/brlcadplugin.h: - Update Appleseed experimental work from GCI 2019 - -2020-03-24 12:21 d_rossberg - - * [r75084] include/bio.h: - ups, for 32 bit Windows b_off_t has to be defined too +2021-02-06 16:22 starseeker -2020-03-23 23:21 starseeker + * [r78203] include/conf/PATCH, misc/debian/changelog: + Update version numbers - * [r75083] src/libanalyze/nirt/diff.cpp: - first creation of segments +2021-02-06 16:18 starseeker -2020-03-23 23:03 starseeker + * [r78202] NEWS: + g-iges change is in principle user visible - fixed crash running + regression test on OSX. - * [r75082] src/libanalyze/nirt/diff.cpp: - checkpoint - -2020-03-23 18:31 starseeker - - * [r75081] src/libanalyze/nirt/diff.cpp: - Not crazy about the list arrangement, but unless it breaks - something leave it for now. - -2020-03-23 18:25 starseeker +2021-02-06 16:15 starseeker - * [r75080] src/libanalyze/nirt/diff.cpp, - src/libanalyze/nirt/nirt.h: - Set up formatting so we can temporary suppress output when - running. + * [r78201] doc/docbook/system/mann/gdiff.xml: + gdiff -S also checks boolean operations -2020-03-23 17:57 starseeker +2021-02-06 16:13 starseeker - * [r75079] src/libanalyze/nirt/nirt.cpp, - src/libanalyze/nirt/nirt.h: - Pack the format vectors into a parent container + * [r78200] NEWS, doc/docbook/system/mann/gdiff.xml: + Document the -S option added to libged's gdiff command. -2020-03-23 16:47 d_rossberg +2021-02-06 16:05 starseeker - * [r75078] src/conv/intaval/tgf-g.cpp, src/conv/k-g.cpp, - src/conv/raw/raw-g.cpp, src/libanalyze/nirt/nirt.h, - src/libgcv/plugins/fastgen4/fastgen4_write.cpp, - src/libgcv/plugins/vrml/vrml_read/file_util.cpp, - src/nirt/main.cpp: - fix compilation errors in Visual Studio 2019 introduced by - revisions 75063/75064: - make sure that b_off_t is known before first usage + * [r78199] NEWS: + Note addition of -? option to which in r78052 -2020-03-23 16:44 d_rossberg +2021-02-06 15:57 starseeker - * [r75077] include/bio.h: - fix compilation errors in Visual Studio 2019 introduced by - revisions 75063/75064: - make sure that sys/stat.h is included _before_ fstat and stat are - redefined + * [r78198] NEWS: + Whoops, redundant item -2020-03-23 16:28 starseeker +2021-02-06 15:50 starseeker - * [r75076] src/libanalyze/nirt/diff.cpp: - simplify names + * [r78197] NEWS: + Note fixes to libtclcad command I/O that were causing problems + (particularly on OSX, but almost certainly elsewhere as well.) -2020-03-23 14:54 starseeker +2021-02-06 15:41 starseeker - * [r75075] src/libanalyze/nirt/diff.cpp: - separate run from load + * [r78196] NEWS: + Note work on librt timer code + + This is borderline - certain timing outputs may change now + that we are making more of an effort to use the CPU timers + when the API says we are, but it's not clear that there will + be significant user visible implications. + + If timing answer change that will be potentially significant, + so going ahead and noting in NEWS to provide some visibility. -2020-03-23 14:43 starseeker +2021-02-06 15:33 starseeker - * [r75074] misc/nirt/diff.nrt, src/libanalyze/nirt/diff.cpp: - don't think we'll need to call out a miss either + * [r78195] NEWS: + User visible - Sean fixed example in the saveview man page. -2020-03-23 14:40 starseeker +2021-02-06 15:28 starseeker - * [r75073] misc/nirt/diff.nrt, src/libanalyze/nirt/diff.cpp: - Gap difference are encoded in other information - we don't need - to process them as a separate type in diff analysis. + * [r78194] NEWS: + Note Sumagna Das's patch #556 adding in-database support for vol + primitive data. -2020-03-23 14:24 starseeker +2021-02-06 15:21 starseeker - * [r75072] src/libanalyze/nirt/diff.cpp: - gap segments don't diff when using transitions - nothing to diff + * [r78193] NEWS: + Note change of MGED Overlap GUI to using gchecker tool behind the + scenes for more reliable execution on Windows. -2020-03-23 14:07 starseeker +2021-02-06 15:03 starseeker - * [r75071] src/libanalyze/nirt/diff.cpp: - checkpoint + * [r78192] BUGS: + semaphore protection appears to fix the gqa invalid plot3 issue -2020-03-23 13:21 starseeker - - * [r75070] src/libanalyze/nirt/diff.cpp: - notes +2021-02-06 14:45 starseeker -2020-03-23 05:21 brlcad - - * [r75069] src/libanalyze/nirt/diff.cpp: - remove unused private members, quell compiler + * [r78191] TODO: + quick check of dbconcat m35 into ktank seems to work? -2020-03-21 21:59 starseeker +2021-02-06 14:41 starseeker - * [r75068] src/libanalyze/nirt/diff.cpp: - Start thinking about how to bookkeep the segment information - between transitions + * [r78190] ChangeLog: + Update ChangeLog with commits through 78187. -2020-03-21 18:58 starseeker +2021-02-05 23:51 starseeker + * [r78187] **many files**: + Update copyright statements to year 2021 per sh/copyright.sh script - * [r75067] src/libanalyze/nirt/diff.cpp: - Design notes +2021-02-05 20:43 starseeker -2020-03-21 03:59 starseeker + * [r78186] misc/CMake/distcheck_in_src_dir.cmake.in: + The in-src-dir distcheck has the same issue as the others - + ignore the .ninja_log file as there is nothing we can do about it + - ninja is being run to do the build steps, including cleanup, + and as long as ninja is running the log file is there. - * [r75066] src/libanalyze/nirt/diff.cpp: - for this to match intutition, we need the distance. tweak - behavior +2021-02-05 19:42 starseeker -2020-03-21 02:29 starseeker + * [r78185] NEWS: + Still testing, but unless proven otherwise gqa plotting in + multithreaded mode works now. - * [r75065] include/config_win.h.in: - Moved logging code to C file, should have sidestepped this... +2021-02-05 18:49 starseeker -2020-03-21 02:28 starseeker + * [r78184] TODO, src/gtools/tests/CMakeLists.txt, + src/libanalyze/analyze_private.h, src/libanalyze/api.c, + src/libged/gqa/gqa.cpp: + Add specific semaphore protection for GQA plot I/O. - * [r75064] include/bio.h, include/config_win.h.in: - Not sure we can go this simple, but give it a shot... +2021-02-05 16:27 starseeker -2020-03-21 02:14 starseeker + * [r78183] src/conv/iges/g-iges.c: + Avoid duplicating call to nmg_kr() in g-iges + + OSX is getting a crash, and valgrind on Linux reports an issue + with db_free_tree called from g-iges.c:646 getting an invalid + read. The comment with that db_free_tree line indicates + db_free_tree does an nmg_kr call, so it looks like this prior + call in the same routine was interfering. - * [r75063] bench/pixcmp.c, include/bio.h, include/bu/file.h, - include/bu/ptbl.h, include/bu/time.h, include/common.h, - include/rt/db_fullpath.h, include/rt/db_instance.h, - include/rt/db_io.h, include/rt/directory.h, include/rt/mater.h, - include/rt/mem.h, src/conv/asc/asc2g.c, src/conv/conv-vg2g.c, - src/conv/dxf/dxf-g.c, src/conv/fast4-g.c, src/conv/g-acad.c, - src/conv/g-obj.c, src/conv/iges/findp.c, src/conv/iges/g-iges.c, - src/conv/iges/readrec.c, src/conv/iges/recsize.c, - src/conv/intaval/tgf-g.cpp, src/conv/k-g.cpp, - src/conv/nastran-g.c, src/conv/raw/raw-g.cpp, - src/conv/vdeck/vdeck.c, src/conv/vdeck/vextern.h, src/fb/bw-fb.c, - src/fb/pix-fb.c, src/fb/tests/fbthreadtest.c, - src/gtools/gdiff/gdiff.c, src/libanalyze/nirt/nirt.h, - src/libbu/file.c, src/libbu/mappedfile.c, src/libbu/vfont.c, - src/libbu/vfont.h, src/libbu/vls.c, src/libfb/fb_generic.c, - src/libfb/if_X24.c, src/libfb/if_disk.c, - src/libgcv/plugins/fastgen4/fastgen4_read.c, - src/libgcv/plugins/fastgen4/fastgen4_write.cpp, - src/libgcv/plugins/obj/obj_write.c, - src/libgcv/plugins/vrml/vrml_read/file_util.cpp, - src/libged/dup.c, src/libged/ged.c, src/libged/tables.c, - src/libicv/rot.c, src/liboptical/oslexec_pvt.h, - src/librt/db5_alloc.c, src/librt/db5_scan.c, - src/librt/db_alloc.c, src/librt/db_corrupt.c, - src/librt/db_fullpath.c, src/librt/db_inmem.c, src/librt/db_io.c, - src/librt/db_lookup.c, src/librt/db_open.c, src/librt/db_scan.c, - src/librt/librt_private.h, src/librt/mater.c, - src/librt/memalloc.c, src/librt/primitives/primitive_util.c, - src/mged/edsol.c, src/mged/wdb_obj.c, src/nirt/main.cpp, - src/rt/do.c, src/rt/view.c, src/util/ap-pix.c, src/util/bwcrop.c, - src/util/bwhisteq.c, src/util/bwrot.c, src/util/bwscale.c, - src/util/pixbustup.c, src/util/pixcrop.c, src/util/pixrot.c, - src/util/pixscale.c, src/util/plot3rot.c: - Instead of off_t (which Windows defines as 32 bit even in 64 bit - situations) define b_off_t to allow us to substitute the correct - platform specific answer. (Users report that the previous trick - of of forcing off_t to 64 bit is no longer working with newer - Visual Studio and C library versions.) +2021-02-05 01:07 starseeker -2020-03-21 01:14 starseeker + * [r78182] src/other/CMakeLists.txt: + Getting some leftover files on the Mac - * [r75062] include/common.h: - Set _FILE_OFFSET_BITS to 64 - this probably won't fix Windows, - but seems to be the right thing to do for other situations where - we want to 64 bit file size support. +2021-02-04 21:39 starseeker -2020-03-21 00:27 starseeker + * [r78181] regress/ged/CMakeLists.txt, regress/ged/ppush_tests.g, + regress/ged/push.cpp, regress/ged/push_tests.g, + regress/ged/regress-ged_push.cmake.in, regress/ged/xpush_tests.g, + src/libged/tests/CMakeLists.txt, src/libged/tests/ppush_tests.g, + src/libged/tests/push.cpp, src/libged/tests/push_tests.g, + src/libged/tests/xpush_tests.g: + Modify ged push tests to be regression tests, not unit tests. - * [r75061] src/other/openNURBS/opennurbs_defines.h, - src/other/openNURBS/opennurbs_objref.cpp, - src/other/openNURBS/opennurbs_textlog.cpp: - With clang 9.0.0-2 on Ubuntu linux, group_member shadows a - variable in the global namespace from unistd.h +2021-02-04 20:46 starseeker -2020-03-20 20:44 starseeker + * [r78180] src/libged/tests/CMakeLists.txt: + Linux I/O isn't reliably placing the file for this test... - * [r75060] src/libanalyze/nirt/diff.cpp: - Not a struct anymore +2021-02-04 20:14 starseeker -2020-03-20 19:45 starseeker + * [r78179] src/libanalyze/util.cpp: + initialize - * [r75059] src/libanalyze/nirt/diff.cpp: - Out, then in when processing +2021-02-04 19:53 starseeker -2020-03-20 19:33 starseeker + * [r78178] src/gtools/tests/CMakeLists.txt: + Comment out the multithreaded gqa ovlp test temporarily, so we + can do distcheck testing. - * [r75058] src/libanalyze/nirt/diff.cpp: - Use binning and nested maps to impose ordering on transitions and - group them by similar distances from the ray origin. +2021-02-04 18:38 starseeker -2020-03-20 15:26 starseeker + * [r78177] TODO: + We identified which change caused the regression, but not yet + whether the problem is with the new semaphore system as used with + gqa or with some other issue that was simply being masked by the + old semaphore system. Workaround until this is fixed is to use + -P1 to generate plot files. Bump down to next patch release. - * [r75057] src/libanalyze/nirt/diff.cpp: - adjust binning function +2021-02-04 18:35 starseeker -2020-03-20 13:58 starseeker + * [r78176] TODO: + Looked at gdiff issue - as near as I can tell resolution would be + a significant implementation change either in gdiff or librt's + lower level bookkeeping. keep+dbconcat offers a workaround in the + interim. - * [r75056] NEWS, src/libgcv/plugins/rhino/rhino_read.cpp: - Add .r suffixes to regions in 3dm-g import. +2021-02-04 17:16 starseeker -2020-03-19 21:57 starseeker + * [r78175] src/libged/npush/npush.cpp: + Add a note addressing tor's issue with non uniform matrices and + why we're handling it as we are. (Duplicating push's behavior and + letting the low level primitive routines deal with it, and not + considering a failure to apply such a matrix a push failure.) - * [r75055] src/libgcv/plugins/rhino/rhino_read.cpp: - TODO: Need to update logic so we can add region suffice when - we're setting region flag. +2021-02-04 16:28 starseeker -2020-03-19 18:34 starseeker + * [r78174] src/libged/tests/CMakeLists.txt: + Add ctest runs for the new npush tests. - * [r75054] src/other/CMakeLists.txt: - fix png static target name in folder setting +2021-02-04 16:26 starseeker -2020-03-19 18:12 starseeker + * [r78173] src/libged/exec_mapping.cpp: + We don't know what calling code may or may not do with their argv + array and contents - they own it. Restore the original state of + the argv[0] entry before returning. - * [r75053] src/libged/CMakeLists.txt, src/libged/facetize.cpp, - src/libged/facetize_log.c, src/libged/ged_private.h: - Mixing open and C++ seems to be really problematic with different - Visual C++ versions. See if breaking the logging out into a C - file can avoid the issues. - -2020-03-19 00:27 starseeker - - * [r75047] src/libanalyze/nirt/diff.cpp: - Need cmath on BSD - -2020-03-18 21:06 starseeker - - * [r75046] src/libanalyze/nirt/diff.cpp: - notes +2021-02-04 15:23 starseeker -2020-03-18 20:50 starseeker + * [r78172] src/libanalyze/raydiff.c, src/libanalyze/util.cpp, + src/libged/tests/push.cpp: + valgrind caught a few memory leaks in libanalyze - * [r75045] src/libanalyze/nirt/diff.cpp: - Basic attempt to clamp values - intent is to use as a preliminary - step for comparison so we can bin points that are the same within - tolerance Probably don't have it quite right yet. +2021-02-04 15:06 starseeker -2020-03-18 17:43 starseeker + * [r78171] src/libged/npush/npush.cpp: + Make sure tidn and oidn are always correctly initialized. - * [r75044] regress/CMakeLists.txt, regress/nirt, - regress/nirt/ovlps.g: - Add a simple set of overlapping spheres and ellipsoids for - testing. +2021-02-03 20:35 starseeker -2020-03-18 14:54 starseeker + * [r78170] misc/repowork/repowork.cpp: + Add ability to update svn:revision labels in Git commit messages - * [r75043] src/libanalyze/nirt/diff.cpp: - Bzzt. Ordering isn't guaranteed once we throw overlaps into the - mix. Will need to assemble a transition container that is - ordered. +2021-02-02 21:48 starseeker -2020-03-18 14:08 starseeker + * [r78169] src/libged/npush/npush.cpp: + Use bn_mat_ck to validate the matrix being applied to a solid + object. - * [r75042] src/libanalyze/nirt/diff.cpp, - src/libanalyze/nirt/nirt.cpp: - Uniformly set in and out to the segment in and out points, even - when the type is gap or overlap. (TODO - are the separate entries - just for reporting purposes with nirt? Maybe there's another way - to deal with that?) +2021-02-02 17:09 starseeker -2020-03-17 20:42 starseeker + * [r78168] src/libged/npush/npush.cpp: + Incorporate more full path printing into logging - * [r75041] src/libanalyze/nirt/diff.cpp: - refactor +2021-02-02 15:27 starseeker -2020-03-17 20:00 starseeker + * [r78167] src/libged/npush/npush.cpp: + Pass the full path for the tree update walk as well for better + reporting. - * [r75040] src/libanalyze/nirt/diff.cpp: - checkpoint +2021-02-02 15:11 starseeker -2020-03-17 19:52 starseeker + * [r78166] src/libged/npush/npush.cpp: + Track full paths in the push_walk step. - * [r75039] src/libanalyze/nirt/diff.cpp: - checkpoint +2021-02-02 14:50 starseeker -2020-03-17 18:30 starseeker + * [r78165] src/libged/npush/npush.cpp: + report full path for validation failures to provide more context - * [r75038] src/libanalyze/nirt/diff.cpp: - walking logic still isn't right - a test overlap segment and a - partition line up, which means they both need to be processed - before getting another transition. +2021-02-02 14:30 starseeker -2020-03-17 17:40 starseeker + * [r78164] src/libged/tests/push.cpp: + reorganize the test reporting - * [r75037] src/libanalyze/nirt/diff.cpp: - checkpoint +2021-02-02 13:48 starseeker -2020-03-17 15:05 starseeker + * [r78163] src/libged/npush/npush.cpp: + We're already catching cyclic paths with another check - update + message. - * [r75036] src/libanalyze/nirt/diff.cpp: - Ah, right. Different segment types are going to have different - information. May want to look into making them more uniform for - this purpose... +2021-02-01 18:55 starseeker -2020-03-17 14:43 starseeker + * [r78162] src/libged/npush/npush.cpp: + Verify tops object set hasn't changed. - * [r75035] src/libanalyze/nirt/diff.cpp: - debug printing. something wrong with interior output points as - loaded from the ndiff file... +2021-02-01 17:10 starseeker -2020-03-17 14:28 starseeker + * [r78161] src/libged/tests/push.cpp: + Check the _ext top levels to verify the locality (or not) of push + changes. - * [r75034] src/libanalyze/nirt/diff.cpp: - Fix a few silly bugs - appears to walk down transitions now in a - simple case. +2021-02-01 16:55 starseeker -2020-03-17 14:12 starseeker + * [r78160] src/libged/npush/npush.cpp: + Ah. With the -L flag we're getting a case where checking + tree_altered isn't enough - check for an iname as well. - * [r75033] src/libanalyze/nirt/diff.cpp: - Not using spaces +2021-02-01 15:59 starseeker -2020-03-17 13:55 starseeker + * [r78159] src/libged/npush/npush.cpp: + Sort by matrices first, then check apply_solid - * [r75032] src/libanalyze/nirt/diff.cpp: - get new function compiling +2021-02-01 15:25 starseeker -2020-03-17 13:40 starseeker + * [r78158] src/libged/npush/npush.cpp: + Add a final check to spot missing objects added to pushed trees. - * [r75031] src/libanalyze/nirt/diff.cpp: - checkpoint +2021-02-01 14:15 starseeker -2020-03-17 03:33 brlcad + * [r78157] src/libged/npush/npush.cpp: + Turn on the halting criteria for the -r flag (matrices above + regions.) - * [r75030] src/libanalyze/nirt/diff.cpp: - quell uninitialized var (e.g., ldist) warnings. fix null-as-false - conversion. missing equal. kill trailing ws too. +2021-01-31 19:35 starseeker -2020-03-16 22:22 starseeker + * [r78156] src/libged/npush/npush.cpp: + Fix depth setting in tree_update walk, set error condition if we + can't find what we're looking for, depth limit the update walk if + a limit is set. - * [r75029] src/libanalyze/nirt/diff.cpp: - checkpoint +2021-01-30 23:50 starseeker -2020-03-16 20:49 starseeker + * [r78155] src/libged/npush/npush.cpp: + Make a note - depth limits (-d, -r, etc.) aren't working yet. - * [r75028] src/libanalyze/nirt/diff.cpp: - checkpoint +2021-01-30 19:14 starseeker -2020-03-13 20:00 starseeker + * [r78154] src/libged/tests/push.cpp: + Use the -S option to gdiff instead of the custom tree walker in + the test program. - * [r75027] src/libanalyze/nirt/diff.cpp: - Will likely need to rethink the diff analysis code somewhat - - rename in anticipation of that +2021-01-30 15:23 starseeker -2020-03-13 15:51 starseeker + * [r78153] src/libged/gdiff/gdiff.c: + Rough in a version of the "tree diff" capability under the gdiff + command. - * [r75026] src/libged/typein.c: - Did some experiments with typein.c as a C++ file - leaving it as - C, but to ahead and add in the const specifiers - this gets it - fairly close to building as a C++ file. +2021-01-30 15:16 starseeker -2020-03-13 15:41 d_rossberg + * [r78152] include/rt/db_diff.h: + include avs, type is used by db_diff - * [r75025] include/config_win.h.in: - quell the failure of the 32 bit build with Visual Studio 2019 - the failure was caused by a different setting of __STDC__ during - configuration and build: during the CMake configuration runs - __STDC__ was not set, but via common.h->config_win.h in the build - unfortunately, __STDC__ influenses the presence of off_t (for - example) - as it turned out, the __STDC__ define is not necessary any more - for Visual Studio 2019 builds (both 32 and 64 bit) - may nedd to be tested with Visual Studio 2017 ... +2021-01-30 14:08 starseeker -2020-03-13 13:49 starseeker + * [r78151] src/libged/npush/npush.cpp: + Dry run only controls writing the internals - all other steps + should be active. - * [r75024] src/libged/typein.c: - experiment with using bu_opt_fastf_t instead of atof for - numerical conversion. +2021-01-29 22:17 starseeker -2020-03-13 13:27 starseeker + * [r78150] src/libged/tests/push.cpp: + more notes - * [r75023] CMakeLists.txt, CTestConfig.cmake: - This hasn't been used for years - VC has it if we stand it up - again. +2021-01-29 22:15 starseeker -2020-03-12 20:00 starseeker + * [r78149] src/libged/tests/push.cpp: + TODO - see if the cross-checking ability of this program can be + built in to npush itself - have npush with -V enabled call keep + to make a temp copy of the tree, process, then dbconcat back in + with a prefix, do the checks, then killtree -f the dbconcated + copy. - * [r75022] src/libanalyze/nirt/diff.cpp, - src/libanalyze/nirt/nirt.cpp, src/libanalyze/nirt/nirt.h: - Use std::string for simplicity. This gets a diff run to report no - differences using the same .g inputs that generated the original - ndiff file loaded. +2021-01-29 22:04 starseeker -2020-03-12 18:39 starseeker + * [r78148] src/libged/npush/npush.cpp, src/libged/tests/push.cpp: + Looking better to keep the current processing than trying to + consolidate. Rename to reflect final purpose of various codes. + With a test program in place, next step will be to shake down the + various options. - * [r75021] src/libanalyze/nirt/nirt.cpp: - use cstr instead of addr whenever we can for bu_vls +2021-01-29 20:49 starseeker -2020-03-12 18:27 starseeker + * [r78147] src/libged/tests/push.cpp: + Be a bit more verbose with messages. - * [r75020] src/libanalyze/nirt/nirt.cpp: - Add the slient flag to the default, so the diff answers will - match out of the box. +2021-01-29 20:31 starseeker -2020-03-12 16:39 starseeker + * [r78146] src/libged/tests/push.cpp: + need per-call argv copy for npush - * [r75019] misc/nirt/diff.nrt, src/libanalyze/nirt/diff.cpp, - src/libanalyze/nirt/nirt.cpp: - Diff needs to be working in mm +2021-01-29 20:14 starseeker -2020-03-12 15:20 starseeker + * [r78145] src/libged/tests/push.cpp: + Ray diffing isn't enough - also need to check for matrix + differences in the tree. - * [r75018] src/other/linenoise/linenoise.c: - Pull latest changes from upstream. +2021-01-29 18:59 starseeker -2020-03-12 12:57 starseeker + * [r78144] src/libged/tests/push.cpp: + Implement concat call - * [r75017] src/other/linenoise/linenoise.c: - Upstream reported compile problem with yanking current args, try - using them for a test instead. Also older GCC doesn't like the - attribute for fallthrough, try the - https://stackoverflow.com/a/57389220 approach instead. +2021-01-29 14:58 starseeker -2020-03-12 11:46 starseeker + * [r78143] src/libged/tests/CMakeLists.txt, + src/libged/tests/push.cpp: + Start rigging a program to do testing of push behaviors. - * [r75016] src/other/linenoise/linenoise.c: - Newer GCC doesn't like the implicit fallthrough +2021-01-29 00:23 starseeker -2020-03-11 19:32 starseeker + * [r78142] src/libged/tests/CMakeLists.txt, + src/libged/tests/ppush_tests.g, src/libged/tests/xpush_tests.g: + Add control .g files with the results of push and xpush - * [r75015] TODO: - Note ideas for improving the behavior of MGED's quit command when - subprocess commands are running. +2021-01-27 21:20 starseeker -2020-03-11 00:56 starseeker + * [r78141] src/libged/npush/npush.cpp: + Note next step - * [r75014] src/libanalyze/nirt/diff.cpp: - Do this the C way, since we're working with structs... +2021-01-27 20:30 starseeker -2020-03-11 00:52 starseeker + * [r78140] src/libged/npush/npush.cpp: + Same deal with solids - can't write until we've staged + everything. - * [r75013] src/libanalyze/nirt/diff.cpp: - nirt_seg_init didn't like the previous initialization setup - use - explicit new/delete for more stable memory. There's probably a - better way to do this, but it will mean a lot of code - refactoring... +2021-01-27 20:15 starseeker -2020-03-11 00:33 starseeker + * [r78139] src/libged/npush/npush.cpp: + Fix inverted check for identity matrix. - * [r75012] src/libanalyze/nirt/nirt.cpp: - nirt_cmd is a comment in the output +2021-01-27 20:06 starseeker -2020-03-11 00:27 starseeker + * [r78138] src/libanalyze/raydiff.c: + Free rti before resources - * [r75011] src/libanalyze/nirt/diff.cpp: - adjust bu_cmd arguments +2021-01-27 19:05 starseeker -2020-03-10 21:45 starseeker + * [r78137] src/libged/npush/npush.cpp: + Quirk in sorting was preventing lookup from finding correct + instance. - * [r75010] src/libanalyze/nirt/diff.cpp: - Print option parsing failure msgs +2021-01-27 19:03 starseeker -2020-03-10 21:30 starseeker + * [r78136] src/libged/npush/npush.cpp: + Fix matrix sorting, only look at solid flag if dp isn't a comb - * [r75009] misc/nirt/CMakeLists.txt: - Make sure nirt knows it needs (potentially) to copy the files +2021-01-27 18:25 starseeker -2020-03-10 21:24 starseeker + * [r78135] src/libged/npush/npush.cpp: + still got a problem somewhere in the walking - * [r75008] src/other/linenoise/linenoise.c: - Fix MSVC build +2021-01-27 17:53 starseeker -2020-03-10 19:46 starseeker + * [r78134] src/libged/tests/push_tests.g: + Use smaller spheres for tests. - * [r75007] src/other/linenoise/linenoise.c: - Fix a few compilation issues that crop up in the BRL-CAD build - environment. +2021-01-27 17:43 starseeker -2020-03-10 19:39 starseeker + * [r78133] src/libged/npush/npush.cpp: + Do write operations on a separate copy of the tree. This may not + be necessary, but until I can prove overwriting data mid-walk can + never cause a problem go with the safer option. - * [r75006] src/other/linenoise.dist, - src/other/linenoise/README.markdown, - src/other/linenoise/linenoise-win32.c, - src/other/linenoise/linenoise.c, src/other/linenoise/linenoise.h, - src/other/linenoise/utf8.c, src/other/linenoise/utf8.h: - Update to the latest linenoise from Steve Bennett's - https://github.com/msteveb/linenoise fork +2021-01-27 03:02 starseeker -2020-03-09 19:01 starseeker + * [r78132] src/libged/npush/npush.cpp: + Closer - object names in tree look more reasonable. - * [r75005] src/libanalyze/nirt/diff.cpp, - src/libanalyze/nirt/nirt.h: - Stub in some basic command help +2021-01-27 02:44 starseeker -2020-03-09 17:41 starseeker + * [r78131] src/libged/npush/npush.cpp: + Tree walk still isn't right... - * [r75004] src/libanalyze/nirt/diff.cpp: - Break up the loading function into per-line functions. +2021-01-26 23:41 starseeker -2020-03-09 16:21 starseeker + * [r78130] src/libged/npush/npush.cpp: + I was afraid of that... can't edit and walk the tree + simultaneously. Need to rethink. - * [r75003] src/libanalyze/nirt/diff.cpp: - Take a page from the libged brep subcommand refactor and start - setting up to use libbu command table. +2021-01-26 22:17 starseeker -2020-03-09 15:57 starseeker + * [r78129] src/libged/npush/npush.cpp: + Start working on the actual I/O logic - * [r75002] src/libanalyze/nirt/diff.cpp, - src/libanalyze/nirt/nirt.cpp, src/libanalyze/nirt/nirt.h: - refactor +2021-01-26 20:25 starseeker -2020-03-09 14:47 starseeker + * [r78128] src/libged/npush/npush.cpp: + checkpoint - * [r75001] include/analyze/nirt.h, src/libanalyze/nirt/nirt.cpp, - src/nirt/main.cpp: - For each nirt ray, make a stab at having nirt_cmd print out the - nirt command line needed to reproduce that particular shot. +2021-01-26 19:32 starseeker -2020-03-09 14:12 starseeker + * [r78127] src/libged/npush/npush.cpp: + Adjust walking code - * [r75000] src/libbu/dir.c: - bu_dir appending normally tracks directory separators, but for - ext and libext that's actually incorrect - those are raw appends - to the string. +2021-01-26 18:59 starseeker -2020-03-07 22:52 starseeker + * [r78126] src/libged/npush/npush.cpp: + No need to pass dbip around if it is also in the state container. - * [r74999] src/libanalyze/nirt/diff.cpp, - src/libanalyze/nirt/nirt.cpp, src/libanalyze/nirt/nirt.h: - Move more diff related code into diff.cpp +2021-01-26 16:47 starseeker -2020-03-07 15:40 starseeker + * [r78125] doc/docbook/system/mann/stat.xml: + typo - * [r74998] src/libanalyze/CMakeLists.txt, - src/libanalyze/nirt/diff.cpp, src/libanalyze/nirt/nirt.cpp, - src/libanalyze/nirt/nirt.h: - Break the nirt diff specific logic (what there is of it) out into - its own file +2021-01-26 14:16 starseeker -2020-03-07 15:25 starseeker + * [r78124] src/libged/npush/npush.cpp: + checkpoint - * [r74997] src/libanalyze/CMakeLists.txt, - src/libanalyze/nirt/nirt.cpp, src/libanalyze/nirt/nirt.h: - Start organizing an internal nirt.h header file +2021-01-25 21:36 starseeker -2020-03-07 15:14 starseeker + * [r78123] src/libged/npush/npush.cpp: + Note if we're applying matrix to the solid parameters - * [r74996] src/libanalyze/CMakeLists.txt, src/libanalyze/nirt, - src/libanalyze/nirt.cpp, src/libanalyze/nirt/nirt.cpp: - Move nirt file to subdir +2021-01-25 21:23 starseeker -2020-03-06 19:01 bob1961 + * [r78122] src/libged/npush/npush.cpp: + checkpoint - * [r74995] src/tclscripts/archer/ArcherCore.tcl: - Tweaked ArcherCore::newDb for windows -- if file extension is - empty add a .g +2021-01-25 21:08 starseeker -2020-03-06 11:07 starseeker + * [r78121] src/libged/npush/npush.cpp: + Various adjustments for shallower nesting of code. - * [r74994] src/libanalyze/nirt.cpp: - Do validity checks up front +2021-01-25 20:43 starseeker -2020-03-05 21:13 starseeker + * [r78120] src/libged/npush/npush.cpp: + Cleanup, pass settings in to state - * [r74993] include/analyze/nirt.h, misc/nirt/diff.nrt, - src/libanalyze/nirt.cpp, src/nirt/main.cpp: - Add a way to pass the originating nirt command line through to - the output, if the calling application supplies it. +2021-01-25 19:52 starseeker -2020-03-05 19:06 starseeker + * [r78119] src/libged/npush/npush.cpp: + checkpoint - * [r74992] misc/CMakeLists.txt, misc/nirt, - misc/nirt/CMakeLists.txt, src/nirt/CMakeLists.txt, - src/nirt/sfiles: - Move pre-defined nirt formatting files - not specific to src/nirt - with code in libanalyze. +2021-01-25 17:24 starseeker -2020-03-04 20:30 n_reed + * [r78118] src/libged/npush/npush.cpp: + Step 1 - copy objects that need copying - * [r74991] src/tclscripts/checker/menu.tcl: - Fix the dimensions of the checker window (it was launching tiny). +2021-01-25 15:50 starseeker -2020-03-03 22:42 starseeker + * [r78117] src/libged/npush/npush.cpp: + Look at how each instance needs to be edited. - * [r74990] src/other/CMakeLists.txt, src/other/libpng.dist, - src/other/libpng/scripts/macro.lst: - Try using the PNG_PREFIX mechanism build into libpng +2021-01-25 15:42 starseeker -2020-03-03 22:18 starseeker + * [r78116] src/libged/npush/npush.cpp: + Cleanup - * [r74989] src/adrt/CMakeLists.txt, src/other/CMakeLists.txt: - Test actual use of the zlib prefix mechanism +2021-01-25 15:19 starseeker -2020-03-03 21:46 starseeker + * [r78115] src/libged/npush/npush.cpp: + More reporting adjustments. Need to tune this for the various + cases. - * [r74988] src/other/libz/win32/zlib1.rc: - zlib.h is now in the build dir +2021-01-25 15:10 starseeker -2020-03-03 21:40 starseeker + * [r78114] src/libged/npush/npush.cpp: + Improve reporting, check candidate names against database and + each other. - * [r74987] src/other/libz/CMakeLists.txt: - downcase +2021-01-25 14:38 starseeker -2020-03-03 21:39 starseeker + * [r78113] src/libged/npush/npush.cpp: + Make the 'look beyond the specified trees' feature optional (and + non-default) so we can better match existing push behavior. (The + non-locality feature probably also has significant performance + implications in large .g files, but that's currently untested.) - * [r74986] src/other/libz/CMakeLists.txt: - ws +2021-01-25 14:25 starseeker -2020-03-03 21:38 starseeker - - * [r74985] src/other/libz/CMakeLists.txt, src/other/libz/zconf.h: - Incorporate some of the updates from - https://github.com/madler/zlib/pull/323 with a few variations - -2020-03-03 18:21 starseeker - - * [r74984] src/other/libz/README: - Turns out we're not the first people to want a fully isolated - zlib - need to take a look at the work in - https://github.com/madler/zlib/pull/323 which looks like it has - identified a couple issues we haven't tripped on yet. - -2020-03-03 18:08 starseeker - - * [r74983] src/other/CMakeLists.txt, src/other/libz.dist, - src/other/libz/CMakeLists.txt, src/other/libz/gzread.c, - src/other/libz/zconf.h, src/other/libz/zlib.h, - src/other/libz/zlib.h.in: - With some help/guidance from Sean, generalize the zlib prefix - definition mechanism to allow specification o something other - than the default z_ prefix. This is setting the stage for other - changes that will in combination allow us to bundle our own zlib - without any risk of conflict with system or other third party - libraries. Ideally we'll push as many of these changes upstream - as we can, but this is not an ability built into the current zlib - ecosystem so we'll probably have to maintain 3rd party patches to - use it properly. However, given the number of compatibility - issues we've hit inadvertantly mixing system and bundled zlib and - libpng (Mac OSX is especially bad in this respect) it's probably - still worth doing. - -2020-03-03 12:57 starseeker - - * [r74982] misc/CMake/FindAppleseed.cmake, src/art/CMakeLists.txt: - Newer CMake has a warning about package name passed to - find_package_handle_standard_args not matching the name of the - calling package. Will also have to deal with this for zlib, tcl - and tk but those will be tricker - -2020-03-03 03:34 starseeker - - * [r74981] misc/CMake/BRLCAD_Util.cmake: - Some new message types were added in recent CMake - -2020-03-02 20:33 starseeker - - * [r74980] src/other/libpng/CMakeLists.txt, - src/other/libpng/README, src/other/libpng/libpng.pc.in, - src/other/libpng/png.c, src/other/libpng/png.h, - src/other/libpng/pngconf.h, src/other/libpng/pngdebug.h, - src/other/libpng/pngerror.c, src/other/libpng/pngget.c, - src/other/libpng/pnginfo.h, src/other/libpng/pngmem.c, - src/other/libpng/pngpread.c, src/other/libpng/pngpriv.h, - src/other/libpng/pngread.c, src/other/libpng/pngrio.c, - src/other/libpng/pngrtran.c, src/other/libpng/pngrutil.c, - src/other/libpng/pngset.c, src/other/libpng/pngstruct.h, - src/other/libpng/pngtrans.c, src/other/libpng/pngwio.c, - src/other/libpng/pngwrite.c, src/other/libpng/pngwtran.c, - src/other/libpng/pngwutil.c, - src/other/libpng/scripts/options.awk, - src/other/libpng/scripts/pnglibconf.dfa, - src/other/libpng/scripts/pnglibconf.h.prebuilt, - src/other/libpng/scripts/symbols.def: - Update libpng to version 1.6.37 - -2020-03-02 16:21 starseeker - - * [r74976] include/config_win.h.in: - Yeah, looks like r74968 doesn't fly with VS2017. For the moment, - see if we can be more targeted about when we do the define - - eventually we'll probably need to figure out some sort of - configure-time test. - -2020-03-02 15:47 starseeker - - * [r74975] NEWS: - Nick fixed the transparency drawing option in MGED - -2020-03-02 12:06 bob1961 - - * [r74973] misc/CMake/BRLCAD_CheckFunctions.cmake: - Fix for BRLCAD_CHECK_PERCENT_Z function. - -2020-03-01 19:20 starseeker - - * [r74972] (many files, breaks svn2cl.sh script): - Update copyright statements to year 2020 per sh/copyright.sh script - -2020-02-27 16:07 d_rossberg - - * [r74970] src/libged/check/check_overlaps.c: - quell access violation while freeing a list by applying the - recommended procedure - -2020-02-27 15:38 n_reed - - * [r74969] src/libdm/dm-generic.c, src/mged/dozoom.c: - Notional fix of transparency in MGED. - - This makes the -x [0.0,1.0] option to "e" work in MGED, provided - lighting and - transparency are enabled (dm set lighting 2, dm set transparency - 1). + * [r78112] src/libged/npush/npush.cpp: + Remove combtree_i structure from npush - unneeded. - To implement transparency, MGED draws opaque stuff first, then - does a second - pass of transparent stuff with the depth mask disabled so back - faces are - blended instead of culled. - - The current implementation has the two passes done using the same - function with - different transparency thresholds, first 1, then ~.999 - (nextafter(1.0, 0.0)). - - The first problem is that only objects >= threshold are being - drawn, so the - second call should be ~0, not ~.999 in order to draw transparent - stuff. - - The second problem is that using a one-sided threshold would seem - to - technically draw all the opaque objects twice, though there may - be some - implementation detail I'm missing that prevents this. - - I corrected the threshold value for the second pass. I also - changed the draw - function to operate in two modes based on the threshold, which - feels like the - original intention, but also doesn't seem like the correct way to - do this. - -2020-02-27 10:23 d_rossberg - - * [r74968] include/config_win.h.in: - revision 74695 causes error C2668 (ambigous call to overload - function) in src\libged\facetize.cpp lines 395 and 398 with MSVS - 2019 - => moved "#define open _open" back to its place before this - revision - will have to see if it causes an issue with MSVS - version 2017 - -2020-02-26 21:33 starseeker + Was making things too complicated by assigning IDN matrices + to dp_i instances on the way down the push tree - combs will + need IDN matrices, but only when writing the comb instances + in the .g file. In the meantime, we need to keep the "current" + matrix state in order to recognize situations where we're going + to need to copy higher level combs with the dp_i instances. + Once non IDN matrices are recorded rather than thrown away, we + don't need any detailed look at the comb tree itself - the + matrix encapsulates the uniqueness (or non-uniqueness) of the + comb. - * [r74966] misc/tools/CMakeLists.txt, misc/tools/svn2cl, - misc/tools/svn2cl.dist, misc/tools/svn2cl/ChangeLog, - misc/tools/svn2cl/NEWS, misc/tools/svn2cl/README, - misc/tools/svn2cl/TODO, misc/tools/svn2cl/authors.xml, - misc/tools/svn2cl/svn2cl.1, misc/tools/svn2cl/svn2cl.sh, - misc/tools/svn2cl/svn2cl.xsl, misc/tools/svn2cl/svn2html.css, - misc/tools/svn2cl/svn2html.xsl: - Stash svn2cl in misc/tools for convenience. +2021-01-23 13:48 starseeker -2020-02-26 20:03 starseeker + * [r78111] src/libged/npush/npush.cpp: + comment adjustments - * [r74964] HACKING: - Give rt window a little time to show up before quitting MGED. +2021-01-22 22:02 starseeker -2020-02-23 13:45 starseeker - - * [r74962] src/libbrep/cdt2/cdt.h, src/libbrep/cdt2/mesh.cpp: - Triangles will also factor into this once we start generating - them. - -2020-02-23 13:33 starseeker - - * [r74961] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/mesh.cpp, - src/libbrep/cdt2/polygon.cpp: - Start mapping out conceptually how removal updating will be - managed. - -2020-02-23 03:39 starseeker - - * [r74960] src/libbrep/cdt2/cdt.h, src/libbrep/cdt2/polygon.cpp: - use put_pedge - -2020-02-23 03:35 starseeker - - * [r74959] include/brep/cdt2.h, src/libbrep/cdt2/cdt.cpp, - src/libbrep/cdt2/cdt.h: - Set up for flags to provide different performance vs. quality - tradeoffs, even though we're not using them yet. - -2020-02-23 03:18 starseeker - - * [r74958] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/polygon.cpp: - use msgs - -2020-02-22 23:55 starseeker - - * [r74957] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h: - Bail if edge association fails - -2020-02-22 15:24 starseeker - - * [r74956] src/libbrep/cdt2/mesh.cpp: - slight rework + * [r78110] src/libged/npush/npush.cpp: + checkpoint -2020-02-22 15:19 starseeker +2021-01-22 20:33 starseeker - * [r74955] src/libbrep/cdt2/mesh.cpp: - If we're just adding to an existing uedge, there's less work to - do. + * [r78109] src/libged/npush/npush.cpp: + Not sure these are being assembled correctly... -2020-02-22 15:13 starseeker +2021-01-22 19:54 starseeker - * [r74954] src/libbrep/cdt2/mesh.cpp: - I think at this stage we shouldn't need the RTree lookup, since - the points will be shared... in principle the RTrees come in when - we start looking for nearby data in a different BRep. + * [r78108] src/libged/npush/npush.cpp: + comments -2020-02-22 04:21 starseeker +2021-01-22 19:49 starseeker - * [r74953] src/libged/brep/pick.cpp: - add some links + * [r78107] src/libged/npush/npush.cpp: + Add some notes about how to proceed -2020-02-21 23:21 starseeker +2021-01-22 19:27 starseeker - * [r74952] misc/tools/debug2c/debug2c.cxx, - misc/tools/env2c/env2c.cxx: - Include common.h in the generated sources + * [r78106] src/libged/npush/npush.cpp: + checkpoint -2020-02-21 16:14 starseeker +2021-01-22 16:02 starseeker - * [r74951] src/libged/brep/pick.cpp: - Stash a note about work we should someday investigate... + * [r78105] src/libged/npush/npush.cpp: + print full msg -2020-02-21 12:39 brlcad +2021-01-22 16:00 starseeker - * [r74950] src/librt/primitives/brep/brep.cpp: - different method, bigger subdivision steps, but demonstrates - issues with get_closest_point() + * [r78104] src/libged/npush/npush.cpp: + print matrix -2020-02-21 05:06 starseeker +2021-01-22 15:47 starseeker - * [r74949] src/libged/brep/pick.cpp: - Checkpoint some experimentation. Getting something odd (or at - least unexpected) with the surface_GetClosestPoint3dFirstOrder - routine... + * [r78103] src/libged/npush/npush.cpp: + checkpoint -2020-02-21 05:04 brlcad +2021-01-21 22:50 starseeker - * [r74948] src/libged/brep/pick.cpp: - fix compile. amazingly didn't error out due to polymorphism and - comma operator. will want to check and make sure the logic is - still working as expected as prior logic was always false. + * [r78102] doc/docbook/system/mann/npush.xml: + Lay out an example that requires parent comb redefinition. Still + not sure how to implement this yet, but there are clearly cases + where it can be necessary. -2020-02-20 22:41 starseeker +2021-01-21 21:47 starseeker - * [r74947] src/libged/brep/pick.cpp: - Stub in some of the logic for face picking (not the hard bit.) + * [r78101] src/libged/tests/push_tests.g: + Add another test case -2020-02-20 22:09 starseeker +2021-01-21 16:42 starseeker - * [r74946] misc/CMake/CMakeLists.txt, misc/CMake/NOTES: - Add a minimal illustration of using a generator expression to - define a variable for a script - need to test with a properly - multiconfig setup. + * [r78100] src/libged/npush/npush.cpp: + Adjust printing messages for npush -2020-02-20 21:31 starseeker +2021-01-21 16:06 starseeker - * [r74945] regress/CMakeLists.txt: - forgot the pix files + * [r78099] NEWS, src/libged/ged.c, src/libged/ged_private.h, + src/libged/tree/tree.c: + Add verbosity option to tree command to label comb instances with + non-IDN matrices. -2020-02-20 21:02 starseeker +2021-01-21 16:04 starseeker - * [r74944] regress/CMakeLists.txt, regress/nurbs/CMakeLists.txt, - regress/nurbs/regress-nurbs-nirt.cmake.in: - regress files are out of sync with distclean + * [r78098] src/libged/npush/npush.cpp: + Add comments -2020-02-20 19:07 starseeker +2021-01-20 17:33 starseeker - * [r74943] CMakeLists.txt: - Add some notes about how we might better manage CMake install - paths with newer CMake capabilities. + * [r78097] src/libged/npush/npush.cpp: + Add more comments -2020-02-20 16:11 starseeker +2021-01-20 16:28 starseeker - * [r74942] regress/nurbs/regress-nurbs-nirt.cmake.in: - Make a note to check into generator expressions and the - Debug/Release switching mechanism. + * [r78096] src/libged/npush/npush.cpp: + Comment state variables -2020-02-20 15:50 starseeker +2021-01-19 19:30 starseeker - * [r74941] regress/nurbs/CMakeLists.txt, - regress/nurbs/regress-nurbs-nirt.cmake.in: - Right... multiconfig... + * [r78095] src/libged/npush/npush.cpp: + Take s_i out of the push_state - not used in tree walking -2020-02-20 13:45 starseeker +2021-01-19 19:27 starseeker - * [r74940] src/libged/brep/brep.cpp: - This is the splitting operation + * [r78094] src/libged/npush/npush.cpp: + Adjust combtree, add more comments -2020-02-20 03:55 starseeker +2021-01-15 20:00 starseeker - * [r74939] src/libged/brep/brep.cpp: - Leverage the openNURBS SubBrep and Append capabilities to - implement a split subcommand for the brep command. The purpose - here is to take a solid BRep object and produce from its faces a - set of plate mode NURBS objects. This provides a mechanism for - 'converting' to plate mode from solid, but without having to - implement any sort of flag - the underlying BRep data types are - in fact representing plate mode objects when written back to the - .g file. Two modes - one puts the specified set of faces (all by - default) into a single multi-plate BRep object, and the other - produces a comb unioning one-brep-per-face plate mode BRep - objects. The advantage of the latter is an ability to - individually inspect and remove specific faces. + * [r78093] src/libged/tests/push_tests.g: + It's not best practice, but it is allowed by librt - make an + example with three of the exact same comb in the same group, + differentiated only by their instance matrices. -2020-02-19 21:33 starseeker +2021-01-15 19:55 starseeker - * [r74938] src/libbrep/opennurbs_ext.cpp, src/libged/brep/pick.cpp: - Include the header + * [r78092] src/libged/npush/npush.cpp, + src/libged/tests/push_tests.g: + Add example of comb present in different levels of a push tree. -2020-02-19 21:32 starseeker +2021-01-15 19:07 starseeker - * [r74937] src/conv/step/util/CMakeLists.txt: - Don't use gstep imports list here + * [r78091] src/libged/npush/npush.cpp: + Rough in logic to keep the tree walk going post-leaf for + information. -2020-02-19 20:21 starseeker +2021-01-15 18:59 starseeker - * [r74936] src/libged/brep/brep.cpp: - stub in a couple unimplemented commands + * [r78090] src/libged/npush/npush.cpp: + Pass the survey state, so we can change how we're recording more + easily mid-tree-walk. -2020-02-19 19:16 starseeker +2021-01-15 18:13 starseeker - * [r74935] include/brep/pullback.h: - Used in libged, so BREP_EXPORT this function... + * [r78089] src/libged/npush/npush.cpp: + checkpoint -2020-02-19 19:15 starseeker +2021-01-15 16:40 starseeker - * [r74934] src/libbrep/cdt/RTree.h: - GCC ignored it, but MSVC doesn't like the RTREE_QUAL prefixes for - Ray + * [r78088] src/libged/npush/npush.cpp: + Not sure how yet, but going to have to develop ability to + propagate comb tree changes back up the hierarchy if necessary. -2020-02-19 16:12 brlcad +2021-01-15 15:44 starseeker - * [r74933] src/librt/primitives/brep/brep.cpp: - comment out the expensive walk until the newton method is - working. this restores behavior back to what BoT is doing. + * [r78087] src/libged/npush/npush.cpp: + Print when we have differing trees. -2020-02-19 06:51 brlcad +2021-01-15 15:38 starseeker - * [r74932] include/bg/aabb_ray.h, src/libbg/aabb_ray.c: - register on args is on the way out + * [r78086] src/libged/npush/npush.cpp: + Halting pushes above primitives has complex implications for + combs. -2020-02-18 22:41 starseeker +2021-01-15 15:37 starseeker - * [r74931] src/libbrep/cdt2/cdt.h: - possibly useful post-processing thought + * [r78085] src/libged/tests/push_tests.g: + Add more tests -2020-02-18 22:20 starseeker +2021-01-15 01:52 starseeker - * [r74930] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/mesh.cpp: - Add a set to hold active faces, if they are specified + * [r78084] src/libged/npush/npush.cpp: + TODO note... this needs to be more robust. -2020-02-18 21:40 starseeker +2021-01-15 01:49 starseeker - * [r74929] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/edge.cpp, src/libbrep/cdt2/polygon.cpp: - fix edge_pnts index + * [r78083] src/libged/npush/npush.cpp: + Not a renaming candidate unless the matrix is non-IDN -2020-02-18 20:30 starseeker +2021-01-14 23:46 starseeker - * [r74928] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/edge.cpp, src/libbrep/cdt2/polygon.cpp: + * [r78082] src/libged/npush/npush.cpp: checkpoint -2020-02-18 18:52 starseeker - - * [r74927] src/libbrep/cdt2/cdt.h: - Be more specific about the usage intent of p_edges_tree, few - other comment tweaks +2021-01-14 21:43 starseeker -2020-02-18 18:24 starseeker - - * [r74926] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/edge.cpp, src/libbrep/cdt2/mesh.cpp, - src/libbrep/cdt2/polygon.cpp, src/libbrep/cdt2/vert.cpp: + * [r78081] src/libged/npush/npush.cpp: checkpoint -2020-02-18 01:24 starseeker - - * [r74925] src/mged/edsol.c: - Looks like we're missing a bracket +2021-01-14 19:44 starseeker -2020-02-18 00:46 jebbly + * [r78080] src/libged/npush/npush.cpp: + Check list of objects against the active trees - don't try to + push if an object that is below a specified object is also + specified. Particularly if depth limitations are specified, I + don't know whether this is safe (or guaranteed to produce + intuitive results) in all cases. - * [r74924] src/mged/edsol.c: - Implement macros to categorize the sedit 'p' command based on how - many arguments are required +2021-01-14 18:48 starseeker -2020-02-17 05:32 brlcad + * [r78079] src/libged/npush/npush.cpp: + Make a note - we'll have to do each specified push fully before + processing the next, if multiple comb inputs are specified to the + push command. - * [r74923] src/libbrep/opennurbs_ext.cpp: - actually looks like get_closest_point() is using the other one - from gcp_newton_iterate() whereas the other is used by the - surface tree. different behavior, so can't collapse without - testing. - -2020-02-17 05:27 brlcad +2021-01-14 18:43 starseeker - * [r74922] src/libbrep/opennurbs_ext.cpp: - quiet the inverse failure. needs to do something, but blather - isn't it. + * [r78078] src/libged/npush/npush.cpp: + checkpoint -2020-02-16 22:50 starseeker +2021-01-14 15:05 starseeker - * [r74921] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/polygon.cpp: - Be more explicit about boundaries. This suggests a possibly - interesting check - if we have an edge whose type is interior, - but has two edge vertices and the edges associated with those - vertices are not nearby on a polygon, that edge could be a split - candidate on non-planar faces. + * [r78077] src/libged/npush/npush.cpp: + Leaves in a push aren't necessarily solids - will need to handle + differently. -2020-02-16 22:41 starseeker +2021-01-13 20:40 starseeker - * [r74920] src/libbrep/cdt2/polygon.cpp: - Set edge type + * [r78076] src/libged/npush/npush.cpp: + Start working on how to check comb trees for uniqueness in a .g + file -2020-02-16 22:26 starseeker +2021-01-13 19:11 starseeker - * [r74919] src/libbrep/cdt2/polygon.cpp: - As much as possible we'll want the cleanup, syncing and data - management to happen without the caller having to worry about the - details - that means we'll have to pay attention to them up - front. + * [r78075] doc/docbook/system/mann/npush.xml, + src/libged/tests/push_tests.g: + Add another example that would require comb copying with a depth + limit set. -2020-02-16 22:07 starseeker +2021-01-13 18:05 starseeker - * [r74918] src/libbrep/cdt2/cdt.h, src/libbrep/cdt2/mesh.cpp, - src/libbrep/cdt2/polygon.cpp: - For face wide edge checking we need a face wide 2D RTree - the - individual polygon trees are only suitable for processing scoped - to that specific polygon. + * [r78074] src/libged/npush/npush.cpp: + Include string header -2020-02-16 21:35 starseeker +2021-01-13 16:43 starseeker - * [r74917] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/edge.cpp: - Migrate the tangent initialization + * [r78073] src/libged/npush/npush.cpp: + Make a note - we need to think about comb trees in all this, + since they define comb objects which may not be localized to just + the pushed tree... -2020-02-16 19:38 starseeker +2021-01-13 16:29 starseeker - * [r74916] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/polygon.cpp: - Add RTree logic for poly edges + * [r78072] src/libged/tests/push_tests.g: + Add mixed depth hierarchy -2020-02-16 19:14 starseeker +2021-01-13 15:27 starseeker - * [r74915] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/mesh.cpp, src/libbrep/cdt2/polygon.cpp: - More work on setting up polygon building. + * [r78071] src/libged/tests/push_tests.g: + Add a deeper hierarchy with matrices -2020-02-15 17:22 starseeker +2021-01-13 15:06 starseeker - * [r74914] src/libged/brep/brep.cpp: - initialize verbosity + * [r78070] doc/README.Windows: + Elaborate more on the RelWithDebInfo CMake mode as it pertains to + Visual STStudio. -2020-02-14 20:33 starseeker +2021-01-12 21:10 starseeker - * [r74913] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/mesh.cpp, src/libbrep/cdt2/polygon.cpp: - rename + * [r78069] NEWS, doc/docbook/system/mann/quit.xml, src/mged/cmd.c, + src/tclscripts/mged/mview.tcl: + This needs to be done with a more informative dialog, if we're + going to go this route - revert r77990 -2020-02-14 19:51 starseeker +2021-01-12 18:54 starseeker - * [r74912] src/libbrep/CMakeLists.txt, src/libbrep/cdt2/cdt.cpp, - src/libbrep/cdt2/cdt.h, src/libbrep/cdt2/mesh.cpp, - src/libbrep/cdt2/polygon.cpp: - start working on polygon container definition + * [r78068] doc/docbook/system/mann/CMakeLists.txt, + doc/docbook/system/mann/npush.xml, src/libged/npush/npush.cpp: + Start roughing out a man page. Need to clearly articulate what + some of these ideas are supposed to do in order to know what has + to be implemented, so might as well document the meaning while + we're at it... -2020-02-14 18:50 starseeker +2021-01-12 15:33 starseeker - * [r74911] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/mesh.cpp: - Should be able to use the vertex data to find the uedge, rather - than an all-up RTree search. + * [r78067] src/libged/lint/lint.cpp: + Fix crash if lint -F option is passed invalid search args. (lint + isn't documented yet, so not really user visible.) -2020-02-14 15:56 starseeker +2021-01-12 15:25 starseeker - * [r74910] src/libged/brep/pick.cpp: - Similar ability for vertices. In both cases we should probably - have some way to adjust the 'sensitivity' of the bounding boxes - around the components - bigger boxes will mean more agressive - returning of 'nearby' elements. + * [r78066] src/libged/npush/npush.cpp: + checkpoint -2020-02-14 15:35 starseeker +2021-01-12 14:37 starseeker - * [r74909] src/libbrep/cdt/RTree.h: - a_rect, not a_rectA + * [r78065] src/libged/npush/npush.cpp: + Also use the leaf matrix here, if there is one. -2020-02-14 15:13 starseeker +2021-01-12 14:36 starseeker - * [r74908] include/brep/pullback.h, src/libbrep/opennurbs_ext.cpp, - src/libged/brep/pick.cpp: - Proof of principle level implementation of an ability to identify - based on a ray/line the closest edge curve to that line. Similar - to nirt's ability to report what's along the shotline, but this - uses bounding boxes around curves in an RTree and subsequent - closest distance between line and curve calculations instead of - ray intersection. Returns the edge id, which can then be viewed - and introspected with the plot and info subcommands. Not - completely sure the ClosestPointToLineSegment - algorithm/implementation are what they should be, but visual - inspection suggests it is functioning well enough to return - useful results for this purpose. + * [r78064] src/libged/tests/push_tests.g: + Add a test with object usage outside tree to push -2020-02-14 14:31 starseeker +2021-01-12 14:10 starseeker - * [r74907] include/brep/cdt.h, include/brep/pullback.h, - src/libbrep/cdt/RTree.h, src/libbrep/opennurbs_ext.cpp, - src/libged/CMakeLists.txt, src/libged/brep/brep.cpp, - src/libged/brep/ged_brep.h, src/libged/brep/pick.cpp, - src/libged/brep/plot.cpp: - checkpoint + * [r78063] src/libged/tests/CMakeLists.txt, + src/libged/tests/push_tests.g: + Start assembling some basic test cases for matrix pushing. -2020-02-14 04:04 starseeker +2021-01-11 22:01 starseeker - * [r74906] include/bg/CMakeLists.txt, include/bg/aabb_ray.h, - src/libbg/CMakeLists.txt, src/libbg/aabb_ray.c: - Start setting up to see if rt_in_rpp can be shifted to libbg for - more general use. + * [r78062] src/libged/npush/npush.cpp: + Report both need-copy and push-matrix-only. -2020-02-13 18:39 starseeker +2021-01-11 19:22 starseeker - * [r74905] src/libged/brep/brep.cpp, src/libged/brep/ged_brep.h, - src/libged/brep/tikz.cpp: - restore tikz output subcommand + * [r78061] src/libged/npush/npush.cpp: + Checkpoint. Slowly working through the conceptual implications of + various forms of push. -2020-02-13 16:39 starseeker +2021-01-08 19:08 starseeker - * [r74904] src/libged/brep/valid.cpp: - Whoops, add the file itself + * [r78060] src/libged/npush/npush.cpp: + checkpoint -2020-02-13 16:22 starseeker +2021-01-08 18:03 starseeker - * [r74903] src/libged/CMakeLists.txt, src/libged/brep/brep.cpp, - src/libged/brep/ged_brep.h, - src/other/openNURBS/BRL-CAD_changes.txt, - src/other/openNURBS/opennurbs_brep.h: - Expose in more detail the validity checks of openNURBS. IsValid - isn't enough - we need the brep helper functions to activate the - necessary logic. + * [r78059] src/libged/npush/npush.cpp: + checkpoint -2020-02-13 15:01 starseeker +2021-01-08 16:10 starseeker - * [r74902] src/libged/brep/info.cpp: - Remove extra brep null checks + * [r78058] src/libged/npush/npush.cpp: + Add a verbosity option - I suspect this type of output may prove + useful in the long run, so let's promote it beyond + development/debugging throwaway code to a feature. -2020-02-13 14:51 starseeker +2021-01-08 16:00 starseeker - * [r74901] src/libged/brep/plot.cpp: - Rather than checking (and rejecting) on the validity of the whole - brep for plotting, check the component in question. + * [r78057] src/libged/npush/npush.cpp: + Checkpoint -2020-02-13 14:35 brlcad +2021-01-08 15:33 starseeker - * [r74900] BUGS: - need to add the tutorial series books to bib + * [r78056] src/libged/npush/npush.cpp: + Checkpoint -2020-02-13 14:18 starseeker +2021-01-07 19:01 brlcad - * [r74899] src/libged/brep/brep.cpp: - don't double print validity result + * [r78055] TODO: + dbconcat appears to be not working even on a simple case -2020-02-13 14:12 starseeker +2021-01-07 17:41 starseeker - * [r74898] src/libged/brep/plot.cpp: - naming tweaks + * [r78054] src/libged/npush/npush.cpp: + Rough in various npush options -2020-02-13 14:02 starseeker +2021-01-07 16:36 starseeker - * [r74897] src/libged/brep/plot.cpp: - The bbox plotting routines take face indices as their specifiers - - rename to indicate that. + * [r78053] src/libged/npush/npush.cpp: + Whoops, commited too many files. Get npush building -2020-02-13 13:56 starseeker +2021-01-07 16:33 starseeker - * [r74896] src/libged/brep/plot.cpp: - Return GED_OK after successful plot + * [r78052] src/libged/npush/npush.cpp, src/libged/which/which.cpp: + Missed ? when enabling help option for which GED cmd. -2020-02-13 13:44 starseeker +2021-01-07 15:27 starseeker - * [r74895] src/libged/brep/plot.cpp: - check for brep once up front + * [r78051] include/ged/commands.h, src/libged/CMakeLists.txt, + src/libged/exec_mapping.cpp, src/libged/npush, + src/libged/npush/CMakeLists.txt, src/libged/npush/npush.cpp, + src/libged/xpush/xpush.c, src/libtclcad/commands.c, + src/mged/setup.c: + Rough in a command for experimenting with push/xpush style logic. -2020-02-13 13:35 starseeker +2021-01-07 14:04 starseeker - * [r74894] src/libged/brep/plot.cpp: - Get all remaining plotting into bu_cmd functions. Still need - cleanup and testing. + * [r78050] src/libanalyze/raydiff.c: + Clean up rtip -2020-02-12 22:09 starseeker +2021-01-07 01:47 starseeker - * [r74893] include/brep/cdt.h, src/libbrep/cdt/fast.cpp, - src/libged/brep/plot.cpp: - more plotting logic moves + * [r78049] src/archer/CMakeLists.txt: + Fix Archer shortcuts -2020-02-12 20:02 starseeker +2021-01-06 23:34 brlcad - * [r74892] src/libged/brep/plot.cpp: - loop and surface plotting + * [r78048] src/util/pixscale.c: + not a fix, but this looks like it's off by one -2020-02-12 01:33 starseeker +2021-01-06 23:33 brlcad - * [r74891] src/conv/step/util/CMakeLists.txt: - fix distcheck + * [r78047] src/util/bwmod.c: + we reopen file descriptors, so really shouldn't be using the + numbers direct. -2020-02-11 13:46 starseeker +2021-01-06 23:32 brlcad - * [r74890] include/gcv/api.h, src/conv/3dm/3dm-g.c, - src/libgcv/plugins/rhino/rhino_read.cpp: - Don't overload debug_mode for color randomization - just add a - purpose specific option var. + * [r78046] TODO: + pixscale aborts premature -2020-02-11 08:59 brlcad +2021-01-06 17:29 starseeker - * [r74889] src/librt/primitives/brep/brep.cpp: - this is still no bueno, but seems to show we are successfully - walking towards the right point (despite 'inverse failed' - blather) + * [r78045] NEWS, src/archer/archer.bat, src/archer/archer.c, + src/mged/CMakeLists.txt, src/mged/mged.bat, src/mged/mged.c, + src/rtwizard/CMakeLists.txt, src/rtwizard/main.c, + src/rtwizard/rtwizard.bat: + Adjust GUI apps default working dir to HOME. + + When launched from a system installed location via icon, the + default + working directory of MGED, Archer and rtwizard gets set to the + bin + directory that holds the executable. This is typically a + read-only + location, which results in a variety of problems when trying to + run + various commands. + + The most typical case where this is a problem is Windows desktop + and + start menu shortcuts. The NSIS installer has a way to adjust the + directory, but the MSI installer generated by WiX is a tougher + nut to + crack. Various experiments have so far failed to identify a + working + approach to adjusting the shortcut startup directories with + CMake/WiX. + Using Windows bat files as launchers works, but using them with + the + MSI installer results in incorrect icons for the desktop + shortcuts + with no obvious way to override them. + + Rather than continue to jump through hoops, just set the working + dir + directly to the user's home directory when these three + applications + are invoked without arguments. This should preserve all existing + behaviors for any scripting cases, but will avoid a read-only + working + directory when using the no-args launch produced by desktop + shortcuts. -2020-02-11 08:32 brlcad +2021-01-06 13:54 starseeker - * [r74888] src/librt/primitives/brep/brep.cpp: - implement a basic adjustment for platemode to clamp the thickness - to within a platemode thickness distance from the surface. this - is not final form, but is working surprisingly as intended. using - an overly simple and inefficient stepping method to walk the los - thickness back; needs newton's method or more aggressive - stepping. + * [r78044] src/archer/CMakeLists.txt, src/archer/archer.bat: + Try an alternative with Archer (untested) -2020-02-11 08:15 brlcad +2021-01-06 13:25 starseeker - * [r74887] include/brep/pullback.h, src/libbrep/opennurbs_ext.cpp: - fix mismatched declaration constness on get_closest_point(), make - face a const ref too. + * [r78043] src/mged/CMakeLists.txt, src/rtwizard/CMakeLists.txt, + src/rtwizard/main.c, src/rtwizard/rtwizard.bat: + Set up similar wrapper for rtwizard to adjust working dir when + invoking from MSI shortcut. Archer is trickier, since all of its + option parsing is in Tcl/Tk right now. -2020-02-10 20:25 starseeker +2021-01-06 09:40 brlcad - * [r74886] src/libged/brep/plot.cpp: - remove some unused defines + * [r78042] TODO: + gdiff appears to be misbehaving -2020-02-10 20:22 starseeker +2021-01-05 20:50 starseeker - * [r74885] src/libged/brep/plot.cpp: - remove some unused code + * [r78041] src/mged/CMakeLists.txt, src/mged/mged.bat: + Grr. Windows bat file test. -2020-02-10 16:48 starseeker +2021-01-05 20:04 starseeker - * [r74884] src/conv/step/util/list_elements.cpp: - formatting + * [r78040] src/mged/mged.c: + Experiment with an option to set working dir. + + Trying to get the MSI installer from WiX to change the working + directory for shortcuts has proven challenging. An alternative + is to allow for the possibility of defining a shortcut that tells + the application itself to change the working directory - untested + as yet. -2020-02-10 16:30 starseeker +2021-01-04 14:55 starseeker - * [r74883] src/libbrep/tests/CMakeLists.txt, - src/libbrep/tests/plate_mode_samples.stp, - src/libbrep/tests/plate_mode_samples_creo.stp, - src/libbrep/tests/plate_mode_samples_rhino.stp: - Thanks to Shannon for exporting the samples from Creo. Looks like - we have two different styles of representing plate surfaces... + * [r78039] CMakeLists.txt: + Need this variable set in CMake, not just the header. Noticed it + because the Windows icons for WiX weren't being set. -2020-02-10 16:01 starseeker +2020-12-20 14:58 starseeker - * [r74882] src/conv/step/util/list_elements.cpp: - Print out sub and super type relationships + * [r78037] src/libged/brep/CMakeLists.txt: + add distclean rule -2020-02-10 15:14 starseeker +2020-12-19 22:11 starseeker - * [r74881] src/conv/step/CMakeLists.txt, - src/conv/step/g-step/CMakeLists.txt, - src/conv/step/g-step/list_elements.cpp, src/conv/step/util, - src/conv/step/util/CMakeLists.txt, - src/conv/step/util/list_elements.cpp: - put list_elements in a util directory - it's not specific to - g-step - -2020-02-10 13:52 starseeker - - * [r74880] src/libbrep/tests/CMakeLists.txt: - fix filenames - -2020-02-10 04:12 brlcad - - * [r74879] src/librt/primitives/brep/brep.cpp: - separate out the platemode thickness evalution into a function. - also, sanitize the user-specified thickness to a positive value. - -2020-02-10 03:00 starseeker - - * [r74878] src/libbrep/tests/CMakeLists.txt, - src/libbrep/tests/ayam_hyperbolid.3dm: - Example hyperbolid shape from Ayam 1.27, defined using 3 - independent surfaces. - -2020-02-10 02:48 starseeker - - * [r74877] src/libbrep/tests/CMakeLists.txt, - src/libbrep/tests/freecad_surface.stp: - Add a FreeCAD exported surface in STEP (AP214 in this case) - it - matches the other plate mode step sample in using - shell_based_surface_model and open_shell for a plate mode object, - which is a good sign. - -2020-02-10 02:27 starseeker - - * [r74876] src/libbrep/tests/CMakeLists.txt, - src/libbrep/tests/vsp.stp: - Add a sample (default wing) STEP export from OpenVSP. Looks like - it's another type of object we don't yet support with step-g - - GEOMETRICALLY_BOUNDED_SURFACE_SHAPE_REPRESENTATION with a - GEOMETRIC_SET. - -2020-02-10 02:15 starseeker - - * [r74875] src/librt/primitives/brep/brep.cpp: - Fix rt_brep_adjust - -2020-02-10 01:40 starseeker - - * [r74874] src/librt/primitives/arb8/arb8_brep.cpp, - src/librt/primitives/arbn/arbn_brep.cpp, - src/librt/primitives/ars/ars_brep.cpp, - src/librt/primitives/bot/bot_brep.cpp, - src/librt/primitives/brep/brep.cpp, - src/librt/primitives/bspline/bspline.cpp, - src/librt/primitives/cline/cline_brep.cpp, - src/librt/primitives/ebm/ebm_brep.cpp, - src/librt/primitives/extrude/extrude_brep.cpp, - src/librt/primitives/hf/hf_brep.cpp, - src/librt/primitives/poly/poly_brep.cpp, - src/librt/primitives/revolve/revolve_brep.cpp, - src/librt/primitives/superell/superell_brep.cpp, - src/librt/primitives/vol/vol_brep.cpp: - fix some Werror=odr (one definition rule) complaints in librt + * [r78031] regress/mged/mged.sh: + MGED now recognizes that a completely empty file isn't a valid .g + file - remove this part of mged.sh -2020-02-09 22:18 starseeker +2020-12-19 18:00 starseeker - * [r74873] src/libged/brep/plot.cpp: - checkpoint + * [r78028] NEWS, src/mged/set.c: + Wrong level of indirection passing the struct to parsing was + breaking reporting for MGED 'vars' command. Also report rc + setting. -2020-02-09 22:10 starseeker +2020-12-19 17:41 starseeker - * [r74872] src/libged/brep/info.cpp: - remove last of old info code + * [r78027] src/libdm/dm_init.cpp, src/libged/ged_init.cpp: + More memory cleanup -2020-02-09 22:07 starseeker +2020-12-19 17:34 starseeker - * [r74871] include/rt/comb.h, src/librt/comb/comb_brep.cpp: - fix rt_comb_brep definition for Windows + * [r78026] src/libtclcad/auto_path.c: + Do some memory cleanup -2020-02-09 21:47 starseeker +2020-12-19 15:35 starseeker - * [r74870] src/libged/brep/plot.cpp: - Start working on isosurfaces... + * [r78025] TODO: + Note history found to date to serve as starting point for further + debugging. -2020-02-09 21:28 starseeker +2020-12-19 15:32 starseeker - * [r74869] src/libged/brep/plot.cpp: - enable some more plotting elements + * [r78024] NEWS, TODO, src/mged/mged.c: + If a file doesn't report a valid .g header, don't keep opening it + in MGED. -2020-02-09 21:00 starseeker +2020-12-19 15:14 starseeker - * [r74868] src/libged/brep/plot.cpp: - ditch the commtab/namebuf fixed size arrays + * [r78023] TODO: + Ditto bu_brlcad_root - commits need review, but should be removed + now. -2020-02-09 20:57 starseeker +2020-12-19 15:11 starseeker - * [r74867] src/libged/brep/brep.cpp, src/libged/brep/ged_brep.h, - src/libged/brep/plot.cpp: - Start working on hooking up plotting routines. + * [r78022] TODO: + Commits need review, but bu_argv0_full_path should now be + eliminated from BRL-CAD's code (except the deprecated function + itself.) -2020-02-09 20:37 starseeker +2020-12-19 15:06 starseeker - * [r74866] src/libged/brep/info.cpp: - fix which upper bound each type is checking + * [r78021] CHANGES, include/bu/exit.h, src/libbu/backtrace.c, + src/libbu/crashreport.c: + In the two cases where we may want/need a full path to an + executable that can't be deduced by libbu (external user of libs + with an applicaton location not in the CAD dirs) provide versions + of the functions where the caller can pass in the path, per the + TODO item. Set up deprecation so we can eventually eliminate the + old form in favor of the new. -2020-02-09 20:26 starseeker +2020-12-19 03:27 starseeker - * [r74865] src/libged/brep/info.cpp: - migrate info code to the new setup + * [r78020] src/libged/gqa/gqa.cpp: + I think sem_lists wasn't being initialized for gqa? -2020-02-09 20:00 starseeker +2020-12-19 00:22 starseeker - * [r74864] src/libged/brep/brep.cpp, src/libged/brep/ged_brep.h, - src/libged/brep/info.cpp: - index parsing will be needed for plot as well + * [r78019] CHANGES: + List bu_brlcad_root and bu_brlcad_dir for deprecation. -2020-02-09 19:56 starseeker +2020-12-19 00:18 starseeker - * [r74863] src/libged/brep/info.cpp: - Start populating the info functions + * [r78018] + src/archer/plugins/Utility/attrGroupsDisplayUtilityP.tcl, + src/archer/plugins/Utility/botUtilityP.tcl, + src/archer/plugins/Utility/lodUtilityP.tcl, + src/archer/plugins/Wizards/humanwizard.tcl, src/gtools/gsh.cpp, + src/libanalyze/tests/nhit.cpp, src/libbu/dir.c, + src/util/morphedit.tcl: + Remainder of bu_brlcad_root -> bu_dir changes -2020-02-09 18:31 starseeker +2020-12-19 00:13 starseeker - * [r74862] src/libged/brep/brep.cpp, src/libged/brep/info.cpp, - src/libged/brep/plot.cpp: - options are specified before subcommand + * [r78017] src/archer/plugins/Wizards/tankwizard.tcl, + src/archer/plugins/Wizards/tirewizard.tcl, src/brlman/brlman.tcl, + src/burst/burst.cpp, src/libdm/osgl/dm-osgl.cpp, + src/libdm/osgl/if_osgl.cpp, + src/librt/primitives/primitive_util.c, src/qged/cadimport.cpp: + More bu_brlcad_root changes -2020-02-09 18:23 starseeker +2020-12-19 00:03 starseeker - * [r74861] src/libged/brep/info.cpp, src/libged/brep/plot.cpp: - Fix build (commented out too much), tweak option handling + * [r78016] src/tclscripts/lib/RtImage.tcl, + src/tclscripts/lib/gui_conversion.tcl, + src/tclscripts/mged/asc2g.tcl, src/tclscripts/mged/dbupgrade.tcl, + src/tclscripts/mged/g2asc.tcl, src/tclscripts/mged/help.tcl, + src/tclscripts/mged/man.tcl, src/tclscripts/mged/mged.tcl, + src/tclscripts/mged/mike.tcl, src/tclscripts/mged/openw.tcl, + src/tclscripts/mged/points.tcl, src/tclscripts/mged/rt.tcl, + src/tclscripts/mged/shaders.tcl: + More bu_dir conversions -2020-02-09 18:12 starseeker +2020-12-18 23:52 starseeker - * [r74860] src/libged/brep/brep.cpp, src/libged/brep/plot.cpp: - Stub in a similar framework for the plot subcommand. + * [r78015] src/tclscripts/lib/Ged.tcl, + src/tclscripts/lib/GeometryIO.tcl, + src/tclscripts/rtwizard/lib/FbPage.itk, + src/tclscripts/rtwizard/lib/PictureTypeA.itcl, + src/tclscripts/rtwizard/lib/PictureTypeB.itcl, + src/tclscripts/rtwizard/lib/PictureTypeC.itcl, + src/tclscripts/rtwizard/lib/PictureTypeD.itcl, + src/tclscripts/rtwizard/lib/PictureTypeE.itcl, + src/tclscripts/rtwizard/lib/PictureTypeF.itcl: + Update some rtwizard and Ged Tcl files to use bu_dir, convert + GeometryIO as well. -2020-02-09 17:20 starseeker +2020-12-18 23:35 starseeker - * [r74859] src/libged/brep/brep.cpp, src/libged/brep/ged_brep.h, - src/libged/brep/info.cpp: - Stub in a command framework for the info subcommand of brep + * [r78014] src/tclscripts/archer/ArcherCore.tcl, + src/tclscripts/archer/ShaderEdit.tcl, + src/tclscripts/rtwizard/rtwizard: + bu_brlcad_root -> bu_dir in rtwizard, misc Tcl files -2020-02-09 15:58 starseeker +2020-12-18 23:30 starseeker - * [r74858] src/libged/brep/brep.cpp: - use the pattern for help messages. + * [r78013] src/tclscripts/archer/Archer.tcl: + bu_brlcad_root -> bu_dir in Archer.tcl -2020-02-09 15:42 starseeker +2020-12-18 23:23 starseeker - * [r74857] src/libged/brep/brep.cpp, - src/libged/brep/conversion.cpp, src/libged/brep/csg.cpp, - src/libged/brep/info.cpp, src/libged/brep/intersect.cpp, - src/libged/brep/plot.cpp, src/libged/brep/tikz.cpp: - fix headers + * [r78012] src/tclscripts/geometree/GeometryBrowser.tcl, + src/tclscripts/igraph/GraphEditor.tcl, + src/tclscripts/man_browser.tcl: + More Tcl bu_brlcad_root -> bu_dir updates -2020-02-09 15:36 starseeker +2020-12-18 23:19 starseeker - * [r74856] src/libged/CMakeLists.txt, src/libged/brep/csg.cpp, - src/libged/brep/plot_tikz.cpp, - src/libged/brep/shape_recognition.cpp, src/libged/brep/tikz.cpp: - rename + * [r78011] src/archer/archer_launch.tcl: + Replace bu_brlcad_root with bu_dir in the Archer launch script. -2020-02-09 15:26 starseeker +2020-12-18 22:12 starseeker - * [r74855] src/libbrep/cdt/cdt.h, src/libbrep/cdt/fast.cpp: - use the cdt.h version of brep_cdt_tol + * [r78010] include/bu/app.h, src/adrt/isst.c, src/archer/archer.c, + src/brlman/brlman.c, src/libbu/vfont.c, src/libged/help/help.cpp, + src/libged/rt/rt.c, src/libged/rtcheck/rtcheck.c, + src/libged/rtwizard/rtwizard.c, src/libtclcad/bu.c, + src/mged/mged.c, src/mged/plot.c, src/nirt/main.cpp, + src/nirt/nirt.c, src/rtwizard/main.c, src/util/plot3-dm.c: + First cut at deprecating bu_brlcad_root and bu_brlcad_dir. Needs + more review and testing, particularly the libtclcad wrappers that + are having to be emulated. -2020-02-09 14:19 starseeker +2020-12-18 21:33 starseeker - * [r74854] include/bu/CMakeLists.txt, src/libbrep/CMakeLists.txt: - list files for distcheck + * [r78009] include/bu/app.h, src/libbu/backtrace.c, + src/libbu/brlcad_path.c, src/libbu/crashreport.c, + src/libbu/dir.c, src/libbu/tests/progname.c, + src/libbu/whereami.h, src/mged/setup.c: + Apply DEPRECATED to bu_argv0_full_path. Update instances of its + use in our code to use other information - needs review, + particularly the libbu crash and backtrace pieces. -2020-02-09 04:53 starseeker +2020-12-18 20:29 starseeker - * [r74853] src/libged/brep/brep.cpp: - There's a pattern here... + * [r78008] NEWS: + Erratic I/O on the MGED command prompt observed on Mac OSX and + (possibly) Windows was due to incorrect management of I/O + channels in the libtclcad library. -2020-02-09 03:14 starseeker +2020-12-18 20:27 starseeker - * [r74852] include/brep/util.h, src/libbrep/tools/util.cpp, - src/libged/brep/brep.cpp, src/librt/CMakeLists.txt, - src/librt/primitives/brep/brep_debug.cpp, src/mged/setup.c: - More work to do (info and plot need help messages and - restructuring, not sure if selection is still working) but close - enough to swap in the new brep command code. Allows for the - removal of brep_debug.cpp - aside from rt_brep_boolean it looks - like the messy bits of the brep command reaching into the - internals of librt should now be gone. + * [r78007] TODO: + Think the asynchronous I/O has been fixed - turned out to be an + incorrect fix to a typo in the libtclcad management logic. Added + a stdout handler when it wasn't needed, which avoided a crash due + to the original issue but introduced other problems. -2020-02-08 21:55 starseeker +2020-12-18 20:24 starseeker - * [r74851] src/libged/brep/brep.cpp: - Teach the subcommands to contribute their information back to the - parent help command to generate the overall assembled help. + * [r78006] NEWS, doc/docbook/system/mann/facetize.xml: + Update facetize man page with examples showing the use of the + decimation-feature-size option in CM mode. -2020-02-08 21:27 starseeker +2020-12-18 19:57 starseeker - * [r74850] src/libged/brep/brep.cpp: - stub in a way to report help per-command (need to populate most - of them, but the calls work.) + * [r78005] TODO: + Make a note to look into the MGED vars command behavior. -2020-02-08 20:43 starseeker +2020-12-18 18:28 starseeker - * [r74849] src/libged/brep/brep.cpp, src/libged/brep/ged_brep.h: - Work on help messages a bit. + * [r78004] TODO: + Postpone libbu/librt timer merge - need to shake down new librt + timer implementation first. -2020-02-08 20:15 starseeker +2020-12-18 17:15 starseeker - * [r74848] src/libged/brep/brep.cpp, src/libged/brep/ged_brep.h, - src/libged/brep/plot.cpp: - Fix plot colors + * [r78003] src/gtools/tests/CMakeLists.txt: + Adjust path, define in one location -2020-02-08 18:57 starseeker +2020-12-18 17:11 starseeker - * [r74847] src/libged/brep/brep.cpp, src/libged/brep/plot.cpp: - Colors aren't right yet, but checkpoint some work on plotting + * [r78002] src/gtools/tests/CMakeLists.txt, + src/libged/tests/CMakeLists.txt: + As defined this is actually a gqa test, not a libged test. -2020-02-08 18:19 starseeker +2020-12-18 17:07 starseeker - * [r74846] src/libged/brep/brep.cpp, src/libged/brep/info.cpp: - Get the info argc/argv checks fixed for the new setup + * [r78001] src/libged/tests/CMakeLists.txt, + src/libged/tests/ged_tests.g: + Add CTest tests to exercise gqa plotting and check the validity + of its output. As expected based on user report, we have a + failure in the multithreaded case. If I recall correctly, when I + looked at this previously it is a regression - need to get it + working before patch release. -2020-02-08 17:51 starseeker +2020-12-18 15:38 starseeker - * [r74845] include/brep/cdt.h, src/libbrep/CMakeLists.txt, - src/libbrep/cdt/fast.cpp, src/libged/brep/plot.cpp, - src/librt/CMakeLists.txt, src/librt/primitives/brep/brep.cpp, - src/librt/primitives/brep/brep_cdt.cpp, - src/librt/primitives/brep/brep_debug.cpp, - src/librt/primitives/brep/brep_local.h: - pull the original CDT drawing code fully out of librt as well. + * [r78000] src/libbn/tests/CMakeLists.txt, src/libbn/tests/plot3.c: + Enable the bn_plot3 tests. These simply check the ability to + detect valid and invalid plot3 files successfully, but that's a + foundation for being able to detect invalid plot3 output from + other routines down the road... -2020-02-08 16:49 starseeker +2020-12-18 15:17 starseeker - * [r74844] src/libged/CMakeLists.txt, src/libged/brep/brep.cpp, - src/libged/brep/ged_brep.h, src/libged/brep/intersect.cpp, - src/libged/brep/plot.cpp: - First try at the plotting routines, which are the most difficult - of the extractions. + * [r77999] src/other/CMakeLists.txt: + Getting a stray toplevel target in MSVC -2020-02-08 15:23 starseeker +2020-12-18 04:10 starseeker - * [r74843] src/libged/CMakeLists.txt, src/libged/brep/brep.cpp, - src/libged/brep/ged_brep.h, src/libged/brep/info.cpp: - Add rough cut at the info logic. + * [r77998] src/libtclcad/command_io.cpp: + Whoops, weren't checking cstderr -2020-02-08 14:59 starseeker +2020-12-18 04:02 starseeker - * [r74842] include/rt/comb.h, src/libged/CMakeLists.txt, - src/libged/brep/brep.cpp, src/libged/brep/conversion.cpp, - src/libged/brep/ged_brep.h, src/libged/brep/intersect.cpp, - src/librt/comb/comb_brep.cpp, - src/librt/primitives/brep/brep_debug.cpp: - Begin extracting the brep_debug logic from librt - some of this - belongs in libbrep, but for a first pass let's get it into libged + * [r77997] src/libtclcad/command_io.cpp: + typo -2020-02-08 13:56 starseeker +2020-12-18 03:58 starseeker - * [r74841] src/libged/CMakeLists.txt, src/libged/brep/brep.cpp, - src/libged/brep/ged_brep.h, src/libged/brep/plot_tikz.cpp: - break tikz logic out into its own file + * [r77996] include/ged/defines.h, src/libged/ged_util.c, + src/libged/rtcheck/rtcheck.c, src/libged/rtwizard/rtwizard.c, + src/libtclcad/command_io.cpp: + Setting a _ged_rt_output_handler on BU_PROCESS_STDOUT was + breaking the Mac. Try a different approach. -2020-02-08 13:47 starseeker +2020-12-17 21:41 starseeker - * [r74840] src/libged/CMakeLists.txt, src/libged/brep/brep.cpp, - src/libged/brep/ged_brep.h, src/libged/brep/ged_private.h: - rename + * [r77995] NEWS, TODO, src/conv/gcv/gcv.c, src/libgcv/gcv.c: + If an existing .g file is supplied to gcv, rather than quitting + append to it. This involves changing libgcv's logic to append to + rather than replacing an existing .g file. -2020-02-08 13:44 starseeker +2020-12-17 21:10 starseeker - * [r74839] src/libged/CMakeLists.txt, src/libged/brep, - src/libged/brep.cpp, src/libged/brep/brep.cpp, - src/libged/brep/ged_private.h, - src/libged/brep/shape_recognition.cpp, src/libged/ged_private.h, - src/libged/shape_recognition.cpp: - shift brep to a subdirectory + * [r77994] TODO, src/libged/concat/concat.cpp: + db_diradd wasn't setting the d_major_type correctly during + db_concat. Looks like this wasn't an issue in 7.32.0, so doesn't + need a news item. -2020-02-08 13:32 starseeker +2020-12-17 20:40 starseeker - * [r74838] src/libged/brep.cpp: - Rough in a few more brep subcommands + * [r77993] TODO: + MGED nirt command line needs a bit of design thought - should be + a subprocess like rt and friends so it can be aborted at need, + but it will need I/O management like rtcheck to get the drawing + elements back to MGED. -2020-02-08 01:28 starseeker +2020-12-17 20:30 starseeker - * [r74837] src/libged/brep.cpp: - Fill in some more subcommands - not to the hard ones yet... + * [r77992] TODO: + More bumping of tasks not scoped/needed for a patch release. -2020-02-07 22:15 starseeker +2020-12-17 20:22 starseeker - * [r74836] src/libged/brep.cpp: - basic type validations are fairly consistent + * [r77991] TODO: + Bump a number of issues too large for current patch release. -2020-02-07 22:08 starseeker +2020-12-17 20:20 starseeker - * [r74835] include/bu/cmd.h, include/ged/commands.h, - src/libbu/cmd.c, src/libged/brep.cpp, src/mged/setup.c: - Begin working on mapping out an overdue organization of the brep - subcommand logic. + * [r77990] NEWS, TODO, doc/docbook/system/mann/quit.xml, + src/mged/cmd.c, src/tclscripts/mged/mview.tcl: + Update the MGED quit command to not quit by default if there are + active GED subprocesses. Support a '-f' option to force quitting + anyway, and print out information on how to identify running + processes if not quitting. -2020-02-07 20:08 starseeker +2020-12-17 19:44 starseeker - * [r74834] src/libged/brep.cpp: - put simpler function code into main block + * [r77989] NEWS, TODO, src/tclscripts/mged/openw.tcl: + Remove a variety of menu entries from MGED + + Removed from MGED's menu bar (unused features, can be + accomplished + another way, or should be exposed only as lower level settings + when + there are sensible defaults that seldom change): + + ViewRing menu and entries. + Modes->Persistent Sweep Rectangle + Modes->Collaborate + Modes->Rateknobs + Settings->Mouse Behavior->Sweep Raytrace-Rectangle + Settings->Mouse Behavior->Sweep Paint-Rectangle + Settings->Mouse Behavior->Sweep Zoom-Rectangle + Settings->Apply To->Local Panes + Settings->Apply To->Listed Panes + Settings->Framebuffer->Rectangle Area + + There are others on the TODO list, but they pertain a little more + directly to features known to be in use (lighting, display lists, + key forwarding) so those need a little more care to be sure the + alternative ways of managing them work and are documented - bump + them down to the next release iteration. -2020-02-07 20:00 starseeker +2020-12-17 19:28 starseeker - * [r74833] src/libged/brep.cpp: - fix comments + * [r77988] src/mged/set.c: + Make sure dlp2 is non-NULL -2020-02-07 19:47 starseeker +2020-12-17 18:35 starseeker - * [r74832] src/libged/facetize.cpp: - HIDDEN -> static + * [r77987] src/tclscripts/mged/openw.tcl: + Remove MGED ViewRing menu and entries. -2020-02-07 19:40 starseeker +2020-12-17 18:25 starseeker - * [r74831] src/libged/brep.cpp, src/libged/ged_private.h, - src/libged/shape_recognition.cpp: - move misc. functions out of shape_recognition.cpp + * [r77986] TODO: + Done - gcv plugins relocated to libexec. -2020-02-07 19:35 starseeker +2020-12-17 18:25 starseeker - * [r74830] src/libged/CMakeLists.txt, src/libged/brep.c, - src/libged/brep.cpp: - C -> C++ + * [r77985] TODO: + Proper embedded rasterizing backend will take time - not scoped + for this patch release. -2020-02-07 16:33 starseeker +2020-12-17 17:34 starseeker - * [r74829] src/conv/step/STEPWrapper.cpp: - put back the shape_representation_relationship case + * [r77984] src/librt/gdiam/gdiam.cpp: + Use the fabs function for long double (fabsl) -2020-02-07 16:27 starseeker +2020-12-17 17:31 starseeker - * [r74828] src/conv/step/STEPWrapper.cpp, - src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.h, - src/conv/step/step-g/OpenNurbsInterfaces.cpp, - src/conv/step/step-g/ShellBasedSurfaceModel.cpp, - src/conv/step/step-g/ShellBasedSurfaceModel.h: - First successful writing of (some of) the plate mode examples. - Not correct yet. + * [r77983] bench/pixcmp.c: + Older clang on OSX doesn't like these initializers -2020-02-07 15:54 starseeker +2020-12-17 17:24 starseeker - * [r74827] src/conv/step/STEPWrapper.cpp, - src/conv/step/step-g/Representation.cpp, - src/conv/step/step-g/Representation.h: - checkpoint + * [r77982] src/libbg/spsr/SPSR.cpp: + this warning is only in newer clang versions -2020-02-07 02:38 starseeker +2020-12-17 15:03 starseeker - * [r74826] src/conv/step/STEPWrapper.cpp: - Will need different logic to write out the plate mode solids... + * [r77981] src/tclscripts/mged/mview.tcl: + Recognize when all the windows are gone - if that's what has + happened, we're shutting down the application. -2020-02-06 21:15 starseeker +2020-12-17 15:00 starseeker - * [r74825] src/libbrep/tests/CMakeLists.txt, - src/libbrep/tests/plate_mode_samples.stp: - Add STEP AP203 version of plate mode test cases + * [r77980] src/tclscripts/mged/openw.tcl: + Ah. open_cmd_win was missing the global identification of + mged_gui, so the state setting wasn't happening correctly. -2020-02-06 20:45 starseeker +2020-12-17 14:57 starseeker - * [r74824] src/conv/step/step-g/ShellBasedSurfaceModel.cpp, - src/conv/step/step-g/ShellBasedSurfaceModel.h: - Getting a bit further now, but not yet producing geometry in the - .g file + * [r77979] src/tclscripts/mged/openw.tcl: + Checkpoint some Tcl/Tk tracing logic to try and debug an + unexpected behavior with variable setting. -2020-02-06 18:27 starseeker +2020-12-16 16:29 starseeker - * [r74823] src/conv/step/step-g/OpenShell.cpp, - src/conv/step/step-g/ShellBasedSurfaceModel.cpp: - Getting as far as passing an e_open_shell type test... + * [r77978] doc/README.Windows: + Add notes for showIncludes and WinDbg. -2020-02-06 15:30 starseeker +2020-12-16 14:43 starseeker - * [r74822] src/conv/step/step-g/CMakeLists.txt, - src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.cpp, - src/conv/step/step-g/OpenShell.cpp, - src/conv/step/step-g/OpenShell.h, - src/conv/step/step-g/ShellBasedSurfaceModel.cpp, - src/conv/step/step-g/ShellBasedSurfaceModel.h: - Get as far as trying to read geometry, but not working yet. + * [r77974] CMakeLists.txt: + Fix logic for when to add optimization flags. Multiconfig builds + were never possible on Linux before Ninja Multi-Config, so this + logic was never actually exercised properly in that mode. -2020-02-06 14:25 starseeker +2020-12-15 19:10 starseeker - * [r74821] src/conv/step/step-g/CMakeLists.txt, - src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.cpp, - src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.h, - src/conv/step/step-g/OpenNurbsInterfaces.cpp: - Start working on mapping out how STEP AP203 defines plate mode - surfaces. + * [r77970] misc/repoconv/github_ci_actions.yml: + Update the github CI script to specify verbose ExternalProject + output. -2020-02-06 01:38 starseeker +2020-12-11 14:16 starseeker - * [r74820] src/libanalyze/nirt.cpp: - Interesting. The shot xyz 50 50 0; ae 270 90 on half_sphere.s in - the plate mode example is causing nan/inf results to be - generated. Rather than fail nirt, continue reporting. + * [r77959] src/external/Creo/creo-brl.h, src/external/Creo/csg.cpp, + src/external/Creo/shim.cpp, src/external/Creo/shim.h, + src/external/Creo/util.cpp: + Apply patch #560 from William Chambers updating usage of + ProToolkit APIs. (Minor adjustments were made to the shim.h and + shim.cpp files supplied with the patch.) -2020-02-06 01:27 starseeker +2020-12-10 18:19 starseeker - * [r74819] regress/nurbs/CMakeLists.txt: - Add a plate mode length test while we're at it. + * [r77956] src/tclscripts/CMakeLists.txt: + Skip the index_gen.log file and just print the output to the + usual I/O channels. In CI we can't see the log contents. -2020-02-06 01:20 starseeker +2020-12-10 17:12 starseeker - * [r74818] regress/nurbs/CMakeLists.txt, regress/nurbs/sph.g: - Add a regression test that checks the shotline segment length of - a known shot through a known brep object of known size. This - checks the solidity of the raytrace, not just hit/miss. + * [r77955] NEWS, src/libbrep/cdt/fast.cpp: + Fix check for null vls when trying to write out debug message + when shading invalid brep objects. Was causing a crash. -2020-02-05 23:37 brlcad +2020-12-10 15:26 starseeker - * [r74817] src/librt/primitives/brep/brep.cpp: - we make a copy of the hits list and clear it for apparently no - reason. removing this improves performance about 3-5% (debug - build). + * [r77954] misc/repoconv/github_ci_actions.yml: + Packages are taking a lot of space - skip for now. -2020-02-05 23:24 brlcad +2020-12-08 16:37 starseeker - * [r74816] src/librt/primitives/brep/brep.cpp: - bizzare these unused vars are not getting reported + * [r77950] src/conv/step/STEPWrapper.cpp, + src/conv/step/g-step/Assembly_Product.cpp, + src/conv/step/g-step/Default_Geometric_Context.cpp, + src/conv/step/g-step/ON_NurbsCurve.cpp, + src/conv/step/g-step/ON_NurbsSurface.cpp, + src/conv/step/step-g/BSplineCurveWithKnots.cpp, + src/conv/step/step-g/BSplineSurfaceWithKnots.cpp, + src/conv/step/step-g/CartesianPoint.cpp, + src/conv/step/step-g/Direction.cpp, + src/conv/step/step-g/RationalBSplineCurve.cpp, + src/conv/step/step-g/RationalBSplineSurface.cpp, + src/conv/step/step-g/ShellBasedSurfaceModel.cpp, + src/conv/step/step-g/SurfaceCurve.cpp, + src/conv/step/step-g/TrimmedCurve.cpp, + src/conv/step/util/list_elements.cpp, + src/other/stepcode/src/clstepcore/STEPattribute.cc, + src/other/stepcode/src/clstepcore/STEPattribute.h, + src/other/stepcode/src/clstepcore/sdaiApplication_instance.cc, + src/other/stepcode/src/clstepcore/sdaiApplication_instance.h: + Revert compatibility changes for upstream stepcode. + + After discussions with Sean, it's not clear these methods would + be + regarded as best practice and we may simply change upstream to + re-expose the direct pointers. + + Also, rather than altering our copy, the promising results with + the + extbuild experiments suggest it is time to look at getting back + in + sync with upstream. However, rather than doing this in extbuild + and conflating it with those changes, the decision is to do the + stepcode sync in a separate branch. This will allow for easier + testing and change review. -2020-02-05 22:33 brlcad +2020-12-08 09:11 brlcad - * [r74815] TODO: - consider replacing los with span to reduce confusion + * [r77948] TODO: + remove the conflict divider -2020-02-05 21:27 starseeker +2020-12-07 17:03 starseeker - * [r74814] src/libanalyze/tests/nhit.cpp: - Add ability to check for an expected los from an object + * [r77945] src/librt/primitives/arbn/arbn.c: + Initialize -2020-02-05 20:25 starseeker +2020-12-07 16:55 starseeker - * [r74813] NEWS, src/librt/primitives/brep/brep.cpp: - Ouch. r74458 incorrectly simplified the KODDHIT ifdefs/ifndefs - when putting the solid shotlining code back in, and the 'solid' - hits were always reporting zero length segments. Deceptive in - image generation since the first hit point and normal were - correct, but there was no solid segment behind the first hit for - reporting solid segments. + * [r77944] src/libbg/spsr/Octree.inl: + Initialize -2020-02-05 16:57 brlcad +2020-12-07 16:42 starseeker - * [r74812] src/libged/typein.c: - patch update from jeff corrects copy-paste error. fortunately, - the values are identical, but this corrects the symbol name being - used + * [r77943] src/libbg/spsr/MultiGridOctreeData.IsoSurface.inl: + Initialize -2020-02-05 16:42 brlcad +2020-12-07 16:40 starseeker - * [r74811] src/librt/primitives/brep/brep.cpp: - clean up logging, avoid deferring and copying the IsValid output - twice before displaying, just let it display. use less ambiguous - names for the logging contexts. + * [r77942] include/brep/defines.h, + src/conv/step/step-g/OpenNurbsInterfaces.cpp: + Use GCC_PREREQ from common.h (thanks Sean) -2020-02-05 16:10 starseeker +2020-12-07 15:41 starseeker - * [r74810] include/rt/geom.h, include/rt/primitives/brep.h, - src/libged/brep.c, src/libged/ged_private.h, - src/libged/shape_recognition.cpp: - Go more aggressive with plate mode assignment for NURBS - - anything valid and not solid is plate mode. Assess plate mode - status at prep time rather than at initial load. + * [r77941] src/conv/step/step-g/OpenNurbsInterfaces.cpp: + One more newer GCC guard -2020-02-05 16:10 starseeker +2020-12-07 15:36 starseeker - * [r74809] src/librt/primitives/brep/brep.cpp: - Go more aggressive with plate mode assignment for NURBS - - anything valid and not solid is plate mode. Assess plate mode - status at prep time rather than at initial load. + * [r77940] include/brep/defines.h, + src/libbg/spsr/MarchingCubes.cpp: + Another newer-GCC only warning -2020-02-05 15:59 brlcad +2020-12-07 15:26 starseeker - * [r74808] src/librt/primitives/brep/brep.cpp: - instead of providing a text string that will be sunk / dumped, - just give NULL. considerable faster. decrease an indentation - level for readability. + * [r77939] src/libbg/spsr/MarchingCubes.cpp: + This flag was introduced recently, and we may still see older + GCCs on some platforms. -2020-02-05 01:04 brlcad +2020-12-07 03:54 starseeker - * [r74807] src/librt/primitives/ebm/ebm.c: - use proper alloc pointer castings for c++ compat + * [r77938] src/other/CMakeLists.txt: + Ah, right - need to set the correct enabling var for FindTCL with + the new setup. -2020-02-04 23:07 starseeker +2020-12-06 17:56 starseeker - * [r74806] regress/nurbs/CMakeLists.txt: - Define a near tangent hit shot for a plate mode NURBS rcc - this - shot is currently reporting a much longer line of sight than - expected. + * [r77937] misc/CMake/ThirdParty_TCL.cmake: + If wishcmd is set to a build target, we can't test since the + executable doesn't exist yet. -2020-02-04 14:30 starseeker +2020-12-06 05:41 starseeker - * [r74805] src/libbrep/cdt2/cdt.cpp: - add the search callback + * [r77936] src/other/tcl/CMake/tcl.cmake: + Put back TCL_CHECK_INCLUDE_FILE -2020-02-04 14:13 starseeker +2020-12-05 19:48 starseeker - * [r74804] src/libbrep/cdt2/mesh.cpp: - whoops, missed a file + * [r77935] src/other/tk/CMakeLists.txt: + Just point directly to where tcl is located -2020-02-04 07:10 brlcad +2020-12-05 18:26 starseeker - * [r74803] include/rt/geom.h, src/libged/typein.c, - src/librt/primitives/ebm/ebm.c, src/libwdb/ebm.c, - src/mged/edsol.c: - apply sf patch #539 from Jeff Liu that implements support for - supplying EBM data from binary objects. some changes to the patch - included implementing support for adjust and reordering - initialization in other places to ensure datasrc is always set. + * [r77933] misc/CMake/scripts/tcl_mkindex.cmake: + Work around an issue passing in spaces in pathnames. -2020-02-04 05:37 brlcad +2020-12-04 20:07 starseeker - * [r74802] src/librt/primitives/eto/eto.c: - limit the maximum number of times we'll recurse into - make_ellipse4() to try and avoid blowing out the stack - catastrophically when facetizing, plotting, and othrwise needing - to get data in a robust and maintainable manner. + * [r77932] misc/repoconv/NOTES: + Stash a few links documenting other conversion efforts. -2020-02-03 21:37 starseeker +2020-12-04 18:49 starseeker - * [r74801] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/edge.cpp: - checkpoint + * [r77931] src/libtclcad/auto_path.c, src/other/CMakeLists.txt: + Supply and use ITK_VERSION, instead of assuming ITCL and ITK + match exactly. -2020-02-03 19:46 brlcad +2020-12-04 18:43 starseeker - * [r74800] BUGS: - eto facetization badness. + * [r77930] misc/tools/dom2dox/CMake/FindLEMON.cmake, + misc/tools/dom2dox/CMake/FindPERPLEX.cmake: + Update dom2dox copies as well... -2020-02-03 19:42 brlcad +2020-12-04 18:40 starseeker - * [r74799] BUGS: - obj export might have some issue. needs looking into but seems - confirmed at least with bot_dump. did not test g-obj. + * [r77929] misc/CMake/CMakeLists.txt, misc/CMake/FindLEMON.cmake, + misc/CMake/FindNETPBM.cmake, misc/CMake/FindOPENNURBS.cmake, + misc/CMake/FindPERPLEX.cmake, misc/CMake/FindRE2C.cmake, + misc/CMake/FindSSE.cmake, misc/CMake/FindTCL.cmake, + misc/CMake/FindUTAHRLE.cmake, src/external/Creo/CMakeLists.txt, + src/external/Cubit/CMakeLists.txt, + src/external/Unigraphics/CMakeLists.txt, + src/libbg/CMakeLists.txt, src/libbrep/CMakeLists.txt, + src/libbu/CMakeLists.txt, src/libdm/wgl/CMakeLists.txt, + src/libgcv/plugins/gdal/CMakeLists.txt, + src/libgcv/plugins/obj/wfobj/CMake/FindLEMON.cmake, + src/libgcv/plugins/obj/wfobj/CMake/FindPERPLEX.cmake, + src/libtclcad/CMakeLists.txt, src/mged/CMakeLists.txt, + src/other/CMakeLists.txt, src/rt/CMakeLists.txt, + src/rtwizard/CMakeLists.txt, src/util/CMakeLists.txt: + Pull in the majority (though not quite all) of the Find* module + updates and their associated CMakeLists.txt adjustments from + extbuild, altering the existing src/other/CMakeLists.txt to + define the newer variables in a couple of cases. -2020-02-03 19:35 starseeker +2020-12-04 17:06 starseeker - * [r74798] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h: - checkpoint + * [r77928] src/conv/step/ap203e2-g/CMakeLists.txt, + src/conv/step/ap214-g/CMakeLists.txt, + src/conv/step/ap242-g/CMakeLists.txt, + src/conv/step/g-ap203e2/CMakeLists.txt, + src/conv/step/g-ap214/CMakeLists.txt, + src/conv/step/g-ap242/CMakeLists.txt, + src/conv/step/g-step/CMakeLists.txt, + src/conv/step/ifc-g/CMakeLists.txt, + src/conv/step/step-g/CMakeLists.txt, + src/conv/step/util/CMakeLists.txt: + Incorporate what should (currently) be no-op CMake changes for + step converters from extbuild. -2020-02-03 17:50 starseeker +2020-12-04 15:23 starseeker - * [r74797] src/libbrep/CMakeLists.txt, src/libbrep/cdt2/cdt.cpp, - src/libbrep/cdt2/cdt.h: - checkpoint + * [r77926] misc/CMake/CMakeLists.txt, + misc/CMake/TCL_PKGINDEX.cmake, + misc/CMake/scripts/tcl_mkindex.cmake: + Bring in the other CMake logic updates for tclscript index files. -2020-02-03 15:42 starseeker +2020-12-04 14:59 starseeker - * [r74796] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/vert.cpp: - start looking at rtree insertion/removal + * [r77925] src/tclscripts/CMakeLists.txt: + Whoops - need the update to the tclscript logic for proper use of + CMAKE_CFG_INTDIR and $ -2020-02-03 05:07 starseeker +2020-12-04 02:37 starseeker - * [r74795] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/edge.cpp: - checkpoint + * [r77923] TODO: + Remove old CMake note -2020-02-02 21:38 starseeker +2020-12-04 02:26 starseeker - * [r74794] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h: - Put the initialization into methods for less verbose code and - more organized steps. + * [r77922] TODO: + If the new approach to zlib and png continues to work, this is + probably not worth doing anytime soon. If third party libs begin + supporting their use we can consider it, but to really make it + word we'd have to update all of them ourselves at the moment. -2020-02-02 21:04 starseeker +2020-12-04 02:22 starseeker - * [r74793] src/libbrep/cdt2/vert.cpp: - Zero makes more conceptual sense to return as a no-op here... + * [r77921] TODO: + png and zlib should be handled now - remove TODO item. -2020-02-02 20:37 starseeker +2020-12-04 02:11 starseeker - * [r74792] src/libbrep/CMakeLists.txt: - just use a build flag for this... + * [r77920] src/librt/primitives/dsp/dsp_brep.cpp, + src/librt/primitives/revolve/revolve_brep.cpp, + src/librt/primitives/sketch/sketch_brep.cpp, + src/proc-db/brepintersect.cpp: + Pull in a number of adjustments to openNURBS using code from + extbuild. -2020-02-02 20:35 starseeker +2020-12-04 00:55 starseeker - * [r74791] src/libbrep/CMakeLists.txt, src/libbrep/cdt2/edge.cpp: - Untested, but see if we can use proper routines for this rather - than the arc length hack. + * [r77919] src/archer/CMakeLists.txt, src/bwish/CMakeLists.txt: + Shouldn't need to directly link the itcl/itk libs any longer. -2020-02-02 20:00 starseeker +2020-12-04 00:54 starseeker - * [r74790] src/libbrep/cdt2/cdt.cpp, src/libbrep/cdt2/cdt.h, - src/libbrep/cdt2/edge.cpp, src/libbrep/cdt2/vert.cpp: - checkpoint + * [r77918] regress/user/CMakeLists.txt: + Use $ here, not CMAKE_CFG_INTDIR. -2020-02-02 14:38 starseeker +2020-12-04 00:47 starseeker - * [r74789] include/brep/pullback.h, src/libbrep/cdt/edge.cpp, - src/libbrep/opennurbs_ext.cpp: - Move the trim closest point search down into opennurbs_ext. Need - something faster - this is expensive as it stands - but not quite - sure how to adapt the closest point on curve logic for this. - We're walking a curve whose t paramater evaluates to a 2D point - in the parametric space, but what we care about optimizing is in - 3D space. + * [r77917] misc/CMake/distcheck_no_tcl.cmake.in, + misc/CMake/distcheck_target.cmake.in: + Ninja will ensure a .ninja_log file exists - adjust for that when + doing distcheck. -2020-02-02 12:46 starseeker +2020-12-04 00:46 starseeker - * [r74788] src/libbrep/cdt2/cdt.h: - more notes + * [r77916] misc/CMake/CMakeLists.txt, + misc/CMake/FindPOLY2TRI.cmake, misc/CMake/FindSTEPCODE.cmake: + Not using yet but go ahead and stage poly2tri and stepcode find + logic. -2020-02-02 03:41 starseeker +2020-12-04 00:40 starseeker - * [r74787] src/libbrep/cdt2/cdt.cpp: - more notes + * [r77915] misc/CMake/BRLCAD_User_Options.cmake: + Pull in a couple extbuild adjustments to user options. -2020-02-02 03:30 starseeker +2020-12-04 00:33 starseeker - * [r74786] src/libbrep/cdt2/edge.cpp: - May need to rethink when linear edge splitting happens... + * [r77914] CMakeLists.txt, misc/CMake/BRLCAD_Install_Prefix.cmake, + misc/CMake/multiconfig_path_read.cmake.in: + Adjust how we are updating the install path for the dev and rel + paths. With Ninja MultiConfig on Windows, the old approach was + inadequate. -2020-02-02 03:15 starseeker +2020-12-03 20:14 starseeker - * [r74785] src/libbrep/CMakeLists.txt, src/libbrep/cdt2/cdt.cpp, - src/libbrep/cdt2/cdt.h, src/libbrep/cdt2/edge.cpp, - src/libbrep/cdt2/vert.cpp: - checkpoint + * [r77913] src/other/CMakeLists.txt: + Specify more files for disclean to scrub -2020-02-01 20:22 starseeker +2020-12-03 17:43 starseeker - * [r74784] src/libbrep/CMakeLists.txt: - keep off by default for now + * [r77912] src/libgcv/plugins/gdal/gdal.cpp, + src/libgcv/plugins/gdal/gdal_ll.cpp: + Prefer local GDAL headers for inclusion, if both are visible. -2020-02-01 20:21 starseeker +2020-12-03 17:32 starseeker - * [r74783] src/libbrep/CMakeLists.txt, src/libbrep/cdt2/cdt.cpp: - add singular vertex normal calculation + * [r77910] misc/CMake/BRLCAD_Install_Prefix.cmake: + Pull the working CMAKE_IGNORE_PATH logic from extbuild - need to + ignore exact paths of interest, not the prefix dir for those + paths. -2020-02-01 19:45 starseeker +2020-12-03 17:28 starseeker - * [r74782] include/brep/cdt2.h, src/libbrep/cdt2/cdt.cpp, - src/libbrep/cdt2/cdt.h: - cleanup + * [r77909] misc/CMake/BRLCAD_Install_Prefix.cmake: + Make sure we have sleep, remove a no-op statement probably left + over from a search-and-replace. -2020-01-31 23:06 starseeker +2020-12-03 17:24 starseeker - * [r74781] src/libbrep/cdt2, src/libbrep/cdt2/cdt.cpp, - src/libbrep/cdt2/cdt.h: - checkpoint some thinking on how to restructure the data - containers to minimize the number of maps we need to maintain - - they're all potential error sources as well as not helping - performance. + * [r77908] misc/CMake/BRLCAD_Targets.cmake: + We're requiring >3.6 now, we can discard the APPLE specific bit + here. -2020-01-31 21:54 starseeker +2020-12-03 17:23 starseeker - * [r74780] include/brep/CMakeLists.txt, include/brep/cdt2.h: - stash some thoughts on a bit of API tweaking. + * [r77907] misc/CMake/BRLCAD_Targets.cmake: + Ensure dependencies are set for static targets -2020-01-31 19:36 starseeker +2020-12-03 17:22 starseeker - * [r74779] src/libbrep/cdt/edge.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/surf.cpp: - p3d2d isn't being used. + * [r77906] misc/CMake/BRLCAD_Targets.cmake: + Document why we are setting the object dependencies. -2020-01-31 15:15 starseeker +2020-12-03 17:21 starseeker - * [r74778] src/libbrep/CMakeLists.txt, src/libbrep/cdt/RTree.h, - src/libbrep/cdt/cdt.cpp, src/libbrep/cdt/closed_surf.cpp, - src/libbrep/cdt/edge.cpp, src/libbrep/cdt/surf.cpp: - scrub some unused code + * [r77905] misc/CMake/BRLCAD_Install_Prefix.cmake, + misc/CMake/BRLCAD_Targets.cmake: + revert - added too many files -2020-01-31 14:56 starseeker +2020-12-03 17:20 starseeker - * [r74777] src/libbrep/cdt/cdt.h: - Boil cdt.h down into what's actually being used in other files. + * [r77904] misc/CMake/BRLCAD_Install_Prefix.cmake, + misc/CMake/BRLCAD_Targets.cmake: + Document why we are setting the object dependencies. -2020-01-31 10:04 brlcad +2020-12-03 17:19 starseeker - * [r74776] include/bu/tbl.h, src/libbu/num.c: - document design intent for a new table-printing api based on the - tabular number printing prototype developed earlier. move the - examples as reference, cases to consider. + * [r77903] misc/CMake/BRLCAD_Test_Wrappers.cmake: + Use cmake_host_system_information to get the core count -2020-01-31 02:14 starseeker +2020-12-03 17:18 starseeker - * [r74775] src/libbrep/cdt/mesh.cpp: - Report what's going on for debugging purposes + * [r77902] misc/CMake/BRLCAD_User_Options.cmake: + fix line wrapping -2020-01-31 02:06 starseeker +2020-12-03 17:04 starseeker - * [r74774] src/libbrep/cdt/mesh.cpp: - Flip all or none of the triangles. Really this shouldn't be - necessary at all - ought to be checking the fit plane agains the - brep normals and getting things lined up so no flipping is - needed. + * [r77899] misc/CMake/BRLCAD_Build_Types.cmake: + missed header -2020-01-30 16:51 starseeker +2020-12-03 16:53 starseeker - * [r74773] src/libbrep/cdt/mesh.cpp: - Not 100% sure, but I think we may be flipping some triangles but - not others and breaking edge connectivity here? Either that or - we're missing repairs that need to be run... + * [r77897] misc/CMake/BRLCAD_Build_Types.cmake, + misc/CMake/BRLCAD_CPack.cmake, + misc/CMake/BRLCAD_Environment_Setup.cmake, + misc/CMake/BRLCAD_Install_Prefix.cmake, + misc/CMake/BRLCAD_Targets.cmake, + misc/CMake/BRLCAD_Test_Wrappers.cmake, + misc/CMake/BRLCAD_User_Options.cmake: + Add headers and footers, ws -2020-01-30 16:24 starseeker +2020-12-03 16:41 starseeker - * [r74772] src/libged/shape_recognition.cpp: - Check the return code, and don't attempt to create a mesh if we - couldn't make the triangles. + * [r77896] CMakeLists.txt: + Have cmake_host_system_information report user and hostname. -2020-01-30 16:18 starseeker +2020-12-03 16:35 starseeker - * [r74771] src/libbrep/cdt/cdt.cpp: - Make sure we have a brep container + * [r77895] CMakeLists.txt: + Pull in a variety of minor changes from the extbuild + CMakeLists.txt file. -2020-01-30 09:13 brlcad +2020-12-03 16:14 starseeker - * [r74770] src/libbu/parse.c: - add support for structparsing zero-values and protection against - printing nul chars into strings (thus truncating them). instead - of nul, we write out empty string which parses back as a - nul-terminated 0-length string. also utilized bu_vls_printf() in - places where the code was manually calculating lengths and - appending to strings for greater clarity and robustness. + * [r77894] CMakeLists.txt, misc/CMake/BRLCAD_User_Options.cmake, + misc/CMake/BRLCAD_Util.cmake, misc/CMake/CMakeLists.txt: + Break the user options out into their own file. -2020-01-30 02:03 brlcad +2020-12-03 16:04 starseeker - * [r74769] src/libbu/parse.c: - greatly simplify and fix a long-standing problem printing - matrices during struct parse errors, logging, and diagnostic - output. all printing goes through just one routine now instead of - the 4x duplication too. bu_num does a much better job, but needs - api for string printing in order to support parse output here. - this consequently also fixes ebm parse error printing where - newlines were getting injected and indentation was wrong - resulting in hard to read messy output. + * [r77893] CMakeLists.txt, misc/CMake/BRLCAD_Test_Wrappers.cmake, + misc/CMake/CMakeLists.txt: + Break test wrappers out into their own file. -2020-01-30 01:00 brlcad +2020-12-03 15:59 starseeker - * [r74768] NEWS: - I removed an extra blank line that was being displayed after - commands in graphical mged, making it more consistent with mged - -c's output. + * [r77892] CMakeLists.txt, + misc/CMake/BRLCAD_Environment_Setup.cmake, + misc/CMake/BRLCAD_Install_Prefix.cmake, + misc/CMake/CMakeLists.txt: + Fix environment setup, break out install prefix management. -2020-01-30 00:56 brlcad +2020-12-03 15:45 starseeker - * [r74767] src/tclscripts/mged/mged.tcl, - src/tclscripts/mged/text.tcl: - few more newline literals + * [r77891] CMakeLists.txt, + misc/CMake/BRLCAD_Environment_Setup.cmake, + misc/CMake/CMakeLists.txt: + Put enviornment setup and characterization code into its own + file. -2020-01-30 00:54 brlcad +2020-12-03 15:25 starseeker - * [r74766] src/tclscripts/mged/text.tcl: - tcl seems to behave if str is an empty string, but the naked - newline is awkward outside a string literal + * [r77890] CMakeLists.txt, misc/CMake/BRLCAD_CPack.cmake, + misc/CMake/CMakeLists.txt: + Break CPack logic out into its own file. -2020-01-30 00:53 brlcad +2020-12-03 15:16 starseeker - * [r74765] src/tclscripts/mged/mged.tcl: - looks like tk mged has been printing an extra line after commands - for a really long time. remove the extra \n so that output is - consistent with -c classic mode output and strictly limited to - what the command returned (a newline is still added if the - command didn't output one, just so the prompt is always at a - beginning of line) + * [r77889] CMakeLists.txt, misc/CMake/BRLCAD_Build_Types.cmake, + misc/CMake/CMakeLists.txt: + Break out build type management into its own file. -2020-01-30 00:10 brlcad +2020-12-02 14:30 starseeker - * [r74764] src/libbu/parse.c: - looks like someone overlooked a var while refactoring. it was - printed to but never used. looks like logstr is the intended - output. + * [r77868] src/librt/timer.cpp: + Fixes for Windows specific bits of timer.cpp -2020-01-29 23:59 brlcad +2020-12-02 03:21 starseeker - * [r74763] src/libbu/parse.c: - unused vls + * [r77867] src/librt/timer.cpp: + Use the C++ style clock() for consistency -2020-01-29 23:57 brlcad +2020-12-02 03:02 starseeker - * [r74762] src/libbu/parse.c: - buffer structparse printing by lines so we don't invoke bu_log() - on partial lines. this improves mged output where additional - newlines were getting injected when structparse messages were - getting printed. + * [r77865] CMakeLists.txt: + Folders shouldn't be MSVC specific in principle - just go ahead + and set. -2020-01-28 20:38 starseeker +2020-12-02 02:58 starseeker - * [r74761] src/rt/viewweight.c: - Probably not the right fix (per Sean) - revert. + * [r77864] CMakeLists.txt: + Just go ahead and set this - ignored on platforms other than + Apple according to CMake docs. -2020-01-28 17:38 starseeker +2020-12-02 02:55 starseeker - * [r74760] src/libbrep/tests/plate_mode_samples.g: - rename shell csg regions, set default thickness of .1 on all - plate mode objects. + * [r77863] CMakeLists.txt: + Remove comment, and mark BRLCAD_WORD_SIZE as advanced regardless + of platform. -2020-01-28 17:32 starseeker +2020-12-02 02:52 starseeker - * [r74759] src/libbrep/tests/plate_mode_samples.g: - Adjust csg solids to bound the plate mode objects - plate mode - thickness extends in and out, not just in. + * [r77862] include/rt/timer.h, src/librt/CMakeLists.txt, + src/librt/timer-nt.c, src/librt/timer.cpp, src/librt/timer42.c, + src/librt/timerunix.c: + Make a stab at a portable librt timer. + + This code attempts to replace the various librt timer* files with + a + single implementation in C++. Insofar as we can, use standard + C/C++ + functions to retrieve values. + + Windows presents a complication in that clock() does not return + CPU + time. Per their documentation and examples, try to use the only + available option on that platform to get CPU time. + + For elapsed time (I think this is intended to be wall clock + time?) + use C++11 chrono support which should be portable across all + targeted + platforms. + + This needs review - I'm not sure we were returning CPU time from + the + rt_get_timer function even on systems with a standards compliant + clock() available previously, so this may be a behavior change + even + though it is trying to match the behavior described in + rt/timer.h. -2020-01-28 17:04 starseeker +2020-12-02 01:52 starseeker - * [r74758] src/rt/viewweight.c: - Use bu_log so the rtweight results are visible in MGED + * [r77861] CMakeLists.txt: + Grr. Windows doesn't provide CPU time with clock() - which, if + I'm reading this right, means timer-nt.c is measuring the wrong + thing? rt/timer.h says the timer is supposed to be reporting CPU + time... First step is to see if we've got GetProcessTimes + available. -2020-01-28 03:36 starseeker +2020-12-02 01:14 starseeker - * [r74757] BUGS: - Urk. Lost material densition info stored the .g database after a - garbage collect - that's not good... + * [r77859] src/libbu/tbl.c: + Before we unpack last, make sure it's not null -2020-01-28 03:35 starseeker +2020-12-01 23:57 starseeker - * [r74756] src/libbrep/tests/plate_mode_samples.g: - Add a dummy material so we can calculate weights. + * [r77857] src/libbu/tbl.c: + Initialize -2020-01-28 03:27 starseeker +2020-12-01 19:09 starseeker - * [r74755] src/libbrep/tests/plate_mode_samples.g: - Add a tgc cone as well (although it may not match quite as - perfectly given the non-zero pinch point at the top) and colors. + * [r77853] CMakeLists.txt, misc/CMake/BRLCAD_Options.cmake: + Use a more clearly BRL-CAD specific name for this file -2020-01-28 03:09 starseeker +2020-12-01 15:17 starseeker - * [r74754] src/libbrep/tests/plate_mode_samples.g: - Add combs with subtractions to make csg shell shapes which should - match (given approprate plate mode thickness settings) the sph, - cyl and box plate mode NURBS surfaces. + * [r77847] src/conv/step/g-step/Assembly_Product.cpp, + src/conv/step/g-step/Default_Geometric_Context.cpp, + src/conv/step/g-step/ON_NurbsCurve.cpp, + src/conv/step/g-step/ON_NurbsSurface.cpp, + src/conv/step/util/list_elements.cpp, + src/other/stepcode/src/clstepcore/STEPattribute.h: + More future-proofing of stepcode C++ -2020-01-28 02:55 starseeker +2020-12-01 10:31 brlcad - * [r74753] src/libbrep/tests/plate_mode_samples.g: - Fix object name, add matching csg solids for sph, box and - cylinder for comparison purposes. + * [r77842] include/bu/defines.h: + provide _BU_ATTR_FLATTEN so performance critical functions can be + better guide inlining. -2020-01-28 02:46 starseeker +2020-12-01 09:22 brlcad - * [r74752] NEWS: - Added a '-type plate' option to the search command to support - matching objects in a database that are defined using plate mode - methodology. + * [r77841] CMakeLists.txt: + test for the flatten attribute for optimization strategies -2020-01-28 02:44 starseeker +2020-12-01 09:22 brlcad - * [r74751] doc/docbook/system/mann/search.xml, - include/rt/primitives/brep.h, src/libged/lint.cpp, - src/librt/primitives/brep/brep.cpp, src/librt/search.c: - Plate mode isn't a lint issue - move the ability to identify - plate mode objects to search. + * [r77840] TODO: + per discussion, command that reduces -2020-01-28 02:23 starseeker +2020-12-01 09:21 brlcad - * [r74750] include/rt/geom.h: - whoops, forgot to commit the header + * [r77839] include/bu/tbl.h, src/libbu/tbl.c: + rename SIMPLE to LIST. adjust padding to be more minimal. + document some examples. -2020-01-27 19:36 starseeker +2020-12-01 02:00 starseeker - * [r74749] src/libged/brep.c, src/libged/shape_recognition.cpp, - src/librt/primitives/brep/brep.cpp, - src/librt/primitives/brep/brep_local.h: - Existing NURBS plate mode implementation was NOCOS mode only - - make a stab at implementing COS and defaulting to it. + * [r77837] src/conv/step/STEPWrapper.cpp, + src/conv/step/step-g/BSplineCurveWithKnots.cpp, + src/conv/step/step-g/BSplineSurfaceWithKnots.cpp, + src/conv/step/step-g/CartesianPoint.cpp, + src/conv/step/step-g/Direction.cpp, + src/conv/step/step-g/RationalBSplineCurve.cpp, + src/conv/step/step-g/RationalBSplineSurface.cpp, + src/conv/step/step-g/ShellBasedSurfaceModel.cpp, + src/conv/step/step-g/SurfaceCurve.cpp, + src/conv/step/step-g/TrimmedCurve.cpp, + src/other/stepcode/src/clstepcore/STEPattribute.cc, + src/other/stepcode/src/clstepcore/STEPattribute.h, + src/other/stepcode/src/clstepcore/sdaiApplication_instance.cc, + src/other/stepcode/src/clstepcore/sdaiApplication_instance.h: + Backport a couple changes from upstream stepcode. + + In order to prepare our step converter code for updating to the + latest + upstream stepcode, we've backported a couple changes needed to + make + the current version work the way the new one will. + + Discovered I was testing with the wrong stepcode branch when I + tried + upgrading earlier in the extbuild branch - stepcode's master + wasn't in + a working state. The develop branch was where updates and fixes + had + been applied. Fixed upstream with a ff merge of develop onto + master, + and then tried again to test building step-g. + + A couple class data members we were directly reading that have + now been + protected in upstream classes. Since the old code didn't have + equivalent accessors, we add them in our fork so our converter + code + is ready to shift. + + We will also need to address or ignore a couple compiler warnings + being + tripped by the newer stepcode generated output. Prefer to fix the + generated code upstream, but not sure yet how hard it will be. + + Only other change spotted is an adjustment of the template that + lists + the generated STEP C++ files to add the *_unity.cc files. They + include + all the individual entity files that are now being written. There + is + a note that not all compilers support those files, but we will + have to + see - if we need to list individual entity files build logic will + be + uglier, since we will need pre-generated per-schema lists of cc + and h + files for CMake and we won't have any way to auto-generate them + at + CMake time out of the box. + +2020-11-30 18:35 brlcad + + * [r77832] src/libbu/tbl.c: + attempt to quell warning about empty format string. intentionally + writing an empty (nul) string to clear cells. + +2020-11-30 15:45 starseeker + + * [r77829] src/adrt/CMakeLists.txt, src/conv/3dm/CMakeLists.txt, + src/conv/CMakeLists.txt, src/conv/gcv/CMakeLists.txt, + src/conv/raw/CMakeLists.txt, src/libgcv/CMakeLists.txt, + src/libgcv/gcv.c, src/libgcv/plugins/CMakeLists.txt, + src/libgcv/plugins/asc/CMakeLists.txt, + src/libgcv/plugins/decimate/CMakeLists.txt, + src/libgcv/plugins/fastgen4/CMakeLists.txt, + src/libgcv/plugins/gdal/CMakeLists.txt, + src/libgcv/plugins/obj/CMakeLists.txt, + src/libgcv/plugins/rhino/CMakeLists.txt, + src/libgcv/plugins/stl/CMakeLists.txt, + src/libgcv/plugins/vol/CMakeLists.txt, + src/libgcv/plugins/vrml/CMakeLists.txt: + Put r77777 back, this time with the missing libraries added. + Builds on MSVC. -2020-01-27 16:41 starseeker +2020-11-30 13:35 brlcad - * [r74748] src/librt/primitives/brep/brep.cpp: - Need to use the adjusted hit_dist rather than the original, or - the LOS reporting in NIRT doesn't see the thicknesses. + * [r77827] src/libbu/tbl.c: + add support for empty cells in formatting. + + this is something strtok() doesn't intrinsically support, so we + augment + behavior by looking for sequences of nulls or separators within + the + strtok-modified buffer. strsep() does support empties, but it's + not + portably guaranteed. the reason for implementing this is + two-fold: + first, it lets authors skip columns while printing and second, it + avoids a bug in libfort (reported) that precludes indexing + directly + into empty cells. this was a bit nasty to figure out and not the + best coding to say the least, but not seeing a good way to reduce + the + complexity just yet. it does seem to work well (at least on mac's + bsd + strtok), but does warrant portability / unit testing. + +2020-11-30 11:06 brlcad + + * [r77826] src/libbu/tbl.c: + alignment is a cell property + +2020-11-30 08:56 brlcad + + * [r77825] doc/legal/embedded/fort.txt: + still need/intend to refactor it to one instance, but think this + is the right way to denote the dupe libfort. + +2020-11-30 08:53 brlcad + + * [r77824] src/libbu/CMakeLists.txt, src/libbu/fort.c, + src/libbu/fort.h, src/libbu/tbl.c: + implement the guts to bu_tbl using libfort. + + this implements a basic table formatting API useful for all the + places where we currently display gridded table output. first + proofed by cliff in the stat command, libfort is pretty awesome + for this purpose and will replace the other manual approach + started in num.c (for matrix printing). intentionally not + exposing the breadth of libfort functionality. this is 1) so + libbu API symbols can be kept to a bare minimum, 2) so calling + code can utilize similar/familiar code patterns (readability), + and 3) so calling sites stick to a limited set of table styles + for end-user consistency and usability. + +2020-11-30 08:38 brlcad + + * [r77823] include/bu/tbl.h: + need to get+set position and more alignment options. + + also, don't interleave styling commands into the printf stream. + let + bu_tbl_style() handle it instead, otherwise the impl has a + problem. -2020-01-27 16:40 starseeker +2020-11-29 17:43 starseeker - * [r74747] src/librt/primitives/brep/brep.cpp: - Simplify + * [r77822] doc/legal/embedded/sobolseq.txt: + Update license reference -2020-01-27 14:58 starseeker +2020-11-29 07:12 brlcad - * [r74746] include/rt/geom.h, src/libged/brep.c, - src/libged/ged_private.h, src/libged/shape_recognition.cpp, - src/librt/primitives/brep/brep.cpp, - src/librt/primitives/brep/brep_local.h: - Making a stab at an ability to set a per-object plate mode - thickness, but NIRT's los is still zero - missing something. + * [r77821] include/bu/tbl.h: + target 5 basic styles for now based on usage/needs -2020-01-27 05:03 starseeker +2020-11-29 05:49 brlcad - * [r74745] include/rt/geom.h, src/librt/primitives/brep/brep.cpp, - src/librt/primitives/brep/brep_local.h: - Detect valid single trim edges with trim type boundary and flag - them as plate mode. Replace #define with if test. Hopefully this - will do the plate mode enabled raytracing only when we have an - object that isn't solid, since having plate mode always on seems - to cause problems with NIST3 at a minimum... + * [r77820] include/bu/tbl.h: + change the design to not be so focused on line/element pre-post + printing. merge formatting concepts into a simpler api that + should be adaptable to most of our existing use cases. was good + to let this simmer. -2020-01-27 04:32 starseeker +2020-11-25 07:38 brlcad - * [r74744] src/libged/lint.cpp: - Use lint as a place to hang some logic seeing if the - ON_BrepEdge/ON_BrepTrim information can spot a plate mode NURBS - object from the ON_Brep data. Looks like it might be able to, - based on the simple test cases... + * [r77818] src/libbn/sobol.c: + zero-initialize for safety. + + dynamic allocators are already not performance-critical, so we + can afford + to be more careful and future-proof. -2020-01-24 21:01 brlcad +2020-11-25 07:32 brlcad - * [r74743] src/libbrep/cdt/util.cpp: - unused + * [r77817] src/libbn/sobol.c: + eliminate possibility for bn_sobol_create() to return NULL -2020-01-24 19:59 starseeker +2020-11-25 07:28 brlcad - * [r74742] src/libbrep/cdt/ovlps_simple.cpp: - add some commented out logic for visualizing the refinement steps + * [r77816] include/bu/CMakeLists.txt, include/bu/assert.h, + include/bu/defines.h, include/bu/list.h, src/libbn/sobol.c, + src/libbn/tabdata.c, src/libbu/color.cpp, src/libbu/interrupt.c, + src/libbu/parse.c, src/libbu/sscanf.c, src/libbu/y2038/time64.c: + separate BU_ASSERT() into its own header, update calling sites as + needed -2020-01-24 19:43 starseeker +2020-11-25 07:23 brlcad - * [r74741] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - Add some routines for plotting edge sets + * [r77815] misc/CMake/BRLCAD_Targets.cmake: + indent ws cleanup -2020-01-24 16:44 starseeker +2020-11-24 20:52 brlcad - * [r74739] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - adjust plotting routines + * [r77814] misc/CMake/BRLCAD_Targets.cmake: + format comments consistently to col-70 -2020-01-24 14:15 starseeker +2020-11-24 20:01 brlcad - * [r74738] src/other/CMakeLists.txt: - For the moment we need the bundled lz4 + * [r77813] src/libbn/sobol.c: + general comment cleanup, make symbol names consistent -2020-01-21 16:23 starseeker +2020-11-24 19:51 brlcad - * [r74734] include/brep/cdt.h, src/libbrep/cdt/ovlps_simple.cpp, - src/libged/facetize.cpp, src/libged/shape_recognition.cpp: - Enable timeout for overlap resolution, since this could go on for - a very long time indeed with small tolerances or tough inputs. + * [r77812] src/libbn/CMakeLists.txt, src/libbn/sobol.c, + src/libbn/soboldata.h, src/libbn/sobolseq.c: + rename source to match the public header -2020-01-21 15:53 starseeker +2020-11-24 19:24 brlcad - * [r74733] src/libged/facetize.cpp: - actually use the tolerance specified + * [r77811] src/libbn/sobolseq.c: + clean up memory management. it's not possible for bu memory + allocators to return null. perform input validation up front to + exit early and prevent deeper scope nestings (and improve + readability). -2020-01-21 15:32 starseeker +2020-11-24 15:48 starseeker - * [r74732] src/libbrep/cdt/ovlps_simple.cpp, - src/libged/facetize.cpp: - Require a user specification of tolerance, fix overly aggressive - rejection case. This gives us a split-and-refine cycle that - breaks down overlapping triangles. + * [r77810] src/adrt/CMakeLists.txt, src/conv/3dm/CMakeLists.txt, + src/conv/CMakeLists.txt, src/conv/gcv/CMakeLists.txt, + src/conv/raw/CMakeLists.txt, src/libgcv/CMakeLists.txt, + src/libgcv/gcv.c, src/libgcv/plugins/CMakeLists.txt, + src/libgcv/plugins/asc/CMakeLists.txt, + src/libgcv/plugins/decimate/CMakeLists.txt, + src/libgcv/plugins/fastgen4/CMakeLists.txt, + src/libgcv/plugins/gdal/CMakeLists.txt, + src/libgcv/plugins/obj/CMakeLists.txt, + src/libgcv/plugins/rhino/CMakeLists.txt, + src/libgcv/plugins/stl/CMakeLists.txt, + src/libgcv/plugins/vol/CMakeLists.txt, + src/libgcv/plugins/vrml/CMakeLists.txt: + Back out r77777/77806 - gcv plugin build not working on Windows, + so something's missing. -2020-01-21 15:07 starseeker +2020-11-24 08:18 brlcad - * [r74731] src/libbrep/CMakeLists.txt, src/libbrep/cdt/cdt.h, - src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps_simple.cpp, src/libbrep/cdt/tri_isect.cpp, - src/libbrep/cdt/util.cpp: - Preliminary stipping down of logic + * [r77809] src/libbn/plot3.c, src/libbn/sobolseq.c, + src/libbn/tabdata.c, src/libbn/tests/vlist.c: + quiet all the remaining libbn msvc data loss warnings due to + size_t / signedness conversions. -2020-01-21 14:16 starseeker +2020-11-24 07:58 brlcad - * [r74730] src/libbrep/cdt/mesh.cpp: - initialize + * [r77808] include/bn/vlist.h, src/libbn/vlist.c, + src/mged/dodraw.c: + update bn_vlist_bbox() to using a size_t length parameter. avoids + potential data truncation as reporteted by msvc. -2020-01-20 02:31 starseeker +2020-11-24 06:51 brlcad - * [r74728] src/libbrep/CMakeLists.txt, - src/libbrep/cdt/ovlps_simple.cpp: - Start experimenting with a stripped down, split only approach to - resolution. Far less optimal - generates WAY more triangles, - won't clear ovlps for near tangent rays - but should ideally be - much more straightforward to implement. + * [r77807] TODO: + mged subcommand execution appears to be not working right. it's + locking up hard until the framebuffer window is closed, seemingly + not getting invoked asynchronously. -2020-01-20 02:27 starseeker +2020-11-23 22:59 starseeker - * [r74727] src/libbrep/cdt/ovlps.cpp: - expensive check - comment out unless we specifically need it when - debugging. + * [r77806] src/libgcv/plugins/asc/CMakeLists.txt, + src/libgcv/plugins/fastgen4/CMakeLists.txt, + src/libgcv/plugins/gdal/CMakeLists.txt, + src/libgcv/plugins/obj/CMakeLists.txt, + src/libgcv/plugins/stl/CMakeLists.txt, + src/libgcv/plugins/vol/CMakeLists.txt, + src/libgcv/plugins/vrml/CMakeLists.txt: + libwdb has mk_* functions -2020-01-20 01:02 starseeker +2020-11-23 17:48 brlcad - * [r74726] src/libbrep/cdt/ovlps.cpp: - use the triangle split routine here + * [r77805] doc/docbook/system/mann/saveview.xml: + fix the example that refers to the old name for the command. -2020-01-19 20:45 starseeker +2020-11-21 00:13 starseeker - * [r74725] src/libbrep/cdt/ovlps_grps.cpp: - If going this route, probably need to greatly simplify the - processing so we can split fast - we're not going to resolve to - overlap free doing this, so we need to get small fast. + * [r77777] src/adrt/CMakeLists.txt, src/conv/3dm/CMakeLists.txt, + src/conv/CMakeLists.txt, src/conv/gcv/CMakeLists.txt, + src/conv/raw/CMakeLists.txt, src/libgcv/CMakeLists.txt, + src/libgcv/gcv.c, src/libgcv/plugins/CMakeLists.txt, + src/libgcv/plugins/asc/CMakeLists.txt, + src/libgcv/plugins/decimate/CMakeLists.txt, + src/libgcv/plugins/fastgen4/CMakeLists.txt, + src/libgcv/plugins/gdal/CMakeLists.txt, + src/libgcv/plugins/obj/CMakeLists.txt, + src/libgcv/plugins/rhino/CMakeLists.txt, + src/libgcv/plugins/stl/CMakeLists.txt, + src/libgcv/plugins/vol/CMakeLists.txt, + src/libgcv/plugins/vrml/CMakeLists.txt: + Update the gcv plugin setup to match the libdm/libged approach. -2020-01-19 20:00 starseeker +2020-11-20 14:29 brlcad - * [r74724] src/libbrep/cdt/ovlps_grps.cpp: - Weird... for some reason the erase operation resulted in - incorrect transfer of set information... + * [r77756] TODO: + dibelka has again requested a skinning exterior surface + capability -2020-01-19 19:00 starseeker +2020-11-19 04:22 brlcad - * [r74723] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp: - Manually split rather than trying the projection trick - should - be more reliable and not necessary in this operation to project - anyway. + * [r77749] db/CMakeLists.txt, db/radialgrid.asc: + add some sample geometry for a radial grid. + + was used as a lighting test, but potentially useful for other + purposes. + it helps to adjust the light.r light factor, number of shadow + rays, and + amount of ambient (and AO). -2020-01-17 21:56 starseeker +2020-11-18 23:56 brlcad - * [r74718] src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - Try splitting triangles with bad aspect ratios. Fairly quickly - generates bad meshes, so something about the build down isn't - right. + * [r77748] NEWS: + changed mvall to rename even when there's no source object. per + docs, the command is supposed to update all database instances. -2020-01-17 21:04 starseeker +2020-11-18 23:50 brlcad - * [r74717] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp: - Do a better job of tracking the current triangle set. + * [r77747] src/libged/move_all/move_all.c: + if there are no objects and no references, say so and return an + error (match 'mv' semantics). -2020-01-17 17:31 starseeker +2020-11-18 23:46 brlcad - * [r74715] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - Start working on actually inserting points and splitting edges. + * [r77746] src/libged/move_all/move_all.c: + make mvall continue even when source doesn't exist + + previously, mvall would halt early if the source object doesn't + exist, + but per the documentation, the command is supposed to update all + objects and references. thus the only error condition should be + if + there is no object AND no references or some other error + condition + exists. -2020-01-17 15:38 starseeker +2020-11-17 04:41 brlcad - * [r74714] src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - Return a flag indicating whether find_split_edges identified any - work to do. + * [r77739] TODO: + dibelka requested onehit processing from rtarea for + faster/simpler results. note it and consolidate/refine the other + rtarea tasks together. -2020-01-17 15:18 starseeker +2020-11-11 06:11 brlcad - * [r74713] src/libbrep/cdt/ovlps_grps.cpp: - Look for interior vs exterior edges - exterior will take - different tracking from a vertex perspective, since the split - isn't local to one face. + * [r77728] CMakeLists.txt: + looks like the list was extended, but indicies were not. apparent + copy-paste mistake. -2020-01-17 14:50 starseeker +2020-11-10 21:50 starseeker - * [r74712] include/brep/cdt.h, src/libbrep/cdt/cdt.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/util.cpp, - src/libged/facetize.cpp, src/libged/shape_recognition.cpp: - Start setting up to pass down an overlap threshold length. For - now basing it on bbox size, but the user should be able to supply - a fixed size. Drawback will be that small length + large model - will produce an explosion of triangles and easily get into - nonresponsive territory, so ideally we should cap at some sane - ratio... + * [r77725] CMakeLists.txt: + Stash the cmake_language method for dealing with empty string + passing for later use - it requires 3.18, but seems to be a + (much) cleaner solution to this particular issue. See + https://gitlab.kitware.com/cmake/cmake/-/issues/21414 for more + info. -2020-01-17 09:07 d_rossberg +2020-11-10 21:44 starseeker - * [r74711] src/libbrep/cdt/tri_isect.cpp: - quell compilation error with gcc 8.3.0 (Debian buster Linux) + * [r77724] CMakeLists.txt: + Had these tests backwards in the reworked version of the logic. -2020-01-16 22:04 starseeker +2020-11-10 21:00 starseeker - * [r74710] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp: - Start looking at remaining edges. + * [r77723] TODO: + Add another crash simulation models link -2020-01-16 20:37 starseeker +2020-11-10 20:55 starseeker - * [r74709] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/tri_isect.cpp: - Make these methods on the triangles + * [r77722] TODO: + gwu link seems to be down, and another with at least a few + models. -2020-01-16 20:32 starseeker +2020-11-10 20:43 starseeker - * [r74708] src/libbrep/cdt/tri_isect.cpp: - Update shortest and longest func data inputs - looking like these - may be needed. + * [r77721] CMakeLists.txt: + Empty arguments still disappear when passing through the function + (essentially, ARGN is not a literal representation of the argv + array originally passed to the function call) so we still need + this workaround code. -2020-01-16 20:24 starseeker +2020-11-10 20:18 starseeker - * [r74707] src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/tri_isect.cpp: - remove some commented out code + * [r77720] CMakeLists.txt, bench/CMakeLists.txt, + regress/CMakeLists.txt, regress/asc/CMakeLists.txt, + regress/bots/CMakeLists.txt, regress/comgeom/CMakeLists.txt, + regress/dsp/CMakeLists.txt, regress/fuzz/CMakeLists.txt, + regress/gqa/CMakeLists.txt, regress/iges/CMakeLists.txt, + regress/lights/CMakeLists.txt, regress/mged/CMakeLists.txt, + regress/moss/CMakeLists.txt, regress/nirt/CMakeLists.txt, + regress/red/CMakeLists.txt, regress/rtedge/CMakeLists.txt, + regress/shaders/CMakeLists.txt, regress/solids/CMakeLists.txt, + regress/spdi/CMakeLists.txt, regress/weight/CMakeLists.txt, + src/gtools/tests/CMakeLists.txt, + src/libanalyze/tests/CMakeLists.txt, + src/libbg/tests/CMakeLists.txt, src/libbn/tests/CMakeLists.txt, + src/libbrep/tests/CMakeLists.txt, src/libbu/tests/CMakeLists.txt, + src/libbu/tests/dylib/CMakeLists.txt, + src/libgcv/tests/CMakeLists.txt, + src/libged/simulate/tests/CMakeLists.txt, + src/libged/tests/CMakeLists.txt, src/libnmg/tests/CMakeLists.txt, + src/librt/tests/CMakeLists.txt: + Go with a BRLCAD_ADD_TEST wrapper in lieu of using the _add_test + approach. Simpler (no need for whitespace workaround) and + conforms to CMake recommended practice. + +2020-11-10 14:48 starseeker + + * [r77717] misc/repoconv/github_ci_actions.yml: + Commit some (commented out) examples of manipulation of the + configure and build lines for more targeted testing of subbuilds + in CI. The msbuild diagnostics unfortunately didn't provide the + cl.exe command line - best way to get that still seems to be + inspection of the properties in Visual Studio - but may be useful + down the road. + +2020-11-08 07:10 brlcad + + * [r77713] src/gtools/tests/CMakeLists.txt: + skip the bigdb test if we can't allocate enough memory. + + cmake 3.1 has a feature where a test will be considered skipped + if + there's a particular exit code. use this to detect when the bigdb + test is aborting due to not being able to allocate 5x the amount + of + requested memory (this is a librt issue). -2020-01-16 19:55 starseeker +2020-11-08 07:07 brlcad - * [r74706] src/libbrep/cdt/cdt.h, src/libbrep/cdt/mesh.cpp, - src/libbrep/cdt/mesh.h, src/libbrep/cdt/tri_isect.cpp, - src/libbrep/cdt/util.cpp: - Checkpoint setup that is able to test the ray in/out against the - alternative method. + * [r77712] src/gtools/tests/bigdb.c: + modify the test to make sure we can allocate enough. + + upon observing and debugging test failures on lower-memory + systems, + came to understand more specifically the cause being incredibly + inefficient handling by librt. debugging shows a given allocation + passed in as title ends up creating 9 copies. Due to how AVS are + copied/merged/recopied as they're synced as well as how objects + are + serialized for export, there are as many as 5 copies + simultaneously! + + In order to combat this, we test whether we can allocate in + advance + with malloc first, and halt if we can't get 5x the requested + amount. -2020-01-16 19:49 starseeker +2020-11-07 18:39 brlcad - * [r74705] src/libbg/tests/CMakeLists.txt, - src/libbg/tests/tri_ray_isect.cpp: - Stash what seems to be an odd ray/tri miss using the libbg - routine - need to revisit later. Found walking down a set of - intersections trying to figure out why a ray-based test of - inside/outside disagreed with the winding number based answer - - expected an even number of triangles, got an odd number, and - visually this triangle looks like it should be a hit but isn't?? - Need to confirm this isn't an error on my part somehow. + * [r77711] src/libbg/spsr/Octree.inl: + libc gets precedence on _underscore symbols, so rename with Oct + prefix. fixes build failure conflict with openbsd libc. -2020-01-15 22:07 starseeker +2020-11-06 17:40 brlcad - * [r74704] src/libbrep/cdt/mesh.h, src/libbrep/cdt/omesh.cpp, - src/libbrep/cdt/tri_isect.cpp, src/libbrep/cdt/util.cpp: - start experimenting with normal information - not at all sure - about the behavior of the normal reporting... have to be cautious - there as that's important in the initial meshing as well... + * [r77699] src/librt/search.c: + make sure db_node and the path for that node are not null before + adding them to the results table... -2020-01-15 21:02 starseeker +2020-11-06 16:54 brlcad - * [r74703] src/libbrep/cdt/mesh.h, src/libbrep/cdt/omesh.cpp: - Rework closest_pt paramaters slightly. + * [r77698] include/rt/geom.h, include/wdb.h, + src/libged/search/search.c, src/libged/typein/typein.c, + src/librt/db_fullpath.c, src/librt/primitives/vol/vol.c, + src/libwdb/vol.c, src/mged/edsol.c: + accept sf patch #556 (in database support for vol primitive) from + sumagna das. via the struct-parsing, this looks to be + conveniently forwards-compatible and backwards-compatible for the + 'file' type data sources. -2020-01-15 20:19 starseeker +2020-11-06 06:05 brlcad - * [r74702] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - convenience function to print out a tri vert point in a format - convenient for MGED + * [r77697] src/librt/search.c: + consistent braces and make sure we don't try to strlen a null -2020-01-15 18:47 starseeker +2020-11-05 16:09 starseeker - * [r74700] src/libbrep/cdt/ovlps_grps.cpp: - Note that interior edges may not be enough by themselves. Looking - at most of the remaining problem cases, it's those really close - vertices that are making things difficult. May have to bite the - bullet and try to unlock adjustment of brep face edge verts. + * [r77696] src/tclscripts/checker/OverlapFileTool.tcl: + Running the check command directly from Tcl isn't playing well + with the MGED command prompt - instead, just have the GUI run the + gchecker command line program to generate the file. Needs user + testing. -2020-01-15 18:37 starseeker +2020-11-05 07:36 brlcad - * [r74699] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/omesh.cpp, src/libbrep/cdt/ovlps_grps.cpp, - src/libbrep/cdt/tri_isect.cpp: - Don't hit the RTrees more than we have to for the application - - if a test point isn't within the bbox face, don't worry about it. - We may have to get slightly more sophisticated down the road, but - this makes a surprisingly massive performance difference. + * [r77695] src/libged/search/search.c: + refactor three of the four search result iterations into a + function -2020-01-15 18:03 starseeker +2020-11-05 05:34 brlcad - * [r74698] src/libbrep/cdt/mesh.h, src/libbrep/cdt/omesh.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - Make the initial search boxes slightly larger. + * [r77694] src/libged/search/search.c: + reduction of the common looping logic. four of these begs + refactoring. -2020-01-15 17:13 starseeker +2020-11-05 04:59 brlcad - * [r74697] src/libbrep/cdt/tri_isect.cpp: - Don't need to do inside/outside test twice + * [r77693] src/libbu/mappedfile.c: + if mged was run on a database that doesn't mmap and can't be + read, it was crashing due to an already freed mp->buf pointer + getting released twice. uncrashed by making the mappedfile + interface handle itself more gracefully. -2020-01-15 15:45 starseeker +2020-11-04 23:08 brlcad - * [r74696] src/libbrep/cdt/cdt.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/tri_isect.cpp, src/libbrep/cdt/util.cpp: - Keep needing to use these, so go ahead and move them to util + * [r77692] src/libbu/mappedfile.c: + strdup was resulting in leaked memory when we invalidate. just + set to null. -2020-01-15 15:16 starseeker +2020-11-04 22:43 brlcad - * [r74695] include/brep/cdt.h, include/config_win.h.in: - These four defines are used by facetize.cpp, and in an initial - test appear to compile with VS2017 - will have to see if they - cause an issue with other versions. + * [r77691] src/librt/db_fullpath.c: + empty string is not same as null pointer. need to check the + latter. an empty path string conceptually just maps to an empty + string, I think? -2020-01-15 15:02 starseeker +2020-11-04 20:55 brlcad - * [r74694] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps_grps.cpp: - In the aligned pairs case, just map the vertices and use the - triangles from one mesh in the other mesh. + * [r77688] src/libged/search/search.c: + convert the remainder of search result loopings to not ptbl get + even once on an empty set while taking care to still iterate in + the same order (back-to-front) -2020-01-15 07:15 brlcad +2020-11-04 19:31 brlcad - * [r74693] src/libged/CMakeLists.txt: - now links against libbrep for facetize, so make sure we include - it too. + * [r77687] NEWS: + fixed a search segfault condition. code looks like there may be + other ways to provoke it, but simple case was running search . on + an empty database. -2020-01-15 00:43 starseeker +2020-11-04 19:27 brlcad - * [r74692] src/libbrep/cdt/ovlps_grps.cpp: - Don't do the pair operation either if the inputs are stale. Found - a couple examples where the CDT isn't giving us the alignment we - want, so will probably have to do the all-up vert-to-vert - triangle insertion instead. + * [r77686] src/libged/search/search.c: + change the search set iteration to also not try and ptbl_get an + empty search set. fixes two distinct segfaults when there aren't + paths. -2020-01-14 23:49 starseeker +2020-11-04 19:10 brlcad - * [r74691] src/libbrep/cdt/ovlps_grps.cpp: - Arrgh. Need to check triangle against the right mesh to see if - it's active. + * [r77685] src/libged/search/search.c: + invert the loop so we avoid attempting to BU_PTBL_GET on an empty + table -2020-01-14 23:11 starseeker +2020-11-04 19:08 brlcad - * [r74690] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps_grps.cpp: - checkpoint + * [r77684] src/libged/search/search.c: + convert ptbl and path iterators to size_t since that's what both + db_ls and ptbl indexing are expecting -2020-01-14 21:09 starseeker +2020-11-04 19:00 brlcad - * [r74689] src/libbrep/cdt/overt.cpp: - Don't attempt an update if we have no associated edges. + * [r77683] src/libged/search/search.c: + rewrite _ged_free_search_set() to simplify the looping construct + and eliminate some unnecessary conditionals. avoids calling + BU_PTBL_GET on an invalid index too. -2020-01-14 20:55 brlcad +2020-11-04 18:51 brlcad - * [r74688] NEWS: - bob fixed a crasher where non-console windows applications would - attempt to dup() an invalid file descriptor. fixed by simply - skipping console printing of output. this conceivably doesn't - currently affect mged, but exists as an issue to Windows - applications using libged. + * [r77682] src/libged/search/search.c: + inject some newlines for readability. helps to separate decls and + setting values from work loops. it's hard for non-authors (or at + least it is for me) to read walls of code quickly otherwise. -2020-01-14 20:20 starseeker +2020-11-04 15:01 brlcad - * [r74687] src/libbrep/cdt/ovlps.cpp: - I think we want vert_closest here, but the vertex it's finding - has a nonsensical bbox... + * [r77681] include/rt/db_internal.h: + document the mat parameter -2020-01-14 19:00 bob1961 +2020-11-04 14:36 brlcad - * [r74686] src/libged/facetize.cpp: - Added checks to disallow logging related to ged_facetize() when - fileno(stderr) returns a value less than zero. This can happen on - windows if the application is not a console application. This is - effectively a punt --- more would need to be done to get this - working in a non-console windows application + * [r77680] src/librt/db5_io.c: + oepl cleanup, ws, and tidy up a big bu_log -2020-01-14 17:01 starseeker +2020-11-04 14:26 brlcad - * [r74685] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps_grps.cpp: - Work on restoring the narrow manipulation when we get down to - pairs of triangles. + * [r77678] src/librt/dir.c: + cleanup, oepl -2020-01-13 22:02 starseeker +2020-11-04 03:17 brlcad - * [r74684] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - Preserve plane through cdt if we have it - still doesn't result - in full alignment though... + * [r77677] src/libbn/mat.c: + use typedef types, match declaration. -2020-01-12 21:18 starseeker +2020-11-04 03:12 brlcad - * [r74683] src/libbrep/cdt/ovlps_grps.cpp: - Will be using the stashed aligned vertex info here, looks like - - need to do some more plotting to confirm, but two 2-triangle - polygons produced different CDT answers in what should have been - the same plane, so we're probably going to have to reinstate the - more specific rebuild for those narrow, stubborn cases. + * [r77676] src/libbn/mat.c: + match the declaration, eliminate register from function argument + definitions. -2020-01-12 20:00 starseeker +2020-11-04 03:06 brlcad - * [r74682] src/libbrep/cdt/mesh.h, src/libbrep/cdt/overt.cpp, - src/libbrep/cdt/ovlps.cpp: - checkpoint + * [r77675] src/libbn/axis.c: + match decl, use our typedefs -2020-01-11 22:29 starseeker +2020-11-03 20:18 starseeker - * [r74681] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps_grps.cpp: - Use shared plane. Closer, but still not resolving all cases - may - still need the explicit reassembly of the 4-triangle edge overlap - case. + * [r77673] misc/repoconv/github_ci_actions.yml: + Stash attempt at simplification of github actions logic. -2020-01-11 20:46 starseeker +2020-11-03 13:17 starseeker - * [r74680] src/libbrep/cdt/ovlps_grps.cpp: - Not successfully passing down quite all the data yet to the - rebuilding routines... + * [r77668] misc/repoconv/github_ci_actions.yml: + Probably want this off by default. -2020-01-11 20:43 starseeker +2020-11-02 22:07 starseeker - * [r74679] src/libbrep/cdt/cdt.h, src/libbrep/cdt/mesh.cpp, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp, - src/libbrep/cdt/util.cpp: - Switch to using degrees uniformly, for easier debugging - understanding. More aggressive clearing of data structures before - reassignments. + * [r77666] misc/repoconv/github_ci_actions.yml: + Explain a little more what we're doing here with Windows + environment reproduction, and handle a case where file(STRINGS) + isn't up to the job. This looks like it is + necessary-but-not-sufficient for fixing the github runners... -2020-01-11 19:23 starseeker +2020-10-30 06:06 brlcad - * [r74678] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp: - tweak angle reporting - still not building polygon loops as - expected... + * [r77659] doc/BRL-CAD.bib: + AFRL published a limited distribution report heavily pertaining + to BRL-CAD. + + Alas, even the abstract is limited distribution, so more cannot + be said. -2020-01-11 14:31 starseeker +2020-10-29 07:28 brlcad - * [r74677] src/art/CMakeLists.txt: - fix var names + * [r77658] src/mged/attach.c: + don't try to get the name of NULL dmpies -2020-01-11 14:27 starseeker +2020-10-28 06:51 brlcad - * [r74676] src/CMakeLists.txt, src/art, src/art/CMakeLists.txt, - src/art/art.cpp, src/rt/CMakeLists.txt, src/rt/art.cpp: - Shift art.cpp into its own directory. + * [r77655] CMakeLists.txt, src/other/gct/CMakeLists.txt, + src/other/gdal/CMakeLists.txt: + looking at other projects, more common convention seems to be to + just set that pthread flag is preferred. docs say this is + recommended too. -2020-01-10 23:10 starseeker +2020-10-28 06:23 brlcad - * [r74674] src/libbrep/cdt/ovlps_grps.cpp: - Shouldn't matter at this stage, but in case it does at some - future point update the vert bboxes. Code is definitely in non - working state - just checkpointing a compiling stage. + * [r77654] CMakeLists.txt: + probably don't want to keep this long-term, but blather the + status of the pthread library being used for a bit. -2020-01-10 23:03 starseeker +2020-10-28 01:32 starseeker - * [r74673] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp: - checkpoint rework of the ovlp grouping logic. + * [r77652] CMakeLists.txt, misc/tools/env2c/CMakeLists.txt, + regress/coverage/CMakeLists.txt, regress/pkg/CMakeLists.txt, + regress/repository/CMakeLists.txt, src/art/CMakeLists.txt, + src/libbu/CMakeLists.txt, src/other/gdal/CMakeLists.txt, + src/other/proj-4/src/CMakeLists.txt, + src/other/tcl/CMakeLists.txt, src/rt/CMakeLists.txt, + src/rtwizard/CMakeLists.txt: + Post 3.1 CMake 'highly recommends' using the Threads::Threads + imported target and the THREADS_PREFER_PTHREAD_FLAG - switch over + to the recommended approach. -2020-01-10 21:49 starseeker +2020-10-27 06:38 brlcad - * [r74672] src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - Add a more aggressive second pass to get nearby vertices in - place... + * [r77651] CMakeLists.txt: + looks like we have a copy-pasted chunk of code but are missing a + line to indicate a preference for -pthread where it's working -2020-01-10 19:23 starseeker +2020-10-25 17:17 starseeker - * [r74671] src/libbrep/cdt/overt.cpp, src/libbrep/cdt/ovlps.cpp: - Update vertex bboxes when we change triangles - probably other - places this is needed... + * [r77650] CMakeLists.txt, misc/CMake/RPath_Setup.cmake: + Adjust CMAKE_INSTALL_PREFIX management - looks like some changes + I was considering making don't play out correctly... -2020-01-10 16:42 starseeker +2020-10-24 17:32 brlcad - * [r74670] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - Calculate the optimization angle if we're using a triangle set + * [r77641] NEWS: + post-document the new 'n' (now 'N') key binding that runs nirt in + a graphics window. -2020-01-10 15:29 starseeker +2020-10-24 17:23 brlcad - * [r74669] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - Start working on a best fit plane function for a set of mesh - triangles. + * [r77640] doc/docbook/articles/mged.xml: + document 'N' to shoot a nirt ray in the graphics window. bindings + appear to be unsorted and out of sync. -2020-01-10 15:18 starseeker +2020-10-24 17:20 brlcad - * [r74668] src/libbrep/cdt/ovlps.cpp: - tweak looping + * [r77639] AUTHORS, NEWS: + vikram atreya rewrote and tested rt_bot_bbox() so that it + iterates over used vertices once. this cuts calculations by a + third and showed approximately 42% improvement on the hairball + test case. -2020-01-10 15:07 starseeker +2020-10-24 17:13 brlcad - * [r74667] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/overt.cpp: - Check the distance from vertices to their opposite triangle edges - - too close and we can flip trinagles if we move the verts. + * [r77638] src/librt/primitives/bot/bot.c: + eliminate the use of intermediate variables. -2020-01-10 14:48 starseeker +2020-10-24 17:07 brlcad - * [r74666] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp: - Tweak mesh local optimization routines. + * [r77637] src/librt/primitives/bot/bot.c: + applied sf patch # 558 (Improved bounding box time complexity) + from Vikram Atreya. this improved the bot bounding box + calculation to only consider referenced vertices without testing + all vertices or all face vertex references thus cutting the + number of tests by a third. -2020-01-09 20:58 starseeker +2020-10-24 06:02 brlcad - * [r74665] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp: - I think I see what's happening - not sure yet precisely how to - handle it, but it's rooted in the distance to the oppose triangle - edge for each vert. Also, experiment with checking the triangles - and optimizing the mesh as we go. + * [r77632] CMakeLists.txt: + wow, I guess we have to wrap this for older cmake. c'mon cmake + guys... -2020-01-09 19:43 starseeker +2020-10-24 05:07 brlcad - * [r74664] src/libbrep/cdt/ovlps.cpp: - Ah - the alignment step is pushing triangle normals into an - invalid range. + * [r77631] CMakeLists.txt: + 3.19 added support for spaces, but that's too new to require, so + set the policy accordingly -2020-01-09 19:38 starseeker +2020-10-23 17:47 starseeker - * [r74663] src/libbrep/cdt/mesh.cpp: - report triangle index if invalid + * [r77617] CMakeLists.txt, doc/notes/c_cxx_patterns/CMakeLists.txt, + misc/tools/astyle/CMakeLists.txt, + misc/tools/debug2c/CMakeLists.txt, + misc/tools/dom2dox/CMakeLists.txt, + misc/tools/env2c/CMakeLists.txt, misc/tools/lemon/CMakeLists.txt, + misc/tools/perplex/CMakeLists.txt, + misc/tools/re2c/CMakeLists.txt, + misc/tools/xmltools/CMakeLists.txt, + src/external/Creo/CMakeLists.txt, + src/external/Cubit/CMakeLists.txt, + src/external/Unigraphics/CMakeLists.txt, + src/libgcv/plugins/obj/wfobj/CMakeLists.txt, + src/other/gct/CMakeLists.txt, src/other/gdal/CMakeLists.txt, + src/other/itcl3/CMakeLists.txt, src/other/itk3/CMakeLists.txt, + src/other/iwidgets/CMakeLists.txt, + src/other/libbson/CMakeLists.txt, + src/other/libnetpbm/CMakeLists.txt, + src/other/libpng/CMakeLists.txt, + src/other/libregex/CMakeLists.txt, + src/other/libutahrle/CMakeLists.txt, + src/other/libz/CMakeLists.txt, + src/other/openNURBS/CMakeLists.txt, + src/other/openscenegraph/CMakeLists.txt, + src/other/poly2tri/CMakeLists.txt, + src/other/proj-4/CMakeLists.txt, + src/other/stepcode/CMakeLists.txt, + src/other/stepcode/src/base/judy/CMakeLists.txt, + src/other/stepcode/test/cpp/CMakeLists.txt, + src/other/stepcode/test/cpp/schema_specific/CMakeLists.txt, + src/other/stepcode/test/cpp/stepcore/CMakeLists.txt, + src/other/stepcode/test/p21/CMakeLists.txt, + src/other/tcl/CMakeLists.txt, src/other/tk/CMakeLists.txt, + src/other/tkhtml/CMakeLists.txt, + src/other/tktable/CMakeLists.txt: + Fall back to requiring 3.12 for distros shipping older CMakes. -2020-01-09 19:08 starseeker +2020-10-23 06:42 brlcad - * [r74662] src/libbrep/cdt/ovlps.cpp: - tweak nearby_vert, although this doesn't look like the issue... + * [r77592] src/tclscripts/mged/bindings.tcl: + separate the control+key bindings from shift grips -2020-01-09 18:53 starseeker +2020-10-23 06:39 brlcad - * [r74661] src/libbrep/cdt/ovlps.cpp: - Hmm. Appear to be introducing dupliate vertices - probably too - aggressive in level 1 point insertion. + * [r77591] src/tclscripts/mged/bindings.tcl: + categorize and sort the display manager key bindings so we can + get a handle on this mess. -2020-01-09 18:40 starseeker +2020-10-22 22:26 starseeker - * [r74660] src/libbrep/cdt/mesh.h, src/libbrep/cdt/omesh.cpp, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp, - src/libbrep/cdt/tri_isect.cpp: - Start of a significant refactor to simplify, clarify and - eliminate redundant work in the ovlp logic. Nowhere near working - yet... + * [r77558] src/rt/do.c: + Right, got bio.h in this file already. -2020-01-09 15:05 starseeker +2020-10-22 15:49 starseeker - * [r74659] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp, - src/libbrep/cdt/tri_isect.cpp: - simplify some parameter passing + * [r77545] include/brep/defines.h: + Guard inclusion of opennurbs.h -2020-01-09 14:29 starseeker +2020-10-22 15:44 starseeker - * [r74658] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - bookkeeping the triangle + mesh separately is proving a pain - - see if we can go ahead and store the mesh pointer with the - triangle... + * [r77544] src/libtclcad/auto_path.c: + Adapt libtclcad auto_path setup changes from thirdparty rework + branch. Uses bu_dir to do path lookups. -2020-01-09 14:20 starseeker +2020-10-22 15:24 starseeker - * [r74657] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp: - allow passing in a distance tolerance - that's the 'modality' of - this... + * [r77543] src/rt/do.c: + Directly include stdio.h in do.c -2020-01-08 21:09 brlcad +2020-10-22 15:24 starseeker - * [r74656] TODO: - consolidate having a .g with all entity types embedded, move - multi-region vol to new objects section. + * [r77542] src/libtclcad/commands.c: + Don't think we need this header here anymore... -2020-01-08 19:54 starseeker +2020-10-22 15:19 starseeker - * [r74655] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - Yeah, looking like there is similar/related logic tucked away in - various places... Need to rationalize this. + * [r77541] src/libdm/wgl/dm-wgl.c: + fix header name -2020-01-08 18:32 d_rossberg +2020-10-22 15:16 starseeker - * [r74654] src/libbrep/CMakeLists.txt: - added the new files from revision 74646 + * [r77540] src/fb/CMakeLists.txt: + No longer using utahrle here -2020-01-08 18:15 starseeker +2020-10-22 15:14 starseeker - * [r74653] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - Start refactoring logic for nearby vertex detection and - refinement vertex assignment into functions (untested) + * [r77539] src/conv/step/step-g/OpenNurbsInterfaces.cpp: + openNURBS has class-memaccess issues - guard the header. -2020-01-08 17:31 brlcad +2020-10-22 14:50 starseeker - * [r74651] src/librt/bundle.c: - there's a define for this + * [r77538] src/conv/asc/asc2g.c: + Be more verbose if tclcad_init fails in asc2g processing. -2020-01-08 17:09 starseeker +2020-10-22 14:43 starseeker - * [r74650] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - unused parameter + * [r77537] CMakeLists.txt, doc/notes/c_cxx_patterns/CMakeLists.txt, + misc/tools/astyle/CMakeLists.txt, + misc/tools/debug2c/CMakeLists.txt, + misc/tools/dom2dox/CMakeLists.txt, + misc/tools/env2c/CMakeLists.txt, misc/tools/lemon/CMakeLists.txt, + misc/tools/perplex/CMakeLists.txt, + misc/tools/re2c/CMakeLists.txt, + misc/tools/xmltools/CMakeLists.txt, + src/external/Creo/CMakeLists.txt, + src/external/Cubit/CMakeLists.txt, + src/external/Unigraphics/CMakeLists.txt, + src/libgcv/plugins/obj/wfobj/CMakeLists.txt, + src/other/gct/CMakeLists.txt, src/other/gdal/CMakeLists.txt, + src/other/itcl3/CMakeLists.txt, src/other/itk3/CMakeLists.txt, + src/other/iwidgets/CMakeLists.txt, + src/other/libbson/CMakeLists.txt, + src/other/libnetpbm/CMakeLists.txt, + src/other/libpng/CMakeLists.txt, + src/other/libregex/CMakeLists.txt, + src/other/libutahrle/CMakeLists.txt, + src/other/libz/CMakeLists.txt, + src/other/openNURBS/CMakeLists.txt, + src/other/openscenegraph/CMakeLists.txt, + src/other/poly2tri/CMakeLists.txt, + src/other/proj-4/CMakeLists.txt, + src/other/stepcode/CMakeLists.txt, + src/other/stepcode/src/base/judy/CMakeLists.txt, + src/other/stepcode/test/cpp/CMakeLists.txt, + src/other/stepcode/test/cpp/schema_specific/CMakeLists.txt, + src/other/stepcode/test/cpp/stepcore/CMakeLists.txt, + src/other/stepcode/test/p21/CMakeLists.txt, + src/other/tcl/CMakeLists.txt, src/other/tk/CMakeLists.txt, + src/other/tkhtml/CMakeLists.txt, + src/other/tktable/CMakeLists.txt: + Looking like 3.14 is the CMake version floor for the new setup - + update minimum required versions. -2020-01-08 17:04 starseeker +2020-10-22 14:23 starseeker - * [r74649] src/librt/bundle.c: - Triggering a Werror=unused-function complaint from GCC + * [r77536] src/libged/exec.cpp, src/libged/ged_init.cpp, + src/libged/include/plugin.h: + Revert r77533 - breaks the build on Linux. asc2g segfaults trying + to build the .g examples. -2020-01-08 17:03 starseeker +2020-10-22 12:26 starseeker - * [r74648] src/libbrep/cdt/ovlps.cpp: - mark a few things as static + * [r77535] src/tclscripts/mged/bindings.tcl: + Maybe try N instead of S for nirt shooting, so we don't conflict + with the existing S binding? -2020-01-08 16:45 brlcad +2020-10-22 04:34 brlcad - * [r74647] AUTHORS: - bojian was a code contributor, nurbs eval + * [r77534] src/tclscripts/mged/bindings.tcl: + switch the nirt binding from 'n' to 'S' for shoot or sample. need + to review all bindings, but this adds some safety to the + invocation. switching the key binding to requiring a modifier + (i.e., shift-s) makes it less likely to be accidentally triggered + which is important given neither mged or archer handle nirt's + invocation gracefully / asynchronously. encountered a hard + multi-minute unresponsive lockup while spinning a nurbs model + around as nirt ran prep. -2020-01-08 15:25 starseeker +2020-10-22 04:26 brlcad - * [r74646] src/libbrep/cdt/omesh.cpp, src/libbrep/cdt/overt.cpp, - src/libbrep/cdt/ovlps.cpp: - Break out the omesh implemenation. + * [r77533] src/libged/exec.cpp, src/libged/ged_init.cpp, + src/libged/include/plugin.h: + having every potential access point call init is super brittle. + void pointer is no good too. instead, wrap the command map in a + function and make it do the init check for all. that said, we + shouldn't be initializing like this. -2020-01-07 23:09 brlcad +2020-10-22 03:59 brlcad - * [r74645] src/librt/bundle.c: - this function is not supposed to be public. rt_shootrays() needs - to configurably run in parallel still, though. it's incomplete. + * [r77532] src/libged/tests/plugins.cpp: + don't use ged_ prefix on non-public symbols. makes it harder to + read and shadowed a global. -2020-01-07 22:11 starseeker +2020-10-22 03:54 brlcad - * [r74644] src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - getting some odd behavior, but this gets further than anything - yet - checkpoint + * [r77531] src/libged/ged_init.cpp: + ws -2020-01-07 21:40 starseeker +2020-10-22 03:52 brlcad - * [r74643] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps_grps.cpp: - Try an all-up repair if the more focused logic can't resolve a - group. + * [r77530] src/libged/ged_init.cpp: + rename non-public symbols without the ged prefix -2020-01-07 21:11 starseeker +2020-10-22 03:44 brlcad - * [r74642] src/libbrep/cdt/ovlps_grps.cpp: - be more aggressive - still not getting one of the groups cleared. + * [r77529] src/libged/ged_init.cpp: + the resulting vls doesn't need to be dynamic, avoid GET/PUT here + and rename sans prefix. -2020-01-07 20:25 starseeker +2020-10-22 03:42 brlcad - * [r74641] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps_grps.cpp: - checkpoint + * [r77528] src/libged/exec.cpp: + cleanup while reading -2020-01-07 19:23 starseeker +2020-10-22 03:41 brlcad - * [r74640] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps_grps.cpp: - seeing interference cases where the angles between triangle - planes are too wide for a common projection to work. + * [r77527] src/gtools/tests/bigdb.c: + make sure we don't overflow the allocation and print the title + differently -2020-01-07 18:43 starseeker +2020-10-21 23:50 starseeker - * [r74639] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/util.cpp: - See if we can use the tri_ray test to speed up the inside/outside - test - probably less robust in this form, but may be good enough - for now... + * [r77525] src/libtclcad/init.c: + Adapt logic from the thirdparty rework branch to assist the Tcl + init with finding the init.tcl file when we're using a bundled + Tcl. -2020-01-07 14:54 starseeker +2020-10-21 23:37 starseeker - * [r74637] src/libbrep/cdt/tri_isect.cpp: - perf is indicating that the point_inside test is crazy - expensive... will need to look for a faster way to do that, but - in the meantime see if we can skip the test at this point... + * [r77524] src/libtclcad/init.c: + Print more information about init failures. -2020-01-07 14:36 starseeker +2020-10-21 22:12 starseeker - * [r74636] src/libbrep/cdt/ovlps_grps.cpp: - Don't infinite loop here, but we've got other problems... getting - an invalid mesh from somewhere in the pipeline + * [r77523] src/gtools/tests/CMakeLists.txt: + With the shift to plugins for ged commands, any test executables + using them will need to be located in the bin dir, just like + those tests that need files from the data dir, and for the same + reason - we need bu_dir path lookups to work reliably, and for + that we need to be able to decode the executable path to a + correct relative location. Sean noticed the bigdb_1gb test was + failing when run with ctest but succeeded when run from the build + dir. Observing in debugger, bu_dir was succeeding when program + was run in isolation from a working dir of the top level build + dir, but failing when ctest did the launching. -2020-01-06 21:45 starseeker +2020-10-21 00:08 starseeker - * [r74635] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps_grps.cpp: - Try forcing vertex processing for the otherwise unmapped vertices - - sometimes we need the associated new verts. Need to review this - whole logic flow more carefully, but this gets us our second - successful converstion. + * [r77522] src/libged/brep/dplot_reader.c, + src/libged/brep/dplot_reader.h: + Add header and footer -2020-01-06 14:15 starseeker +2020-10-20 21:50 starseeker - * [r74634] src/libbrep/cdt/ovlps_grps.cpp: - initialize + * [r77521] include/bn/plot3.h: + Whoops, commit header -2020-01-05 21:13 starseeker +2020-10-20 20:19 starseeker - * [r74632] src/libbrep/cdt/ovlps_grps.cpp: - checkpoint + * [r77520] src/libbn/tests/CMakeLists.txt, + src/libbn/tests/invalid.plot3, src/libbn/tests/valid.plot3: + Stash valid and invalid binary plot3 files from gqa -2020-01-05 20:01 starseeker +2020-10-20 20:00 starseeker - * [r74631] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - package the logic boiling the pair sets down into unique pointer - sets. + * [r77519] src/libbn/plot3.c, src/libbn/tests/CMakeLists.txt, + src/libbn/tests/plot3.c: + Rough in a way to test the validity/invalidity of a plot3 file, + using logic similar to that used by rt_uplot_to_vlist. Idea is to + be able to detect when plotting file output has gone wrong for + regression testing. -2020-01-05 19:40 starseeker +2020-10-20 19:14 starseeker - * [r74630] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps_grps.cpp: - checkpoint + * [r77518] src/mged/attach.c: + Check for a view state before we try to set this - if the last + MGED dm was closed, we may not have one. (User reported issue) -2020-01-04 23:02 starseeker +2020-10-20 19:07 starseeker - * [r74625] src/libbrep/cdt/ovlps_grps.cpp: - checkpoint + * [r77517] src/libbu/file.c: + Think we mean to check fn here, not rp? rp is uninitialized at + this point inthe code (thanks GCC) -2020-01-04 21:46 starseeker +2020-10-20 17:39 starseeker - * [r74624] src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp, src/libged/facetize.cpp: - Sigh. Fix the point insertion to keep the mesh valid, but exposes - an issue where the ovlp groups aren't being built the way we need - them to be... + * [r77516] NEWS: + libtclcad I/O handlers weren't set up to handle opening and + closing multiple processes as subcommands - this has now been + fixed with per-process channel management. -2020-01-04 19:24 starseeker +2020-10-20 17:36 starseeker - * [r74623] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - This condition can happen legitimately in planar meshes + * [r77515] NEWS: + Fixed handling of 'n' key when MGED forward_key_bindings is + called - needs to be treated like other bindings now that it + shoots a nirt ray in the view. -2020-01-04 17:50 starseeker +2020-10-20 17:19 starseeker - * [r74622] src/libbrep/cdt/cdt.cpp, src/libbrep/cdt/mesh.cpp, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp, - src/libbrep/cdt/tri_isect.cpp: - Disable a lot of the debugging messages. + * [r77514] misc/repoconv/checkout_dercs.sh: + Generalize slightly -2020-01-04 17:29 starseeker +2020-10-20 03:11 starseeker - * [r74621] src/libged/facetize.cpp: - use the right arg count var for dpa + * [r77511] misc/repoconv/checkout_dercs.sh: + Work in the third party branch moved stepcode, and the files in + the new location no longer matched the rejection filters for + dercs. -2020-01-04 17:21 starseeker +2020-10-18 21:56 brlcad - * [r74620] include/brep/cdt.h, src/libbrep/cdt/util.cpp, - src/libged/facetize.cpp: - Hook up logic for non-overlapping brep facetizing to a -B option - under the facetize command. Add some guards to prevent execution - of this logic on inputs it is known not to handle (untested) + * [r77486] regress/repository/repocheck.cpp: + bring it under 250 -2020-01-04 15:33 starseeker +2020-10-18 21:55 brlcad - * [r74618] src/libged/CMakeLists.txt, src/libged/facetize.c, - src/libged/facetize.cpp: - c->c++ + * [r77485] src/libged/brep/dplot_reader.c: + regress fix, call bu_setprogname() -2020-01-03 21:00 starseeker +2020-10-18 08:09 brlcad - * [r74616] src/libbrep/cdt/cdt.cpp, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - add a few explicit C++ includes + * [r77480] bench/run.sh: + echo builtin is unreliable as some platforms support \n and + others do not, some recognize -n and -c flags to echo, others do + not. instead use a here now doc so we can avoid calling echo + altogether. -2020-01-03 20:39 starseeker +2020-10-18 08:02 brlcad - * [r74615] src/libbrep/cdt/tri_isect.cpp: - turn off some verbose printing + * [r77479] src/libbu/file.c: + add special case handling of '-' as representing standard input + for bu_file_same() and bu_file_exits() but not for all the other + lower-lever file handling functions. -2020-01-03 20:35 starseeker +2020-10-18 07:54 brlcad - * [r74614] src/libbrep/cdt/ovlps.cpp: - initialize + * [r77478] include/bu/file.h: + mention the special handling of '-' -2020-01-03 19:44 starseeker +2020-10-18 05:54 brlcad - * [r74613] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps_grps.cpp: - Try an experiment with using coplanar triangle overlap testing to - grow the polygons. + * [r77477] src/libbu/file.c: + stdin is a special case for bu_file_same() -2020-01-03 17:36 starseeker +2020-10-17 16:41 starseeker - * [r74612] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp, src/libbrep/cdt/tri_isect.cpp: - Check against the mesh, not the brep surface - at this stage, - distance to the opposite mesh is what we actually care about. + * [r77475] CMakeLists.txt, misc/CMake/BRLCAD_Util.cmake, + misc/CMake/CMakeLists.txt, misc/CMake/scripts, + misc/CMake/scripts/printtime.cmake, + misc/CMake/scripts/timestamp.cmake: + Pull the timestamping updates from thirdparty_rework back up into + trunk. -2020-01-03 16:30 starseeker +2020-10-17 15:51 starseeker - * [r74611] src/libbrep/cdt/cdt.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/tri_isect.cpp, src/libbrep/cdt/util.cpp: - Check for closest point on any nearby face + * [r77472] CMakeLists.txt, bench/CMakeLists.txt, db/CMakeLists.txt, + doc/CMakeLists.txt, doc/docbook/CMakeLists.txt, + doc/docbook/articles/CMakeLists.txt, + doc/docbook/books/CMakeLists.txt, + doc/docbook/devguides/CMakeLists.txt, + doc/docbook/lessons/CMakeLists.txt, + doc/docbook/presentations/CMakeLists.txt, + doc/docbook/resources/brlcad/CMakeLists.txt, + doc/docbook/specifications/CMakeLists.txt, + doc/docbook/system/CMakeLists.txt, + doc/docbook/system/man5/CMakeLists.txt, + misc/CMake/BRLCAD_Targets.cmake, misc/CMake/Distcheck.cmake, + misc/CMake/DocBook.cmake, misc/CMake/ThirdParty_TCL.cmake, + misc/pkgconfig/CMakeLists.txt, misc/tools/lemon/CMakeLists.txt, + misc/tools/re2c/CMakeLists.txt, + misc/tools/xmltools/libexslt/CMakeLists.txt, + misc/tools/xmltools/libxml/CMakeLists.txt, + misc/tools/xmltools/libxslt/CMakeLists.txt, + src/libbn/tests/CMakeLists.txt, src/libbrep/CMakeLists.txt, + src/libbrep/tests/CMakeLists.txt, src/libbu/tests/CMakeLists.txt, + src/libgcv/plugins/vol/CMakeLists.txt, + src/libged/brep/CMakeLists.txt, src/other/CMakeLists.txt: + Replace implicit configure_file distclean calls with explicit + calls. -2020-01-02 22:02 starseeker +2020-10-17 15:12 starseeker - * [r74610] src/libbrep/cdt/tri_isect.cpp: - Need to use the closest point to any surface, not just the one - supplying the other triangle - how 'deep' inside the volume the - edge point is isn't necessarily local to just the triangle pair, - have an example where this appears to be causing a spurious - overlapping tri report... + * [r77471] CMakeLists.txt, db/CMakeLists.txt, + doc/docbook/system/man5/CMakeLists.txt, + regress/icv/CMakeLists.txt, regress/nurbs/CMakeLists.txt, + regress/pkg/CMakeLists.txt, src/libbn/tests/CMakeLists.txt, + src/libbu/tests/CMakeLists.txt: + See if we can eliminate the wrapping of configure_file -2020-01-02 20:47 starseeker +2020-10-17 14:49 starseeker - * [r74609] src/libbrep/cdt/ovlps.cpp: - Adjust comments + * [r77470] CMakeLists.txt, misc/CMake/BRLCAD_Targets.cmake, + src/libbu/tests/dylib/CMakeLists.txt: + Eliminate wrapper for add_library. -2020-01-02 20:38 starseeker +2020-10-17 14:39 starseeker - * [r74608] src/libbrep/cdt/ovlps.cpp: - More adjustment of process looping code to reflect current - behavior + * [r77469] CMakeLists.txt: + Always define the timestamp utilites, eliminate the override of + add_subdirectory. Getting close... -2020-01-02 20:30 starseeker +2020-10-17 14:27 starseeker - * [r74607] src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/tri_isect.cpp: - Turn of a bit of debug printing + * [r77468] CMakeLists.txt: + Replace manual tracking of build target sets with use of new + CMake properties. Significantly reduces (but doesn't yet + eliminate) our use of the discouraged practice of CMake function + redefinition. -2020-01-02 20:25 starseeker +2020-10-15 16:41 starseeker - * [r74606] src/libbrep/cdt/ovlps_grps.cpp: - simplify, make the names and comments reflect a little better - what's currently happening. Don't know if this is how it will end - up, but need to make it clearer what steps are/aren't active in - the code... + * [r77455] src/tclscripts/mged/bindings.tcl: + n has a binding now, so clear it as well when forwarding is + turned on. -2020-01-02 20:06 starseeker +2020-10-15 14:40 starseeker - * [r74605] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp: - shared_cdts belongs conceptually with the ovlps_grps code + * [r77454] src/libtclcad/command_io.cpp: + Whoops, svn add the file... -2020-01-02 19:12 starseeker +2020-10-15 14:40 starseeker - * [r74604] src/libbrep/cdt/ovlps.cpp: - Use the new uedge_polygon function + * [r77453] src/libtclcad/CMakeLists.txt, src/libtclcad/commands.c, + src/libtclcad/commands.cpp: + Break just the I/O portion out into a C++ file, fix a few things + in the Windows portion. -2020-01-02 19:02 starseeker +2020-10-15 13:46 starseeker - * [r74603] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps_grps.cpp: - Make the polygon-from-uedge operation a cdt_mesh functionality + * [r77452] src/libtclcad/commands.cpp: + C++17 doesn't like register -2020-01-02 17:05 starseeker +2020-10-15 13:44 starseeker - * [r74600] src/libbrep/cdt/ovlps_grps.cpp: - Fix mesh used for inside/outside, select the edge with the - furthest midpoint from the opposite mesh's surface. For the first - time, rtcheck agrees that we have an overlap free meshing of the - single cylinder and hole example. + * [r77451] include/tclcad.h, src/libtclcad/commands.cpp, + src/mged/mged.c: + Start working on per-process channel storage for Windows -2020-01-02 16:55 starseeker +2020-10-15 12:58 starseeker - * [r74599] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp, src/libbrep/cdt/tri_isect.cpp: - checkpoint + * [r77450] src/libtclcad/commands.cpp: + Adjust to C++ -2020-01-02 13:56 starseeker +2020-10-15 12:56 starseeker - * [r74598] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp, src/libbrep/cdt/tri_isect.cpp: - Add a mode flag to tri_isect (not used as yet) + * [r77449] src/libtclcad/CMakeLists.txt, src/libtclcad/commands.c, + src/libtclcad/commands.cpp: + C->C++ -2020-01-01 18:49 starseeker +2020-10-15 12:54 starseeker - * [r74597] src/libbrep/cdt/ovlps_grps.cpp: - Add another note about what we need to implement here... + * [r77448] src/libtclcad/commands.c: + Add some const markers to string assignments -2020-01-01 18:31 starseeker +2020-10-15 07:57 brlcad - * [r74596] src/libbrep/cdt/ovlps_grps.cpp: - Make a note about what we need to do with the group build. + * [r77447] bench/run.sh: + we only care about the pixel count line -2020-01-01 16:27 starseeker +2020-10-15 07:55 brlcad - * [r74595] src/libbrep/cdt/ovlps.cpp: - Prevent an infinite loop if we can't use vertices. Looks like - points aren't getting introduced into the other mesh as - expected... + * [r77446] bench/run.sh: + can't rely on echo -n in strict mode, so just match a single rgb + triplet of newlines. print the return value too, so we have a + better idea what's going on when things are sour. -2020-01-01 08:28 brlcad +2020-10-15 07:04 brlcad - * [r74594] src/libbrep/cdt/cdt.cpp: - llvm is not happy about double parens as a lintian issue. makes - the code seem like logic is missing or possibly misaligned. + * [r77445] src/mged/attach.c: + plug memory leak -2020-01-01 02:48 starseeker +2020-10-15 07:00 brlcad - * [r74593] src/libbrep/cdt/surf.cpp: - initialize individually + * [r77444] NEWS: + fixed mged crashing when no DMs other than nu are available. + + if all DMs except nu end up disabled after cmake, e.g., headless + server compiles or no-X11 builds, mged was crashing in classic + mode on + attach prompt construction. I made it less likely for libdm to + return + no dms and made mged handle that condition regardless for + future-proofing. bug that was observed by a user and myself. -2020-01-01 00:03 starseeker +2020-10-15 06:51 brlcad - * [r74592] src/libbrep/cdt/tri_isect.cpp: - First cut at using inside/outside data to flag edge-only - intersections. + * [r77443] src/mged/attach.c: + redo the attach prompt so we don't crash when there aren't dm's + or dm_list_types() doesn't return anything, for whatever reason. + also avoid making an unnecessary copy and memory allocations just + so we can iterate over an argv... just do a normal tokenized + iteration. -2019-12-31 23:22 starseeker +2020-10-15 06:23 brlcad - * [r74591] src/libbrep/cdt/tri_isect.cpp: - Add a class to hold tri intersection data + * [r77442] src/libdm/dm_plugins.cpp: + make sure dm_list_types() returns the nu interface -2019-12-31 21:25 starseeker +2020-10-15 06:14 brlcad - * [r74590] src/libbrep/cdt/tri_isect.cpp: - Start working on detecting an intersection case that only rtcheck - is seeing right now - appears to have to do with edge-only - intersection filtering and when we can/can't do so successfully. + * [r77441] src/libdm/dm_plugins.cpp: + remove nu from the list of priorities since it's a special + built-in. it needs to be specifically considered anyways, so + removing can make logic inconsistencies more obvious (e.g., + dm_list_types() failed to return it) -2019-12-31 21:18 starseeker +2020-10-15 05:39 brlcad - * [r74589] include/bg/tri_tri.h, src/libbg/tests/CMakeLists.txt, - src/libbg/tri_tri.c: - Putting in a secondary testing function for now since I'm not - 100% sure of this, but it looks as though the coplanar tri-tri - test is doing an insufficient check for whether triangles are - fully contained and is returning a false positive for contained - in the edge intersection case... I could see it if the area test - picked up on the super-thin sliver of the edge, but what seems to - be happening is the single point-in-triangle test checking for - triangle-in-triangle is insufficient - one or two of the edge - points might report marginally inside, but manifestly neither of - the triangles is inside the other so per the source comment that - portion of the test shouldn't be returning true, unless I'm - missing something. + * [r77440] src/libdm/dm_plugins.cpp: + consolidate the list of interfaces to one place -2019-12-31 20:36 starseeker +2020-10-15 05:15 brlcad - * [r74588] src/libbg/tests/tri_tri_isect_coplanar.cpp: - set up to use C++ numeric conversions + * [r77439] src/libdm/dm_plugins.cpp: + minor cleanup -2019-12-31 20:06 starseeker +2020-10-15 05:10 brlcad - * [r74587] src/libbg/tests/CMakeLists.txt, - src/libbg/tests/tri_tri_isect_coplanar.c, - src/libbg/tests/tri_tri_isect_coplanar.cpp: - rename to C++ file + * [r77438] src/libdm/dm_plugins.cpp: + had maintenance cost, not immediately actionable. let repo hold + it. -2019-12-31 16:59 starseeker +2020-10-15 05:05 brlcad - * [r74586] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp: - Checkpoint - successful replacement of overlap group triangles. + * [r77437] src/libdm/dm_plugins.cpp: + nix the unnecessary vls. fixes memory leak too. -2019-12-31 13:21 starseeker +2020-10-15 03:33 starseeker - * [r74585] src/librt/primitives/ebm/ebm.c: - Revert r74544 - broke regress-solids regression test + * [r77436] src/libtclcad/commands.c: + Closing multiple rt instances is crashing MGED on Windows. Really + need to defer I/O channel closure until all currently running + subprocesses are terminated... in the meantime try not to do + things that cause the crash. This isn't a final solution, because + I/O from any remaining running subprocesses will be lost as the + first one calls the delete handlers and closes the channels. -2019-12-30 19:09 starseeker +2020-10-15 00:49 starseeker - * [r74584] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/ovlps.cpp: - More work on polygon building + * [r77433] misc/CMake/CompilerFlags.cmake: + CMake 3.19rc1 provides a CHECK_COMPILER_FLAG definition - don't + define ours if the more general upstream version is present. + (Otherwise it produces a recursion error.) Once we require 3.19 + as a minimum we can just eliminate this altogether. -2019-12-30 17:49 starseeker +2020-10-14 17:31 brlcad - * [r74583] src/libbrep/cdt/edge.cpp, src/libbrep/cdt/mesh.cpp, - src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp: - more 2d type updating + * [r77432] src/mged/attach.c: + reduce retries to 100. still need to fix potential 0-alloc. -2019-12-30 16:38 starseeker +2020-10-14 17:21 brlcad - * [r74582] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/tri_isect.cpp: - checkpoint + * [r77431] src/libged/overlay/overlay.c: + icv_image_size() takes size_t, not unsigned long. error reported + by bob prohaska (sf sreq# 123) -2019-12-30 16:03 starseeker +2020-10-13 20:01 brlcad - * [r74581] src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/tri_isect.cpp: - checkpoint + * [r77420] include/bio.h: + derp. -2019-12-30 14:28 starseeker +2020-10-13 19:43 brlcad - * [r74580] src/libbrep/cdt/ovlps.cpp: - use the mesh's tri_process + * [r77419] include/bio.h: + be a bit more robust, make sure we only define the macro where we + have the stat mode. -2019-12-30 14:25 starseeker +2020-10-13 19:39 brlcad - * [r74579] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - implicit -> explicit triangle to polygon vert mappings + * [r77417] include/bio.h: + add all the stat wrappers for windows comapt -2019-12-30 14:19 starseeker +2020-10-13 19:25 brlcad - * [r74578] src/libbrep/cdt/edge.cpp, src/libbrep/cdt/mesh.cpp, - src/libbrep/cdt/mesh.h: - Make 2d edge type explicit for remove_ordered_edge + * [r77415] bench/pixcmp.c: + rename with more specificity -2019-12-30 14:16 starseeker +2020-10-13 13:21 starseeker - * [r74577] src/libbrep/cdt/mesh.cpp: - add a couple mappings for polygon verts + * [r77409] src/art/art.cpp, src/art/art.h, + src/art/brlcadplugin.cpp: + Similar class-memaccess guard for art code -2019-12-30 00:52 starseeker +2020-10-13 13:13 starseeker - * [r74576] src/libbrep/cdt/edge.cpp, src/libbrep/cdt/mesh.cpp, - src/libbrep/cdt/mesh.h: - use edge2d_t for ordered edge insertion + * [r77408] src/libbg/spsr/SPSR.cpp: + User tried compiling and got an unknown option failure with the + pragma for class-memaccess. Daniel checked and determined this + was introduced in GCC 8, so add a guard to only use the pragma if + available. -2019-12-29 23:46 starseeker +2020-10-08 18:27 brlcad - * [r74575] src/libbrep/cdt/cdt.cpp, src/libbrep/cdt/edge.cpp, - src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/surf.cpp: - polyedge verts are 2d - rename variable to reflect this + * [r77369] bench/pixcmp.c: + break the actual comparison out into a function since the main + loop is getting unwieldy -2019-12-29 23:33 starseeker +2020-10-08 18:07 brlcad - * [r74574] src/libbrep/cdt/mesh.h: - Add 2d versions of the edge containers to see if we can have the - compiler help us keep this straight... + * [r77368] bench/pixcmp.c: + make sure standard input is binary mode, leave note about stdout + for future me -2019-12-29 22:09 starseeker +2020-10-08 18:00 brlcad - * [r74573] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h: - Add the reverse mapping to the polygon - going to have to be - careful about this, since I did explicitly make use of the - implicit 1-1 between 2D and 3D earlier. + * [r77367] src/util/pixdiff.c: + replace the macro with a function, utilize size_t -2019-12-29 20:30 starseeker +2020-10-08 17:28 brlcad - * [r74572] src/libbrep/cdt/ovlps.cpp: - checkpoint + * [r77366] bench/pixcmp.c: + prevent overflow and bad behavior on large values -2019-12-29 19:16 starseeker +2020-10-08 05:37 brlcad - * [r74571] src/libbrep/cdt/ovlps.cpp: - Start turning on the first pieces of the polygon building code. - Not to the hard parts yet. + * [r77365] bench/pixcmp.c: + prevent stop-after value from interfering with iteration until + end of input. also fix a bug causing double-skipping of inputs. + most significant is switching from relying upon EOF to asuming a + valid stat size so users can specify lengths that go beyond + available data. -2019-12-29 19:09 starseeker +2020-10-08 04:12 brlcad - * [r74570] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp: - refactor the fit plane into the ovlp_grp class, start shifting - polygon building to a function + * [r77364] bench/pixcmp.c: + non-trivial to skip differing amounts in an interlaced stream, so + just don't allow it. also make sure usage statements prints the + right name of the binary. -2019-12-29 18:41 starseeker +2020-10-08 03:58 brlcad - * [r74569] src/libbrep/cdt/ovlps.cpp: - Ah, just wasn't counting correctly in the check. + * [r77363] bench/pixcmp.c: + implement a -n option. + + This options makes it so we can specify exactly how many pixels + or bytes to compare. The change also fixes a bug where we attempt + to seek piped input and exit. -2019-12-29 02:44 starseeker +2020-10-08 03:28 brlcad - * [r74568] src/libbrep/cdt/ovlps.cpp: - Print more information. + * [r77362] bench/pixcmp.c: + fix copy-paste error so debug msg is right. -2019-12-29 00:47 starseeker +2020-10-07 16:27 starseeker - * [r74567] src/libbrep/cdt/ovlps.cpp: - Need to drill down at this point - tri lookup failure, but not - audit failure. + * [r77358] BUGS: + GQA isn't generating valid plot3 files in multithreaded mode. -2019-12-29 00:31 starseeker +2020-10-07 16:14 starseeker - * [r74566] src/libbrep/cdt/edge.cpp, src/libbrep/cdt/mesh.cpp: - Add more debugging info, use the same uedges lookup pattern as - the triangle lookup. This isn't the only issue - still having - lookup failures, just not catching them in the CDT_Audit function - now... + * [r77357] include/analyze/info.h, src/libged/gqa/CMakeLists.txt, + src/libged/gqa/gqa.c, src/libged/gqa/gqa.cpp: + C->C++ -2019-12-27 13:58 starseeker +2020-10-07 15:17 starseeker - * [r74565] README: - Whatever our minimum required CMake version is currently, it's - much higher than 2.8.4 - somewhere in the 3.x series, I - believe... + * [r77356] bench/pixcmp.c: + I don't think we ment to fall through here? -2019-12-27 13:37 starseeker +2020-10-06 20:58 brlcad - * [r74564] src/libbrep/cdt/cdt.cpp, src/libbrep/cdt/mesh.cpp: - Print more information. If I recall correctly there are - provisions for duplicate points around closed areas as a way to - handle the initial breakdown of loops, but it looks like various - parts of the code aren't agreeing on which of those duplicates to - use and consequently we're not getting a canonical lookup. Will - have to look into it in more detail. + * [r77353] bench/run.sh: + fixed a pixcmp bug where it skipped the last byte comparison, so + now we need to not send the newline -2019-12-26 18:55 starseeker +2020-10-06 20:55 brlcad - * [r74563] src/libbrep/cdt/mesh.cpp: - Add debugging code to zero in on the addition of a specific - problem triangle. Looking at the uedges it generates vs the ones - coming from the audit, we're definitely referencing different - point indices on the uedges... + * [r77352] doc/docbook/system/man1/pixcmp.xml: + update pixcmp manual page with the remapped options and a new + example involving the echo command -2019-12-25 14:24 starseeker +2020-10-06 20:17 brlcad - * [r74562] src/libbrep/cdt/cdt.cpp: - refine the plotting somewhat - don't plot expected results on - closed edges. Pattern is making sense - question is what to do - about it... + * [r77351] NEWS: + note pixcmp changes. now has imnew options for -s same and -d + different pixel/byte printing. has new help flags. enforces the + -q flag (previously -s) on header and footer. reports the type of + difference too. -2019-12-25 14:09 starseeker +2020-10-06 20:16 brlcad - * [r74561] src/libbrep/cdt/cdt.cpp, src/libbrep/cdt/ovlps.cpp: - Plot the edges and faces. The visual pattern is clear - the - invalidity is related to the closed surface edges. The 3d->2d - mappings there are not unique, so we'll have to think about how - to handle it in a useful fashion. The audit function looks like - it is wrong in that it's not happy when it gets two triangles on - a single face on a closed edge, which is right, but we clearly - have a lookup failure on a triangle with one edge vert using a - vertex from the closed surface edge, which needs to work. + * [r77350] CHANGES: + pixcmp switches are trivially accommodated -2019-12-25 13:48 starseeker +2020-10-06 20:09 brlcad - * [r74560] src/libbrep/cdt/cdt.cpp, src/libbrep/cdt/ovlps.cpp: - Hook up triangle check into CDT_Audit. The initial triangulation - doesn't pass this test, so there's a problem somewhere... + * [r77349] bench/pixcmp.c: + Overhaul pixcmp with modified options and new output formatting. + + Notably, changed -s to -q from silence to quiet, so we can add a + -s + flag for printing same value matches. Also changed -l to -d for + printing different bytes to be consistent. Also added help flags. + + Another notable change is now those -d and -s output lines will + report + a label indicating whether the pixel or byte is matching, + off-by-1, + off-by-many, or missing as pixcmp now also handles comparing + different + size images. + + Cleaned up printing and usage accordingly. Will update other docs + and + references subsequently. -2019-12-25 13:34 starseeker +2020-10-06 19:51 starseeker - * [r74559] src/libbrep/cdt/ovlps.cpp: - Use the new uedges method when adding new edges as well. + * [r77347] misc/CMake/CMakeLists.txt, misc/CMake/date_delta.cpp: + It may be a while before it gets used, but stash the core piece + needed for a time delta calculator using date.h, which is close + to what's being considered for C++20. Eventually, we can use this + and replace the explicit math in the dreport_src logic in + misc/CMake/BRLCAD_Util.cmake - stashing now so I remember how to + do this next time. -2019-12-25 13:29 starseeker +2020-10-06 13:14 brlcad - * [r74558] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp: - implement uedges method for bedge_seg_t + * [r77340] bench/pixcmp.c: + if we're printing values, display a header on stderr -2019-12-25 13:25 starseeker +2020-10-06 13:13 brlcad - * [r74557] src/librt/primitives/ebm/ebm.c: - GCC parenthesis around && error + * [r77339] bench/pixcmp.c: + implement support for comparing images with different sizes. + instead of globbing the extra pixels in as off by many, currently + printing them separately as a missing count -2019-12-25 13:06 starseeker +2020-10-06 03:26 brlcad - * [r74556] src/libbrep/cdt/edge.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp: - revert - uedges would be better at this API level, I think... + * [r77338] misc/CMake/FindGL.cmake, misc/CMake/FindX11.cmake: + this feels wrong given implications, but it does appear to be how + this is coded. this support for arm (raspberry pi) is consistent + with the inclusion of i386-linux-gnu as a search path. this is sf + patch #557 X11 and OpenGL detection on Raspberry Pi (from Anssi + Saari and Bob Prohaska) -2019-12-25 06:42 starseeker +2020-10-05 16:23 brlcad - * [r74555] src/libbrep/cdt/edge.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp: - make a stab at refactoring the bedge_seg to triangles logic into - a method on the class. + * [r77334] src/liboptical/material.c: + one expression per line for readability -2019-12-25 02:15 starseeker +2020-10-05 16:19 brlcad - * [r74554] src/libbrep/cdt/cdt.cpp, src/libbrep/cdt/cdt.h: - Sigh. Need some way to know when we've missed a stich working - with the all up mesh data. Stub in a function whose job it will - be to walk through and do the consistency checks. + * [r77333] src/liboptical/material.c: + rework the dynamic library lookup to go through bu_dir() for all + lookups, so there are no longer hardcoded assumptions about the + library suffix. eliminates the need for a direct cwd call as + well. -2019-12-25 02:07 starseeker +2020-10-05 14:32 brlcad - * [r74553] src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/ovlps.cpp: - Not that simple... tri_add is supposed to be maintaining - uedges2tris - added a mesh validation check, but problem looks - like it is elsewhere. + * [r77332] src/liboptical/material.c: + cal bu_dir() to build up our path so we can build up an + appropriate path into the libdir. also lets us specify a proper + library suffix. -2019-12-25 01:34 starseeker +2020-10-05 14:20 brlcad - * [r74552] src/libbrep/cdt/ovlps.cpp: - Not 100% sure, but it looks like I forgot to update the - uedges2tris map and was getting away with it until we actually - needed a replacement triangle in a subsequent operation... + * [r77331] src/liboptical/material.c, src/liboptical/sh_xxx.c: + don't look for a hard-coded 'shaders.so' library. quite the + security vulnerability. also, more consistently check for the + library with and without the lib prefix (not great, but ugh) -2019-12-25 01:19 starseeker +2020-10-05 14:12 brlcad - * [r74551] src/libbrep/cdt/ovlps.cpp: - uedge2tris lookup isn't working - no triangle lookup, no - successful split. + * [r77330] src/liboptical/material.c: + convert another gnu-extension call to getcwd() into bu_getcwd(). + here, the non-null return looks beneficial. -2019-12-25 00:54 starseeker +2020-10-05 14:04 brlcad - * [r74550] src/libbrep/cdt/ovlps.cpp: - Getting closer to one of the issues - closest_uedge is returning - something less than helpful for this problem case, need to drill - into why... + * [r77329] src/librt/db_open.c: + save to get app.h for bu_getcwd -2019-12-24 20:30 starseeker +2020-10-05 14:02 brlcad - * [r74549] src/libbrep/cdt/ovlps.cpp: - trying to process points that become edge points after refinement - as interior points (I think) - checkpoint. + * [r77328] src/librt/db_open.c: + compiler warns we're assuming a gnu extension here. go through + our wrapper to ensure getcwd is called portably. means we'll + never get NULL return, though, so make sure we got a path. -2019-12-24 19:47 starseeker +2020-10-05 13:28 brlcad - * [r74548] src/libbrep/cdt/ovlps.cpp: - Sigh - start zeroing in on how this point gets introduced... + * [r77327] src/libbg/spsr/MAT.inl: + midPoint is an int, initialized to -1, so the size_t needs to be + cast to check that (otherwise, always conditional is always true) -2019-12-24 19:29 starseeker +2020-10-02 18:06 starseeker - * [r74547] src/libbrep/cdt/mesh.cpp: - check for triangles filling in a boundary loop - doesn't look - like that's the issue + * [r77326] doc/docbook/system/mann/search.xml: + fix xml -2019-12-24 18:52 starseeker +2020-10-02 17:29 starseeker - * [r74546] src/libbrep/cdt/ovlps.cpp: - Do more validity checking - getting into a bad state, but not - 100% sure why yet. + * [r77325] NEWS, src/librt/search.c: + List a couple more objects that aren't shapes -2019-12-24 06:54 brlcad +2020-10-02 17:20 starseeker - * [r74545] AUTHORS: - credit jeffrey liu for his code contributions during gci 2019. - started with a rewrite of pixcount without redblack and appleseed - work (both still pending commit), as well as work on ebm - (committed). + * [r77324] NEWS, doc/docbook/system/mann/search.xml, + src/librt/search.c: + Per user request, add a 'volume' option to types that will match + objects locally defining a non-implicit volume. -2019-12-24 06:52 brlcad +2020-10-02 12:43 starseeker - * [r74544] include/rt/geom.h, src/librt/primitives/ebm/ebm.c: - accept a patch from jeffrey liu (gci 2019) that starts adding - support for in-memory ebm data - (https://codein.withgoogle.com/dashboard/task-instances/4936444632629248/) + * [r77320] bench/pixcmp.c: + macOS runner isn't liking size_t - just cast to ll. -2019-12-24 01:05 starseeker +2020-10-02 01:34 starseeker - * [r74543] src/libbrep/cdt/ovlps.cpp: - Try enabling the near-tri-edge detection logic - something not - quite right yet, missing some points and getting odd inclusions - elsewhere... + * [r77319] src/librt/gdiam/gdiam_test.cpp: + add bu_setprogname call -2019-12-23 03:40 starseeker +2020-10-02 01:33 starseeker - * [r74542] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp: - Need to try using the nearedge function... + * [r77318] doc/legal/embedded/gdiam.txt, + src/librt/gdiam/gdiam_test.cpp: + fix license and list test file -2019-12-22 23:08 starseeker +2020-10-02 00:13 starseeker - * [r74541] src/libbrep/cdt/tri_isect.cpp: - Move some more logic around + * [r77317] src/librt/vds/vds.c: + Check fread return, correct @param comments -2019-12-22 22:35 starseeker +2020-10-01 21:46 starseeker - * [r74540] src/libbrep/cdt/tri_isect.cpp: - Split out some of the tri_isect logic + * [r77316] doc/legal/embedded/SPSR.txt, + src/libbg/spsr/MemoryUsage.h: + remove unused file -2019-12-22 21:29 starseeker +2020-10-01 21:41 starseeker - * [r74539] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp: - Store more information about triangle intersections in the omesh + * [r77315] INSTALL, configure, doc/legal/embedded/CMakeLists.txt, + doc/legal/embedded/gdiam.txt, doc/legal/other/CMakeLists.txt, + doc/legal/other/libgdiam.txt, misc/win32-msvc/Dll/CMakeLists.txt, + src/external/Creo/CMakeLists.txt, + src/external/Cubit/CMakeLists.txt, + src/external/Unigraphics/CMakeLists.txt, + src/librt/CMakeLists.txt, src/librt/gdiam, + src/librt/gdiam/LICENSE.MIT, src/librt/gdiam/README, + src/librt/gdiam/gdiam.cpp, src/librt/gdiam/gdiam.hpp, + src/librt/gdiam/gdiam_test.cpp, src/other/CMakeLists.txt, + src/other/libgdiam, src/other/libgdiam.dist: + gdiam is another easy one, without any particular upstream + activity. -2019-12-21 19:35 starseeker +2020-10-01 21:19 starseeker - * [r74538] src/rt/art.cpp: - use the direct link for the obj file + * [r77314] misc/CMakeLists.txt, misc/external_build_testing: + Obsolete due to thirdparty_rework branch. -2019-12-21 19:31 starseeker +2020-10-01 21:17 starseeker - * [r74537] src/rt/art.cpp: - Bundled png doesn't work with art + * [r77313] INSTALL, configure, doc/legal/embedded/CMakeLists.txt, + doc/legal/embedded/vds.txt, doc/legal/other/CMakeLists.txt, + doc/legal/other/libvds.txt, misc/CMake/CMakeLists.txt, + misc/CMake/FindVDS.cmake, misc/win32-msvc/Dll/CMakeLists.txt, + src/external/Creo/CMakeLists.txt, + src/external/Cubit/CMakeLists.txt, + src/external/Unigraphics/CMakeLists.txt, + src/librt/CMakeLists.txt, src/librt/vds, src/librt/vds/COPYING, + src/librt/vds/README, src/librt/vds/vds.c, src/librt/vds/vds.h, + src/other/CMakeLists.txt, src/other/libvds, + src/other/libvds.dist: + Not even Debian is maintaining a vds package anymore. This one is + an easy embedding in librt - strip down, clean up and move. + +2020-10-01 21:08 starseeker + + * [r77312] doc/legal/embedded/SPSR.txt, src/libbg/CMakeLists.txt, + src/libbg/spsr/Geometry.h, src/libbg/spsr/Hash.h, + src/libbg/spsr/MultiGridOctreeData.h: + Don't need Hash.h anymore + +2020-10-01 20:42 starseeker + + * [r77311] INSTALL, configure, doc/legal/embedded/SPSR.txt, + misc/CMake/BRLCAD_Targets.cmake, + src/external/Creo/CMakeLists.txt, src/libbg/CMakeLists.txt, + src/libbg/spsr, src/libbg/spsr.c, src/libbg/spsr/Allocator.h, + src/libbg/spsr/Array.h, src/libbg/spsr/Array.inl, + src/libbg/spsr/BSplineData.h, src/libbg/spsr/BSplineData.inl, + src/libbg/spsr/BinaryNode.h, src/libbg/spsr/Factor.cpp, + src/libbg/spsr/Factor.h, src/libbg/spsr/FunctionData.h, + src/libbg/spsr/FunctionData.inl, src/libbg/spsr/Geometry.cpp, + src/libbg/spsr/Geometry.h, src/libbg/spsr/Geometry.inl, + src/libbg/spsr/Hash.h, src/libbg/spsr/LICENSE, + src/libbg/spsr/MAT.h, src/libbg/spsr/MAT.inl, + src/libbg/spsr/MarchingCubes.cpp, src/libbg/spsr/MarchingCubes.h, + src/libbg/spsr/MemoryUsage.h, + src/libbg/spsr/MultiGridOctreeData.IsoSurface.inl, + src/libbg/spsr/MultiGridOctreeData.SortedTreeNodes.inl, + src/libbg/spsr/MultiGridOctreeData.h, + src/libbg/spsr/MultiGridOctreeData.inl, src/libbg/spsr/Octree.h, + src/libbg/spsr/Octree.inl, src/libbg/spsr/PPolynomial.h, + src/libbg/spsr/PPolynomial.inl, src/libbg/spsr/PlyVertexMini.h, + src/libbg/spsr/PointStream.h, src/libbg/spsr/PointStream.inl, + src/libbg/spsr/Polynomial.h, src/libbg/spsr/Polynomial.inl, + src/libbg/spsr/SPSR.cpp, src/libbg/spsr/SPSR.h, + src/libbg/spsr/SparseMatrix.h, src/libbg/spsr/SparseMatrix.inl, + src/libbg/spsr/Vector.h, src/libbg/spsr/Vector.inl, + src/libbg/spsr/cvertex.h, src/other/CMakeLists.txt, + src/other/libspsr, src/other/libspsr.dist: + Upstream has moved quite a bit from this version of SPSR, we've + added the library call to it which still isn't in upstream, and + experiments with the latest PoissonRecon project code indicated + it now takes a huge amount of RAM to compile out of the box. + Strip this down somewhat and move it into a subdir of libbg, + since a system version is currently guaranteed not to be + suitable... No particular point in paying the third party build + maintenance overhead right now. + +2020-10-01 19:56 starseeker -2019-12-21 18:59 brlcad + * [r77310] doc/README.Windows: + Note the trick about finding the source of a header inclusion - + this can be exceedingly useful at times... + +2020-10-01 19:02 starseeker + + * [r77309] CMakeLists.txt: + With a level 1 build, we no longer need Tcl. + +2020-10-01 14:32 starseeker + + * [r77308] src/other/CMakeLists.txt: + Record notes about cdt library... + +2020-10-01 13:13 starseeker + + * [r77302] NEWS, src/conv/fast4-g.c: + Just the filename for a default tile in fast4-g, not the whole + argv + +2020-09-30 22:26 starseeker + + * [r77298] TODO: + Make a note to relocate install location for GCV plugins. + +2020-09-30 22:25 starseeker + + * [r77297] TODO: + Release done, bump tasks + +2020-09-30 19:22 starseeker + + * [r77289] include/bu/app.h, src/libbu/dir.c, src/libtclcad/bu.c: + At least for now, back install dir reporting out of bu_dir in + trunk. Only being used in a branch right now, and exposing it has + design implications. + +2020-09-30 15:50 starseeker + + * [r77287] include/bu/app.h, src/libbu/dir.c, src/libtclcad/bu.c: + Add the install target to bu_dir, so we can tell if we're running + from the install target location or not. + +2020-09-29 18:35 brlcad + + * [r77275] NEWS: + pixcmp was essentially aborting every time if you tried to use + the skip option when the file size check was added. now it takes + the skip into consideration, only aborting if the comparison set + is different. + +2020-09-29 18:32 brlcad + + * [r77274] bench/pixcmp.c: + the size check was wrong if the skip option is being used. set + the stage for this being advisory since we certainly can compare + different size images. + +2020-09-29 18:09 starseeker + + * [r77273] bench/run.sh: + Revert r77207 workaround for pixcmp issue + +2020-09-29 17:51 brlcad + + * [r77272] bench/pixcmp.c: + the problem on bsd was simple struct initialization. needed to be + zero'd before use. + +2020-09-29 00:23 starseeker + + * [r77259] doc/legal/embedded/SPSR.txt, + doc/legal/other/CMakeLists.txt, doc/legal/other/SPSR.txt: + fix regress-licenses - * [r74536] include/brep/defines.h: - restore read/write quellage, othrwise we hit a build error. add - undefines after inclusion so the problematic enum hack doesn't - affect other code. +2020-09-28 22:16 starseeker -2019-12-21 18:28 starseeker + * [r77258] src/other/libspsr.dist: + Update distcheck file - * [r74535] src/rt/art.cpp: - There we go. Thanks to Sean for the pointer - integrate the - helloworld example from Appleseed so the art application does - something to exercise the renderer. Needs - https://github.com/appleseedhq/appleseed/blob/master/sandbox/examples/cpp/helloworld/data/scene.obj - present to run, but does generate the output image. This should - be a reasonable starting point for exploring BRL-CAD/Appleseed - integration. +2020-09-28 19:48 starseeker -2019-12-21 18:07 starseeker + * [r77257] doc/legal/other/SPSR.txt, src/other/libspsr/Src/Ply.h, + src/other/libspsr/Src/PlyFile.cpp, + src/other/libspsr/Src/PlyVertexMini.h, + src/other/libspsr/Src/PointStream.h, + src/other/libspsr/Src/PointStream.inl, + src/other/libspsr/Src/PoissonRecon.cpp, + src/other/libspsr/Src/SPSR.cpp, + src/other/libspsr/Src/SurfaceTrimmer.cpp: + Update for PoissonRecon issue #143: + https://github.com/mkazhdan/PoissonRecon/issues/143 - * [r74534] include/brep/defines.h: - It looks like these defines are causing problems for users of - read and write that include this header? +2020-09-25 20:22 starseeker -2019-12-21 17:49 starseeker + * [r77239] src/libbrep/tests/ppx.cpp: + Get ppx.cpp building on Windows - * [r74533] src/libbu/tests/CMakeLists.txt, - src/libbu/tests/redblack.c: - redblack is on its way out - dispense with this test +2020-09-25 16:51 starseeker -2019-12-21 17:07 starseeker + * [r77231] ., doc, doc/docbook/CMakeLists.txt, + doc/docbook/devguides, include, include/ged/commands.h, + src/libbrep/CMakeLists.txt, src/libbrep/boolean.cpp, + src/libbrep/brep_defines.h, src/libbrep/debug_plot.cpp, + src/libbrep/debug_plot.h, src/libbrep/intersect.cpp, + src/libbrep/tests/CMakeLists.txt, src/libbrep/tests/ppx.cpp, + src/libged/brep/CMakeLists.txt, src/libged/brep/brep.cpp, + src/libged/brep/dplot.c, src/libged/brep/dplot_parser.lemon, + src/libged/brep/dplot_reader.c, src/libged/brep/dplot_reader.h, + src/libged/brep/dplot_scanner.perplex, + src/libged/brep/ged_brep.h, src/libged/exec_mapping.cpp, + src/libtclcad/commands.c, src/tclscripts/lib/Ged.tcl: + Merge brep-debug logic into trunk + + These changes are getting increasingly difficult to maintain in a + branch. They are not changing much at the moment, so there is + little + incentive to keep them separate in a branch. Moreover, the + maintenance + cost of doing so is becoming significant. The branch can be made + again + when development resumes, but for the moment (since we don't want + to + lose this work) bring the files back into trunk so they are part + of + routine updates and modernization. - * [r74531] src/rt/CMakeLists.txt: - Ick. Ugly hack for the appleseed binary on Linux, but this does - get us to a runnable executable which prints a help message. +2020-09-25 16:43 starseeker -2019-12-21 15:32 starseeker + * [r77230] src/libged/analyze/util.cpp: + Add license header - * [r74530] misc/CMake/CMakeLists.txt, - misc/CMake/FindAppleseed.cmake, misc/CMake/FindOIIO.cmake, - src/rt/CMakeLists.txt, src/rt/art.cpp: - Start working on hooking Appleseed into the build. This is - looking to be a chore - the dependency stack for Appleseed is - huge, which means defining a bootstrap is going to be involved, - and I'm hitting various compile issues trying (the default 2.1.0 - source build doesn't work on latest Ubuntu, for example.) The - binary runs in isolation, but I'm having trouble linking the - library into the art executable - boost_system library apparently - needs to be linked into art, and even when I try that the - openimageio linking happy for some reason... +2020-09-25 13:41 starseeker -2019-12-21 13:12 starseeker + * [r77222] ., NEWS, doc/docbook/system/mann/analyze.xml, + doc/docbook/system/mann/kill.xml, + src/libged/analyze/CMakeLists.txt, src/libged/analyze/analyze.c, + src/libged/analyze/analyze.cpp, src/libged/analyze/arb8.cpp, + src/libged/analyze/arbn.cpp, src/libged/analyze/ars.cpp, + src/libged/analyze/ged_analyze.h, + src/libged/analyze/op_pnts_vol.cpp, + src/libged/analyze/sketch.cpp, src/libged/analyze/superell.cpp, + src/libged/analyze/util.cpp, src/libged/kill/kill.c, + src/libged/pnts_util.c, src/libged/pnts_util.h, + src/libged/tests/CMakeLists.txt, src/libged/tests/pnts_in_out.g: + Merge analyze command rework from branch, add doc update and NEWS + items. Immediate functionality is to use geometric inside/outside + testing to peform boolean ops on point clouds and generate new + point sets, but should be implemented in such a way as to allow + for expansion of additional capabilities. - * [r74529] regress/nurbs/regress-nurbs-nirt.cmake.in: - Arrgh, spaces in pathnames strikes again... try quoting the .g - file name +2020-09-25 01:10 starseeker -2019-12-21 13:01 starseeker + * [r77219] misc/repoconv/github_ci_actions.yml: + Switch MSVC back to a Ninja build. - * [r74528] src/libbrep/shape_recognition/cone.cpp, - src/libbrep/shape_recognition/cylinder.cpp: - Include bio.h for std::min and std::max usage on Windows +2020-09-24 21:20 starseeker -2019-12-20 22:17 starseeker + * [r77218] misc/repoconv/github_ci_actions.yml: + Since even serial building isn't guaranteeing stable outcomes, go + ahead and re-enable parallel. - * [r74527] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp: - Ah, right - clearing the refinement points before processing them - won't help much... +2020-09-24 20:55 starseeker -2019-12-20 21:24 starseeker - - * [r74526] src/libbrep/cdt/ovlps.cpp: - Something is backwards somewhere - not getting the interior - splits. + * [r77217] misc/repoconv/github_ci_actions.yml: + fix CMake syntax -2019-12-20 20:58 starseeker - - * [r74525] src/libbrep/cdt/ovlps.cpp: - There are various levels of aggressiveness when it comes to - finding nearby points, with different tradeoffs - stub in some - logic to explore them. - -2019-12-20 19:22 starseeker - - * [r74524] src/libbrep/cdt/ovlps.cpp: - More fiddling with point splitting... not there yet - -2019-12-20 19:04 starseeker - - * [r74523] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp: - refactor for debugging - -2019-12-20 16:11 starseeker - - * [r74519] src/libbrep/cdt/mesh.h, src/libbrep/cdt/ovlps.cpp, - src/libbrep/cdt/ovlps_grps.cpp, src/libbrep/cdt/tri_isect.cpp: - This undoubtedly broke a bunch of stuff, but refactor to pull the - refinement point and edge point logic out of the triangle - intersection code. Had some notions about performance - optimization, but at this stage the confusion aspect is - dominating even if there might be some performance to be had at - some point. Looking like more awareness of vert/edge status is - needed up front, and attempting that while tangling everything - even further just isn't going to work. - -2019-12-19 14:39 starseeker - - * [r74518] src/libbg/trimesh_pt_in.c, src/libged/pnts.cpp: - stash a few old pieces/notes from winding number explorations - -2019-12-18 21:40 starseeker - - * [r74517] src/libbrep/CMakeLists.txt, src/libbrep/RTree.h, - src/libbrep/cdt/RTree.h, src/libbrep/test_curve_intersect.cpp, - src/libbrep/test_point_intersect.cpp, - src/libbrep/tests/CMakeLists.txt, - src/libbrep/tests/test_curve_intersect.cpp, - src/libbrep/tests/test_point_intersect.cpp: - Move some more files around - -2019-12-18 17:32 starseeker - - * [r74516] src/libbrep/CMakeLists.txt, src/libbrep/cdt/cdt.h, - src/libbrep/cdt/cdt_closed_surf.cpp, - src/libbrep/cdt/cdt_edge.cpp, src/libbrep/cdt/cdt_mesh.cpp, - src/libbrep/cdt/cdt_mesh.h, src/libbrep/cdt/cdt_ovlps.cpp, - src/libbrep/cdt/cdt_ovlps_grps.cpp, src/libbrep/cdt/cdt_surf.cpp, - src/libbrep/cdt/cdt_tri_isect.cpp, src/libbrep/cdt/cdt_util.cpp, - src/libbrep/cdt/cdt_validate.cpp, - src/libbrep/cdt/closed_surf.cpp, src/libbrep/cdt/edge.cpp, - src/libbrep/cdt/mesh.cpp, src/libbrep/cdt/mesh.h, - src/libbrep/cdt/ovlps.cpp, src/libbrep/cdt/ovlps_grps.cpp, - src/libbrep/cdt/surf.cpp, src/libbrep/cdt/tri_isect.cpp, - src/libbrep/cdt/util.cpp, src/libbrep/cdt/validate.cpp: - rename - -2019-12-18 17:16 starseeker - - * [r74515] src/libbrep/CMakeLists.txt, src/libbrep/cdt, - src/libbrep/cdt.cpp, src/libbrep/cdt.h, src/libbrep/cdt/cdt.cpp, - src/libbrep/cdt/cdt.h, src/libbrep/cdt/cdt_closed_surf.cpp, - src/libbrep/cdt/cdt_edge.cpp, src/libbrep/cdt/cdt_mesh.cpp, - src/libbrep/cdt/cdt_mesh.h, src/libbrep/cdt/cdt_ovlps.cpp, - src/libbrep/cdt/cdt_ovlps_grps.cpp, src/libbrep/cdt/cdt_surf.cpp, - src/libbrep/cdt/cdt_tri_isect.cpp, src/libbrep/cdt/cdt_util.cpp, - src/libbrep/cdt/cdt_validate.cpp, - src/libbrep/cdt_closed_surf.cpp, src/libbrep/cdt_edge.cpp, - src/libbrep/cdt_mesh.cpp, src/libbrep/cdt_mesh.h, - src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps_grps.cpp, - src/libbrep/cdt_surf.cpp, src/libbrep/cdt_tri_isect.cpp, - src/libbrep/cdt_util.cpp, src/libbrep/cdt_validate.cpp: - move to subdirectory - -2019-12-18 17:12 starseeker - - * [r74514] src/libbrep/CMakeLists.txt, - src/libbrep/shape_recognition/cone.cpp, - src/libbrep/shape_recognition/cylinder.cpp, - src/libbrep/shape_recognition/pipeline.cpp, - src/libbrep/shape_recognition/planar.cpp, - src/libbrep/shape_recognition/shape_recognition_cone.cpp, - src/libbrep/shape_recognition/shape_recognition_cylinder.cpp, - src/libbrep/shape_recognition/shape_recognition_pipeline.cpp, - src/libbrep/shape_recognition/shape_recognition_planar.cpp, - src/libbrep/shape_recognition/shape_recognition_sphere.cpp, - src/libbrep/shape_recognition/shape_recognition_torus.cpp, - src/libbrep/shape_recognition/shape_recognition_util.cpp, - src/libbrep/shape_recognition/sphere.cpp, - src/libbrep/shape_recognition/torus.cpp, - src/libbrep/shape_recognition/util.cpp: - rename files - -2019-12-18 17:08 starseeker - - * [r74513] src/libbrep/CMakeLists.txt, - src/libbrep/shape_recognition, src/libbrep/shape_recognition.cpp, - src/libbrep/shape_recognition.h, - src/libbrep/shape_recognition/shape_recognition.cpp, - src/libbrep/shape_recognition/shape_recognition.h, - src/libbrep/shape_recognition/shape_recognition_cone.cpp, - src/libbrep/shape_recognition/shape_recognition_cylinder.cpp, - src/libbrep/shape_recognition/shape_recognition_pipeline.cpp, - src/libbrep/shape_recognition/shape_recognition_planar.cpp, - src/libbrep/shape_recognition/shape_recognition_sphere.cpp, - src/libbrep/shape_recognition/shape_recognition_torus.cpp, - src/libbrep/shape_recognition/shape_recognition_util.cpp, - src/libbrep/shape_recognition_cone.cpp, - src/libbrep/shape_recognition_cylinder.cpp, - src/libbrep/shape_recognition_pipeline.cpp, - src/libbrep/shape_recognition_planar.cpp, - src/libbrep/shape_recognition_sphere.cpp, - src/libbrep/shape_recognition_torus.cpp, - src/libbrep/shape_recognition_util.cpp, - src/libged/shape_recognition.cpp: - Move to subdirectory - -2019-12-18 15:58 starseeker - - * [r74512] src/libbrep/CMakeLists.txt, - src/libbrep/libbrep_brep_tools.cpp, - src/libbrep/libbrep_brep_tools.h, src/libbrep/opennurbs_ext.cpp, - src/libbrep/tools, src/libbrep/tools/tools.cpp, - src/libbrep/tools/tools.h, src/libbrep/tools/util.cpp, - src/libbrep/util.cpp: - rename - -2019-12-18 15:23 starseeker - - * [r74511] src/libbrep/shape_recognition.cpp, - src/libbrep/shape_recognition_cone.cpp, - src/libbrep/shape_recognition_cylinder.cpp: - More headers - -2019-12-18 15:21 starseeker - - * [r74510] src/libbrep/shape_recognition.h: - run header.sh - -2019-12-18 07:30 brlcad - - * [r74509] regress/nurbs/CMakeLists.txt: - need to list the CMakeLists.txt file for distcheck - -2019-12-17 22:02 starseeker - - * [r74508] include/brep/util.h, src/libbrep/shape_recognition.h, - src/libbrep/shape_recognition_cone.cpp, - src/libbrep/shape_recognition_cylinder.cpp, - src/libbrep/shape_recognition_planar.cpp: - use the util header instead of the local definitions - -2019-12-17 21:22 starseeker - - * [r74507] misc/tools/env2c/CMakeLists.txt: - remove debug flag +2020-09-24 20:50 starseeker -2019-12-17 21:21 starseeker - - * [r74506] misc/tools/env2c/CMakeLists.txt, - misc/tools/env2c/env2c.cxx: - MSVC doesn't like using hwc for array size in the env2c command - tool - see if we can use std::vector + * [r77216] misc/repoconv/github_ci_actions.yml: + This is a workaround, but if the build fails once try it a few + more times before giving up. Since a fair number of the failures + seen so far are intermittent, multiple attemps may succeed + instead of generating false negatives. Switch execute_process to + one call per action - per CMake docs that's the way to do + sequential execution. -2019-12-17 20:48 starseeker +2020-09-24 19:31 starseeker - * [r74505] TODO: - Note some thoughts from discussion with Sean about env/debug + * [r77215] misc/repoconv/github_ci_actions.yml: + Try to do a more minimal build to generate smaller artifacts. + Eventually will need a series of stages for this smaller/frequent + -> full/infrequent, but right now we're testing pretty + frequently... -2019-12-17 16:02 d_rossberg +2020-09-24 19:25 starseeker - * [r74503] src/conv/comgeom/region.c: - we DO have Gift logic here + * [r77214] doc/GITHUB: + Another (potentially) useful note. -2019-12-16 22:13 starseeker +2020-09-24 16:40 starseeker - * [r74501] src/libbrep/cdt_tri_isect.cpp: - comment out some currently unused code - not sure it will stay - unused, but for now make it clear it's not active + * [r77213] CMakeLists.txt, db/CMakeLists.txt, + regress/nurbs/CMakeLists.txt, src/conv/step/CMakeLists.txt, + src/conv/step/g-step/CMakeLists.txt, + src/conv/step/step-g/CMakeLists.txt, + src/conv/step/util/CMakeLists.txt, src/other/CMakeLists.txt: + Add the ability to optionally disable building the components + needing STEPcode. -2019-12-16 22:05 starseeker +2020-09-24 16:16 starseeker - * [r74500] include/brep/util.h, src/libbrep/cdt.cpp, - src/libbrep/cdt.h, src/libbrep/cdt_edge.cpp, - src/libbrep/cdt_mesh.cpp, src/libbrep/cdt_mesh.h, - src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps_grps.cpp, - src/libbrep/cdt_surf.cpp, src/libbrep/cdt_tri_isect.cpp, - src/libbrep/cdt_util.cpp, src/libbrep/util.cpp: - Dispense with the cdt_mesh namespace for now - at the moment, - just increases verbosity + * [r77212] regress/gcv/dem/CMakeLists.txt: + Make sure we're building gdal before enabling this regression + test -2019-12-16 21:53 starseeker +2020-09-24 16:12 starseeker - * [r74499] src/libbrep/cdt_mesh.h, src/libbrep/cdt_ovlps.cpp, - src/libbrep/cdt_ovlps_grps.cpp: - Consolidate to one type of pair set + * [r77211] misc/repoconv/github_ci_actions.yml: + Adjust targets for BRL-CAD rather than the test setup. -2019-12-16 21:33 starseeker +2020-09-24 16:09 starseeker - * [r74498] src/libbrep/cdt_mesh.h, src/libbrep/cdt_ovlps.cpp: - Stash a pointer with the fmesh and make a stab at eliminating the - f2omap + * [r77210] misc/repoconv/github_ci_actions.yml: + Get selected BRL-CAD binary packages as artifacts from the build. + Really will beg for an aggressive policy to clear out older + versions, since an active commit day may produce a *lot* of large + package files and there's a size cap. -2019-12-16 21:26 starseeker +2020-09-24 12:18 starseeker - * [r74497] src/libbrep/CMakeLists.txt, src/libbrep/cdt_mesh.h, - src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h, - src/libbrep/cdt_ovlps_grps.cpp, src/libbrep/cdt_tri_isect.cpp: - consolidate the cdt_ovlp and cdt_mesh headers + * [r77209] doc/CMakeLists.txt, doc/GITHUB: + Not quite sure where this should go, but want to capture info + about how to go about debugging runtime behavior on github + runners by making small test repositories with the binary build + and using github actions. -2019-12-16 21:06 starseeker +2020-09-24 12:04 starseeker - * [r74496] src/libbrep/cdt_mesh.cpp, src/libbrep/cdt_mesh.h, - src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h, - src/libbrep/cdt_ovlps_grps.cpp: - Move closest_surf_pnt to cdt_mesh + * [r77208] misc/repoconv/github_ci_actions.yml: + Make a note to investigate cleanup logic for artifacts -2019-12-16 20:38 starseeker +2020-09-24 11:44 starseeker - * [r74495] include/brep/util.h, src/libbrep/CMakeLists.txt, - src/libbrep/cdt_ovlps.cpp, - src/libbrep/shape_recognition_util.cpp, src/libbrep/util.cpp: - rearrange a few utility routines + * [r77207] bench/run.sh: + Test to see if this is what Jenkins/BSD is unhappy about with the + benchmark changes. -2019-12-16 20:17 starseeker +2020-09-24 06:43 brlcad - * [r74494] src/libbrep/cdt_mesh.cpp, src/libbrep/cdt_mesh.h, - src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h, - src/libbrep/cdt_ovlps_grps.cpp, src/libbrep/cdt_tri_isect.cpp: - move tri_pnt_r to cdt_mesh + * [r77206] bench/run.sh: + eliminate usage of /dev/null throughout the benchmark as it's not + necessary if we restructure things a bit. output is simply + caputured and ignored/logged as desired. also do a little better + reporting on the logfile. -2019-12-16 20:10 starseeker +2020-09-23 22:31 starseeker - * [r74493] src/libbrep/CMakeLists.txt, src/libbrep/cdt_ovlps.cpp, - src/libbrep/cdt_tri_isect.cpp: - Separate out the tri_isect logic + * [r77205] misc/repoconv/github_ci_actions.yml: + Looks like the real issue is we can't build parallel safely - the + runner I/O doesn't complete reliably when we do. Re-enable Ninja, + but do it single threaded. -2019-12-16 17:09 starseeker +2020-09-23 22:30 starseeker - * [r74492] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h: - Push the per-vert adjustment logic up into overt + * [r77204] doc/docbook/system/mann/stat.xml: + fix command name -2019-12-16 16:58 starseeker +2020-09-23 21:31 brlcad - * [r74491] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h: - Simplify - we already yanked out both verts in the first stepof - adjust_overt_pair + * [r77203] bench/run.sh: + try the inverse, detecting if NUL appears to work as a special + device. -2019-12-16 16:43 starseeker +2020-09-23 20:32 brlcad - * [r74490] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h: - simplify + * [r77202] bench/run.sh: + msys path conversion appears to be making test -e /dev/null + succeed as well. lets try to tell msys to just cut it out, no + conversions. -2019-12-16 16:18 starseeker +2020-09-23 17:59 starseeker - * [r74489] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h: - See if we can push the vertex updating process to the overt - level, mostly to avoid missing a step in higher levels. Not fully - tested + * [r77201] misc/repoconv/github_ci_actions.yml: + See if we get fewer intermittent build failures on the VMs with + default tools instead of Ninja -2019-12-16 15:24 starseeker +2020-09-23 14:54 starseeker - * [r74488] src/libbrep/cdt_ovlps.h: - Remove a couple unused variables + * [r77200] misc/repoconv/github_ci_actions.yml: + Update checkout to v2 -2019-12-16 15:12 starseeker +2020-09-23 12:48 starseeker - * [r74487] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h: - organize + * [r77199] NEWS: + Add a NEWS item for new MGED stat command. Purpose is to support + structured reporting of .g object information. -2019-12-15 23:37 starseeker +2020-09-23 12:38 starseeker - * [r74486] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h: - See if we can directly store aligned vert information + * [r77198] src/libged/stat/stat.cpp: + Use std::set to build up the unique set of directory pointers. -2019-12-15 21:00 starseeker +2020-09-23 03:42 starseeker - * [r74485] src/libbrep/cdt_ovlps.cpp: - Tweak the bounding box, but this still isn't good enough. + * [r77197] src/libged/stat/stat.cpp: + If the search filters rule out all possible outputs, we know the + answer already. -2019-12-13 14:15 starseeker +2020-09-23 03:07 brlcad - * [r74482] include/bu/process.h: - Expand bu_process_args comment + * [r77196] src/libged/stat/fort.c: + don't try to assert something unused... -2019-12-12 20:12 starseeker +2020-09-23 02:52 starseeker - * [r74480] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h, - src/libbrep/cdt_ovlps_grps.cpp: - checkpoint + * [r77195] src/libged/stat/fort.c: + Incorrect - revert -2019-12-12 19:49 starseeker +2020-09-23 02:40 starseeker - * [r74479] src/libbrep/cdt_ovlps_grps.cpp: - Will have to follow a couple points through this logic to - straighten out the bookkeeping + * [r77194] src/libged/exec_mapping.cpp: + Windows #define of stat doesn't work in this file. -2019-12-12 19:37 starseeker +2020-09-23 02:17 starseeker - * [r74478] src/libbrep/cdt_ovlps.cpp: - checkpoint + * [r77193] src/libged/stat/fort.c: + Don't want to overwrite a terminating NULL, so avoid the last + byte when calling strlcpy. -2019-12-12 19:07 starseeker +2020-09-22 14:02 starseeker - * [r74477] src/libbrep/cdt_ovlps.cpp: - May be overkill doing it this way, but try adding a point into a - mesh that has triangles close to a newly split brep edge curve. - Idea is we want all the meshes to line up in terms of their - vertices where they might interfere, and while a new edge vert - may not intrude into the other mesh associated triangles using - that vert might. The proposed method of correcting those - situations needs aligned vertices, so try to make sure we will - have them. Untested. + * [r77192] doc/legal/embedded/CMakeLists.txt, + doc/legal/embedded/fort.txt: + fix regress-licenses -2019-12-12 07:01 brlcad +2020-09-22 13:57 starseeker - * [r74476] src/libged/tests/CMakeLists.txt: - run the test for 2 seconds + * [r77191] src/libged/stat/fort.c: + Fixes for regress-repository - not sure if the bu_strlcat + replacements are correctly using sz yet - our usage isn't + exercising that code. -2019-12-12 05:59 brlcad +2020-09-22 02:51 starseeker - * [r74475] include/bu/process.h: - save file before commit. there is an open file descriptor getting - leaked, so we eventually run out of systme resources (open files) - if we run for more than a few seconds. + * [r77190] doc/docbook/system/mann/CMakeLists.txt, + doc/docbook/system/mann/stat.xml, include/ged/commands.h, + src/libged/CMakeLists.txt, src/libged/exec_mapping.cpp, + src/libged/stat, src/libged/stat/CMakeLists.txt, + src/libged/stat/fort.c, src/libged/stat/fort.h, + src/libged/stat/stat.cpp, src/mged/cmd.c, src/mged/cmd.h, + src/mged/setup.c: + Far enough along now to be interesting. Implement a tabular stat + command for reporting database object info, using + https://github.com/seleznevae/libfort for table printing. Can + specify columns and sorting, as well as applying search filters + to focus output. Not sure this is a keeper, but checkpoint so + progress is recorded. -2019-12-12 05:57 brlcad +2020-09-21 23:39 starseeker - * [r74474] src/libged/tests/CMakeLists.txt, - src/libged/tests/test_list.c: - add a simple test harness that evaluates the performance of - invoking an actionless ged command as an asynchronous - sub-process. it's both a master and slave binary with usage - simply being the number of seconds to run sub-process invocations - of the same binary as quickly as possible. + * [r77189] src/libged/CMakeLists.txt, src/libged/exec_mapping.cpp, + src/libged/ged_private.h: + Whoops, grabbed too many files in previous commit. -2019-12-12 05:54 brlcad +2020-09-21 23:37 starseeker - * [r74473] include/bu/process.h: - document the relatively new bu_process_*() API. on the whole - looks workable, but added TODO and FIXME notes on observations - and issues noticed. + * [r77188] src/libged/CMakeLists.txt, src/libged/exec_mapping.cpp, + src/libged/ged_private.h, src/libged/ged_util.c, + src/libged/tests/plugins.cpp: + Checkpoint -2019-12-11 22:20 brlcad +2020-09-21 03:27 brlcad - * [r74472] NEWS: - fixed clicking the close button on lingering rt windows on - Windows. event was getting inadvertently ignored due to logic - error. + * [r77186] NEWS: + missing delimiter on some older releases, shorten one that wa + stoo long -2019-12-11 22:17 brlcad +2020-09-19 21:59 starseeker - * [r74471] src/libfb/if_wgl.c: - alive is used as a boolean value, so need to set to false on - WM_CLOSE. otherwise, a window close event won't quit the - application. + * [r77185] misc/repoconv/CONVERT.sh: + Note default branch rename step. -2019-12-11 20:36 starseeker +2020-09-19 14:20 starseeker - * [r74469] src/libbrep/cdt_ovlps.cpp: - Looking like we might want to use new vertices from edge splits - to introduce closest points on nearby faces, to limit how nearby - triangles might interfere in that neighborhood. First step is to - return what the new vertices are... + * [r77184] src/qged/cadapp.cpp, src/qged/cadapp.h: + trim code code we're not using - this will probably go in a + different direction. -2019-12-11 18:17 starseeker +2020-09-19 13:57 starseeker - * [r74467] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h, - src/libbrep/cdt_ovlps_grps.cpp: - Get more organized about plotting - setting up to work on groups - that don't need refinement. Once those are handled, task for - those that remain will be to break them down until they don't - need refinement. + * [r77183] src/qged/cadapp.cpp, src/qged/cadcommands.cpp: + Replace hardcoded ged command listings with ged_exec -2019-12-10 22:07 starseeker +2020-09-19 02:22 starseeker - * [r74466] src/libbrep/cdt_ovlps.h, src/libbrep/cdt_ovlps_grps.cpp: - Define some debug plotting routines to visualize this + * [r77182] doc/legal/embedded/CMakeLists.txt, + doc/legal/embedded/damlev.txt: + fix regress-licenses -2019-12-10 21:30 starseeker +2020-09-19 02:17 starseeker - * [r74465] src/libbrep/cdt_ovlps_grps.cpp: - More information printing + * [r77181] src/qged/QToolPalette.cpp: + Don't call show() here - this is what's causing the "Negative + sizes (-1,-1) are not possible" messages. -2019-12-10 21:17 starseeker +2020-09-19 02:02 starseeker - * [r74464] src/libbrep/cdt_ovlps_grps.cpp: - Print more information about vertices + * [r77180] src/qged/CMakeLists.txt, src/qged/display/glm: + Remove glm from qged subdir. -2019-12-09 20:45 starseeker +2020-09-19 02:00 starseeker - * [r74463] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h, - src/libbrep/cdt_ovlps_grps.cpp: - checkpoint + * [r77179] doc/legal/embedded/CMakeLists.txt, + doc/legal/embedded/glm.txt, src/qged/display/Camera.h, + src/qged/display/Display.cpp, + src/qged/display/OrthographicCamera.cpp, + src/qged/display/OrthographicCamera.h: + Backport switch from glm to internal Qt math types from arbalest -2019-12-09 20:35 starseeker +2020-09-19 01:20 starseeker - * [r74462] src/libbrep/cdt_ovlps_grps.cpp: - Had verts flipped - this is tricky to track correctly, probably - more errors of this sort + * [r77178] src/qged/cadtreemodel.cpp: + Not falling through here means we're missing most of the + highlighting. -2019-12-09 20:24 starseeker +2020-09-19 01:02 starseeker - * [r74461] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h, - src/libbrep/cdt_ovlps_grps.cpp: - checkpoint + * [r77177] src/qged/cadtreemodel.cpp: + We're getting multiple populations of the tree children. Probably + means we need to revisit the whole cadtreemodel design, but for + now just don't populate if we've already done so. -2019-12-09 18:05 starseeker +2020-09-18 23:57 starseeker - * [r74460] src/libbrep/cdt_ovlps.h: - Start thinking about what information we'll need to really deal - with these groupings + * [r77176] src/libbu/simd.c: + Jot down a note about a possibly interesting bit of code for + future use... -2019-12-09 16:02 starseeker +2020-09-18 19:59 starseeker - * [r74459] src/libbrep/cdt_ovlps.cpp, src/libbrep/cdt_ovlps.h, - src/libbrep/cdt_ovlps_grps.cpp: - Break binning process into its own function + * [r77175] NEWS, doc/docbook/system/man1/gdiff.xml: + Correct the gdiff man page examples for the new verbosity + options. -2019-12-09 15:37 starseeker +2020-09-18 14:17 starseeker - * [r74458] src/librt/primitives/brep/brep.cpp: - Make it easy in trunk to flip back and forth between the old and - new code for the NURBS hit - leaving old on for now since the new - is known to break the NIST3 case. + * [r77174] NEWS, src/gtools/gdiff/gdiff.c: + Copy/paste error for help message of gdiff's -F option. -2019-12-09 15:23 starseeker +2020-09-18 13:18 starseeker - * [r74457] src/libanalyze/tests/nhit.cpp: - Be a bit more informative about what happened when reporting an - error. + * [r77173] src/qged/TODO.qt: + Sean found the Pty-Qt widget, of definite interest here. -2019-12-09 14:28 starseeker +2020-09-17 19:53 starseeker - * [r74456] NEWS, README: - Add next expected release number to NEWS and README + * [r77172] include/ged/commands.h, include/ged/defines.h: + These probably belong in ged/commands.h -2019-12-09 14:25 starseeker +2020-09-17 19:43 starseeker - * [r74455] ., CHANGES, ChangeLog, NEWS, TODO, bench, db, doc, - doc/STRATEGY, doc/docbook/articles, doc/docbook/books, - doc/docbook/lessons, include, misc/debian/changelog, regress, - regress/repository.sh, src/adrt/CMakeLists.txt, src/libbu, - src/libged/polyclip.cpp, src/other, src/tclscripts/archer: - Pull changes from RELEASE branch back into trunk + * [r77171] include/bu/str.h, include/ged/commands.h, + src/gtools/gsh.cpp, src/libbu/CMakeLists.txt, + src/libbu/damlevlim.cpp, src/libged/ged_init.cpp: + Checkpoint an experiment to use Damerau–Levenshtein edit distance + lookup to suggest corrections to potentially mistyped ged + commands. -2019-12-09 14:18 starseeker +2020-09-17 13:29 brlcad - * [r74454] src/libbrep/CMakeLists.txt, src/libbrep/cdt_ovlps.cpp, - src/libbrep/cdt_ovlps.h, src/libbrep/cdt_ovlps_grps.cpp: - Break out some of the ovlp logic into separate files for easier - reading. + * [r77170] NEWS: + looks like mged -c graphical attach modes (at least using the + initial prompt) got released broken. fixed the bomb by checking + for an empty arg condition. -2019-12-07 17:39 ejno +2020-09-17 13:23 brlcad - * [r74453] include/rt/uv.h, src/libbrep/cdt_edge.cpp: - Add include guard and begin/end decls macros; Remove unused - variable. + * [r77169] src/libdm/options.c: + validate args before proceeding -2019-12-07 13:58 starseeker +2020-09-17 13:19 brlcad - * [r74452] src/libbrep/cdt_ovlps.cpp: - Add note + * [r77168] src/libbu/argv.c: + prevent overflow condition if caller passes a -1 or other + negative/invalid value. encountered during dm option processing. -2019-12-07 13:50 starseeker +2020-09-17 03:18 brlcad - * [r74451] src/libbrep/cdt_ovlps.cpp: - Characterize triangle groups - a couple are simple enough that - they are suitable as inputs for the polygon build as-is, but at - least one will need a more sophisticated refinement step first. - Either way we need the polygon build, so filter out the harder - cases for now to allow experimentation with the polygon - construction. + * [r77167] NEWS: + with eric murray's help, isolated the bug where the graphics + window filepath fails to update after opening a .g file. bug was + due to spaces in the filename. quoting the filename fixed the + title and it now displays correctly even if there are newlines. -2019-12-07 02:30 starseeker +2020-09-17 03:13 brlcad - * [r74450] regress/nurbs/CMakeLists.txt: - Add exclude from default + * [r77166] BUGS: + fixed the titlebar bug when opening a filename with spaces -2019-12-07 02:30 starseeker +2020-09-17 03:11 brlcad - * [r74449] regress/dsp/run-dsp-case-set-1.sh, - regress/dsp/run-dsp-case-set-2.sh, - regress/dsp/run-dsp-case-set-3.sh: - fix file name templates + * [r77165] src/mged/mged.c: + make sure we quote the filename in case it has spaces so the + window title bar gets updated appropriately. this fixes a + user-reported bug -2019-12-07 01:27 starseeker +2020-09-15 20:22 brlcad - * [r74448] src/libanalyze/tests/nhit.cpp: - Newer compiler catches error again... fix vls printfs + * [r77164] src/external/Creo/part.cpp: + accept sf patch 555 (Add linefeed to output log file of CREO-BRL + converter) from Red Carrera (redcarrera) that adds a newline to + the output, for improved readability. -2019-12-06 22:54 starseeker +2020-09-15 19:53 starseeker - * [r74447] src/libged/debug.cpp: - reflect name change in cpp file - stale file left over messed up - the build test + * [r77163] misc/repoconv/CONVERT.sh: + Looks like we may need a separate push for tags -2019-12-06 22:50 starseeker +2020-09-14 21:16 brlcad - * [r74446] src/libged/CMakeLists.txt: - Generating the guts of the command, not just a var list - name - accordingly + * [r77162] BUGS: + spaces cause the title bar problem -2019-12-06 22:48 starseeker +2020-09-14 17:03 starseeker - * [r74445] src/libged/debug.cpp, src/libged/env.c: - Note where these files come from + * [r77161] bench/CMakeLists.txt: + This should be an "ALL" custom target, so a build always stages + the bin/benchmark script whether anything requrires it or not. -2019-12-06 22:38 starseeker +2020-09-14 13:43 starseeker - * [r74444] misc/tools/env2c/CMakeLists.txt, - misc/tools/env2c/env2c.cxx: - As an experiment, use std::thread and process the files being - read in the env2c command in parallel. + * [r77160] doc/README.Linux: + Note required package for rpm building -2019-12-06 21:55 starseeker +2020-09-14 13:42 starseeker - * [r74443] misc/tools/env2c/env2c.cxx: - Put the various outputs in a single container + * [r77159] doc/README.Linux: + Our minimum version may be newer than this, but for sure it's not + gcc 3... -2019-12-06 21:27 starseeker +2020-09-14 13:36 starseeker - * [r74442] src/libbu/whereami.c: - fgets->bu_fgets + * [r77158] doc/README.Linux: + Stash useful note on what to do about CentOS in VirtualBox if + networking isn't set up by default. -2019-12-06 18:43 starseeker +2020-09-14 13:00 starseeker - * [r74441] regress/CMakeLists.txt, regress/nurbs/CMakeLists.txt, - regress/nurbs/regress-nurbs-nirt.cmake.in, - src/libanalyze/tests/CMakeLists.txt, - src/libanalyze/tests/nhit.cpp: - We're probably not ready for all-up pix diffing on NURBS images - for regression, but there is something else we can do. Specific - shots can be identified as unambiguous hits or misses based on - visual inspection of the shapes - adding a lower level call to - the nirt logic in libanalyze, we can detect when those specific - shots are hitting or missing incorrectly. The nirt API is - probably much too heavy for this, but it's I/O logic was already - specifically set up to read in floating point strings at high - fidelity for a similiar situation where we needed to exactly - reproduce rays from string inputs. The example added is a case in - NIST3 that illustrates an unexpected hit with the current trunk - logic. The comparison is currently deliberately simple and - binary, without attempting to assess the correctness of hit - points or partitions. + * [r77157] NEWS, README, misc/macosx/Resources/ReadMe.rtfd/TXT.rtf, + misc/macosx/Resources/Welcome.rtfd/TXT.rtf: + Stage the version numbers for the next release. -2019-12-06 18:13 starseeker +2020-09-14 12:58 starseeker - * [r74440] src/libanalyze/nirt.cpp: - Try using bu_dir for this path. + * [r77156] ., ChangeLog, NEWS, doc, misc/debian/changelog, + misc/macosx/Resources/ReadMe.rtfd/TXT.rtf, + misc/macosx/Resources/Welcome.rtfd/TXT.rtf: + Pull in file updates from RELEASE -2019-12-06 16:51 starseeker +2020-09-14 12:40 starseeker - * [r74439] include/conf/PATCH: - Bump patch number + * [r77155] include/conf/MINOR, include/conf/PATCH: + bump to next development revision after tagging the 7.32.0 + release -2019-12-05 22:51 starseeker +2020-09-14 11:31 starseeker - * [r74433] src/libbu/tests/basename.c: - If we hit the undefined basename case, input is unused + * [r77150] doc/README.Linux: + Add instructions for older CentOS vanilla image - should be + representative of what to do generally if one is on a Redhat + based image that has a too-old default toolset. -2019-12-05 22:42 starseeker +2020-09-14 10:22 starseeker - * [r74432] src/libbu/whereis.c: - An interesting side effect of C++ building - we find out if we - didn't include the header for functions, as we now need the C - extern declarations... + * [r77148] CMakeLists.txt: + distclean line from RELEASE -2019-12-05 22:34 starseeker +2020-09-14 08:45 brlcad - * [r74431] misc/CMake/BRLCAD_CheckFunctions.cmake: - If we're always building C++, do all the source tests in our - functions as C++ tests. + * [r77143] NEWS: + include a brief summary writeup of highlights diff --git a/INSTALL b/INSTALL index 2965d0c2bc7..5002df2ea46 100644 --- a/INSTALL +++ b/INSTALL @@ -661,16 +661,6 @@ version if BRLCAD_BUNDLED_LIBS is also AUTO. Aliases: ENABLE_OPENNURBS ---- BRLCAD_SPSR --- - -Option for enabling and disabling compilation of the Screened Poisson -Surface Reconstruction library provided with BRL-CAD's source code. -Default is AUTO, responsive to the toplevel BRLCAD_BUNDLED_LIBS option -and testing first for a system version if BRLCAD_BUNDLED_LIBS is also AUTO. - -Aliases: ENABLE_SPSR - - --- BRLCAD_SC --- Option for enabling and disabling compilation of the NIST Step Class @@ -681,17 +671,6 @@ first for a system version if BRLCAD_BUNDLED_LIBS is also AUTO. Aliases: ENABLE_SCL, ENABLE_STEP, ENABLE_STEP_CLASS_LIBRARIES ---- BRLCAD_VDS --- - -Option for enabling and disabling compilation of the libvds triangle -simplification library provided with BRL-CAD's source code. Default -is AUTO, responsive to the toplevel BRLCAD_BUNDLED_LIBS option and -testing first for a system version if BRLCAD_BUNDLED_LIBS is also -AUTO. - -Aliases: ENABLE_VDS - - --- BRLCAD_OSG --- Option for enabling and disabling compilation of the OpenSceneGraph @@ -702,17 +681,6 @@ version if BRLCAD_BUNDLED_LIBS is also AUTO. Aliases: ENABLE_OPENSCENEGRAPH ---- BRLCAD_GDIAM --- - -Option for enabling and disabling compilation of the libgdiam approximate -tight bounding box library provided with BRL-CAD's source code. Default -is AUTO, responsive to the toplevel BRLCAD_BUNDLED_LIBS option and -testing first for a system version if BRLCAD_BUNDLED_LIBS is also -AUTO. - -Aliases: ENABLE_GDIAM - - --- BRLCAD_PROJ4 --- Option for enabling and disabling compilation of the PROJ.4 geographic diff --git a/NEWS b/NEWS index 24b90108c0c..2882b5701eb 100644 --- a/NEWS +++ b/NEWS @@ -9,6 +9,52 @@ first and are grouped by release. Each release also includes optional descriptive text that emphasizes or further describes significant changes made. See document footer for additional details. +---------------------------------------------------------------------- +--- 2021-02-06 Release 7.32.2 --- +---------------------------------------------------------------------- + +* fixed OSX g-iges crash due to improper memory freeing - Cliff Yapp +* fixed GQA multithreaded plotting file corruption - Cliff Yapp +* added -S structural diff option to MGED gdiff command - Cliff Yapp +* added -v verbosity option to MGED tree command - Cliff Yapp +* added -? option to MGED which command - Cliff Yapp +* updated Archer to set cwd=HOME when run without args - Cliff Yapp +* updated rtwizard to set cwd=HOME when run without args - Cliff Yapp +* updated MGED to set cwd=HOME when run without args - Cliff Yapp +* fixed reporting of MGED "vars" command - Cliff Yapp +* updated MGED to not open non-.g-files as databases - Cliff Yapp +* fixed MGED I/O when running GED subcommands - Cliff Yapp +* added decimation control examples to facetize man page - Cliff Yapp +* changed gcv converter to append to existing .g files - Cliff Yapp +* removed obscure MGED menu entries for unused features - Cliff Yapp +* fixed crash when trying to shade invalid breps - Cliff Yapp +* improved librt CPU timer behavior - Cliff Yapp +* fixed example in saveview manual page - Sean Morrison +* added support for in-database vol primitive data - Sumagna Das +* changed 'mvall' to rename all refs even w/ no object - Sean Morrison +* updated MGED Overlap GUI to run reliably on Windows - Cliff Yapp +* fixed MGED search command crash on empty database - Sean Morrison +* improved performance calculating BoT bounding boxes - Vikram Atreya +* fixed MGED crash closing multiple rt views on Windows - Cliff Yapp +* fixed 'n' key binding override with MGED key forwarding - Cliff Yapp +* fixed mged crash when there are no display managers - Sean Morrison +* added pixcmp -n length flag for subset comparisons - Sean Morrison +* added pixcmp -s same and -d different printing flags - Sean Morrison +* updated non-shape objects list for search shape filter - Cliff Yapp +* added volume type to search -type filters - Cliff Yapp +* applied shorter default title in fast4-g conversions - Cliff Yapp +* improved pixcmp support for subset image comparisons - Sean Morrison +* added subtract subcommand to MGED analyze command - Cliff Yapp +* added intersect subcommand to MGED analyze command - Cliff Yapp +* added summarize subcommand to MGED analyze command - Cliff Yapp +* added quiet (-q) flag to MGED kill command - Cliff Yapp +* added MGED stat command for reporting of object info - Cliff Yapp +* corrected examples in gdiff man page - Cliff Yapp +* fixed help message for -F option on gdiff command - Cliff Yapp +* fixed mged -c bomb attaching to graphical displays - Sean Morrison +* fixed titlebar bug opening .g with filename spaces - Sean Morrison +* added a new 'N' graphics window keybinding to run nirt - Cliff Yapp + ---------------------------------------------------------------------- --- 2020-09-14 Release 7.32.0 --- ---------------------------------------------------------------------- @@ -143,9 +189,9 @@ infrastructure with BRL-CAD's imminent migration to Git. - Sean Morrison, Cliff Yapp * added a copy subcommand to MGED's attr command - Cliff Yapp * fixed a locking condition in MGED's rtcheck command - Cliff Yapp -* added support for >=< prefixes for mater -d get options Cliff Yapp +* added support for >=< prefixes for mater -d get options - Cliff Yapp * fixed brlman lookup location of html manual pages - Cliff Yapp -* fixed rt -t top-to-bottom parallel rendering option Sean Morrison +* fixed rt -t top-to-bottom parallel rendering option - Sean Morrison * added a 'flip' normals command to MGED's brep command - Cliff Yapp * added rtweight support for in-.g density information - Cliff Yapp * improved usability of vol primitives w/ missing data - Sean Morrison @@ -387,7 +433,7 @@ performance ray tracing pipeline. * fixed patch-g tool and E command infinite loop bug - Sean Morrison * improved NMG ray tracing fault tolerance - Sean Morrison * added 3dm-g support for layers and names - Keith Bowman -* fixed color/shader preservation issue with 3dm-g importer - Jon Engbert +* fixed issue preserving color/shader info with 3dm-g - Jon Engbert * added 3dm-g support for mesh objects - Jon Engbert * added csg implicit hierarchy conversion to brep command - Cliff Yapp * fixed crash in clone when told to make zero copies - Cliff Yapp @@ -401,7 +447,7 @@ performance ray tracing pipeline. * removed any-png.sh - use pix tools - Sean Morrison * removed librtserver interface - Cliff Yapp * removed MGED per_line command - Sean Morrison -* updated MGED tops command: default to -g -u behavior- Sean Morrison +* updated MGED tops command: default to -g -u behavior - Sean Morrison * removed MGED -n option; use -c instead - Sean Morrison * removed MGED commands pl, pov and polybinout - Sean Morrison * removed UtahRLE image tools - Cliff Yapp diff --git a/README b/README index fc5887b256f..2480d6d3233 100644 --- a/README +++ b/README @@ -1,5 +1,5 @@ BRL-CAD - Release 7.32.0 + Release 7.32.2 http://brlcad.org/ BRL-CAD is a powerful cross-platform open source combinatorial diff --git a/TODO b/TODO index c3d575ea1ce..fb2177bf2ba 100644 --- a/TODO +++ b/TODO @@ -18,59 +18,29 @@ tasks as they are completed. THESE TASKS SHOULD HAPPEN BEFORE THE NEXT RELEASE ------------------------------------------------- -* Release Testing, final commit reviews - THESE TASKS SHOULD HAPPEN WITHIN TWO RELEASE ITERATIONS ------------------------------------------------------- +* dbconcat corrupted database / failed. created a top-level comb with + invalid "1_[subcomb]/" to be created that result in error messages + during any db listing (e.g., tops). workaround was to manually edit + the comb and remove the 1_ and / on the entries. + * The following will be removed from MGED's menu bar (unused features, can be accomplished another way, or will be exposed only as lower level settings when there are sensible defaults that are seldom changed.) - ViewRing menu and entries. - Modes->Persistent Sweep Rectangle - Modes->Collaborate - Modes->Rateknobs Modes->Display Lists Misc->Keystroke Forwarding Misc->Depth Cueing Misc->Z Buffer Misc->Lighting - Settings->Mouse Behavior->Sweep Raytrace-Rectangle - Settings->Mouse Behavior->Sweep Paint-Rectangle - Settings->Mouse Behavior->Sweep Zoom-Rectangle - Settings->Apply To->Local Panes - Settings->Apply To->Listed Panes - Settings->Framebuffer->Rectangle Area - -* The embedded framebuffer for the X display manager is not working - with Tcl/Tk 8.6 - it brings down mged with an Xerror when it tries - to XFlush after X24_blit. Better solution is to replace the X - dm/fb with a cross platform software rasterizing solution of some - sort. - -* Implement new behavior for quit command in MGED - if bu_subprocess - commands are running, by default refuse to quit and print out a - list of currently running processes and instructions on how to abort - them. Implement a -f option to forcibly quite even if there are - subprocesses running, and (perhaps) a --wait option to quite after - all subprocesses complete. - - Also of interest in this context (but not critical for the basic - functionality) is designing a general mechanism or protocol for - applications to communicate progress back to bu_subprocess. * implement uv-mapping callback so we can texture-map BoT, NMG, and NURBS geometry -* check thread safety history of gqa + plot calls (pl_color) - -* mged> nirt -? needs to provide help - -* mged> nirt -f fmt doesn't seem to work at all - * modify libfb's default memory buffer allocation to be dynamic * create a BRL-CAD .g with all possible object types embedded. @@ -82,59 +52,6 @@ THESE TASKS SHOULD HAPPEN WITHIN TWO RELEASE ITERATIONS * attribute normalization is drastically slowing down region creation - need to fix or back out -* g-obj not exporting colors - -* finish testing of libbu bu_dir API and matching bu_dir TCL function. - bu_dir bin and lib don't work when the MGED prompt's working directory - is changed to (e.g.) the user's home directory. - bu_brlcad_root and bu_brlcad_data will need verbose deprecation process. - -* Need to eliminate bu_argv0_full_path and rework the bu_brlcad_* - functions that currently rely on it to take that path as a - parameter from the calling application. The library shouldn't be - responsible for managing that path - there are too many issues - with doing so. The current approach fixes some concerns but - breaks if an application changes its notion of the current working - directory after initialization, for example. - -* tree command shouldn't infinite loop when encountering a cyclic - path - need to print a warning and stop walking. Requries full - path awareness in tree command walk. - - Consider implementing a corollary to FTS instead of dirent for - simplified tree traversal with cyclic awareness. - - https://keramida.wordpress.com/2009/07/05/fts3-or-avoiding-to-reinvent-the-wheel/ - -* move the rt_*_timer timing facilities to libbu and rework to allow - contexts, allowing for more than one timer to be active. Make sure - the old librt API can be obsoleted cleanly. - -* check that dbconcat supports objects created with the bo cmd - -* libgcv should add objects to an existing .g if one is specified - as the output target - right now it's overwriting the old file - -* consolidate dbconcat, clone, make_name, and any other .g I/O - routines that need to autogenerate names to use the new - bu_vls_incr/bu_vls_simplify functions. - -* rename zlib and libpng when building bundled to avoid conflicting - with system-installed libs. e.g., default to ENABLE_Z_PREFIX=ON - with name z_brlcad (perhaps as a post-compile rename custom command) - and png_brlcad respectively. - -* investigate possibility of using simple, compact libs - like miniz and lodepng to replace the complexity of - managing zlib and libpng in src/other. These have been - a source of ongoing annoyance, particularly (but not - exclusively) on OSX. - -* f_dbopen in MGED doesn't seem to be reporting failure - if a non-.g file is fed to opendb. That doesn't seem - right... shouldn't the open process completely fail - if the file isn't a valid .g? - * add regression test for directional light sources * bundle primary rays in rt front end into postage stamps, shoot via @@ -165,13 +82,106 @@ THESE TASKS SHOULD HAPPEN WITHIN TWO RELEASE ITERATIONS * make sure we can run db_dirbuild() multiple times without creating duplicate entries. +* tree command shouldn't infinite loop when encountering a cyclic + path - need to print a warning and stop walking. Requries full + path awareness in tree command walk. + + Consider implementing a corollary to FTS instead of dirent for + simplified tree traversal with cyclic awareness. + + https://keramida.wordpress.com/2009/07/05/fts3-or-avoiding-to-reinvent-the-wheel/ + +* bounding box reduction command + +* consolidate dbconcat, clone, make_name, and any other .g I/O + routines that need to autogenerate names to use the new + bu_vls_incr/bu_vls_simplify functions. + +* g-obj not exporting colors + * heap unit test needs to actually compare performance against system allocation, not just do some work +* mged> nirt -? needs to provide help + +* mged> nirt -f fmt doesn't seem to work at all + +* move the rt_*_timer timing facilities to libbu and rework to allow + contexts, allowing for more than one timer to be active. Make sure + the old librt API can be obsoleted cleanly. + +* investigate problems with struct parsing running the MGED + "vars" command - most visible on OpenBSD, but Linux valgrind can + also see issues. + THESE ARE UNSCHEDULED BACKLOG TASKS ----------------------------------- +* gdiff in mged appears to be broken? get "no primitives found" on + second comb when specifying two combs (gdiff comb1 comb2). + UPDATE - this appears to be a consequence of how gdiff internally + implements its raytrace diffing. The "fix" would be to separately + raytrace each object and post-process the line segments, rather + than drawing up everything at once - the latter has problems if + part or all of comb2 is shared with comb1. A workaround is to + keep out comb2 and dbconcat it back in, then gdiff comb1 with the + imported tree. + +* pixscale doesn't seem to handle stdin (due to bu_seek) for very + long + +* The embedded framebuffer for the X display manager is not working + with Tcl/Tk 8.6 - it brings down mged with an Xerror when it tries + to XFlush after X24_blit. Better solution is to replace the X + dm/fb with a cross platform software rasterizing solution of some + sort. + +* extract a skin or other exterior surface for a given model. 3 options: + 1. Implement a "shrinkwrap" feature that calculates a concave hull + 2. Shoot rays from outside, construct exterior mesh based on hits + (akin to marching cubes, a surface reconstruction) + 3. Shoot rays from outside at exterior vertices, retain all mesh faces + and objects encountered (i.e., not reconstructed, but extracted) + +* RTAREA + + * add an option to rtarea for onehit. this is probably best as an + option that reports the requested objects only and then has a + verbose option for the more detailed hiearchical report that is + currently produced. + + * verify rtarea. There are reports that the rtarea + command may have a bug in its calculations. This needs to be + investigated. + + * review and fix rtarea's taxonomy for describing + presented/projected areas. users expect presented area to + represent what is currently referred to as exposed area. may make + more sense to introduce a different terms for other shotline + encounters. + + * make rtarea display a cross-hair and perhaps coordinates for the + center of area if run from within mged. + + * add an option to rtarea for onehit. this is probably best as an + option that reports the requested objects only and then has a + verbose option for the more detailed hiearchical report that is + currently produced. + + * verify rtarea. There are reports that the rtarea + command may have a bug in its calculations. This needs to be + investigated. + + * review and fix rtarea's taxonomy for describing + presented/projected areas. users expect presented area to + represent what is currently referred to as exposed area. may make + more sense to introduce a different terms for other shotline + encounters. + + * make rtarea display a cross-hair and perhaps coordinates for the + center of area if run from within mged. + * bot -V check solid bot.s visualizations don't show up if bot.s is first drawn in MGED - should properly "overlay" them so the user doesn't have to first erase the solid from the scene visual. @@ -499,11 +509,6 @@ THESE ARE UNSCHEDULED BACKLOG TASKS parallel. This would be a way to easily parallelize existing code without needing to create wrapper functions for bu_parallel(). -* Now that we have >3.0 CMake required, look into replacing our custom - time stamping code in favor of using the CMake time stamp mechanism. - Also get rid of the fallback in src/libgcv/plugins/CMakeLists.txt - (and any others that have crept in over the years...) - * convert usages of Tcl_InitHashTable() and friends to libbu containers (see src/conv/enf-g.c for example usage) @@ -862,11 +867,6 @@ THESE ARE UNSCHEDULED BACKLOG TASKS file for FIXME note); add tests for both functions (note only g-dot.c wants to use the functions at the moment) -* verify/fix/improve rtarea. There are reports that the rtarea - command may have a bug in its calculations. This needs to be - investigated along with a review of the taxonomy used by rtarea for - describing presented/projected areas. - * eliminate dbi_filepath (perhaps replace with dbi_filedir) as we shouldn't need to search. we were told where the database was. @@ -1031,9 +1031,6 @@ THESE ARE UNSCHEDULED BACKLOG TASKS normals. Consider adding an option to smoothly interpolate normals (per face or vertex). -* make rtarea display a cross-hair and perhaps coordinates for the - center of area if run from within mged. - * refactor and manage libbn tolerance uses by providing an interface default (e.g., an init macro) and making everyone use that where it is hardcoded to 0.0005 presently (and a few places where it's @@ -2140,6 +2137,10 @@ CONVERTERS * implement a ls-dyna "keyword" file format importer. perhaps extract as nmg/bot boundary representation meshes. lots of great vehicle datasets at http://www.ncac.gwu.edu/vml/models.html + Update - above link seems to be down as of 2020, see: + https://www.nhtsa.gov/crash-simulation-vehicle-models + https://www.ccsa.gmu.edu/models/ + STEP diff --git a/bench/CMakeLists.txt b/bench/CMakeLists.txt index 513060822ed..1e561531f9c 100644 --- a/bench/CMakeLists.txt +++ b/bench/CMakeLists.txt @@ -15,6 +15,7 @@ BRLCAD_ADDEXEC(bark "${BARK_SOURCES}" libbu NO_STRICT NO_INSTALL TEST_USESDATA) configure_file(run.sh "${CMAKE_CURRENT_BINARY_DIR}/benchmark" COPYONLY) install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/benchmark" DESTINATION ${BIN_DIR}) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/benchmark") add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/benchmark-${CMAKE_CFG_INTDIR}-done @@ -22,7 +23,7 @@ add_custom_command( COMMAND "${CMAKE_COMMAND}" -E touch ${CMAKE_CURRENT_BINARY_DIR}/benchmark-${CMAKE_CFG_INTDIR}-done DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/run.sh ) -add_custom_target(benchmark_cp DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/benchmark-${CMAKE_CFG_INTDIR}-done) +add_custom_target(benchmark_cp ALL DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/benchmark-${CMAKE_CFG_INTDIR}-done) set_target_properties(benchmark_cp PROPERTIES FOLDER "Benchmark") if(CMAKE_CONFIGURATION_TYPES) foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) @@ -47,7 +48,7 @@ CMAKEFILES( if(SH_EXEC AND TARGET m35.g) # CTest enabled short run of the benchmark suite - add_test(NAME benchmark COMMAND ${SH_EXEC} "$/benchmark" run TIMEFRAME=1) + BRLCAD_ADD_TEST(NAME benchmark COMMAND ${SH_EXEC} "$/benchmark" run TIMEFRAME=1) set_tests_properties(benchmark PROPERTIES LABELS "Benchmark") add_custom_target(benchmark-check COMMAND ${CMAKE_CTEST_COMMAND} -L Benchmark --output-on-failure diff --git a/bench/benchmark.c b/bench/benchmark.c index 24071e45dfb..22e6320cb0c 100644 --- a/bench/benchmark.c +++ b/bench/benchmark.c @@ -1,7 +1,7 @@ /* B E N C H M A R K . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/bench/clean.c b/bench/clean.c index c05b1f15788..239dbd51dc2 100644 --- a/bench/clean.c +++ b/bench/clean.c @@ -1,7 +1,7 @@ /* C L E A N . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/bench/compute.c b/bench/compute.c index 6d60c0b0f93..9780dcb783c 100644 --- a/bench/compute.c +++ b/bench/compute.c @@ -1,7 +1,7 @@ /* C O M P U T E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/bench/lgt.sh b/bench/lgt.sh index 4b9b0d1fb8c..fe874ef9191 100755 --- a/bench/lgt.sh +++ b/bench/lgt.sh @@ -2,7 +2,7 @@ # L G T . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/bench/pixcmp.c b/bench/pixcmp.c index d745db2de86..30011c6caa2 100644 --- a/bench/pixcmp.c +++ b/bench/pixcmp.c @@ -1,7 +1,7 @@ /* P I X C M P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -47,9 +47,16 @@ #define FILE_ERROR 126 /* exit codes for normal operation */ -#define OFF_BY_NONE 0 -#define OFF_BY_ONE 1 -#define OFF_BY_MANY 2 +#define EXIT_OFF_BY_NONE 0 +#define EXIT_OFF_BY_ONE 1 +#define EXIT_OFF_BY_MANY 2 + +enum diff { + MATCHING, + OFF_BY_ONE, + OFF_BY_MANY, + MISSING +}; HIDDEN void @@ -59,27 +66,40 @@ usage(const char *name) if (!name) { name = unknown; } - /* this must be split, ISO C90 has a max static string length of 509 */ - bu_log("Usage: %s [OPTIONS] FILE1 [FILE2 [SKIP1 [SKIP2]]]\n%s", name, - "Compare two PIX image files pixel by pixel.\n\n" - " -l List pixel numbers and values for all pixels that differ.\n" - " -b Output and process by bytes instead of pixels.\n" + + /* split to fit within ISO C90 max static string length < 509 chars */ + bu_log("Usage: %s [OPTIONS] FILE1 [FILE2 [SKIP1 [SKIP2]]]\n" + "\n" + " Compare two PIX files pixel by pixel (or byte by byte), optionally" + " skipping initial pixels (or bytes) in one or both input files.\n" + "\n", name); + bu_log("Options:" + " -b Iterate and print by bytes instead of by pixels.\n" + " -s Print all that have the same matching values.\n" + " -d Print all that have different values.\n" + " -q Quiet. Suppress printing header and summary.\n" " -i SKIP\n" - " Skip the first SKIP pixels of input (for FILE1 and FILE2)\n"); - bu_log(" -i SKIP1:SKIP2\n" - " Skip the first SKIP1 pixels in FILE1 and SKIP2 pixels in FILE2.\n" - " -s Silent output. Only return an exit status.\n\n" - "If FILE is `-' or is missing, then input is read from standard input.\n" - "If the `-b' option is used, SKIP values are bytes instead of pixels.\n" - "Pixel numbers and bytes are indexed linearly from one.\n"); + " Discard initial SKIP pixels (or bytes w/ -b) in FILE1 and FILE2 input.\n" + " -i SKIP1:SKIP2\n" + " Skip initial SKIP1 pixels (or bytes w/ -b) in FILE1 and SKIP2 in FILE2.\n" + " -n COUNT\n" + " Compare COUNT pixels (or bytes w/ -b). Stops by default at EOF.\n" + "\n"); + bu_log("If either FILE is `-' or is missing, then input is read from standard input.\n" + "If FILE1 and FILE2 are both standard input, then values must be interleaved.\n" + "If the `-b' option is used, SKIP and COUNT values are bytes instead of pixels.\n" + "Pixel numbers and bytes are indexed linearly from one.\n" + "\n"); return; } HIDDEN void -handle_i_opt(const char *arg, size_t *skip1, size_t *skip2) +handle_range_opt(const char *arg, size_t *skip1, size_t *skip2) { const char *endptr = arg; + long val; + if ((arg == NULL) || ((skip1 == NULL) && (skip2 == NULL))) { /* nothing to do */ return; @@ -91,12 +111,14 @@ handle_i_opt(const char *arg, size_t *skip1, size_t *skip2) /* probably empty string */ if (skip2) { endptr++; - *skip2 = strtol(endptr, NULL, 10); + val = strtol(endptr, NULL, 10); + *skip2 = (val < 0) ? 0 : val; } } else if ((endptr == NULL) || (endptr[0] == '\0')) { /* no : found */ if (skip2) { - *skip2 = strtol(arg, NULL, 10); + val = strtol(arg, NULL, 10); + *skip2 = (val < 0) ? 0 : val; } if (skip1 && skip2) { *skip1 = *skip2; @@ -104,11 +126,13 @@ handle_i_opt(const char *arg, size_t *skip1, size_t *skip2) } else if (endptr[0] == ':') { /* found : */ if (skip1) { - *skip1 = strtol(arg, NULL, 10); + val = strtol(arg, NULL, 10); + *skip1 = (val < 0) ? 0 : val; } if (skip2) { endptr++; /* skip over : */ - *skip2 = strtol(endptr, NULL, 10); + val = strtol(endptr, NULL, 10); + *skip2 = (val < 0) ? 0 : val; } } else { bu_exit(OPTS_ERROR, "Unexpected input processing [%s]\n", arg); @@ -116,45 +140,117 @@ handle_i_opt(const char *arg, size_t *skip1, size_t *skip2) } +HIDDEN enum diff +compare_rgb(int r1, int g1, int b1, int r2, int g2, int b2, size_t *matching, size_t *off1, size_t *offmany, size_t *missing) +{ + enum diff result = MISSING; + + if ((r1 == r2 && r1 != -1) + && (g1 == g2 && g1 != -1) + && (b1 == b2 && b1 != -1)) + { + result = MATCHING; + (*matching)++; + } else if (r1 == -1 || r2 == -1 || g1 == -1 || g2 == -1 || b1 == -1 || b2 == -1) { + /* image sizes don't match (or other I/O error) */ + result = MISSING; + (*missing)++; + } else if (((r1 != r2) && (g1 == g2) && (b1 == b2)) + || ((r1 == r2) && (g1 != g2) && (b1 == b2)) + || ((r1 == r2) && (g1 == g2) && (b1 != b2))) + { + /* off by one channel */ + if (r1 != r2) { + if ((r1 > r2 ? r1 - r2 : r2 - r1) > 1) { + result = OFF_BY_MANY; + (*offmany)++; + } else { + result = OFF_BY_ONE; + (*off1)++; + } + } else if (g1 != g2) { + if ((g1 > g2 ? g1 - g2 : g2 - g1) > 1) { + result = OFF_BY_MANY; + (*offmany)++; + } else { + result = OFF_BY_ONE; + (*off1)++; + } + } else if (b1 != b2) { + if ((b1 > b2 ? b1 - b2 : b2 - b1) > 1) { + result = OFF_BY_MANY; + (*offmany)++; + } else { + result = OFF_BY_ONE; + (*off1)++; + } + } + } else { + result = OFF_BY_MANY; + (*offmany)++; + } + + return result; +} + + int main(int argc, char *argv[]) { + const char *argv0 = argv[0]; + FILE *f1 = NULL; FILE *f2 = NULL; - struct stat sf1, sf2; + struct stat sf1; + struct stat sf2; size_t matching = 0; size_t off1 = 0; size_t offmany = 0; + size_t missing = 0; int c; - int list_pixel_values = 0; + int list_diff = 0; + int list_same = 0; int print_bytes = 0; - int silent = 0; + int quiet = 0; + + size_t bytes = 0; size_t f1_skip = 0; size_t f2_skip = 0; - size_t bytes = 0; + size_t stop_after = 0; bu_setprogname(argv[0]); /* process opts */ - while ((c = bu_getopt(argc, argv, "lbi:s")) != -1) { + while ((c = bu_getopt(argc, argv, "sdbi:n:q?")) != -1) { switch (c) { - case 'l': - list_pixel_values = 1; + case 's': + list_same = 1; + break; + case 'd': + list_diff = 1; break; case 'b': print_bytes = 1; break; case 'i': - handle_i_opt(bu_optarg, &f1_skip, &f2_skip); + handle_range_opt(bu_optarg, &f1_skip, &f2_skip); break; - case 's': - silent = 1; + case 'n': + { + long num = strtol(bu_optarg, NULL, 10); + stop_after = (num < 0) ? 0 : num; + break; + } + case 'q': + quiet = 1; break; + case '?': + case 'h': + usage(argv0); + return 0; default: - bu_log("\n"); - usage(argv[0]); exit(OPTS_ERROR); } } @@ -164,17 +260,17 @@ main(int argc, char *argv[]) /* validate what is left over */ if (argc < 1 || argc > 4) { bu_log("ERROR: incorrect number of arguments provided\n\n"); - usage(argv[0]); + usage(argv0); exit(OPTS_ERROR); } if ((argc > 0 && !argv[0]) || (argc > 1 && !argv[1])) { bu_log("ERROR: bad filename\n\n"); - usage(argv[0]); + usage(argv0); exit(OPTS_ERROR); } if ((argc > 2 && !argv[2]) || (argc > 3 && !argv[3])) { bu_log("ERROR: bad skip value\n\n"); - usage(argv[0]); + usage(argv0); exit(OPTS_ERROR); } @@ -186,10 +282,25 @@ main(int argc, char *argv[]) } else { snprintf(range, 64, "%s", argv[2]); } - handle_i_opt(range, &f1_skip, &f2_skip); + handle_range_opt(range, &f1_skip, &f2_skip); } - /* printf("Skip from FILE1: %ld and from FILE2: %ld\n", f1_skip, f2_skip); */ + if (!print_bytes) { + if ((f1_skip > ((size_t)-1)/3) + || (f2_skip > ((size_t)-1)/3)) + { + bu_log("ERROR: overflow, -i skip value(s) are too big {%zu:%zu}\n", f1_skip, f2_skip); + exit(OPTS_ERROR); + } + f1_skip *= 3; + f2_skip *= 3; + if (stop_after > ((size_t)-1)/3) + { + bu_log("ERROR: overflow, -n number is too big {%zu}\n", stop_after); + exit(OPTS_ERROR); + } + stop_after *= 3; + } if (BU_STR_EQUAL(argv[0], "-")) { f1 = stdin; @@ -197,6 +308,7 @@ main(int argc, char *argv[]) perror(argv[0]); exit(FILE_ERROR); } + if ((argc < 2) || BU_STR_EQUAL(argv[1], "-")) { f2 = stdin; } else if ((f2 = fopen(argv[1], "rb")) == NULL) { @@ -204,108 +316,155 @@ main(int argc, char *argv[]) exit(FILE_ERROR); } - stat(argv[0], &sf1); - stat(argv[1], &sf2); + setmode(fileno(stdin), O_BINARY); + /* we're writing out ascii */ + /* setmode(fileno(stdout), O_BINARY); */ - if (sf1.st_size != sf2.st_size) { - bu_exit(FILE_ERROR, "Different file sizes found: %s(%d) and %s(%d). Cannot perform pixcmp.\n", argv[0], (int)sf1.st_size, argv[1], (int)sf2.st_size); + if (f1_skip != f2_skip && f1 == stdin && f2 == stdin) { + bu_exit(OPTS_ERROR, "ERROR: cannot skip the same input stream by different amounts\n"); } - if (!print_bytes) { - f1_skip *= 3; - f2_skip *= 3; + fstat(fileno(f1), &sf1); + fstat(fileno(f2), &sf2); + + bu_log("FILE1_size(%zu) FILE1_skip(%zu) FILE2_size(%zu) FILE2_skip(%zu)\n", (size_t)sf1.st_size, f1_skip, (size_t)sf2.st_size, f2_skip); + + if (!quiet && ((sf1.st_size - f1_skip) != (sf2.st_size - f2_skip))) { + bu_log("WARNING: Different image sizes detected\n"); + if (print_bytes) { + bu_log("\t%s: %7llu bytes (%8llu bytes, skipping %7llu)\n", + argv[0], (unsigned long long)(sf1.st_size - f1_skip), (unsigned long long)sf1.st_size, (unsigned long long)f1_skip); + bu_log("\t%s: %7llu bytes (%8llu bytes, skipping %7llu)\n", + argv[1], (unsigned long long)(sf2.st_size - f2_skip), (unsigned long long)sf2.st_size, (unsigned long long)f2_skip); + } else { + bu_log("\t%s: %7llu pixels (%8llu bytes, skipping %7llu)\n", + argv[0], (unsigned long long)((sf1.st_size - f1_skip)/3), (unsigned long long)sf1.st_size, (unsigned long long)f1_skip); + bu_log("\t%s: %7llu pixels (%8llu bytes, skipping %7llu)\n", + argv[1], (unsigned long long)((sf2.st_size - f2_skip)/3), (unsigned long long)sf2.st_size, (unsigned long long)f2_skip); + } + } + + /* make sure we read all bytes */ + if (stop_after == 0) { + stop_after = FMAX((sf1.st_size - f1_skip), (sf2.st_size - f2_skip)); + if (f1 == stdin && f2 == stdin) { + /* dual stdin is interleaved */ + stop_after = (stop_after+1)/2; + } } + /* + bu_log("mode is [%d] and [%d]\n", S_ISFIFO(sf1.st_mode), S_ISFIFO(sf2.st_mode)); + bu_log("tty is [%d] and [%d]\n", isatty(fileno(f1)), isatty(fileno(f2))); + */ + /* skip requested pixels/bytes in FILE1 */ - if (f1_skip && fseek(f1, f1_skip, SEEK_SET)) { - bu_log("ERROR: Unable to seek %zd %s%s in FILE1\n", - f1_skip, - print_bytes?"byte":"pixel", - f1_skip==1?"":"s"); - perror("FILE1 fseek failure"); - exit(FILE_ERROR); + if (f1_skip) { + if (S_ISFIFO(sf1.st_mode)) { + size_t skipped = 0; + for (skipped = 0; skipped < f1_skip; skipped++) { + (void)fgetc(f1); + } + } else if (fseek(f1, f1_skip, SEEK_SET)) { + bu_log("ERROR: Unable to seek %zd %s%s in FILE1\n", + f1_skip, + print_bytes?"byte":"pixel", + f1_skip==1?"":"s"); + perror("FILE1 fseek failure"); + exit(FILE_ERROR); + } } /* skip requested pixels in FILE2 */ - if (f2_skip && fseek(f2, f2_skip, SEEK_SET)) { - bu_log("ERROR: Unable to seek %zd %s%s in FILE2\n", - f1_skip, - print_bytes?"byte":"pixel", - f1_skip==1?"":"s"); - perror("FILE2 fseek failure"); - exit(FILE_ERROR); + if (f2_skip) { + if (S_ISFIFO(sf2.st_mode)) { + size_t skipped = 0; + for (skipped = 0; skipped < f2_skip; skipped++) { + (void)fgetc(f2); + } + } else if (fseek(f2, f2_skip, SEEK_SET)) { + bu_log("ERROR: Unable to seek %zd %s%s in FILE2\n", + f2_skip, + print_bytes?"byte":"pixel", + f2_skip==1?"":"s"); + perror("FILE2 fseek failure"); + exit(FILE_ERROR); + } + } + + /* print header to stderr, output to stdout */ + if (!quiet && (list_same || list_diff)) { + if (print_bytes) { + bu_log("#Byte FILE1 FILE2 LABEL\n"); + } else { + bu_log("#Pixel\t(FILE1 R, G, B) (FILE2 R, G, B)\n"); + } } /* iterate over the pixels/bytes in the files */ - while ((!feof(f1) && !feof(f2)) && - (!ferror(f1) && !ferror(f2))) { - register int r1, r2, g1, g2, b1, b2; + while (bytes < stop_after) { + enum diff result; + int r1, r2, g1, g2, b1, b2; r1 = r2 = g1 = g2 = b1 = b2 = -1; + /* bu_log("\tbytes[%zu] < stop[%zu\n", bytes, stop_after); */ + r1 = fgetc(f1); r2 = fgetc(f2); - if (feof(f1) || feof(f2)) break; bytes++; - if (!print_bytes) { + + if (print_bytes) { + /* replicate */ + b1 = g1 = 0; + b2 = g2 = 0; + } else { g1 = fgetc(f1); g2 = fgetc(f2); - if (feof(f1) || feof(f2)) break; bytes++; b1 = fgetc(f1); b2 = fgetc(f2); - if (feof(f1) || feof(f2)) break; bytes++; } - if ((r1 == r2) && (g1 == g2) && (b1 == b2)) { - matching++; - continue; - } - - /* tabulate differing pixels */ - if (((r1 != r2) && (g1 == g2) && (b1 == b2)) || - ((r1 == r2) && (g1 != g2) && (b1 == b2)) || - ((r1 == r2) && (g1 == g2) && (b1 != b2))) { - /* off by one channel */ - if (r1 != r2) { - if ((r1 > r2 ? r1 - r2 : r2 - r1) > 1) { - offmany++; - } else { - off1++; - } - } else if (g1 != g2) { - if ((g1 > g2 ? g1 - g2 : g2 - g1) > 1) { - offmany++; - } else { - off1++; - } - } else if (b1 != b2) { - if ((b1 > b2 ? b1 - b2 : b2 - b1) > 1) { - offmany++; - } else { - off1++; - } + result = compare_rgb(r1, g1, b1, r2, g2, b2, &matching, &off1, &offmany, &missing); + + /* print them? */ + if ((result==MATCHING && list_same) + || (result!=MATCHING && list_diff)) + { + const char *label = NULL; + switch (result) { + case MATCHING: + label = "MATCHING"; + break; + case OFF_BY_MANY: + label = "OFF_BY_MANY"; + break; + case OFF_BY_ONE: + label = "OFF_BY_ONE"; + break; + case MISSING: + default: + label = "MISSING"; + break; } - } else { - /* off by many */ - offmany++; - } - - /* they're different, so print something */ - if (list_pixel_values) { if (print_bytes) { - printf("%ld %3d %3d\n", bytes, r1, r2); + printf("%ld %3d %3d %s\n", bytes, r1, r2, label); } else { - printf("%ld\t(%3d, %3d, %3d)\t(%3d, %3d, %3d)\n", bytes / 3, r1, g1, b1, r2, g2, b2); + printf("%ld\t(%3d, %3d, %3d)\t(%3d, %3d, %3d) %s\n", bytes / 3, r1, g1, b1, r2, g2, b2, label); } } } /* print summary */ - if (!silent) { - printf("pixcmp %s: %8zd matching, %8zd off by 1, %8zd off by many\n", - print_bytes?"bytes":"pixels", - matching, off1, offmany); + if (!quiet) { + printf("pixcmp %s: %8zd matching, %8zd off by 1, %8zd off by many", + print_bytes?"bytes":"pixels", matching, off1, offmany); + if (missing) { + printf(", %8zd missing\n", missing); + } else { + printf("\n"); + } } /* check for errors */ @@ -314,21 +473,16 @@ main(int argc, char *argv[]) return FILE_ERROR; } - /* if files were of different lengths, consider it an error */ - if (feof(f1) != feof(f2)) { - return FILE_ERROR; - } - /* indicate how many differences there were overall */ - if (offmany) { - return OFF_BY_MANY; + if (offmany || missing) { + return EXIT_OFF_BY_MANY; } if (off1) { - return OFF_BY_ONE; + return EXIT_OFF_BY_ONE; } /* Success! */ - return OFF_BY_NONE; + return EXIT_OFF_BY_NONE; } diff --git a/bench/run.c b/bench/run.c index 4282f8e9edb..eb2ebcdca0f 100644 --- a/bench/run.c +++ b/bench/run.c @@ -1,7 +1,7 @@ /* R U N . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/bench/run.sh b/bench/run.sh index a572289fa2d..4c40c6a4b69 100755 --- a/bench/run.sh +++ b/bench/run.sh @@ -2,7 +2,7 @@ # R U N . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -68,34 +68,31 @@ fi # force locale setting to C so things like date output as expected LC_ALL=C -# Windows has a special NUL device instead of /dev/null -if test -e /dev/null ; then - export NUL=/dev/null -else - export NUL=NUL -fi - # commands that this script expects for __cmd in echo pwd ; do - echo "test" | $__cmd > $NUL 2>&1 + out=`echo "test" | $__cmd 2>&1` if test ! x$? = x0 ; then echo "INTERNAL ERROR: $__cmd command is required" + echo " (output was [$out])" exit 1 fi done -echo "test" | grep "test" > $NUL 2>&1 +out=`echo "test" | grep "test" 2>&1` if test ! x$? = x0 ; then echo "INTERNAL ERROR: grep command is required" + echo " (output was [$out])" exit 1 fi -echo "test" | tr "test" "test" > $NUL 2>&1 +out=`echo "test" | tr "test" "test" 2>&1` if test ! x$? = x0 ; then echo "INTERNAL ERROR: tr command is required" + echo " (output was [$out])" exit 1 fi -echo "test" | sed "s/test/test/" > $NUL 2>&1 +out=`echo "test" | sed "s/test/test/" 2>&1` if test ! x$? = x0 ; then echo "INTERNAL ERROR: sed command is required" + echo " (output was [$out])" exit 1 fi @@ -398,12 +395,14 @@ fi # where to write results LOGFILE=run-$$-benchmark.log -touch "$LOGFILE" +if test -e $LOGFILE ; then + echo "WARNING: $LOGFILE already exists. Appending." +else + touch "$LOGFILE" +fi if test ! -w "$LOGFILE" ; then - if test "x$LOGFILE" != "x/dev/null" -a "x$LOGFILE" != "xNUL" ; then - echo "ERROR: Unable to log to $LOGFILE" - fi - LOGFILE=$NUL + echo "WARNING: Unable to log to $LOGFILE" + LOGFILE= fi VERBOSE_ECHO=: @@ -422,7 +421,13 @@ fi $ECHO "B R L - C A D B E N C H M A R K" $ECHO "=================================" $ECHO "Running $THIS on `date`" -$ECHO "Logging output to $LOGFILE" +if test "x$LOGFILE" != "x" ; then + $ECHO "Logging output to $LOGFILE" +elif test "x$QUIET" != "x" ; then + $ECHO "Logging output to STDOUT" +else + $ECHO "Logging output is OFF" +fi $ECHO "`uname -a 2>&1`" $ECHO @@ -591,11 +596,11 @@ else $ECHO "Using [$ELP] for ELP" fi -# prevent git shell and msys2 from expanding -F/dev/debug +# stop git shell & msys2 arg manipulation export MSYS_NO_PATHCONV=1 MSYS2_ARG_CONV_EXCL="-F/dev/debug" # sanity check: make sure $RT runs -eval \"$RT\" -s1 -F/dev/debug \"${DB}/moss.g\" LIGHT > $NUL 2>&1 +out=`eval \"$RT\" -s1 -F/dev/debug \"${DB}/moss.g\" LIGHT 2>&1` ret=$? if test ! "x${ret}" = "x0" ; then $ECHO @@ -603,23 +608,27 @@ if test ! "x${ret}" = "x0" ; then "$RT" $ECHO $ECHO "ERROR: RT does not seem to work as expected" + $ECHO " (returned $ret, output was [$out])" exit 2 fi # sanity check: make sure $CMP runs -eval \"$CMP\" $NUL $NUL > $NUL 2>&1 +out=`eval \"$CMP\" - - 2>&1 < $NUL 2>&1 +out=`eval \"$ELP\" 0 2>&1` if test ! "x${ret}" = "x0" ; then $ECHO $ECHO "ERROR: ELP does not seem to work as expected" + $ECHO " (returned $ret, output was [$out])" exit 2 fi @@ -679,7 +688,8 @@ $ECHO # if expr works, let the user know about how long this might take -if test "x`expr 1 - 1 2>$NUL`" = "x0" ; then +zero=`expr 1 - 1 2>&1` +if test "x$zero" = "x0" ; then mintime="`expr 6 \* $TIMEFRAME`" if test $mintime -lt 1 ; then mintime=0 # zero is okay @@ -701,6 +711,7 @@ if test "x`expr 1 - 1 2>$NUL`" = "x0" ; then $ECHO else $ECHO "WARNING: expr is unavailable, unable to compute statistics" + $ECHO " (output of 1 - 1 was [$zero])" $ECHO fi @@ -867,13 +878,13 @@ sqrt ( ) { if test "x$sqrt_number" = "x" ; then $ECHO "ERROR: cannot compute the square root of nothing" 1>&2 exit 1 - elif test $sqrt_number -lt 0 > $NUL 2>&1 ; then + elif test $sqrt_number -lt 0 ; then $ECHO "ERROR: square root of negative numbers is only in your imagination" 1>&2 exit 1 fi sqrt_have_dc=yes - echo "1 1 + p" | dc >$NUL 2>&1 + out=`echo "1 1 + p" | dc 2>&1` if test ! x$? = x0 ; then sqrt_have_dc=no fi @@ -883,7 +894,7 @@ sqrt ( ) { sqrt_root=`echo "$sqrt_number v p" | dc` else sqrt_have_bc=yes - echo "1 + 1" | bc >$NUL 2>&1 + out=`echo "1 + 1" | bc 2>&1` if test ! "x$?" = "x0" ; then sqrt_have_bc=no fi @@ -1130,7 +1141,7 @@ EOF ls -la *.pix* fi $VERBOSE_ECHO "DEBUG: $CMP $PIX/${bench_testname}.pix ${bench_testname}.pix" - cmp_result="`eval \\\"${CMP}\\\" \\\"${PIX}/${bench_testname}.pix\\\" ${bench_testname}.pix 2>&1`" + cmp_result="`eval \\\"${CMP}\\\" \\\"${PIX}/${bench_testname}.pix\\\" ${bench_testname}.pix 2>&1 | grep pixels`" ret=$? $ECHO "$cmp_result" @@ -1233,13 +1244,13 @@ perf ( ) { # see if we have a calculator perf_have_dc=yes - echo "1 1 + p" | dc >$NUL 2>&1 + out=`echo "1 1 + p" | dc 2>&1` if test ! x$? = x0 ; then perf_have_dc=no fi perf_have_bc=yes - echo "1 + 1" | bc >$NUL 2>&1 + out=`echo "1 + 1" | bc 2>&1` if test ! x$? = x0 ; then perf_have_bc=no fi diff --git a/bench/try.sh b/bench/try.sh index 3160e4216e1..623af87e66c 100755 --- a/bench/try.sh +++ b/bench/try.sh @@ -2,7 +2,7 @@ # T R Y . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/bench/viewdiff.sh b/bench/viewdiff.sh index 77423b8b842..a1cc2c95c65 100755 --- a/bench/viewdiff.sh +++ b/bench/viewdiff.sh @@ -2,7 +2,7 @@ # V I E W D I F F . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/configure b/configure index f5758701473..fee330d5856 100755 --- a/configure +++ b/configure @@ -162,10 +162,6 @@ do shift;; --disable-opennurbs) options="$options -DBRLCAD_OPENNURBS=SYSTEM"; shift;; - --enable-spsr) options="$options -DBRLCAD_SPSR=BUNDLED"; - shift;; - --disable-spsr) options="$options -DBRLCAD_SPSR=SYSTEM"; - shift;; --enable-scl) options="$options -DBRLCAD_SC=BUNDLED"; shift;; --disable-scl) options="$options -DBRLCAD_SC=SYSTEM"; @@ -178,18 +174,10 @@ do shift;; --disable-step-class-libraries) options="$options -DBRLCAD_SC=SYSTEM"; shift;; - --enable-vds) options="$options -DBRLCAD_VDS=BUNDLED"; - shift;; - --disable-vds) options="$options -DBRLCAD_VDS=SYSTEM"; - shift;; --enable-openscenegraph) options="$options -DBRLCAD_OSG=BUNDLED"; shift;; --disable-openscenegraph) options="$options -DBRLCAD_OSG=SYSTEM"; shift;; - --enable-gdiam) options="$options -DBRLCAD_GDIAM=BUNDLED"; - shift;; - --disable-gdiam) options="$options -DBRLCAD_GDIAM=SYSTEM"; - shift;; --enable-proj4) options="$options -DBRLCAD_PROJ4=BUNDLED"; shift;; --disable-proj4) options="$options -DBRLCAD_PROJ4=SYSTEM"; diff --git a/db/CMakeLists.txt b/db/CMakeLists.txt index 123eceaf6e4..f357e69471d 100644 --- a/db/CMakeLists.txt +++ b/db/CMakeLists.txt @@ -57,6 +57,7 @@ function(ADD_G_TARGET in_model folder) set(OUTPUT_FILE "${output_file}") # Use the model name for the script, since the output file is specific to this input configure_file("${CMAKE_SOURCE_DIR}/db/conv_run.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake" @ONLY) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/${in_model_root}.cmake") # Define the target add_custom_command( @@ -97,25 +98,31 @@ function(ADD_G_TARGET in_model folder) endif(${MODEL_TYPE} STREQUAL "fg4") if(${MODEL_TYPE} STREQUAL "stp") - add_custom_command( - OUTPUT ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file} - COMMAND step-g -O ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file} ${CMAKE_CURRENT_SOURCE_DIR}/${in_model} > ${log_file} 2>&1 - DEPENDS step-g ${CMAKE_CURRENT_SOURCE_DIR}/${in_model} - ) + if (BRLCAD_ENABLE_STEP) + add_custom_command( + OUTPUT ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file} + COMMAND step-g -O ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file} ${CMAKE_CURRENT_SOURCE_DIR}/${in_model} > ${log_file} 2>&1 + DEPENDS step-g ${CMAKE_CURRENT_SOURCE_DIR}/${in_model} + ) + else (BRLCAD_ENABLE_STEP) + CMAKEFILES(${CMAKE_CURRENT_SOURCE_DIR}/${in_model}) + endif (BRLCAD_ENABLE_STEP) endif(${MODEL_TYPE} STREQUAL "stp") if(NOT ${MODEL_TYPE} STREQUAL "asc" OR BRLCAD_ENABLE_TCL) - add_custom_target(${in_model_root}.g ALL DEPENDS ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file}) - set_target_properties(${in_model_root}.g PROPERTIES FOLDER "${folder}") - - # Install logic - if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY) - install(FILES ${CMAKE_CURRENT_BUILD_DIR_INSTALL}/${output_file} DESTINATION ${DATA_DIR}/${rel_dir}) - endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY) - - # Clean-up - set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${log_file}") - DISTCLEAN("${log_file}") + if(NOT ${MODEL_TYPE} STREQUAL "stp" OR BRLCAD_ENABLE_STEP) + add_custom_target(${in_model_root}.g ALL DEPENDS ${CMAKE_CURRENT_BUILD_DIR_SCRIPT}/${output_file}) + set_target_properties(${in_model_root}.g PROPERTIES FOLDER "${folder}") + + # Install logic + if(BRLCAD_INSTALL_EXAMPLE_GEOMETRY) + install(FILES ${CMAKE_CURRENT_BUILD_DIR_INSTALL}/${output_file} DESTINATION ${DATA_DIR}/${rel_dir}) + endif(BRLCAD_INSTALL_EXAMPLE_GEOMETRY) + + # Clean-up + set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${log_file}") + DISTCLEAN("${log_file}") + endif(NOT ${MODEL_TYPE} STREQUAL "stp" OR BRLCAD_ENABLE_STEP) endif(NOT ${MODEL_TYPE} STREQUAL "asc" OR BRLCAD_ENABLE_TCL) endfunction(ADD_G_TARGET in_model folder) @@ -152,6 +159,7 @@ set(G_SAMPLE_MODELS pic.asc pinewood.asc prim.asc + radialgrid.asc rounds.asc tank_car.asc terra.asc @@ -220,12 +228,13 @@ CMAKEFILES( ${G_SAMPLE_MODELS} CMakeLists.txt aet.rt + conv_run.cmake.in cornell.rt cube.rt db.php include/ctype.inc include/debug.inc -) + ) # Local Variables: # tab-width: 8 diff --git a/db/cube.rt b/db/cube.rt index acb46611871..5239056dd56 100755 --- a/db/cube.rt +++ b/db/cube.rt @@ -2,7 +2,7 @@ # C U B E . R T # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/db/db.php b/db/db.php index cb6ad84c763..15718dfc66c 100644 --- a/db/db.php +++ b/db/db.php @@ -2,7 +2,7 @@ /* D B . P H P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/db/radialgrid.asc b/db/radialgrid.asc new file mode 100644 index 00000000000..a12fe5dd225 --- /dev/null +++ b/db/radialgrid.asc @@ -0,0 +1,36 @@ +title {Sample geometry with a radial gridlines and a shadow-casting light} +units m +put {cylinder.r} comb region yes tree {- {- {- {- {- {l c1.tgc} {l c1i.tgc}} {l c1c1.arb8}} {l c1c2.arb8}} {l c1c3.tgc}} {l c1c4.tgc}} +attr set {cylinder.r} {region} {R} {region_id} {1003} {material_id} {1} {los} {100} +put {50m_ring.s} tor V {0 0 0} H {6.12323399573676603586882E-17 0 -1} r_a 50000 r_h 100 +put {40m_ring.s} tor V {0 0 0} H {6.12323399573676603586882E-17 0 -1} r_a 40000 r_h 100 +put {30m_ring.s} tor V {0 0 0} H {6.12323399573676603586882E-17 0 -1} r_a 30000 r_h 100 +put {20m_ring.s} tor V {0 0 0} H {6.12323399573676603586882E-17 0 -1} r_a 20000 r_h 100 +put {10m_ring.s} tor V {0 0 0} H {6.12323399573676603586882E-17 0 -1} r_a 10000 r_h 100 +put {c1c2.arb8} arb8 V1 {-1449.999999999999545252649 -99.99999999999998578914528 0} V2 {-1449.999999999999545252649 100 0} V3 {-1449.999999999999545252649 100 1900} V4 {-1449.999999999999545252649 -99.99999999999998578914528 1900} V5 {-449.9999999999999431565811 -99.99999999999998578914528 0} V6 {-449.9999999999999431565811 100 0} V7 {-449.9999999999999431565811 100 1900} V8 {-449.9999999999999431565811 -99.99999999999998578914528 1900} +put {c1c1.arb8} arb8 V1 {1450 -500 1250} V2 {1450 500 1250} V3 {1450 500 1750} V4 {1450 -500 1750} V5 {450 -500 1250} V6 {450 500 1250} V7 {450 500 1750} V8 {450 -500 1750} +put {ground.s} arb8 V1 {60000.00000000002182787284 -60000.00000000002182787284 -100} V2 {60000.00000000002182787284 60000.00000000002182787284 -100} V3 {60000.00000000002182787284 60000.00000000002182787284 0} V4 {60000.00000000002182787284 -60000.00000000002182787284 0} V5 {-60000.00000000001455191523 -60000.00000000002182787284 -100} V6 {-60000.00000000001455191523 60000.00000000002182787284 -100} V7 {-60000.00000000001455191523 60000.00000000002182787284 0} V8 {-60000.00000000001455191523 -60000.00000000002182787284 0} +put {ground.r} comb region yes tree {l ground.s} +attr set {ground.r} {region} {R} {region_id} {1000} {material_id} {1} {los} {100} {color} {0/255/0} +put {c1c4.tgc} tgc V {-6.123233995736766242944808E-14 -500 1000} H {0 -1000 6.123233995736767505122256E-14} A {200 0 0} B {0 1.224646799147353374806706E-14 -200} C {200 0 0} D {0 1.224646799147353374806706E-14 -200} +put {c1c3.tgc} tgc V {0 500 1500} H {0 1000 6.123233995736764980767359E-14} A {200 0 0} B {0 1.224646799147353374806706E-14 -200} C {200 0 0} D {0 1.224646799147353374806706E-14 -200} +put {165deg.s} tgc V {53125.92044589875149540603 -14235.04748063865554286167 0} H {-106251.8408917975175427273 28470.09496127731472370215 6.735557395310443447840915E-12} A {-5.91458985689334876413324E-15 1.584809575715884060677382E-15 -100} B {-25.88190451025210236934981 -96.59258262890682544821175 0} C {-5.91458985689334876413324E-15 1.584809575715884060677382E-15 -100} D {-25.88190451025210236934981 -96.59258262890682544821175 0} +put {135deg.s} tgc V {38890.87296526011050445959 -38890.8729652601177804172 0} H {-77781.74593052023556083441 77781.74593052025011274964 6.735557395310443447840915E-12} A {-4.329780281177466281177668E-15 4.329780281177467070038573E-15 -100} B {-70.71067811865475505328504 -70.71067811865474084243033 0} C {-4.329780281177466281177668E-15 4.329780281177467070038573E-15 -100} D {-70.71067811865475505328504 -70.71067811865474084243033 0} +put {105deg.s} tgc V {14235.04748063864644791465 -53125.92044589875877136365 0} H {-28470.09496127729653380811 106251.8408917975320946425 6.735557395310443447840915E-12} A {-1.58480957571588307460125E-15 5.914589856893349552994145E-15 -100} B {-96.59258262890682544821175 -25.88190451025208460578142 0} C {-1.58480957571588307460125E-15 5.914589856893349552994145E-15 -100} D {-96.59258262890682544821175 -25.88190451025208460578142 0} +put {150deg.s} tgc V {47631.39720814413158223033 -27499.99999999999636202119 0} H {-95262.79441628826316446066 55000 6.735557395310443447840915E-12} A {-5.302876193624534820650073E-15 3.061616997868382648155861E-15 -100} B {-49.99999999999999289457264 -86.60254037844387653422018 0} C {-5.302876193624534820650073E-15 3.061616997868382648155861E-15 -100} D {-49.99999999999999289457264 -86.60254037844387653422018 0} +put {120deg.s} tgc V {27499.99999999998908606358 -47631.39720814413158223033 0} H {-54999.99999999998544808477 95262.79441628826316446066 6.735557395310443447840915E-12} A {-3.061616997868381859294956E-15 5.302876193624534820650073E-15 -100} B {-86.60254037844387653422018 -49.99999999999997868371793 0} C {-3.061616997868381859294956E-15 5.302876193624534820650073E-15 -100} D {-86.60254037844387653422018 -49.99999999999997868371793 0} +put {light.s} ell V {0 0 1500} A {10 0 0} B {0 10 0} C {0 0 10} +put {light.r} comb region yes tree {l light.s} +attr set {light.r} {oshader} {light {f 10 s 32 v 0}} {region} {R} {shader} {light {f 10.0 s 32 v 0}} {region_id} {1002} {material_id} {1} {los} {100} {color} {255/255/255} +put {c1i.tgc} tgc V {0 0 0} H {0 0 1900} A {900 0 0} B {0 900 0} C {900 0 0} D {0 900 0} +put {75deg.s} tgc V {-14235.04748063864099094644 -53125.92044589875877136365 0} H {28470.09496127728561987169 106251.8408917975320946425 6.735557395310443447840915E-12} A {1.584809575715882482955572E-15 5.914589856893349552994145E-15 -100} B {-96.59258262890682544821175 25.88190451025207394764038 0} C {1.584809575715882482955572E-15 5.914589856893349552994145E-15 -100} D {-96.59258262890682544821175 25.88190451025207394764038 0} +put {45deg.s} tgc V {-38890.8729652601177804172 -38890.8729652601177804172 0} H {77781.74593052025011274964 77781.74593052025011274964 6.735557395310443447840915E-12} A {4.329780281177467070038573E-15 4.329780281177467070038573E-15 -100} B {-70.71067811865475505328504 70.71067811865475505328504 0} C {4.329780281177467070038573E-15 4.329780281177467070038573E-15 -100} D {-70.71067811865475505328504 70.71067811865475505328504 0} +put {15deg.s} tgc V {-53125.92044589875877136365 -14235.04748063864099094644 0} H {106251.8408917975320946425 28470.09496127728561987169 6.735557395310443447840915E-12} A {5.914589856893349552994145E-15 1.584809575715882482955572E-15 -100} B {-25.88190451025207394764038 96.59258262890682544821175 0} C {5.914589856893349552994145E-15 1.584809575715882482955572E-15 -100} D {-25.88190451025207394764038 96.59258262890682544821175 0} +put {90deg.s} tgc V {-3.367778697655221320023674E-12 -55000 0} H {6.735557395310443447840915E-12 110000.0000000000145519152 6.735557395310443447840915E-12} A {3.749399456654643800636173E-31 6.123233995736766085172627E-15 -100} B {-100 6.123233995736766085172627E-15 0} C {3.749399456654643800636173E-31 6.123233995736766085172627E-15 -100} D {-100 6.123233995736766085172627E-15 0} +put {60deg.s} tgc V {-27500.00000000000727595761 -47631.39720814412430627272 0} H {55000.00000000002182787284 95262.79441628826316446066 6.735557395310443447840915E-12} A {3.061616997868383437016766E-15 5.302876193624534031789167E-15 -100} B {-86.60254037844386232336547 50.00000000000001421085472 0} C {3.061616997868383437016766E-15 5.302876193624534031789167E-15 -100} D {-86.60254037844386232336547 50.00000000000001421085472 0} +put {30deg.s} tgc V {-47631.39720814413158223033 -27499.99999999999636202119 0} H {95262.79441628826316446066 55000 6.735557395310443447840915E-12} A {5.302876193624534820650073E-15 3.061616997868382253725408E-15 -100} B {-49.99999999999999289457264 86.60254037844387653422018 0} C {5.302876193624534820650073E-15 3.061616997868382253725408E-15 -100} D {-49.99999999999999289457264 86.60254037844387653422018 0} +put {grid.r} comb region yes tree {u {u {u {u {u {l 50m_ring.s} {l 40m_ring.s}} {u {l 30m_ring.s} {l 20m_ring.s}}} {u {u {l 10m_ring.s} {l 0deg.s}} {u {l 15deg.s} {l 30deg.s}}}} {u {u {u {l 45deg.s} {l 60deg.s}} {u {l 75deg.s} {l 90deg.s}}} {u {u {l 105deg.s} {l 120deg.s}} {u {l 135deg.s} {l 150deg.s}}}}} {l 165deg.s}} +attr set {grid.r} {region} {R} {shader} {plastic} {region_id} {1001} {material_id} {1} {los} {100} {color} {255/255/255} +put {c1.tgc} tgc V {0 0 0} H {0 0 2000} A {1000 0 0} B {0 1000 0} C {1000 0 0} D {0 1000 0} +put {0deg.s} tgc V {-55000 0 0} H {110000.0000000000145519152 0 6.735557395310443447840915E-12} A {6.123233995736766085172627E-15 0 -100} B {0 100 0} C {6.123233995736766085172627E-15 0 -100} D {0 100 0} +put {all.g} comb region no tree {u {u {u {- {l ground.r} {l grid.r}} {- {l grid.r} {l c1.tgc}}} {l cylinder.r}} {l light.r}} diff --git a/doc/BRL-CAD.bib b/doc/BRL-CAD.bib index 7d820429b74..4f9ac6d85b2 100644 --- a/doc/BRL-CAD.bib +++ b/doc/BRL-CAD.bib @@ -2246,6 +2246,19 @@ @TECHREPORT{Baker18a timestamp = {2018.06.06} } +@TECHREPORT{Dean18a, + author = {Dean, Allen and Thomas, Jr., John}, + title = {Development of Large and Small Missile Target Models}, + institution = {United States Air Force Research Laboratory, Munitions Directorate}, + year = {2018}, + month = dec, + number = {AFRL-RW-EG-TR-2018-100}, + address = {Air Force Research Laboratory, Eglin Air Force Base, FL 32542-6810}, + note = {Distribution authorized to Department of Defense and U.S. DoD contractors only; critical technology; distribution limitations applied November 2018. Other requests must be referred to AFRL/RWML, Eglin AFB FL 32542-5910.}, + owner = {morrison}, + timestamp = {2020.10.30} +} + @comment{jabref-meta: selector_journal:} @comment{jabref-meta: selector_author:} diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 67294acc919..5458e47710b 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -4,6 +4,7 @@ verbose_add_subdirectory(doc legal) set(documentation_DATA BRL-CAD.bib + GITHUB IDEAS PROJECTS README.Linux @@ -202,6 +203,7 @@ set(documentation_mged_old_DATA ADD_DOC(documentation_mged_old_DATA mged_old) configure_file(pad_file.xml.in "${CMAKE_CURRENT_BINARY_DIR}/pad_file.xml" @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/pad_file.xml") install(FILES "${CMAKE_CURRENT_BINARY_DIR}/pad_file.xml" DESTINATION ${DOC_DIR}) CMAKEFILES( diff --git a/doc/GITHUB b/doc/GITHUB new file mode 100644 index 00000000000..ed4670c0694 --- /dev/null +++ b/doc/GITHUB @@ -0,0 +1,60 @@ +Notes about development with the Github hosting platform. + +-------------------------------------------------------------------------------- +Using Github Actions to iteratively debug problems. + +Github's runners (build platforms for it's Actions CI system) offer a way to +test platforms we don't otherwise have access to. Sometimes, if we need to +iteratively test inputs being supplied to tools on those platforms to diagnose +a problem, the full configure/build/test cycle can be a very slow way to +proceed. + +A way forward in this case is to create a temporary local repository with a +checking of the binary version of BRL-CAD used for the specific platform in +question, along with test inputs and an action defined to run the specific test +in question. (REMEMBER - github repos are public, so only define and use inputs +suitable for public consumption!) + +For the below example, we created a repository with the Windows binary install +and a README file explaining what the test is doing: + +-rw-rw-r-- 1 user user 72 Sep 23 17:52 README +drwxrwxr-x 3 user user 12288 Sep 24 07:41 bin +drwxrwxr-x 4 user user 4096 Sep 23 17:49 libexec +drwxrwxr-x 13 user user 4096 Sep 23 17:50 lib +drwxrwxr-x 5 user user 4096 Sep 23 17:49 include +drwxrwxr-x 16 user user 4096 Sep 23 17:50 share +drwxrwxr-x 8 user user 4096 Sep 24 07:42 .git +drwxrwxr-x 3 user user 4096 Sep 23 17:53 .github + +Then, in the .github/workflows directory we create a .yml file to trigger the +test whenever we push a change. For this example we were wanting to test the +benchmark script, so we create a .github/workflows/benchmark.yml file with the +following contents: + +name: benchhmark +on: [push] +jobs: + bench: + runs-on: windows-latest + steps: + - uses: actions/checkout@v2 + # https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#adding-a-system-path + - run: echo '::add-path::{C:\Program Files\Git\bin}' + - run: sh.exe ./bin/benchmark run + +This allowed developers to iteratively adjust the bin/benchmark shell script +and test the results in the compilation Windows environment, *without* having +to perform the full compilation cycle on Windows each time. Once a working +benchmark script was identified it was added back to the primary repository and +the test repo deleted. + +-------------------------------------------------------------------------------- +Debugging flags can be added to the actions environment for a given repo: + +https://github.community/t/ci-access-to-shell-session/17250 + +(Note: the "Secrets" label is misleading in this particular case - that is +the mechanism by which the values are introduced into the runner environment, +but there are no actual secrets contained in the values of the debugging +variables.) diff --git a/doc/README.Linux b/doc/README.Linux index 2e4da28b351..6bcd6b320a7 100644 --- a/doc/README.Linux +++ b/doc/README.Linux @@ -53,10 +53,10 @@ you will be able to compile BRL-CAD. Following the build instructions in the INSTALL file. You will need: -gcc (3+, e.g. 4.0.3) -g++ (3+, e.g. 4.0.3) +gcc (6+, e.g. 6.0.3) +g++ (6+, e.g. 6.0.3) make (e.g. gnu make 3.8.0) -cmake (2.8.8 or newer) +cmake (3.0.2 or newer) All three of those have implicit dependencies on other packages. @@ -89,9 +89,13 @@ should be deleted and recreated for each new attempt at package generation. -Redhat/Fedora +Redhat/CentOS/Fedora ------------- +If you don't already have the necessary development tools: + + yum install gcc gcc-c++ cmake + Development packages for building on Redhat/Fedora platforms: yum install libX11-devel @@ -101,12 +105,49 @@ Development packages for building on Redhat/Fedora platforms: yum install fontconfig-devel # optional yum install mesa-libGL-devel # optional +If you wish to create rpm packages, you'll need rpmbuild + + yum install rpm-build # optional + +When setting up older versions for building BRL-CAD, it is sometimes +necessary to install some non-default compilation tools in addition to the +usual dependencies. (The default toolchain is sometimes too old to +properly build BRL-CAD, if the compilers don't support sufficiently modern +standards.) The following example is for CentOS 7: + +yum install centos-release-scl +yum install devtoolset-7 + +Then to run within that environment: + +scl enable devtoolset-7 bash + + +The CMake version is often too old as well. One way forward is to download the +source code and bootstrap it (do this within the devtoolset enabled bash): + +sudo yum install openssl-devel + +curl -L -o cmake-3.18.2.tar.gz https://github.com/Kitware/CMake/releases/download/v3.18.2/cmake-3.18.2.tar.gz +tar -xvf cmake-3.18.2.tar.gz +cd cmake-3.18.2 +./bootstrap --prefix=/opt/cmake +make -j3 && make install +export PATH=/opt/cmake/bin + +From there, with the devtoolset enabled and the PATH set to include the new +CMake, it should be possible to proceed normally with the build. + +------- + To determine what particular version of Redhat or Fedora you are using, check these files: cat /etc/redhat-release cat /etc/fedora-release +------- + Note there is a supported rpm package generation script in file 'sh/make_rpm.sh' which can only function on a Fedora or openSUSE system. It can be used like so: @@ -119,6 +160,14 @@ system. It can be used like so: It is also possible to create an RPM package using CPack with the make package build target, on systems with the proper RPM tools. +------- + +One issue encountered running CentOS in VirtualBox - networking +is off by default. To enable, look for a file in +/etc/sysconfig/network-scripts/ called something like enp0s3 and +set ONBOOT=yes (see https://unix.stackexchange.com/a/79273) + + PPC64 Linux ----------- diff --git a/doc/README.Windows b/doc/README.Windows index 41c680726c5..2c4f18b2426 100644 --- a/doc/README.Windows +++ b/doc/README.Windows @@ -59,6 +59,35 @@ You may want to produce an NSIS installer. If so, locate a target named PACKAGE and run it. The end result should be an .exe file capable of installing BRL-CAD. +Debugging with Visual Studio +---------------------------- + +For most compilation environments, BRL-CAD defines a Debug build +configuration which disables optimizations and a Release build that +enables them - although Debug builds are generally easier to use when +tracking down problems, both configurations keep debugging information. +This allows for easier diagnosis of problems in real-world use, as +well as diagnosis of issues that occur only when optimizations are +enabled. + +MSVC and Windows present a more complicated situation. On that platform, +Debug versions of applications are not redistributable: +https://docs.microsoft.com/en-us/cpp/windows/determining-which-dlls-to-redistribute + +As a consequence the default BRL-CAD build configuration for Release +(unlike other platforms) does not support debugging. + +If it is necessary to debug a Release mode specific issue on Windows, +extra steps are needed. Users of CMake may be familiar with the build +configuration RelWithDebInfo, which is normally disabled for BRL-CAD +builds - debugging a Release-mode-only problem is exactly the situation +in which this build configuration is needed. + +To re-enable the availability of RelWithDebInfo for BRL-CAD builds, set +the compilation variable ENABLE_ALL_CONFIG_TYPES to ON - once set, +BRL-CAD's configure will no longer eliminate CMake build types other +than Debug and Release. + Working with MSI files ---------------------- @@ -86,6 +115,44 @@ installed on the system. To see what versions are installed, look for Windows SDK installs in the "Apps & Features" Setup interface. +======================================================= + +=== Tracking down the source of a header inclusion === + +If a Windows system header is reporting an error, it can be helpful to identify +where the header is being included from. By default MSVC doesn't report this, +but in Visual Studio there is a "ShowIncludes" setting that may be enabled to +find this information: + +https://stackoverflow.com/a/1138045 + +This setting may also be added to the compilation flags directly +in CMake as "/showIncludes": + +https://docs.microsoft.com/en-us/cpp/build/reference/showincludes-list-include-files + +Note that the output of this can be very verbose, especially if applied +globally to all targets - you may want to consider applying it specifically to +an individual target with target_compile_options. This flag is a very useful +tool when trying to determine *why* a particular header is present in an error +message. + +========================================================= + +=== Debugging build outputs from a Ninja compilation === + +Normally, Visual Studio is used to debug Windows executables. However, +another alternative is available called WinDbg: + +https://docs.microsoft.com/en-us/windows-hardware/drivers/debugger/debugger-download-tools + +This has been used successfully to debug Ninja produced executables. +Note that if debugging an issue unique to Release builds, you will +want to set the CMake variable ENABLE_ALL_CONFIG_TYPES to ON +and the specific build type to RelWithDebInfo + +cmake.exe -G Ninja -ENABLE_ALL_CONFIG_TYPES=ON -DCMAKE_BUILD_TYPE=RelWithDebInfo + =========================================== === Notes on Visual Studio 14 2015 === diff --git a/doc/docbook/CMakeLists.txt b/doc/docbook/CMakeLists.txt index 39ebf94664b..53634e3f5dc 100644 --- a/doc/docbook/CMakeLists.txt +++ b/doc/docbook/CMakeLists.txt @@ -17,6 +17,7 @@ if(BRLCAD_EXTRADOCS_PDF) # Apache FOP needs a couple of config files set up set(srcdir ${CMAKE_CURRENT_SOURCE_DIR}) configure_file(${CMAKE_SOURCE_DIR}/doc/docbook/fop.xconf.in ${CMAKE_BINARY_DIR}/doc/docbook/fop.xconf) + DISTCLEAN("${CMAKE_BINARY_DIR}/doc/docbook/fop.xconf") endif(BRLCAD_EXTRADOCS_PDF) # For the html files, we need brlcad.css @@ -36,6 +37,7 @@ include(${BRLCAD_SOURCE_DIR}/misc/CMake/DocBook.cmake) add_subdirectory(articles) add_subdirectory(books) +add_subdirectory(devguides) add_subdirectory(lessons) add_subdirectory(presentations) add_subdirectory(specifications) diff --git a/doc/docbook/articles/CMakeLists.txt b/doc/docbook/articles/CMakeLists.txt index 4502ba4d164..4b6d83d5cf1 100644 --- a/doc/docbook/articles/CMakeLists.txt +++ b/doc/docbook/articles/CMakeLists.txt @@ -2,11 +2,13 @@ if(BRLCAD_EXTRADOCS_HTML) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-article-xhtml-stylesheet.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-article-xhtml-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-article-xhtml-stylesheet.xsl") endif(BRLCAD_EXTRADOCS_HTML) if(BRLCAD_EXTRADOCS_PHP) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-article-xhtml-stylesheet.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-article-xhtml-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-article-xhtml-stylesheet.xsl") endif(BRLCAD_EXTRADOCS_PHP) # Files for PDF products @@ -14,6 +16,7 @@ if(BRLCAD_EXTRADOCS_PDF) # Style sheet for XSLT transformation to PDF configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-article-fo-stylesheet.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-article-fo-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-article-fo-stylesheet.xsl") endif(BRLCAD_EXTRADOCS_PDF) # For HTML and FO (FO is an intermediate file used in the diff --git a/doc/docbook/articles/mged.xml b/doc/docbook/articles/mged.xml index f7445e4b272..cfae34ddf79 100644 --- a/doc/docbook/articles/mged.xml +++ b/doc/docbook/articles/mged.xml @@ -2713,6 +2713,14 @@ rt -s 512 -F :1 zero knobs and sliders + + + N + + + shoot a ray with nirt + + < F1 > diff --git a/doc/docbook/books/CMakeLists.txt b/doc/docbook/books/CMakeLists.txt index 98ac9b0a28c..838724423a6 100644 --- a/doc/docbook/books/CMakeLists.txt +++ b/doc/docbook/books/CMakeLists.txt @@ -2,11 +2,13 @@ if(BRLCAD_EXTRADOCS_HTML) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-book-xhtml-stylesheet.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-book-xhtml-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-book-xhtml-stylesheet.xsl") endif(BRLCAD_EXTRADOCS_HTML) if(BRLCAD_EXTRADOCS_PHP) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-book-xhtml-stylesheet.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-book-xhtml-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-book-xhtml-stylesheet.xsl") endif(BRLCAD_EXTRADOCS_PHP) # Files for PDF products @@ -14,6 +16,7 @@ if(BRLCAD_EXTRADOCS_PDF) # Style sheet for XSLT transformation to PDF configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-book-fo-stylesheet.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-book-fo-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-book-fo-stylesheet.xsl") endif(BRLCAD_EXTRADOCS_PDF) # For HTML and FO (FO is an intermediate file used in the @@ -89,10 +92,12 @@ set(CURRENT_VOLUME "I") set(CURRENT_TITLE "An Overview of BRL-CAD") configure_file(${CMAKE_SOURCE_DIR}/doc/docbook/resources/brlcad/tutorial-cover-template.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeI-cover.xsl @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeI-cover.xsl") string(REPLACE " " "%20" TUTORIAL_COVER_XSL ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeI-cover.xsl) configure_file(${CMAKE_SOURCE_DIR}/doc/docbook/resources/brlcad/tutorial-template.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeI.xsl @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeI.xsl") set(XSL_FO_STYLESHEET "${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeI.xsl") @@ -103,10 +108,12 @@ set(CURRENT_VOLUME "II") set(CURRENT_TITLE "Introduction to MGED") configure_file(${CMAKE_SOURCE_DIR}/doc/docbook/resources/brlcad/tutorial-cover-template.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeII-cover.xsl @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeII-cover.xsl") string(REPLACE " " "%20" TUTORIAL_COVER_XSL ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeII-cover.xsl) configure_file(${CMAKE_SOURCE_DIR}/doc/docbook/resources/brlcad/tutorial-template.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeII.xsl @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeII.xsl") set(XSL_FO_STYLESHEET "${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeII.xsl") @@ -118,10 +125,12 @@ set(CURRENT_VOLUME "III") set(CURRENT_TITLE "Principles of Effective Modeling") configure_file(${CMAKE_SOURCE_DIR}/doc/docbook/resources/brlcad/tutorial-cover-template.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIII-cover.xsl @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIII-cover.xsl") string(REPLACE " " "%20" TUTORIAL_COVER_XSL ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIII-cover.xsl) configure_file(${CMAKE_SOURCE_DIR}/doc/docbook/resources/brlcad/tutorial-template.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIII.xsl @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIII.xsl") set(XSL_FO_STYLESHEET "${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIII.xsl") @@ -133,10 +142,12 @@ set(CURRENT_VOLUME "IV") set(CURRENT_TITLE "Converting Geometry Between BRL-CAD and Other Formats") configure_file(${CMAKE_SOURCE_DIR}/doc/docbook/resources/brlcad/tutorial-cover-template.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIV-cover.xsl @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIV-cover.xsl") string(REPLACE " " "%20" TUTORIAL_COVER_XSL ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIV-cover.xsl) configure_file(${CMAKE_SOURCE_DIR}/doc/docbook/resources/brlcad/tutorial-template.xsl.in ${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIV.xsl @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIV.xsl") set(XSL_FO_STYLESHEET "${CMAKE_CURRENT_BINARY_DIR}/BRL-CAD_Tutorial_Series-VolumeIV.xsl") diff --git a/doc/docbook/devguides/CMakeLists.txt b/doc/docbook/devguides/CMakeLists.txt new file mode 100644 index 00000000000..7162279bb6f --- /dev/null +++ b/doc/docbook/devguides/CMakeLists.txt @@ -0,0 +1,70 @@ +# Style sheet for XSLT transformation to HTML pages +if(BRLCAD_EXTRADOCS_HTML) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-man-xhtml-stylesheet.xsl.in + ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-xhtml-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-xhtml-stylesheet.xsl") +endif(BRLCAD_EXTRADOCS_HTML) + +if(BRLCAD_EXTRADOCS_PHP) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-man-xhtml-stylesheet.xsl.in + ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-xhtml-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-xhtml-stylesheet.xsl") +endif(BRLCAD_EXTRADOCS_PHP) + +# Style sheet for XSLT transformation to manual pages +if(BRLCAD_EXTRADOCS_MAN) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-man-stylesheet.xsl.in + ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-stylesheet.xsl") +endif(BRLCAD_EXTRADOCS_MAN) + +# Files for PDF +if(BRLCAD_EXTRADOCS_PDF) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/../resources/brlcad/brlcad-man-fo-stylesheet.xsl.in + ${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-fo-stylesheet.xsl) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-fo-stylesheet.xsl") +endif(BRLCAD_EXTRADOCS_PDF) + +# For HTML, MAN and FO (FO is an intermediate file used in the +# XML->PDF transformation) we use variables to hold the full +# stylesheet path. In the case we need to further +# customize FO stylesheets we can have separate CMake logic in +# appropriate directories to handle the customization (e.g., the +# BRL-CAD manuals in books/en/CMakeLists.txt). +set(XSL_PHP_STYLESHEET "${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/wordpress.xsl") +set(XSL_HTML_STYLESHEET "${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-xhtml-stylesheet.xsl") +set(XSL_MAN_STYLESHEET "${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-stylesheet.xsl") +set(XSL_FO_STYLESHEET "${CMAKE_CURRENT_BINARY_DIR}/../resources/brlcad/brlcad-man-fo-stylesheet.xsl") + +set(devguides_EN + bool_eval_development.xml + ) + +set(devguides_EN_IMAGES + images/ccx_overlap_event.png + images/ssx_transverse_event.png + images/ssx_tangent_event.png + images/compare_endpoint_style.png + images/lcurves_with_shaded_context.png + images/ssx_10_vs_13.png + images/curve_traversal_directions.png + images/axis_X.png + images/intermediate_linked_curves.png + images/ssx_overlap_event.png + images/evaluation_overview.png + ) + +ADD_DOC(devguides_EN html/devguides) +ADD_DOC(devguides_EN_IMAGES html/devguides/images) +ADD_DOCBOOK("HTML;PHP;PDF" devguides_EN devguides/en devguides_EN_IMAGES_cp) + +CMAKEFILES( + CMakeLists.txt + ) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/doc/docbook/devguides/bool_eval_development.xml b/doc/docbook/devguides/bool_eval_development.xml new file mode 100644 index 00000000000..e0a4cd3c4b0 --- /dev/null +++ b/doc/docbook/devguides/bool_eval_development.xml @@ -0,0 +1,2469 @@ +
+ + + NURBS Boolean Evaluation Development Guide + + + Nicholas + Reed + + + + +
+ Introduction + + This document provides a technical overview of BRL-CAD's + Non-Uniform Rational Basis Spline (NURBS) Boolean evaluation + implementation. It includes details on user command line + functionality, an overview of the algorithms and source code + implementation, details on developer debugging facilities, and + an overview of the debugging process (with a real example). + This is intended to be a practical resource for software + developers wanting improve BRL-CAD's NURBS Boolean evaluation + implementation. + + + It is assumed that the reader has rudimentary familiarity with + C/C++ software development and the BRL-CAD software package. + This includes how to acquire, modify, and rebuild the BRL-CAD + source code, and how to run and debug C/C++ applications. It is + also assumed that the reader has a some understanding of + concepts from 3D geometry such as surface normal vectors, + parametric functions, boundary representation (B-Rep) geometry, + and trimmed NURBS. + + + Section 2 of this document briefly describes NURBS Boolean + evaluation in BRL-CAD from a user perspective. + + + Section 3 outlines the major algorithms being used and the files + and functions in the BRL-CAD source code that implement them. It + also explains important concepts helpful in understanding and + modifying the source code. + + + Section 4 covers the current process for debugging evaluation + issues. It describes available debugging tools, and provides + step-by-step instructions for tracking down bugs based on debug + information, including a complete example of debugging a real + evaluation issue. + + + It should be noted that some of the information in this document + may become outdated due to future changes to the BRL-CAD + software suite. Any developer making significant changes to the + implementation should update the copy of this document that is + included with the BRL-CAD source code. + +
+
+ NURBS Boolean Evaluation Using the <command>brep</command> Command + + The brep command is available in BRL-CAD's + MGED and Archer applications. If the command is run with a + single argument naming a combination, the components of the + combination are converted into NURBS objects which are combined + into a single evaluated NURBS object according to the Boolean + operations in the combination. + + + By default, the evaluated B-Rep-type object is written to the + database with its original name plus the suffix + .brep (e.g. running the + brep command on obj + produces obj.brep). If a specific name is + desired for the output object, it can be provided as the second + argument to the brep command. + + + There are a number of known limitations to the NURBS Boolean + evaluator as currently implemented: + + + + + May produce incorrect output due to unhandled intersection + cases. + + + + + Unoptimized performance resulting in potentially significant + runtimes. + + + + + Material properties of source objects are discarded. + + + + + Some primitive conversions to NURBS are undefined (e.g., an + infinite halfspace). + + + + + Hollow objects are not built topologically continuous. + + + +
+ +
+ Overview of the Implementation +
+ Evaluation of a Subtraction + + + + + + + + + + + + + + One cube (red) is subtracted from another (blue). Leftmost + image: the two cubes are first converted to B-Rep objects + and intersected. Middle images: the individual faces + involved in the intersection are split by the intersection + curves and categorized as belonging (red, blue) or not + belonging (purple) in the final evaluated object. Rightmost + image: the final object is stitched together from the + retained trimmed faces. + + +
+
+ Technical Approach +
+ + The technical approach used for evaluating Boolean + operations on NURBS entities involves calculating geometric + intersections, trimming surfaces accordingly, and stitching + together a resulting object. Boundary representation NURBS + objects are composed of faces, edges, and vertices; and + these topologically describe how surfaces, curves, and + points are joined together to represent geometry. The + geometry is used to find intersections. The topology is + used in the application of Boolean logic. This is + oversimplified as there are also trimming curves, loops, + orientations, and other details involved, but this is + nonetheless a useful foundation for understanding the basic + approach employed. + + + BRL-CAD heavily integrates and extends the OpenNURBS Toolkit + by Robert McNeel & Associates, developers of the + proprietary Rhinoceros freeform NURBS modeling software. + BRL-CAD heavily uses OpenNURBS for trimmed NURBS geometry + representation (both in-memory and on-disk) and implements + functionality not included with OpenNURBS such as ray + tracing and Boolean evaluation. While their + license is permissive, the OpenNURBS Toolkit is only + intended for and McNeel only supports it being using for + reading and writing 3DM files. Additional + functionality implemented for BRL-CAD is primarily contained + within the boundary representation and ray trace libraries + (LIBBREP and LIBRT). Unless specified + otherwise, file references are for LIBBREP source files. As + published, LIBBREP implementation files reside in + the src/libbrep/ directory with public + header files residing in the include/ + directory of a BRL-CAD source hierarchy. + + + + The overall NURBS Boolean evaluation algorithm is based on + the paper BOOLE: A System to Compute Boolean + Combinations of Sculptured Solids. (S. Krishnan + et al., 1995). The main implementation file for the Boolean + evaluation algorithm is + boolean.cpp. + + + The NURBS surface-surface intersection algorithm is based on + the "NURBS Intersection Curve Evaluation" section of the + paper Performing Efficient NURBS Modeling + Operations on the GPU (A. Krishnamurthy et al., + 2008). A detailed outline of the algorithm, as implemented, + appears in the main implementation file for the NURBS + Surface-Surface intersection algorithm, + intersect.cpp. + +
+
+ +
+ The Boolean Evaluation Algorithm +
+ + Evaluating a Boolean + + + This is a high-level overview of the Boolean + evaluation performed on two B-Rep objects. + + + + + Make sure you have two entities that are geometric, + solid, and valid; that they are topologically connected, + describe manifold surfaces, and enclose some + non-infinite volume. + + + Make sure you have a valid Boolean operation (i.e., + UNION, SUBTRACT, INTERSECT). + + + Make sure their bounding boxes overlap, otherwise + evaluation is trivial. + + + + Evaluate Intersections + + Determine face intersections between the two input objects + For each face: + + + Calculate surface intersection with all other surfaces to get intersection curves + For all surfaces whose bounding poxes intersect, calculate surface-surface intersections (SSI) + + + Identify any coincident overlap surfaces + + + Identify coincident overlap boundary curves + + + If stitched boundary curves form a closed loop, record an overlap intersection event + + + Identify any other intersection curves and points + + + + + Split original surfaces into pieces + For each intersection curve and overlap intersection event: + + + Divide original surface into separate surfaces according to the Boolean operation + + + For each new surface, create new trimmed NURBS face + + + + + + + Join trimmed NURBS faces based on intersections and the Boolean operation + + + Combine resulting faces into a new evaluated B-Rep object + + + +
+
+ +
+ Descriptions of Major Functions +
+ <filename>boolean.cpp</filename> + + The ON_Boolean() function performs a + single Boolean evaluation on two B-Rep objects. A single + execution of the brep command in MGED + or Archer may involve passing several successive pairs of + B-Rep objects to this function. + + + + + + In the nontrivial case where the bounding boxes of + brep1 and + brep2 intersect, + get_evaluated_faces() is called to get + the trimmed NURBS faces of the evaluated Boolean result. The + faces are then combined into a single B-Rep object returned + via the evaluated_brep argument. + + + > +get_evaluated_faces( + const ON_Brep *brep1, + const ON_Brep *brep2, + op_type operation); + ]]> + + + The intersection curves between the faces of + brep1 and + brep2 are found by + get_face_intersection_curves(). These + curves are used to split the original surfaces into pieces, + each becoming a new trimmed NURBS face. The + categorize_trimmed_faces() function is + used to identify which pieces, based on the Boolean + operation, are part of the evaluated result. Each + TrimmedFace whose + m_belong_to_final member is marked + TrimmedFace::BELONG is used by + ON_Boolean() to create the final + evaluated result. + + + > +get_face_intersection_curves( + ON_SimpleArray &surf_tree1, + ON_SimpleArray &surf_tree2, + const ON_Brep *brep1, + const ON_Brep *brep2, + op_type operation); + ]]> + + + Each pair of brep1 and + brep2 surfaces whose bounding boxes + intersect are passed to the + ON_Intersect() surface-surface + intersection routine. The + get_subcurves_inside_faces() routine is + used to remove irrelevant parts of the surface-surface + intersection curves based on the trimming curves of the + associated faces. + +
+
+ <filename>intersect.cpp</filename> + + &x, + double isect_tol, + double overlap_tol, + double fitting_tol, + const ON_Interval *surfaceA_udomain, + const ON_Interval *surfaceA_vdomain, + const ON_Interval *surfaceB_udomain, + const ON_Interval *surfaceB_vdomain, + Subsurface *treeA, + Subsurface *treeB); + ]]> + + + The first stage of the surface-surface intersection + algorithm attempts to identify overlap intersections + (areas where the two surfaces are coincident). Our + assumption is that the boundary curve of any overlap + region must be formed from isocurves of the overlapping + surfaces. + + + Subcurves of isocurves that intersect both surfaces, such + that the surfaces are coincident on one side of the curve + but not the other, potentially form part of overlap + boundaries. These curves are identified using + find_overlap_boundary_curves(). To + avoid wasted computations, this function also returns + intersection points and non-boundary intersection curves + which were found during the search for boundary curves. + + + Then, the + split_overlaps_at_intersections() + function is run, and curve pieces that share endpoints are + stitched together. The stitched boundary curves which + close to form loops are recorded as overlap intersection + events. + + + The second stage of the surface-surface intersection + algorithm attempts to identify other intersection curves and + points. The input surfaces surfA and + surfB are subdivided into four + subsurfaces, whose bounding boxes are tested in pairs to see + which subsurfaces potentially intersect. This subdivision + repeats to a fixed depth determined by the constant + MAX_SSI_DEPTH (defined in + brep_defines.h). + + + Subsurfaces that lie completely inside an overlap region + identified in the first stage are discarded. Each remaining + pair of subsurfaces with intersecting bounding boxes is + tested for intersection. This is accomplished by + approximating each subsurface with two triangles (i.e. a + 'split' quad whose corners coincide with those of the actual + subsurface patch, which has been split diagonally for a more + accurate fit). The triangles are then intersected, and the + average of all intersection points is used as the initial + guess for a Newton iterative solver, implemented by + newton_ssi(), which searches for a point + close to the initial guess point which lies on both + surfaces. + + + Solved points that reside inside an overlap region + identified in the first stage are discarded. Of the + remaining solved intersection points between + surfA and + surfB, those which are near one + another are stitched together into polyline curves. If a + line or conic curve can be fit to the polyline curves in 2D, + the fit curve replaces the original + surfA and/or + surfB polyline curve. + +
+
+
+ The OpenNURBS API + + BRL-CAD leverages the OpenNURBS library primarily for its + classes that represent general (i.e. NURBS) B-Rep surface, + curve, and point geometry. The following sections describe the + OpenNURBS library symbols most commonly used in the NURBS + Boolean evaluation implementation, with relevant usage notes. + + + + When using an OpenNURBS utility that hasn't been used + elsewhere in the implementation, always check the + documentation and the implementation to + make sure it does what you expect. + + + Misleading methods have been misused in the past. For + example, bool ON_Line::InPlane(ON_Plane& + plane) appears to test if a line lies in the + given plane, but actually constructs a plane that contains + the line. + + + Another example is double + ON_Line::MinimumDistanceTo(const + ON_Line&). While the function does indeed + return the distance of the shortest path between one line + and another, reading the implementation reveals an + undocumented assumption that the + ON_Line provided as an argument is + not on the same infinite line as the instance the method is + invoked on. That is, the ON_Lines can + be parallel, but not coincident. + + +
+ Arrays + + OpenNURBS includes two general array classes, + ON_ClassArray and + ON_SimpleArray, which are similar to + C++'s std::vector. Besides having + slightly friendlier interfaces, they also feature some + higher-level member functions like + Reverse() and + Quicksort(). + + + The primary difference between the two classes is that + ON_SimpleArray doesn't bother + constructing and destructing its items. This makes it more + efficient than ON_ClassArray, but + unsuitable for class objects (though pointers to objects are + fine). ON_ClassArray requires items + to have correctly implemented copy and assignment functions. + + + The NURBS Boolean evaluation implementation generally + employs a combined array of known size to index elements + from two input objects. For example, if + brepA has + i + faces and brepB has + j + faces, a single array of i + + j elements is created. + + + + The OpenNURBS array classes do not check for out-of-bounds + indexing. This isn't a problem in the simple case where + items are added with Append() and + elements [0, Count() + - 1] are iterated over. + + + However, if the array will be a fixed size whose items are + assigned in a non-sequential order, both + the capacity + and count should be set, or else the + reported Count() will be incorrect, and + copying arrays by assignment won't work. + + + > curves_array(face_count1 + face_count2); + curves_array.SetCount(curves_array.Capacity()); + ]]> + + +
+
+ Memory + + Curves and surfaces are nearly always allocated on the heap + and referenced by pointers, both in the OpenNURBS library, + and in the NURBS Boolean evaluation implementation. + + + Mostly these allocations are simply done with + the new keyword as with any other + class. However, a few classes, + notably ON_Brep have + a New() function that wraps the + allocation, which is preferred over using new + directly for technical reasons specified in the + OpenNURBS opennurbs_brep.h header. + + + Pointers to objects, curves in particular, are generally + "stolen" to avoid having to create a new copy of the object. + + + Classes containing heap-allocated objects delete them in + their destructors. Proper stealing of pointers requires + the instance's members be set to NULL. + + + x; +... +for (int i = 0; i < csx_events.Count(); ++i) { + // copy event + x.Append(csx_events[i]); + + // clear pointers from original so they aren't deleted by the + // ON_SSX_EVENT destructor + csx_events[i].m_curveA = NULL; + csx_events[i].m_curveB = NULL; + csx_events[i].m_curve3d = NULL; +} + ]]> + + + +
+
+ Tolerance Tests + + The OpenNURBS routines make extensive use of the + symbol ON_ZERO_TOLERANCE in calculations + to test if a result is to be considered equal to zero, or if + two values are to be considered equal. + + + + The NURBS Boolean evaluation implementation generally uses + the function ON_NearZero(double x, double + tolerance = ON_ZERO_TOLERANCE) to check if + values are near zero, or to check if two values are + identical (e.g ON_NearZero(t - + last_t)). + + + This function is also used to determine if objects are + close enough to be considered + intersecting: ON_NearZero(pt.DistanceTo(other.pt), + INTERSECTION_TOL). + + +
+
+ 2D and 3D Points + + The ON_2dPoint and + ON_3dPoint classes intuitively + implement operators such as + and + * to allow points to be easily summed and + scaled. + + + The operator[] functions are notable + because coordinates are not actually stored as arrays in + these classes, but rather in the named + members x, y, + and z. So while accessing coordinates + as pt[0], pt[1] is + possible, the more + readable pt.x, pt.y, + is more typically utilized. + + + + The most frequently used member function + is DistanceTo(const ON_3dPoint &p), + used to check inter-point distances, either as part of an + intersection test or to identify closeable gaps or duplicate + points. + + + + ON_2dPoint objects can be, and are, + safely passed to functions that + take ON_3dPoint + arguments. The ON_3dPoint arguments + are constructed from the + provided ON_2dPoint objects, with + their z coordinates set to 0. + + + The NURBS Boolean evaluation implementation generally + constructs 2D curves by populating + an ON_3dPointArray with 2D points, + rather than using + an ON_2dPointArray, as the 3D + version of the class (besides having additional useful + member functions), can be used to initialize + an ON_PolylineCurve. + + +
+
+ Bounding Boxes + + ON_BoundingBox is returned by + the BoundingBox(), GetTightBoundingBox(), + and GetBBox() functions, which are + implemented by all geometry classes inheriting + from ON_Geometry. + + + The most commonly used members + of ON_BoundingBox + are Diagonal() (usually in an expression + such as bbox.Diagonal().Length() used as + a scalar size estimate), and IsPointIn() + and MinimumDistanceTo() (used in + intersection tests). + +
+
+ Domain Intervals + + ON_Interval is used to represent the + domains of parametric curves and surfaces. The + domain starts + at m_t[0] and ends + at m_t[1]. These members can be set + directly or via Set(double t0, double + t1). + + + + The start, end, and overall length of the domain + are arbitrary, + and m_t[0] need not be less + than m_t[1]. If the numerically smaller + or larger domain endpoint is needed, these should be + accessed via the Min() + and Max() member functions. + + + + The ParameterAt(double x) function + translates a normalized parameter (from + a domain starting at 0.0 and ending at 1.0) into + a real parameter. Thus, the start of + the domain is at domain.ParameterAt(0.0), + the midpoint is + at domain.ParameterAt(.5), etc. + +
+
+ Parametric Curves + + The most frequently used geometry class + is ON_Curve, a generic container for + parametric curves. The curve is interrogated by using + the PointAt(double t) method to + evaluate points at arbitrary values inside the curve's + domain, which is specified by + the ON_Interval returned by + the Domain() method. The start and end + points of the curve have dedicated access + methods, PointAtStart() + and PointAtEnd(). + + + + PointAt() takes a real parameter; + parameters normalized to [0, + 1] must be converted. For + example, the midpoint of the curve can be found as + curve->PointAt(curve->Domain().ParameterAt(.5)). PointAt() + does not check if the + t value you give it is inside the + curve's domain, so you have to get this right! + + + + All the PointAt() methods return + an ON_3dPoint, though in the common + case where ON_Curve objects are + representing 2D trim curves, the z coordinate will be 0.0. + + + It is sometimes necessary to reverse a curve's domain. This + is done using the Reverse() method to + facilitate stitching curves together. The function has a + Boolean int return value that must be + checked. + + + +PointAtStart().DistanceTo(curveB->PointAtStart()) < dist_tol) { + if (curveA->Reverse()) { + curveA = link_curves(curveA, curveB); + } + /* curves that cannot be reversed are degenerate and discarded */ +} +]]> + + + + + Comparing curve endpoints, or even just bounding boxes + (retrieved via the BoundingBox() + method), is often sufficient in the context of different + intersection and stitching procedures. However, it's + important to keep in mind that in the general case, the + shape of the curve between its endpoints or within its + bounding box could be anything. For example, two curves + with identical start and end points could both be linear, + creating a degenerate loop. A curve whose endpoints are + equal within the OpenNURBS + ON_ZERO_TOLERANCE (testable using the + IsClosed() method), may be + self-intersecting, or degenerate to a point. + + + + A copy of a curve is easily made using the + Duplicate() member function, which + simply wraps a standard copy procedure: + + +ON_Curve* Duplicate() +{ + ON_Curve *p = new ON_Curve; + if (p) *p = *this; + return p; +} + + + This function is common to all OpenNURBS geometry classes, + but curves are by far the most frequently duplicated + objects. However, if curves are simply being retained from a + working set of container objects, the curve pointers are + generally "stolen" rather than copied, with curve members + set to NULL so that the curves aren't + destructed with the containers. + +
+
+ Lines + + ON_Line is used to represent an + infinite line, defined by two + points, from and to. + + + + ON_Line is not a subclass + of ON_Curve and should not be + confused with ON_LineCurve (which has + an ON_Line member), though it does + have some of the same methods as + an ON_Curve class, + including PointAt(double t). However, + because the line has an infinite domain, it can be evaluated + at any t value, though evaluating at 0.0 + returns from and evaluating at 1.0 + returns to, as if the line was a + parametric curve with a domain between 0.0 and 1.0. + + + + ON_Line has helpful line-specific + methods such as ClosestPointTo(const ON_3dPoint + &point). Again, because the line is treated + as infinite, this function doesn't necessarily return a + point in the segment between from + and to. + + + + +
+
+ Surfaces + + An ON_Surface has a similar interface + to an ON_Curve, but adapted to + support the surface's two domains, u + and v (sometimes + called s + and t). These also correspond to as + the 0 and 1 surface domains (as in the first example in + following) or with an x + and y parameterization (as shown in + the second example). + + + Projecting an arbitrary <inlineequation><mathphrase>(u, v)</mathphrase></inlineequation> point into 3D. + +Domain(0); +ON_Interval vdom = surface->Domain(1); +ON_3dPoint surf_midpt_3d = surface->PointAt(udom.ParameterAt(.5), vdom.ParameterAt(.5)); +]]> + + + + Projecting a trim-curve point into 3D. + +Domain(); +ON_3dPoint trim_midpt_uv = trim_curve->PointAt(tdom.ParameterAt(.5)); +ON_3dPoint trim_midpt_3d = surface->PointAt(trim_midpt_uv.x, trim_midpt_uv.y); +]]> + + +
+
+ Boundary Representation Objects + + ON_Brep is the top-level OpenNURBS + class used to represent the two input objects and the + evaluated result of the ON_Boolean() + function. The geometry is encoded as a collection of faces, + which for our purposes should be topologically connected to + enclose solid volumes. + + + An object's faces are ON_BrepFace + objects stored in the ON_Brep face + array, m_F[]. + + + Each ON_BrepFace is defined as the + subset of an ON_Surface lying inside + the face's outerloop + (a.k.a. the face boundary) and + outside all of its innerloops + (a.k.a. trim loops or + just trims). + + + The loops of an ON_BrepFace are + listed in its loop array m_li[] as indexes + into the associated ON_Brep + object's ON_BrepLoop + array, m_L[]. The first (and possibly only) + loop listed in the face's loop index array is the outerloop, + and all following loops are inner trim loops. The type of + the loop is also recorded in the + loop's m_type member. + + +brep->m_L[brep->m_F[0]->m_li[0]].m_type; // ON_BrepLoop::outer +brep->m_L[brep->m_F[0]->m_li[1]].m_type; // ON_BrepLoop::inner +... +brep->m_L[*brep->m_F[0]->m_li.Last()].m_type; // ON_BrepLoop::inner + +
+
+ Intersection Events + + There are two OpenNURBS classes for representing + intersections. ON_X_EVENT is used for + curve-curve and curve-surface + intersections. ON_SSX_EVENT is used + for surface-surface intersections. + + + + An additional class, ON_PX_EVENT + has been implemented as an extension to the OpenNURBS API + to represent point-point, point-curve, and point-surface + intersection events. + + + + The intersection classes enumerate a number of intersection + types. Over the course of an evaluation, the + m_type of intersection events is + repeatedly checked to determine how each event should be + processed. + + + When two curves are coincident with one another over a + portion of their domains, m_type will be + ON_X_EVENT::ccx_overlap. +
+ Curve-Curve Overlap Intersection + + + + + + + + + + + Two curves (blue on the left and red on the right) + overlap over a portion of their domains (white). + + +
+
+ + When two surfaces are coincident over a portion of their + domains, m_type will be + ON_SSX_EVENT::ssx_overlap. + +
+ Surface-Surface Overlap Intersection + + + + + + + + + + + Two surfaces (blue on the left and red on the right) + overlap over a region of their domains (green). + + +
+ + There are two ways that two surfaces can intersect in a + curve. If the normals of the surfaces are parallel over all + points of the curve, the intersection + m_type is + ON_SSX_EVENT::ssx_tangent, and + ON_SSX_EVENT::ssx_transverse otherwise. + +
+ Surface-Surface Tangent Intersection + + + + + + + + + + + Two surfaces (red and blue) intersect in a curve + (white). The normals of both surfaces are parallel to + each other everywhere along the curve. + + +
+
+ Surface-Surface Transverse Intersection + + + + + + + + + + + Two surfaces (red and blue) intersect in a curve + (yellow). The normals of both surfaces are not parallel + to each other along the curve. + + +
+ + Similarly, if two surfaces intersect at a point, the + intersection m_type is + ON_SSX_EVENT::ssx_tangent_point if the + normals of the two surfaces are parallel at that point, and + ON_SSX_EVENT::ssx_transverse_point + otherwise. + + + The m_type of an intersection event + determines how values in the m_a[], + m_b[], m_A[], + and m_B[] array members of the event + instance are to be interpreted (documented in the + OpenNURBS opennurbs_x.h header). + + + + It's very easy to confuse the m_a[], + m_b[], m_A[], and + m_B[] arrays, as well as + m_a[0] vs. m_a[1], + etc. This is especially true when copying and pasting + code. + + + + For an ON_X_EVENT representing a + curve-curve intersection whose m_type is + ON_X_EVENT::ccx_overlap, + (m_a[0], m_a[1]) + represents the portion of the first curve's domain that + overlaps with the second curve, whereas in other cases + m_a[1] is simply a duplicate of + m_a[0]. + + + As a result, a pattern seen repeatedly in the NURBS Boolean + evaluation implementation is a loop over intersection events + that gathers intersection points for processing, including + overlap endpoints if the event represents an overlap. + + + + +
+
+
+ Code Conventions and Pitfalls +
+ 2D vs 3D + + Implicit in working with parametric geometry is that some + operations are done in 2D while others are done in 3D and + it's very important to know the dimension currently being + worked in at all times. + + + As mentioned in the section above on 2D and 3D points, 3D + classes are often used in the implementation to store 2D + points, and thus are not a reliable indication that an + operation is happening in 3D. + + + Being that operations in 2D tend to be a lot simpler, 2D is + normally the dimension being worked in. However, because + parametric curves and surfaces of different objects have + different parameterizations, determining where two objects + intersect can't be done by comparing 2D parameters; it must + happen in 3D. + +
+ Naming Convention + + Generally, when 2D and 3D operations are taking place near + one another, you'll see a naming convention being used to + disambiguate 2D and 3D data. 3D identifiers are unadorned, + while 2D names will be suffixed with 1/2 or A/B. + + + Suppose for example we have three arrays of corresponding + points that are samples along an intersection curve + between two surfaces. The 3D array might simply be + named points. The corresponding 2D + points in the domains of the two surfaces involved are + then very likely to be named points1 + and points2 + or pointsA + and pointsB. Whether the 1/2 or A/B + suffixes are used typically depends on whether the input + surfaces have names + like surf1/surf2 + or surfA/surfB. The + latter is more likely to be used when processing + intersection events, as members of the OpenNURBS + intersection event classes are + named m_a + and m_b, etc. + +
+
+ Intersection Tolerances + + The ON_Intersect() intersection + routines (intersect.cpp) generally + take an isect_tol argument, which is a + 3D tolerance normally equal to the constant + ON_INTERSECTION_TOL. 2D tolerances, + following the convention described above, are generally + named isect_tolA and + isect_tolB. + + + 2D tolerance values for curves and surfaces are derived + from the 3D tolerance value using + the tolerance_2d_from_3d() + routines. The length of the diagonal of the 3D bounding + box of the curve or surface is divided by the length of + the 2D domain to get a rough estimate of what distance in + the 2D domain corresponds to the 3D tolerance distance. In + other words, the hope is that two points on + a curveA or surfA + that are isect_tolA units apart in 2D, + will evaluate to two 3D points that + are isect_tol units apart in 3D. + + + + The difference between isect_tol + and isect_tolA + and isect_tolB can be arbitrarily + large, so it's import that the correct tolerance is used + in all cases. However, it's sometimes tempting to use + the wrong tolerance, for instance using the + 2D isect_tolA in a 3D intersection + test simply because the 3D points were evaluated from 2D + points in the surfA domain. + + +
+
+ Curve Traversal Directions + + It's important to remember that because parameterizations + are arbitrary, there is no correspondence whatsoever + between a 2D curve in one surface's domain and another + surface's domain, even when those 2D curves evaluate to + the same 3D curve. In particular, you cannot assume that + traversing different curves along their domain from + m_t[0] to m_t[1] + translates to a consistent traversal direction in 3D, or + even that each 2D curve's + m_t[0]/m_t[1] + corresponds to the same 3D starting point on a closed + curve. + +
+ Different Traversals of the Same Curve + + + + + + + + + + + The projections (red and blue) of two 2D curves in + different domains represent the same 3D curve (within + tolerance). However, the start and end points as well + as the 3D traversal directions differ between the + projections. + + +
+
+
+
+ Accumulated Error + + By the nature of the math involved in representing + parametric geometry (e.g. converting between 2D and 3D, and + solving intersections between objects with different + parameterizations) values that are expected to be identical + are generally only equal within a certain tolerance, or + error. + + + Over the course of the evaluation, the same data is + interrogated and processed a number of times. If ignored, + the error introduced in one stage of the evaluation can grow + over subsequent stages, causing an incorrect determination + that leaves a curve unclosed, a surface unsplit, and + ultimately an incorrect evaluated result. + + + As a consequence, it's generally a good idea to remove + fuzziness when you find it, and avoid algorithms that + introduce more error. + +
+ Clamping + + Start and end points of closed curves are rarely + identical. So if a curve is found to be closed within + tolerance, it's a good idea to actually set the end point + equal to the start point. Similarly, if an interval of a + domain is calculated whose endpoints are within tolerance + of the domain endpoints, the entire domain should be used. + + + + Producing subcurves of existing curves is a common + operation in the NURBS Boolean evaluation + implementation. This is a prime example of an operation + that can introduce fuzziness into the evaluation. For + example, we may be splitting a curve to remove a portion + of it, and end up with two new curves with endpoints + that used to align when part of the original curve, but + no longer do. + + + The Split() method + of ON_Curve can be used to + produce subcurves, but in the implementation it's much + preferred to use the sub_curve() + function defined in intersect.cpp + which wraps Split() and correctly + handles clamping of curve parameters to domain + endpoints. + + +
+
+ Iterated Solutions + + The iterative method used to solve points on parametric + curves and surfaces is expected to produce better answers + given better inputs and more iterations. However, our + algorithms can't always produce sufficient inputs, and the + value the solver converges on isn't always the correct + one. + + + This fuzziness produced in the solver's results can be + mitigated in the context of finding intersection curves + for example, because we solve many points and fit a curve + between them. So, one unsolved point on the curve isn't + going to cause an evaluation failure. + + + + It's tempting to test curve characteristics or make + inside/outside determinations, etc. by using + the ON_Intersect() + functions. However, there's a persistent risk that the + error in the iteratively solved results will cause + incorrect determinations that cascade into larger + problems over the course of the evaluation. For this + reason, the ON_Intersect() functions + should be avoided whenever possible. + + +
+
+
+
+
+ Debugging NURBS Boolean Evaluations + + The current ongoing development activity for NURBS Boolean + evaluation is debugging specific evaluation cases in order to + find bugs and unhandled geometry cases in the implementation to + support the evaluation of more geometry. + +
+ Debug Plotting + + There are two Archer commands that can be used to plot + individual components of brep NURBS objects to facilitate + debugging. + + + These commands work by creating temporary wireframe objects + that are drawn in the view window. While drawn, these objects + appear in the in-memory database, so the + ls command will show these objects (with + names like _BC_S_<obj>_646464> + or bool1_brep1_surface03838ff), but they are + not saved with the database, and are deleted when erased from + the display. + + + + Debug wireframe objects are not drawn the same way as + geometry, and do not trigger an automatic resize and refresh + of the view. This means that after running + a plot command, you may have to trigger a + refresh manually (e.g. by running + the autoview command or interactively + rotating/resizing the view. + + + Also be aware that debug wireframes are drawn in a variety + of hard-coded colors to help distinguish different + subcomponents. These colors were designed to be best visible + using a view whose background color is black (this should be + the default, but can be easily changed in Archer via the + view window's right-click menu). + + + + +
+ The <command>brep</command> Command + + The Archer brep command (also + implemented in MGED) can be used to get structural + information about B-Rep objects and visualize different + subcomponents. + + + Most importantly, brep <obj> info + will report summary information, including the number of + NURBS surfaces and faces and brep <obj> plot + S <index> can be used to plot individual + surfaces in 3D. + + + This is the primary way you can conceptually link a surface + or face index to the 3D geometry it represents. So if you + notice an error in an object while viewing it in the editor, + you can use the brep command to + determine the index of the surface with the error, and then + inspect the in-memory object in a debugger using that index + into the final surface array, tracing that surface object to + where it was created, etc. + + + + For evaluations involving more than two objects, the final + brep NURBS object is made by converting two leaf objects + into breps, performing a Boolean evaluation on them, + converting the next relevant object to brep and combining + it with the first intermediate evaluation to make a second + intermediate evaluation, and so on up the tree. + + + In order to inspect the surfaces and indices for a + particular stage of the overall evaluation using the + brep command, it's necessary to + manually create the intermediate combination (a subtree of + the one being evaluated), and use the + brep command to produce the + intermediate NURBS result. + + +
+
+ The dplot Command + + The dplot command is used to visualize + the results of different stages of the NURBS Boolean + evaluation algorithm. This makes it easier to isolate the + source of a problem in an evaluation. + + + Unlike the brep command, the + dplot command is purely a development + tool. Its implementation does not honor library boundaries + and does not conform to the typical conventions for editor + commands, and for this reason is only available as an Archer + command in the NURBS Boolean evaluation development branch + (https://sourceforge.net/p/brlcad/code/HEAD/tree/brlcad/branches/brep-debug/). + + + In the development branch, the NURBS Boolean evaluation + source code contains additional calls to + DebugPlot functions (implemented in + debug_plot.cpp) that create + wireframe visualizations of data produced during the + evaluations. + + + For development convenience, these wireframes are not saved + as database objects, but rather are written as files in the + current directory, with names of the form + bool1_*.plot3. An additional + bool1.dplot is written which describes + the .plot3 files that were written in a + format understood by the dplot command. + + + One set of files is written for each evaluation. Between + evaluations, a static counter increments the numeric suffix + that's used in the output filenames. So for a combination + consisting of three objects, the bool1* + files will hold results from the intermediate boolean + evaluation between the first two objects in the combination, + and the bool2* files will hold results + from the final evaluation between the intermediate evaluated + object and the remaining leaf of the original comb. + + + The DebugPlot functions always use + the same file names and do not check if written files + already exist. It is assumed that you will run an + evaluation, inspect the generated files using the + dplot command, and then manually remove + (or just move) the generated .dplot and + .plot3 files before performing another + evaluation with the brep command. + +
+ The ssx Subcommands + + + + dplot bool1.dplot + ssx lets you interactively step + through the pairs of surfaces whose axis-aligned + bounding boxes were found to intersect. The wireframes + of the B-Rep objects being intersected are drawn with + the current surface pair highlighted. The + ssx_index assigned to the pair, + which can be used as an argument to other dplot + commands, is displayed in the command window. + + + + + dplot bool1.dplot + <ssx_index> lets you + interactively step through the specific + surface-surface intersections found between the pair + of surfaces identified by an + ssx_index, excluding + isocurve-surface intersections (shown by + dplot bool1.dplot isocsx). + + + To make it easier to check that drawn intersection + curves are of the correct type and are open or closed + curves as appropriate, intersections are color-coded + by type (e.g. transverse intersections are drawn in + yellow) and the ends of lines are decorated with + arrows to indicate open ends or perpendicular segments + to indicate coincident endpoints. + +
+ Curve Endpoint Decoration + + + + + + + + + + + Endpoints of transverse surface-surface + intersection curves (yellow) are decorated with + arrows if open (left), and segments perpendicular + to the curve if closed (right). + + +
+
+
+ + The ssx pairs are recorded in the + find_overlap_boundary_curves() function + in intersect.cpp. + +
+
+ The isocsx Subcommands + + + + dplot bool1.dplot + isocsx <ssx_index> lets + you step through the isocurve-surface intersections + from the pair of intersecting surfaces identified by + the given ssx_index. Wireframe + plots of the two surfaces are drawn, with one surface + and an intersecting isocurve of the second surface + highlighted. Each combination of isocurve and surface + is assigned an isocsx_index (shown + in the command window) that can be used as an argument + in the second form of the isocsx + subcommand. + + + + + dplot bool1.dplot + isocsx <ssx_index> + <isocsx_index> shows the + actual intersection curve found between the isocurve + and surface pair identified by the given + ssx_index and + isocsx_index. + + + The plotted intersection curves are color-coded for + easy type-checking, e.g. overlap intersections are + drawn in green. + + + + + The isocsx curves are written in the + find_overlap_boundary_curves() function + in + intersect.cpp. + +
+
+ Face-Evaluation Subcommands + + + + dplot bool1.dplot + fcurves <ssx_index> lets + you step through the surface-surface intersection + curves identified by the given + ssx_index after they've been + clipped by face trimming curves. + + + The clipped 2D intersection curves for the first + surface are drawn projected to 3D, followed by the + matching curves for the second surface. + + + + + dplot bool1.dplot + lcurves steps through the final + 3D intersection curves used to split faces, after + contiguous face-clipped pieces have been linked + together. + + + After each curve is drawn independently, all curves + are drawn at the same time. + + + This subcommand doesn't draw any contextual geometry; + only the linked curves. Manually drawing a transparent + shaded view of the original geometry usually works + well for context. + +
+ Linked Curves in Context + + + + + + + + + + + An evaluated B-Rep is drawn shaded to give context + to the linked intersection curves (yellow) drawn + by + dplot bool1.dplot lcurves. + + +
+
+ + + dplot bool1.dplot + faces lets you step through the + new set of faces formed by splitting the original + faces with the final linked intersection curves. Faces + that are considered part of the final result are drawn + highlighted, while faces that are discarded are drawn + dim. + + + After each face is drawn independently, all faces are + drawn at the same time. + + + This subcommand doesn't draw any contextual geometry; + only the face curves. Manually drawing a transparent + shaded view of the original geometry usually works + well for context. + + +
+ + The clipped face curves are recorded in + get_face_intersection_curves() in + boolean.cpp. + + + The linked curves and the categorized split faces are + recorded in get_evaluated_faces() in + boolean.cpp. + +
+
+
+ Plotting Arbitrary Evaluation Curves + + It's possible to write out custom curves from any part of + the evaluation (i.e. those not covered by + dplot) and view them in MGED/Archer. + + + You can pass a 3D ON_Curve to the + DebugPlot::Plot3DCurve() function or a 2D + ON_Curve and an associated + ON_Surface to the + DebugPlot::Plot3DCurve() function. + + + Both of these functions take an arbitrary filename for a + plot3 file the function will write, as well as a color for + the curve. The DebugPlot::Plot3DCurve() + has an optional vlist parameter which you + should omit (see the full definitions in + debug_plot.cpp). + + + Writing a 2D Curve as a plot3 File + + 0 && face1_curves[0] != NULL) { + static int calls = 0; + unsigned char mycolor[] = {0, 0, 62}; + std::ostringstream plotname; + + // generate a unique filename + plotname << "mycurve" << ++calls << ".plot3"; + + // plot using method of global DebugPlot instance 'dplot' + dplot->Plot3DCurveFrom2D(surf1, face1_curves[0], + plotname.str().c_str(), mycolor); +} + ]]> + + + + After running an evaluation that produces a custom plot3 + file, you can draw it using the overlay + editor command. + + + Drawing a plot3 File + +Archer> overlay mycurve1.plot3 1 + + +
+
+
+ Debugging with the <command>dplot</command> Command +
+ Tracing Output to the Code That Created It + + After you notice a problem in the output shown by the + dplot command, you need to locate the + source code that created the erroneous geometry so you can + start debugging. The following sections provide example + procedures you can perform in Archer and a debugger to start + investigating some common issues. + + If the ssx subcommand shows that a surface-surface + intersection is missing... + + + + Use the info and + plot subcommands of the + brep command to find the indexes + (<i> and + <j>) of the two faces involved + in the missing intersection. + + + For a multi-part evaluation, you'll need to manually + create the appropriate intermediate evaluation, + corresponding to the + bool<n>.dplot showing the + error, to run the brep command on. + + + + + Set a breakpoint at the + ON_Intersect() call in + get_face_intersection_curves() with + the condition i == <i> && j == + <j>. + + + For a multi-part evaluation, you'll need to first skip + to the correct invocation of + ON_Boolean(), either manually, or by + conditioning a breakpoint on the value of the static + calls variable defined at the top of + that function. + + + + + Start stepping through the + ON_Intersect() call. + + + + If the isocsx subcommand shows that an + isocurve-surface intersection is missing... + + + + Note the index <n> of the + surface-surface intersection used as the argument to the + isocsx subcommand. + + + + + Use the info and + plot subcommands of the + brep command to find the indexes + (<i> and + <j>) of the two faces involved + in the missing intersection. + + + For a multi-part evaluation, you'll need to manually + create the appropriate intermediate evaluation, + corresponding to the + bool<n>.dplot showing the + error, to run the brep command on. + + + + + Set a breakpoint at the + ON_Intersect() call in + get_face_intersection_curves() with + the condition dplot->SurfacePairs() == <n + - 1> && i == <i> && j == + <j>. + + + For a multi-part evaluation, you'll need to first skip + to the correct invocation of + ON_Boolean(), either manually, or by + conditioning a breakpoint on the value of the static + calls variable defined at the top of + that function. + + + + + When the break is reached, add a breakpoint at + find_overlap_boundary_curves() and + advance to that function. + + + + + Step through the intersections, printing out the + isocurve endpoints and visualize them in the context of + the geometry in Archer (e.g. by centering the view at + those points, or creating spheres centered on them, + etc.) to find the isocurves of interest: + +(gdb) print surf1_isocurve->PointAtStart() +(gdb) print surf1_isocurve->PointAtEnd() + + + + + + Investigate how the isocurves are processed. + + + + If the isocsx subcommand shows that isocurve + intersections are incorrect... + + + + Note the index <n> of the + surface-surface intersection used as the argument to the + isocsx subcommand. + + + + + Set a break after the call to + find_overlap_boundary_curves() in + intersect.cpp with the condition + dplot->SurfacePairs() == + <n>. + + + For a multi-part evaluation, you'll need to first skip + to the correct invocation of + ON_Boolean(), either manually, or by + conditioning a breakpoint on the value of the static + calls variable defined at the top of + that function. + + + + + Inspect the overlaps array. + + + + If the ssx subcommand shows an incorrect + intersection curve... + + + + Note the index <n> of the + surface-surface intersection used as the argument to the + ssx subcommand, and the index + <k> assigned to the incorrect + intersection event. + + + + + Set a breakpoint at the + ON_Intersect() call in + get_face_intersection_curves() with + the condition dplot->SurfacePairs() == <n + - 1>. + + + For a multi-part evaluation, you'll need to first skip + to the correct invocation of + ON_Boolean(), either manually, or by + conditioning a breakpoint on the value of the static + calls variable defined at the top of + that function. + + + + + Step into ON_Intersect() and wait for + x.Count() == <k - 1>. + + + + + Investigate the creation of the next intersection event. + + + + + If the ssx subcommand shows the correct intersections for a + given surface pair, but the fcurves subcommand shows those + curves are not being correctly clipped by faces... + + + + + Note the index <n> of the + surface-surface intersection used as the argument to the + ssx and + fcurves subcommands, and the index + <k> assigned by + fcurves to the incorrect clipped + curves. + + + + + Set a breakpoint at the + get_subcurves_inside_faces() call + inside get_face_intersection_curves() + with the condition dplot->SurfacePairs() == + <n + 1> && k == <k>. + + + For a multi-part evaluation, you'll need to first skip + to the correct invocation of + ON_Boolean(), either manually, or by + conditioning a breakpoint on the value of the static + calls variable defined at the top of + that function. + + + + + Start stepping through + get_face_intersection_curves() to + investigate how the event intersection curves are being + clipped. + + + + If the faces subcommand shows that an input face + was not split correctly, but the lcurves subcommand shows the + relevant intersection was accurate... + + + + Note the index <n> assigned by + lcurves to the relevant linked + curves. + + + + + Set a breakpoint at the + split_trimmed_face() call inside + get_evaluated_faces() with the + condition dplot->LinkedCurves() >= <n + + 1>. + + + For a multi-part evaluation, you'll need to first skip + to the correct invocation of + ON_Boolean(), either manually, or by + conditioning a breakpoint on the value of the static + calls variable defined at the top of + that function. + + + + + Inside split_trimmed_face(), check + the input face loops and ssx curves: + + +(gdb) print orig_face->m_outerloop.m_a[i]->PointAtStart() +(gdb) print orig_face->m_outerloop.m_a[i]->PointAtEnd() +(gdb) print orig_face->m_innerloop.m_a[i]->PointAtStart() +(gdb) print orig_face->m_innerloop.m_a[i]->PointAtEnd() +(gdb) print ssx_curves.m_a[i].m_ssi_curves.m_a[i].m_curve->PointAtStart() +(gdb) print ssx_curves.m_a[i].m_ssi_curves.m_a[i].m_curve->PointAtEnd() + + + +
+
+ A Historical Debugging Example + + What follows is a step-by-step debugging of a real issue + affecting the X combination from the + BRL-CAD sample database axis.g. + + + This issue was fixed in revision 65179 in the NURBS Boolean + evaluation development branch of the source repository + (https://sourceforge.net/p/brlcad/code/HEAD/tree/brlcad/branches/brep-debug/). + + + If you want to follow along, you can reinstate the error in + a checkout of the development branch: + +$ svn merge -r 65179:65178 ^/brlcad/branches/brep-debug + + + + + + Open axis.g in Archer and convert + the original combination to brep. + +Archer> opendb axis.g +Archer> brep X +X.brep is made. + + + + The file bool1.dplot is created in + the current directory, as well as a few hundred + .plot3 files. + + + + The object X is the union of two + intersecting arb8 boxes. The arb8s are perpendicularly + intersecting plates that create a 3D shape that looks like + a 2D letter "X" in the X-Y plane that has been extruded + along the Z axis. + +
+ "X" from axis.g + + + + + + + + +
+ + The ssx subcommand of + dplot is used to check that all + expected surface-surface intersections were attempted + between the B-Rep NURBS versions of the two arb8s, + hereafter referred to as brep1 and + brep2. + + + +Archer> dplot bool1.dplot ssx +Press [Enter] to show surface-surface intersection 0 +... +Press [Enter] to show surface-surface intersection 13 + + + + All 14 expected intersection events are reported. Each + of the two larger-area faces of + brep1 transversely intersects the + two similar faces of brep2 + (ssx_index 0, 1, 4, 5). Two edges of + each of these faces lie in the same plane (the X-Y plane + and another plane parallel to it) as two of the four + smaller-area faces of the other B-Rep + (ssx_index 2, 3, 6, 7, 8, 9, 11, + 12). These two pairs of smaller area faces also + intersect each other in square overlap intersections + (ssx_index 10, 13). + +
+ + + The ssx <ssx_index> subcommand of + dplot is used to check the + individual intersection events. + + +Archer> dplot bool1.dplot ssx 0 +... +Archer> dplot bool1.dplot ssx 13 + + + The surface-surface intersection with + ssx_index 10 appears incorrect + (compare to the other overlap intersection, + ssx_index 13). It's been correctly + identified as an overlap intersection, but it doesn't + contain the full, square area of the overlap. + +
+ Comparison of Surface-Surface Intersection Event 10 Versus 13 + + + + + + + + +
+
+ + + The overlap intersection should have been created by + stitching together the four isocurve-surface + intersections that make each edge of the square overlap. + + + The isocsx <ssx_index> + subcommand of the dplot command is + used to check that all isocurve-surface intersections + were attempted. + + +Archer> dplot bool1.dplot ssx 10 + + + All four expected isocurve-surface intersections are + reported. + + + + + The isocsx <ssx_index> + <isocsx_index> subcommand of the + dplot command is used to check each + isocurve-surface intersection curve. + + +Archer> dplot bool1.dplot isocsx 10 0 +Archer> dplot bool1.dplot isocsx 10 1 +Archer> dplot bool1.dplot isocsx 10 2 +Archer> dplot bool1.dplot isocsx 10 3 + + + Each of the four overlap curves appears correct. + + + At this point, the problem doesn't seem to be with the + intersection curves, but with how they were processed. + + + + + The fcurves subcommand of the + dplot command is used to check the + overlap intersection curve that resulted from stitching + together the four (correct) isocurve-surface + intersection curves. The command shows the 3D projection + of the 2D curve recorded in the + brep1 and + brep2 domains, after they were + clipped to fit inside the containing face (though + clipping was unnecessary in this case, as the outer + loops of the faces coincide with the boundaries of the + surfaces). + + +Archer> dplot bool1.dplot fcurves 10 + + + The clipped curves are shown to be incorrect. This + isolates the problem to a point between the time the + isocurve-surface intersections were found and the time + the clipped curves were created. + + + + + The isocsx plots are written by the + DebugPlot::IsoCSX() method inside the + find_overlap_boundary_curves() + routine in + intersect.cpp. The + find_overlap_boundary_curves() + routine is called from the + ON_Intersect() surface-surface + intersection function, also defined in + intersect.cpp. The next + call after + find_overlap_boundary_curves() + returns is + split_overlaps_at_intersections(). + + + To quickly check if the splitting function introduced a + problem in the overlap curves, we insert code to write + out the overlap curves as .plot3 + files just after the + split_overlaps_at_intersections() + call. + + + Since the ssx_index values reported + by dplot are numbered from 0, the + intersection we want to investigate, whose + ssx_index is 10, will be the 11th + intersection recorded during the evaluation. + + + dplot->SurfacePairs() reports the + number of surface-surface intersections that have been + recorded, so we write our curves on the condition that + dplot->SurfacePairs() == 10. Then + we'll only get the curves from the 11th surface-surface + intersection. + + +SurfacePairs() == 10) { ++ for (int i = 0; i < overlaps.Count(); ++i) { ++ if (!overlaps[i]) { ++ continue; ++ } ++ unsigned char overlap_color[] = {0, 255, 0}; ++ std::ostringstream plotname; ++ ++ plotname << "split_overlap" << i << ".plot3"; ++ dplot->Plot3DCurve(overlaps[i]->m_curve3d, plotname.str().c_str(), ++ overlap_color); ++ } ++} ++ + // add csx_events + for (int i = 0; i < csx_events.Count(); ++i) { + x.Append(csx_events[i]); +]]> + + + + + After rebuilding the code, the evaluation is run again + in Archer to produce the custom plot files + split_overlap4.plot3, + split_overlap5.plot3, + split_overlap6.plot3, and + split_overlap7.plot3. + + + The overlay command is used to draw + the contents of the .plot3 files. + + +Archer> brep X +Archer> overlay split_overlap4.plot3 1 ol4 +Archer> overlay split_overlap5.plot3 1 ol5 +Archer> overlay split_overlap6.plot3 1 ol6 +Archer> overlay split_overlap7.plot3 1 ol7 + + + When the four curves are drawn, we see they are still + correct after splitting, and enclose the square overlap + region. + + + + + The next step in processing the overlap curves is + linking contiguous curve segments together. We'll once + again modify the source code, this time to write out the + intermediate linked overlap curves. + + + Curve endpoints are tested to see if they coincide, and + contiguous curves are linked with the + link_curves() routine, which returns + a linked curve that replaces the original curves in the + overlaps[] array. We'll write out each + such curve returned by link_curves(). + + +m_curveB = link_curves(overlaps[i]->m_curveB, overlaps[j]->m_curveB); + } + } ++if (dplot->SurfacePairs() == 10) { ++ unsigned char linked_curve_color[] = {0, 0, 255}; ++ std::ostringstream plotname; ++ ++ plotname << "linked_" << i << "_" << j << ".plot3"; ++ dplot->Plot3DCurve(overlaps[i]->m_curve3d, plotname.str().c_str(), ++ linked_curve_color); ++} + if (!is_valid_overlap(overlaps[j])) { + delete overlaps[j]; + overlaps[j] = NULL; + +]]> + + + + + The code is re-compiled, X.brep is + removed from the database, and the dplot-related files + are once again cleared from the working directory before + re-running the evaluation. + + + We draw our four new linked curve + .plot3 files. + + +Archer> overlay linked_4_5.plot3 1 +Archer> overlay linked_4_6.plot3 1 +Archer> overlay linked_4_7.plot3 1 +Archer> overlay linked_5_4.plot3 1 + + + The intermediate curve represented by + linked_4_7.plot3 (and the + subsequent linked_5_4.plot3) is + clearly incorrect, as it cuts diagonally through the + square overlap region. + +
+ Overlay Visualization of Intermediate Linked Curves + + + + + + + + +
+
+ + + We'll perform the evaluation again via a + debugger. X.brep is removed from the + database, and the *.dplot and + *.plot3 files are removed from the + working directory. + + + A breakpoint is set just before the calls to + link_curves() in the + ON_Intersect() surface-surface + intersection function (line 3885 in + intersect.cpp at the time of + writing), with the condition that + dplot->SurfacePairs() == 10, and + that the overlap indices i and + j match the linked curve of interest. + + +SurfacePairs() == 10 && i == 4 && j == 7 +(gdb) continue +]]> + + + Stepping from the breakpoint (e.g. with gdb's + next command) we see that the macro + test OVERLAPS_LINKED(Start, End) + evaluates as true, indicating that the start of the + overlaps[i] curves coincide with the + end of the overlaps[j] curves. + + + Looking at the implementation of + link_curves() in + intersect.cpp, we can see that the + second curve argument is joined to the first curve + argument using the OpenNURBS + ON_NurbsCurve::Append() member + function. So, the start point of the second curve is + joined to the end point of the first curve. + + +PointAtEnd(), ON_ZERO_TOLERANCE); + + ON_NurbsCurve *nc1 = c1->NurbsCurve(); + ON_NurbsCurve *nc2 = c2->NurbsCurve(); + if (nc1 && nc2) { + nc1->Append(*nc2); + delete c1; + delete c2; + c1 = NULL; + c2 = NULL; + delete nc2; + return nc1; + } else if (nc1) { + delete nc1; + } else if (nc2) { + delete nc2; + } + return NULL; +} +]]> + + + link_curves() is here being called + with overlaps[j]->m_curve3d as its + first argument and + overlaps[i]->m_curve3d as its second + argument. This matches our intention to link the end of + the overlaps[j] curves to the start + of the overlaps[i] curves. + + + However, going back to the + link_curves() implementation, we also + see a call to + extend_curve_end_to_point() which may + modify the first curve argument. + + + This intent of this call is to ensure the end point of + the first curve meets the start point of the second + curve as tightly as possible (tighter than the + isect_tol value that was used to + determine the points were coincident) before the curves + are joined together. + + + However, we see the point argument passed to + extend_curve_end_to_point() is + c2->PointAtEnd(), when it should be + c2->PointAtStart(). + + + + + This error is corrected and the code is rebuilt. The + evaluation is re-run, and we use the + dplot command to verify that the + overlap intersection associated with + ssx_index 10 is now correct. + + + PointAtEnd(), ON_ZERO_TOLERANCE); ++ extend_curve_end_to_pt(c1, c2->PointAtStart(), ON_ZERO_TOLERANCE); + + ON_NurbsCurve *nc1 = c1->NurbsCurve(); + ON_NurbsCurve *nc2 = c2->NurbsCurve(); + ]]> + + +
+
+
+
+
diff --git a/doc/docbook/devguides/images/axis_X.png b/doc/docbook/devguides/images/axis_X.png new file mode 100644 index 0000000000000000000000000000000000000000..4475ebecf9f04869ff7cc3abb109a5a60623d558 GIT binary patch literal 64005 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 literal 0 HcmV?d00001 diff --git a/doc/docbook/devguides/images/ccx_overlap_event.png b/doc/docbook/devguides/images/ccx_overlap_event.png new file mode 100644 index 0000000000000000000000000000000000000000..eca07a42e0c80cad9726228edaad2f19eac237c4 GIT binary patch literal 6154 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 literal 0 HcmV?d00001 diff --git a/doc/docbook/devguides/images/compare_endpoint_style.png b/doc/docbook/devguides/images/compare_endpoint_style.png new file mode 100644 index 0000000000000000000000000000000000000000..6a7c77994c5da7e21879bd51ade542b6bc3b33ca GIT binary patch literal 661629 zcmeEuWm6bpOFy$wmdo1fc~DK zJ+&01p&BMhkN(~uSg9z;LcRa974=r8{cZW+u4w291%-n1&jAgUlSlZs5z$LYRSxkt zA~FUnO5$&N$loR+FF6A*88;UfTUReA8Gx;&m#qz@?;frVI)~!#tI+_sP98W!O9ydT6+3hC=_m;Ur zk+_>TQlGrHaVX%}`*y^p0B65Zp^ZEoW%R3w+b~C$;bDhA1~+x1{LmO=_+)+Si7Q0E z_V)w09e)*H=pJrJ`*FR$&Fpg>Lj&ZG^_am>YD$b`xY~fxTpPq2bE$brV2SHaX!P#g z3Fy&gD4rSOYM)0@#NO6JeAHPxm2cP&O5UjT@gv6p7WRgC<1Td`p4sHFj~Pic+)p{F z9!}WMo}CCM=!=+5^yIuc#)trN>^yh_HD1csK|)CuKTVCrF;vtfO+jsqH0~+mjeFO%-@*?Eo4*_GT&?>t`v;ECNU+!H5 zIpqZ=!bkIi$SEQodI#yJ3CYChy?Dgeo*gS4A9~(oIp$oZ3+IlicE*mSs@Zmr4v+0y zUa-Vc<{xOEIl0?w6#{IC3j;!i=)O)C#>+U7-PXxluZFz#zmdNGe1DX9g8$bN6(94M zh;$qBb`X*n6Z3xi{w8r1@)rHRX21A&e)Vn|@;280I_B1YoxpjncbX2L*dzgv&*T? zdCnn1T60?bpxW9z|Drg*M?7Dw*+l;;Q>5rRBLx*!;7d{dzU|3j44mRNQTj_!Gb}aw z=kxJHAc0XjGIVl~;?gq#S6~XBY|t;Cy4vJW#_%3+G3vA2k2#^UXJ*YD^ctLO`m_lC#S z;D%{KnI{2b=qk&T;9-`>#;!kQVI&%T#h&ao9f$ZT+n^BBcJ^?te%-|`+08i82b0SS7pj|%)-+8Yjl3yPVr;JOX0{2e%*2k z_T*hqblu%!YD9$&UIAcBv5;SN1k-nLcaXyu1qBaa@ZP~JJHK@O1;yJRidU;EnD@2! z=l)-t5c_xk*CX{1fHmPJ-P_T{yErxV+wFlwH`jkdlpX!;eu(e8>g&b(<3&Hnx+${T zGU#F0Pu0r#`eSy#eBB47e7TFxA+8lMok9-{-^I`3szvlJs*0V5v5SlS%x$@zm7m7y zxlg?3?HTCisqL3M)C555B*?rod9yy0S}7Uka4g>nN1Y|CRQUx4km&1<!z?YtzEC zEX5f5W|SK(e!L5%^vwf$;Y%`k4nN+N`BF@!eKBjrY`@7Voif;!MR1xo=HpKStz}Pr zx`3__`^Idd=#^U@0L{CS*VdSI%fvL#lZ{IlkBcX{D|ao9w`h3KCm3%uCWjCcj?4UN zcHFh#v*OZ$3>Bwn*3QsSIwF#RH!kEgSLXyfGeB^$ z>QtCwiVJfDU2rCG(F?j%V%KBTJ@qc8Dm%9Ir(cd2e+l@{}>}YXnM1%FbW;kN`Y1 zM*V**pe+DZ;esTVOdu8wz_>A`5|nnZO4JllcWe>LpGCs20js;>ZAd=O`N|?ul1V5V z2-$`^MtJ*lc)oH;6uL+XaF4>~qO*FL31ue~DYb$uQoBGsslKyXm447f^MTrFtr^a!;Dx1n>W=eN0p|6| z$NUG{cT0?@t|W1qVtt|1#y0K|*;5%ZM4vV=CP`}@BW$F1iFy&6_RZsf-+u8#4k0?d zo)uR5k}O}vET&ahpB}hvj(!KmrP8I3q4=tYHkBC43ZYL?M;FyjHK0Abi*dPD3~*JW z%K4{m!udL5e#YQeKemC>6PQW9ok$3AenD=r$3XehX2x8`dY_?w{+JEK&ADS@4 zeEv8CMa3~z2`q7M=0`SN6_uFd!^1bTm4;ZlpWFx)%vWJg-+$N-s?m?EkVDrDlBLsl z6#+JLimI;1;p-g4}KwxFIUS#7*cKnK_@b5^LUfNs!yr%TY*!_4{h{7n`iT z-z_n(%m=W;Sk*61cQc)X@hRq^5j!dW3ex2NiOe3~LZ@=~_dy}R+c7GGct~M=$9S&l z)=qw$T`xC3-T@`8EK80POdjs{H7-WJskz_WvF12eX`SEt7O8_)ri9RG^)sYD+8Vj2 z){ct}Uz@~smoGX+>ei3~s`3o)Hr7to&&%(3!l7G5`^jMOkAT&`$}FJkJH}MLo5bx< zg6>u_tRfSz2gG8pak0Cr)1Aq>syb(8PQM@b>Isx0p~ai{`N%t@2LPai@X%Q+!}a1y zk@4|`LTyLJ*6MF$kO5Z9D!S2{VOXl73#!oUdL4_B@F-RM13h)S#7txqDFo0nQ5d>l zVJ0uKZ_Eai0Mwi-)3Y9=hF{Cl?LT`AJu>X%4e^FzgAh}aO~${U$zj1rGx|`>FJW|J z%BC3R$gCp+k7@uH4;>+)I!I)SYf_F=3&3GSG?>eIbvM(~(_HhK-kS<-35KQ+NB6*{ zxYxn9jq`5gxPHsXM*g&e<(C}=Ayit-*>daT{vSN*<{7zK;W%RjYc9C!19ex-#XH2^ znxV+DbC%E z>R;wEh=KYyUcVx)o^49 zP&vLd|Ef9h6x>iYGFY68xH5{|G$L!q(r(<@<%7P%*z|!`K#puxs|V@XdF%-cHD!v# zrrhh$f0MHkQp3RVY~O$t6ve z8#O&Y>o)aAJ?lXupM4r_EhmhP981RG%F}-SjIs@M=&2igykVX7ENqnzigWon_RXb6xlRJax&$JEdxWkiXngVM7aJ1V;h+& zol=&w;e{`Sq$y94u7uyzS?da8X4ix;&5N9gq4y0^f)TVpQDH+pW&O(x_4=uRZyVP? zr4ncbz$K-=I-1#DtFC(ewQ6SkbteZlL5G|`rW2B-xwQAV_0+>+bLrT4ev8RX+mWmuX z2ky_!68+qVO7*=35=IjnKq2{VB{504PqcWHWv4uuOgf+N2cODNJO(1?yHX2T?Ou_* z#+8f?m|Ydyxcn1Ol%}YxKl1*IaiRQ6z{Fn=cf9YiQyX3?&qcpX-B334q|0t=zcez7 zub3ZkDRNs{>X#RkLlzeuO*dk#Ww7o~~c;FEdfl%7^c8(Y%M$%bV^(frFlL zQ{lInHMpQ^zZNl*uaalggFSa6Bh=Tut(u%~`E@J5V<*qQ~qMae8D50byxYwcsg zHC|VYof!%08enfqas{5--bd~qy)ZterhXXOos!3b*<>+QfgKSHndsloc2UrXdsXud ziCUFM?LS*#rl}$kYDukB83b|^aNJ+sKth7-lAi}28JQvAZ>JHala`I-?FVE-FkIsv z91+T?kEv5lR-}`AryL{2+rNk!&V3pEd9b=kP|OuXxpSQu%Bk-J{C1qf>JcB zeaun_bT1KfJ`Nv8v~togp%e^4-_FV7HQa@o!tvNo@&rzui)!z(-#;il?ch~^@28P_ zV}v9lL7`3+GV6SvPaC+a(=-Z79-9PsRqr*tAo+_$dxa7Gp!(}HO1BH&-Y#gUx79=5 zT1ft1*cA590;HDG9}pIk#Oi4dac-d=1VM&-Ho3CDMvr4PUZmM|q&#Gw|9Ut&jt!jz zImn*JNrLlhbJcYk{iMIJS9hAW-WskQ#i*16P0_HX*ZR&q-Lr8)2HUygu|ZIla{(PU#7J* zK-f%|kGGtGLL}HW$%n$C^mF>znBH#Z9c+w$C*PGM9mB{2v26KB0cHTjC((%Cr8#^W zMCV?Xp{-3*+X-!TtK>AdulnDADD|*>6sKrUO%4!|TnktEXtX+#AC*Uyf_Ssv;_wTw zh;)Y6pu1m;D8U%z8I+{Gl*^$Im1(%v9{31CDA~057AVvOJO-UHx;86)O<;@mAwu2V zK#Fk@70ZtdYI>O%r4~ZiJI|AhTxY0^I>pK+_$v z)HRA;)P6&=COyl$&CQVKSM7gZlG93(Zk@Wcb@L`c#!=BSbS1z#1>rZzA2+KpkxJQ<`GbDdG$lleAS(Jl0j* zNYtE(H7tmD`mnajfVWaDg3W#4?%f7oHq65FvG8A1Z`1d`40BNBGOH;DO5U&ac8Mqa zXx}I2Stdkj1(pqC z89hfl#T!{VA4k0o5+c&gjYZnWiJWbjYfi@!^Yhg_F^QT6*i^dfz|82M=O@MhJ}LZZ z&&J2cTJ7~cH*yxgs&oy~-dV%S$Nk{GSeW_LgX$z*%N(jpS{SySG)Lh>n9(`t=(2)( z77HBv(K;m`pB+gyMqB%bv76H24e?kbtyxO~v8pw)9XnA!uPzZBrRv}&?}$erDW3$> zHrIdPocPozLZJFh*N6RLPWYl$5{kHk6`tICO4fE*!QDft-ARuG%-eJtD!>vjsjo&= zeB4*IL#yxIrM=_)xoJ4a9a$7dd?T!$5RTtA7;H{}TE;ktAz&HWHFc8n!|*N-k)L0L z@+smic)c@1OyXAb0qByKKGpv{^nv6LsY){*Lgp49;-HZGf#?a-u zsXh7t%>hucVIy^CCy+OljNuSj(FCqtBiAY~wWWw=hzFTY*Q-AP3pR=PBsnl_S<5AY zMiczpV)zx`m}-0!rO_G%0A>EbVdPD5C!`SRrMVRMr7GAC>rbs)Eg10*#XkXZ7T;2U z#ZLeQC#U8hu@e0*s*q=sSmvBaq`*y%w3xLFc{z$24t6!%1<&tzr<9!%B_sjG=miK3 zqmo%r^1tt4r)m84MEr24TmNGF2NC`OEgM^P^nvhnV%N?P<&ZG~V`0d-Xmv=l^pY)o z_H^F1eO7E>dFgW6SV{F-Mf?;S#gmPkdD;abem@{k%3jgZTqPX5O=QK}rrg3(!~w6T1r;1OLDem&pBU zsyr-bW%8LP%fb}yuGvIg>ttYbL_P&eD&r-nvu#z(h^Z%$v#DK)J>6UnEI9QLt)cXi z@I}Q(aR9OCXdN*(RfwY|KWOo-k2+^!7B(m= zU1mvxm0IgP*!P+_$a!g?ulkiv{g8+5@mX+WQUdR+$#+)Rr-zZV=tSi&xA7~+zfbxc zopxs++236stH90tWhN-{;#c5%NCH_5bLtARA2po{)a}kXdidzzXB*nUiv@~G{P()1 z22xY%Q7kJ^ZWKEO?-z%7WrsZzIJ`W}FqCBM=VMd%j$IIC-~5TrWg1P~p5f^aJgLXFoO=D=BmJ1T-^+rDOP1a6faK@2uCTw{qc>?7^t?v)Y+#O~g0Vfupp<^wF?J-W?-EiRKq6o<{I@(b zi2i>KCR6d((~@6$7JFLRqkH}Gh@X!%{N#Om;g-fVVFUYzErA;04B`3_{hU0!wS7wx zvU>NidaTu8AXA>}hR1+ace+*%2Po$mQ43H##C{J=%6n*ADjZpxP1D#JzZX&Y=v30% zSB@4Tn9=kxcvSoG>-De>8EtOrhP|sVgehOI->2;9}(<7=y#fs#Y?oI0F3*cN|G-> zJEyl;{lrQ3EKx_jD!#>0f7X+NZ6h8Y&G)5V%KusLOxekSB_2ekiVsli=h|yqKcxX| zd&-P3&C+0`>(&$vF$|XU%fE4&ooWw)46sg}1o1PecgJGBZHnQPHJqoDJL^@w-*G4UIrDa{+zZ;rV_JBc#Gzw%|!+t%BUx}bWYl&ZO=@=VzlP61aJf|FZX6A z3dYbF-ZIG!zAm(2Mu-;zQ(ts={;gP|{sVX^5E>7|&6^fU3jQS0XtYslM^3$mw3+jS z=jtBiLWCy!Grc3#UfpV%+X_UUfGHPw9J#44%tjuQ{`4TgSJj(g8C{hJT6pWY1U`Jj zXhysMRpYenN=EZy-t-BM*lim9+Mi+NqdAGjiIuEN^?>B8TJ>G zg86>MKVQa8v?|Q`JL_C!$!Lz(zZP}Hu@2td(yBGYKG>qL2*7?Obo9P-GzO2B-((i? zWY@=#CVudDr#f`r8fe#WWq%fCPPb~f!Lo6x_5W^DL!mk;NrnVyw>Cf?r7ibjL92$) z#GPCt9fdAr!|Vda3+O0h8CC` zc}y!Vwj(5ABPCRK_{l2^s@3Jr%)!Y^%(^tD`dK*Misi0$N+ujeD^m(gqV&EJX)d@t zF~#M+S5!yMzz&8cn3QwdF&s{JK`GSPi_#3rB%AqBb4EC2UVFh7p8w47Cl_Zst7&kO z_2e#DF}Vak0JV(PA&S6 z&>XC>C19c%+%dZj7OVWd5PXw)Fcm~MpiQeD_j_3h&6(GkU&BY8=U~H?%xyHHIZpmp_{+?CaN(bj^ z13yz^&b*6|Zfd4eXx_p1>C{Lch4Iu9-r=h}H`Zw-HAOq1p^vA$D=M^gjG{KrFO~qP z)cf@T^12_DC)myv-3`WF{d&0#R*{;dKhR8tZs%oM14LI#-itceA{hfVb>`3}?DoT9 znf;JP4fQ#8VRa22C}f4q*oLgG%dFx_zbsHfs{o0FzP!e$j*>Lht}(=_K^!{`x8~gn zc7)YRJ_N?VW#L&yv!>(;;5>i{ zHxCYn9&;M3a9lFesp{J|JBLF%$B0yayy$srD#`fB$WcTMX*CRd{PTM zy82LZwKeb<834z%NbTEeE%YO{-)MkOK>L2KEN&?YQmA7M@CB31lECux-D!L zU3Km^tf80Aa1>Jj`>kDJu-JAsNZtA)e?r$1Uh0cXy=SC=u)hl4NvDQJ z91;E*a^kCoV6JROoYF}q5@cgyOAPh49bBIGkpVE0MI@E2JYC7M4+XT*PCa!zzo@pB zDSo_mNv^DPcQKOY&GBEF+L-9o z+}trOYpERvERT4yiT-r>!)~M0nR1_Ru#=fQD!8&n5eMDOHuKUokYVNnNf=`vY!+nm&6qz$Fa#KGa&dXi5!l;K!Z^@2MAsV&tbKxo<1SwO=_` zuHbOvr8ck?%liho>Rgh4nLOVT!fPIK*X-%F42<9EHtTB>|I3+}{FBczh!OzP7!r2m z*4I~{T;?Wl1&K-8a%nwdlocE`T$7`sPl4l_%R&?|=NW)drJXPhUJd1!^|xaiInSoG zh!zV^=Q;h{r{CPIF#6NpCIEI`!}*j;lLYh8U3Y3`(BTS$o#%ZJO}+8DyQNjm`To%2s%bZcrRd_Ap`> z_zA%_qgq)L$^^rLXUsX~AH%#z9qGpK-$5n_6#z_0U@&j{f6ry+O%eg{=7#Q^S*?CT6-`cRkK7j&s2!H4O3YDT!nZkB2GYPL)oir+s$kftZ z6k8}vs~8zaBR?}BcWo`#Z*hOHPGB~m1KL$*RvDF3=1IXIB1q;%pA{S}^G=Asg%3aC z=Zx1}hS2K|3RO6%pX)C%52tc<-)!xjwx~?%J|ZOA9*rr@A1k6NK>t4~r99sIJKtIPT1Z)T>kzbjk}`bl70hxuh_;| z&e76p(OR-nr?gqxs?~;Ji^k?$db|S)GROI`!e67l*SxCQ!rilmvl`VVGFOql7f>wJ zWh;gTpxuI)O4z0cP6Je!rk+|Dx50662qPmz7i=)3$QG0CjUP>P`{)b~tFkZKJa1N| zSz`71AA4A@ZR*V%;7`nzXkYJE#%U^9oUjjqR3vq-sha0|zML{mG=GUxO+I-8aLGKu z+(JUOD1e%TN+Os^jCF~(Xy^$S^pG?5N0qs69_v*Uu>EmMi(T z2K254<6gbP%!R{$H!@q}w4Wr|g~0w%v)zLiI+T_8>`MHM})E&L0q%C`_6(0ZpKENlv9JDb#zWG%&e0D z$=yak*T1s$b^;^+q1%e73i2UD;u@hm#jkPB_Ap^Fnbm{Z5ObWh%8mLm^JeEsv7#VM z>n5(3JOOcxP|qe~F;wdIdFgzaHWiN`_Yqr_J%EKwJ2w4>8m0+h%mfeNbzx5iwO=99g_M z_;V-324G07Y0>?F(@$qSb(f60Tw2pN#*5B|#vW2sN>_ZPpd9Q_BLAWA8a&zRQU94d zv8fKbYP2fC-T4m;_vm!(;z>q)>KivNLY#;-P(c@G zkM0tu=ctb+yY8-lsu6W13a`X(+1NLBhcC!Gz1$?NNKn4YA)ovzr{sL{CK5%7U` z{2z8Kom-qTc8Lv^N*IiDmK8f7J9uTy+U8RuHBZ%spSL^EUga}V(vbcd{igbi9j8Cu zPdapU#cC|%5s7`PDnsrsI=nh#?&yBTb281FM`n}2wj%1fU|dI(EZYQ(*eWQd7mRa0 zyzJRuA_u=3JvG@8JJXL-+Je4}_F8*pF!zEeo8yT8jY9rQI#w9UCppPm+Wg{*=)L%f z4iV)6M@U?$A%SQs)-H#!UjXf#$UJ`iD2$JpE z+jM~Tv6z2jomEMEqjLFv)Z8=#&)>@t?66NiVE^2TyHw}+*{(wko)g1E z`VT18@a(b8P|+iHQXL+C9CoZEeU;xH4{4=0^OKa8Szy|W(u)b4*lJ3r^Cu=Af$vx_ zDhbhvlXSC1BkFz0&APiQOJmHx{FtXjD#1E2u~^l~+wrKq`SanVyQomj9`xMGH{K%z zP^2YL&3X!L(Z2%?9p}q->`0z>Pn^w=s-qsf1Cn!m3+he2Y=_DHW{BC2T87pqchl!? z%>kG$#_m8E+D#By)(5Rrgpx=PR0~=gFjV#3#qN*dB_SYga)nO5maZKPr8Mc|Z2c z0RkyG3zT^#Bd5%%r%JtaZ^d4L&bLukwqP-){%3CeDRw(dUE>P4i<)#1qT?lhg8UGyxiJKMkWC`J?-$AeK@~&f zJNkLW^j<}3o0VUUXLQTR9WF6r;11*u8k6uq^yhVaC0I_3nS&3ixb;1O;BV%Im5lUD zTwI@|;(WU}K7X6cUQ+Yf(=@vApqL^FTsHuw#KDW8J3DBBZ}H73{+dN#&$qbqH3}M6l|_IV#ZB{1P)s_tMT@DpUI>7) zz_Zi->uhe^spLaY%0YF&!{ph%F_kUr9&}$^ekdUNXb1<>5=B|h0OHQ_HPb0_H_Vgb z=Y|d#M>U+(-cDl5T7z#uH>lM_9vcsmQf+NZz`4bYdn|ef_(5dqfWgd&_cj`-F1Z%p zym8>h;&XsKIG+PHbsYhPDHhAx}_ zA(;5Ki_9byxe2pUWsM898-|*VziLCEZg%#enb4eQ!Pa~fzlEyoNQ7r0&IH5(qfG;sI;FJsG znAmSvJI)qIJtQ{yQph2!=T*gZVYulh&|kPgaxGcAy{^(sB11M6UHZL~&Go}|X5twl zn5^F+>v3YRXEX34&>!<@eX4pq16CE8C#_(~6rrUYbuMxtxmVL;Ef6_4`i(1U4ef6-%9NmVbYbi^|q=wb6xPVU@&S`@plrCPe+ zX!V|N)2sZV`I51EFK0y~CuhL_wK}7d^eS$?Iv}~Gvpo-Z2yh9DnH);8i-np}XLqZq%l+o8kof|%;S=vj{D*J&JILA*py? z9(nZrZK)V08&w73@;Nhc=P`z_^Z7k7=WsZkFSY&;GVYUR zqy?#J3Z|HFQs0(CE-e8zY6un}n(0|WzwBdD?bZQ7l?u8!@!7hJTo9-%$!GuKEx3AK zbCNbj^Dt(!zV_d6bW`weDaW91Y|q4^n3aK9p9yaCWF4%eO@m*~*?&m#K@O>-ZRGqNcj9!x%&5k;?Scn-A2?=VS8DbX zs$_hczH2?0+PGJ5v8&vh)X0GAO%-67DWOt^oS(*ao81j4b!o6#Yx$&(>Mcafnm6l7 zH|kz*>G_%!$r4@RnckLMVK8frLOV&5;UiK@Z5hm=517hG7?-+-Qvtk({X=1-`$1k4 zhHjfrT8az=p6)M+pN)$qeNlhx>barxl6V!99EBSQxP}BJ2(Dl<~-+B zTJOsh!nWUJ;bG+-naVoMboK9`s`%X;eaF*Ov@iyYkHNPF2gIr&O&qV_g;{rCQRo{e|NRC6Z?X+&Nw z_Mexpes5U&<1tqO+CVDb_`ALPi-r@JGF{%HPDA&IM-uAn^J$YwI?*z0uMeuJugjbs z6nW?RWKYF$h=|rA={GbtIqJ?$T*4=yBC20?Y7=!yc%Mh(kAPIs4NOB>5RZ^xFkiuf zp>OBO7rX@h(mC^xtZ}zDBCm01As*+QV}H6p^+FDxrk4v^nA_jfdZHCy zN%CmK74?+eGkZCx#nW-f^)~A$Gfv_cerI#_lKQkn8=gwfy9+hiu(Zz%*vdB5rVB9A zhuLn;3l`ajr7x-SDN;2dv-LDs;|^i@EGzQ6E(J3bC*sMunnOPP3J~um>u~#C1(3u! zXG?X1kzjHo>x^rcm)fwcpQO_nu~x~@fe6uG^J%3+nLsI8Ti@SciCM*b7n?q(@{h4s z$lYA>&OUi^kc%th`?n~=*w^s^bqDds%qO6L?*?a#u~}dGcDL1u-Oa(&z-oG?xZ>}X zY@iLfdfV~n=B_TUFRE5jKKMiScv4ZUD^=?XH_#3CSF3eJ{BrdhVv5CzEL4$j6Sb&A zpdgbL%O)R(baEERB;$CgtYdlp+Dp(dH^Ru@umiLpuyRGubhq^EK$N@@fG%O&N1t^GCBebv0bCbSU?)xv=BI=i$l%bFU!L7&KA6EeMb%L*JZ3rS{yTJoap z#ADSeb9qTyt;4%xGwGZ32JZz5VOrRr=l9xJoYC(g6FK}I6pn`z}Xv4f~~qE-GXZnHPsTtM@ObnV{7LR6-;1!hgn=HW&9 z*wND(yg_|gd_@Q(iT6-{9hM22_0O}=>PRfnS(oKi`6ayRTjfMqO&GQzrzf%S%PR?S zxcKeB8ddQbb-1r*wfcHw28(-Z8EaT*Sck?ZanC?xyqZEN=7|!Kc=TI`8cTy!QQ0Hz zr0m6;rk0$bkF{y6$+DES{oUTmqyQnih|&)A3u4<36XDatb?+|`p#M&3d_D9NB~QU% z<_i|J2`;kEz7{l}md=8R2|EPWGqh>ha~C%RTqpYbrJGG^aVx~dJotsY`2*kI-p49&lJ^fS?d|GL6`X1b&6u4Dp=+(x%K!g z&0>Yk&`H0vh^t{$k%gYYwb8j5FVcq~(lx8N$lIK1E#g5NVta#=&(k7DCDpUP zaZppuBTF#x@aZZ9LuP)dVQI>q#>u%mT)G&B&kam3cF1bbw6#X8Wv}v%=x4eFJXz)X zv?+bo5Mrf`DLaCwj*vB)GZ%N+PAg!Ef-e6C6=@>S2YZPv_>P6&J8w*~I4>%j%!4G% zUcRHFSViXn-(KEI;6Ddd`o&lawi*q|jI$xE1mlT+xu$q786jWGd+7Fk?Yw#P;BBG+ z>IDb*#l~cM5EDHG6uXg62ftWed#@}_Fnr_E7EO|WE?mKImNDNJ4a%s0&Jcm=QtyTg zNI}bvr``!CDu_+=K3v!NUDYyq$!~p3b^3@gO&4rNW}04{@SGzi%jHJpi5JlR%z6ws9{9UaEHXU2_)P{xUWC zpS*#f=)bn4t|i)1f_jsJbu}&6gX&Lzeu1u6Q4I*y!P6G|%y6A+eu5=9p1x0?VHK?) z`?o@5LqcBmSID#ad*W}rrh(*e(&fpxb-) z2twN!T$ zXGKMegCClevWTwh#LeK5J5OVkR>%Uhd6~ksjz^xQyk6Q0cGq}x$8uEm)Hrx?p&CgM zS@J+tBdZVMEi?^buGzLXprZRf)`~u`SvtSpCNpSAq#Di$@#a>cX7sLsY&^bjO*iL% zWdXeCf?Q0HrI?-OR~5@2Xha2$Y4!El2ke2#=2!xbck0ydFf~`30a>ELEjB%^g+r>^ z+c>+OIt!i-w^G^lBm)qGiIR(^9g`%y*`Enm{#{bC&0NayYDz;J9|4iEy_5C0+rX)N zt}DNU8D9$iOhkJkq5HqDpZc>DjZwvDgPSr{*K&>9<#AgFWfiHY}l#iWW+iSs)ms7B>(u9ody2qvrI7B;~vM!2^o}t z=ZHXf4TpJf$yfyge9cbubPlD8wA@<%TEiH0o;S+h45ps%Rm1cK{D4 zG^CP{A0X3wW3qhJ0J@dkF(C#q*IpESlZ_NVbCiPn*{q5|jWy^K$9js`U^6hURVHUY z#t%KFL+gbj`iG>rvw$`f!L9vmPcWxfBjMPSuW9-viVP2v_?QN*m%iIS|l28q6hlzq9| z=`pp60i7a&x91w=XqSEyZUl>*NGz)T$;Nz5q~nmuQ-@7INN42QL0;{V-PWFk(3(aS z>dtF8TtZh|#qZQMY#k`F7G2-`gK^L?UmtT}Ask-&znM z{`A!QEF~Y%hF!~cGha%_bg@9+=fqoaBlXK&1q3id3db!_iEERo1di*xbvx zwgZ`Xcou84L}gPr{9FMjhfJ0PrFv~yy9IOCBD{hKc=+!swfKHE(QB-v_R4TkYGozz z>?=y{p4clo*-nP3lRJ*vm5$7#r^-02j{%cYQ#~hkowAc93%i{#v0iz_mJ~fL)=8It z%ObD$#{4jd8trVJCND^gKkl~$vwtxw>^Coa*81AG$u13nK*WOIp6t!PMP23pU;FFG z9P2d@G-r*+;K$BU2L{z40~G_P8mv`xot5`l(=Rf1mGQ42oKXa-WkhvD)^3}6N;|(< zNY(B7X+pZ~28)rO=ap{x-IHQ)Fr@B#^IS%WcAd)lnN(3-u?9eJq^ za^p=$oAwSSKU-O0uAltr(g|FUadyr5sy+%)n=nuYW0Aw7 zq$r(bsK#rZcUPrm3&O`d(s$ojYO)G7)+JV+-kRX+lzlV1?{Mb%{rOqL4W%iM7}^Zg zBZiHA4RTKv&b^wcd?gtZHh(Eabd2kfm#3|gKIH$kfy0z0ZLcgG@kH=w!p+F$Ku|)) z$_)Ij2zJu9eH<4wKLBEBXM3syjrRzha&#c-`y5Mx?|j%rLAkZ z8_+Ei$J=8RM4tk+-=hg5_}L|Pf3^LS6jqXDpmAg7OAfE%y79F2;v^bDX6@#mkB)59 z+rj27dz{SLU&Xk${F*Uzz_%eIx-g|1p7_#+X_`wV zFaQiADb@y~_a}zi7Si0vu+oJ%zYZg;WmX;g3XkNu3~C?{Bi{r|hxG2{^l^{>`8&ni z55Jddy5HnUF~feM?6r64GHQz_QiUAYCOX?ar$HB6-or0~DCC0=ulE^Z7+E$V2D=Y# z8FT9GfSzXCGdLMAcUawd~*AVleXAWaAHH>^39 zLl9U3gv?&0%onT7Tzr@`S6_>|f7Y~&Ht!kbIu z+Pu?Goodb3(h9U5z{2{&)E+B`io4+ggtZViDe*4}D3i}0n*io`C0jkkw%Q;}ZHHZl zTb%*1G=XErcqXR0SjZ?l-9q2;VCj+5x3qnNk}feSY zt$|unj{z2y33Tz7q?PRE3wNYkLmN>}0FyhFDyF)M9l!0I4F%2l~TB6}aUJuzvbdWrIM zS+@>%^)V1{QZa-gdKsraG?^h=xP%Rs9G68}HG>I@<79Hw%-@g=jgZb;nRH}yyL&VvZ#sb6&Yi@kh;`~_U{AGXbNNK|vcJA5J z`IGLOG+bPZH>fTRV5t}XAD-SaEXr{E9tI=@=@bM6q`Q%!ySuwpx*JqLy1P-jyBmR_ zLAq;b7+@HNp?NvKbN=s_=lgSA_rBNOYpuO*g2--?U_5!k72@R07e9ah&R9$$C7-fJ zh8O>-AMCAln}przY5T%*4p;sxNEhH;j4mJ*C_dfr1LV1fb*FcDS}Yi*Vo4et9oU-P z$JrCyRfKmFLcQLl|H9QAauom}Jt;@Q^X%vjeU?@2?h_^)efOB+MdOtHzNQTw1Nose9dtX;CE@YulI-_>&MV(ccD zxRd97K*C^vNaMQ>`uswNTs=yEw<>OV8MDxP8n0ieflS=~pO{)Mzqy+>k>A@SNAr4F zzzRBnPpse0iXMJMq1?*1M1nB1}>cF|0X!oUHUckvbBlGBh3LslMhLEIA?hdi@A zrMK{d5r!4J{F=$KmX!$2HMTrk4StfR{^ciZyMzg*LCxF;@AuJ3Q5io|z$yV$+Ozn* zl4?liHqeh+dBZrw79Lx|+(2NVx=Zi$AxH95Jm>DW2ad78Kv@lzdr=0Z#BOxheo4~k zVTksH5j%`)jOfSXwzZGQyr?>6xd}h%rfk9)=i9%3e|uGt6t$r`OiJuPlXUop z`hR|pTOuES|3MIhIDW#XtDA_+^xG9=3rYsN!+ntta++j|1~eYNG4!da@qV-%34_Co z#6MgtW)HfM$85ubu3iNmc%POFDFHJfpUm`GBf_IQ4@yD{&fdR)+>&pnGF0RiQ&5v- z$L)Uv$OVtrnw4r-6nK!9v+Y9DqODqZhs+c$Zt$R1Ii+|PNMv&hߛMdurO#MHT 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

>YSl!02O(fh(lL%D8b%9i>I`Zrm99?{zM}Sr1 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�cd57%$VOOc;c)6u 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

} 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%0AgmwP~J2oosns^p8^IxD)_rKiHX=XP%_F3 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 z zW_@60oBrYvNhEKd{x~G2Ba{BoPty{pm9hS%DY@1S^=&|1MZ?L-9_C|^|G(6k3MT5!&4_&W2#^&5-E1K9*q>2l8|V~Z55Jtl>HfA9}s zfLPDc>%OT14F?Nc@jiQkRAz_?YqL#S3rqT@lzIjyEHR%LHMNjR_?KPcH&*D3TM+YF zZJ@$bnk#hl9am@7+Gl0;crVv^x&6u<+ucY;XwG|YiP?*^;AgWXCnj9K6_yUaL-b`N zn-?lT35P424Zz&hSq9NM@?#n3gx)$MC$Rl+57bCC-`P<$i*8GR)u2&u(Wce|fsfiUb9}72KE9hSO8e{VT=(Be*<(jv;a}@?)OB zzqz-6{p*kY(f_Re4#q!m_;>pJ6Ni7|@Sn@`pMCMyiTVGqFSvf~ay#7N)r!@Mv*+6T Nu9-lt6kl?F^gpfV(o6sV literal 0 HcmV?d00001 diff --git a/doc/docbook/devguides/images/curve_traversal_directions.png b/doc/docbook/devguides/images/curve_traversal_directions.png new file mode 100644 index 0000000000000000000000000000000000000000..3a614503f60bca8400f1a477b526ae6a2a1efc67 GIT binary patch literal 101502 zcma&Nby$>N)HaHNfGCQzNH{8p#7IjFNJ%pi(j_UK12Qn6AW8^00s>MZ-ObQQqr}ii zcQbSkah^f=z3+Ej-?`5Dg8`q|d+oLFb+3D^J^H^?lD>KU?sYsoyqmHzk}7z3S440> zgx7#8!>zr4fnS%LRHVi6aysrU0{^&XBrh$AcMAN4$Ia}q1^gnim(g;hGze{nMQ>`l?0JucsET!ozVP|7wYU_+A;b{8W+0=y5)x!A=qqMBz zOO5v=RCsudc(RgWYHx>DMqMKxYPhX!px{$;_lgB9i!=2aU;X+anTJ=8|H0<7&7}wv zxLYj*4Cf%C-ogm2>A%#TeBtLiOXoqj=j=M*0V@%ABrh{?c!oIaGaQux*Q|& z3bv%yx6-z~mne<4-cd+hT3X%HV0Nos!(Ijq#H-iz*TemOH*p2`>na28lW`ySiC0U2 z`y>RMgNOHg{Sxk%_pSf=yzPPe`~TmI|Hte9|6csR%=`cK;{U6`|CbkUTbNMcwHO`4 zk=QjVt#Y-QrA(<8A!hNwifWs;5aZ_jc=kI&H4hvI^gs`!13WNRAg}#TE5MFF-S6zX z`J4&67r4C}5F_|#b0dTxTNH2w;Jo@j?&GXn4o2&1Rqj$JOS#@puL3Vb;$AS@8wYQG z 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 literal 0 HcmV?d00001 diff --git a/doc/docbook/devguides/images/evaluation_overview.png b/doc/docbook/devguides/images/evaluation_overview.png new file mode 100644 index 0000000000000000000000000000000000000000..f6f70e57c394c183f1045d13ec0e26741a585f24 GIT binary patch literal 81091 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 {=FH~dXtxe|U(4qZ(F={Mv3XvnWf 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 N7)=9oDbnWt{{R<%OU3{I literal 0 HcmV?d00001 diff --git a/doc/docbook/devguides/images/intermediate_linked_curves.png b/doc/docbook/devguides/images/intermediate_linked_curves.png new file mode 100644 index 0000000000000000000000000000000000000000..865cb4444663110a8e00fb1f6214e8af0708cc01 GIT binary patch literal 16825 zcmbt+2Ut`|v-V&BR3wPvkb_x}s30Iw&@}-n5+pMSN)*W%1$2~TASqczRFXr^sK9`L z&y_`@9yrm_x=xfJl&_etLp9Us_L%Nhe`@(cW!6ejzXb!p8G@Y3JSFu z1Am@Ul0(frfieyLBD1=3Ru+|5$ubB9a{UWuh4;c!D6@XU( zK*Alp8HJ(+VE(a+0}l;|t@No@JN{i&5rPrYN*bX}8=o z>gNPh(7Jl$NbfC-2#e%F_c%_&IPM&qfmwGBD>Z}(j#6Z7($oF7@2GoJh)DOS5Q3C~ zq$jDv@7=aAk_c>&p*6q?peZM?A}Ey1eYA)6b|4Ken>opmVM0zz+jyyc(jx<=^r<}2 zK$#Z9QH1dLr=rZk)%x|Wv=~YO(imt;0hILPyXezcG9qWhA}3z@uZyx5p&k)NmI``t z;%W5}sfa~d19-VlyBUS>4E2cocUOy^A@H)w6jIN*!Q(#^IS(Suo};ZOSILk@zjtwC zT=bvGkcyl|0LAa)f~5bWNWTsg@hd$E5ClL#00oE@p+QCj>@{Tms(5f6DB{hQ|-&b0+CLqG95-SM4DhtB1`%e&R zjd_HK@>zs!gc^xd)PK-KHPEdQCsBU;e_%nS_s=vhJ-&8pRWKK3gKKD#Na|e_>Vd^X z?ibEJzIK_|B8o629Y_*sLG|%9nbk_hZ^RMZpP7-9UdT+`@x-nQDr3ThC?BFsVaDQE z;tSQy&4-CF+|q)lDttpx6OQbuPIp{MAbo ztjPfv50*_RR8;nqzqm^g%ohL08wICS_16@3z*T|+=s%boD%}=~s^{zGp|`d`TkHa& z(>E*63|Sq*gPKSBON;Ja=n&lnYWX87V0ne*5fCO?mg>6g%M+Rp5kB0%JUSV?PGah{ zY=MLkQbbE9>sP*8Cm|72om3T$6v?siZ>_l3NhltkTC_S0MRzg|?ok%+H4?Y8x9_p! zEk@Sd_hhcBwDpk=bq_cdZ{K58iG1UimW@xw68Z2{i+;JX6(LQlk34n1JqSTMc@m#* z{b=by4tL@c79p_-sbQ3u>_tR&(o^{?7LiMO^?B`|i!=zDlmZ)1jv@p&(vw7NmE`X< zWQn%y-*j`QMNH%>YyaGhqX;pCYc&6{8>PSolmDfgETUrn#jwbLU=R-?^U4Y4b?r$) z-xIwtFSPo|e9`K!0z!mhO)}Cb|H&Lj(eI#_bM2$<51Q8b}qzYy`K6xisn z*7^5g|FPSjJO5+1HJS*u-@7T@B|+(l&h>qH8s-?~(b*pXcoMhx-}!*ZC`2D{qZNYm zzjF(T9x1{s$syshWMA}W}e z`QuTtTb`&@AIs#VQ%_s2!{ov=?&si8Wc~-^hWBc@_Le?u5@L^v^?jH{c+GRi@y*FM zyxA$6D1;mFS3WU2r5Z&z91P-7-*xQRvCA47%xP(9xZB@lnZ-Yfq^phc@te12Hs?9n z4OW?%nc>XZ(yy*KcbEA4H)%U13=`Cbk=ey*XR3F9N=`B-BGrlG#cWR<^-wlEzv#{yO?}LjoBSTFkaj{8m3dLG> z9eXHf*nAXSC!QUWux`?_(`vWta-pNEX>LXvMY`CUwr2{A<}Z%g&wYQ;Jzm1@fBDs! z`A={45n-~J+oJRGB+T>Y`{q9H&8L0N=q1aE_hV%~{earH=GED@X0m*oS4BnVshgKB zUBY2X{04gYoE$0MDPg}CKA0`%?m2%dBJ9Ox3hE*sMj`#`D4CkZMur@_G2X@A&hh0m zlcq#oMT?s^u`(V<`)ev)#wTm*>vucN3_tXspoyq2G3(3~J>$>DN`FYfM|?DM9|NB@ zOR>IyuvzPFRV|xqr^buu$H)EMa*yxV#jq+KHNl8$+I86AOk0xCCybTbZQIPoH43IR z1f1t?H%VPf#zlPGe6&bnww)eu!nRoyNEjO%J5HO>Fbcjd&p5vwmv22#9sO)2M5yYN zkhbf5ul>q=e|I7K%I)3W77~y3+A}T3X$Ze)=;(0z#oHopw)^t!{xoQ+IdQ;$SA^gRy|vw1%hd9=OR)h%Tv z=$OWj3Sekw0&^G_6Ch33D3Fx(o|+dU{#_rYUo_)2aK{_re=eE65t_Ee|faw{?ep z^9Q}lSFh3|i#jeTUo4-nJXTU0a{&YOxLb8^6xe5R{x0#>rk&${cGhAeGi?@Q*29Kh zUo`YKt$0Yyc_@sDSpF!&+7DUgbF0K-yOzFo`SkVmy?yuYA#^V;3*^4QE^hO)9^?AX zy07ASOdY$^Fz#(ql2o6|n@gdMuYz?H=j&r7_aK{v&-wd~%ZGQ9FY#+zeLWFVZczLB z+>__yBNlGr3_NPIzP`T578NqAz_yv^B-C{`l#eeH8j@U3xGp!jNu2RP(*Y(m?d>dk zwX83)wF^vf9r`BfU&gOfT%uby=9IU1absW;tbld$5Xq?jyyW(#M?YiQeOT3+Ci2p9{s7cQ=j;->i=E!7hEG zajhQ2NG%U48kv|336$^(S+ykJh$&Brs}twZ%03PnOFXX&II*gEDX$d~{E+@okmQU9 z`;x97i)ga-brTa4*QrkfvV(=-yw=}C*RZVR!ZpjB%v3x2+j z^IMc?uC0A4MVPO0T3Rpy5gkUe`h)T-!7f;V>45EI6trUAntH3mdE}Tzx`CC|IZ7C+0`(3dHwuCFM?(J!5)w!lbb$L;#bV zn8=F&*bn>IZ$4ysakhWBB}Itq&S%eU^WQvZ`e5%~h?Sacx0>&q%@^6nRpQSc*_LiL zG&N2^&2re~8B8fhQ@r}K2h^-(Gcz;JAkV}^Ip5gS&ZauBcuHaf4BqDppX<2y{L*Aq zKe812s$6GMmL{bLlROOGF-ZlE(?88wbDl{om(H31mh+SSMsht~d$mIdQ;LLup{As& zKyKAO_LcAKeb7hBZXx7Qq;saEUm4q@dZM^_h1kI^m(hA{X zC-!m0Dn>>u&W?@YhWuR?X95%1VSk1DOU$UHXJiB?#y2Hs1nx#%-B_nq z`cN*ls-~qpHM20!KCaLgFUpt-l@)zj)R;{$i{_aAis#S1e*HRM#+}sDpsEuND@c68#MQkg8)p<|c}5}Zq(F%e<1@M^pp3o>Ri1oh?XU!E$W`5= z0zc#LoA3gS_(TG+X&D(tr%xBQx#s)jSW1mQR17fZY)-vZw@u2hGuMHUZa&y;KKPJx z0oaUK>%D|0yjeX@L4`EAEjM+$4ub)^3V8kcyhDh~FYCbYO_5G}j2~KnE7EOcKAEOC zO2%WN<}AC!JGYX8<+g$wat3B*BLW^7mfd(*!!7mo0phm92yBNyaq-7q3Jn6IRN`DP z-KZ2+3f4x5OH3m5mF8*7mk$`@HM0cwaq;C%)w1QR3}njBjO2H*fz7Cm3UE3smYBlk zwlp4g{MMB-a;|+sk(b$%|h3&1?dc>q_j}&)@0kSkQ8*J1#67)Vm$Ay^M5+a!oRG zqy{8T?Cx+VNc6j0a*R82p*~hD+_rG1h=E)WFz&Q8F|-W~tHl|)m6ph5b@e1?g$6L* zpdpH|bT?QZ!SM8*f|+1(0L@;Vm0m=s(OE+D=?BT_>B3-%+qq9$PPw5jJr|UB(Z!g> z`zBQTj@WyCsVSfjc|Jd#nV#!yqDSn2yj;=pY?oVw zi5AQJuncUy@%pQZ^3WlPtqoS*J|<@7@)hfPFu{kGB!}%KLco;_=v|BzAA8nef4-w) z7#A5ko7*pe90%;ji}z{?U{=Lt70{O(ZcXFn&HeQmqo9#`^D;Qei^D0xwow-G8Y9_u zaUF>J@3vB5BzZNvZ3(e;!R$hMpFIK8)~0;h^Mp!29iA0r4R_~PA?|asgy+j{-kxi5 zD&aE;yx^gZPN)R4irWS(tK|4;jQY76hH02*9oWZ381P?t%L86W<~W`?$Hx0R==a5* zCD_*{F-D?J;;?W_V=e^uQAqx}n>*d8;qOpd*4ClFqC=S0DRGHpU;0MDNQW4$nda#d zr_RX;a|usD)(}l&SDzW4o=K6i1QW* zVDQbzBR0fA{aCBBZ#jtl~q|JXm#4naRT*N{tJoiBRYbn(_pFy`7VoM5(i8bhwQ^<;?+~`G$m?j<%9p@G;yEVymTA=!5&30di0V3 zufYk(Ka=%?FOm2CEDr`cc|Mn(J%Iv zWM^Swgv(3|ubV~hyVwY^(W_!zZiMBSL+mKnzh`-XnH#U5cUZ8?@lA}sbI-n**kXwV%YHD_=Le4n^5xI{0R68OYcU0fvSXl7RUDaG zUP%$aXlXC>er;@QTv})lRlG&z)-B4{LuO%(UISgBad)WobS}L)&(wHPCG_!!6Xt#wJgAH)7DgJUbK|F@1z< zftG5Bkqal2W(}ayZ3>?e4(@0+H?obP@w#MEu2rUDIauOwv7p*+e1S`t$ND>9p-+0 zH-$mQ+z5*?M%RXq)|(E0Y;8_$xa-Z8A-PHg%ef4>6qZiAI(kkJTx1IicM{4Oi%>}-b zEe&l68J*V`@KOt1P4um;t#=yZ)x-1qYNUR_!G6A*oiLXf+5O}!n`qzGIWg^`{4I=O}3K?2EelL@azFpC~!d)=IJ&$L$upa7~oOL72hPyJ(jc6DBf(edD zhlOyeKg>#OnI$znz3=IP3uP12Vi8a0O7~ifWZwHZXJr@JdkZ|)aLJ~r!MYrY-H1aE zXRGYGrja>+AHTYs?1mxhBsVx2*AFhb!9lA9Py(+frXW=C#(7xJ-iMY%mU<3JebHHn z(K+fu!#T_^0^-@hLw>EfvEG?Iq+#Sy=F7m#^(7)fjDYsO)OxRSH7L=oS*mInVMN!bl7 z=+xYeOwb-n6Tt;x{gH02Fu8`&N~NF$dtSLO`-(D6%3$J7k($Xa2ml zb&WjY`#=+<<(SKu(L*n^ryKynU>M&50)| ztM3Kk7;8xA+Z>32kC{upXZC@<&D;dwyC_!O>Mx|T=n z`n#4px@;C5JMk(rc!rg+&!~ams`?XfVojF9>_auHEqvy90M~Y_SBCESx66-Z6v3Y2 z;?ghiV--M7W^FOS+CNcb?!K(FkEqG2yK)zP#*Kq_98V0N;(876qp26TLkQ zHAOb-vy&e@9A8jH5fddetYXJkx}{bM@5Wbmk4;c~z-2DIV;N;+)_oBgsyKAy{8>1t zUnw|x25xwXxd0j&<~AJMQ*${>WTrg4Zp6#aL*H6gw-Dm#Attat{lXxwOToC_b zv>v%W-?(u7i#yo$Dk7afhvuVX_izcalB4`e&WGVk8CW)>{F2m+1yLu3i&^f~DGEM7 zx$}xN79tWXY;f`aMe;AW_zM93smlH6Rcp$q_6aOO=k`e?L7`ei?_en^s^50{58kBgokW&hx24ZNro1p~<^qu{y z@2_Z6a99E9$7Is%ULn5nK4kZ(Pz#5POnLOF_!&^uXE_ZqbQpIW%3X510JArGv(Hx4 z)Mac745`b5it?8wlEjd$kwou64UmS6DuMW%X9$wSfDCDa-3C$Z+t)wc;DPAJJ&1cu z)krh0waDY&h2MnYMA8hT`Fxc@8jhkZkb^L={6vreuI-V$gN08VFgj_(8!YcfeFAV0 z^*~0gEe9h5WUE&CU)7=^pW02CZ(7z{hqtW-D-lR`}mdAT`-gRc!HPxAk{J(15 z&ARFB8(Q%RXM?>MJvFkouW6lfst4nAc6@-j_^5{B*F7D7NIxOR=@tS$$7X5lHQnkK zwd_7Sy!7Kh2YcWyFU`nn`^iY*AVQS{MmqBWm3tXA?oL=2&!j*)X+rsgtHi@v z`PfG7|KKX%sNkZiIQ8osIBAegfdqgMA&ICWQ;+|w25nZSo^oxvWvN!@eQmDYX$z5c zh6skN9pIOvXqEBbdz)a2(Xeo6^^x@livP=$EoCla>njVJ}yIa+=BougHdJ<-i- z0^|TP#OaW!0Fl=FL383}{*9OQ=Ibw<=Kiq{&Be^+!z7Xr%bU;k7bPVCrPgx0cFTF@V8FV`A|`j_uyn zm*3?3M3nn?`2dF1A_pF%{9hGy?M8TEy?GE}_)Q=d23X2#REeYiFN+-bkH0YrGXhYP zreGCwBC!q3k)q#DSj>pTuuX|FMT?z||MmgdBhU%`e=IZ_OdAQd99F}ag?M1qSYb2(A@XsytqlOb9 zq4vJsKrcxy8Su{>9nhyPQ^3v#FS@+&+iW2!D%pdld#+$|Cpd54`R!j)qu#c2(CY%7 zYQ0~JdMG6a8CyXz!#X-lHO&JVESYrgmX{YGr$oet;K@K&L z*C7#(5)aq)EbEOBIBI}an0cfDUB*U6-)#wT`Y7!qfFh1T*da(pes+>y{-`NhVXAst z0XsP=FC(X8=ZCs&(zF;QvchkVSW%Fxw~e0`quj!ud5^+9AL*k{CDV7F4dp0Mx&<9Z zt@usGi^hZ72{n+@;gT~uyPxGY*C^wwGT4_V^E#$;TC18EYgsTpIWU;I$whN`iAk5&NxJR(=JaR4- zq`3-NMC<1`VpGJ#{bLo8OJb{{ze&Q`!-T1eRU}63FNt*Y)NV#GgB{3z`dr{fSpY=$ z!#mITu{e}PS}iY3TSB}?Ezi+Lou*=8dI$rzZ84MWwY9Ytys3M&?K$u7WL6QgfZ$jD zvp6|J{AaHnn4Z!nmc@Hi1D1!5X=eTkiR_A4a!5@5SNSY=m>|Gz_1Ps<#G=!^)1J9a zO8CF#ut;$r=>fNDUpJ?lX{4s56*nemEPfSHfNT9QxUI!Ogzu(_i8ov-=A22`#jTp? z16S%03E1a<>dH(KTq9;Dv)YzYg-%{N78SuT0-_pF+@kZpG7Y9oTKTm zY0}y|+hM08CkG)GJdz&6EMo4HGnOxoTwB>Mjh7%n7gzrGA#lABmc5f%IPBLHP~SP= zn}J)#V0Juzp65{g;>8Q(nxdv$XJ(4}N;EBm+Qx!aO9SmsiJpLfD;93?iXa&EG9lrZ zEkqt?%JXnI0p5b8i8<1(GLmHgxiBSg!SutaYf)RCr7(Za;g+%SBMGOOB4AhXXSc9L zC(Em|{(cY+$FthC(|PaZ^V7$nLxs&A#U*ARjj;dma1JhMwV8H(!1*1DwVfYrO^Yk9 zV`gH4q?yin--!HXBKD2+_R?ON{Si+3h4*(_E{T5<0|kr(9~zB>u=PQ(%Run?VJ@zFj~+cL z?dmEhDR+TOTkD=uy7%wjb9sEK=AOXC8jiGEUJ6$@3n?7oyExyBeP$}3|1y<7F)arJ zj!61W&jsRs{xoLd*Oh)CMO{%=#uanr+|&Iv0M0hlNM~N?(`V1Vw6%pgySUu?S^rM? z%9YyhPB8wXRo=gxLe}c>JSZ_wH?~y?I>N z^5x5yn%7+u_2I75dU3|g5jM)Xr?1&8f&&8st>=E}oxgO+rd-+-uGU{({QUVdB?|65 zy%8p3>z|(>F8t(Q=Vh7TwGkHey?BeUx1K_n6nOqbPqK&G+Z_?*k5o-ARdSO z&8D!?kZ8gaviS zrC!xwlamE=niAf=mA1A{#l|Tg{XQ~s%oRdd%#xClw^aqS3tUv1OElWr@y<%^Mz9&IlwDe)cx5;Qe6HE4ca z_cZ9Hz$e3xZ9*P$ z=ZcneK3Q*kBK7()nCcI3Rc?MOMIw4U9v2aVW0OJ;89Rzf(&>%=C_ZV`M^#}cw0*~p zaagAwSbhxNhkBd5o*w7Dd-tML;&8?dN0n7o+g{%?HIUice|UUtOp)nb!e*j)i@5U!^V}7Lrb}yg1kg# z*g~9AQtahH#|ksLTulP|=El2!tbpQRvAy?nKPNvwEds_3J;C&o+oDn49w|AKgQ~lgabP z5B&$XAf&VZ%z~e`8ie-b;6uet^?5L!9U)YRh{ z){^1he-wLja6uAma+|0AkD`Y+jg6DHiG+T|K72?<$0;JxbYr>XEW67VE?G@Y7Go0= z)<<6;pe7@y2Eoz{N_lB%_tIyON zg2g96r=as)u4Rl;YQ|R%SYC3TkPML(Pk3x(Fm|mA)_`YJrpDnO$sthBGHPmQEG1;= z^wm%lGL^&65P5QPvb3B^8^z)ad3}GV(YSEK9Q4?-@~?QG1;a^=bS$r_RxsWzvp=%BxGIpI;NhyMa~nn zP;hW0cj=ceWOU!Bn{@0<`s*(DBy3H{P|m!1n2P*#PD(0hC^=7vL08{cevmRnEc5f{C@ymm7%7>Xngr%9YV8DcG_mD3-%|KTordNZC1+8T)j(X4U`@)ZlN zdU~E&o2}=b9^SXl19tcsFchhfFncAgLHXJ>c?SoF*A2#yJE?ugVLs~~xJA3@Y9L|G z%vmcno$d9NcW+<6_N+HfYnx1okM}u$;ldXKL7UJ(PA}OSbBTau-0>49vSL5YRKALFkCFReY@OIBM}66{B?kydVA-biJ3 zeSLkVOQS+WmWc`Dp?&){%XzA5I}{)5?cWaT?PtA@9_YG^j;n@-2eFip9X6(v{o)0a z!HpYwuo+7$DpFgL?<6r!O0CQl>V<)i>4BwXXCF&m!3;O!6wIOz^YCn;;}jO2iD-iC z#@p(m$B!SEj#iS6YnZq~ySAzlwQ>&fI5=j*nwl~9?fn$;OtvQbS+W|B{=5V)FLj1R zSNgdW`*D3*x~ET{4!iDdd9h9IC*y=bwpkX(kU4kS8m4kX(zPXCx(7|rB9mgD- zp3VUI1u{2p9tI_(z?p0S9lYI#*% z+hwDzs={|Q)zq4!Q_U_N5YM5|@sl#DWEr=#F@dxl`PhgjPrfHRKf5$rQd}(Bex|0n znj>B!K`W>6dzOLFSHEz^ zK0bcZaq8`1H}B$mFJE$vhkMrC^lUM;wNHfO2Bl@dSD~(a7iLHlqLn=@r^0?)gNNbf zaVA>2H;R#dkTKeg_hrs>m^_$n)?^z(`J6UE(1Yzm;LjfDA+kpooYXNN=WFcr%u+Lt>@02qYgiq z&aj>9GdS3EU=x$_7tR;WL(XRn>_xh>v2~oskJpz)hc8`zEm3mktRD*<^`Q~g=g*(N z{E^`zsd{_*=e45ZVs)()GY=8)eQbwA3ay;MYZa!RGdL79anW!8IsWGtRa62&CD75+ zV|p{MJl!99$F1kd+1uUtov{)9&lDwb3+Op*1uB@H#5Zr>Qo<=I#hBvYvu%TegB`W% zJR0d#a-MKXjxN0Q>gCJ$2_7-A)?3lP#>YQF-gruY#Mv4H+5#1H^s91%;gW2 zERfmr@{b(n`8%P%AougpZ6_z2NS7IPI&E!jUPH6tW7is+nlNzsR~bBTPF7nx;#w}8 zZy+O!9DLW^;rS|Y^48YJ;U?e%WFgrG4^%};`GaAnVmeMKx5drPts+F=^l_iYh@Zhc z>OUp~O-)UUAmNqYaq8xPwb&m|J;DE~2ot4;^Q>LjHeFX&N$|74QQjGID;Y!<;uP0X0^kC=Zo<8AK;@Y?C^?=WanYnk-xHFaxv^Aons!`)BSqCzJ2;b zQPJ)sroCZ>Vy;R6@)0ziym+zQ;}h!K)2OB)#I1yX74hX3`+i6o#>139gk155>UhXQ z`<6G`Y0~6rCnG~Pm(czm{&xXRiLqIHq^5d2;zYWgN&FPyvo8An_#YRv;J9L*Vpz;i zRY=@%5)bzpA%|MhFAW}jUyt-_&kuK$b@T=X21=k^>F65j>y^O8KMAL$BE}+8cb82E zkj@c!Fz^Etz2!e<;a><8cQN_i7s4XLs9_ejn11wF9TEM8;#(k2@{GPd*YmG^3bC`( z(=j@3%Yj14!F^J}Qow-;PrsB2Pn{Fe?0!LkTkypI@-17czlMs4?sK}eVl^*B1xJEA hD=B!vyaxm_|GU~v6p@%RxWYo6lUI;Sl-0fW{{Z^ZL!Yf9y`MaQy<0+#GlmPi!-emoxyA5E-Viar{f2fwd4{@F;Ka;nOHd&C+3=+ z5WZsKf&X0s^d0qPOF6NTpe@?&YB&?`L}Ea8{~SO1_%2k7g8gvCG9_-YAu$94jhQ%1 zw`^6s6X9E(2)$tRpuUE?(c=jC+Ah7+P8yiDwhmDU70SW zdd3HSb(XKX#|$DsO(Z0HW4aQb?7B)QMi-kQB^-J_>M0fCQmkfUkp2Mt2!eMlZs5E9;YUZA`c<0Aaq#~BEzC^pjZ2Tw z#i#`@a%eaF<^E85f53eVE?Ms{F#B^^$m3OTnY74&HPb^9XS*9M(c=GOFtE4CYE>VKH8^R zGJbMVNg)krch^$zzZB%ifZVlJCXBp(yxYx%S(5KlT(H>>ZOA8wdu#G&@@TnCG9d4u z#em3#b;0Ex>I?qw2|g2SWG!puw3hDAucMEqdd43Fy{oO(Y2heFKKlhO{`!96&8p|M z)h>eCd~#fwP%`m&cs@UFc6B^A;o%L0#EJQUWW@{Rpe%9`mAQjU9P80|E5|Dgop-Z; z!rQ;8DXjT=p|#{N)6j2|1SS%ny%G`E-KYJSBK2h|K#LfGmDM*8-bR8`-m1(bno|DI zQW|vhUoEbXqa)W zm;Z6Zw#JwfwZogQ6#}Q_<*OXLs7)FPM?qC!a;j14EYvjj<#@poRsfp&BEmNczk^(aB z_2*2{nTQZUUUBkjdkNLkZi~p>gV{Nb=E;ZmmbwzexokVHDG7#TI@D7b_uu8XXU54k&4T1EH8@mjcJ3@i&#z!a?Yz(&ugj)Lvo1D5ukg++a+8*b-oW3X~x$b zumKf?yXs7r{|Q3PZW+B}PlI1AvmnBbgpD2LJG_s^KyKMWVNl^yM&tTP1FdX|FndK)NgpF!K#fY_OwXiWfbon%= zFd67Khyka5cs|V~YB8!!iB}o6S&5(x_^%9Dq=uwcy>!crnj7=;=7+*?RJa9EtarQ- z9T*oVN_SKev)*{bcg?p5*4|VUo_~h_a?4v znET)(WcuJAM_s~@!s|Px=GrQU-6EDD(^LL4xxa>&*T%RqN&on88k(z1aG+6nm7{q| z+KhF`r(-`_bvt4h`^1!#iQi@%HHr z=-OmpPDMn1-WNRI6H`o<98^GV;)`J-@?;f3{D%24xiB4=Gq2}B&K4ry`BBCebpPis*Vb6Ht z%H9&qr>sH?y5Zl<5U?8?frAt*{O`TDYp&P`ckzTq0-*lS9$riy#Hhg4y9l8PHaVat zgOH*Sqhu6@q4Pp8x}9E#hbgj+5AvrZjUKQ5@#pAK%1^LdE8mUpVT;WeIgLlUQ+$pklA*7d&Vg--Y>LVc}y##vpQT zNCb}>a9GwCMD&4=>4P5V^pM_<3ZbOjhhDOcuQo0&T6x>)#KCVD8Eq|z0SySTXB4`(LXQLZv`!>y@rO#^L0A~Ho*;euR=6zJzw|u z{X!OA{p%Cmu{u7e&v-3A{o>D}70(<{C$yfQMzS<3>5|bswKsd=hQl-g<)cjJoC}gO zxT2vCQMqW193a)}qDQ=0d{g0u;1WeACc5=Uv{`3cYZCVuGj!9{&|d(UbZR$AWbwa# zbRs(OmwvG)goXl*^>zev1Y$iQI8d+WUFU4{bk7G}e)^*&Q1?WP{qm*}j%`zOWUz{? z+j_`8cXqYpYJ%z5!tbY#FeJ~cz^7$G>S`*$-m|^lu5{_`Y1SB`W&adKTG0%#Ay}3R zQ#MJOZ6EzC^fa>RTF-B6n;?<$?{HFp#go52@H`dB$t%wrmF@RGI0_1+V{uZ!IRRv+y>a)P`t~ z-0XObHVmHt5uV2_IxNr^Cr@-vUVW-uZ*0d8DV+j$m;Q7LE2#;LE*rKv%G9{QG->_8 z{Kl&kt{Ku{bXL_9(;3M??dh??#TOZ0&P*weYWMu!AdB#{xghQ!U>GA~jicL79-WVA zJA^@^vTcv7@)@YaTphU<`|N^DmO z1xt8iK3bh4Xghx$-8!)e_C8a3fFbF&ykc!sCM1!(zDB*<@n^3c7}`iP77T)U_izZG zpCa7^JCu#}yVMHvnR>3!IMEu`d<`m?>4r-WjOLjWEhtJPvLEFJ5Sl$Blbwi!f@jeD zM%I2lcI?FC;g?2&%dhdFQ{KEof`*T=5w=qKarlH;7kuQvt@%%Q=(B3BCXjJ2>pEZp z>i{E+w*86OydzYdDB8eOdeQB|{94@$x+nvy&CpmUKt*^`u=g)*j1;wmWuu?`48{SW z`hvyV4JNI1^WeEwtLg#uA$u99gQSd+4Ey_}B7CH^aH~BJX1}q80zQ$68hqnNiZd;t z3;0NWnvyzrki#|l9!Hp7S|pG7uy@;^pkf}9y3nMZ1r=TJ^-UvKNsG^vzS7i{)W#Pr zVlFBI4_SL~e{B%YP4)c7u<&*p+6DO37G(mh?lfT{aViBcPvhTm&x z%XSJ>aipfm_}8Jic+0W026b7*a6%xb(`oV1u;#OxLMo8@J+j#n9V1Y``O|jCHaIUF za;KZ1{JTM_*I*KOpTmo*;I}n@kMik37kgF?zb*n`xp!u8=ccYZ5o*za!})_i*IYI> zr0!zqXqoWu}mEZRE%${=qBq}o?^x>FP%1#LV-x811L4uT>cWg0VnYY3OK%+5T&i-+^8&4dc% z7eHX|pjBS8+*@;X{yU;Y@5JIrxxIbqQUJYSVQHaf*VcM+UKiXZ)V0Y2Ha|VJGGf8D zd*}B!$USF5o?#M+?!Gk?p!+qTdGq`YO#yZ+v$gv2E+FVV`RC}K9gX0WNx$tCihH`? z!0cq-)uZ%QyXRpLVTh}pF=@7gc~$jGp3;jXpKiE!?e|RHu4(O3h;u7B$W_hC!p2Bk zW<^gABl*fEbVdYuq@CJ47iN&<=Ry`S{cSE}(FFq~{FwPrW_6MRWN?cL0$L{H*6jU@ zuUlZPjy7W09t6p6-yJEtOZGw1z2=y~f9acQ5BaJM!`6<3PYmiJY?=NiP)-ia2Y=|D z7u_UvJ*&pn=>OFeq-S}Qc5k2y#2o+Oem~Dj+uSiE1KC8~jM!H#b+)?MQXWj!4px!r zBE93*SD%+I-TCb%d3i^g6!&I%ZQ`Z^V@a@Cr$>dIHfQ`~dgp9&yn}6-l*OZXjnF<> z_U?fo=-Lc=UMT<>9AazNyyq&Gz6F6(~IxcEn4f=oYC~80f;ET;HiJCU3<+ zO)t)kS6#934akBl8evEQvWbF%l#z=or*SbLj~+avxXeZ2eETR9dn?WtZ%s&3>It$Q zkPS+@KMxYk<0(o#2z)R}w+wsFrC|LsXXcWaeAG>__tqs1*@>)bNOGo>&!_bN+cRDz zO5grY%%0r}bd_IlRWnp++-i>mnbR2T2_8&1^0EIxt4Uds13`MZm7%|4`3(UJ7fY!L z=a#PT-On$(N;CywScaIEbPmFAcJzOjF!I|!tUjqT8`)ME6nPGm+~mi23!lXL*RX^Gv=B-G<^UbkKJx|T=F-?|Fox6xa|aw9=hF5K(XtNRI`L{be3w#=A&NM4TJ#Vlo?N@HF*;IHxis|ZcPqRO8>KZ@h4iGIxH6{7q(|p?u-ySQr`z{p+RWl@~=M)NO_L3WtWpYSWnhdV(Tg&nG*c-Ni>HN)f5<*P3#bRA`$!hsb@nkOh*&lhj!KsFWwbKqs0EFax2r|Q65+$vHG_?bGoeJ_kJ z&d1BouN=G^{G0U6 z*nNH31y;Mc`Z~+s_jSR|%@7!U9>}bQy>QCz^iD$oa9_BQg3dV3N zq>yYY&o5IGk<%4Ox(t*R2O?cB1DbHx^P7%A-e*pRbJ zyfLsX8~Yw)dam@?v|ZLH)Gw|2;^T{qd8>`ryld0LXv18gTVG7?HU>(G(_5fGlVWIg zR9b~HydDH)rU=+ZU@{x~k0(yimT8^^Y-Z+SrIW{8-^oS!c0@dfVKuTcz8GuO8!HdM|JH20 z*>(+O%0OM>pq!IY4h+;~4vLhF@@1gba!{~jR1^cH#_1hZpl!j>4p3=@%J7?A@H|t* zmG$ti2OCiP10Hk`JW&B<*x7y2wfQso5)6$>rG>7C2WMg#p15tB0q|;qfY!#CciWlS zjbgD}>6&)|N)bL9Y=9NX+igm5o`d<;_n4ZgH6%Y{K&&rNJ<19-MdrMPp*t*5Rxkt>vk1;DKNA#NO7T{hW3pz6j-)#pVS3vRoyYBd0`XsYVYqHG49 zxiU42@t+NN-xC4YI+6Qf`uJ%^?`|q`Kbw3VL%V58bV!DHWMRekg?}r)0Vj4%5zKpjD>x_~hPy zKf)UiHb5+6@4OH8?0xNsXuQW9H-^olIwHg$T=6b0EKAVG+S4nG5o&Bb<6P{s6RcZk zr@ahF2KO9}ZCu}8u1}KoPTqjd8VJ5WUf*NEyFI?~_nO+z-S8${5ncsuXdS>6wr65} zF$>_o6zhI|%3T2q>l;1@5}Jr-yS}82)Is_+!zAz^7`?sFzQ3;y;vrc0Z-Bn9f2u!} znHvTjb~zLctQ@XUk+ivPOd1&V!2_cQ=bIwPQs^mC*59=JDH{Yi$H8(Dy2)SW-#qaA<5!)2iO z^h5K8T$*DXbS!=;(c9_DVSCtw+5lW~e~F82BCi_dgX_vX|11E(m^JLOmR$PeeEEr0 z9rc1g?mc;=az`VI_xk8co5w+^T9w97mZZ^D_wjQ(&H?xW7}n6<@WoJN+$l(I)*qx_W+0e4cQ{m;47k! zw69w}!d&Ar^|&`h@lR{VtJnV>xbHIE<0@78|9fFR)jn>%YTimt?$(O^?;UG})uaES R!LMO*u1DRER5_xP{|5~4ul)c3 literal 0 HcmV?d00001 diff --git a/doc/docbook/devguides/images/ssx_10_vs_13.png b/doc/docbook/devguides/images/ssx_10_vs_13.png new file mode 100644 index 0000000000000000000000000000000000000000..164410fb1651906b46d265b57cf9725b1241d198 GIT binary patch literal 13813 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 literal 0 HcmV?d00001 diff --git a/doc/docbook/devguides/images/ssx_transverse_event.png b/doc/docbook/devguides/images/ssx_transverse_event.png new file mode 100644 index 0000000000000000000000000000000000000000..f4019497df61c04bf28f209f77721fc22d60a566 GIT binary patch literal 9808 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

{;&=AdcD9oIQeVKNrRvJ4Y84@hUta|lb#2tU! z)=Gc>%kvG|;97|7i{7#VzQxtQE}I%^yeq`|!S1xBJZ#Y=Kl4{Flm3CBb|+{9ImwbP z?f`Gei%0cz+f63K!%gamh2>GX)T|pMeZn(X#V`t6&Z$A2UdMp zi7U&R6{>2ys~1%;x(>J_d3V)wi5I{o?bUO0^_@B${DN=7p=;!TYHbbPd5?{-8Y(X^ z`)7hV5KexrP7n4kHj9eM%ZiV9x_uKSiVM@+8ie?Jd1=*HT(*<7Bk^y4&yu1zm=L8t zzds?!($&m3j-gfX6A#>-?VO2-@IPqF(f);ZZifolcU(h+PSx#|pIj!~Blt@nOx8n8 zAPIgM{MWmm2JLnmwFzdaUL&qQWpGxhrsCkqU;SxGsu|D^^n^N(lt;WTS$OELZ*Yd^+VEt7(MFdEFYoYH^2U2dUq||GnDT4p1w`G0upXH5TWyM3%}8QVJ(a@HvCinI zb%N@Zj`J<`&)mC5cg3^#wdRq5ODBS*o>m2fS9kWEPX`$wjrii|#6!>{C=%Fp1;7d3 zkDt#RW+#SX2 COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/asc-nmg.xml b/doc/docbook/system/man1/asc-nmg.xml index ba44880ca7b..38727c763b7 100644 --- a/doc/docbook/system/man1/asc-nmg.xml +++ b/doc/docbook/system/man1/asc-nmg.xml @@ -110,7 +110,7 @@ database file. COPYRIGHT -This software is Copyright (c) 1994-2020 by the United States +This software is Copyright (c) 1994-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/asc-plot3.xml b/doc/docbook/system/man1/asc-plot3.xml index 86256b09f6b..d2f93ce8d24 100644 --- a/doc/docbook/system/man1/asc-plot3.xml +++ b/doc/docbook/system/man1/asc-plot3.xml @@ -56,7 +56,7 @@ Optional white space and lines beginning with the comment character COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/asc2dsp.xml b/doc/docbook/system/man1/asc2dsp.xml index c38525520d6..1213da18c2b 100644 --- a/doc/docbook/system/man1/asc2dsp.xml +++ b/doc/docbook/system/man1/asc2dsp.xml @@ -79,7 +79,7 @@ COPYRIGHT - This software is Copyright (c) 2012-2020 United States Government as + This software is Copyright (c) 2012-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/asc2g.xml b/doc/docbook/system/man1/asc2g.xml index 3b98309cebc..9cee34908ec 100644 --- a/doc/docbook/system/man1/asc2g.xml +++ b/doc/docbook/system/man1/asc2g.xml @@ -97,7 +97,7 @@ COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States Government as represented by U.S. Army Research Laboratory. +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/benchmark.xml b/doc/docbook/system/man1/benchmark.xml index a72e21215c1..249903e06be 100644 --- a/doc/docbook/system/man1/benchmark.xml +++ b/doc/docbook/system/man1/benchmark.xml @@ -199,7 +199,7 @@ benchmark analysis, leaving only the summary file and any COPYRIGHT -This software is Copyright (c) 2006-2020 United States Government as +This software is Copyright (c) 2006-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bolt.xml b/doc/docbook/system/man1/bolt.xml index 6469094ea18..50f42ecd234 100644 --- a/doc/docbook/system/man1/bolt.xml +++ b/doc/docbook/system/man1/bolt.xml @@ -168,7 +168,7 @@ number of bolts: 3 COPYRIGHT - This software is Copyright (c) 2005-2020 United States Government as + This software is Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bot_dump.xml b/doc/docbook/system/man1/bot_dump.xml index 06327269ebc..7c9e9237b45 100644 --- a/doc/docbook/system/man1/bot_dump.xml +++ b/doc/docbook/system/man1/bot_dump.xml @@ -91,7 +91,7 @@ $ bot_dump -o some_bot_dump.dxf -t COPYRIGHT -This software is Copyright (c) 2008-2020 by the United States +This software is Copyright (c) 2008-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/brep_simple.xml b/doc/docbook/system/man1/brep_simple.xml index bdd218b1f85..1d47017090a 100644 --- a/doc/docbook/system/man1/brep_simple.xml +++ b/doc/docbook/system/man1/brep_simple.xml @@ -61,7 +61,7 @@ COPYRIGHT - This software is Copyright (c) 2004-2020 United States Government as + This software is Copyright (c) 2004-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/brlcad-config.xml b/doc/docbook/system/man1/brlcad-config.xml index 13f25c9e282..44ebc8cd040 100644 --- a/doc/docbook/system/man1/brlcad-config.xml +++ b/doc/docbook/system/man1/brlcad-config.xml @@ -90,7 +90,7 @@ creating a program that refers to BRL-CAD headers COPYRIGHT -This software is Copyright (c) 2007-2020 United States Government as +This software is Copyright (c) 2007-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/brlcad.xml b/doc/docbook/system/man1/brlcad.xml index 0558592387a..b999bdfe02d 100644 --- a/doc/docbook/system/man1/brlcad.xml +++ b/doc/docbook/system/man1/brlcad.xml @@ -399,7 +399,7 @@ a convention for the number of frames/reel exists: COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/brlman.xml b/doc/docbook/system/man1/brlman.xml index 2cfe71521e7..f4408286839 100644 --- a/doc/docbook/system/man1/brlman.xml +++ b/doc/docbook/system/man1/brlman.xml @@ -93,7 +93,7 @@ COPYRIGHT - This software is Copyright (c) 2016-2020 United States Government as + This software is Copyright (c) 2016-2021 United States Government as represented by the U.S. Army Rebrlman Laboratory. diff --git a/doc/docbook/system/man1/burst.xml b/doc/docbook/system/man1/burst.xml index 068bb452e17..30ea6713ad7 100644 --- a/doc/docbook/system/man1/burst.xml +++ b/doc/docbook/system/man1/burst.xml @@ -1113,7 +1113,7 @@ depth 52.88mm at (-418.907,-812.8,0) x-2 y1 lvl1 purpose=spall ray COPYRIGHT - This software is Copyright (c) 1984-2020 United States Government as + This software is Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bw-fb.xml b/doc/docbook/system/man1/bw-fb.xml index 84be0c74529..b0bd48cbb3e 100644 --- a/doc/docbook/system/man1/bw-fb.xml +++ b/doc/docbook/system/man1/bw-fb.xml @@ -136,7 +136,7 @@ with scanlines being written from the bottom to the top of the image. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bw-pix.xml b/doc/docbook/system/man1/bw-pix.xml index 0083a1b2d01..93ceec08e7f 100644 --- a/doc/docbook/system/man1/bw-pix.xml +++ b/doc/docbook/system/man1/bw-pix.xml @@ -58,7 +58,7 @@ is given. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bw-png.xml b/doc/docbook/system/man1/bw-png.xml index 5cc8f91ecee..4c997f3a65a 100644 --- a/doc/docbook/system/man1/bw-png.xml +++ b/doc/docbook/system/man1/bw-png.xml @@ -83,7 +83,7 @@ pixels wide COPYRIGHT -This software is Copyright (c) 1998-2020 by the United States +This software is Copyright (c) 1998-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bw-ps.xml b/doc/docbook/system/man1/bw-ps.xml index 3522f2050d1..43da5690387 100644 --- a/doc/docbook/system/man1/bw-ps.xml +++ b/doc/docbook/system/man1/bw-ps.xml @@ -99,7 +99,7 @@ on an 8.5 x 11 inch page. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwcrop.xml b/doc/docbook/system/man1/bwcrop.xml index 66e41076efa..2cf745fb3d2 100644 --- a/doc/docbook/system/man1/bwcrop.xml +++ b/doc/docbook/system/man1/bwcrop.xml @@ -74,7 +74,7 @@ interpolation is done by this program. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwdiff.xml b/doc/docbook/system/man1/bwdiff.xml index 886ba28b7f5..4257e5e820a 100644 --- a/doc/docbook/system/man1/bwdiff.xml +++ b/doc/docbook/system/man1/bwdiff.xml @@ -109,7 +109,7 @@ gencolor 107 93 70 | bwdiff -e file.pix - | pix-f COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwfilter.xml b/doc/docbook/system/man1/bwfilter.xml index 220e2d3f49f..ec9131cf700 100644 --- a/doc/docbook/system/man1/bwfilter.xml +++ b/doc/docbook/system/man1/bwfilter.xml @@ -124,7 +124,7 @@ flag displays the max and minimum values and the kernel information on standard COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwhist.xml b/doc/docbook/system/man1/bwhist.xml index 4e1d01d9db8..aaf160111d0 100644 --- a/doc/docbook/system/man1/bwhist.xml +++ b/doc/docbook/system/man1/bwhist.xml @@ -57,7 +57,7 @@ flag will output the histogram values on the terminal. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwhisteq.xml b/doc/docbook/system/man1/bwhisteq.xml index 1d59b6d9e47..4170e5539de 100644 --- a/doc/docbook/system/man1/bwhisteq.xml +++ b/doc/docbook/system/man1/bwhisteq.xml @@ -54,7 +54,7 @@ flag will output the old and new histogram values on the terminal. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwmod.xml b/doc/docbook/system/man1/bwmod.xml index 5a470002bf9..9c11c6ca7a5 100644 --- a/doc/docbook/system/man1/bwmod.xml +++ b/doc/docbook/system/man1/bwmod.xml @@ -165,7 +165,7 @@ above get higher. A file.bw for this example can be COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwrect.xml b/doc/docbook/system/man1/bwrect.xml index 62ead575502..26ab4ba064b 100644 --- a/doc/docbook/system/man1/bwrect.xml +++ b/doc/docbook/system/man1/bwrect.xml @@ -89,7 +89,7 @@ so that shell scripts, etc., could use this. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwrot.xml b/doc/docbook/system/man1/bwrot.xml index 8ba73a5117e..3b090ab535d 100644 --- a/doc/docbook/system/man1/bwrot.xml +++ b/doc/docbook/system/man1/bwrot.xml @@ -97,7 +97,7 @@ algorithms could remedy this. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwscale.xml b/doc/docbook/system/man1/bwscale.xml index 7cd6c22e315..5ce5e33c7f3 100644 --- a/doc/docbook/system/man1/bwscale.xml +++ b/doc/docbook/system/man1/bwscale.xml @@ -101,7 +101,7 @@ Optional cubic interpolation would be nice. COPYRIGHT - This software is Copyright (c) 1984-2020 United States Government as + This software is Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwshrink.xml b/doc/docbook/system/man1/bwshrink.xml index 55ad30d08ef..6f4ffb3210c 100644 --- a/doc/docbook/system/man1/bwshrink.xml +++ b/doc/docbook/system/man1/bwshrink.xml @@ -75,7 +75,7 @@ factor, incorrect and bizarre output is generated. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwstat.xml b/doc/docbook/system/man1/bwstat.xml index 395fcc6f1b5..5fd237fdca6 100644 --- a/doc/docbook/system/man1/bwstat.xml +++ b/doc/docbook/system/man1/bwstat.xml @@ -72,7 +72,7 @@ file sufficient. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/bwthresh.xml b/doc/docbook/system/man1/bwthresh.xml index d5e7d31353e..aee65b1195e 100644 --- a/doc/docbook/system/man1/bwthresh.xml +++ b/doc/docbook/system/man1/bwthresh.xml @@ -82,7 +82,7 @@ pixel_out = 255 COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/cad_boundp.xml b/doc/docbook/system/man1/cad_boundp.xml index 1f7aa7652cd..0488fc9ea7e 100644 --- a/doc/docbook/system/man1/cad_boundp.xml +++ b/doc/docbook/system/man1/cad_boundp.xml @@ -202,7 +202,7 @@ is produced. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/cad_parea.xml b/doc/docbook/system/man1/cad_parea.xml index 2830ab385a0..d0e3372cb23 100644 --- a/doc/docbook/system/man1/cad_parea.xml +++ b/doc/docbook/system/man1/cad_parea.xml @@ -110,7 +110,7 @@ of a degenerate polygon. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/canonize.xml b/doc/docbook/system/man1/canonize.xml index 5fa598e6381..cd50d9079d1 100644 --- a/doc/docbook/system/man1/canonize.xml +++ b/doc/docbook/system/man1/canonize.xml @@ -252,7 +252,7 @@ This avoids wasting paper (printing an image using incorrect dimensions). COPYRIGHT -This software is Copyright (c) 1992-2020 by the United States +This software is Copyright (c) 1992-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/coil.xml b/doc/docbook/system/man1/coil.xml index 64cbe550da1..dbcd98eaee6 100644 --- a/doc/docbook/system/man1/coil.xml +++ b/doc/docbook/system/man1/coil.xml @@ -180,7 +180,7 @@ COPYRIGHT - This software is Copyright (c) 2009-2020 United States Government as + This software is Copyright (c) 2009-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/comgeom-g.xml b/doc/docbook/system/man1/comgeom-g.xml index 3fa1cbb31fe..64df939bd56 100644 --- a/doc/docbook/system/man1/comgeom-g.xml +++ b/doc/docbook/system/man1/comgeom-g.xml @@ -93,7 +93,7 @@ input may produce amusing results. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/conv-vg2g.xml b/doc/docbook/system/man1/conv-vg2g.xml index f324d593e09..3ce863f3b72 100644 --- a/doc/docbook/system/man1/conv-vg2g.xml +++ b/doc/docbook/system/man1/conv-vg2g.xml @@ -55,7 +55,7 @@ by suitably modifying the source code to the converter. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/cv.xml b/doc/docbook/system/man1/cv.xml index bb6cdd24988..68361968469 100644 --- a/doc/docbook/system/man1/cv.xml +++ b/doc/docbook/system/man1/cv.xml @@ -73,7 +73,7 @@ edited by D. F. Rogers, R. A. Earnshaw, Springer-Verlag, 1990 COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/db.xml b/doc/docbook/system/man1/db.xml index a806b089755..69cfeba7c23 100644 --- a/doc/docbook/system/man1/db.xml +++ b/doc/docbook/system/man1/db.xml @@ -166,7 +166,7 @@ COPYRIGHT - This software is Copyright (c) 1984-2020 United States Government as + This software is Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/dbclean.xml b/doc/docbook/system/man1/dbclean.xml index 3fccb1d56b9..5470a5ca0bc 100644 --- a/doc/docbook/system/man1/dbclean.xml +++ b/doc/docbook/system/man1/dbclean.xml @@ -80,7 +80,7 @@ packages instead. COPYRIGHT -This software is Copyright (c) 1991-2020 United States Government as +This software is Copyright (c) 1991-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/dbcp.xml b/doc/docbook/system/man1/dbcp.xml index 2380d3bd4b8..d59df2ec169 100644 --- a/doc/docbook/system/man1/dbcp.xml +++ b/doc/docbook/system/man1/dbcp.xml @@ -84,7 +84,7 @@ Chase Manhattan Building, New York, NY) COPYRIGHT -This software is Copyright (c) 1993-2020 by the United States +This software is Copyright (c) 1993-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/dbupgrade.xml b/doc/docbook/system/man1/dbupgrade.xml index ff98550ced7..ac31eefe1c7 100644 --- a/doc/docbook/system/man1/dbupgrade.xml +++ b/doc/docbook/system/man1/dbupgrade.xml @@ -67,7 +67,7 @@ Descriptive messages are printed on standard error (file descriptor 2). COPYRIGHT -This software is Copyright (c) 2006-2020 by the United States +This software is Copyright (c) 2006-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/decimate.xml b/doc/docbook/system/man1/decimate.xml index f83f00d1ccd..d74e7cd7ce3 100644 --- a/doc/docbook/system/man1/decimate.xml +++ b/doc/docbook/system/man1/decimate.xml @@ -66,7 +66,7 @@ format file, use a value of 3 for COPYRIGHT -This software is Copyright (c) 1992-2020 by the United States +This software is Copyright (c) 1992-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/dpix-pix.xml b/doc/docbook/system/man1/dpix-pix.xml index 932e2d157b3..569c6f4a936 100644 --- a/doc/docbook/system/man1/dpix-pix.xml +++ b/doc/docbook/system/man1/dpix-pix.xml @@ -42,7 +42,7 @@ Standard input is read if a file name is not supplied. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/dxf-g.xml b/doc/docbook/system/man1/dxf-g.xml index 61cc6dc2705..064c444b2d3 100644 --- a/doc/docbook/system/man1/dxf-g.xml +++ b/doc/docbook/system/man1/dxf-g.xml @@ -147,7 +147,7 @@ $ dxf-g sample.dxf sample.g COPYRIGHT -This software is Copyright (c) 1993-2020 by the United States +This software is Copyright (c) 1993-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/enf-g.xml b/doc/docbook/system/man1/enf-g.xml index 56136fa9070..d199f6ef911 100644 --- a/doc/docbook/system/man1/enf-g.xml +++ b/doc/docbook/system/man1/enf-g.xml @@ -72,7 +72,7 @@ $ enf-g sample.enf sample.g COPYRIGHT -This software is Copyright (c) 2001-2020 by the United States +This software is Copyright (c) 2001-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fast4-g.xml b/doc/docbook/system/man1/fast4-g.xml index c514b624a26..e45dd178797 100644 --- a/doc/docbook/system/man1/fast4-g.xml +++ b/doc/docbook/system/man1/fast4-g.xml @@ -140,7 +140,7 @@ April 1994 COPYRIGHT -This software is Copyright (c) 1994-2020 by the United States +This software is Copyright (c) 1994-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fb-bw.xml b/doc/docbook/system/man1/fb-bw.xml index 9899e9eef23..4d94b275606 100644 --- a/doc/docbook/system/man1/fb-bw.xml +++ b/doc/docbook/system/man1/fb-bw.xml @@ -84,7 +84,7 @@ and COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fb-fb.xml b/doc/docbook/system/man1/fb-fb.xml index 1b22c09468c..a1f84dfdb1b 100644 --- a/doc/docbook/system/man1/fb-fb.xml +++ b/doc/docbook/system/man1/fb-fb.xml @@ -50,7 +50,7 @@ flag sets verbose mode. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fb-pix.xml b/doc/docbook/system/man1/fb-pix.xml index c0d8efc2d07..d9ea2917d22 100644 --- a/doc/docbook/system/man1/fb-pix.xml +++ b/doc/docbook/system/man1/fb-pix.xml @@ -80,7 +80,7 @@ output file. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fb-png.xml b/doc/docbook/system/man1/fb-png.xml index 75047a771fb..865990878c3 100644 --- a/doc/docbook/system/man1/fb-png.xml +++ b/doc/docbook/system/man1/fb-png.xml @@ -93,7 +93,7 @@ is the default). COPYRIGHT -This software is Copyright (c) 1998-2020 by the United States +This software is Copyright (c) 1998-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbcbars.xml b/doc/docbook/system/man1/fbcbars.xml index d59daa12939..36b1d690018 100644 --- a/doc/docbook/system/man1/fbcbars.xml +++ b/doc/docbook/system/man1/fbcbars.xml @@ -93,7 +93,7 @@ sets both the height and width to the size given. COPYRIGHT -This software is Copyright (c) 1988-2020 by the United States +This software is Copyright (c) 1988-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbclear.xml b/doc/docbook/system/man1/fbclear.xml index 66797fc7887..94e8aa9d831 100644 --- a/doc/docbook/system/man1/fbclear.xml +++ b/doc/docbook/system/man1/fbclear.xml @@ -81,7 +81,7 @@ options can be used to set the size of the output frame buffer. COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbcmap.xml b/doc/docbook/system/man1/fbcmap.xml index 0034658df0f..7dffa89f931 100644 --- a/doc/docbook/system/man1/fbcmap.xml +++ b/doc/docbook/system/man1/fbcmap.xml @@ -143,7 +143,7 @@ and 18% neutral grey, respectively. COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbcolor.xml b/doc/docbook/system/man1/fbcolor.xml index 7b8d6bd525a..3c39070caa8 100644 --- a/doc/docbook/system/man1/fbcolor.xml +++ b/doc/docbook/system/man1/fbcolor.xml @@ -125,7 +125,7 @@ exits the program. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbed.xml b/doc/docbook/system/man1/fbed.xml index 63755b66a87..331b7152fa7 100644 --- a/doc/docbook/system/man1/fbed.xml +++ b/doc/docbook/system/man1/fbed.xml @@ -671,7 +671,7 @@ for the length of the macro startup file. COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbfade.xml b/doc/docbook/system/man1/fbfade.xml index 8e9c02da195..5a7f989951e 100644 --- a/doc/docbook/system/man1/fbfade.xml +++ b/doc/docbook/system/man1/fbfade.xml @@ -149,7 +149,7 @@ Gary S. Moss, BRL/VLD-VMB COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbframe.xml b/doc/docbook/system/man1/fbframe.xml index 54c7a7007be..8b7e8aa6480 100644 --- a/doc/docbook/system/man1/fbframe.xml +++ b/doc/docbook/system/man1/fbframe.xml @@ -77,7 +77,7 @@ option specifies both the height and width of the frame to be drawn. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbfree.xml b/doc/docbook/system/man1/fbfree.xml index 20e422e6ea2..f532ccc3ffd 100644 --- a/doc/docbook/system/man1/fbfree.xml +++ b/doc/docbook/system/man1/fbfree.xml @@ -45,7 +45,7 @@ on, e.g., Sun and SGI frame buffers. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbgamma.xml b/doc/docbook/system/man1/fbgamma.xml index b34ee047067..659249a05d3 100644 --- a/doc/docbook/system/man1/fbgamma.xml +++ b/doc/docbook/system/man1/fbgamma.xml @@ -141,7 +141,7 @@ colors by moving them closer to the white point. COPYRIGHT -This software is Copyright (c) 1987-2020 by the United States +This software is Copyright (c) 1987-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbgrid.xml b/doc/docbook/system/man1/fbgrid.xml index f619bf6ddbc..02956e93bf0 100644 --- a/doc/docbook/system/man1/fbgrid.xml +++ b/doc/docbook/system/man1/fbgrid.xml @@ -72,7 +72,7 @@ for the old cross grid pattern. COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbhelp.xml b/doc/docbook/system/man1/fbhelp.xml index 865b8c0d467..3c16cec88b7 100644 --- a/doc/docbook/system/man1/fbhelp.xml +++ b/doc/docbook/system/man1/fbhelp.xml @@ -54,7 +54,7 @@ selected device may have. COPYRIGHT -This software is Copyright (c) 1988-2020 by the United States +This software is Copyright (c) 1988-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fblabel.xml b/doc/docbook/system/man1/fblabel.xml index d7039d944aa..4dd5532bf35 100644 --- a/doc/docbook/system/man1/fblabel.xml +++ b/doc/docbook/system/man1/fblabel.xml @@ -111,7 +111,7 @@ to avoid having to create a font converter. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbline.xml b/doc/docbook/system/man1/fbline.xml index d1b2e824ba5..6c344a96f95 100644 --- a/doc/docbook/system/man1/fbline.xml +++ b/doc/docbook/system/man1/fbline.xml @@ -99,7 +99,7 @@ options. COPYRIGHT -This software is Copyright (c) 1988-2020 by the United States +This software is Copyright (c) 1988-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbpoint.xml b/doc/docbook/system/man1/fbpoint.xml index b5f2ea373de..16c91600da6 100644 --- a/doc/docbook/system/man1/fbpoint.xml +++ b/doc/docbook/system/man1/fbpoint.xml @@ -120,7 +120,7 @@ there. COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbserv.xml b/doc/docbook/system/man1/fbserv.xml index 413cb6d8357..4e0ef5ffc5d 100644 --- a/doc/docbook/system/man1/fbserv.xml +++ b/doc/docbook/system/man1/fbserv.xml @@ -104,7 +104,7 @@ with it. Any access of a framebuffer specifying port 0 will use the already open COPYRIGHT -This software is Copyright (c) 1994-2020 by the United States +This software is Copyright (c) 1994-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbstretch.xml b/doc/docbook/system/man1/fbstretch.xml index 5b65f61c618..9bdc4e81d5b 100644 --- a/doc/docbook/system/man1/fbstretch.xml +++ b/doc/docbook/system/man1/fbstretch.xml @@ -192,7 +192,7 @@ to fill a 1280-by-1024 frame buffer. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/fbzoom.xml b/doc/docbook/system/man1/fbzoom.xml index a49a629d406..5c0849a5608 100644 --- a/doc/docbook/system/man1/fbzoom.xml +++ b/doc/docbook/system/man1/fbzoom.xml @@ -212,7 +212,7 @@ but not the image in the frame buffer. COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-acad.xml b/doc/docbook/system/man1/g-acad.xml index 723a00e3d30..f3112294e4b 100644 --- a/doc/docbook/system/man1/g-acad.xml +++ b/doc/docbook/system/man1/g-acad.xml @@ -90,7 +90,7 @@ $ g-acad -o sample.ACAD sample.g sample_object COPYRIGHT -This software is Copyright (c) 1997-2020 by the United States +This software is Copyright (c) 1997-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-dot.xml b/doc/docbook/system/man1/g-dot.xml index 5f98eeefa5b..5a0cf767924 100644 --- a/doc/docbook/system/man1/g-dot.xml +++ b/doc/docbook/system/man1/g-dot.xml @@ -62,7 +62,7 @@ $ g-dot -o sample.dot sample.g sample_object COPYRIGHT -This software is Copyright (c) 1997-2020 by the United States +This software is Copyright (c) 1997-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-dxf.xml b/doc/docbook/system/man1/g-dxf.xml index a5c2dcceb22..29fd78f52e5 100644 --- a/doc/docbook/system/man1/g-dxf.xml +++ b/doc/docbook/system/man1/g-dxf.xml @@ -99,7 +99,7 @@ $ g-dxf -o sample.dxf sample.g sample_object COPYRIGHT -This software is Copyright (c) 2003-2020 by the United States +This software is Copyright (c) 2003-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-egg.xml b/doc/docbook/system/man1/g-egg.xml index 532de642eda..3c0bec12e31 100644 --- a/doc/docbook/system/man1/g-egg.xml +++ b/doc/docbook/system/man1/g-egg.xml @@ -85,7 +85,7 @@ $ g-egg -o sample.egg sample.g sample_object COPYRIGHT -This software is Copyright (c) 2009-2020 by the United States +This software is Copyright (c) 2009-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-iges.xml b/doc/docbook/system/man1/g-iges.xml index b9a7125c833..971e9b5c65d 100644 --- a/doc/docbook/system/man1/g-iges.xml +++ b/doc/docbook/system/man1/g-iges.xml @@ -176,7 +176,7 @@ IGES/PDES Organization, September 1991 COPYRIGHT -This software is Copyright (c) 1993-2020 by the United States +This software is Copyright (c) 1993-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-nff.xml b/doc/docbook/system/man1/g-nff.xml index cee34177066..759cacaafe7 100644 --- a/doc/docbook/system/man1/g-nff.xml +++ b/doc/docbook/system/man1/g-nff.xml @@ -85,7 +85,7 @@ $ g-nff -o sample.nff sample.g sample_object COPYRIGHT -This software is Copyright (c) 2003-2020 by the United States +This software is Copyright (c) 2003-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-obj.xml b/doc/docbook/system/man1/g-obj.xml index 5b2212872db..0a0b2633233 100644 --- a/doc/docbook/system/man1/g-obj.xml +++ b/doc/docbook/system/man1/g-obj.xml @@ -108,7 +108,7 @@ $ g-obj -o sample.obj sample.g sample_object COPYRIGHT -This software is Copyright (c) 1997-2020 by the United States +This software is Copyright (c) 1997-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-ply.xml b/doc/docbook/system/man1/g-ply.xml index a8f4eb23058..14c73bcf126 100644 --- a/doc/docbook/system/man1/g-ply.xml +++ b/doc/docbook/system/man1/g-ply.xml @@ -127,7 +127,7 @@ COPYRIGHT - This software is Copyright (c) 2003-2020 by the United States + This software is Copyright (c) 2003-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-raw.xml b/doc/docbook/system/man1/g-raw.xml index 806f4d43a46..8180b7f86b0 100644 --- a/doc/docbook/system/man1/g-raw.xml +++ b/doc/docbook/system/man1/g-raw.xml @@ -142,7 +142,7 @@ $ g-raw -o sample.raw sample.g sample_object COPYRIGHT -This software is Copyright (c) 2013-2020 by the United States +This software is Copyright (c) 2013-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-shell-rect.xml b/doc/docbook/system/man1/g-shell-rect.xml index ba59b2e26e8..d804a1628cc 100644 --- a/doc/docbook/system/man1/g-shell-rect.xml +++ b/doc/docbook/system/man1/g-shell-rect.xml @@ -149,7 +149,7 @@ $ g-shell-rect -o shell.g sample.g sample_object COPYRIGHT -This software is Copyright (c) 1998-2020 by the United States +This software is Copyright (c) 1998-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-step.xml b/doc/docbook/system/man1/g-step.xml index c5599a9526a..752b204ca3b 100644 --- a/doc/docbook/system/man1/g-step.xml +++ b/doc/docbook/system/man1/g-step.xml @@ -84,7 +84,7 @@ to a STEP AP203 file, COPYRIGHT -This software is Copyright (c) 1993-2020 by the United States +This software is Copyright (c) 1993-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-stl.xml b/doc/docbook/system/man1/g-stl.xml index a02df332e90..f9fdeb22b9f 100644 --- a/doc/docbook/system/man1/g-stl.xml +++ b/doc/docbook/system/man1/g-stl.xml @@ -152,7 +152,7 @@ $ g-stl -o sample.stl sample.g sample_object COPYRIGHT -This software is Copyright (c) 2003-2020 by the United States +This software is Copyright (c) 2003-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-var.xml b/doc/docbook/system/man1/g-var.xml index d8658550ce7..4c2e5dbbd40 100644 --- a/doc/docbook/system/man1/g-var.xml +++ b/doc/docbook/system/man1/g-var.xml @@ -100,7 +100,7 @@ $ g-var -o sample.mesh sample.g sample_object COPYRIGHT -This software is Copyright (c) 2006-2020 by the United States +This software is Copyright (c) 2006-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-voxel.xml b/doc/docbook/system/man1/g-voxel.xml index 5275ba897ab..e3639a5b89f 100644 --- a/doc/docbook/system/man1/g-voxel.xml +++ b/doc/docbook/system/man1/g-voxel.xml @@ -57,7 +57,7 @@ COPYRIGHT - This software is Copyright (c) 2004-2020 United States Government as represented + This software is Copyright (c) 2004-2021 United States Government as represented by the U.S. Army Research Laboratory. Al rights reserved. diff --git a/doc/docbook/system/man1/g-vrml.xml b/doc/docbook/system/man1/g-vrml.xml index a62e351ceb0..47c89ce60c9 100644 --- a/doc/docbook/system/man1/g-vrml.xml +++ b/doc/docbook/system/man1/g-vrml.xml @@ -110,7 +110,7 @@ $ g-vrml -o shell.wrl sample.g sample_object COPYRIGHT -This software is Copyright (c) 1998-2020 by the United States +This software is Copyright (c) 1998-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g-x3d.xml b/doc/docbook/system/man1/g-x3d.xml index 612d3fc10a2..643d167d896 100644 --- a/doc/docbook/system/man1/g-x3d.xml +++ b/doc/docbook/system/man1/g-x3d.xml @@ -107,7 +107,7 @@ $ g-x3d -o shell.x3d sample.g sample_object COPYRIGHT -This software is Copyright (c) 2002-2020 by the United States +This software is Copyright (c) 2002-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/g2asc.xml b/doc/docbook/system/man1/g2asc.xml index a37b6acc956..1dea0702187 100644 --- a/doc/docbook/system/man1/g2asc.xml +++ b/doc/docbook/system/man1/g2asc.xml @@ -97,7 +97,7 @@ COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States Government as represented by U.S. Army Research Laboratory. +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/gastank.xml b/doc/docbook/system/man1/gastank.xml index c80a92bf3b6..c614e938621 100644 --- a/doc/docbook/system/man1/gastank.xml +++ b/doc/docbook/system/man1/gastank.xml @@ -146,7 +146,7 @@ number of gas tanks: 3 COPYRIGHT - This software is Copyright (c) 2005-2020 United States Government as + This software is Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/gdiff.xml b/doc/docbook/system/man1/gdiff.xml index 8339af54f27..459d0707326 100644 --- a/doc/docbook/system/man1/gdiff.xml +++ b/doc/docbook/system/man1/gdiff.xml @@ -119,22 +119,22 @@ A eto.s Alternate Diffing Result Outputs - The provides various styles of output, as follows: + The and options provide various styles of output, as follows: - (no output except the return code): + (no output except the return code): - ~: gdiff -v 0 moss.g moss2.g + ~: gdiff -qq moss.g moss2.g - : + : -~: gdiff -v 1 moss.g moss2.g +~: gdiff -q moss.g moss2.g Added: tgc_new.s, eto.s @@ -149,10 +149,10 @@ platform.r, ellipse.s, light.r, _GLOBAL, cone.s, cone.r, box.s, tor.r - (default): + (default): -~: gdiff -v 2 moss.g moss2.g +~: gdiff moss.g moss2.g M platform.r M ellipse.s M light.r @@ -170,10 +170,10 @@ A eto.s - : + : -~: gdiff -v 3 moss.g moss2.g +~: gdiff -v moss.g moss2.g - "platform.r" tree(p): l platform.s + "platform.r" tree(p): - {l platform.s} {l cone.s} - "ellipse.s" C(p): 0 8.980256080627000869753829 8.980256080627000869753829 @@ -205,16 +205,17 @@ A tgc_new.s A eto.s - Verbosity 3 is a more detailed version of the previous setting, with each parameter in the modified objects reported in detail. '-' lines - show what was removed for a given attribute or parameter, and '+' lines contain the data that replaced them. + The first elevated verbosity level is a more detailed version of the previous setting, with + each parameter in the modified objects reported in detail. '-' lines show what was removed + for a given attribute or parameter, and '+' lines contain the data that replaced them. - : + : -~: gdiff -v 4 moss.g moss2.g +~: gdiff -vv moss.g moss2.g - "platform.r" tree(p): l platform.s + "platform.r" tree(p): - {l platform.s} {l cone.s} - "ellipse.s" C(p): 0 8.980256080627000869753829 8.980256080627000869753829 @@ -261,7 +262,7 @@ A "eto.s" V(p): 8.533195938359670051909234 -11.04524849332910996224655 -1.403988 A "eto.s" DB5_MINORTYPE(p): eto - Verbosity 4 is a fully detailed diff that contains all information added or removed. + The second elevation of the verbosity level is a fully detailed diff that contains all information added or removed. @@ -323,7 +324,7 @@ all.g difference constitutes "too small" is up to the user - in this example, we will use 30 millimeters: -~: gdiff -v 3 -t 30.0 moss.g moss2.g +~: gdiff -v -t 30.0 moss.g moss2.g - "platform.r" tree(p): l platform.s + "platform.r" tree(p): - {l platform.s} {l cone.s} - "light.r" tree(p): l LIGHT @@ -363,7 +364,7 @@ A eto.s Note that this option will work at all levels of verbosity: -~: gdiff -v 4 -F "-type eto" moss.g moss2.g +~: gdiff -vv -F "-type eto" moss.g moss2.g A "eto.s" r_d(p): 1.724149328000026404339451 A "eto.s" r(p): 13.79319462400021123471561 A "eto.s" C(p): 3.448298656000062134552309 0 3.448298656000062134552309 @@ -381,7 +382,7 @@ A "eto.s" DB5_MINORTYPE(p): eto filter with ell types added to the accepted list produces the following: -~: gdiff -v 4 -F "-type eto -or -type ell" moss.g moss2.g +~: gdiff -vv -F "-type eto -or -type ell" moss.g moss2.g - "ellipse.s" C(p): 0 8.980256080627000869753829 8.980256080627000869753829 + "ellipse.s" C(p): 0 1.561016355403846755933728 1.561016355403846755933728 - "ellipse.s" A(p): 14.87607192992999927128039 0 0 @@ -404,7 +405,7 @@ A "eto.s" DB5_MINORTYPE(p): eto If we now add the tolerance filter, we see ellipse.s is filtered out: -~: gdiff -v 4 -t 30.0 -F "-type eto -or -type ell" moss.g moss2.g +~: gdiff -vv -t 30.0 -F "-type eto -or -type ell" moss.g moss2.g D "LIGHT" C(p): 0 0 2.539999961852999810218989 D "LIGHT" B(p): 0 2.539999961852999810218989 0 D "LIGHT" A(p): 2.539999961852999810218989 0 0 @@ -481,7 +482,7 @@ A(R) ellipse2.r To delve deeper into the nature of the changes, we increase the verbosity with the option: -~: gdiff -v 3 moss2.g moss.g moss3.g +~: gdiff -v moss2.g moss.g moss3.g M(L) "platform.r" tree(p): - {l platform.s} {l cone.s} M(L) "ellipse.s" C(p): 0 1.561016355403846755933728 1.561016355403846755933728 M(L) "ellipse.s" A(p): 5.559274328313033919357622 0 0 @@ -534,7 +535,7 @@ C ell.s However, closer inspection reveals that this conflict is different than the one reported above for the eto.s object: -~: gdiff -v3 ell_1.g ell_0.g ell_2.g +~: gdiff -v ell_1.g ell_0.g ell_2.g C(LM!=RM) ell.s @@ -543,7 +544,7 @@ C(LM!=RM) ell.s parameters. Indeed a full verbosity inspection: -~: gdiff -v4 ell_1.g ell_0.g ell_2.g +~: gdiff -vv ell_1.g ell_0.g ell_2.g M(R) "ell.s" C(p): 0 0 300 C(A) "ell.s" B(p): 0 500 0 C(L) "ell.s" B(p): 0 510 0 @@ -645,7 +646,7 @@ CONFLICT(light.r).left/R tgc_new.s COPYRIGHT -This software is Copyright (c) 2014-2020 by the United States +This software is Copyright (c) 2014-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/gencolor.xml b/doc/docbook/system/man1/gencolor.xml index 072e8872953..f50e4b68915 100644 --- a/doc/docbook/system/man1/gencolor.xml +++ b/doc/docbook/system/man1/gencolor.xml @@ -65,7 +65,7 @@ overrules use of any other "-" options. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/gif-fb.xml b/doc/docbook/system/man1/gif-fb.xml index 437af4a0570..f7eb359c3e0 100644 --- a/doc/docbook/system/man1/gif-fb.xml +++ b/doc/docbook/system/man1/gif-fb.xml @@ -141,7 +141,7 @@ June 15, 1987 (CompuServe Incorporated). COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/gif2fb.xml b/doc/docbook/system/man1/gif2fb.xml index d0bb4048b08..482a76837ea 100644 --- a/doc/docbook/system/man1/gif2fb.xml +++ b/doc/docbook/system/man1/gif2fb.xml @@ -69,7 +69,7 @@ June 15, 1987 (CompuServe Incorporated). COPYRIGHT -This software is Copyright (c) 1994-2020 by the United States +This software is Copyright (c) 1994-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/glint.xml b/doc/docbook/system/man1/glint.xml index ee5450fba64..f7276186889 100644 --- a/doc/docbook/system/man1/glint.xml +++ b/doc/docbook/system/man1/glint.xml @@ -319,7 +319,7 @@ but no vacuum reports. COPYRIGHT -This software is Copyright (c) 1995-2020 by the United States +This software is Copyright (c) 1995-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/gqa.xml b/doc/docbook/system/man1/gqa.xml index 67b0ef3090c..a87ed73e789 100644 --- a/doc/docbook/system/man1/gqa.xml +++ b/doc/docbook/system/man1/gqa.xml @@ -688,7 +688,7 @@ Weight: COPYRIGHT - This software is Copyright (c) 1984-2020 United States Government as + This software is Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/halftone.xml b/doc/docbook/system/man1/halftone.xml index 9020557e28f..69ff71d12e1 100644 --- a/doc/docbook/system/man1/halftone.xml +++ b/doc/docbook/system/man1/halftone.xml @@ -136,7 +136,7 @@ is scaled so that each intensity level is output as 255/Levels*value. COPYRIGHT -This software is Copyright (c) 1990-2020 by the United States +This software is Copyright (c) 1990-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/handle.xml b/doc/docbook/system/man1/handle.xml index 48942a9b266..74555a8b11c 100644 --- a/doc/docbook/system/man1/handle.xml +++ b/doc/docbook/system/man1/handle.xml @@ -145,7 +145,7 @@ number of handles: 3 COPYRIGHT - This software is Copyright (c) 2005-2020 United States Government as + This software is Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/icv.xml b/doc/docbook/system/man1/icv.xml index 13c2bbc6bdb..8d0880a7bdc 100644 --- a/doc/docbook/system/man1/icv.xml +++ b/doc/docbook/system/man1/icv.xml @@ -171,7 +171,7 @@ COPYRIGHT - This software is Copyright (c) 1989-2020 by the United States + This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/iges-g.xml b/doc/docbook/system/man1/iges-g.xml index 776e54be93d..35cf6022775 100644 --- a/doc/docbook/system/man1/iges-g.xml +++ b/doc/docbook/system/man1/iges-g.xml @@ -112,7 +112,7 @@ IGES/PDES Organization, September 1991 COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/imgdims.xml b/doc/docbook/system/man1/imgdims.xml index 4b37147d081..bdc39471eca 100644 --- a/doc/docbook/system/man1/imgdims.xml +++ b/doc/docbook/system/man1/imgdims.xml @@ -102,7 +102,7 @@ assumes that there are 3-byte-wide pixels. COPYRIGHT -This software is Copyright (c) 1997-2020 by the United States +This software is Copyright (c) 1997-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/ir-X.xml b/doc/docbook/system/man1/ir-X.xml index 9147405bae5..aff71731392 100644 --- a/doc/docbook/system/man1/ir-X.xml +++ b/doc/docbook/system/man1/ir-X.xml @@ -73,7 +73,7 @@ for Generating an Input File for PRISM and Displaying PRISM Results COPYRIGHT -This software is Copyright (c) 1994-2020 by the United States +This software is Copyright (c) 1994-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/irdisp.xml b/doc/docbook/system/man1/irdisp.xml index 70300d41d56..24387c3af24 100644 --- a/doc/docbook/system/man1/irdisp.xml +++ b/doc/docbook/system/man1/irdisp.xml @@ -143,7 +143,7 @@ for Generating an Input File for PRISM and Displaying PRISM Results COPYRIGHT -This software is Copyright (c) 1994-2020 by the United States +This software is Copyright (c) 1994-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/loop.xml b/doc/docbook/system/man1/loop.xml index be4b2db81a3..65b875d133a 100644 --- a/doc/docbook/system/man1/loop.xml +++ b/doc/docbook/system/man1/loop.xml @@ -100,7 +100,7 @@ dealing with sequences of images, etc. COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/mac-pix.xml b/doc/docbook/system/man1/mac-pix.xml index 8b7e5d48e21..23c22286186 100644 --- a/doc/docbook/system/man1/mac-pix.xml +++ b/doc/docbook/system/man1/mac-pix.xml @@ -102,7 +102,7 @@ to combine them with the output of COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/mged.xml b/doc/docbook/system/man1/mged.xml index 0570bed285f..80e80052d91 100644 --- a/doc/docbook/system/man1/mged.xml +++ b/doc/docbook/system/man1/mged.xml @@ -299,7 +299,7 @@ mged> COPYRIGHT - This software is Copyright (c) 1984-2020 United States Government as + This software is Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/morphedit.xml b/doc/docbook/system/man1/morphedit.xml index 09ec42c3538..2c6040d3900 100644 --- a/doc/docbook/system/man1/morphedit.xml +++ b/doc/docbook/system/man1/morphedit.xml @@ -146,7 +146,7 @@ Unwanted correspondences should be recycled elsewhere. COPYRIGHT -This software is Copyright (c) 1996-2020 by the United States +This software is Copyright (c) 1996-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/nastran-g.xml b/doc/docbook/system/man1/nastran-g.xml index 46c894b9365..216d0f96fec 100644 --- a/doc/docbook/system/man1/nastran-g.xml +++ b/doc/docbook/system/man1/nastran-g.xml @@ -73,7 +73,7 @@ $ nastran-g -i nastran.file -o COPYRIGHT -This software is Copyright (c) 1998-2020 by the United States +This software is Copyright (c) 1998-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/nirt.xml b/doc/docbook/system/man1/nirt.xml index aed2592125e..d52a6d4bb68 100644 --- a/doc/docbook/system/man1/nirt.xml +++ b/doc/docbook/system/man1/nirt.xml @@ -1085,7 +1085,7 @@ COPYRIGHT - This software is Copyright (c) 1984-2020 United States Government as + This software is Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/obj-g.xml b/doc/docbook/system/man1/obj-g.xml index 6bde8e33139..944a4c1bb86 100644 --- a/doc/docbook/system/man1/obj-g.xml +++ b/doc/docbook/system/man1/obj-g.xml @@ -348,7 +348,7 @@ COPYRIGHT - This software is Copyright (c) 2010-2020 United States Government as + This software is Copyright (c) 2010-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/patch-g.xml b/doc/docbook/system/man1/patch-g.xml index 1b9fe6c29a2..0e30e60ed03 100644 --- a/doc/docbook/system/man1/patch-g.xml +++ b/doc/docbook/system/man1/patch-g.xml @@ -186,7 +186,7 @@ package. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/picket_fence.xml b/doc/docbook/system/man1/picket_fence.xml index c4212cd88fd..309521798a4 100644 --- a/doc/docbook/system/man1/picket_fence.xml +++ b/doc/docbook/system/man1/picket_fence.xml @@ -79,7 +79,7 @@ COPYRIGHT - This software is Copyright (c) 2005-2020 United States Government as + This software is Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pix-alias.xml b/doc/docbook/system/man1/pix-alias.xml index ed72e8b697c..64bbf331e3a 100644 --- a/doc/docbook/system/man1/pix-alias.xml +++ b/doc/docbook/system/man1/pix-alias.xml @@ -75,7 +75,7 @@ pixels wide COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pix-bw.xml b/doc/docbook/system/man1/pix-bw.xml index 80847881070..0c5ef2df1ac 100644 --- a/doc/docbook/system/man1/pix-bw.xml +++ b/doc/docbook/system/man1/pix-bw.xml @@ -137,7 +137,7 @@ applies weights close to the flag. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pix-fb.xml b/doc/docbook/system/man1/pix-fb.xml index a55be4b67a1..f2b098462b1 100644 --- a/doc/docbook/system/man1/pix-fb.xml +++ b/doc/docbook/system/man1/pix-fb.xml @@ -168,7 +168,7 @@ file is shorter than expected, the program exits silently. COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pix-png.xml b/doc/docbook/system/man1/pix-png.xml index ef4f1ce1705..3a99ae316d0 100644 --- a/doc/docbook/system/man1/pix-png.xml +++ b/doc/docbook/system/man1/pix-png.xml @@ -115,7 +115,7 @@ device as a safeguard. COPYRIGHT -This software is Copyright (c) 1998-2020 by the United States +This software is Copyright (c) 1998-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pix-ppm.xml b/doc/docbook/system/man1/pix-ppm.xml index b422e6f536c..84a7d51a2e3 100644 --- a/doc/docbook/system/man1/pix-ppm.xml +++ b/doc/docbook/system/man1/pix-ppm.xml @@ -115,7 +115,7 @@ device as a safeguard. COPYRIGHT -This software is Copyright (c) 2009-2020 by the United States +This software is Copyright (c) 2009-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pix-ps.xml b/doc/docbook/system/man1/pix-ps.xml index 735802e7162..bb0b3a19b95 100644 --- a/doc/docbook/system/man1/pix-ps.xml +++ b/doc/docbook/system/man1/pix-ps.xml @@ -101,7 +101,7 @@ on an 8.5 x 11 inch page. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pix-sun.xml b/doc/docbook/system/man1/pix-sun.xml index 0a421733aac..c5eb60edce3 100644 --- a/doc/docbook/system/man1/pix-sun.xml +++ b/doc/docbook/system/man1/pix-sun.xml @@ -85,7 +85,7 @@ pixels wide COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pix2asc.xml b/doc/docbook/system/man1/pix2asc.xml index 5f2151b2e3c..14c2c80057b 100644 --- a/doc/docbook/system/man1/pix2asc.xml +++ b/doc/docbook/system/man1/pix2asc.xml @@ -85,7 +85,7 @@ flag, allowing it to be easily used on non-UNIX systems. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixautosize.xml b/doc/docbook/system/man1/pixautosize.xml index 2b1bfc9e1ad..2ce9e24aab7 100644 --- a/doc/docbook/system/man1/pixautosize.xml +++ b/doc/docbook/system/man1/pixautosize.xml @@ -118,7 +118,7 @@ of the standard sizes, one of these messages is printed on standard error: COPYRIGHT -This software is Copyright (c) 1992-2020 by the United States +This software is Copyright (c) 1992-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixbackgnd.xml b/doc/docbook/system/man1/pixbackgnd.xml index 5770080e2ec..4edc94db30b 100644 --- a/doc/docbook/system/man1/pixbackgnd.xml +++ b/doc/docbook/system/man1/pixbackgnd.xml @@ -118,7 +118,7 @@ flag is specified, the scanlines will be written out in inverted order COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixbgstrip.xml b/doc/docbook/system/man1/pixbgstrip.xml index d4726abb979..46245873231 100644 --- a/doc/docbook/system/man1/pixbgstrip.xml +++ b/doc/docbook/system/man1/pixbgstrip.xml @@ -93,7 +93,7 @@ file is shorter than expected, the program exits silently. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixblend.xml b/doc/docbook/system/man1/pixblend.xml index 84d2191cc54..0cb1613baee 100644 --- a/doc/docbook/system/man1/pixblend.xml +++ b/doc/docbook/system/man1/pixblend.xml @@ -127,7 +127,7 @@ determined by the ratio set with the option (see above). COPYRIGHT -This software is Copyright (c) 1995-2020 by the United States +This software is Copyright (c) 1995-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixborder.xml b/doc/docbook/system/man1/pixborder.xml index ae7498bd252..aebe8eda678 100644 --- a/doc/docbook/system/man1/pixborder.xml +++ b/doc/docbook/system/man1/pixborder.xml @@ -142,7 +142,7 @@ before beginning any segments of the next inner layer. COPYRIGHT -This software is Copyright (c) 1996-2020 by the United States +This software is Copyright (c) 1996-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixbustup.xml b/doc/docbook/system/man1/pixbustup.xml index ff3ac2b1b1e..cf8ca5a3832 100644 --- a/doc/docbook/system/man1/pixbustup.xml +++ b/doc/docbook/system/man1/pixbustup.xml @@ -68,7 +68,7 @@ one huge file, but it is still sometimes useful. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixclump.xml b/doc/docbook/system/man1/pixclump.xml index 92e107d6b09..300ebc5ffab 100644 --- a/doc/docbook/system/man1/pixclump.xml +++ b/doc/docbook/system/man1/pixclump.xml @@ -80,7 +80,7 @@ back to one of the original colors. COPYRIGHT -This software is Copyright (c) 1997-2020 by the United States +This software is Copyright (c) 1997-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixcmp.xml b/doc/docbook/system/man1/pixcmp.xml index 3d70f1f49c9..f8fe6a7d756 100644 --- a/doc/docbook/system/man1/pixcmp.xml +++ b/doc/docbook/system/man1/pixcmp.xml @@ -25,74 +25,132 @@ DESCRIPTION -pixcmp -is a program to compare two BRL-CAD pix image files pixel by pixel. The following OPTIONS are available: + +pixcmp is a program to compare two BRL-CAD +pix image files pixel by pixel (or byte by byte), optionally skipping +initial pixels (or bytes) in one or both input files. The following +OPTIONS are available: + - + -Output pixel numbers, counting from 1, and values for all pixels that differ. + Use bytes instead of pixels for both processing and output. + This can be useful for comparing BW images or other data files. + With this option, the SKIP values should be + specified as bytes instead of pixels. - + -Use bytes instead of pixels for both processing and output. With this option, the SKIP values should be specified as bytes instead of pixels. + Output a line per pixel (or per byte if using the + option) where the values are the same. Each + line includes the pixel (or byte) number counting from 1, the + respective input values, and a label. - SKIP + -Skip the first SKIP pixels of input (for FILE1 and FILE2). + Output a line per pixel (or per byte if using the + option) where the values are different. Each + line includes the pixel (or byte) number counting from 1, the + respective input values, and a label. - SKIP1:SKIP2 + -Skip the first SKIP1 pixels of FILE1 and the first SKIP2 pixels of FILE2. + Be more quiet, suppressing additional printing typically + sent to standard error. With the and/or + options, respective lines will still be + printed to standard output, but without header and summary + information getting sent to standard error. + This option has no affect on error printing that can result + during abnormal exit of pixcmp. - + SKIP -Silent output. Only return an exit status. + Skip the first SKIP pixels (or bytes if using the option) of input for FILE1 and FILE2. + + + + SKIP1:SKIP2 + + Skip the first SKIP1 pixels (or bytes if using the + option) of FILE1 and first SKIP2 pixels in + FILE2. -SKIP1 and SKIP2 are the number of pixels to skip in each file. +SKIP1 and SKIP2 are the number of pixels (or bytes if using the + option) to skip in each file. If FILE is `-` or missing, -pixcmp -reads from the standard input. +pixcmp reads from the standard input. If FILE1 and +FILE2 are both standard input, then values must be interleaved (e.g., +r1r2g1g2b1b2r1r2g1g2b1b2...etc... for r1g1b1 and r2g2b2 from two +separate input streams). RETURN VALUES -The -pixcmp -utility returns 0 if there are no differences, 1 if there are only off-by-one differences, 2 if there are off-by-many errors, 126 if there are file processing problems, and 127 if there are argument processing or usage errors. +The pixcmp utility returns +0 if there are no differences, 1 +if there are only off-by-one differences, 2 if +there are off-by-many errors, 126 if there are file +processing problems, and 127 if there are argument +processing or usage errors. EXAMPLES - pixcmp -l file1 file2 + pixcmp -d file1 file2 -The two files are compared pixel by pixel with each difference printed instead of just the summary. + The two files are compared pixel by pixel with each + difference printed instead of just the summary. + pixdiff file1.pix file2.pix | pixcmp - file3.pix -The -pixdiff -tool compares the pixels in file1.pix with those in file2.pix and then outputs a resulting `diff` image which is then processed by -pixcmp -as input and compared against file3.pix, reporting on the differences. + The pixdiff tool compares the + pixels in file1.pix with those in file2.pix and then outputs a + resulting `diff` image which is then processed by + pixcmp as input and compared against file3.pix, + reporting on the differences. + + + echo -n "aabcddeg" | pixcmp -b -s -d - - + + + Here, pixcmp reads interleaved data from the system + echo command (-n avoids a trailing newline) + provided via standard input. For each pair of characters (i.e., + bytes), it reports their status: + + + +#Byte FILE1 FILE2 LABEL +1 97 97 MATCHING +2 98 99 OFF_BY_ONE +3 100 100 MATCHING +4 101 103 OFF_BY_MANY +pixcmp bytes: 2 matching, 1 off by 1, 1 off by many + + + + + @@ -106,7 +164,7 @@ as input and compared against file3.pix, reporting on the differences. COPYRIGHT -This software is Copyright (c) 2007-2020 by the United States +This software is Copyright (c) 2007-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixcolors.xml b/doc/docbook/system/man1/pixcolors.xml index 0fae1701e3c..fa889fce39b 100644 --- a/doc/docbook/system/man1/pixcolors.xml +++ b/doc/docbook/system/man1/pixcolors.xml @@ -50,7 +50,7 @@ used to be printed on standard output in addition to the count report. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixcrop.xml b/doc/docbook/system/man1/pixcrop.xml index 80b79556fc4..c31fc53ad4f 100644 --- a/doc/docbook/system/man1/pixcrop.xml +++ b/doc/docbook/system/man1/pixcrop.xml @@ -74,7 +74,7 @@ interpolation is done by this program. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixdiff.xml b/doc/docbook/system/man1/pixdiff.xml index bdec41bd648..de140fe93c6 100644 --- a/doc/docbook/system/man1/pixdiff.xml +++ b/doc/docbook/system/man1/pixdiff.xml @@ -62,7 +62,7 @@ of output. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixfade.xml b/doc/docbook/system/man1/pixfade.xml index ffb0beb8ca2..5038956dfb1 100644 --- a/doc/docbook/system/man1/pixfade.xml +++ b/doc/docbook/system/man1/pixfade.xml @@ -77,7 +77,7 @@ supplies output file name. If this option is omitted, standard output is used.< COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixfilter.xml b/doc/docbook/system/man1/pixfilter.xml index caeb2480add..6aaf3942e84 100644 --- a/doc/docbook/system/man1/pixfilter.xml +++ b/doc/docbook/system/man1/pixfilter.xml @@ -122,7 +122,7 @@ flag displays the kernel values on standard error. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixhalve.xml b/doc/docbook/system/man1/pixhalve.xml index 3e9cb25a137..fde9883f2ab 100644 --- a/doc/docbook/system/man1/pixhalve.xml +++ b/doc/docbook/system/man1/pixhalve.xml @@ -62,7 +62,7 @@ flag indicates autosizing (off by default). COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixhist.xml b/doc/docbook/system/man1/pixhist.xml index 3fafcfd57ca..bf3a6a1361a 100644 --- a/doc/docbook/system/man1/pixhist.xml +++ b/doc/docbook/system/man1/pixhist.xml @@ -64,7 +64,7 @@ flag will output the histogram values on the terminal (standard error). COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixhist3d-plot3.xml b/doc/docbook/system/man1/pixhist3d-plot3.xml index 39e3cfbeac1..606ed48d7bb 100644 --- a/doc/docbook/system/man1/pixhist3d-plot3.xml +++ b/doc/docbook/system/man1/pixhist3d-plot3.xml @@ -53,7 +53,7 @@ oversaturation resulting in intensity clipping. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixhist3d.xml b/doc/docbook/system/man1/pixhist3d.xml index c06e8f2355e..571a4d48b35 100644 --- a/doc/docbook/system/man1/pixhist3d.xml +++ b/doc/docbook/system/man1/pixhist3d.xml @@ -59,7 +59,7 @@ be used. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixinterp2x.xml b/doc/docbook/system/man1/pixinterp2x.xml index 2ba5a2383a2..30922d402fb 100644 --- a/doc/docbook/system/man1/pixinterp2x.xml +++ b/doc/docbook/system/man1/pixinterp2x.xml @@ -87,7 +87,7 @@ and bottom edge). This differs from the behavior of COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixmatte.xml b/doc/docbook/system/man1/pixmatte.xml index 284566de672..50f0d6e0b17 100644 --- a/doc/docbook/system/man1/pixmatte.xml +++ b/doc/docbook/system/man1/pixmatte.xml @@ -157,7 +157,7 @@ a given background file, use: COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixmerge.xml b/doc/docbook/system/man1/pixmerge.xml index cf07190fa50..533f5559b05 100644 --- a/doc/docbook/system/man1/pixmerge.xml +++ b/doc/docbook/system/man1/pixmerge.xml @@ -111,7 +111,7 @@ generated image on top of a shaded background. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixmorph.xml b/doc/docbook/system/man1/pixmorph.xml index ef79b845ccb..616b32e4710 100644 --- a/doc/docbook/system/man1/pixmorph.xml +++ b/doc/docbook/system/man1/pixmorph.xml @@ -339,7 +339,7 @@ and COPYRIGHT -This software is Copyright (c) 1996-2020 by the United States +This software is Copyright (c) 1996-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixrect.xml b/doc/docbook/system/man1/pixrect.xml index 36bfdd70247..7d84aa15d61 100644 --- a/doc/docbook/system/man1/pixrect.xml +++ b/doc/docbook/system/man1/pixrect.xml @@ -78,7 +78,7 @@ file name. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixrot.xml b/doc/docbook/system/man1/pixrot.xml index b052c70a00c..138d24dc196 100644 --- a/doc/docbook/system/man1/pixrot.xml +++ b/doc/docbook/system/man1/pixrot.xml @@ -102,7 +102,7 @@ Rotations of arbitrary angle are not supported. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixsaturate.xml b/doc/docbook/system/man1/pixsaturate.xml index 94d5dd1f3e4..2ef7d09aaa6 100644 --- a/doc/docbook/system/man1/pixsaturate.xml +++ b/doc/docbook/system/man1/pixsaturate.xml @@ -45,7 +45,7 @@ and values larger than 1.0 give a more saturated image. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixscale.xml b/doc/docbook/system/man1/pixscale.xml index d67909fba41..7561a28543d 100644 --- a/doc/docbook/system/man1/pixscale.xml +++ b/doc/docbook/system/man1/pixscale.xml @@ -94,7 +94,7 @@ Optional cubic interpolation would be nice. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixshrink.xml b/doc/docbook/system/man1/pixshrink.xml index 73581e0bfa7..d4085ad6447 100644 --- a/doc/docbook/system/man1/pixshrink.xml +++ b/doc/docbook/system/man1/pixshrink.xml @@ -78,7 +78,7 @@ factor, incorrect and bizarre output is generated. COPYRIGHT -This software is Copyright (c) 1990-2020 by the United States +This software is Copyright (c) 1990-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixstat.xml b/doc/docbook/system/man1/pixstat.xml index bbff3252c3e..4eeb5f754ca 100644 --- a/doc/docbook/system/man1/pixstat.xml +++ b/doc/docbook/system/man1/pixstat.xml @@ -73,7 +73,7 @@ file sufficient. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixsubst.xml b/doc/docbook/system/man1/pixsubst.xml index e4daacde454..928369497a1 100644 --- a/doc/docbook/system/man1/pixsubst.xml +++ b/doc/docbook/system/man1/pixsubst.xml @@ -46,7 +46,7 @@ the first pixel in the input stream is used as the value to be changed. COPYRIGHT -This software is Copyright (c) 1999-2020 by the United States +This software is Copyright (c) 1999-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixtile.xml b/doc/docbook/system/man1/pixtile.xml index 1c0d84f89f1..12e194ed4de 100644 --- a/doc/docbook/system/man1/pixtile.xml +++ b/doc/docbook/system/man1/pixtile.xml @@ -222,7 +222,7 @@ placing them from lower left to upper right in a 512x512 file COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pixuntile.xml b/doc/docbook/system/man1/pixuntile.xml index 82ff3a44a92..6ab837e3eaa 100644 --- a/doc/docbook/system/man1/pixuntile.xml +++ b/doc/docbook/system/man1/pixuntile.xml @@ -116,7 +116,7 @@ through COPYRIGHT -This software is Copyright (c) 1988-2020 by the United States +This software is Copyright (c) 1988-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/plot3-asc.xml b/doc/docbook/system/man1/plot3-asc.xml index 70b712d02e7..6e596a17dbf 100644 --- a/doc/docbook/system/man1/plot3-asc.xml +++ b/doc/docbook/system/man1/plot3-asc.xml @@ -46,7 +46,7 @@ and a summary of plot command usage is written to standard error. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/plot3-fb.xml b/doc/docbook/system/man1/plot3-fb.xml index e2ecdbff447..421f647a111 100644 --- a/doc/docbook/system/man1/plot3-fb.xml +++ b/doc/docbook/system/man1/plot3-fb.xml @@ -98,7 +98,7 @@ format, thus this program can display normal plot files as well. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/plot3-plot3.xml b/doc/docbook/system/man1/plot3-plot3.xml index 1b500add480..27f56eb8e01 100644 --- a/doc/docbook/system/man1/plot3-plot3.xml +++ b/doc/docbook/system/man1/plot3-plot3.xml @@ -66,7 +66,7 @@ a space command since most older UnixPlot programs require them. COPYRIGHT -This software is Copyright (c) 1988-2020 by the United States +This software is Copyright (c) 1988-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/plot3-ps.xml b/doc/docbook/system/man1/plot3-ps.xml index 219758f4237..e3d6828c1f9 100644 --- a/doc/docbook/system/man1/plot3-ps.xml +++ b/doc/docbook/system/man1/plot3-ps.xml @@ -81,7 +81,7 @@ of this writing. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/plot3color.xml b/doc/docbook/system/man1/plot3color.xml index 476dccfc50c..7c06e73cb96 100644 --- a/doc/docbook/system/man1/plot3color.xml +++ b/doc/docbook/system/man1/plot3color.xml @@ -57,7 +57,7 @@ from shell commands. COPYRIGHT -This software is Copyright (c) 1988-2020 by the United States +This software is Copyright (c) 1988-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/plot3getframe.xml b/doc/docbook/system/man1/plot3getframe.xml index 93f3f7b93f1..a0f36d63951 100644 --- a/doc/docbook/system/man1/plot3getframe.xml +++ b/doc/docbook/system/man1/plot3getframe.xml @@ -49,7 +49,7 @@ format, thus this program can process normal plot files as well. COPYRIGHT -This software is Copyright (c) 1988-2020 by the United States +This software is Copyright (c) 1988-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/plot3line2.xml b/doc/docbook/system/man1/plot3line2.xml index e1fef24c556..d5d68624d4e 100644 --- a/doc/docbook/system/man1/plot3line2.xml +++ b/doc/docbook/system/man1/plot3line2.xml @@ -70,7 +70,7 @@ from shell commands. COPYRIGHT -This software is Copyright (c) 1988-2020 by the United States +This software is Copyright (c) 1988-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/plot3rot.xml b/doc/docbook/system/man1/plot3rot.xml index c4786e0306e..8a4ee56d7f9 100644 --- a/doc/docbook/system/man1/plot3rot.xml +++ b/doc/docbook/system/man1/plot3rot.xml @@ -172,7 +172,7 @@ conventional UnixPlot (screen) X,Y coordinate system. COPYRIGHT -This software is Copyright (c) 1988-2020 by the United States +This software is Copyright (c) 1988-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/ply-g.xml b/doc/docbook/system/man1/ply-g.xml index 9598e0f759e..4ca2f801dbd 100644 --- a/doc/docbook/system/man1/ply-g.xml +++ b/doc/docbook/system/man1/ply-g.xml @@ -67,7 +67,7 @@ $ ply-g sample.ply sample.g COPYRIGHT -This software is Copyright (c) 2003-2020 by the United States +This software is Copyright (c) 2003-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/png-bw.xml b/doc/docbook/system/man1/png-bw.xml index 261eb59111a..baa33ba7346 100644 --- a/doc/docbook/system/man1/png-bw.xml +++ b/doc/docbook/system/man1/png-bw.xml @@ -84,7 +84,7 @@ weights are: 0.26, 0.66, 0.08] COPYRIGHT -This software is Copyright (c) 1998-2020 by the United States +This software is Copyright (c) 1998-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/png-fb.xml b/doc/docbook/system/man1/png-fb.xml index 800c0b21cb1..4cd134225c1 100644 --- a/doc/docbook/system/man1/png-fb.xml +++ b/doc/docbook/system/man1/png-fb.xml @@ -134,7 +134,7 @@ wins. COPYRIGHT -This software is Copyright (c) 1998-2020 by the United States +This software is Copyright (c) 1998-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/png-pix.xml b/doc/docbook/system/man1/png-pix.xml index 9a5c8c017dd..08cf88def93 100644 --- a/doc/docbook/system/man1/png-pix.xml +++ b/doc/docbook/system/man1/png-pix.xml @@ -72,7 +72,7 @@ png-pix tank.png > tank.pi COPYRIGHT -This software is Copyright (c) 1998-2020 by the United States +This software is Copyright (c) 1998-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/pp-fb.xml b/doc/docbook/system/man1/pp-fb.xml index b0c475f4c64..6659b6e9f88 100644 --- a/doc/docbook/system/man1/pp-fb.xml +++ b/doc/docbook/system/man1/pp-fb.xml @@ -63,7 +63,7 @@ The file format is not documented anywhere. COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/proe-g.xml b/doc/docbook/system/man1/proe-g.xml index 09d082b94fe..c618d5fc28c 100644 --- a/doc/docbook/system/man1/proe-g.xml +++ b/doc/docbook/system/man1/proe-g.xml @@ -112,7 +112,7 @@ Parametric Technology Corporation COPYRIGHT -This software is Copyright (c) 1994-2020 by the United States +This software is Copyright (c) 1994-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/random.xml b/doc/docbook/system/man1/random.xml index 930ed28b534..b95ccdbf096 100644 --- a/doc/docbook/system/man1/random.xml +++ b/doc/docbook/system/man1/random.xml @@ -79,7 +79,7 @@ random -g 40 2000 COPYRIGHT -This software is Copyright (c) 2010-2020 by the United States +This software is Copyright (c) 2010-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/remrt.xml b/doc/docbook/system/man1/remrt.xml index 374f73705bb..a383716ae49 100644 --- a/doc/docbook/system/man1/remrt.xml +++ b/doc/docbook/system/man1/remrt.xml @@ -522,7 +522,7 @@ host_lookup_by_hostent(localhost) got localhost? COPYRIGHT - This software is Copyright (c) 1994-2020 by the United States + This software is Copyright (c) 1994-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/reshoot.xml b/doc/docbook/system/man1/reshoot.xml index 2d62f520660..4c06e661982 100644 --- a/doc/docbook/system/man1/reshoot.xml +++ b/doc/docbook/system/man1/reshoot.xml @@ -133,7 +133,7 @@ as a result. COPYRIGHT -This software is Copyright (c) 2006-2020 United States Government as +This software is Copyright (c) 2006-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rpatch.xml b/doc/docbook/system/man1/rpatch.xml index fef9459dcc2..8624e5a0ce5 100644 --- a/doc/docbook/system/man1/rpatch.xml +++ b/doc/docbook/system/man1/rpatch.xml @@ -54,7 +54,7 @@ option reads FASTGEN3 format files (coordinates are each 10 columns wide). COPYRIGHT -This software is Copyright (c) 1994-2020 by the United States +This software is Copyright (c) 1994-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rt.xml b/doc/docbook/system/man1/rt.xml index b84dab04c9f..9a4e7066e5b 100644 --- a/doc/docbook/system/man1/rt.xml +++ b/doc/docbook/system/man1/rt.xml @@ -710,7 +710,7 @@ COPYRIGHT - This software is Copyright (c) 1984-2020 United States Government as + This software is Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtarea.xml b/doc/docbook/system/man1/rtarea.xml index ba0c0ba847c..f5d5baaa295 100644 --- a/doc/docbook/system/man1/rtarea.xml +++ b/doc/docbook/system/man1/rtarea.xml @@ -281,7 +281,7 @@ COPYRIGHT - This software is Copyright (c) 1987-2020 United States + This software is Copyright (c) 1987-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtcheck.xml b/doc/docbook/system/man1/rtcheck.xml index be752ce6229..6caf490b82a 100644 --- a/doc/docbook/system/man1/rtcheck.xml +++ b/doc/docbook/system/man1/rtcheck.xml @@ -180,7 +180,7 @@ COPYRIGHT - This software is Copyright (c) 1988-2020 United States Government as + This software is Copyright (c) 1988-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtedge.xml b/doc/docbook/system/man1/rtedge.xml index 09a478fd0e0..cba1e9c67a5 100644 --- a/doc/docbook/system/man1/rtedge.xml +++ b/doc/docbook/system/man1/rtedge.xml @@ -1063,7 +1063,7 @@ EOF COPYRIGHT - This software is Copyright (c) 2001-2020 United States Government as + This software is Copyright (c) 2001-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtexample.xml b/doc/docbook/system/man1/rtexample.xml index 2b4dcc02150..2e22706c067 100644 --- a/doc/docbook/system/man1/rtexample.xml +++ b/doc/docbook/system/man1/rtexample.xml @@ -72,7 +72,7 @@ COPYRIGHT - This software is Copyright (c) 2004-2020 United States Government as + This software is Copyright (c) 2004-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtg3.xml b/doc/docbook/system/man1/rtg3.xml index c452889095d..2380d8195bb 100644 --- a/doc/docbook/system/man1/rtg3.xml +++ b/doc/docbook/system/man1/rtg3.xml @@ -342,7 +342,7 @@ seen. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rthide.xml b/doc/docbook/system/man1/rthide.xml index 1c805112ac6..2ae443d8c20 100644 --- a/doc/docbook/system/man1/rthide.xml +++ b/doc/docbook/system/man1/rthide.xml @@ -234,7 +234,7 @@ package instead. COPYRIGHT -This software is Copyright (c) 1990-2020 by the United States +This software is Copyright (c) 1990-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtscale.xml b/doc/docbook/system/man1/rtscale.xml index 2ad793f0ed5..ea411d188de 100644 --- a/doc/docbook/system/man1/rtscale.xml +++ b/doc/docbook/system/man1/rtscale.xml @@ -113,7 +113,7 @@ Descriptive messages are printed on standard error (file descriptor 2). COPYRIGHT -This software is Copyright (c) 1991-2020 United States Government as +This software is Copyright (c) 1991-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtshot.xml b/doc/docbook/system/man1/rtshot.xml index 31141d3199a..2573cff8c25 100644 --- a/doc/docbook/system/man1/rtshot.xml +++ b/doc/docbook/system/man1/rtshot.xml @@ -179,7 +179,7 @@ package instead. COPYRIGHT -This software is Copyright (c) 1987-2020 United States Government as +This software is Copyright (c) 1987-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtweight.xml b/doc/docbook/system/man1/rtweight.xml index 40f7b9f0c63..5bc3ed1f4dd 100644 --- a/doc/docbook/system/man1/rtweight.xml +++ b/doc/docbook/system/man1/rtweight.xml @@ -158,7 +158,7 @@ COPYRIGHT - This software is Copyright (c) 1991-2020 United States Government as + This software is Copyright (c) 1991-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtwizard.xml b/doc/docbook/system/man1/rtwizard.xml index 549e42763ec..aa6e8a3dfdf 100644 --- a/doc/docbook/system/man1/rtwizard.xml +++ b/doc/docbook/system/man1/rtwizard.xml @@ -447,7 +447,7 @@ COPYRIGHT - This software is Copyright (c) 2001-2020 United States Government as + This software is Copyright (c) 2001-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/rtxray.xml b/doc/docbook/system/man1/rtxray.xml index ee053f201c9..73247ef295c 100644 --- a/doc/docbook/system/man1/rtxray.xml +++ b/doc/docbook/system/man1/rtxray.xml @@ -160,7 +160,7 @@ program. COPYRIGHT -This software is Copyright (c) 1990-2020 United States Government as +This software is Copyright (c) 1990-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/showshot.xml b/doc/docbook/system/man1/showshot.xml index 4e80c602fa6..db61dd06a1c 100644 --- a/doc/docbook/system/man1/showshot.xml +++ b/doc/docbook/system/man1/showshot.xml @@ -120,7 +120,7 @@ complains and exits with status 1. COPYRIGHT -This software is Copyright (c) 1991-2020 by the United States +This software is Copyright (c) 1991-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/stl-g.xml b/doc/docbook/system/man1/stl-g.xml index df8b3e55443..79dc2f9ff4e 100644 --- a/doc/docbook/system/man1/stl-g.xml +++ b/doc/docbook/system/man1/stl-g.xml @@ -96,7 +96,7 @@ $ stl-g sample.stl sample.g COPYRIGHT -This software is Copyright (c) 1999-2020 by the United States +This software is Copyright (c) 1999-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/sun-pix.xml b/doc/docbook/system/man1/sun-pix.xml index 6260224b9e1..9a5dbd75a77 100644 --- a/doc/docbook/system/man1/sun-pix.xml +++ b/doc/docbook/system/man1/sun-pix.xml @@ -99,7 +99,7 @@ of the byte order of the machine running this program. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/tankill-g.xml b/doc/docbook/system/man1/tankill-g.xml index f54d34482e1..4f43b75a802 100644 --- a/doc/docbook/system/man1/tankill-g.xml +++ b/doc/docbook/system/man1/tankill-g.xml @@ -68,7 +68,7 @@ $ tankill-g sample.tankill sample.g COPYRIGHT -This software is Copyright (c) 1993-2020 by the United States +This software is Copyright (c) 1993-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/terrain.xml b/doc/docbook/system/man1/terrain.xml index 0456fd3bee9..e4f969ed4e0 100644 --- a/doc/docbook/system/man1/terrain.xml +++ b/doc/docbook/system/man1/terrain.xml @@ -183,7 +183,7 @@ above. COPYRIGHT -This software is Copyright (c) 2000-2020 by the United States +This software is Copyright (c) 2000-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/tire.xml b/doc/docbook/system/man1/tire.xml index 81840325465..47c9b55eae5 100644 --- a/doc/docbook/system/man1/tire.xml +++ b/doc/docbook/system/man1/tire.xml @@ -210,7 +210,7 @@ COPYRIGHT - This software is Copyright (c) 2008-2020 United States Government as + This software is Copyright (c) 2008-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/ug-g.xml b/doc/docbook/system/man1/ug-g.xml index ff7d9fbaae3..d3f4cda91fc 100644 --- a/doc/docbook/system/man1/ug-g.xml +++ b/doc/docbook/system/man1/ug-g.xml @@ -101,7 +101,7 @@ $ \fuug-g -o sample.g sample.prt COPYRIGHT - This software is Copyright (c) 1984-2020 United States Government as + This software is Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/vdeck.xml b/doc/docbook/system/man1/vdeck.xml index f425ac655a6..c55f6fc7184 100644 --- a/doc/docbook/system/man1/vdeck.xml +++ b/doc/docbook/system/man1/vdeck.xml @@ -149,7 +149,7 @@ table output COPYRIGHT -This software is Copyright (c) 1986-2020 by the United States +This software is Copyright (c) 1986-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/wavelet.xml b/doc/docbook/system/man1/wavelet.xml index c867377d551..4736fefacce 100644 --- a/doc/docbook/system/man1/wavelet.xml +++ b/doc/docbook/system/man1/wavelet.xml @@ -137,7 +137,7 @@ terms in the remainder. COPYRIGHT -This software is Copyright (c) 1999-2020 by the United States +This software is Copyright (c) 1999-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/wdb_example.xml b/doc/docbook/system/man1/wdb_example.xml index a64946811ac..acdccc2e0d5 100644 --- a/doc/docbook/system/man1/wdb_example.xml +++ b/doc/docbook/system/man1/wdb_example.xml @@ -55,7 +55,7 @@ COPYRIGHT - This software is Copyright (c) 2004-2020 United States Government as + This software is Copyright (c) 2004-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/window.xml b/doc/docbook/system/man1/window.xml index 489369b8fd5..e7781a6b75d 100644 --- a/doc/docbook/system/man1/window.xml +++ b/doc/docbook/system/man1/window.xml @@ -143,7 +143,7 @@ number of windows: 3 COPYRIGHT - This software is Copyright (c) 2005-2020 United States Government as + This software is Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/window_frame.xml b/doc/docbook/system/man1/window_frame.xml index 8b8d0fd240e..df979ee84e3 100644 --- a/doc/docbook/system/man1/window_frame.xml +++ b/doc/docbook/system/man1/window_frame.xml @@ -154,7 +154,7 @@ number of window frames: 3 COPYRIGHT - This software is Copyright (c) 2005-2020 United States Government as + This software is Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man1/wire.xml b/doc/docbook/system/man1/wire.xml index 7a24e74dd52..06a73790770 100644 --- a/doc/docbook/system/man1/wire.xml +++ b/doc/docbook/system/man1/wire.xml @@ -89,7 +89,7 @@ Segment # 3: (0.000000, 10.000000, -3.000000) 0.250000 COPYRIGHT - This software is Copyright (c) 2005-2020 United States Government as + This software is Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man3/libplot3.xml b/doc/docbook/system/man3/libplot3.xml index ca8efa8bb44..ad369a3c796 100644 --- a/doc/docbook/system/man3/libplot3.xml +++ b/doc/docbook/system/man3/libplot3.xml @@ -280,7 +280,7 @@ that are not generally found on other systems. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man3/librt.xml b/doc/docbook/system/man3/librt.xml index 48bfb960435..d2ce64f7729 100644 --- a/doc/docbook/system/man3/librt.xml +++ b/doc/docbook/system/man3/librt.xml @@ -488,7 +488,7 @@ This is unfortunate. COPYRIGHT - This software is Copyright (c) 1986-2020 United States Government as + This software is Copyright (c) 1986-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man3/libwdb.xml b/doc/docbook/system/man3/libwdb.xml index cd7469ef843..2f5e547307d 100644 --- a/doc/docbook/system/man3/libwdb.xml +++ b/doc/docbook/system/man3/libwdb.xml @@ -448,7 +448,7 @@ We may pay for this later. COPYRIGHT - This software is Copyright (c) 1987-2020 United States Government as + This software is Copyright (c) 1987-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man3/redblack.xml b/doc/docbook/system/man3/redblack.xml index 52baab22465..cb7e68ee28b 100644 --- a/doc/docbook/system/man3/redblack.xml +++ b/doc/docbook/system/man3/redblack.xml @@ -735,7 +735,7 @@ using the debug bit flags defined in COPYRIGHT -This software is Copyright (c) 1999-2020 by the United States +This software is Copyright (c) 1999-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man5/CMakeLists.txt b/doc/docbook/system/man5/CMakeLists.txt index fa243bb42cd..a84db148b7d 100644 --- a/doc/docbook/system/man5/CMakeLists.txt +++ b/doc/docbook/system/man5/CMakeLists.txt @@ -1,5 +1,6 @@ configure_file(${CMAKE_CURRENT_SOURCE_DIR}/attributes.xml.in ${CMAKE_CURRENT_BINARY_DIR}/attributes.xml COPYONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/attributes.xml") add_custom_command( OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/attr_std_table.xml @@ -35,7 +36,10 @@ set(man5_EN set(attribute_DEPS attr_std_list_xml attr_std_table_xml) ADD_DOCBOOK("HTML;PHP;MAN5;PDF" man5_EN man5 "${attribute_DEPS}") -CMAKEFILES(CMakeLists.txt) +CMAKEFILES( + CMakeLists.txt + attributes.xml.in + ) # Local Variables: # tab-width: 8 diff --git a/doc/docbook/system/man5/STEP.xml b/doc/docbook/system/man5/STEP.xml index c1d4b598749..fcc82b858f4 100644 --- a/doc/docbook/system/man5/STEP.xml +++ b/doc/docbook/system/man5/STEP.xml @@ -172,7 +172,7 @@ COPYRIGHT - Copyright (c) 2015-2020 by the United States Government as represented by U.S. Army Research Laboratory. + Copyright (c) 2015-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man5/attributes.xml.in b/doc/docbook/system/man5/attributes.xml.in index 3ec91c60c7d..fc4bd61b5e4 100644 --- a/doc/docbook/system/man5/attributes.xml.in +++ b/doc/docbook/system/man5/attributes.xml.in @@ -94,7 +94,7 @@ COPYRIGHT - This software is Copyright (c) 2010-2020 United States Government as + This software is Copyright (c) 2010-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man5/burst_point_library.xml b/doc/docbook/system/man5/burst_point_library.xml index be86c204b77..82d4cee4370 100644 --- a/doc/docbook/system/man5/burst_point_library.xml +++ b/doc/docbook/system/man5/burst_point_library.xml @@ -235,7 +235,7 @@ COPYRIGHT - This software is Copyright (c) 1989-2020 by the United States + This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man5/burst_shotline_files.xml b/doc/docbook/system/man5/burst_shotline_files.xml index 9f14e807739..7a3e618334e 100644 --- a/doc/docbook/system/man5/burst_shotline_files.xml +++ b/doc/docbook/system/man5/burst_shotline_files.xml @@ -182,7 +182,7 @@ COPYRIGHT - This software is Copyright (c) 1989-2020 by the United States + This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man5/bw.xml b/doc/docbook/system/man5/bw.xml index 36ba6fcb294..fb21b4a3014 100644 --- a/doc/docbook/system/man5/bw.xml +++ b/doc/docbook/system/man5/bw.xml @@ -105,7 +105,7 @@ separates .pix file RGB colors into three .bw files. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man5/cmap.xml b/doc/docbook/system/man5/cmap.xml index 64f7069fe17..8bd7aa85792 100644 --- a/doc/docbook/system/man5/cmap.xml +++ b/doc/docbook/system/man5/cmap.xml @@ -85,7 +85,7 @@ loads gamma correcting colormaps. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man5/dsp.xml b/doc/docbook/system/man5/dsp.xml index 5240d7b2893..25b8a4a1992 100644 --- a/doc/docbook/system/man5/dsp.xml +++ b/doc/docbook/system/man5/dsp.xml @@ -56,7 +56,7 @@ their dimensions can be automatically determined by using programs. COPYRIGHT - This software is Copyright (c) 2012-2020 United States Government + This software is Copyright (c) 2012-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man5/pix.xml b/doc/docbook/system/man5/pix.xml index 55a6312ddb6..17f58689f13 100644 --- a/doc/docbook/system/man5/pix.xml +++ b/doc/docbook/system/man5/pix.xml @@ -112,7 +112,7 @@ separates .pix file RGB colors into three .bw files. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/man5/plot3.xml b/doc/docbook/system/man5/plot3.xml index 5ef84a65d90..36a02a4cf35 100644 --- a/doc/docbook/system/man5/plot3.xml +++ b/doc/docbook/system/man5/plot3.xml @@ -364,7 +364,7 @@ devices whose face is not square. COPYRIGHT -This software is Copyright (c) 1989-2020 by the United States +This software is Copyright (c) 1989-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/mann/CMakeLists.txt b/doc/docbook/system/mann/CMakeLists.txt index db6f4f630c4..9b49bf9d38f 100644 --- a/doc/docbook/system/mann/CMakeLists.txt +++ b/doc/docbook/system/mann/CMakeLists.txt @@ -131,6 +131,7 @@ set(mann_EN nirt.xml nmg_collapse.xml nmg_simplify.xml + npush.xml oed.xml opendb.xml orientation.xml @@ -195,6 +196,7 @@ set(mann_EN size.xml solids.xml sph-part.xml + stat.xml status.xml summary.xml sv.xml diff --git a/doc/docbook/system/mann/analyze.xml b/doc/docbook/system/mann/analyze.xml index 92994934b80..9d07f8a2086 100644 --- a/doc/docbook/system/mann/analyze.xml +++ b/doc/docbook/system/mann/analyze.xml @@ -10,9 +10,7 @@ analyze - Displays the rotation and fallback angles, surface area, and - plane equation for each face of the ARB specified on the command line. The total - surface area, volume, and the length of each edge are also displayed. + Report and/or compute analytical information about the listed objects. @@ -20,39 +18,243 @@ analyze - arb_name + options + subcommand + + + + + summarize + obj + + + + + + intersect + options + obj1 obj2 [...] + + + + + + subtract + options + obj1 obj2 [...] + + + DESCRIPTION - The analyze command displays the rotation and fallback - angles, surface area, and plane equation for each face of the ARB specified - on the command line. The total surface area, volume, and the length of each - edge are also displayed. If executed while editing an ARB, the arb_name may - be omitted, and the ARB being edited will be analyzed. + The analyze command provides an array of reporting and + shape generation capabilities. The classic behavior (and the behavior users + will see if calling without specifying a subcommand) is a report summarizing + geometric information about the specified solid(s). This behavior may also + be explicitly invoked by the summarize subcommand. - - EXAMPLES + + The intersect will take the first object specified and + intersect it with any subsequently specified objects - in effect, building + up a new object with the geoemtry common to all objects specified. + - The example shows how to display information about an ARB's rotation and - fallback angles, surface area, and plane equation for its face. - Edge information is also displayed. + The subtract will take the first object specified and + subtract from it any subsequently specified objects. + + + + EXAMPLES + Analyze a particular <emphasis>ARB</emphasis> + + mged> analyze box.s + + +box.s: ARB8 + 1 (30.0283, -5.21153, -16.3791) + 2 (30.0283, 21.5812, -16.3791) + 3 (30.0283, 21.5812, 10.4137) + 4 (30.0283, -5.21153, 10.4137) + 5 (3.23558, -5.21153, -16.3791) + 6 (3.23558, 21.5812, -16.3791) + 7 (3.23558, 21.5812, 10.4137) + 8 (3.23558, -5.21153, 10.4137) + ++------+---------------------------+-------------------------------------------------+--------------+ +| FACE | ROT FB | PLANE EQUATION | SURFACE AREA | ++------+---------------------------+-------------------------------------------------+--------------+ +| 1234 | 0.00000000 0.00000000 | 1.00000000 0.00000000 0.00000000 30.02833557 | 717.85172729 | +| 5678 | 180.00000000 -0.00000000 | -1.00000000 -0.00000000 -0.00000000 -3.23558044 | 717.85172729 | +| 1584 | 270.00000000 -0.00000000 | -0.00000000 -1.00000000 -0.00000000 5.21152973 | 717.85172729 | +| 2376 | 90.00000000 -0.00000000 | -0.00000000 1.00000000 -0.00000000 21.58122540 | 717.85172729 | +| 1265 | 0.00000000 -90.00000000 | -0.00000000 0.00000000 -1.00000000 16.37908936 | 717.85172729 | +| 4378 | 0.00000000 90.00000000 | 0.00000000 -0.00000000 1.00000000 10.41366577 | 717.85172729 | ++------+---------------------------+-------------------------------------------------+--------------+ + + +--------------------+--------------------+--------------------+--------------------+ + | EDGE LENGTH | EDGE LENGTH | EDGE LENGTH | EDGE LENGTH | + +--------------------+--------------------+--------------------+--------------------+ + | 12 26.79275513 | 23 26.79275513 | 34 26.79275513 | 14 26.79275513 | + | 15 26.79275513 | 56 26.79275513 | 26 26.79275513 | 67 26.79275513 | + | 78 26.79275513 | 58 26.79275513 | 48 26.79275513 | 37 26.79275513 | + +--------------------+--------------------+--------------------+--------------------+ + + +-------------------------------+ + | Volume = 19233.22554681 | + | Surface Area = 4307.11036376 | + | Gallons = 0.00508088 | + +-------------------------------+ + + + + Analyze a particular <emphasis>TOR</emphasis> + + mged> analyze tor + + +tor: torus (TOR) + V (4.91624, -32.8022, 31.7118), r1=25.4 (A), r2=5.08 (H) + N=(0, 1, 0) + A=(0, -0, 1) + B=(1, 0, -0) + vector to inner edge = (0, -0, 20.32) + vector to outer edge = (0, -0, 30.48) + + Centroid: (4.91624, -32.8022, 31.7118) + + +-------------------------------+ + | Volume = 12938.70529707 | + | Surface Area = 5093.97853992 | + | Gallons = 0.00341804 | + +-------------------------------+ + + + + Points inside a sphere + + + mged> l sph.s + + +sph.s: ellipsoid (ELL) + V (0, 0, 0) + A (10, 0, 0) mag=10 + B (0, 10, 0) mag=10 + C (0, 0, 10) mag=10 + A direction cosines=(0, 90, 90) + A rotation angle=0, fallback angle=0 + B direction cosines=(90, 0, 90) + B rotation angle=90, fallback angle=0 + C direction cosines=(90, 90, 0) + C rotation angle=0, fallback angle=90 + + + + mged> l pnts.s + + +pnts.s: Point Cloud (PNTS) +Total number of points: 6 +Default scale: 0.000000 +point#, (point) +1, (2.000000 2.000000 2.000000) +2, (0.000000 0.000000 -5.000000) +3, (0.000000 0.000000 10.000000) +4, (0.000000 0.000000 20.000000) +5, (10.000000 0.000000 10.000000) +6, (0.000000 10.000000 20.000000) + + + + mged> analyze intersect -o inside.s pnts.s sph.s + + +3 + + + + mged> l inside.s + + +inside.s: Point Cloud (PNTS) +Total number of points: 3 +Default scale: 0.000000 +point#, (point) +1, (0.000000 0.000000 10.000000) +2, (0.000000 0.000000 -5.000000) +3, (2.000000 2.000000 2.000000) + + + + + Points outside a sphere + - mged> analyze arb_name + mged> l sph.s + +sph.s: ellipsoid (ELL) + V (0, 0, 0) + A (10, 0, 0) mag=10 + B (0, 10, 0) mag=10 + C (0, 0, 10) mag=10 + A direction cosines=(0, 90, 90) + A rotation angle=0, fallback angle=0 + B direction cosines=(90, 0, 90) + B rotation angle=90, fallback angle=0 + C direction cosines=(90, 90, 0) + C rotation angle=0, fallback angle=90 + + - Rotation and fallback angles, surface area, and plane equation for - each face of the ARB specified on the command line are displayed along - with edge information. + mged> l pnts.s + +pnts.s: Point Cloud (PNTS) +Total number of points: 6 +Default scale: 0.000000 +point#, (point) +1, (2.000000 2.000000 2.000000) +2, (0.000000 0.000000 -5.000000) +3, (0.000000 0.000000 10.000000) +4, (0.000000 0.000000 20.000000) +5, (10.000000 0.000000 10.000000) +6, (0.000000 10.000000 20.000000) + + + + mged> analyze subtract -o outside.s pnts.s sph + + +3 + + + + mged> l outside.s + + +outside.s: Point Cloud (PNTS) +Total number of points: 3 +Default scale: 0.000000 +point#, (point) +1, (0.000000 10.000000 20.000000) +2, (10.000000 0.000000 10.000000) +3, (0.000000 0.000000 20.000000) + + + + + AUTHOR diff --git a/doc/docbook/system/mann/attr.xml b/doc/docbook/system/mann/attr.xml index 96c7c60a6ef..cca6bcf18bd 100644 --- a/doc/docbook/system/mann/attr.xml +++ b/doc/docbook/system/mann/attr.xml @@ -227,7 +227,7 @@ material_id=20 COPYRIGHT - This software is Copyright (c) 2008-2020 United States + This software is Copyright (c) 2008-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/mann/bb.xml b/doc/docbook/system/mann/bb.xml index 4e5505c17f2..658ca41c61b 100644 --- a/doc/docbook/system/mann/bb.xml +++ b/doc/docbook/system/mann/bb.xml @@ -195,7 +195,7 @@ havoc_parts_bbox.s: ARB8 COPYRIGHT - This software is Copyright (c) 2009-2020 United States Government as represented by the + This software is Copyright (c) 2009-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/mann/bolt.xml b/doc/docbook/system/mann/bolt.xml index e983e8823f0..08f69b86dda 100644 --- a/doc/docbook/system/mann/bolt.xml +++ b/doc/docbook/system/mann/bolt.xml @@ -168,7 +168,7 @@ number of bolts: 3 COPYRIGHT - This software is Copyright (c) 2005-2020 United States Government as + This software is Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/mann/dbupgrade.xml b/doc/docbook/system/mann/dbupgrade.xml index 07b99e95ad0..89f7a77dadf 100644 --- a/doc/docbook/system/mann/dbupgrade.xml +++ b/doc/docbook/system/mann/dbupgrade.xml @@ -88,7 +88,7 @@ model.g model.g.R4.g COPYRIGHT -This software is Copyright (c) 2006-2020 by the United States +This software is Copyright (c) 2006-2021 by the United States Government as represented by U.S. Army Research Laboratory. diff --git a/doc/docbook/system/mann/exists.xml b/doc/docbook/system/mann/exists.xml index ae872cfb2c8..99afa945430 100644 --- a/doc/docbook/system/mann/exists.xml +++ b/doc/docbook/system/mann/exists.xml @@ -271,7 +271,7 @@ COPYRIGHT - This software is Copyright (c) 2008-2020 United States Government as + This software is Copyright (c) 2008-2021 United States Government as represented by the U.S. Army Research Laboratory. Portions Copyright 1990, 1993, 1994 The Regents of the University of California, per copyright and license information from OpenBSD and NetBSD. For more details diff --git a/doc/docbook/system/mann/facetize.xml b/doc/docbook/system/mann/facetize.xml index 17841682511..f0be4e1e9c8 100644 --- a/doc/docbook/system/mann/facetize.xml +++ b/doc/docbook/system/mann/facetize.xml @@ -148,6 +148,41 @@ + + + Increase Decimation in CM Mode + + mged> facetize --CM --feature-size 0.06 --decimation-feature-size 2.0 ellipse.r ell.bot + +CM: completed in 16 seconds with size 0.06 +CM: completed in 23 seconds with size 0.054 +CM: timed out after 30 seconds with size 0.0486 +CM: successfully created 6960500 faces, feature size 0.054 +CM: decimation succeeded, final BoT has 104 faces + + + + The default settings on this object in CM mode will produce a little over 8000 faces in the final bot, but the addition of the option with a >1.5 value has dramatically reduced the count to 104. + + + + + Decrease Decimation in CM Mode + + mged> facetize --CM --feature-size 0.06 --decimation-feature-size .01 ellipse.r ell.bot + +CM: completed in 16 seconds with size 0.06 +CM: completed in 23 seconds with size 0.054 +CM: timed out after 30 seconds with size 0.0486 +CM: successfully created 6960500 faces, feature size 0.054 +CM: decimation succeeded, final BoT has 247642 faces + + + + If the intent is preserve a more detailed mesh, reducing will keep more of the original triangles - in the above example, almost 250 thousand of the original 6.9 million faces were retained. NOTE: use lower values here cautiously, as extremely large meshes can be very difficult for many tools to deal with. + + + @@ -193,7 +228,10 @@ process its initial mesh with a decimation routine to remove triangles which are not necessary to actual feature representation. This process is also feature-size based, and by default is set to 1.5x the feature size. However, if the user wishes to preserve more triangles than the default behavior they may manually - override this parameter with the --decimation-feature-size option. + override this parameter with the --decimation-feature-size option. Generally + speaking smaller values will lead to more meshes being retained in the final output mesh, but experimentation + will likely be needed to zero in on desired results. See CM examples above for an illustration using + the moss.g ellipsoid region. Both NMG and CM assume a geometry hierarchy containing only @@ -215,6 +253,9 @@ + + + USEFUL TRICKS diff --git a/doc/docbook/system/mann/gdiff.xml b/doc/docbook/system/mann/gdiff.xml index 008286299c6..c0d8f95d983 100644 --- a/doc/docbook/system/mann/gdiff.xml +++ b/doc/docbook/system/mann/gdiff.xml @@ -103,6 +103,18 @@ + + -S + + + The "S" option enables a completely different difference testing mode - rather than using rays + to interrogate geometries, it checks tree structures, boolean operations, matrices and leaf + objects. It deliberately does not check object names, in order to compare + the actual volumetric definitions of the trees. Since there is no ray sampling, this option + will not currently produce any visual output. + + + @@ -113,7 +125,7 @@ COPYRIGHT - This software is Copyright (c) 2016-2020 United States Government as + This software is Copyright (c) 2016-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/mann/get.xml b/doc/docbook/system/mann/get.xml index 2922d8627e8..44b108a1ea0 100644 --- a/doc/docbook/system/mann/get.xml +++ b/doc/docbook/system/mann/get.xml @@ -70,7 +70,7 @@ eto.s: Elliptical Torus (ETO) COPYRIGHT - This software is Copyright (c) 2008-2020 United States + This software is Copyright (c) 2008-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/mann/kill.xml b/doc/docbook/system/mann/kill.xml index 5f96e545c09..b0a35e89565 100644 --- a/doc/docbook/system/mann/kill.xml +++ b/doc/docbook/system/mann/kill.xml @@ -1,61 +1,79 @@ - - KILL - nged - BRL-CAD - BRL-CAD User Commands - - - - kill - Deletes specified objects from the current database. - - - - - - - kill - -f - objects - - - -DESCRIPTION + + KILL + nged + BRL-CAD + BRL-CAD User Commands + + + + kill + Deletes specified objects from the current database. + + + + + + + kill + -f + objects + + + + DESCRIPTION - Deletes the specified objects from the current database. - This command affects only the objects actually listed on the command line. If a combination is killed, its members are not affected. If the -f option is specified, then kill will not complain if some, or all, of the objects specified do not actually exist in the database. Note that the objects are killed immediately. There is no need for a write file command in MGED, and there is no undo command. Use this command with caution. Other commands that remove objects from the database are killall and killtree . + Deletes the specified objects from the current database. This command + affects only the objects actually listed on the command line. If a + combination is killed, its members are not affected. If the -foption + is specified, then kill will not complain if some, or all, of the objects + specified do not actually exist in the database. Note that the objects + are killed immediately. There is no need for a write file command in MGED, + and there is no undo command. Use this + command with caution. Other commands that remove objects from the database are + killall and killtree. - - -EXAMPLES + + The option may be added to suppress database object lookup messages + reporting failure, which will otherwise let the user know an invalid object was specified. + + - The example shows the use of the kill command to delete specified objects from the database. + EXAMPLES + + The example shows the use of the kill command to delete specified objects + from the database. Delete objects from the database. - - - mged> kill group1 region2 shapeb - - Deletes group1, region2, and shapeb from the database. - - - - + + + mged> kill group1 region2 shapeb + + + Deletes group1, region2, and shapeb from + the database. + + + + - + -AUTHORBRL-CAD Team + AUTHOR + + BRL-CAD Team + + -BUG REPORTS + BUG REPORTS Reports of bugs or problems should be submitted via electronic mail to devs@brlcad.org - + diff --git a/doc/docbook/system/mann/man.xml b/doc/docbook/system/mann/man.xml index 2cc7994a62d..14928f1be34 100644 --- a/doc/docbook/system/mann/man.xml +++ b/doc/docbook/system/mann/man.xml @@ -35,7 +35,7 @@ COPYRIGHT - This software is Copyright (c) 2016-2020 United States Government as + This software is Copyright (c) 2016-2021 United States Government as represented by the U.S. Army Rebrlman Laboratory. diff --git a/doc/docbook/system/mann/npush.xml b/doc/docbook/system/mann/npush.xml new file mode 100644 index 00000000000..6466cc24c63 --- /dev/null +++ b/doc/docbook/system/mann/npush.xml @@ -0,0 +1,438 @@ + + + + NPUSH + nged + BRL-CAD + BRL-CAD + + + + npush + + push matrices down a tree hierarchy + + + + + + + npush + -h + -? + -v + -f + -x + -r + -s + -d max_depth + arg1 [arg2]... + + + + + Background: Matrices in BRL-CAD + + + BRL-CAD uses a global coordinate system in which all objects are placed. This means each region + must uniquely occupy its own portion of that space in order to avoid overlapping with another + region. Naively, this means that all objects defined in a .g file need to individually + describe distinct volumes using unique primitives. While possible, such an approach is quite + wasteful if different regions define the same shape and vary only in the positioning of that shape. + A classic example is as a standard bolt used hundereds of times in assembling a machine - ideally + such a shape should only need to be described once, and then instances of that + shape are positioned to identify individual bolts in the overall model. + + + COMB trees, which describe organized hierarchies of individual shapes (or other COMB trees) in + BRL-CAD, are the standard mechanism used in .g files to reusing otherwise identical object definitions + in different positions and orientations. Matrices associated with instances of + objects listed in COMB trees position those individual parts, and matrices at different portions of + the COMB tree hierarchy can position smaller or large components of the whole. + For example, the tree: + + + sph3/ + u sph3_1.r/R + u sph3.s + u sph3_2.r/R + u sph3.s + + + appears at first glance to define an overlap, since it includes two different regions both of which + are defined using the same sphere object: sph3.s. However, if we inspect sph3_1.r and sph3_2.r more + closely, we see that their definitions incorporate matrices over the instances of sph3.s: + + +sph3_1.r: REGION id=1002 (air=0, los=100, GIFTmater=1) -- + u sph3.s [10, 0, 0] scale 1 +sph3_2.r: REGION id=1003 (air=0, los=100, GIFTmater=1) -- + u sph3.s [20, 0, 0] scale 1 + + + The instance of sph3.s in sph3_1.r is offset in the X direction by 10mm, and the sph3_2.r instance is + offset by 20mm. In addition, if we inspect sph3's tree: + + +sph3: -- + u sph3_1.r + u sph3_2.r [100, 0, 0] scale 1 + + + we see that the instance of sph3_2.r in sph3 also has a matrix offsetting its position. So the + instance of sph.s defined by sph3/sph3_2.r/sph.s is offset in total by 120mm in the positive X direction + relative to the global definition of sph.s + + + As useful as these matrices are, users frequently need to consolidate multiple levels of positioning + within a COMB tree, or even eliminate them completely if a client's code is not able to properly interpret + the matrix information of a COMB hierarchy for its own processing. Thus, specific logic is available in + BRL-CAD to accomplish these tasks. + + + + + Overview + + + The GED command npush defines logic for "moving" matrix operations within a COMB tree, + without changing the position of individual object instances in the tree definition. + + + + + A Note on Depth + + + It is worth taking a little time to define what we are referring to when we discuss the concept of + depth when it comes to applying matrix pushing operations. Consider the hierarchy: + + +sph_009/ + u [M1] sph9_g1/ + u [M2] sph9_g2/ + u [M3] sph9_g3/ + u [M4] sph9_g4/ + u [M5] sph9.r/R + u [M6] sph9.s + + + M1, M2, etc. are matrices applied at each level of the hierarchy. When discussing M1, we would refer + to that matrix as being at "depth 1" in the hierarchy, as it is defined at one level below the top + of the tree. Similarly, M2 would be defined as being at depth 2, and so on. + + + When discussing depth in push operations, pushing a matrix to a depth means we propagate the matrices + down the tree to define a matrix at the specified depth. For example, in the above example, a push + of the matrices to depth 4 would result in: + + +sph_009/ + u sph9_g1/ + u sph9_g2/ + u sph9_g3/ + u [M1234] sph9_g4/ + u [M5] sph9.r/R + u [M6] sph9.s + + + where M1234 is the accumulated application of M1, M2, M3 and M4. Note the new matrix is applied at + depth 4, the depth specified as the depth limit in the push. Similarly, a depth limit of 6 would + result in: + + +sph_009/ + u sph9_g1/ + u sph9_g2/ + u sph9_g3/ + u sph9_g4/ + u sph9.r/R + u [M123456] sph9.s + + + where M123456 is the accumulated application of M1, M2, M3, M4, M5 and M6. Note that the final step + of eliminating the matrix by updating the parameters of sph.s was not taken. That operation is defined + conceptually as being at one depth lower than the matrix applied to the object. Thus, it would require + a depth limit of 7 to completely eliminate all the matrices in the example and update sph.s: + + +sph_009/ + u sph9_g1/ + u sph9_g2/ + u sph9_g3/ + u sph9_g4/ + u sph9.r/R + u sph9.s (updated) + + + Note that if an object or comb exists at different levels of the hierarchy, depth limits may produce + copies of an object even if there wouldn't otherwise be a need for those copies. Take the following + example: + + +sph_010/ + u [M1] sph10_f/ + u [M1] sph10_g/ + u [M1] sph10.r/R + u [M2] sph10.s + u [M3] sph10_a.r/R + u [M3] sph10.s + + + where 3*M1+M2 = 2*M3 (i.e., the matricies on each branch of sph_010's tree individually evaluate out + to the same result). Since sph10.s ends up in the same place in both branches of sph_010, a full + push of all matrices in this tree shouldn't need to create a copy of sph10.s with new paramenters. However, + if a push is limited to depth 3, we get a different outcome in that respect: + + +sph_010/ + u sph10_f/ + u sph10_g/ + u [M1*3] sph10.r/R + u [M2] sph10.s + u sph10_a.r/R + u sph10.s_01 (updated sph10.s copy) + + + Depth 3 is deep enough that the parameters of sph10.s in the second branch should be updated. However, + in the first branch, there is an instance of sph10.s that will remain unmodified with a depth limit of + three. Thus, the database needs to contain both the modified and unmodified sph10.s in order to define + the requested comb tree. A subsequent full push would result in sph10.s being identical to sph10.s_01, + but (at least for now) logic to automatically recognize this case and simplify it is not built in to the + push logic. + + + The same phenomena can occur with comb trees. Consider the following example: + + +sph_011/ + u sph11_f/ + u [M1] sph11_g/ + u sph11.s + u sph11_h/ + u [M2] sph11_g/ + u sph11.s + + + If sph_011 is pushed to depth 3, the matrices will be pushed to the level of sph11_g's instance + references (sph11.s, in this case.) However, if M1 != M2, sph11_g would need to have two different + matrices in its tree for the same instance. Since a depth limit of 3 does not push the matrices + down to parameter setting of sph11.s, a new comb must be created: + + +sph_011/ + u sph11_f/ + u sph11_g/ + u [M1] sph11.s + u sph11_h/ + u sph11_g_01/ (updated sph11_g copy) + u [M2] sph11.s + + + + + Pushing relative to Regions and Shapes + + + In addition to numerical depth limits, npush offers two additional specifiers that + are more aware of specific types of objects in trees. The option will push matrices + down to a level just above region references, and the option will push matrices to + a level just above primitive shapes. For example, using the following hierarchy: + + +sph_010/ + u [M1] sph10_f/ + u [M1] sph10_g/ + u [M1] sph10.r/R + u [M2] sph10.s + u [M3] sph10_a.r/R + u [M3] sph10.s + + + a push would result in the following: + + +sph_010/ + u sph10_f/ + u sph10_g/ + u [M1*3] sph10.r/R + u [M2] sph10.s + u [M3] sph10_a.r/R + u [M3] sph10.s + + + A push, on the other hand, will take the matrices in both branches deeper: + + +sph_010/ + u sph10_f/ + u sph10_g/ + u sph10.r/R + u [M1*3+M2] sph10.s + u sph10_a.r/R + u [M3*2] sph10.s + + + Note that neither option alters the parameters of primitive shapes. + + + + Worse still is a case where multiple copies of identical objects are referenced at multiple levels. + Consider the following example: + + +sph_016/ + u [M1] sph16a/R + u [M2] sph16_1/ + u sph16.c/ + u sph16.s + u sph16_1/ + u sph16.c/ + u sph16.s + u [M3] sph16a/R + u [M4] sph16_1/ + u sph16.c/ + u sph16.s + u sph16_1/ + u sph16.c/ + u sph16.s + + + If we push to depth 3, we end up with four different versions of the sph16.c tree: + + +sph_016/ + u sph16a/R + u sph16_1/ + u [M12] sph16.c/ + u sph16.s + u sph16_1/ + u [M1] sph16.c/ + u sph16.s + u sph16a/R + u sph16_1/ + u [M34] sph16.c/ + u sph16.s + u sph16_1/ + u [M3] sph16.c/ + u sph16.s + + + The first stage of the answer is to create three new combinations and redefine the sph16a tree: + + +sph_016/ + u sph16a/R + u sph16_1_01/ + u [M12] sph16.c/ + u sph16.s + u sph16_1/ + u [M1] sph16.c/ + u sph16.s + u sph16a/R + u sph16_1_02/ + u [M34] sph16.c/ + u sph16.s + u sph16_1_03/ + u [M3] sph16.c/ + u sph16.s + + + That addresses sph16_1, but the tree updates to sph16a created a new problem: now we have + two different versions of the sph16a tree. To resolve that problem, we must create a new + comb to replace one of the conflicting sph16a instances and redefine the sph_016 tree: + + +sph_016/ + u sph16a/R + u sph16_1_01/ + u [M12] sph16.c/ + u sph16.s + u sph16_1/ + u [M1] sph16.c/ + u sph16.s + u sph16a_01/R + u sph16_1_02/ + u [M34] sph16.c/ + u sph16.s + u sph16_1_03/ + u [M3] sph16.c/ + u sph16.s + + + Unlike sph16a and sph16_1, sph_016 has not seen any changes to its volumetric definition. sph_016 + is the "top level" object specified for this push, and as such constitutes a reliable termination point for + any need to propagate tree changes. Even if any combs elsewhere in the database reference sph_016, + they will not see any volumetric changes as a consequence of the operation and do not need to redefine + their trees to preserve original sph_016 trees for external use in copies of sph_016. + + + + OPTIONS + + + + -h or -? + + + Print help and exit. + + + + + -v + + + Verbose processing output (primarily used for debugging). + + + + + -f or -x + + + Force creation of new objects if necessary to avoid conflicts while fully pushing matrices. (A.k.a "xpush" mode). + + + + + -r + + + Halt push operations at the hierarchy level above regions. + + + + + -s + + + Halt push operations at the hierarchy level above solids. + + + + + -d max_depth + + + Halt push operations at the hierarchy level specified by max_depth. + + + + + + + + EXAMPLES + + Default + + push sph1 + + + + + + + + diff --git a/doc/docbook/system/mann/rtarea.xml b/doc/docbook/system/mann/rtarea.xml index 7faf0b56322..79a6261ec9f 100644 --- a/doc/docbook/system/mann/rtarea.xml +++ b/doc/docbook/system/mann/rtarea.xml @@ -325,7 +325,7 @@ COPYRIGHT - This software is Copyright (c) 1987-2020 United States Government as represented by the + This software is Copyright (c) 1987-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/mann/saveview.xml b/doc/docbook/system/mann/saveview.xml index 067b554113b..e6fb1913402 100644 --- a/doc/docbook/system/mann/saveview.xml +++ b/doc/docbook/system/mann/saveview.xml @@ -98,10 +98,10 @@ EOF Save current viewing parameters in a specified file in the form of a shell script to run the BRL-CAD <emphasis>rt</emphasis> program. - mged>rt_script -s1024 + mged>saveview script.rt -s1024 - Creates (or appends to) a file named rt_script that will contain a script to run the rt program and create a color-shaded image of the current MGED display. The image - produced will be 1024 pixels square. + Creates (or appends to) a file named script.rt that will contain a POSX shell script for running the rt program and create a color-shaded image of the current MGED display. The image + produced will be 1024 pixels square due to the additional arg specified after the script name. Additional args are passed to rt. diff --git a/doc/docbook/system/mann/search.xml b/doc/docbook/system/mann/search.xml index 1d6fbc6d875..44b9df973e9 100644 --- a/doc/docbook/system/mann/search.xml +++ b/doc/docbook/system/mann/search.xml @@ -584,6 +584,15 @@ d2.r object whose internal definition indiciates it is of that type. Currently such objects are possible with "bot" and "brep" objects. + + The the pattern volume can be used as a mirror + of plate, in that it will report objects that clearly define a non-implicit + solid volume. Its determination is local - for example, combs aren't matched + because a comb may be made up of non-volumetric objects. In particular, + plate mode objects will not match because their volume is implicit, and + (for example) surface mode BoTs will not match because they don't define a + volume. + @@ -1018,7 +1027,7 @@ d2.r COPYRIGHT - This software is Copyright (c) 2008-2020 United States Government as + This software is Copyright (c) 2008-2021 United States Government as represented by the U.S. Army Research Laboratory. Portions Copyright 1990, 1993, 1994 The Regents of the University of California, per copyright and license information from OpenBSD and NetBSD. For more details diff --git a/doc/docbook/system/mann/simulate.xml b/doc/docbook/system/mann/simulate.xml index c55271ff535..6210d49a068 100644 --- a/doc/docbook/system/mann/simulate.xml +++ b/doc/docbook/system/mann/simulate.xml @@ -192,7 +192,7 @@ COPYRIGHT - This software is Copyright (c) 2017-2020 United States Government as + This software is Copyright (c) 2017-2021 United States Government as represented by the U.S. Army Research Laboratory. diff --git a/doc/docbook/system/mann/stat.xml b/doc/docbook/system/mann/stat.xml new file mode 100644 index 00000000000..732c05387fa --- /dev/null +++ b/doc/docbook/system/mann/stat.xml @@ -0,0 +1,219 @@ + + + + STAT + nged + BRL-CAD + BRL-CAD + + + + stat + + report information about objects in a BRL-CAD database + + + + + + + stat + -h + -? + -r + -F string + -C type1[,type2]... + -S type1[,type2]... + glob pattern + + + + + Overview + + + The GED stat command reports information about objects in + a BRL-CAD .g file. It produces a tabular output, with options for user configurability + and sorting. + + + + Available types reflect geometry object data: + + STAT Information Keys - Core Object Info + + + + + name Object database name (for example, "primitive.s") + uses Number of uses, from instancing + size Size of database object + refs Number of times object is referenced by COMBs + flags Flags + major_type Object major type + minor_type Object minor type + type Object type (short name) + + +
+
+ + + In addition to the above standard keys, attributes may also be specified. If the desired attribute happens + to have the same name as one of the above standard keys, the prefix "attr:" may be added to denote an attribute. + +
+ + OPTIONS + + + + -h or -? + + + Print help and exit. + + + + + -r + + + Print raw values, instead of human friendly strings (for example, 5195952 for a size instead of 5.0M). + + + + + -F + + + Specify search style filters to trim down what is reported in stat output. + + + + + -C + + + Supply a comma separated list of column specifiers or attribute keys to define the table layout for stat. + + + + + -S + + + Supply a comma separated list of column specifiers or attribute keys to specify a sorting priority for stat. + Priority is left to right - sorting will be performed first based on the leftmost specifier, and subsequent specifiers + will be used to resolve any ties. To reverse the ordering decisions for a given column, prefix the specifier with a "!" + character. + + + + + + + + EXAMPLES + + Default Output + + stat * + + + Object Name uses References Flags Type Size +----------------------- ------ ------------ ------- -------- ------ + Default 0 1 2 comb 288B + NIST_MBE_PMI_7-10.3dm 0 0 2 comb 264B + Solid1.r 0 1 6 region 280B + Solid1.r.s 0 1 1 brep 859K + Solid1_2.r 0 1 6 region 280B + Solid1_2.r.s 0 1 1 brep 672K + Solid1_3.r 0 1 6 region 280B + Solid1_3.r.s 0 1 1 brep 431K + Solid1_4.r 0 1 6 region 280B + Solid1_4.r.s 0 1 1 brep 771K + _GLOBAL 0 0 8 96B + + + + Sorting by Size + + stat -S "size" * + + + Object Name uses References Flags Type Size +----------------------- ------ ------------ ------- -------- ------ + _GLOBAL 0 0 8 96B + NIST_MBE_PMI_7-10.3dm 0 0 2 comb 264B + Solid1_2.r 0 1 6 region 280B + Solid1_3.r 0 1 6 region 280B + Solid1.r 0 1 6 region 280B + Solid1_4.r 0 1 6 region 280B + Default 0 1 2 comb 288B + Solid1_3.r.s 0 1 1 brep 431K + Solid1_2.r.s 0 1 1 brep 672K + Solid1_4.r.s 0 1 1 brep 771K + Solid1.r.s 0 1 1 brep 859K + + + + Sorting by Size, Reversed Order + + stat -S "!size" * + + + Object Name uses References Flags Type Size +----------------------- ------ ------------ ------- -------- ------ + Solid1.r.s 0 1 1 brep 859K + Solid1_4.r.s 0 1 1 brep 771K + Solid1_2.r.s 0 1 1 brep 672K + Solid1_3.r.s 0 1 1 brep 431K + Default 0 1 2 comb 288B + Solid1_3.r 0 1 6 region 280B + Solid1.r 0 1 6 region 280B + Solid1_2.r 0 1 6 region 280B + Solid1_4.r 0 1 6 region 280B + NIST_MBE_PMI_7-10.3dm 0 0 2 comb 264B + _GLOBAL 0 0 8 96B + + + + Filtering by Type + + stat -F "-type brep" * + + + Object Name uses References Flags Type Size +-------------- ------ ------------ ------- ------ ------ + Solid1.r.s 0 1 1 brep 859K + Solid1_2.r.s 0 1 1 brep 672K + Solid1_3.r.s 0 1 1 brep 431K + Solid1_4.r.s 0 1 1 brep 771K + + + + Custom Columns + + stat -C "name,type,size,color" * + + + Object Name Type Size color +----------------------- -------- ------ ------------- + Default comb 288B 0/0/0 + NIST_MBE_PMI_7-10.3dm comb 264B 0/0/0 + Solid1.r region 280B 153/231/254 + Solid1.r.s brep 859K + Solid1_2.r region 280B 255/206/142 + Solid1_2.r.s brep 672K + Solid1_3.r region 280B 237/255/168 + Solid1_3.r.s brep 431K + Solid1_4.r region 280B 178/178/178 + Solid1_4.r.s brep 771K + _GLOBAL 96B + + + + + +
diff --git a/doc/legal/embedded/CMakeLists.txt b/doc/legal/embedded/CMakeLists.txt index 79fa6e114f9..297136e9fb9 100644 --- a/doc/legal/embedded/CMakeLists.txt +++ b/doc/legal/embedded/CMakeLists.txt @@ -10,6 +10,7 @@ set(embedded_licenses clipper.txt db_faa-info.txt db_nist-info.txt + damlev.txt dehumanize.txt delaunator.txt DejaVu_Fonts.txt @@ -17,11 +18,12 @@ set(embedded_licenses Eigen.txt fnmatch.txt fontstash.txt + fort.txt gct.txt gecode.txt gdal_gcv_plugin1.txt gdal_gcv_plugin2.txt - glm.txt + gdiam.txt halfedge.txt humanize.txt hv3.txt @@ -69,6 +71,7 @@ set(embedded_licenses tkcon.txt tri_pt.txt uce_dirent.txt + vds.txt whereami.txt winmmap.txt x24.txt diff --git a/doc/legal/embedded/SPSR.txt b/doc/legal/embedded/SPSR.txt index b3b147f273d..934a73ef9f7 100644 --- a/doc/legal/embedded/SPSR.txt +++ b/doc/legal/embedded/SPSR.txt @@ -48,51 +48,78 @@ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +Uses PlyVertexMini.h from geogram: +https://github.com/alicevision/geogram/blob/master/src/lib/geogram/third_party/PoissonRecon/PlyVertexMini.h + +Geogram is licensed under the 3-clauses BSD License (also called "Revised +BSD License", "New BSD License", or "Modified BSD License"): + +Copyright (c) 2012-2014, Bruno Levy All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +Redistributions of source code must retain the above copyright notice, this +list of conditions and the following disclaimer. Redistributions in binary +form must reproduce the above copyright notice, this list of conditions and +the following disclaimer in the documentation and/or other materials +provided with the distribution. Neither the name of the ALICE Project-Team +nor the names of its contributors may be used to endorse or promote products +derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +POSSIBILITY OF SUCH DAMAGE. + +If you modify this software, you should include a notice giving the name of +the person performing the modification, the date of modification, and the +reason for such modification. + file:/include/bg/spsr.h -file:/src/other/libspsr/Src/Allocator.h -file:/src/other/libspsr/Src/Array.h -file:/src/other/libspsr/Src/Array.inl -file:/src/other/libspsr/Src/BSplineData.h -file:/src/other/libspsr/Src/BSplineData.inl -file:/src/other/libspsr/Src/BinaryNode.h -file:/src/other/libspsr/Src/CmdLineParser.cpp -file:/src/other/libspsr/Src/CmdLineParser.h -file:/src/other/libspsr/Src/CmdLineParser.inl -file:/src/other/libspsr/Src/Factor.cpp -file:/src/other/libspsr/Src/Factor.h -file:/src/other/libspsr/Src/FunctionData.h -file:/src/other/libspsr/Src/FunctionData.inl -file:/src/other/libspsr/Src/Geometry.cpp -file:/src/other/libspsr/Src/Geometry.h -file:/src/other/libspsr/Src/Geometry.inl -file:/src/other/libspsr/Src/Hash.h -file:/src/other/libspsr/Src/MAT.h -file:/src/other/libspsr/Src/MAT.inl -file:/src/other/libspsr/Src/MarchingCubes.cpp -file:/src/other/libspsr/Src/MarchingCubes.h -file:/src/other/libspsr/Src/MemoryUsage.h -file:/src/other/libspsr/Src/MultiGridOctreeData.IsoSurface.inl -file:/src/other/libspsr/Src/MultiGridOctreeData.SortedTreeNodes.inl -file:/src/other/libspsr/Src/MultiGridOctreeData.h -file:/src/other/libspsr/Src/MultiGridOctreeData.inl -file:/src/other/libspsr/Src/MyTime.h -file:/src/other/libspsr/Src/Octree.h -file:/src/other/libspsr/Src/Octree.inl -file:/src/other/libspsr/Src/PPolynomial.h -file:/src/other/libspsr/Src/PPolynomial.inl -file:/src/other/libspsr/Src/Ply.h -file:/src/other/libspsr/Src/PlyFile.cpp -file:/src/other/libspsr/Src/PointStream.h -file:/src/other/libspsr/Src/PointStream.inl -file:/src/other/libspsr/Src/PoissonRecon.cpp -file:/src/other/libspsr/Src/Polynomial.h -file:/src/other/libspsr/Src/Polynomial.inl -file:/src/other/libspsr/Src/SPSR.cpp -file:/src/other/libspsr/Src/SPSR.h -file:/src/other/libspsr/Src/SparseMatrix.h -file:/src/other/libspsr/Src/SparseMatrix.inl -file:/src/other/libspsr/Src/SurfaceTrimmer.cpp -file:/src/other/libspsr/Src/Vector.h -file:/src/other/libspsr/Src/Vector.inl -file:/src/other/libspsr/Src/cvertex.h +file:/src/libbg/spsr/Allocator.h +file:/src/libbg/spsr/Array.h +file:/src/libbg/spsr/Array.inl +file:/src/libbg/spsr/BSplineData.h +file:/src/libbg/spsr/BSplineData.inl +file:/src/libbg/spsr/BinaryNode.h +file:/src/libbg/spsr/Factor.cpp +file:/src/libbg/spsr/Factor.h +file:/src/libbg/spsr/FunctionData.h +file:/src/libbg/spsr/FunctionData.inl +file:/src/libbg/spsr/Geometry.cpp +file:/src/libbg/spsr/Geometry.h +file:/src/libbg/spsr/Geometry.inl +file:/src/libbg/spsr/MAT.h +file:/src/libbg/spsr/MAT.inl +file:/src/libbg/spsr/MarchingCubes.cpp +file:/src/libbg/spsr/MarchingCubes.h +file:/src/libbg/spsr/MultiGridOctreeData.IsoSurface.inl +file:/src/libbg/spsr/MultiGridOctreeData.SortedTreeNodes.inl +file:/src/libbg/spsr/MultiGridOctreeData.h +file:/src/libbg/spsr/MultiGridOctreeData.inl +file:/src/libbg/spsr/Octree.h +file:/src/libbg/spsr/Octree.inl +file:/src/libbg/spsr/PPolynomial.h +file:/src/libbg/spsr/PPolynomial.inl +file:/src/libbg/spsr/PlyVertexMini.h +file:/src/libbg/spsr/PointStream.h +file:/src/libbg/spsr/PointStream.inl +file:/src/libbg/spsr/Polynomial.h +file:/src/libbg/spsr/Polynomial.inl +file:/src/libbg/spsr/SPSR.cpp +file:/src/libbg/spsr/SPSR.h +file:/src/libbg/spsr/SparseMatrix.h +file:/src/libbg/spsr/SparseMatrix.inl +file:/src/libbg/spsr/Vector.h +file:/src/libbg/spsr/Vector.inl +file:/src/libbg/spsr/cvertex.h diff --git a/doc/legal/embedded/damlev.txt b/doc/legal/embedded/damlev.txt new file mode 100644 index 00000000000..8d54b61d06f --- /dev/null +++ b/doc/legal/embedded/damlev.txt @@ -0,0 +1,29 @@ +Copyright (C) 2019 Robert Jacobson. Released under the MIT license. + +Based on "Iosifovich", Copyright (C) 2019 Frederik Hertzum, which is +licensed under the MIT license: https://bitbucket.org/clearer/iosifovich. + +The MIT License + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to +deal in the Software without restriction, including without limitation the +rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +IN THE SOFTWARE. + +https://github.com/rljacobson/Levenshtein + +file:/src/libbu/damlevlim.cpp + diff --git a/src/qged/display/glm/copying.txt b/doc/legal/embedded/fort.txt similarity index 60% rename from src/qged/display/glm/copying.txt rename to doc/legal/embedded/fort.txt index f2c2fa075f0..523ebc39d2a 100644 --- a/src/qged/display/glm/copying.txt +++ b/doc/legal/embedded/fort.txt @@ -1,14 +1,8 @@ -================================================================================ -OpenGL Mathematics (GLM) --------------------------------------------------------------------------------- -GLM is licensed under The Happy Bunny License or MIT License +libfort -BRL-CAD will use glm under the standard MIT license +MIT License -================================================================================ -The MIT License --------------------------------------------------------------------------------- -Copyright (c) 2005 - G-Truc Creation +Copyright (c) 2017 - 2020 Seleznev Anton Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -17,13 +11,18 @@ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +file:/src/libbu/fort.c +file:/src/libbu/fort.h +file:/src/libged/stat/fort.c +file:/src/libged/stat/fort.h diff --git a/doc/legal/other/libgdiam.txt b/doc/legal/embedded/gdiam.txt similarity index 91% rename from doc/legal/other/libgdiam.txt rename to doc/legal/embedded/gdiam.txt index e05e588137e..1f7b97e4308 100644 --- a/doc/legal/other/libgdiam.txt +++ b/doc/legal/embedded/gdiam.txt @@ -18,3 +18,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +file:/src/librt/gdiam/gdiam.cpp +file:/src/librt/gdiam/gdiam_test.cpp +file:/src/librt/gdiam/gdiam.hpp + diff --git a/doc/legal/embedded/glm.txt b/doc/legal/embedded/glm.txt deleted file mode 100644 index 63a86e15ca5..00000000000 --- a/doc/legal/embedded/glm.txt +++ /dev/null @@ -1,314 +0,0 @@ -================================================================================ -OpenGL Mathematics (GLM) --------------------------------------------------------------------------------- -GLM is licensed under The Happy Bunny License or MIT License - -BRL-CAD will use glm under the standard MIT license - -================================================================================ -The MIT License --------------------------------------------------------------------------------- -Copyright (c) 2005 - G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. - -file:/src/qged/display/glm/glm/common.hpp -file:/src/qged/display/glm/glm/detail/_features.hpp -file:/src/qged/display/glm/glm/detail/_fixes.hpp -file:/src/qged/display/glm/glm/detail/_noise.hpp -file:/src/qged/display/glm/glm/detail/_swizzle.hpp -file:/src/qged/display/glm/glm/detail/_swizzle_func.hpp -file:/src/qged/display/glm/glm/detail/_vectorize.hpp -file:/src/qged/display/glm/glm/detail/compute_common.hpp -file:/src/qged/display/glm/glm/detail/compute_vector_relational.hpp -file:/src/qged/display/glm/glm/detail/glm.cpp -file:/src/qged/display/glm/glm/detail/qualifier.hpp -file:/src/qged/display/glm/glm/detail/setup.hpp -file:/src/qged/display/glm/glm/detail/type_float.hpp -file:/src/qged/display/glm/glm/detail/type_half.hpp -file:/src/qged/display/glm/glm/detail/type_mat2x2.hpp -file:/src/qged/display/glm/glm/detail/type_mat2x3.hpp -file:/src/qged/display/glm/glm/detail/type_mat2x4.hpp -file:/src/qged/display/glm/glm/detail/type_mat3x2.hpp -file:/src/qged/display/glm/glm/detail/type_mat3x3.hpp -file:/src/qged/display/glm/glm/detail/type_mat3x4.hpp -file:/src/qged/display/glm/glm/detail/type_mat4x2.hpp -file:/src/qged/display/glm/glm/detail/type_mat4x3.hpp -file:/src/qged/display/glm/glm/detail/type_mat4x4.hpp -file:/src/qged/display/glm/glm/detail/type_quat.hpp -file:/src/qged/display/glm/glm/detail/type_vec1.hpp -file:/src/qged/display/glm/glm/detail/type_vec2.hpp -file:/src/qged/display/glm/glm/detail/type_vec3.hpp -file:/src/qged/display/glm/glm/detail/type_vec4.hpp -file:/src/qged/display/glm/glm/exponential.hpp -file:/src/qged/display/glm/glm/ext.hpp -file:/src/qged/display/glm/glm/ext/matrix_clip_space.hpp -file:/src/qged/display/glm/glm/ext/matrix_common.hpp -file:/src/qged/display/glm/glm/ext/matrix_double2x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_double2x2_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_double2x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_double2x3_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_double2x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_double2x4_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_double3x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_double3x2_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_double3x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_double3x3_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_double3x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_double3x4_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_double4x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_double4x2_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_double4x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_double4x3_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_double4x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_double4x4_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_float2x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_float2x2_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_float2x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_float2x3_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_float2x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_float2x4_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_float3x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_float3x2_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_float3x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_float3x3_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_float3x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_float3x4_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_float4x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_float4x2_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_float4x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_float4x3_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_float4x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_float4x4_precision.hpp -file:/src/qged/display/glm/glm/ext/matrix_int2x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_int2x2_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_int2x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_int2x3_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_int2x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_int2x4_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_int3x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_int3x2_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_int3x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_int3x3_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_int3x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_int3x4_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_int4x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_int4x2_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_int4x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_int4x3_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_int4x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_int4x4_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_projection.hpp -file:/src/qged/display/glm/glm/ext/matrix_relational.hpp -file:/src/qged/display/glm/glm/ext/matrix_transform.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint2x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint2x2_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint2x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint2x3_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint2x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint2x4_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint3x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint3x2_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint3x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint3x3_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint3x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint3x4_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint4x2.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint4x2_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint4x3.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint4x3_sized.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint4x4.hpp -file:/src/qged/display/glm/glm/ext/matrix_uint4x4_sized.hpp -file:/src/qged/display/glm/glm/ext/quaternion_common.hpp -file:/src/qged/display/glm/glm/ext/quaternion_double.hpp -file:/src/qged/display/glm/glm/ext/quaternion_double_precision.hpp -file:/src/qged/display/glm/glm/ext/quaternion_exponential.hpp -file:/src/qged/display/glm/glm/ext/quaternion_float.hpp -file:/src/qged/display/glm/glm/ext/quaternion_float_precision.hpp -file:/src/qged/display/glm/glm/ext/quaternion_geometric.hpp -file:/src/qged/display/glm/glm/ext/quaternion_relational.hpp -file:/src/qged/display/glm/glm/ext/quaternion_transform.hpp -file:/src/qged/display/glm/glm/ext/quaternion_trigonometric.hpp -file:/src/qged/display/glm/glm/ext/scalar_common.hpp -file:/src/qged/display/glm/glm/ext/scalar_constants.hpp -file:/src/qged/display/glm/glm/ext/scalar_int_sized.hpp -file:/src/qged/display/glm/glm/ext/scalar_integer.hpp -file:/src/qged/display/glm/glm/ext/scalar_packing.hpp -file:/src/qged/display/glm/glm/ext/scalar_relational.hpp -file:/src/qged/display/glm/glm/ext/scalar_uint_sized.hpp -file:/src/qged/display/glm/glm/ext/scalar_ulp.hpp -file:/src/qged/display/glm/glm/ext/vector_bool1.hpp -file:/src/qged/display/glm/glm/ext/vector_bool1_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_bool2.hpp -file:/src/qged/display/glm/glm/ext/vector_bool2_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_bool3.hpp -file:/src/qged/display/glm/glm/ext/vector_bool3_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_bool4.hpp -file:/src/qged/display/glm/glm/ext/vector_bool4_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_common.hpp -file:/src/qged/display/glm/glm/ext/vector_double1.hpp -file:/src/qged/display/glm/glm/ext/vector_double1_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_double2.hpp -file:/src/qged/display/glm/glm/ext/vector_double2_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_double3.hpp -file:/src/qged/display/glm/glm/ext/vector_double3_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_double4.hpp -file:/src/qged/display/glm/glm/ext/vector_double4_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_float1.hpp -file:/src/qged/display/glm/glm/ext/vector_float1_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_float2.hpp -file:/src/qged/display/glm/glm/ext/vector_float2_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_float3.hpp -file:/src/qged/display/glm/glm/ext/vector_float3_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_float4.hpp -file:/src/qged/display/glm/glm/ext/vector_float4_precision.hpp -file:/src/qged/display/glm/glm/ext/vector_int1.hpp -file:/src/qged/display/glm/glm/ext/vector_int1_sized.hpp -file:/src/qged/display/glm/glm/ext/vector_int2.hpp -file:/src/qged/display/glm/glm/ext/vector_int2_sized.hpp -file:/src/qged/display/glm/glm/ext/vector_int3.hpp -file:/src/qged/display/glm/glm/ext/vector_int3_sized.hpp -file:/src/qged/display/glm/glm/ext/vector_int4.hpp -file:/src/qged/display/glm/glm/ext/vector_int4_sized.hpp -file:/src/qged/display/glm/glm/ext/vector_integer.hpp -file:/src/qged/display/glm/glm/ext/vector_packing.hpp -file:/src/qged/display/glm/glm/ext/vector_relational.hpp -file:/src/qged/display/glm/glm/ext/vector_uint1.hpp -file:/src/qged/display/glm/glm/ext/vector_uint1_sized.hpp -file:/src/qged/display/glm/glm/ext/vector_uint2.hpp -file:/src/qged/display/glm/glm/ext/vector_uint2_sized.hpp -file:/src/qged/display/glm/glm/ext/vector_uint3.hpp -file:/src/qged/display/glm/glm/ext/vector_uint3_sized.hpp -file:/src/qged/display/glm/glm/ext/vector_uint4.hpp -file:/src/qged/display/glm/glm/ext/vector_uint4_sized.hpp -file:/src/qged/display/glm/glm/ext/vector_ulp.hpp -file:/src/qged/display/glm/glm/fwd.hpp -file:/src/qged/display/glm/glm/geometric.hpp -file:/src/qged/display/glm/glm/glm.hpp -file:/src/qged/display/glm/glm/gtc/bitfield.hpp -file:/src/qged/display/glm/glm/gtc/color_space.hpp -file:/src/qged/display/glm/glm/gtc/constants.hpp -file:/src/qged/display/glm/glm/gtc/epsilon.hpp -file:/src/qged/display/glm/glm/gtc/integer.hpp -file:/src/qged/display/glm/glm/gtc/matrix_access.hpp -file:/src/qged/display/glm/glm/gtc/matrix_integer.hpp -file:/src/qged/display/glm/glm/gtc/matrix_inverse.hpp -file:/src/qged/display/glm/glm/gtc/matrix_transform.hpp -file:/src/qged/display/glm/glm/gtc/noise.hpp -file:/src/qged/display/glm/glm/gtc/packing.hpp -file:/src/qged/display/glm/glm/gtc/quaternion.hpp -file:/src/qged/display/glm/glm/gtc/random.hpp -file:/src/qged/display/glm/glm/gtc/reciprocal.hpp -file:/src/qged/display/glm/glm/gtc/round.hpp -file:/src/qged/display/glm/glm/gtc/type_aligned.hpp -file:/src/qged/display/glm/glm/gtc/type_precision.hpp -file:/src/qged/display/glm/glm/gtc/type_ptr.hpp -file:/src/qged/display/glm/glm/gtc/ulp.hpp -file:/src/qged/display/glm/glm/gtc/vec1.hpp -file:/src/qged/display/glm/glm/gtx/associated_min_max.hpp -file:/src/qged/display/glm/glm/gtx/bit.hpp -file:/src/qged/display/glm/glm/gtx/closest_point.hpp -file:/src/qged/display/glm/glm/gtx/color_encoding.hpp -file:/src/qged/display/glm/glm/gtx/color_space.hpp -file:/src/qged/display/glm/glm/gtx/color_space_YCoCg.hpp -file:/src/qged/display/glm/glm/gtx/common.hpp -file:/src/qged/display/glm/glm/gtx/compatibility.hpp -file:/src/qged/display/glm/glm/gtx/component_wise.hpp -file:/src/qged/display/glm/glm/gtx/dual_quaternion.hpp -file:/src/qged/display/glm/glm/gtx/easing.hpp -file:/src/qged/display/glm/glm/gtx/euler_angles.hpp -file:/src/qged/display/glm/glm/gtx/extend.hpp -file:/src/qged/display/glm/glm/gtx/extended_min_max.hpp -file:/src/qged/display/glm/glm/gtx/exterior_product.hpp -file:/src/qged/display/glm/glm/gtx/fast_exponential.hpp -file:/src/qged/display/glm/glm/gtx/fast_square_root.hpp -file:/src/qged/display/glm/glm/gtx/fast_trigonometry.hpp -file:/src/qged/display/glm/glm/gtx/functions.hpp -file:/src/qged/display/glm/glm/gtx/gradient_paint.hpp -file:/src/qged/display/glm/glm/gtx/handed_coordinate_space.hpp -file:/src/qged/display/glm/glm/gtx/hash.hpp -file:/src/qged/display/glm/glm/gtx/integer.hpp -file:/src/qged/display/glm/glm/gtx/intersect.hpp -file:/src/qged/display/glm/glm/gtx/io.hpp -file:/src/qged/display/glm/glm/gtx/log_base.hpp -file:/src/qged/display/glm/glm/gtx/matrix_cross_product.hpp -file:/src/qged/display/glm/glm/gtx/matrix_decompose.hpp -file:/src/qged/display/glm/glm/gtx/matrix_factorisation.hpp -file:/src/qged/display/glm/glm/gtx/matrix_interpolation.hpp -file:/src/qged/display/glm/glm/gtx/matrix_major_storage.hpp -file:/src/qged/display/glm/glm/gtx/matrix_operation.hpp -file:/src/qged/display/glm/glm/gtx/matrix_query.hpp -file:/src/qged/display/glm/glm/gtx/matrix_transform_2d.hpp -file:/src/qged/display/glm/glm/gtx/mixed_product.hpp -file:/src/qged/display/glm/glm/gtx/norm.hpp -file:/src/qged/display/glm/glm/gtx/normal.hpp -file:/src/qged/display/glm/glm/gtx/normalize_dot.hpp -file:/src/qged/display/glm/glm/gtx/number_precision.hpp -file:/src/qged/display/glm/glm/gtx/optimum_pow.hpp -file:/src/qged/display/glm/glm/gtx/orthonormalize.hpp -file:/src/qged/display/glm/glm/gtx/perpendicular.hpp -file:/src/qged/display/glm/glm/gtx/polar_coordinates.hpp -file:/src/qged/display/glm/glm/gtx/projection.hpp -file:/src/qged/display/glm/glm/gtx/quaternion.hpp -file:/src/qged/display/glm/glm/gtx/range.hpp -file:/src/qged/display/glm/glm/gtx/raw_data.hpp -file:/src/qged/display/glm/glm/gtx/rotate_normalized_axis.hpp -file:/src/qged/display/glm/glm/gtx/rotate_vector.hpp -file:/src/qged/display/glm/glm/gtx/scalar_multiplication.hpp -file:/src/qged/display/glm/glm/gtx/scalar_relational.hpp -file:/src/qged/display/glm/glm/gtx/spline.hpp -file:/src/qged/display/glm/glm/gtx/std_based_type.hpp -file:/src/qged/display/glm/glm/gtx/string_cast.hpp -file:/src/qged/display/glm/glm/gtx/texture.hpp -file:/src/qged/display/glm/glm/gtx/transform.hpp -file:/src/qged/display/glm/glm/gtx/transform2.hpp -file:/src/qged/display/glm/glm/gtx/type_aligned.hpp -file:/src/qged/display/glm/glm/gtx/type_trait.hpp -file:/src/qged/display/glm/glm/gtx/vec_swizzle.hpp -file:/src/qged/display/glm/glm/gtx/vector_angle.hpp -file:/src/qged/display/glm/glm/gtx/vector_query.hpp -file:/src/qged/display/glm/glm/gtx/wrap.hpp -file:/src/qged/display/glm/glm/integer.hpp -file:/src/qged/display/glm/glm/mat2x2.hpp -file:/src/qged/display/glm/glm/mat2x3.hpp -file:/src/qged/display/glm/glm/mat2x4.hpp -file:/src/qged/display/glm/glm/mat3x2.hpp -file:/src/qged/display/glm/glm/mat3x3.hpp -file:/src/qged/display/glm/glm/mat3x4.hpp -file:/src/qged/display/glm/glm/mat4x2.hpp -file:/src/qged/display/glm/glm/mat4x3.hpp -file:/src/qged/display/glm/glm/mat4x4.hpp -file:/src/qged/display/glm/glm/matrix.hpp -file:/src/qged/display/glm/glm/packing.hpp -file:/src/qged/display/glm/glm/simd/common.h -file:/src/qged/display/glm/glm/simd/exponential.h -file:/src/qged/display/glm/glm/simd/geometric.h -file:/src/qged/display/glm/glm/simd/integer.h -file:/src/qged/display/glm/glm/simd/matrix.h -file:/src/qged/display/glm/glm/simd/neon.h -file:/src/qged/display/glm/glm/simd/packing.h -file:/src/qged/display/glm/glm/simd/platform.h -file:/src/qged/display/glm/glm/simd/trigonometric.h -file:/src/qged/display/glm/glm/simd/vector_relational.h -file:/src/qged/display/glm/glm/trigonometric.hpp -file:/src/qged/display/glm/glm/vec2.hpp -file:/src/qged/display/glm/glm/vec3.hpp -file:/src/qged/display/glm/glm/vec4.hpp -file:/src/qged/display/glm/glm/vector_relational.hpp - diff --git a/doc/legal/embedded/sobolseq.txt b/doc/legal/embedded/sobolseq.txt index 112b495896f..1149edadead 100644 --- a/doc/legal/embedded/sobolseq.txt +++ b/doc/legal/embedded/sobolseq.txt @@ -21,6 +21,6 @@ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. -file:/src/libbn/sobolseq.c +file:/src/libbn/sobol.c file:/src/libbn/soboldata.h file:/src/libbn/tests/sobolseq.c diff --git a/doc/legal/other/libvds.txt b/doc/legal/embedded/vds.txt similarity index 95% rename from doc/legal/other/libvds.txt rename to doc/legal/embedded/vds.txt index de8635f041d..3c938869cfc 100644 --- a/doc/legal/other/libvds.txt +++ b/doc/legal/embedded/vds.txt @@ -26,3 +26,6 @@ Copyright: SUCH DAMAGES. Note: the polyview example is not included with the BRL-CAD copy of libvds. + +file:/src/librt/vds/vds.h +file:/src/librt/vds/vds.c diff --git a/doc/legal/other/CMakeLists.txt b/doc/legal/other/CMakeLists.txt index baf24028f13..61d6c288afa 100644 --- a/doc/legal/other/CMakeLists.txt +++ b/doc/legal/other/CMakeLists.txt @@ -4,19 +4,16 @@ set(other_licenses incrTcl.txt libbson.txt libbson_yajl.txt - libgdiam.txt libnetpbm.txt libpng.txt libregex.txt libutahrle.txt - libvds.txt libz.txt linenoise.txt OpenNURBS.txt openscenegraph.txt poly2tri.txt proj-4.txt - SPSR.txt stepcode.txt tcl.txt tkhtml.txt diff --git a/doc/legal/other/SPSR.txt b/doc/legal/other/SPSR.txt deleted file mode 100644 index 2fa1cb0d9c3..00000000000 --- a/doc/legal/other/SPSR.txt +++ /dev/null @@ -1,25 +0,0 @@ -Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. Redistributions in binary form must reproduce -the above copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the distribution. - -Neither the name of the Johns Hopkins University nor the names of its contributors -may be used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. diff --git a/doc/notes/c_cxx_patterns/CMakeLists.txt b/doc/notes/c_cxx_patterns/CMakeLists.txt index 51d33d1feee..d2e0e5be79c 100644 --- a/doc/notes/c_cxx_patterns/CMakeLists.txt +++ b/doc/notes/c_cxx_patterns/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) project(EXAMPLES) if(NOT MSVC) add_definitions(-g) diff --git a/doc/notes/ecosystem.dot b/doc/notes/ecosystem.dot index a5fce9efcff..5cffb4905b5 100644 --- a/doc/notes/ecosystem.dot +++ b/doc/notes/ecosystem.dot @@ -1,7 +1,7 @@ /* E C O S Y S T E M . D O T * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source (Graphviz format) and 'compiled' diff --git a/include/RtServerImpl.h b/include/RtServerImpl.h index 3f3a82ec080..a9704f48ca0 100644 --- a/include/RtServerImpl.h +++ b/include/RtServerImpl.h @@ -1,7 +1,7 @@ /* R T S E R V E R I M P L . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze.h b/include/analyze.h index cd78420e999..773d428ab42 100644 --- a/include/analyze.h +++ b/include/analyze.h @@ -1,7 +1,7 @@ /* A N A L Y Z E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/debug.h b/include/analyze/debug.h index 69ee73157c9..a6c0dfbbe00 100644 --- a/include/analyze/debug.h +++ b/include/analyze/debug.h @@ -1,7 +1,7 @@ /* D E B U G . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/defines.h b/include/analyze/defines.h index 30d8be21ad6..2e79ae0ba63 100644 --- a/include/analyze/defines.h +++ b/include/analyze/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/density.h b/include/analyze/density.h index 887b3ed7cfe..6d8362e7fd0 100644 --- a/include/analyze/density.h +++ b/include/analyze/density.h @@ -1,7 +1,7 @@ /* D E N S I T Y . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/diff.h b/include/analyze/diff.h index 40cf3f2e01c..21165fb34de 100644 --- a/include/analyze/diff.h +++ b/include/analyze/diff.h @@ -1,7 +1,7 @@ /* D I F F . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/grid.h b/include/analyze/grid.h index 55908efc48e..0190e0d031c 100644 --- a/include/analyze/grid.h +++ b/include/analyze/grid.h @@ -1,7 +1,7 @@ /* G R I D . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/heal.h b/include/analyze/heal.h index 06b02d4a196..f9a2daa4812 100644 --- a/include/analyze/heal.h +++ b/include/analyze/heal.h @@ -1,7 +1,7 @@ /* H E A L . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/info.h b/include/analyze/info.h index 7a4d790944e..0ac4e158c9c 100644 --- a/include/analyze/info.h +++ b/include/analyze/info.h @@ -1,7 +1,7 @@ /* I N F O . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -42,7 +42,7 @@ __BEGIN_DECLS struct region_pair { struct bu_list l; union { - char *name; + const char *name; struct region *r1; } r; struct region *r2; diff --git a/include/analyze/nirt.h b/include/analyze/nirt.h index ad5292655d3..52105ff5791 100644 --- a/include/analyze/nirt.h +++ b/include/analyze/nirt.h @@ -1,7 +1,7 @@ /* N I R T . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/pnts.h b/include/analyze/pnts.h index 1ff4311b414..503be7cff9e 100644 --- a/include/analyze/pnts.h +++ b/include/analyze/pnts.h @@ -1,7 +1,7 @@ /* P N T S . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/polygonize.h b/include/analyze/polygonize.h index 394824b0171..384188d9c3c 100644 --- a/include/analyze/polygonize.h +++ b/include/analyze/polygonize.h @@ -1,7 +1,7 @@ /* P O L Y G O N I Z E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/voxelize.h b/include/analyze/voxelize.h index 4e2a594017c..e4eacfd997f 100644 --- a/include/analyze/voxelize.h +++ b/include/analyze/voxelize.h @@ -1,7 +1,7 @@ /* V O X E L I Z E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/analyze/worker.h b/include/analyze/worker.h index c78d5b5c038..7a5f1e8d832 100644 --- a/include/analyze/worker.h +++ b/include/analyze/worker.h @@ -1,7 +1,7 @@ /* W O R K E R . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg.h b/include/bg.h index 5d53accc2f7..33c6707cb68 100644 --- a/include/bg.h +++ b/include/bg.h @@ -1,7 +1,7 @@ /* B G . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/aabb_ray.h b/include/bg/aabb_ray.h index 01a5fb87d4d..261dc6c8a1c 100644 --- a/include/bg/aabb_ray.h +++ b/include/bg/aabb_ray.h @@ -1,7 +1,7 @@ /* A A B B _ R A Y . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/chull.h b/include/bg/chull.h index 81d9d231217..50308e008b4 100644 --- a/include/bg/chull.h +++ b/include/bg/chull.h @@ -1,7 +1,7 @@ /* C H U L L . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/defines.h b/include/bg/defines.h index 79d7e9eb6c7..8b9df627de0 100644 --- a/include/bg/defines.h +++ b/include/bg/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/lseg.h b/include/bg/lseg.h index fe5ccac08b3..241e9f76195 100644 --- a/include/bg/lseg.h +++ b/include/bg/lseg.h @@ -1,7 +1,7 @@ /* L S E G . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/obr.h b/include/bg/obr.h index b7866db4613..60305cad997 100644 --- a/include/bg/obr.h +++ b/include/bg/obr.h @@ -1,7 +1,7 @@ /* O B R . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/pointgen.h b/include/bg/pointgen.h index e4bbb98be69..5fd6597c337 100644 --- a/include/bg/pointgen.h +++ b/include/bg/pointgen.h @@ -1,7 +1,7 @@ /* P O I N T G E N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/polygon.h b/include/bg/polygon.h index f9065bf14e9..a628d4749c9 100644 --- a/include/bg/polygon.h +++ b/include/bg/polygon.h @@ -1,7 +1,7 @@ /* P O L Y G O N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/polygon_types.h b/include/bg/polygon_types.h index dec7212a97a..0df690952b2 100644 --- a/include/bg/polygon_types.h +++ b/include/bg/polygon_types.h @@ -1,7 +1,7 @@ /* P O L Y G O N _ T Y P E S. H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/tri_pt.h b/include/bg/tri_pt.h index 1ae6463807e..ebb429bcd41 100644 --- a/include/bg/tri_pt.h +++ b/include/bg/tri_pt.h @@ -1,7 +1,7 @@ /* T R I _ P T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/tri_ray.h b/include/bg/tri_ray.h index 181f27981b0..1d99e06eeac 100644 --- a/include/bg/tri_ray.h +++ b/include/bg/tri_ray.h @@ -1,7 +1,7 @@ /* T R I _ R A Y . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/tri_tri.h b/include/bg/tri_tri.h index ada3c3d4e76..c925b8ba990 100644 --- a/include/bg/tri_tri.h +++ b/include/bg/tri_tri.h @@ -1,7 +1,7 @@ /* T R I _ T R I . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bg/trimesh.h b/include/bg/trimesh.h index 95df583e6e1..0839b239535 100644 --- a/include/bg/trimesh.h +++ b/include/bg/trimesh.h @@ -1,7 +1,7 @@ /* T R I M E S H . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bio.h b/include/bio.h index 644d0862979..c97e7f6f4b5 100644 --- a/include/bio.h +++ b/include/bio.h @@ -1,7 +1,7 @@ /* B I O . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -91,8 +91,54 @@ extern int fileno(FILE *stream); /* the S_IS* macros should replace the S_IF*'s already defined in C99 compliant compilers this is the work-around for older compilers */ +#ifndef S_ISBLK +# ifdef S_IFBLK +# define S_ISBLK(mode) (((mode) & S_IFMT) == S_IFBLK) +# else +# define S_ISBLK(mode) (0) +# endif +#endif +#ifndef S_ISCHR +# ifdef S_IFCHR +# define S_ISCHR(mode) (((mode) & S_IFMT) == S_IFCHR) +# else +# define S_ISCHR(mode) (0) +# endif +#endif #ifndef S_ISDIR -# define S_ISDIR(_st_mode) (((_st_mode) & S_IFMT) == S_IFDIR) +# ifdef S_IFDIR +# define S_ISDIR(mode) (((mode) & S_IFMT) == S_IFDIR) +# else +# define S_ISDIR(mode) (0) +# endif +#endif +#ifndef S_ISFIFO +# ifdef S_IFIFO +# define S_ISFIFO(mode) (((mode) & S_IFMT) == S_IFIFO) +# else +# define S_ISFIFO(mode) (0) +# endif +#endif +#ifndef S_ISLNK +# ifdef S_IFLNK +# define S_ISLNK(mode) (((mode) & S_IFMT) == S_IFLNK) +# else +# define S_ISLNK(mode) (0) +# endif +#endif +#ifndef S_ISREG +# ifdef S_IFREG +# define S_ISREG(mode) (((mode) & S_IFMT) == S_IFREG) +# else +# define S_ISREG(mode) (0) +# endif +#endif +#ifndef S_ISSOCK +# ifdef S_IFSOCK +# define S_ISSOCK(mode) (((mode) & S_IFMT) == S_IFSOCK) +# else +# define S_ISSOCK(mode) (0) +# endif #endif #endif /* BIO_H */ diff --git a/include/bn.h b/include/bn.h index dd0669c475d..849018ed1b0 100644 --- a/include/bn.h +++ b/include/bn.h @@ -1,7 +1,7 @@ /* B N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/adc.h b/include/bn/adc.h index 251bee766c1..5917d65041e 100644 --- a/include/bn/adc.h +++ b/include/bn/adc.h @@ -1,7 +1,7 @@ /* A D C . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/anim.h b/include/bn/anim.h index caa915676d1..ed96ba694e8 100644 --- a/include/bn/anim.h +++ b/include/bn/anim.h @@ -1,7 +1,7 @@ /* A N I M . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/clip.h b/include/bn/clip.h index 40f5fe94b8b..6592ddda49d 100644 --- a/include/bn/clip.h +++ b/include/bn/clip.h @@ -1,7 +1,7 @@ /* C L I P . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/complex.h b/include/bn/complex.h index 1e545edd935..f95210b809d 100644 --- a/include/bn/complex.h +++ b/include/bn/complex.h @@ -1,7 +1,7 @@ /* C O M P L E X . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/defines.h b/include/bn/defines.h index 78f1e864c88..7368892de01 100644 --- a/include/bn/defines.h +++ b/include/bn/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/dvec.h b/include/bn/dvec.h index 3421e77dbc2..f1a2cb5229e 100644 --- a/include/bn/dvec.h +++ b/include/bn/dvec.h @@ -1,7 +1,7 @@ /* D V E C . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/mat.h b/include/bn/mat.h index ef58240fe02..9a68c4fa937 100644 --- a/include/bn/mat.h +++ b/include/bn/mat.h @@ -1,7 +1,7 @@ /* M A T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/msr.h b/include/bn/msr.h index 0bd7cf97a83..5ad46853dee 100644 --- a/include/bn/msr.h +++ b/include/bn/msr.h @@ -1,7 +1,7 @@ /* M S R . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/multipoly.h b/include/bn/multipoly.h index c260413a132..b4d6d411a40 100644 --- a/include/bn/multipoly.h +++ b/include/bn/multipoly.h @@ -1,7 +1,7 @@ /* M U L T I P O L Y . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/noise.h b/include/bn/noise.h index 6f8f846e4ad..3482cc19294 100644 --- a/include/bn/noise.h +++ b/include/bn/noise.h @@ -1,7 +1,7 @@ /* N O I S E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/numgen.h b/include/bn/numgen.h index 5106a56715e..f6f09155e50 100644 --- a/include/bn/numgen.h +++ b/include/bn/numgen.h @@ -1,7 +1,7 @@ /* N U M G E N . H * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/plane.h b/include/bn/plane.h index c5fdd8808cf..cb3d748dce9 100644 --- a/include/bn/plane.h +++ b/include/bn/plane.h @@ -1,7 +1,7 @@ /* P L A N E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/plot3.h b/include/bn/plot3.h index 65fca644475..0f33a0d3e28 100644 --- a/include/bn/plot3.h +++ b/include/bn/plot3.h @@ -1,7 +1,7 @@ /* P L O T 3 . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -40,7 +40,6 @@ #include "bu/color.h" #include "bu/file.h" #include "bn/defines.h" -#include "bn/plot3.h" __BEGIN_DECLS @@ -232,6 +231,9 @@ BN_EXPORT extern void pdv_3ray(FILE *fp, const vect_t dir, double t); + +BN_EXPORT extern int plot3_invalid(FILE *fp, int mode); + /* * The following routines are taken from the BRL TIG-PACK * (Terminal Independent Plotting Package). diff --git a/include/bn/poly.h b/include/bn/poly.h index 81f302e8d07..045ac3d76e6 100644 --- a/include/bn/poly.h +++ b/include/bn/poly.h @@ -1,7 +1,7 @@ /* P O L Y . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/qmath.h b/include/bn/qmath.h index fb34036c450..d09ff1f01f6 100644 --- a/include/bn/qmath.h +++ b/include/bn/qmath.h @@ -1,7 +1,7 @@ /* Q M A T H . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/rand.h b/include/bn/rand.h index d5f9dcb1cf6..f8bf69a0c24 100644 --- a/include/bn/rand.h +++ b/include/bn/rand.h @@ -1,7 +1,7 @@ /* R A N D . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/randmt.h b/include/bn/randmt.h index 49dac3b5ba9..43f5cb6a887 100644 --- a/include/bn/randmt.h +++ b/include/bn/randmt.h @@ -1,7 +1,7 @@ /* R A N D M T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/sobol.h b/include/bn/sobol.h index e7e4a7d6df9..b1adbe1f909 100644 --- a/include/bn/sobol.h +++ b/include/bn/sobol.h @@ -1,7 +1,7 @@ /* S O B O L . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/spm.h b/include/bn/spm.h index f83b8806b72..797b2b21b45 100644 --- a/include/bn/spm.h +++ b/include/bn/spm.h @@ -1,7 +1,7 @@ /* S P M . H * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/str.h b/include/bn/str.h index 26e8da10573..aa46a712838 100644 --- a/include/bn/str.h +++ b/include/bn/str.h @@ -1,7 +1,7 @@ /* B N _ S T R . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/tabdata.h b/include/bn/tabdata.h index b4ba36effa4..e73fde9e3ac 100644 --- a/include/bn/tabdata.h +++ b/include/bn/tabdata.h @@ -1,7 +1,7 @@ /* T A B D A T A . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/tol.h b/include/bn/tol.h index a3f679626a1..8af3de904c2 100644 --- a/include/bn/tol.h +++ b/include/bn/tol.h @@ -1,7 +1,7 @@ /* T O L . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/vectfont.h b/include/bn/vectfont.h index 3451fac494d..e2cd6cf9d58 100644 --- a/include/bn/vectfont.h +++ b/include/bn/vectfont.h @@ -1,7 +1,7 @@ /* V E C T F O N T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/version.h b/include/bn/version.h index f5b729fae00..e22a628f286 100644 --- a/include/bn/version.h +++ b/include/bn/version.h @@ -1,7 +1,7 @@ /* V E R S I O N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/vert_tree.h b/include/bn/vert_tree.h index 405c29d2c55..dc89a8db8dd 100644 --- a/include/bn/vert_tree.h +++ b/include/bn/vert_tree.h @@ -1,7 +1,7 @@ /* V E R T _ T R E E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bn/vlist.h b/include/bn/vlist.h index 0f21792b302..bea662dea88 100644 --- a/include/bn/vlist.h +++ b/include/bn/vlist.h @@ -1,7 +1,7 @@ /* V L I S T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -182,7 +182,7 @@ struct bn_vlist { BN_EXPORT extern size_t bn_vlist_cmd_cnt(struct bn_vlist *vlist); -BN_EXPORT extern int bn_vlist_bbox(struct bu_list *vlistp, point_t *bmin, point_t *bmax, int *length); +BN_EXPORT extern int bn_vlist_bbox(struct bu_list *vlistp, point_t *bmin, point_t *bmax, size_t *length); diff --git a/include/bn/wavelet.h b/include/bn/wavelet.h index 8083a865e39..1f6268903d0 100644 --- a/include/bn/wavelet.h +++ b/include/bn/wavelet.h @@ -1,7 +1,7 @@ /* W A V E L E T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bnetwork.h b/include/bnetwork.h index 08da690c0bc..9f69f45ca94 100644 --- a/include/bnetwork.h +++ b/include/bnetwork.h @@ -1,7 +1,7 @@ /* B N E T W O R K . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep.h b/include/brep.h index 365a77763e9..46f9bb45344 100644 --- a/include/brep.h +++ b/include/brep.h @@ -1,7 +1,7 @@ /* B R E P . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/bbnode.h b/include/brep/bbnode.h index e28bb3c347b..8bc073517d4 100644 --- a/include/brep/bbnode.h +++ b/include/brep/bbnode.h @@ -1,7 +1,7 @@ /* B B N O D E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/boolean.h b/include/brep/boolean.h index 897f2ec5694..64537b3e318 100644 --- a/include/brep/boolean.h +++ b/include/brep/boolean.h @@ -1,7 +1,7 @@ /* B O O L E A N . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/brnode.h b/include/brep/brnode.h index 66d992c75b8..8fdec2ff4f5 100644 --- a/include/brep/brnode.h +++ b/include/brep/brnode.h @@ -1,7 +1,7 @@ /* B R N O D E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/cdt.h b/include/brep/cdt.h index 0b98aa8c1f7..6d08cbaf937 100644 --- a/include/brep/cdt.h +++ b/include/brep/cdt.h @@ -1,7 +1,7 @@ /* C D T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/csg.h b/include/brep/csg.h index 66ab65cd387..6610be9d80b 100644 --- a/include/brep/csg.h +++ b/include/brep/csg.h @@ -1,7 +1,7 @@ /* C S G . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/curvetree.h b/include/brep/curvetree.h index 79261bcd649..fc0811636e6 100644 --- a/include/brep/curvetree.h +++ b/include/brep/curvetree.h @@ -1,7 +1,7 @@ /* C U R V E T R E E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/defines.h b/include/brep/defines.h index 458507d565f..f4ca30824a3 100644 --- a/include/brep/defines.h +++ b/include/brep/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -40,11 +40,31 @@ /* @cond */ extern "C++" { + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# if GCC_PREREQ(8,0) +# pragma GCC diagnostic ignored "-Wclass-memaccess" +# endif +#endif + /* don't let opennurbs include windows.h */ #define ON_NO_WINDOWS 1 #include "opennurbs.h" +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop +#endif +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + } /* @endcond */ diff --git a/include/brep/intersect.h b/include/brep/intersect.h index 655edc2423b..d1a35f74283 100644 --- a/include/brep/intersect.h +++ b/include/brep/intersect.h @@ -1,7 +1,7 @@ /* I N T E R S E C T . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/pullback.h b/include/brep/pullback.h index 5747807bcfa..2d52f822858 100644 --- a/include/brep/pullback.h +++ b/include/brep/pullback.h @@ -1,7 +1,7 @@ /* P U L L B A C K . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/ray.h b/include/brep/ray.h index 136a998d8af..ec5304fc184 100644 --- a/include/brep/ray.h +++ b/include/brep/ray.h @@ -1,7 +1,7 @@ /* R A Y . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/surfacetree.h b/include/brep/surfacetree.h index 9ed9c236766..b2512045c54 100644 --- a/include/brep/surfacetree.h +++ b/include/brep/surfacetree.h @@ -1,7 +1,7 @@ /* S U R F A C E T R E E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brep/util.h b/include/brep/util.h index 74b986f2fa6..3df6f0ed121 100644 --- a/include/brep/util.h +++ b/include/brep/util.h @@ -1,7 +1,7 @@ /* U T I L . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bresource.h b/include/bresource.h index fdb2bd8ee28..c497dbe81cd 100644 --- a/include/bresource.h +++ b/include/bresource.h @@ -1,7 +1,7 @@ /* B R E S O U R C E . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brlcad.h b/include/brlcad.h index 8a04beab212..415c6e44f26 100644 --- a/include/brlcad.h +++ b/include/brlcad.h @@ -1,7 +1,7 @@ /* B R L C A D . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brlcad_ident.h.in b/include/brlcad_ident.h.in index 1a8e2c076d6..e3fea298738 100644 --- a/include/brlcad_ident.h.in +++ b/include/brlcad_ident.h.in @@ -1,7 +1,7 @@ /* B R L C A D _ I D E N T . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/brlcad_version.h.in b/include/brlcad_version.h.in index 6d570519986..9992ab3f868 100644 --- a/include/brlcad_version.h.in +++ b/include/brlcad_version.h.in @@ -1,7 +1,7 @@ /* B R L C A D _ V E R S I O N . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bsocket.h b/include/bsocket.h index 42f61e9dc95..1ed4096a03c 100644 --- a/include/bsocket.h +++ b/include/bsocket.h @@ -1,7 +1,7 @@ /* B S O C K E T . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu.h b/include/bu.h index 410541ed0ac..f7c27d2fa08 100644 --- a/include/bu.h +++ b/include/bu.h @@ -1,7 +1,7 @@ /* B U . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/CMakeLists.txt b/include/bu/CMakeLists.txt index d816f350914..caa100263d7 100644 --- a/include/bu/CMakeLists.txt +++ b/include/bu/CMakeLists.txt @@ -1,5 +1,6 @@ set(bu_headers app.h + assert.h avs.h bitv.h cmd.h diff --git a/include/bu/app.h b/include/bu/app.h index 7c91651c04b..5cf2897a6aa 100644 --- a/include/bu/app.h +++ b/include/bu/app.h @@ -1,7 +1,7 @@ /* A P P . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -51,7 +51,7 @@ __BEGIN_DECLS * identified but should never return NULL. this routine is not * thread-safe. */ -BU_EXPORT extern const char *bu_argv0_full_path(void); +DEPRECATED BU_EXPORT extern const char *bu_argv0_full_path(void); /** * Routine for obtaining the current working directory. @@ -204,7 +204,7 @@ BU_EXPORT extern int bu_fchmod(int fd, unsigned long pmode); * call bu_strdup() or make other provisions to save the returned * string, before calling again. */ -BU_EXPORT extern const char *bu_brlcad_dir(const char *dirkey, int fail_quietly); +DEPRECATED BU_EXPORT extern const char *bu_brlcad_dir(const char *dirkey, int fail_quietly); /** * @brief @@ -224,7 +224,7 @@ BU_EXPORT extern const char *bu_brlcad_dir(const char *dirkey, int fail_quietly) * call bu_strdup() or make other provisions to save the returned * string, before calling again. */ -BU_EXPORT extern const char *bu_brlcad_root(const char *rhs, int fail_quietly); +DEPRECATED BU_EXPORT extern const char *bu_brlcad_root(const char *rhs, int fail_quietly); typedef enum { diff --git a/include/bu/assert.h b/include/bu/assert.h new file mode 100644 index 00000000000..543735765c5 --- /dev/null +++ b/include/bu/assert.h @@ -0,0 +1,68 @@ +/* A S S E R T . H + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ + +/** @addtogroup bu_defines */ +/** @{ */ + +#ifndef BU_ASSERT_H +#define BU_ASSERT_H + +#include "common.h" + +#include "bu/defines.h" +#include "bu/log.h" +#include "bu/exit.h" + + +/** + * @def BU_ASSERT(expression) + * @brief Alternative for assert(3) that calls LIBBU logging+bombing. + * + * This is a simple macro wrapper that logs an assertion-failure error + * message and aborts application execution if the specified + * expression is not hold true. While it is similar in use, this + * wrapper does not utilize assert(3) or NDEBUG but is disabled if + * NO_BOMBING_MACROS is defined by the configuration. + */ +#ifdef NO_BOMBING_MACROS +# define BU_ASSERT(expression_) (void)(equation_) +#else +# define BU_ASSERT(expression_) \ + if (UNLIKELY(!(expression_))) { \ + const char *expression_buf_ = #expression_; \ + bu_log("BU_ASSERT(%s) failure in file %s, line %d\n", \ + expression_buf_, __FILE__, __LINE__); \ + bu_bomb("BU_ASSERT FAILED\n"); \ + } +#endif + +/** @} */ + +#endif /* BU_ASSERT_H */ + +/* + * Local Variables: + * mode: C + * tab-width: 8 + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/include/bu/avs.h b/include/bu/avs.h index d0ad06cdfa5..b30ab51d43a 100644 --- a/include/bu/avs.h +++ b/include/bu/avs.h @@ -1,7 +1,7 @@ /* A V S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/bitv.h b/include/bu/bitv.h index a9a94baf061..04f71d16976 100644 --- a/include/bu/bitv.h +++ b/include/bu/bitv.h @@ -1,7 +1,7 @@ /* B I T V . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/cmd.h b/include/bu/cmd.h index b9d871bf4ff..7fb51c2ed89 100644 --- a/include/bu/cmd.h +++ b/include/bu/cmd.h @@ -1,7 +1,7 @@ /* C M D . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/color.h b/include/bu/color.h index f79cf7ed6af..1d68a58478d 100644 --- a/include/bu/color.h +++ b/include/bu/color.h @@ -1,7 +1,7 @@ /* C O L O R . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/column.h b/include/bu/column.h index ce580257e75..05cf662f432 100644 --- a/include/bu/column.h +++ b/include/bu/column.h @@ -1,7 +1,7 @@ /* C O L U M N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/cv.h b/include/bu/cv.h index 49c2fccb3ed..68d7b9bf34c 100644 --- a/include/bu/cv.h +++ b/include/bu/cv.h @@ -1,7 +1,7 @@ /* C V . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/debug.h b/include/bu/debug.h index 8f56b32b500..c8bc5f8ce67 100644 --- a/include/bu/debug.h +++ b/include/bu/debug.h @@ -1,7 +1,7 @@ /* D E B U G . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/defines.h b/include/bu/defines.h index ff58cf7ca0b..dadc2fd68b4 100644 --- a/include/bu/defines.h +++ b/include/bu/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -189,6 +189,18 @@ #endif +/** + * shorthand placed before a function _definition_ indicating to some + * compilers that it should inline most of the function calls within + * the function. this should be used sparingly on functions that are + * demonstrably hot, as indicated by a profiler. + */ +#ifdef HAVE_FLATTEN_ATTRIBUTE +# define _BU_ATTR_FLATTEN __attribute__((flatten)) +#else +# define _BU_ATTR_FLATTEN +#endif + /** * This macro is used to take the 'C' function name, and convert it at * compile time to the FORTRAN calling convention. @@ -198,25 +210,6 @@ #define BU_FORTRAN(lc, uc) lc ## _ -/** - * @def BU_ASSERT(eqn) - * Quick and easy macros to generate an informative error message and - * abort execution if the specified condition does not hold true. - * - */ -#ifdef NO_BOMBING_MACROS -# define BU_ASSERT(_equation) (void)(_equation) -#else -# define BU_ASSERT(_equation) \ - if (UNLIKELY(!(_equation))) { \ - const char *_equation_buf = #_equation; \ - bu_log("BU_ASSERT(%s), failed, file %s, line %d\n", \ - _equation_buf, __FILE__, __LINE__); \ - bu_bomb("BU_ASSERT failure\n"); \ - } -#endif - - /** @} */ #endif /* BU_DEFINES_H */ diff --git a/include/bu/dylib.h b/include/bu/dylib.h index fac5a08c9a7..84665046af9 100644 --- a/include/bu/dylib.h +++ b/include/bu/dylib.h @@ -1,7 +1,7 @@ /* D Y L I B. H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/endian.h b/include/bu/endian.h index 6154b1faa85..be7be737bc5 100644 --- a/include/bu/endian.h +++ b/include/bu/endian.h @@ -1,7 +1,7 @@ /* E N D I A N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/env.h b/include/bu/env.h index b39a65b06d9..77a9b7b8ac0 100644 --- a/include/bu/env.h +++ b/include/bu/env.h @@ -1,7 +1,7 @@ /* E N V . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/exit.h b/include/bu/exit.h index af1e8b91271..cac1e3584f7 100644 --- a/include/bu/exit.h +++ b/include/bu/exit.h @@ -1,7 +1,7 @@ /* E X I T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -51,6 +51,15 @@ __BEGIN_DECLS */ BU_EXPORT extern int bu_backtrace(FILE *fp); +/** + * A version of bu_backtrace where the caller provides their own + * full path to their executable for passing to GDB, rather than + * having libbu attempt to determine that path. + * + * Passing NULL to argv0 makes the behavior identical to + * that of bu_backtrace. + */ +BU_EXPORT extern int bu_backtrace_app(FILE *fp, const char *argv0); /** * Adds a hook to the list of bu_bomb hooks. The top (newest) one of these @@ -138,6 +147,17 @@ BU_EXPORT extern void bu_exit(int status, const char *fmt, ...) _BU_ATTR_ANALYZE */ BU_EXPORT extern int bu_crashreport(const char *filename); +/** + * A version of bu_crashreport where the caller provides their own + * full path to their executable for passing to GDB, rather than + * having libbu attempt to determine that path. + * + * Passing NULL to argv0 makes the behavior identical to + * that of bu_crashreport. + */ +BU_EXPORT extern int bu_crashreport_app(const char *filename, const char *argv0); + + /** @} */ __END_DECLS diff --git a/include/bu/file.h b/include/bu/file.h index e9c7c44d698..6da5b01b485 100644 --- a/include/bu/file.h +++ b/include/bu/file.h @@ -1,7 +1,7 @@ /* F I L E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -51,7 +51,8 @@ __BEGIN_DECLS * Returns truthfully whether the given file path exists or not. An * empty or NULL path name is treated as a non-existent file and, as * such, will return false. If fd is non-NULL, it will be set to a - * read-only open file descriptor for the provided path. + * read-only open file descriptor for the provided path. If path is + * "-", fd is set to standard input's file descriptor if provided. * * @return >0 The given filename exists. * @return 0 The given filename does not exist. diff --git a/include/bu/getopt.h b/include/bu/getopt.h index e0f7f83529d..b32a6914c34 100644 --- a/include/bu/getopt.h +++ b/include/bu/getopt.h @@ -1,7 +1,7 @@ /* G E T O P T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/glob.h b/include/bu/glob.h index 385266662de..30ec4080cc1 100644 --- a/include/bu/glob.h +++ b/include/bu/glob.h @@ -1,7 +1,7 @@ /* G L O B . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/hash.h b/include/bu/hash.h index 40b81984069..7d5d25b26ee 100644 --- a/include/bu/hash.h +++ b/include/bu/hash.h @@ -1,7 +1,7 @@ /* H A S H . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/hist.h b/include/bu/hist.h index 9bda5725aa3..a14316e7946 100644 --- a/include/bu/hist.h +++ b/include/bu/hist.h @@ -1,7 +1,7 @@ /* H I S T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/hook.h b/include/bu/hook.h index b671f4e7871..c7851c3fa36 100644 --- a/include/bu/hook.h +++ b/include/bu/hook.h @@ -1,7 +1,7 @@ /* H O O K . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/interrupt.h b/include/bu/interrupt.h index 3460bf41e1c..c402be0dce7 100644 --- a/include/bu/interrupt.h +++ b/include/bu/interrupt.h @@ -1,7 +1,7 @@ /* I N T E R R U P T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/list.h b/include/bu/list.h index abbc238cfee..0a1aa8f0c71 100644 --- a/include/bu/list.h +++ b/include/bu/list.h @@ -1,7 +1,7 @@ /* L I S T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -24,6 +24,7 @@ #include "common.h" #include "bu/defines.h" +#include "bu/assert.h" #include "bu/magic.h" __BEGIN_DECLS diff --git a/include/bu/log.h b/include/bu/log.h index c30b9d545de..262f4a1f08b 100644 --- a/include/bu/log.h +++ b/include/bu/log.h @@ -1,7 +1,7 @@ /* L O G . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/magic.h b/include/bu/magic.h index 16a16cd40a0..c2be3542561 100644 --- a/include/bu/magic.h +++ b/include/bu/magic.h @@ -1,7 +1,7 @@ /* M A G I C . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/malloc.h b/include/bu/malloc.h index 43bca86070d..e7b2a0569b7 100644 --- a/include/bu/malloc.h +++ b/include/bu/malloc.h @@ -1,7 +1,7 @@ /* M A L L O C . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/mapped_file.h b/include/bu/mapped_file.h index 90b84a5170f..09aaa760f4f 100644 --- a/include/bu/mapped_file.h +++ b/include/bu/mapped_file.h @@ -1,7 +1,7 @@ /* M A P P E D _ F I L E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/mime.h b/include/bu/mime.h index 52ae0262b22..661ddb160db 100644 --- a/include/bu/mime.h +++ b/include/bu/mime.h @@ -1,7 +1,7 @@ /* M I M E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/observer.h b/include/bu/observer.h index 6554cd06656..c98cdc5d4a7 100644 --- a/include/bu/observer.h +++ b/include/bu/observer.h @@ -1,7 +1,7 @@ /* B U _ O B S E R V E R . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/opt.h b/include/bu/opt.h index 591c017387f..3ed1b9b3810 100644 --- a/include/bu/opt.h +++ b/include/bu/opt.h @@ -1,7 +1,7 @@ /* O P T . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/parallel.h b/include/bu/parallel.h index 8e62c2d0d7f..adc71051c48 100644 --- a/include/bu/parallel.h +++ b/include/bu/parallel.h @@ -1,7 +1,7 @@ /* P A R A L L E L . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/parse.h b/include/bu/parse.h index 4907f670995..3c3668ed391 100644 --- a/include/bu/parse.h +++ b/include/bu/parse.h @@ -1,7 +1,7 @@ /* P A R S E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/path.h b/include/bu/path.h index 12faf19e2d7..e23a5d5871a 100644 --- a/include/bu/path.h +++ b/include/bu/path.h @@ -1,7 +1,7 @@ /* P A T H . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/process.h b/include/bu/process.h index 43477085f6c..b7279f145c6 100644 --- a/include/bu/process.h +++ b/include/bu/process.h @@ -1,7 +1,7 @@ /* P R O C E S S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/ptbl.h b/include/bu/ptbl.h index d9b3b1a1a80..b80c82ef54b 100644 --- a/include/bu/ptbl.h +++ b/include/bu/ptbl.h @@ -1,7 +1,7 @@ /* P T B L . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/redblack.h b/include/bu/redblack.h index 24c69419a59..7edc28968f9 100644 --- a/include/bu/redblack.h +++ b/include/bu/redblack.h @@ -1,7 +1,7 @@ /* R E D B L A C K . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/simd.h b/include/bu/simd.h index 253dbf99bb3..e0e0ec68ed9 100644 --- a/include/bu/simd.h +++ b/include/bu/simd.h @@ -1,7 +1,7 @@ /* S I M D . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/snooze.h b/include/bu/snooze.h index ebfa060eca0..cecce182655 100644 --- a/include/bu/snooze.h +++ b/include/bu/snooze.h @@ -1,7 +1,7 @@ /* S N O O Z E . H * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/sort.h b/include/bu/sort.h index 6889aec1da4..c33197ba2e0 100644 --- a/include/bu/sort.h +++ b/include/bu/sort.h @@ -1,7 +1,7 @@ /* S O R T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/str.h b/include/bu/str.h index 99afecb6c11..a43d888c93a 100644 --- a/include/bu/str.h +++ b/include/bu/str.h @@ -1,7 +1,7 @@ /* S T R . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -346,6 +346,14 @@ BU_EXPORT extern char **bu_argv_dup(size_t argc, const char *argv[]); */ BU_EXPORT extern char **bu_argv_dupinsert(int insert, size_t insertArgc, const char *insertArgv[], size_t argc, const char *argv[]); +/** + * Calculate the Damarau Levenshtein edit distance between two strings. When + * max_dist is defined, calculation will terminate once that distance is reached + * and max_dist will be returned. When max_dist is 0, the calculation will + * proceed up to an internally defined calculation limit. */ +BU_EXPORT unsigned long +bu_editdist(const char *s1, const char *s2, unsigned long max_dist); + __END_DECLS diff --git a/include/bu/tbl.h b/include/bu/tbl.h index ab8e7308d96..8b63b6ab191 100644 --- a/include/bu/tbl.h +++ b/include/bu/tbl.h @@ -1,7 +1,7 @@ /* T B L . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -39,143 +39,187 @@ __BEGIN_DECLS /** @file bu/tbl.h */ /** - * this is pulled from num.c where the guts to the table printer - * currently resides, moved here for easy reference. - * + * Example 1: @code - double vals[16] = {-1.123123123123, 0, 0, 1.0/0.0, 0, 123, 0, 0, 0, -2345, 123123.123123123123, 0, 123123123.123123123, 21, 1.0/0.0, 1}; - - bu_num_print - bu_num_print(vals, 16, 4, "my matrix\n[\n", "\t[", NULL, ", ", "]\n", "]\n]\n"); - ------------------------------------------------------------------------------- my matrix [ - [-1.1231231231229999, 0, 0, inf] - [ 0, 123, 0, 0] - [ 0, -2345, 123123.12312312312, 0] - [ 123123123.12312312, 21, inf, 1] + [ -1.1231231231229999, 0, 0, inf ] + [ 0, 123, 0, 0 ] + [ 0, -2345, 123123.12312312312, 0 ] + [ 123123123.12312312, 21, inf, 1 ] ] + @endcode + * + * generated from this code: + * + @code + double vals[16] = {-1.123123123123, 0, 0, 1.0/0.0, 0, 123, 0, 0, 0, -2345, 123123.123123123123, 0, 123123123.123123123, 21, 1.0/0.0, 1}; - bu_num_print(vals+5, 3, 3, "POINT { ", NULL, NULL, " ", NULL, " }\n"); - --------------------------------------------------------------------- -POINT { 123 0 0 } - - bu_num_print(vals, 16, 4, "MATRIX [", " [", NULL, ", ", "]\n", "] ]\n"); - ----------------------------------------------------------------------- -MATRIX [ [-1.1231231231229999, 0, 0, inf] - [ 0, 123, 0, 0] - [ 0, -2345, 123123.12312312312, 0] - [ 123123123.12312312, 21, inf, 1] ] - - bu_num_print(vals, 16, 4, NULL, NULL, NULL, " ", " ", "\n"); - -------------------------------------------------------------- --1.1231231231229999 0 0 inf 0 123 0 0 0 -2345 123123.12312312312 0 123123123.12312312 21 inf 1 - - bu_num_print(vals, 4, 4, NULL, NULL, NULL, NULL, NULL, NULL); - ------------------------------------------------------------ --1.1231231231229999 0 0 inf - - bu_num_print(vals, 16, 4, NULL, NULL, "%017.2lf", " ", "\n", "\n"); - ------------------------------------------------------------------ + struct bu_tbl *t = bu_tbl_create(); + + bu_tbl_style(t, BU_TBL_STYLE_NONE); + bu_tbl_printf(t, "my matrix"); + bu_tbl_style(t, BU_TBL_ROW_END); + bu_tbl_style(t, BU_TBL_ROW_ALIGN_LEFT); + bu_tbl_printf(t, "["); + bu_tbl_style(t, BU_TBL_ROW_END); + bu_tbl_style(t, BU_TBL_ROW_ALIGN_RIGHT); + bu_tbl_printf(t, "[|%.17g,|%.17g,|%.17g,|%.17g|]", vals[0], vals[1], vals[2], vals[3]); + bu_tbl_style(t, BU_TBL_ROW_END); + bu_tbl_style(t, BU_TBL_ROW_ALIGN_RIGHT); + bu_tbl_printf(t, "[|%.17g,|%.17g,|%.17g,|%.17g|]", vals[4], vals[5], vals[6], vals[7]); + bu_tbl_style(t, BU_TBL_ROW_END); + bu_tbl_style(t, BU_TBL_ROW_ALIGN_RIGHT); + bu_tbl_printf(t, "[|%.17g,|%.17g,|%.17g,|%.17g|]", vals[8], vals[9], vals[10], vals[11]); + bu_tbl_style(t, BU_TBL_ROW_END); + bu_tbl_style(t, BU_TBL_ROW_ALIGN_RIGHT); + bu_tbl_printf(t, "[|%.17g,|%.17g,|%.17g,|%.17g|]", vals[12], vals[13], vals[14], vals[15]); + bu_tbl_style(t, BU_TBL_ROW_END); + bu_tbl_style(t, BU_TBL_ROW_ALIGN_LEFT); + bu_tbl_printf(t, "]"); + + bu_tbl_destroy(t); + @endcode + * + * Example 2: + @code -0000000000001.12 00000000000000.00 00000000000000.00 inf 00000000000000.00 00000000000123.00 00000000000000.00 00000000000000.00 00000000000000.00 -0000000002345.00 00000000123123.12 00000000000000.00 00000123123123.12 00000000000021.00 inf 00000000000001.00 + @endcode + * + * + * + @code + double vals[16] = {-1.123123123123, 0, 0, 1.0/0.0, 0, 123, 0, 0, 0, -2345, 123123.123123123123, 0, 123123123.123123123, 21, 1.0/0.0, 1}; + + struct bu_tbl *t = bu_tbl_create(); + bu_tbl_style(t, BU_TBL_STYLE_LIST); + bu_tbl_printf(t, "%017.2lf|%017.2lf|%017.2lf|%017.2lf", vals[0], vals[1], vals[2], vals[3]); + bu_tbl_style(t, BU_TBL_ROW_END); + bu_tbl_printf(t, "%017.2lf|%017.2lf|%017.2lf|%017.2lf", vals[4], vals[5], vals[6], vals[7]); + bu_tbl_style(t, BU_TBL_ROW_END); + bu_tbl_printf(t, "%017.2lf|%017.2lf|%017.2lf|%017.2lf", vals[8], vals[9], vals[10], vals[11]); + bu_tbl_style(t, BU_TBL_ROW_END); + bu_tbl_printf(t, "%017.2lf|%017.2lf|%017.2lf|%017.2lf", vals[12], vals[13], vals[14], vals[15]); + + bu_tbl_destroy(t); @endcode * */ -struct bu_tbl_style { - const char *before_tbl; - const char *before_row; - const char *before_col; - const char *before_elm; - const char *format_scan; - const char *format_print; - const char *after_elm; - const char *after_col; - const char *after_row; - const char *after_tbl; -}; +struct bu_tbl; /** - * set what to print at the beginning and end of the table. - * - * defaults: before="" after="" + * static-initializer for bu_tbl objects on the stack */ -BU_EXPORT extern struct bu_tbl_style * -bu_tbl_style_tbl(struct bu_tbl_style *s, const char *before, const char *after); +#define BU_TBL_INIT_ZERO {0} /** - * set what to print before and after each table row and how many rows - * to display. - * - * defaults: before="" after="" maxrows=-1 (unlimited) + * always returns a pointer to a newly allocated table */ -BU_EXPORT extern struct bu_tbl_style * -bu_tbl_style_row(struct bu_tbl_style *s, const char *before, const char *after, size_t maxrows); +BU_EXPORT extern struct bu_tbl * +bu_tbl_create(); + /** - * set what to print before and after each table column and how many - * columns to display. - * - * defaults: before="" after="" maxcols=1 + * releases all dynamic memory associated with the specified table */ -BU_EXPORT extern struct bu_tbl_style * -bu_tbl_style_col(struct bu_tbl_style *s, const char *before, const char *after, size_t maxcols); +BU_EXPORT extern void +bu_tbl_destroy(struct bu_tbl *); + /** - * set what to print before and after each table element. - * - * defaults: before="" after="" + * erases all cells in a table, but doesn't erase the table itself */ -BU_EXPORT extern struct bu_tbl_style * -bu_tbl_style_elm(struct bu_tbl_style *s, const char *before, const char *after); +BU_EXPORT extern int +bu_tbl_clear(struct bu_tbl *); + /** - * set scanf-style and printf-style format specifiers to use reading - * and displaying table elements respectively + * Table styles: * - * defaults: scan="%lf" print="%.17g" + * NONE 1 ------ --- +-------+---+ ╭────────┬───╮ ╔════════╦═══╗ + * 2 3 LIST 1 | BASIC | 1 | │ SINGLE │ 1 │ ║ DOUBLE ║ 1 ║ + * 4 5 ------ --- +-------+---+ ├────────┼───┤ ╠════════╬═══╣ + * 2 3 | 2 | 3 | │ 2 │ 3 │ ║ 2 ║ 3 ║ + * 4 5 | 4 | 5 | │ 4 │ 5 │ ║ 4 ║ 5 ║ + * +-------+---+ ╰────────┴───╯ ╚════════╩═══╝ */ -BU_EXPORT extern struct bu_tbl_style * -bu_tbl_style_fmt(struct bu_tbl_style *s, const char *scan, const char *print); +enum bu_tbl_style { + /* table border style */ + BU_TBL_STYLE_NONE, + BU_TBL_STYLE_LIST, + BU_TBL_STYLE_BASIC, + BU_TBL_STYLE_SINGLE, + BU_TBL_STYLE_DOUBLE, + + /* table alignment */ + BU_TBL_ALIGN_LEFT, + BU_TBL_ALIGN_CENTER, + BU_TBL_ALIGN_RIGHT, + + /* cell styling */ + BU_TBL_ROW_HEADER, + + /* insert a horizontal separator */ + BU_TBL_ROW_SEPARATOR, + + /* cell alignment */ + BU_TBL_ROW_ALIGN_LEFT, + BU_TBL_ROW_ALIGN_CENTER, + BU_TBL_ROW_ALIGN_RIGHT, + BU_TBL_COL_ALIGN_LEFT, + BU_TBL_COL_ALIGN_CENTER, + BU_TBL_COL_ALIGN_RIGHT, + + /* go to next row beginning */ + BU_TBL_ROW_END +}; +/** + * sets table styling or formatting on cells printed next. + */ +BU_EXPORT extern struct bu_tbl * +bu_tbl_style(struct bu_tbl *, enum bu_tbl_style); + /** - * - @code -struct bu_tbl_style s = BU_TBL_STYLE_INIT_ZERO; -bu_tbl_style_tbl(&s, "MATRIX [", "]\n"); -bu_tbl_style_row(&s, "\t[", "]\n"); -bu_tbl_print(s, vals, nvals, ncols); - @endcode + * get cell position for the current table insertion point. */ +BU_EXPORT extern struct bu_tbl * +bu_tbl_is_at(struct bu_tbl *, size_t *row, size_t *col); /** - * format a set of data into a given vls string + * set cell position of the current table insertion point. */ -BU_EXPORT extern void -bu_tbl_vls(struct bu_vls *str, const struct bu_tbl_style *s, const double *vals, size_t nvals, size_t ncols); +BU_EXPORT extern struct bu_tbl * +bu_tbl_go_to(struct bu_tbl *, size_t row, size_t col); /** - * format a set of data into a given vls string + * print values into the table at the current insertion point. + * + * each column of the 'fmt' printf-style format specfier must be + * delimited by a '|' character. + * + * any existing values will be overwritten. */ -BU_EXPORT extern void -bu_tbl_str(char *str, size_t maxlen, const struct bu_tbl_style *s, const double *vals, size_t nvals, size_t ncols); +BU_EXPORT extern struct bu_tbl * +bu_tbl_printf(struct bu_tbl *, const char *fmt, ...); /** - * format a set of data and print them to the given file descriptor + * print a table into a vls */ BU_EXPORT extern void -bu_tbl_print(int fd, const struct bu_tbl_style *s, const void *elms, size_t nelms, size_t selms); +bu_tbl_vls(struct bu_vls *str, const struct bu_tbl *t); __END_DECLS diff --git a/include/bu/time.h b/include/bu/time.h index 61921295130..b2a420eff18 100644 --- a/include/bu/time.h +++ b/include/bu/time.h @@ -1,7 +1,7 @@ /* T I M E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/units.h b/include/bu/units.h index 6962c2815b4..551ece02b6f 100644 --- a/include/bu/units.h +++ b/include/bu/units.h @@ -1,7 +1,7 @@ /* U N I T S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/uuid.h b/include/bu/uuid.h index 6065f54d7fa..6d5193fac65 100644 --- a/include/bu/uuid.h +++ b/include/bu/uuid.h @@ -1,7 +1,7 @@ /* U U I D . H * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/version.h b/include/bu/version.h index eaa085a3641..6a5f275ec2c 100644 --- a/include/bu/version.h +++ b/include/bu/version.h @@ -1,7 +1,7 @@ /* V E R S I O N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/vfont.h b/include/bu/vfont.h index 71f52679e1f..6325cbcc1c5 100644 --- a/include/bu/vfont.h +++ b/include/bu/vfont.h @@ -1,7 +1,7 @@ /* V F O N T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/vlb.h b/include/bu/vlb.h index 87b74834fe9..bbbc38aa4e5 100644 --- a/include/bu/vlb.h +++ b/include/bu/vlb.h @@ -1,7 +1,7 @@ /* V L B . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/bu/vls.h b/include/bu/vls.h index 83cca4c0155..a80231037d1 100644 --- a/include/bu/vls.h +++ b/include/bu/vls.h @@ -1,7 +1,7 @@ /* V L S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/common.h b/include/common.h index 26ad8a90ab7..bee19206c1b 100644 --- a/include/common.h +++ b/include/common.h @@ -1,7 +1,7 @@ /* C O M M O N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/conf/BrlcadConfig.tmpl b/include/conf/BrlcadConfig.tmpl index be1fc51e4c4..35b565700e5 100644 --- a/include/conf/BrlcadConfig.tmpl +++ b/include/conf/BrlcadConfig.tmpl @@ -1,7 +1,7 @@ :: B R L C A D - C O N F I G . B A T :: BRL-CAD :: -:: Copyright (c) 2007-2020 United States Government as represented by +:: Copyright (c) 2007-2021 United States Government as represented by :: the U.S. Army Research Laboratory. :: :: Redistribution and use in source and binary forms, with or without diff --git a/include/conf/PATCH b/include/conf/PATCH index 573541ac970..0cfbf08886f 100644 --- a/include/conf/PATCH +++ b/include/conf/PATCH @@ -1 +1 @@ -0 +2 diff --git a/include/conf/make.vbs b/include/conf/make.vbs index 5cde1709773..8f89f9c3e06 100755 --- a/include/conf/make.vbs +++ b/include/conf/make.vbs @@ -1,7 +1,7 @@ ' M A K E . V B S ' BRL-CAD ' -' Copyright (c) 2005-2020 United States Government as represented by +' Copyright (c) 2005-2021 United States Government as represented by ' the U.S. Army Research Laboratory. ' ' Redistribution and use in source and binary forms, with or without diff --git a/include/config_win.h.in b/include/config_win.h.in index 97ab634c9c5..0f02e2019f8 100644 --- a/include/config_win.h.in +++ b/include/config_win.h.in @@ -1,7 +1,7 @@ /* C O N F I G _ W I N . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/dm.h b/include/dm.h index 0ee8e767444..db715af1b3f 100644 --- a/include/dm.h +++ b/include/dm.h @@ -1,7 +1,7 @@ /* D M . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/dm/bview.h b/include/dm/bview.h index ca2c4ee5bd7..dc0b3b641b6 100644 --- a/include/dm/bview.h +++ b/include/dm/bview.h @@ -1,7 +1,7 @@ /* B V I E W . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/dm/bview_util.h b/include/dm/bview_util.h index e61a368bcff..5e3fb8f95ff 100644 --- a/include/dm/bview_util.h +++ b/include/dm/bview_util.h @@ -1,7 +1,7 @@ /* B V I E W _ U T I L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/dm/defines.h b/include/dm/defines.h index 037acbe5023..d635295c49a 100644 --- a/include/dm/defines.h +++ b/include/dm/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/dm/util.h b/include/dm/util.h index c6f9314e60d..3a32cb6789d 100644 --- a/include/dm/util.h +++ b/include/dm/util.h @@ -1,7 +1,7 @@ /* U T I L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/fft.h b/include/fft.h index 813993869d8..94c2a28ecfb 100644 --- a/include/fft.h +++ b/include/fft.h @@ -1,7 +1,7 @@ /* F F T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/gcv.h b/include/gcv.h index 519b6075431..d50c4a4301a 100644 --- a/include/gcv.h +++ b/include/gcv.h @@ -1,7 +1,7 @@ /* G C V . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/gcv/api.h b/include/gcv/api.h index c2774c9e548..ab61352acab 100644 --- a/include/gcv/api.h +++ b/include/gcv/api.h @@ -1,7 +1,7 @@ /* G C V _ A P I . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/gcv/defines.h b/include/gcv/defines.h index 467421ed1e1..0fe5beb7cdb 100644 --- a/include/gcv/defines.h +++ b/include/gcv/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/gcv/util.h b/include/gcv/util.h index 4af4ee07388..5f060d0204e 100644 --- a/include/gcv/util.h +++ b/include/gcv/util.h @@ -1,7 +1,7 @@ /* G C V _ U T I L . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged.h b/include/ged.h index 63cbb63e0e6..4be3b9e17be 100644 --- a/include/ged.h +++ b/include/ged.h @@ -1,7 +1,7 @@ /* G E D . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/analyze.h b/include/ged/analyze.h index c3b616e5d67..5fd9d6fa309 100644 --- a/include/ged/analyze.h +++ b/include/ged/analyze.h @@ -1,7 +1,7 @@ /* A N A L Y Z E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/commands.h b/include/ged/commands.h index 59a21930d0c..7542eb1dffe 100644 --- a/include/ged/commands.h +++ b/include/ged/commands.h @@ -1,7 +1,7 @@ /* C O M M A N D S . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -41,6 +41,35 @@ __BEGIN_DECLS GED_EXPORT extern int ged_exec(struct ged *gedp, int argc, const char *argv[]); /** @} */ +/* LIBGED maintains this list - callers should regard it as read only. This + * list will change (size and pointers to individual command strings if + * commands are added or removed - caller is responsible for performing a new + * call to get an updated list and size if commands are altered. */ +GED_EXPORT size_t ged_cmd_list(const char * const **cmd_list); + +/* Report whether a string identifies a valid LIBGED command. If func is + * non-NULL, check that cmd and func both refer to the same function pointer + * (i.e., they are aliases for the same command.) + * + * If func is NULL, a 0 return indicates an valid GED command and non-zero + * indicates a valid command. + * + * If func is non-null: + * 0 indicates both cmd and func strings invoke the same LIBGED function + * 1 indicates that either or both of cmd and func were invalid GED commands + * 2 indicates that both were valid commands, but they did not match. + */ +GED_EXPORT int ged_cmd_valid(const char *cmd, const char *func); + +/* Given a candidate cmd name, find the closest match to it among defined + * GED commands. Returns the bu_editdist distance between cmd and *ncmd + * (0 if they match exactly - i.e. cmd does define a command.) + * + * Useful for suggesting corrections to commands which are not found. + */ +GED_EXPORT extern int +ged_cmd_lookup(const char **ncmd, const char *cmd); + /** @addtogroup ged_objects */ /** @{ */ /** @@ -756,6 +785,7 @@ GED_EXPORT extern int ged_whatid(struct ged *gedp, int argc, const char *argv[]) * Push object path transformations to solids, creating primitives if necessary */ GED_EXPORT extern int ged_xpush(struct ged *gedp, int argc, const char *argv[]); +GED_EXPORT extern int ged_npush(struct ged *gedp, int argc, const char *argv[]); /** * Voxelize the specified objects @@ -826,6 +856,16 @@ GED_EXPORT int wdb_importFg4Section_cmd(void *data, int argc, const char *argv[] */ GED_EXPORT int ged_pnts(struct ged *gedp, int argc, const char *argv[]); +/** + * Report object information. + */ +GED_EXPORT extern int ged_stat(struct ged *gedp, int argc, const char *argv[]); + + + +/* Debugging command for brep plotting */ +GED_EXPORT extern int ged_dplot(struct ged *gedp, int argc, const char *argv[]); + /** @} */ diff --git a/include/ged/database.h b/include/ged/database.h index c4a69b2d864..9267fae96bf 100644 --- a/include/ged/database.h +++ b/include/ged/database.h @@ -1,7 +1,7 @@ /* D A T A B A S E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/debug.h b/include/ged/debug.h index b25e4074e34..40566b19d87 100644 --- a/include/ged/debug.h +++ b/include/ged/debug.h @@ -1,7 +1,7 @@ /* D E B U G . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/defines.h b/include/ged/defines.h index f1f3f14fe3d..ad3f9b8ca6b 100644 --- a/include/ged/defines.h +++ b/include/ged/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -129,6 +129,9 @@ struct ged_subprocess { void *chan; int aborted; struct ged *gedp; + int stdin_active; + int stdout_active; + int stderr_active; }; /* FIXME: should be private */ @@ -337,26 +340,6 @@ struct ged_plugin { * Can be important when diagnosing command errors. */ GED_EXPORT const char * ged_init_msgs(); -/* LIBGED maintains this list - callers should regard it as read only. This - * list will change (size and pointers to individual command strings if - * commands are added or removed - caller is responsible for performing a new - * call to get an updated list and size if commands are altered. */ -GED_EXPORT size_t ged_cmd_list(const char * const **cmd_list); - -/* Report whether a string identifies a valid LIBGED command. If func is - * non-NULL, check that cmd and func both refer to the same function pointer - * (i.e., they are aliases for the same command.) - * - * If func is NULL, a 0 return indicates an valid GED command and non-zero - * indicates a valid command. - * - * If func is non-null: - * 0 indicates both cmd and func strings invoke the same LIBGED function - * 1 indicates that either or both of cmd and func were invalid GED commands - * 2 indicates that both were valid commands, but they did not match. - */ -GED_EXPORT int ged_cmd_valid(const char *cmd, const char *func); - __END_DECLS diff --git a/include/ged/framebuffer.h b/include/ged/framebuffer.h index 3b7fb84dbe5..00491ab06ad 100644 --- a/include/ged/framebuffer.h +++ b/include/ged/framebuffer.h @@ -1,7 +1,7 @@ /* F R A M E B U F F E R . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/objects.h b/include/ged/objects.h index b5a9167d9b3..1db065a8c1c 100644 --- a/include/ged/objects.h +++ b/include/ged/objects.h @@ -1,7 +1,7 @@ /* O B J E C T S . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/rt.h b/include/ged/rt.h index 6ba33380ff6..db2d73d3142 100644 --- a/include/ged/rt.h +++ b/include/ged/rt.h @@ -1,7 +1,7 @@ /* R T . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/view.h b/include/ged/view.h index 023500c655e..ac58ceda782 100644 --- a/include/ged/view.h +++ b/include/ged/view.h @@ -1,7 +1,7 @@ /* V I E W . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/view/adc.h b/include/ged/view/adc.h index 2886eff920c..1017342b67e 100644 --- a/include/ged/view/adc.h +++ b/include/ged/view/adc.h @@ -1,7 +1,7 @@ /* A D C . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/view/matrix.h b/include/ged/view/matrix.h index 77f934cdf50..9fa0ec661a3 100644 --- a/include/ged/view/matrix.h +++ b/include/ged/view/matrix.h @@ -1,7 +1,7 @@ /* M A T R I X . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/view/select.h b/include/ged/view/select.h index d3055581ca1..42a4a56e635 100644 --- a/include/ged/view/select.h +++ b/include/ged/view/select.h @@ -1,7 +1,7 @@ /* S E L E C T . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/ged/view/state.h b/include/ged/view/state.h index b650bf83fb3..1e65e6829ff 100644 --- a/include/ged/view/state.h +++ b/include/ged/view/state.h @@ -1,7 +1,7 @@ /* S T A T E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/icv.h b/include/icv.h index 33d71d7b40d..d9c511c5581 100644 --- a/include/icv.h +++ b/include/icv.h @@ -1,7 +1,7 @@ /* I C V . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/icv/colorspace.h b/include/icv/colorspace.h index 451bb5e0f3a..b017535cfb9 100644 --- a/include/icv/colorspace.h +++ b/include/icv/colorspace.h @@ -1,7 +1,7 @@ /* C O L O R S P A C E . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/icv/crop.h b/include/icv/crop.h index b76f6f31caf..c95ac8cb8e6 100644 --- a/include/icv/crop.h +++ b/include/icv/crop.h @@ -1,7 +1,7 @@ /* C R O P . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/icv/defines.h b/include/icv/defines.h index 1b8a4edbb1d..fa46606ce9e 100644 --- a/include/icv/defines.h +++ b/include/icv/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/icv/filters.h b/include/icv/filters.h index 500490ec489..17f6dc38b0d 100644 --- a/include/icv/filters.h +++ b/include/icv/filters.h @@ -1,7 +1,7 @@ /* F I L T E R S . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/icv/io.h b/include/icv/io.h index a830ca87309..78dbc84219f 100644 --- a/include/icv/io.h +++ b/include/icv/io.h @@ -1,7 +1,7 @@ /* I O . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/icv/ops.h b/include/icv/ops.h index 1870804b24e..97fa5f6be9c 100644 --- a/include/icv/ops.h +++ b/include/icv/ops.h @@ -1,7 +1,7 @@ /* I C V . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/icv/stat.h b/include/icv/stat.h index ffe1e8e4696..b22e77b68de 100644 --- a/include/icv/stat.h +++ b/include/icv/stat.h @@ -1,7 +1,7 @@ /* S T A T . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/libtermio.h b/include/libtermio.h index 078a04f4fa8..f3e2d6fa4f1 100644 --- a/include/libtermio.h +++ b/include/libtermio.h @@ -1,7 +1,7 @@ /* L I B T E R M I O . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/nmg.h b/include/nmg.h index c97eb04b750..6e7b9d06f51 100644 --- a/include/nmg.h +++ b/include/nmg.h @@ -1,7 +1,7 @@ /* N M G . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/nmg/debug.h b/include/nmg/debug.h index 26417b11ecb..64e3b706f3f 100644 --- a/include/nmg/debug.h +++ b/include/nmg/debug.h @@ -1,7 +1,7 @@ /* N M G / D E B U G . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/optical.h b/include/optical.h index eda531e828a..ae5a5f049e5 100644 --- a/include/optical.h +++ b/include/optical.h @@ -1,7 +1,7 @@ /* O P T I C A L . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/optical/debug.h b/include/optical/debug.h index e39ea52dcf7..29215a5c679 100644 --- a/include/optical/debug.h +++ b/include/optical/debug.h @@ -1,7 +1,7 @@ /* D E B U G . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/optical/defines.h b/include/optical/defines.h index 10e8f316e6d..ae406896dae 100644 --- a/include/optical/defines.h +++ b/include/optical/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/optical/light.h b/include/optical/light.h index 33f8c524b40..d6cb2350716 100644 --- a/include/optical/light.h +++ b/include/optical/light.h @@ -1,7 +1,7 @@ /* L I G H T . H * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/optical/plastic.h b/include/optical/plastic.h index 226788d5d03..0b7230e2777 100644 --- a/include/optical/plastic.h +++ b/include/optical/plastic.h @@ -1,7 +1,7 @@ /* P L A S T I C . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/optical/shadefuncs.h b/include/optical/shadefuncs.h index 434f2176689..13cd5437e24 100644 --- a/include/optical/shadefuncs.h +++ b/include/optical/shadefuncs.h @@ -1,7 +1,7 @@ /* S H A D E F U N C S . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/optical/shadework.h b/include/optical/shadework.h index 035c301686c..bcda7dcc1e3 100644 --- a/include/optical/shadework.h +++ b/include/optical/shadework.h @@ -1,7 +1,7 @@ /* S H A D E W O R K . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/pc.h b/include/pc.h index a9fb70bc47b..1bf39cb660f 100644 --- a/include/pc.h +++ b/include/pc.h @@ -1,7 +1,7 @@ /* P C . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/photonmap.h b/include/photonmap.h index c03f551b133..13906c77fb8 100644 --- a/include/photonmap.h +++ b/include/photonmap.h @@ -1,7 +1,7 @@ /* P H O T O N M A P . H * BRL-CAD * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/pkg.h b/include/pkg.h index ea023e77032..6f9b3862841 100644 --- a/include/pkg.h +++ b/include/pkg.h @@ -1,7 +1,7 @@ /* P K G . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/raytrace.h b/include/raytrace.h index ce92101477e..8816a33d6e8 100644 --- a/include/raytrace.h +++ b/include/raytrace.h @@ -1,7 +1,7 @@ /* R A Y T R A C E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/anim.h b/include/rt/anim.h index 7d17d4c0b54..fad73e521d5 100644 --- a/include/rt/anim.h +++ b/include/rt/anim.h @@ -1,7 +1,7 @@ /* A N I M . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/application.h b/include/rt/application.h index 261f3f49118..4fca7242349 100644 --- a/include/rt/application.h +++ b/include/rt/application.h @@ -1,7 +1,7 @@ /* A P P L I C A T I O N . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/arb_edit.h b/include/rt/arb_edit.h index 2407060deaf..4ba29fce44b 100644 --- a/include/rt/arb_edit.h +++ b/include/rt/arb_edit.h @@ -1,7 +1,7 @@ /* A R B _ E D I T . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/binunif.h b/include/rt/binunif.h index 212912be1f4..89eafc06177 100644 --- a/include/rt/binunif.h +++ b/include/rt/binunif.h @@ -1,7 +1,7 @@ /* B I N U N I F . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/boolweave.h b/include/rt/boolweave.h index 610f194fcfd..8c957ac11fa 100644 --- a/include/rt/boolweave.h +++ b/include/rt/boolweave.h @@ -1,7 +1,7 @@ /* B O O L W E A V E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/calc.h b/include/rt/calc.h index 9aa81274328..586a1ea841a 100644 --- a/include/rt/calc.h +++ b/include/rt/calc.h @@ -1,7 +1,7 @@ /* C A L C . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/cmd.h b/include/rt/cmd.h index 1895dfe0b88..e43f740290b 100644 --- a/include/rt/cmd.h +++ b/include/rt/cmd.h @@ -1,7 +1,7 @@ /* C M D . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/comb.h b/include/rt/comb.h index c15c4755430..b1a1aa2a3df 100644 --- a/include/rt/comb.h +++ b/include/rt/comb.h @@ -1,7 +1,7 @@ /* C O M B . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/db4.h b/include/rt/db4.h index 43bf906b92e..97f942c34c9 100644 --- a/include/rt/db4.h +++ b/include/rt/db4.h @@ -1,7 +1,7 @@ /* D B 4 . H * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/db5.h b/include/rt/db5.h index 6604d816d27..cc2a9d90a75 100644 --- a/include/rt/db5.h +++ b/include/rt/db5.h @@ -1,7 +1,7 @@ /* D B 5 . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/db_attr.h b/include/rt/db_attr.h index f6442d17999..0b9f9e173fb 100644 --- a/include/rt/db_attr.h +++ b/include/rt/db_attr.h @@ -1,7 +1,7 @@ /* D B _ A T T R . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/db_diff.h b/include/rt/db_diff.h index eb93dce8303..0a821b3f71b 100644 --- a/include/rt/db_diff.h +++ b/include/rt/db_diff.h @@ -1,7 +1,7 @@ /* D B _ D I F F . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -27,6 +27,7 @@ #define RT_DB_DIFF_H #include "common.h" +#include "bu/avs.h" #include "bu/ptbl.h" #include "bn/tol.h" #include "rt/defines.h" diff --git a/include/rt/db_fp.h b/include/rt/db_fp.h index b6da2bf6a15..459855ea199 100644 --- a/include/rt/db_fp.h +++ b/include/rt/db_fp.h @@ -1,7 +1,7 @@ /* D B _ F P . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/db_fullpath.h b/include/rt/db_fullpath.h index c1058a6636f..c52ad11987c 100644 --- a/include/rt/db_fullpath.h +++ b/include/rt/db_fullpath.h @@ -1,7 +1,7 @@ /* D B _ F U L L P A T H . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/db_instance.h b/include/rt/db_instance.h index 6aebefca11c..d10a98ce75f 100644 --- a/include/rt/db_instance.h +++ b/include/rt/db_instance.h @@ -1,7 +1,7 @@ /* D B _ I N S T A N C E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/db_internal.h b/include/rt/db_internal.h index 01769e027c3..30e44fd4bc4 100644 --- a/include/rt/db_internal.h +++ b/include/rt/db_internal.h @@ -1,7 +1,7 @@ /* D B _ I N T E R N A L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -64,7 +64,9 @@ struct rt_db_internal { /** * Get an object from the database, and convert it into its internal - * representation. + * (i.e., unserialized in-memory) representation. Applies the + * provided matrix transform only to the in-memory internal being + * returned. * * Returns - * <0 On error diff --git a/include/rt/db_io.h b/include/rt/db_io.h index 9f97762c3d1..557d01b3069 100644 --- a/include/rt/db_io.h +++ b/include/rt/db_io.h @@ -1,7 +1,7 @@ /* D B _ I O . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/debug.h b/include/rt/debug.h index 2a7f21c2e37..a5e3e02bc18 100644 --- a/include/rt/debug.h +++ b/include/rt/debug.h @@ -1,7 +1,7 @@ /* D E B U G . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/defines.h b/include/rt/defines.h index 4305591eecf..4755613e5ee 100644 --- a/include/rt/defines.h +++ b/include/rt/defines.h @@ -1,7 +1,7 @@ /* D E F I N E S . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/directory.h b/include/rt/directory.h index 2df8663b904..ac0994dab59 100644 --- a/include/rt/directory.h +++ b/include/rt/directory.h @@ -1,7 +1,7 @@ /* D I R E C T O R Y . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/dspline.h b/include/rt/dspline.h index 3a2beab9ede..481f33bcbfd 100644 --- a/include/rt/dspline.h +++ b/include/rt/dspline.h @@ -1,7 +1,7 @@ /* D S P L I N E . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/func.h b/include/rt/func.h index 5fa2a13fc21..edae441b6d9 100644 --- a/include/rt/func.h +++ b/include/rt/func.h @@ -1,7 +1,7 @@ /* R T F U N C . H * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/functab.h b/include/rt/functab.h index a87cd9d93d9..a3ef7f1720c 100644 --- a/include/rt/functab.h +++ b/include/rt/functab.h @@ -1,7 +1,7 @@ /* R T _ F U N C T A B . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/geom.h b/include/rt/geom.h index a53cfcbcdab..e4719e2e8c3 100644 --- a/include/rt/geom.h +++ b/include/rt/geom.h @@ -1,7 +1,7 @@ /* G E O M . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -348,7 +348,7 @@ struct rt_ebm_internal { #define RT_VOL_NAME_LEN 128 struct rt_vol_internal { uint32_t magic; - char file[RT_VOL_NAME_LEN]; + char name[RT_VOL_NAME_LEN]; /* NOTE: [xyz]dim/lo/hi cannot be size_t until rel8 as they are * written out to disk via bu_vls_struct_print() as 32-bit ints. */ @@ -359,6 +359,10 @@ struct rt_vol_internal { uint32_t hi; /**< @brief High threshold */ vect_t cellsize; /**< @brief ideal coords: size of each cell */ mat_t mat; /**< @brief convert local coords to model space */ + struct rt_db_internal *bip; /* @brief db object for data*/ +#define RT_VOL_SRC_FILE 'f' +#define RT_VOL_SRC_OBJ 'o' + char datasrc;/**< @brief which type of data source */ /* REMAINING ELEMENTS PROVIDED BY IMPORT, UNUSED BY EXPORT */ unsigned char *map; }; diff --git a/include/rt/global.h b/include/rt/global.h index 97a78e082df..aa89328caf5 100644 --- a/include/rt/global.h +++ b/include/rt/global.h @@ -1,7 +1,7 @@ /* G L O B A L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/hit.h b/include/rt/hit.h index 00944d53f7a..caccf8b3cd4 100644 --- a/include/rt/hit.h +++ b/include/rt/hit.h @@ -1,7 +1,7 @@ /* H I T . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/htbl.h b/include/rt/htbl.h index 0b15c4cf66d..e23a680471d 100644 --- a/include/rt/htbl.h +++ b/include/rt/htbl.h @@ -1,7 +1,7 @@ /* H T B L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/mater.h b/include/rt/mater.h index 9a46913dc6d..e61dc323632 100644 --- a/include/rt/mater.h +++ b/include/rt/mater.h @@ -1,7 +1,7 @@ /* M A T E R . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/mem.h b/include/rt/mem.h index 54102b0c9a7..cc51e393e25 100644 --- a/include/rt/mem.h +++ b/include/rt/mem.h @@ -1,7 +1,7 @@ /* M E M . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/misc.h b/include/rt/misc.h index 93b0a5d2d75..73c8022b16d 100644 --- a/include/rt/misc.h +++ b/include/rt/misc.h @@ -1,7 +1,7 @@ /* M I S C . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/nmg.h b/include/rt/nmg.h index f68ceb6643f..456ca497cf9 100644 --- a/include/rt/nmg.h +++ b/include/rt/nmg.h @@ -1,7 +1,7 @@ /* N M G . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/nongeom.h b/include/rt/nongeom.h index 2a363bdbf57..2b575768d5c 100644 --- a/include/rt/nongeom.h +++ b/include/rt/nongeom.h @@ -1,7 +1,7 @@ /* N O N G E O M . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/op.h b/include/rt/op.h index 61856d0f99c..c0b5d1c513b 100644 --- a/include/rt/op.h +++ b/include/rt/op.h @@ -1,7 +1,7 @@ /* O P . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/overlap.h b/include/rt/overlap.h index 2746eeed696..03f0a976bd8 100644 --- a/include/rt/overlap.h +++ b/include/rt/overlap.h @@ -1,7 +1,7 @@ /* O V E R L A P . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/pattern.h b/include/rt/pattern.h index a505ad9ad3e..3ade2cb107a 100644 --- a/include/rt/pattern.h +++ b/include/rt/pattern.h @@ -1,7 +1,7 @@ /* R T _ P A T T E R N . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/piece.h b/include/rt/piece.h index 5814aad41fe..bab40da9573 100644 --- a/include/rt/piece.h +++ b/include/rt/piece.h @@ -1,7 +1,7 @@ /* P I E C E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/prep.h b/include/rt/prep.h index b6ce1b751b2..59cbbb1ec83 100644 --- a/include/rt/prep.h +++ b/include/rt/prep.h @@ -1,7 +1,7 @@ /* P R E P . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/annot.h b/include/rt/primitives/annot.h index ce8a3d07b40..340bbb53078 100644 --- a/include/rt/primitives/annot.h +++ b/include/rt/primitives/annot.h @@ -1,7 +1,7 @@ /* A N N O T . H * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/arb8.h b/include/rt/primitives/arb8.h index 75e6f45ff0a..4f64bc3605f 100644 --- a/include/rt/primitives/arb8.h +++ b/include/rt/primitives/arb8.h @@ -1,7 +1,7 @@ /* A R B 8 . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/bot.h b/include/rt/primitives/bot.h index 10834898fc5..d186e585a94 100644 --- a/include/rt/primitives/bot.h +++ b/include/rt/primitives/bot.h @@ -1,7 +1,7 @@ /* B O T . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/brep.h b/include/rt/primitives/brep.h index 4b99c71be77..145514d5122 100644 --- a/include/rt/primitives/brep.h +++ b/include/rt/primitives/brep.h @@ -1,7 +1,7 @@ /* B R E P . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/cline.h b/include/rt/primitives/cline.h index f4bc8bb4033..5caf4e2f5ab 100644 --- a/include/rt/primitives/cline.h +++ b/include/rt/primitives/cline.h @@ -1,7 +1,7 @@ /* C L I N E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/dsp.h b/include/rt/primitives/dsp.h index c28c7016100..f4e322e95c9 100644 --- a/include/rt/primitives/dsp.h +++ b/include/rt/primitives/dsp.h @@ -1,7 +1,7 @@ /* D S P . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/ell.h b/include/rt/primitives/ell.h index a50c784e50b..6471df9f232 100644 --- a/include/rt/primitives/ell.h +++ b/include/rt/primitives/ell.h @@ -1,7 +1,7 @@ /* E L L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/epa.h b/include/rt/primitives/epa.h index cbd7a66b396..71e376ab537 100644 --- a/include/rt/primitives/epa.h +++ b/include/rt/primitives/epa.h @@ -1,7 +1,7 @@ /* E P A . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/hf.h b/include/rt/primitives/hf.h index b42462a754c..d30da75c344 100644 --- a/include/rt/primitives/hf.h +++ b/include/rt/primitives/hf.h @@ -1,7 +1,7 @@ /* H F . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/metaball.h b/include/rt/primitives/metaball.h index ee68983dccb..7b86889ee34 100644 --- a/include/rt/primitives/metaball.h +++ b/include/rt/primitives/metaball.h @@ -1,7 +1,7 @@ /* M E T A B A L L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/pg.h b/include/rt/primitives/pg.h index 4bd2a18d24c..aef36ce6fe2 100644 --- a/include/rt/primitives/pg.h +++ b/include/rt/primitives/pg.h @@ -1,7 +1,7 @@ /* P G . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/pipe.h b/include/rt/primitives/pipe.h index 1e85d647200..ec42ff38dc5 100644 --- a/include/rt/primitives/pipe.h +++ b/include/rt/primitives/pipe.h @@ -1,7 +1,7 @@ /* P I P E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/rhc.h b/include/rt/primitives/rhc.h index 7a5830ebd9b..c889ded80c2 100644 --- a/include/rt/primitives/rhc.h +++ b/include/rt/primitives/rhc.h @@ -1,7 +1,7 @@ /* R H C . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/rpc.h b/include/rt/primitives/rpc.h index 21e9bc268de..e8ccbd328f6 100644 --- a/include/rt/primitives/rpc.h +++ b/include/rt/primitives/rpc.h @@ -1,7 +1,7 @@ /* R P C . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/script.h b/include/rt/primitives/script.h index 634aed67ef7..88b392b703f 100644 --- a/include/rt/primitives/script.h +++ b/include/rt/primitives/script.h @@ -1,7 +1,7 @@ /* S C R I P T . H * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/sketch.h b/include/rt/primitives/sketch.h index 809af90497f..72de96079e8 100644 --- a/include/rt/primitives/sketch.h +++ b/include/rt/primitives/sketch.h @@ -1,7 +1,7 @@ /* S K E T C H . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/tgc.h b/include/rt/primitives/tgc.h index 4527b0a57bf..83766c0527f 100644 --- a/include/rt/primitives/tgc.h +++ b/include/rt/primitives/tgc.h @@ -1,7 +1,7 @@ /* T G C . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/primitives/tor.h b/include/rt/primitives/tor.h index aafc0b0fd8a..adad2764700 100644 --- a/include/rt/primitives/tor.h +++ b/include/rt/primitives/tor.h @@ -1,7 +1,7 @@ /* T O R . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/private.h b/include/rt/private.h index 4d6c3ae9860..287e53003c8 100644 --- a/include/rt/private.h +++ b/include/rt/private.h @@ -1,7 +1,7 @@ /* P R I V A T E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/ray_partition.h b/include/rt/ray_partition.h index 9539da5299b..ffc9c203f09 100644 --- a/include/rt/ray_partition.h +++ b/include/rt/ray_partition.h @@ -1,7 +1,7 @@ /* R A Y _ P A R T I T I O N . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/region.h b/include/rt/region.h index b4f4e5377f1..6f0b3032256 100644 --- a/include/rt/region.h +++ b/include/rt/region.h @@ -1,7 +1,7 @@ /* R E G I O N . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/resource.h b/include/rt/resource.h index 8686c1c71a0..c45179aabc7 100644 --- a/include/rt/resource.h +++ b/include/rt/resource.h @@ -1,7 +1,7 @@ /* R E S O U R C E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/rt_instance.h b/include/rt/rt_instance.h index 36e57085e1a..5e5eb2049e3 100644 --- a/include/rt/rt_instance.h +++ b/include/rt/rt_instance.h @@ -1,7 +1,7 @@ /* R T _ I N S T A N C E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/search.h b/include/rt/search.h index 04564403103..e1fe7953283 100644 --- a/include/rt/search.h +++ b/include/rt/search.h @@ -1,7 +1,7 @@ /* S E A R C H . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/seg.h b/include/rt/seg.h index 635681ff8c9..dc9d67efaf2 100644 --- a/include/rt/seg.h +++ b/include/rt/seg.h @@ -1,7 +1,7 @@ /* S E G . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/shoot.h b/include/rt/shoot.h index 81977295df8..14da199fd34 100644 --- a/include/rt/shoot.h +++ b/include/rt/shoot.h @@ -1,7 +1,7 @@ /* S H O O T . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/solid.h b/include/rt/solid.h index b3bef6463d9..fcf31b377bf 100644 --- a/include/rt/solid.h +++ b/include/rt/solid.h @@ -1,7 +1,7 @@ /* S O L I D . H * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/soltab.h b/include/rt/soltab.h index f8c80d6266a..a0fe18560b5 100644 --- a/include/rt/soltab.h +++ b/include/rt/soltab.h @@ -1,7 +1,7 @@ /* S O L T A B . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/space_partition.h b/include/rt/space_partition.h index f77577083cc..775e9f9ea08 100644 --- a/include/rt/space_partition.h +++ b/include/rt/space_partition.h @@ -1,7 +1,7 @@ /* S P A C E _ P A R T I T I O N . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/tie.h b/include/rt/tie.h index b088cbba98f..7a2f7fced83 100644 --- a/include/rt/tie.h +++ b/include/rt/tie.h @@ -1,7 +1,7 @@ /* T I E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/timer.h b/include/rt/timer.h index 26321d43ec8..e2abdb843a4 100644 --- a/include/rt/timer.h +++ b/include/rt/timer.h @@ -1,7 +1,7 @@ /* T I M E R . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -33,41 +33,23 @@ __BEGIN_DECLS /** @addtogroup rt_timer */ /** @{ */ /** - * To provide timing information for RT. - * THIS VERSION FOR Denelcor HEP/UPX (System III-like) + * Provide timing information for RT. */ /** - * - * To provide timing information for RT when running on 4.2 BSD UNIX. - * - */ - -/** - * - * To provide timing information on Microsoft Windows NT. - */ -/** - * - * To provide timing information for RT. This version for any non-BSD - * UNIX system, including System III, Vr1, Vr2. Version 6 & 7 should - * also be able to use this (untested). The time() and times() - * sys-calls are used for all timing. - * + * Initialize global librt timer */ - - RT_EXPORT extern void rt_prep_timer(void); -/* Read global timer, return time + str */ + /** - * Reports on the passage of time, since rt_prep_timer() was called. - * Explicit return is number of CPU seconds. String return is - * descriptive. If "elapsed" pointer is non-null, number of elapsed - * seconds are returned. Times returned will never be zero. + * Reports on the passage of time, since rt_prep_timer() was called. Explicit + * return is number of CPU seconds. String return is descriptive. If "wall" + * pointer is non-null, number of elapsed seconds per the wall clock are + * returned. Times returned will never be zero. */ -RT_EXPORT extern double rt_get_timer(struct bu_vls *vp, - double *elapsed); +RT_EXPORT extern double rt_get_timer(struct bu_vls *vp, double *elapsed); /* Return CPU time, text, & wall clock time off the global timer */ + /** * Compatibility routine */ diff --git a/include/rt/tol.h b/include/rt/tol.h index 4df2f74a32c..efcd6119036 100644 --- a/include/rt/tol.h +++ b/include/rt/tol.h @@ -1,7 +1,7 @@ /* T O L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/tree.h b/include/rt/tree.h index 42f3c6017f7..6bb63bd2ca3 100644 --- a/include/rt/tree.h +++ b/include/rt/tree.h @@ -1,7 +1,7 @@ /* T R E E . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/uv.h b/include/rt/uv.h index cb25c4b7daa..a9ed08328e6 100644 --- a/include/rt/uv.h +++ b/include/rt/uv.h @@ -1,7 +1,7 @@ /* U V . H * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/version.h b/include/rt/version.h index 9d038e81c76..13bb73c8cdd 100644 --- a/include/rt/version.h +++ b/include/rt/version.h @@ -1,7 +1,7 @@ /* V E R S I O N . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/view.h b/include/rt/view.h index da5e4a1acba..f1a3944e432 100644 --- a/include/rt/view.h +++ b/include/rt/view.h @@ -1,7 +1,7 @@ /* V I E W . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/vlist.h b/include/rt/vlist.h index 209a5bfa490..56ea1116ba9 100644 --- a/include/rt/vlist.h +++ b/include/rt/vlist.h @@ -1,7 +1,7 @@ /* V L I S T . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/wdb.h b/include/rt/wdb.h index 1189703d144..e9f42887171 100644 --- a/include/rt/wdb.h +++ b/include/rt/wdb.h @@ -1,7 +1,7 @@ /* W D B . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rt/xray.h b/include/rt/xray.h index 3b780865aa3..a81035a6a1b 100644 --- a/include/rt/xray.h +++ b/include/rt/xray.h @@ -1,7 +1,7 @@ /* X R A Y . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/rtserver.h b/include/rtserver.h index 44531ded837..74ebc614d3b 100644 --- a/include/rtserver.h +++ b/include/rtserver.h @@ -1,7 +1,7 @@ /* R T S E R V E R . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/tclcad.h b/include/tclcad.h index 98edd159b4d..378d57e5335 100644 --- a/include/tclcad.h +++ b/include/tclcad.h @@ -1,7 +1,7 @@ /* T C L C A D . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -518,12 +518,15 @@ TCLCAD_EXPORT extern int tclcad_init(Tcl_Interp *interp, int init_gui, struct bu * Tcl specific I/O handlers */ struct tclcad_io_data { - Tcl_Channel chan_stdin; - Tcl_Channel chan_stdout; - Tcl_Channel chan_stderr; Tcl_Interp *interp; int io_mode; + void *state; }; +TCLCAD_EXPORT struct tclcad_io_data * +tclcad_create_io_data(); +TCLCAD_EXPORT void +tclcad_destroy_io_data(struct tclcad_io_data *d); + TCLCAD_EXPORT void tclcad_create_io_handler(struct ged_subprocess *p, bu_process_io_t d, ged_io_func_t callback, void *data); TCLCAD_EXPORT void diff --git a/include/vmath.h b/include/vmath.h index c400196fd86..bb9121b17d2 100644 --- a/include/vmath.h +++ b/include/vmath.h @@ -1,7 +1,7 @@ /* V M A T H . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/include/wdb.h b/include/wdb.h index 12ace8f24ea..d534a0470ba 100644 --- a/include/wdb.h +++ b/include/wdb.h @@ -1,7 +1,7 @@ /* W D B . H * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -648,7 +648,7 @@ WDB_EXPORT extern int mk_hrt(struct rt_wdb *fp, const char *name, const point_t /** * 3-D Volume primitive. */ -WDB_EXPORT extern int mk_vol(struct rt_wdb *fp, const char *name, const char *file, +WDB_EXPORT extern int mk_vol(struct rt_wdb *fp, const char *name, char datasrc, const char *file, size_t xdim, size_t ydim, size_t zdim, size_t lo, size_t hi, const vect_t cellsize, const matp_t mat); diff --git a/misc/Bullet_Box_Chain_Demo.cpp b/misc/Bullet_Box_Chain_Demo.cpp index 802c4f2bc52..fe7d639b6df 100644 --- a/misc/Bullet_Box_Chain_Demo.cpp +++ b/misc/Bullet_Box_Chain_Demo.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/CMake/BRLCAD_Build_Types.cmake b/misc/CMake/BRLCAD_Build_Types.cmake new file mode 100644 index 00000000000..a622fddb80e --- /dev/null +++ b/misc/CMake/BRLCAD_Build_Types.cmake @@ -0,0 +1,108 @@ +# B R L C A D _ B U I L D _ T Y P E S . C M A K E +# BRL-CAD +# +# Copyright (c) 2020-2021 United States Government as represented by +# the U.S. Army Research Laboratory. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +### +#--------------------------------------------------------------------- +# CMake by default provides four different configurations for multi- +# configuration build tools. We want only two - Debug and Release. +if(NOT ENABLE_ALL_CONFIG_TYPES) + if(CMAKE_CONFIGURATION_TYPES AND NOT "${CMAKE_CONFIGURATION_TYPES}" STREQUAL "Debug;Release") + set(CMAKE_CONFIGURATION_TYPES "Debug;Release" CACHE STRING "Allowed BRL-CAD configuration types" FORCE) + endif(CMAKE_CONFIGURATION_TYPES AND NOT "${CMAKE_CONFIGURATION_TYPES}" STREQUAL "Debug;Release") +endif(NOT ENABLE_ALL_CONFIG_TYPES) + +# Normalize the build type capitalization +if(CMAKE_BUILD_TYPE) + string(TOUPPER "${CMAKE_BUILD_TYPE}" BUILD_TYPE_UPPER) + if ("${BUILD_TYPE_UPPER}" STREQUAL "RELEASE") + set(CMAKE_BUILD_TYPE "Release" CACHE STRING "Build Type" FORCE) + endif ("${BUILD_TYPE_UPPER}" STREQUAL "RELEASE") + if ("${BUILD_TYPE_UPPER}" STREQUAL "DEBUG") + set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Build Type" FORCE) + endif ("${BUILD_TYPE_UPPER}" STREQUAL "DEBUG") +endif(CMAKE_BUILD_TYPE) +# Stash the build type so we can set up a drop-down menu in the gui +if(NOT BRLCAD_IS_SUBBUILD) + set(CMAKE_BUILD_TYPE "${CMAKE_BUILD_TYPE}" CACHE STRING "BRL-CAD high level build configuration") + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS "" Debug Release) +endif(NOT BRLCAD_IS_SUBBUILD) +if(CMAKE_CONFIGURATION_TYPES) + mark_as_advanced(CMAKE_BUILD_TYPE) +else(CMAKE_CONFIGURATION_TYPES) + mark_as_advanced(CMAKE_BUILD_TYPE) +endif(CMAKE_CONFIGURATION_TYPES) + +#------------------------------------------------------------------------------ +# For multi-configuration builds, we frequently need to know the run-time build +# directory. Confusingly, we need to do different things for install commands +# and custom command definitions. To manage this, we define +# CMAKE_CURRENT_BUILD_DIR_SCRIPT and CMAKE_CURRENT_BUILD_DIR_INSTALL once at +# the top level, then use them when we need the configuration-dependent path. +# +# Note that neither of these will work when we need to generate a .cmake file +# that does runtime detection of the current build configuration. CMake +# scripts run using "cmake -P script.cmake" style invocation are independent of +# the "main" build system and will not know how to resolve either of the below +# variables correctly. In that case, the script itself must check the current +# file in CMakeTmp/CURRENT_PATH (TODO - need to better organize and document +# this mechanism, given how critical it is proving... possible convention will +# be to have the string CURRENT_BUILD_DIR in any path that needs the relevant +# logic in a script, and a standard substitution routine...) and set any +# necessary path variables accordingly. (TODO - make a standard function to do +# that the right way that scripts can load and use - right now that logic is +# scattered all over the code and if we wanted to change where those files went +# it would be a lot of work.) + +# TODO - in principle, this mechanism should be replaced with generator +# expressions +if(CMAKE_CONFIGURATION_TYPES) + set(CMAKE_CURRENT_BUILD_DIR_SCRIPT "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}") + set(CMAKE_CURRENT_BUILD_DIR_INSTALL "${CMAKE_BINARY_DIR}/\${BUILD_TYPE}") +else(CMAKE_CONFIGURATION_TYPES) + set(CMAKE_CURRENT_BUILD_DIR_SCRIPT "${CMAKE_BINARY_DIR}") + set(CMAKE_CURRENT_BUILD_DIR_INSTALL "${CMAKE_BINARY_DIR}") +endif(CMAKE_CONFIGURATION_TYPES) + +# Mark CMAKE_CONFIGURATION_TYPES as advanced - users shouldn't be adjusting this +# directly. +mark_as_advanced(CMAKE_CONFIGURATION_TYPES) + + + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/BRLCAD_CPack.cmake b/misc/CMake/BRLCAD_CPack.cmake new file mode 100644 index 00000000000..145876c459d --- /dev/null +++ b/misc/CMake/BRLCAD_CPack.cmake @@ -0,0 +1,196 @@ +# B R L C A D _ C P A C K . C M A K E +# BRL-CAD +# +# Copyright (c) 2020-2021 United States Government as represented by +# the U.S. Army Research Laboratory. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +### +configure_file("${BRLCAD_CMAKE_DIR}/source_archive_setup.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/source_archive_setup.cmake" @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/source_archive_setup.cmake") + +set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "BRL-CAD - a powerful cross-platform open source solid modeling system") +set(CPACK_PACKAGE_VENDOR "BRL-CAD Development Team") +set(CPACK_RESOURCE_FILE_README "${CMAKE_CURRENT_SOURCE_DIR}/README") +set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING") +set(CPACK_PACKAGE_VERSION_MAJOR ${BRLCAD_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${BRLCAD_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${BRLCAD_VERSION_PATCH}) + +# By default, we want debugging information +set(CPACK_STRIP_FILES FALSE) + +# If we're not on Windows, set the install prefix and create +# TGZ and TBZ2 packages by default +if(NOT WIN32) + set(CPACK_PACKAGING_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + set(CPACK_GENERATOR TGZ TBZ2) +endif(NOT WIN32) + +# If we have RPMBUILD and it's not explicitly disabled, assume we're making an RPM. +find_program(RPMBUILD_EXEC rpmbuild) +mark_as_advanced(RPMBUILD_EXEC) +if(RPMBUILD_EXEC AND NOT CPACK_RPM_SKIP) + + # Build an RPM by default if we have the tool. Out of the box, just + # build a "vanilla" RPM. For situations where we want more detail + # and versioning of the RPM, set the variable CMAKE_RPM_VERSION + # to the numerical "version" of the RPM: 1, 2, etc.. + + # Since RPM packages present a particular problem with bad umask + # settings and RPM package building is enabled, raise the issue again + # with a longer wait time. + if (NOT UMASK_OK) + message(" ") + message(WARNING "umask is set to ${umask_curr} and RPM package building is enabled - this is not a 'standard' umask setting for BRL-CAD RPM packages. Double check that these umask permissions will have the desired results when installed - RPM packages can impact permissions on system directories such as /usr\nIf the umask settings need to be changed, it is recommended that the build directory be cleared and cmake re-run after the umask setting has been changed.") + if(SLEEP_EXEC) + execute_process(COMMAND ${SLEEP_EXEC} 5) + endif(SLEEP_EXEC) + endif (NOT UMASK_OK) + + set(CPACK_GENERATOR ${CPACK_GENERATOR} RPM) + set(CPACK_RPM_PACKAGE_LICENSE "LGPL 2.1") + set(CPACK_RPM_PACKAGE_GROUP "Applications/Engineering") + set(CPACK_RPM_PACKAGE_ARCHITECTURE "${CMAKE_SYSTEM_PROCESSOR}") + + # We do NOT want to strip the binaries added to the RPM - + # see https://cmake.org/Wiki/CMake:CPackPackageGenerators and + # https://public.kitware.com/Bug/view.php?id=7435 + set(CPACK_RPM_SPEC_INSTALL_POST /bin/true) + + if(CPACK_RPM_VERSION) + if(DEFINED BRLCAD_VERSION_AMEND) + set(CPACK_RPM_PACKAGE_NAME "brlcad_${BRLCAD_VERSION_MAJOR}_${BRLCAD_VERSION_MINOR}_${BRLCAD_VERSION_PATCH}_${BRLCAD_VERSION_AMEND}") + else(DEFINED BRLCAD_VERSION_AMEND) + set(CPACK_RPM_PACKAGE_NAME "brlcad_${BRLCAD_VERSION_MAJOR}_${BRLCAD_VERSION_MINOR}_${BRLCAD_VERSION_PATCH}") + endif(DEFINED BRLCAD_VERSION_AMEND) + + # If we've got a Redhat release, include some info about the + # specific release in the name. Otherwise, just go generic. + if(EXISTS /etc/redhat-release) + file(READ /etc/redhat-release REDHAT_RELEASE) + string(REGEX MATCH "[0-9]+" REDHAT_VERSION ${REDHAT_RELEASE}) + string(REGEX MATCH "Enterprise Linux" LINUX_DIST_TYPE ${REDHAT_RELEASE}) + if(LINUX_DIST_TYPE) + set(LINUX_DIST_TYPE "el") + else(LINUX_DIST_TYPE) + set(LINUX_DIST_TYPE "rh") + endif(LINUX_DIST_TYPE) + set(CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_VERSION}.${LINUX_DIST_TYPE}${REDHAT_VERSION}) + else(EXISTS /etc/redhat-release) + set(CPACK_RPM_PACKAGE_RELEASE ${CPACK_RPM_VERSION}) + endif(EXISTS /etc/redhat-release) + + endif(CPACK_RPM_VERSION) +endif(RPMBUILD_EXEC AND NOT CPACK_RPM_SKIP) + +if(${CMAKE_WORD_SIZE} MATCHES "32BIT" AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") + set(CPACK_PACKAGE_FILE_NAME "BRL-CAD_${BRLCAD_VERSION}_${CMAKE_SYSTEM_NAME}_x86") +else(${CMAKE_WORD_SIZE} MATCHES "32BIT" AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") + set(CPACK_PACKAGE_FILE_NAME "BRL-CAD_${BRLCAD_VERSION}_${CMAKE_SYSTEM_NAME}_${CMAKE_SYSTEM_PROCESSOR}") +endif(${CMAKE_WORD_SIZE} MATCHES "32BIT" AND ${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64") +if(CPACK_RPM_PACKAGE_RELEASE) + set(CPACK_PACKAGE_FILE_NAME "${CPACK_PACKAGE_FILE_NAME}_${CPACK_RPM_PACKAGE_RELEASE}") +endif(CPACK_RPM_PACKAGE_RELEASE) + +if(WIN32) + find_package(NSIS) + if (NSIS_FOUND) + set(CPACK_GENERATOR ${CPACK_GENERATOR} NSIS) + set(CPACK_NSIS_PACKAGE_NAME "BRL-CAD") + set(CPACK_NSIS_INSTALL_DIRECTORY "BRL-CAD ${BRLCAD_VERSION}") + set(CPACK_SOURCE_DIR "${CMAKE_SOURCE_DIR}") + set(CPACK_DATA_DIR "${DATA_DIR}") + set(CPACK_DOC_DIR "${DOC_DIR}") + # There is a bug in NSIS that does not handle full unix paths properly. Make + # sure there is at least one set of four (4) backslashes. + set(CPACK_NSIS_MUI_ICON "${CMAKE_SOURCE_DIR}/misc/nsis\\\\brlcad.ico") + set(CPACK_NSIS_MUI_UNIICON "${CMAKE_SOURCE_DIR}/misc/nsis\\\\uninstall.ico") + set(CPACK_NSIS_ENABLE_UNINSTALL_BEFORE_INSTALL ON) + set(CPACK_NSIS_DISPLAY_NAME "BRL-CAD") + set(CPACK_NSIS_MODIFY_PATH ON) + endif (NSIS_FOUND) + find_package(Wix) + if (Wix_FOUND) + # User report that this version of the installer also supports + # non-graphical installation with the /passive option. + # + # Note: for WiX, start menu shortcuts and desktop icons are handled with + # properties set on targets. (At the moment, this is not true for NSIS - + # it uses entries in the misc/CMake/NSIS.template.in file.) + # + # If we need to get fancier about this, look at the following: + # https://github.com/Kitware/CMake/blob/master/CMakeCPackOptions.cmake.in#L216 + # https://github.com/Kitware/CMake/tree/master/Utilities/Release/WiX + set(CPACK_GENERATOR ${CPACK_GENERATOR} WIX) + set(CPACK_WIX_LICENSE_RTF "${CMAKE_SOURCE_DIR}/misc/wix/License.rtf") + set(CPACK_WIX_PRODUCT_ICON "${CMAKE_SOURCE_DIR}/misc/wix/brlcad_product.ico") + set(CPACK_WIX_PROGRAM_MENU_FOLDER "BRL-CAD ${BRLCAD_VERSION}") + set(CPACK_WIX_UI_BANNER "${CMAKE_SOURCE_DIR}/misc/wix/brlcad_banner.bmp") + set(CPACK_WIX_UI_DIALOG "${CMAKE_SOURCE_DIR}/misc/wix/brlcad_dialog.bmp") + endif (Wix_FOUND) + if (NOT CPACK_GENERATOR) + # If nothing else, make a zip file + set(CPACK_GENERATOR ZIP) + endif (NOT CPACK_GENERATOR) + if(CMAKE_CL_64) + set(CPACK_PACKAGE_FILE_NAME "BRL-CAD_${BRLCAD_VERSION}_win64") + set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "BRL-CAD ${BRLCAD_VERSION} win64") + # Use the setting from http://public.kitware.com/pipermail/cmake/2013-June/055000.html to + # provide the correct default 64 bit directory with older CMake versions + set(CPACK_NSIS_INSTALL_ROOT "$PROGRAMFILES64") + else(CMAKE_CL_64) + set(CPACK_PACKAGE_FILE_NAME "BRL-CAD_${BRLCAD_VERSION}_win32") + set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY "BRL-CAD ${BRLCAD_VERSION} win32") + set(CPACK_NSIS_PACKAGE_NAME "BRL-CAD (32 Bit)") + endif(CMAKE_CL_64) +endif(WIN32) + +set(CPACK_SOURCE_GENERATOR TGZ TBZ2 ZIP) +set(CPACK_SOURCE_PACKAGE_FILE_NAME "brlcad-${BRLCAD_VERSION}") +set(CPACK_SOURCE_IGNORE_FILES "\\\\.svn/") + +configure_file("${BRLCAD_CMAKE_DIR}/BRLCAD_CPackOptions.cmake.in" "${CMAKE_BINARY_DIR}/BRLCAD_CPackOptions.cmake" @ONLY) +DISTCLEAN("${CMAKE_BINARY_DIR}/BRLCAD_CPackOptions.cmake") +set(CPACK_PROJECT_CONFIG_FILE "${CMAKE_BINARY_DIR}/BRLCAD_CPackOptions.cmake") + +include(CPack) + +DISTCLEAN("${CMAKE_BINARY_DIR}/CPackConfig.cmake") +DISTCLEAN("${CMAKE_BINARY_DIR}/CPackSourceConfig.cmake") +DISTCLEAN("${CMAKE_BINARY_DIR}/DartConfiguration.tcl") + + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/BRLCAD_CPackOptions.cmake.in b/misc/CMake/BRLCAD_CPackOptions.cmake.in index 5ab9b3aa386..5ae597802ce 100644 --- a/misc/CMake/BRLCAD_CPackOptions.cmake.in +++ b/misc/CMake/BRLCAD_CPackOptions.cmake.in @@ -1,7 +1,7 @@ # B R L C A D _ C P A C K O P T I O N S . C M A K E . I N # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/BRLCAD_CheckFunctions.cmake b/misc/CMake/BRLCAD_CheckFunctions.cmake index 38064aa0552..5addd9cd8b1 100644 --- a/misc/CMake/BRLCAD_CheckFunctions.cmake +++ b/misc/CMake/BRLCAD_CheckFunctions.cmake @@ -1,7 +1,7 @@ # B R L C A D _ C H E C K F U N C T I O N S . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/BRLCAD_Environment_Setup.cmake b/misc/CMake/BRLCAD_Environment_Setup.cmake new file mode 100644 index 00000000000..c2dd7427cca --- /dev/null +++ b/misc/CMake/BRLCAD_Environment_Setup.cmake @@ -0,0 +1,224 @@ +# B R L C A D _ E N V I R O N M E N T _ S E T U P . C M A K E +# BRL-CAD +# +# Copyright (c) 2020-2021 United States Government as represented by +# the U.S. Army Research Laboratory. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +### +# Setup and checks related to system environment settings + +#--------------------------------------------------------------------- +# Save the current LC_ALL, LC_MESSAGES, and LANG environment variables +# and set them to "C" so things like date output are as expected. +set(_orig_lc_all $ENV{LC_ALL}) +set(_orig_lc_messages $ENV{LC_MESSAGES}) +set(_orig_lang $ENV{LANG}) +if(_orig_lc_all) + set(ENV{LC_ALL} C) +endif(_orig_lc_all) +if(_orig_lc_messages) + set(ENV{LC_MESSAGES} C) +endif(_orig_lc_messages) +if(_orig_lang) + set(ENV{LANG} C) +endif(_orig_lang) + +#--------------------------------------------------------------------- +# Package creation with CMake depends on the value of umask - if permissions +# are such that temporary files are created without permissions needed for +# generated packages, the resulting packages may behave badly when installed. +# In particular, RPM packages may improperly reset permissions on core +# directories such as /usr. +function(check_umask umask_val status_var) + string(REGEX REPLACE "[^x]" "" umask_x "${umask_val}") + string(REGEX REPLACE "[^r]" "" umask_r "${umask_val}") + string(LENGTH "${umask_r}" UMASK_HAVE_R) + set(${status_var} 0 PARENT_SCOPE) + if(UMASK_HAVE_R AND "${umask_x}" STREQUAL "xxx") + set(${status_var} 1 PARENT_SCOPE) + endif(UMASK_HAVE_R AND "${umask_x}" STREQUAL "xxx") +endfunction(check_umask) + +# Note - umask is not always an executable, so find_program wont' necessarily +# determine whether the umask check is appropriate. If we don't find an +# executable, follow up to see if we can use sh to get the info. +find_program(UMASK_EXEC umask) +mark_as_advanced(UMASK_EXEC) +if(NOT UMASK_EXEC) + # If we don't have a umask cmd, see if sh -c "umask -S" works + execute_process(COMMAND sh -c "umask -S" OUTPUT_VARIABLE umask_out) + # Check if we've got something that looks like a umask output + if("${umask_out}" MATCHES "^u=.*g=.*o=.*") + set(UMASK_EXEC sh) + set(UMASK_EXEC_ARGS -c "umask -S") + endif("${umask_out}" MATCHES "^u=.*g=.*o=.*") +else(NOT UMASK_EXEC) + set(UMASK_EXEC_ARGS -S) +endif(NOT UMASK_EXEC) + +if(UMASK_EXEC) + execute_process(COMMAND ${UMASK_EXEC} ${UMASK_EXEC_ARGS} OUTPUT_VARIABLE umask_curr) + string(STRIP "${umask_curr}" umask_curr) + check_umask("${umask_curr}" UMASK_OK) + if(NOT UMASK_OK) + message(" ") + message(WARNING "umask is set to ${umask_curr} - this setting is not recommended if one of the goals of this build is to generate packages. Use 'umask 022' for improved package behavior.") + if(SLEEP_EXEC) + execute_process(COMMAND ${SLEEP_EXEC} 1) + endif(SLEEP_EXEC) + endif(NOT UMASK_OK) +endif(UMASK_EXEC) + +#--------------------------------------------------------------------- +# Allow the BRLCAD_ROOT environment variable to set during build, but be noisy +# about it unless we're specifically told this is intentional. Having this +# happen by accident is generally not a good idea. +find_program(SLEEP_EXEC sleep) +mark_as_advanced(SLEEP_EXEC) +if(NOT "$ENV{BRLCAD_ROOT}" STREQUAL "" AND NOT BRLCAD_ROOT_OVERRIDE) + message(WARNING "\nBRLCAD_ROOT is presently set to \"$ENV{BRLCAD_ROOT}\"\nBRLCAD_ROOT should typically be used only when needed as a runtime override, not during compilation. Building with BRLCAD_ROOT set may produce unexpected behavior during both compilation and subsequent program execution. It is *highly* recommended that BRLCAD_ROOT be unset and not used.\n") + if(SLEEP_EXEC) + execute_process(COMMAND ${SLEEP_EXEC} 2) + endif(SLEEP_EXEC) +endif(NOT "$ENV{BRLCAD_ROOT}" STREQUAL "" AND NOT BRLCAD_ROOT_OVERRIDE) + +#--------------------------------------------------------------------- +# Characterize the system as 32 or 64 bit - this has an impact on many +# of the subsequent operations, including find_package results, so it +# must be done up front. +set(WORD_SIZE_LABEL "Compile as 32BIT or 64BIT?") +if(NOT BRLCAD_WORD_SIZE) + set(BRLCAD_WORD_SIZE "AUTO" CACHE STRING WORD_SIZE_LABEL) +endif(NOT BRLCAD_WORD_SIZE) +set_property(CACHE BRLCAD_WORD_SIZE PROPERTY STRINGS AUTO 32BIT 64BIT) +string(TOUPPER "${BRLCAD_WORD_SIZE}" BRLCAD_WORD_SIZE_UPPER) +set(BRLCAD_WORD_SIZE "${BRLCAD_WORD_SIZE_UPPER}" CACHE STRING WORD_SIZE_LABEL FORCE) +if(NOT BRLCAD_WORD_SIZE MATCHES "AUTO" AND NOT BRLCAD_WORD_SIZE MATCHES "64BIT" AND NOT BRLCAD_WORD_SIZE MATCHES "32BIT") + message(WARNING "Unknown value ${BRLCAD_WORD_SIZE} supplied for BRLCAD_WORD_SIZE - defaulting to AUTO") + message(WARNING "Valid options are AUTO, 32BIT and 64BIT") + set(BRLCAD_WORD_SIZE "AUTO" CACHE STRING WORD_SIZE_LABEL FORCE) +endif(NOT BRLCAD_WORD_SIZE MATCHES "AUTO" AND NOT BRLCAD_WORD_SIZE MATCHES "64BIT" AND NOT BRLCAD_WORD_SIZE MATCHES "32BIT") +mark_as_advanced(BRLCAD_WORD_SIZE) + +# calculate the size of a pointer if we haven't already +include(CheckTypeSize) +check_type_size("void *" CMAKE_SIZEOF_VOID_P) + +# still not defined? +if(NOT CMAKE_SIZEOF_VOID_P) + message(WARNING "CMAKE_SIZEOF_VOID_P is not defined - assuming 32 bit platform") + set(CMAKE_SIZEOF_VOID_P 4) +endif(NOT CMAKE_SIZEOF_VOID_P) + +if(${BRLCAD_WORD_SIZE} MATCHES "AUTO") + if(${CMAKE_SIZEOF_VOID_P} MATCHES "^8$") + set(CMAKE_WORD_SIZE "64BIT") + set(BRLCAD_WORD_SIZE "64BIT (AUTO)" CACHE STRING WORD_SIZE_LABEL FORCE) + else(${CMAKE_SIZEOF_VOID_P} MATCHES "^8$") + if(${CMAKE_SIZEOF_VOID_P} MATCHES "^4$") + set(CMAKE_WORD_SIZE "32BIT") + set(BRLCAD_WORD_SIZE "32BIT (AUTO)" CACHE STRING WORD_SIZE_LABEL FORCE) + else(${CMAKE_SIZEOF_VOID_P} MATCHES "^4$") + if(${CMAKE_SIZEOF_VOID_P} MATCHES "^2$") + set(CMAKE_WORD_SIZE "16BIT") + set(BRLCAD_WORD_SIZE "16BIT (AUTO)" CACHE STRING WORD_SIZE_LABEL FORCE) + else(${CMAKE_SIZEOF_VOID_P} MATCHES "^2$") + set(CMAKE_WORD_SIZE "8BIT") + set(BRLCAD_WORD_SIZE "8BIT (AUTO)" CACHE STRING WORD_SIZE_LABEL FORCE) + endif(${CMAKE_SIZEOF_VOID_P} MATCHES "^2$") + endif(${CMAKE_SIZEOF_VOID_P} MATCHES "^4$") + endif(${CMAKE_SIZEOF_VOID_P} MATCHES "^8$") +else(${BRLCAD_WORD_SIZE} MATCHES "AUTO") + set(CMAKE_WORD_SIZE "${BRLCAD_WORD_SIZE}") +endif(${BRLCAD_WORD_SIZE} MATCHES "AUTO") + +# Enable/disable 64-bit build settings for MSVC, which is apparently +# determined at the CMake generator level - need to override other +# settings if the compiler disagrees with them. +if(MSVC) + if(CMAKE_CL_64) + if(NOT ${CMAKE_WORD_SIZE} MATCHES "64BIT") + set(CMAKE_WORD_SIZE "64BIT") + if(NOT "${BRLCAD_WORD_SIZE}" MATCHES "AUTO") + message(WARNING "Selected MSVC compiler is 64BIT - setting word size to 64BIT. To perform a 32BIT MSVC build, select the 32BIT MSVC CMake generator.") + set(BRLCAD_WORD_SIZE "64BIT" CACHE STRING WORD_SIZE_LABEL FORCE) + endif(NOT "${BRLCAD_WORD_SIZE}" MATCHES "AUTO") + endif(NOT ${CMAKE_WORD_SIZE} MATCHES "64BIT") + add_definitions("-D_WIN64") + else(CMAKE_CL_64) + set(CMAKE_SIZEOF_VOID_P 4) + if(NOT ${CMAKE_WORD_SIZE} MATCHES "32BIT") + set(CMAKE_WORD_SIZE "32BIT") + if(NOT "${BRLCAD_WORD_SIZE}" MATCHES "AUTO") + message(WARNING "Selected MSVC compiler is 32BIT - setting word size to 32BIT. To perform a 64BIT MSVC build, select the 64BIT MSVC CMake generator.") + set(BRLCAD_WORD_SIZE "32BIT" CACHE STRING WORD_SIZE_LABEL FORCE) + endif(NOT "${BRLCAD_WORD_SIZE}" MATCHES "AUTO") + endif(NOT ${CMAKE_WORD_SIZE} MATCHES "32BIT") + endif(CMAKE_CL_64) +endif(MSVC) + +# If a platform specific variable needs to be set for 32 bit, do it here +if (${CMAKE_WORD_SIZE} MATCHES "32BIT") + set(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Building for i386" FORCE) +endif (${CMAKE_WORD_SIZE} MATCHES "32BIT") + +# Based on what we are doing, we may need to constrain our search paths +# +# NOTE: Ideally we would set a matching property for 32 bit paths +# on systems that default to 64 bit - as of 2.8.8 CMake doesn't yet +# support FIND_LIBRARY_USE_LIB32_PATHS. There is a bug report on the +# topic here: http://www.cmake.org/Bug/view.php?id=11260 +# +if(${CMAKE_WORD_SIZE} MATCHES "32BIT") + set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS OFF) +else(${CMAKE_WORD_SIZE} MATCHES "32BIT") + set_property(GLOBAL PROPERTY FIND_LIBRARY_USE_LIB64_PATHS ON) +endif(${CMAKE_WORD_SIZE} MATCHES "32BIT") + +# One of the problems with 32/64 building is we need to search anew +# for 64 bit libs after a 32 bit configure, or vice versa. +if(PREVIOUS_CONFIGURE_TYPE) + if(NOT ${PREVIOUS_CONFIGURE_TYPE} MATCHES ${CMAKE_WORD_SIZE}) + include(ResetCache) + RESET_CACHE_file() + endif(NOT ${PREVIOUS_CONFIGURE_TYPE} MATCHES ${CMAKE_WORD_SIZE}) +endif(PREVIOUS_CONFIGURE_TYPE) + +set(PREVIOUS_CONFIGURE_TYPE ${CMAKE_WORD_SIZE} CACHE STRING "Previous configuration word size" FORCE) +mark_as_advanced(PREVIOUS_CONFIGURE_TYPE) + + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/BRLCAD_Install_Prefix.cmake b/misc/CMake/BRLCAD_Install_Prefix.cmake new file mode 100644 index 00000000000..d6f3c6fd60d --- /dev/null +++ b/misc/CMake/BRLCAD_Install_Prefix.cmake @@ -0,0 +1,190 @@ +# B R L C A D _ I N S T A L L _ P R E F I X . C M A K E +# BRL-CAD +# +# Copyright (c) 2020-2021 United States Government as represented by +# the U.S. Army Research Laboratory. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +### +# If we need it, use a standard string to stand in for build types. This +# allows for easier replacing later in the logic +set(BUILD_TYPE_KEY "----BUILD_TYPE----") + +#--------------------------------------------------------------------- +# The location in which to install BRL-CAD. Only do this if +# CMAKE_INSTALL_PREFIX hasn't been set already, to try and allow +# parent builds (if any) some control. + +# TODO - explore use the CONFIGURATIONS +# option in our macros and the ExternalProject_Add management: +# https://cmake.org/cmake/help/latest/command/install.html +# +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT CMAKE_INSTALL_PREFIX) + if(NOT CMAKE_CONFIGURATION_TYPES) + if("${CMAKE_BUILD_TYPE}" MATCHES "Release") + set(CMAKE_INSTALL_PREFIX "/usr/brlcad/rel-${BRLCAD_VERSION}") + else("${CMAKE_BUILD_TYPE}" MATCHES "Release") + set(CMAKE_INSTALL_PREFIX "/usr/brlcad/dev-${BRLCAD_VERSION}") + endif("${CMAKE_BUILD_TYPE}" MATCHES "Release") + else(NOT CMAKE_CONFIGURATION_TYPES) + if(MSVC) + if(CMAKE_CL_64) + set(CMAKE_INSTALL_PREFIX "C:/Program Files/BRL-CAD ${BRLCAD_VERSION}") + else(CMAKE_CL_64) + set(CMAKE_INSTALL_PREFIX "C:/Program Files (x86)/BRL-CAD ${BRLCAD_VERSION}") + endif(CMAKE_CL_64) + else(MSVC) + set(CMAKE_INSTALL_PREFIX "/usr/brlcad/${BUILD_TYPE_KEY}-${BRLCAD_VERSION}") + endif(MSVC) + endif(NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "BRL-CAD install prefix" FORCE) + set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT 0) +endif(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR NOT CMAKE_INSTALL_PREFIX) +set(BRLCAD_PREFIX "${CMAKE_INSTALL_PREFIX}" CACHE STRING "BRL-CAD install prefix") +mark_as_advanced(BRLCAD_PREFIX) + +# If we've a Release build with a Debug path or vice versa, warn about +# it. A "make install" of a Release build into a dev install +# directory or vice versa is going to result in an install that +# doesn't respect BRL-CAD standard naming conventions. +if("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/brlcad/dev-${BRLCAD_VERSION}") + message(FATAL_ERROR "\nInstallation directory (CMAKE_INSTALL_PREFIX) is set to /usr/brlcad/dev-${BRLCAD_VERSION}, but build type is set to Release!\n") +endif("${CMAKE_BUILD_TYPE}" MATCHES "Release" AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/brlcad/dev-${BRLCAD_VERSION}") +if("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/brlcad/rel-${BRLCAD_VERSION}") + message(FATAL_ERROR "\nInstallation directory (CMAKE_INSTALL_PREFIX) is set to /usr/brlcad/rel-${BRLCAD_VERSION}, but build type is set to Debug!\n") +endif("${CMAKE_BUILD_TYPE}" MATCHES "Debug" AND "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/brlcad/rel-${BRLCAD_VERSION}") + +#------------------------------------------------------------------------------ +# If CMAKE_INSTALL_PREFIX is "/usr", be VERY noisy about it - a make install in +# this location is dangerous/destructive on some systems. +find_program(SLEEP_EXEC sleep) +if("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT BRLCAD_ALLOW_INSTALL_TO_USR) + message(WARNING "}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}\nIt is STRONGLY recommended that you DO NOT install BRL-CAD into /usr as BRL-CAD provides several libraries that may conflict with other libraries (e.g. librt, libbu, libbn) on certain system configurations.\nSince our libraries predate all those that we're known to conflict with and are at the very core of our geometry services and project heritage, we have no plans to change the names of our libraries at this time.\nINSTALLING INTO /usr CAN MAKE A SYSTEM COMPLETELY UNUSABLE. If you choose to continue installing into /usr, you do so entirely at your own risk. You have been warned.\n}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}") + if(SLEEP_EXEC) + execute_process(COMMAND ${SLEEP_EXEC} 15) + endif(SLEEP_EXEC) + message(FATAL_ERROR "If you wish to proceed using /usr as your prefix, define BRLCAD_ALLOW_INSTALL_TO_USR=1 for CMake") +endif("${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT BRLCAD_ALLOW_INSTALL_TO_USR) + +#--------------------------------------------------------------------- +# Searching the system for packages presents something of a dilemma - +# in most situations it is Very Bad for a BRL-CAD build to be using +# older versions of libraries in install directories as search results. +# Generally, the desired behavior is to ignore whatever libraries are +# in the install directories, and only use external library results if +# they are something already found on the system due to non-BRL-CAD +# installation (source compile, package managers, etc.). Unfortunately, +# CMake's standard behavior is to add CMAKE_INSTALL_PREFIX to the search +# path once defined, resulting in (for us) the unexpected behavior of +# returning old installed libraries when CMake is re-run in a directory. +# +# To work around this, there are two possible approaches. One, +# identified by Maik Beckmann, operates on CMAKE_SYSTEM_PREFIX_PATH: +# +# http://www.cmake.org/pipermail/cmake/2010-October/040292.html +# +# The other, pointed out by Michael Hertling, uses the +# CMake_[SYSTEM_]IGNORE_PATH variables. +# +# http://www.cmake.org/pipermail/cmake/2011-May/044503.html +# +# BRL-CAD initially operated on CMAKE_SYSTEM_PREFIX_PATH, but has +# switched to using the *_IGNORE_PATH variables. This requires +# CMake 2.8.3 or later. +# +# The complication with ignoring install paths is if we are +# installing to a "legitimate" system search path - i.e. our +# CMAKE_INSTALL_PREFIX value is standard enough that it is a legitimate +# search target for find_package. In this case, we can't exclude +# accidental hits on our libraries without also excluding legitimate +# find_package results. So the net results are: +# +# 1. If you are planning to install to a system directory (typically +# a bad idea but the settings are legal) clean out the old system +# first or accept that the old libraries will be found and used. +# +# 2. For more custom paths, the logic below will avoid the value +# of CMAKE_INSTALL_PREFIX in find_package searches +# +# (Note: CMAKE_INSTALL_PREFIX must be checked in the case where someone +# sets it on the command line prior to CMake being run. BRLCAD_PREFIX +# preserves the CMAKE_INSTALL_PREFIX setting from the previous CMake run. +# CMAKE_INSTALL_PREFIX does not seem to be immediately set in this context +# when CMake is re-run unless specified explicitly on the command line. +# To ensure the previous (and internally set) CMAKE_INSTALL_PREFIX value +# is available, BRLCAD_PREFIX is used to store the value in the cache.) + +# CMAKE_IGNORE_PATH needs a list of explicit directories, not a +# list of prefixes - in other words, it ignores EXACTLY the specified +# path and not any subdirectories under that path. See: +# https://cmake.org/cmake/help/latest/variable/CMAKE_IGNORE_PATH.html +# This means we can't just add the install path to the ignore variables +# and have find_package skip items in the bin and lib subdirs - we need +# to list them explicitly for exclusion. + +if(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local") + # Make sure we are working with the fully normalized path + get_filename_component(PATH_NORMALIZED "${CMAKE_INSTALL_PREFIX}" ABSOLUTE) + set(IGNORE_SUBDIRS ${BIN_DIR} ${LIB_DIR}) + if (CMAKE_CONFIGURATION_TYPES) + # If we're doing multi-config, ignore all the possible output locations + foreach(cfg ${CMAKE_CONFIGURATION_TYPES}) + if ("${cfg}" STREQUAL "Release") + string(REPLACE "${BUILD_TYPE_KEY}" "rel" "${CMAKE_INSTALL_PREFIX}" TYPEPATH) + elseif ("${cfg}" STREQUAL "Debug") + string(REPLACE "${BUILD_TYPE_KEY}" "dev" "${CMAKE_INSTALL_PREFIX}" TYPEPATH) + else ("${cfg}" STREQUAL "Release") + string(REPLACE "${BUILD_TYPE_KEY}" "${cfg}" "${CMAKE_INSTALL_PREFIX}" TYPEPATH) + endif ("${cfg}" STREQUAL "Release") + foreach(sd ${IGNORE_SUBDIRS}) + set(CMAKE_SYSTEM_IGNORE_PATH "${CMAKE_SYSTEM_IGNORE_PATH};${TYPEPATH}/${sd}") + set(CMAKE_IGNORE_PATH "${CMAKE_SYSTEM_IGNORE_PATH};${TYPEPATH}/${sd}") + endforeach(sd ${IGNORE_SUBDIRS}) + endforeach(cfg ${CMAKE_CONFIGURATION_TYPES}) + else (CMAKE_CONFIGURATION_TYPES) + foreach(sd ${IGNORE_SUBDIRS}) + set(CMAKE_SYSTEM_IGNORE_PATH "${CMAKE_SYSTEM_IGNORE_PATH};${PATH_NORMALIZED}/${sd}") + set(CMAKE_IGNORE_PATH "${CMAKE_SYSTEM_IGNORE_PATH};${PATH_NORMALIZED}/${sd}") + endforeach(sd ${IGNORE_SUBDIRS}) + endif (CMAKE_CONFIGURATION_TYPES) +endif(NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr" AND NOT "${CMAKE_INSTALL_PREFIX}" STREQUAL "/usr/local") + +#------------------------------------------------------------------------------ +# Now that we know the install prefix, generate the binary for calculating +# and reporting time deltas +generate_dreport() + + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/BRLCAD_Options.cmake b/misc/CMake/BRLCAD_Options.cmake index b1a74185434..f108beef1a2 100644 --- a/misc/CMake/BRLCAD_Options.cmake +++ b/misc/CMake/BRLCAD_Options.cmake @@ -1,7 +1,7 @@ # B R L C A D _ O P T I O N S . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -133,7 +133,7 @@ endfunction(OPTION_RESOLVE_ALIASES) # Write documentation description for BRL-CAD options function(WRITE_OPTION_DESCRIPTION opt opt_ALIASES opt_DESCRIPTION) - set(ofile "${CMAKE_BINARY_DIR}/OPTIONS") + set(ofile "${CMAKE_BINARY_DIR}/BRLCAD_OPTIONS") file(APPEND "${ofile}" "\n--- ${opt} ---\n") file(APPEND "${ofile}" "${${opt_DESCRIPTION}}") diff --git a/misc/CMake/BRLCAD_Regress_Util.cmake b/misc/CMake/BRLCAD_Regress_Util.cmake old mode 100755 new mode 100644 index ca978cf838f..4aa10e05dca --- a/misc/CMake/BRLCAD_Regress_Util.cmake +++ b/misc/CMake/BRLCAD_Regress_Util.cmake @@ -1,7 +1,7 @@ # B R L C A D _ R E G R E S S _ U T I L . C M A K E # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/BRLCAD_Summary.cmake b/misc/CMake/BRLCAD_Summary.cmake index ffa17c29ff5..5c096f8feb0 100644 --- a/misc/CMake/BRLCAD_Summary.cmake +++ b/misc/CMake/BRLCAD_Summary.cmake @@ -1,7 +1,7 @@ # B R L C A D _ S U M M A R Y . C M A K E # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/BRLCAD_Targets.cmake b/misc/CMake/BRLCAD_Targets.cmake index 88c28d5458e..d1042f421dd 100644 --- a/misc/CMake/BRLCAD_Targets.cmake +++ b/misc/CMake/BRLCAD_Targets.cmake @@ -1,7 +1,7 @@ # B R L C A D _ T A R G E T S . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -121,9 +121,9 @@ function(FILE_LANG sfile outvar) endwhile(NOT "${f_ext}" STREQUAL "") # C++ - if(${srcfile_ext} STREQUAL ".cxx" OR ${srcfile_ext} STREQUAL ".cpp" OR ${srcfile_ext} STREQUAL ".cc") + if(${srcfile_ext} STREQUAL ".cxx" OR ${srcfile_ext} STREQUAL ".cpp" OR ${srcfile_ext} STREQUAL ".cc" OR ${srcfile_ext} STREQUAL ".inl") set(file_language CXX) - endif(${srcfile_ext} STREQUAL ".cxx" OR ${srcfile_ext} STREQUAL ".cpp" OR ${srcfile_ext} STREQUAL ".cc") + endif(${srcfile_ext} STREQUAL ".cxx" OR ${srcfile_ext} STREQUAL ".cpp" OR ${srcfile_ext} STREQUAL ".cc" OR ${srcfile_ext} STREQUAL ".inl") if(${srcfile_ext} STREQUAL ".hxx" OR ${srcfile_ext} STREQUAL ".hpp" OR ${srcfile_ext} STREQUAL ".hh") set(file_language CXX) endif(${srcfile_ext} STREQUAL ".hxx" OR ${srcfile_ext} STREQUAL ".hpp" OR ${srcfile_ext} STREQUAL ".hh") @@ -220,8 +220,9 @@ endfunction(GET_FLAGS_AND_DEFINITIONS) # Determine the language for a target -# For simplicity, always set compile definitions and compile flags on files rather -# than build targets (less logic, simplifies dealing with OBJECT libraries.) +# For simplicity, always set compile definitions and compile flags on +# files rather than build targets (less logic, simplifies dealing with +# OBJECT libraries.) function(SET_FLAGS_AND_DEFINITIONS srcslist) cmake_parse_arguments(S "NO_STRICT_CXX" "TARGET" "CFLAGS;CXXFLAGS;DEFINES" ${ARGN}) @@ -315,8 +316,9 @@ function(BRLCAD_ADDEXEC execname srcslist libslist) # Go all C++ if the settings request it SET_LANG_CXX("${srcslist}") - # Add the executable. If the caller indicates this is a GUI type executable, - # add the correct flag for Visual Studio building (where it matters) + # Add the executable. If the caller indicates this is a GUI type + # executable, add the correct flag for Visual Studio building (where + # it matters) if(E_GUI) add_executable(${execname} WIN32 ${srcslist}) else(E_GUI) @@ -377,8 +379,8 @@ function(BRLCAD_ADDEXEC execname srcslist libslist) endif(E_NO_INSTALL OR E_TEST) - # Set the folder property (used in programs such as Visual Studio to organize - # build targets. + # Set the folder property (used in programs such as Visual Studio to + # organize build targets. if(E_NO_INSTALL AND NOT E_FOLDER) set(SUBFOLDER "/Build Only") endif(E_NO_INSTALL AND NOT E_FOLDER) @@ -397,15 +399,15 @@ function(BRLCAD_ADDEXEC execname srcslist libslist) endfunction(BRLCAD_ADDEXEC execname srcslist libslist) -#----------------------------------------------------------------------------- -# Library function handles both shared and static libs, so one "BRLCAD_ADDLIB" -# statement will cover both automatically +#--------------------------------------------------------------------- +# Library function handles both shared and static libs, so one +# "BRLCAD_ADDLIB" statement will cover both automatically function(BRLCAD_ADDLIB libname srcslist libslist) cmake_parse_arguments(L "SHARED;STATIC;NO_INSTALL;NO_STRICT;NO_STRICT_CXX" "FOLDER" "SHARED_SRCS;STATIC_SRCS" ${ARGN}) - # The naming convention used for variables is the upper case of the library - # name, without the lib prefix. + # The naming convention used for variables is the upper case of the + # library name, without the lib prefix. string(REPLACE "lib" "" LOWERCORE "${libname}") string(TOUPPER ${LOWERCORE} UPPER_CORE) @@ -425,7 +427,8 @@ function(BRLCAD_ADDLIB libname srcslist libslist) # Local copy of srcslist in case manipulation is needed set(lsrcslist ${srcslist}) - # If we're going to have a specified subfolder, prepare the appropriate string: + # If we're going to have a specified subfolder, prepare the + # appropriate string: if(L_FOLDER) set(SUBFOLDER "/${L_FOLDER}") endif(L_FOLDER) @@ -433,6 +436,10 @@ function(BRLCAD_ADDLIB libname srcslist libslist) # If we need it, set up the OBJECT library build if(USE_OBJECT_LIBS) add_library(${libname}-obj OBJECT ${lsrcslist}) + if(${libname} MATCHES "^lib*") + set_target_properties(${libname}-obj PROPERTIES PREFIX "") + endif(${libname} MATCHES "^lib*") + set(lsrcslist $) set_target_properties(${libname}-obj PROPERTIES FOLDER "BRL-CAD OBJECT Libraries${SUBFOLDER}") @@ -444,6 +451,20 @@ function(BRLCAD_ADDLIB libname srcslist libslist) set_property(TARGET ${libname}-obj APPEND PROPERTY COMPILE_DEFINITIONS "${UPPER_CORE}_DLL_EXPORTS") endif(HIDE_INTERNAL_SYMBOLS) + # If the library depends on other targets in this build, not just system + # libraries, make sure the object targets depends them as well. In + # principle this isn't always required - object compilation may be + # independent of the dependencies needed at link time - but if compilation + # DOES depends on those targets having first performed some action (like + # staging a header in an expected location) NOT setting this dependency + # explicitly will eventually cause build failures. + # + # Without setting the OBJECT dependencies, success in the above case would + # depend on whether or not the high level build ordering happened to run + # the required targets before performing this step. That failure mode is + # semi-random and intermittent (top level build ordering without explicit + # dependencies varies depending on -j flag values) making it hard to debug. + # Ask me how I know. if(NOT "${libslist}" STREQUAL "" AND NOT "${libslist}" STREQUAL "NONE") foreach(ll ${libslist}) if (TARGET ${ll}) @@ -458,6 +479,9 @@ function(BRLCAD_ADDLIB libname srcslist libslist) if(L_SHARED OR (BUILD_SHARED_LIBS AND NOT L_STATIC)) add_library(${libname} SHARED ${lsrcslist} ${L_SHARED_SRCS}) + if(${libname} MATCHES "^lib*") + set_target_properties(${libname} PROPERTIES PREFIX "") + endif(${libname} MATCHES "^lib*") # Set the standard build definitions for all BRL-CAD targets target_compile_definitions(${libname} PRIVATE BRLCADBUILD HAVE_CONFIG_H) @@ -476,6 +500,9 @@ function(BRLCAD_ADDLIB libname srcslist libslist) set(libstatic ${libname}-static) endif(L_STATIC) add_library(${libstatic} STATIC ${lsrcslist} ${L_STATIC_SRCS}) + if(${libstatic} MATCHES "^lib*") + set_target_properties(${libstatic} PROPERTIES PREFIX "") + endif(${libstatic} MATCHES "^lib*") # Set the standard build definitions for all BRL-CAD targets target_compile_definitions(${libstatic} PRIVATE BRLCADBUILD HAVE_CONFIG_H) @@ -493,7 +520,8 @@ function(BRLCAD_ADDLIB libname srcslist libslist) endif(TARGET ${pt} AND ${pt} MATCHES "^lib*") endforeach(pt ${possible_targets}) - # Now that we have both the sources lists and the build targets, assign flags + # Now that we have both the sources lists and the build targets, + # assign flags SET_FLAGS_AND_DEFINITIONS("${srcslist};${L_SHARED_SRCS};${L_STATIC_SRCS}" TARGET ${libname} CFLAGS "${L_C_FLAGS}" @@ -503,6 +531,12 @@ function(BRLCAD_ADDLIB libname srcslist libslist) # Extra static lib specific work if(L_STATIC OR (BUILD_STATIC_LIBS AND NOT L_SHARED)) + # We need to make sure the target depends on any targets in the libslist + foreach(ll ${libslist}) + if (TARGET ${ll}) + add_dependencies(${libstatic} ${ll}) + endif (TARGET ${ll}) + endforeach(ll ${libslist}) set_target_properties(${libstatic} PROPERTIES FOLDER "BRL-CAD Static Libraries${SUBFOLDER}") VALIDATE_STYLE("${libstatic}" "${srcslist};${L_STATIC_SRCS}") if(NOT L_NO_INSTALL) @@ -531,36 +565,48 @@ function(BRLCAD_ADDLIB libname srcslist libslist) endfunction(BRLCAD_ADDLIB libname srcslist libslist) -#----------------------------------------------------------------------------- -# For situations when a local 3rd party library (say, zlib) has been chosen in -# preference to a system version of that library, it is important to ensure -# that the local header(s) get included before the system headers. Normally -# this is handled by explicitly specifying the local include paths (which, -# being explicitly specified and non-standard, are checked prior to default -# system locations) but there are some situations (macports being a classic -# example) where *other* "non-standard" installed copies of libraries may -# exist and be found if those directories are included ahead of the desired +#--------------------------------------------------------------------- +# For situations when a local 3rd party library (say, zlib) has been +# chosen in preference to a system version of that library, it is +# important to ensure that the local header(s) get included before the +# system headers. Normally this is handled by explicitly specifying +# the local include paths (which, being explicitly specified and +# non-standard, are checked prior to default system locations) but +# there are some situations (macports being a classic example) where +# *other* "non-standard" installed copies of libraries may exist and +# be found if those directories are included ahead of the desired # local copy. An observed case: # # 1. macports is installed on OSX -# 2. X11 is found in macports, X11 directories are set to /usr/macports based paths -# 3. These paths are mixed into the general include path lists for some BRL-CAD libs. -# 4. Because these paths are a) non-standard and b) contain zlib.h they result -# in "system" versions of zlib present in macports being found first even when -# the local zlib is enabled, if the macports paths happen to appear in the -# include directory list before the local zlib include paths. # -# To mitigate this problem, BRL-CAD library include directories are sorted -# according to the following hierarchy (using gcc's left-to-right search -# order as a basis: http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html): +# 2. X11 is found in macports, X11 directories are set to +# /usr/macports based paths +# +# 3. These paths are mixed into the general include path lists for +# some BRL-CAD libs. +# +# 4. Because these paths are a) non-standard and b) contain zlib.h +# they result in "system" versions of zlib present in macports +# being found first even when the local zlib is enabled, if the +# macports paths happen to appear in the include directory list +# before the local zlib include paths. +# +# To mitigate this problem, BRL-CAD library include directories are +# sorted according to the following hierarchy (using gcc's +# left-to-right search order as a basis: +# http://gcc.gnu.org/onlinedocs/cpp/Search-Path.html): +# +# 1. If CMAKE_CURRENT_BINARY_DIR or CMAKE_CURRENT_SOURCE_DIR are in +# the include list, they come first. +# +# 2. If BRLCAD_BINARY_DIR/include or BRLCAD_SOURCE_DIR/include are +# present, they come second. +# +# 3. For remaining paths, if the "root" path matches the +# BRLCAD_SOURCE_DIR or BRLCAD_BINARY_DIR paths, they are appended. # -# 1. If CMAKE_CURRENT_BINARY_DIR or CMAKE_CURRENT_SOURCE_DIR are in the -# include list, they come first. -# 2. If BRLCAD_BINARY_DIR/include or BRLCAD_SOURCE_DIR/include are present, -# they come second. -# 3. For remaining paths, if the "root" path matches the BRLCAD_SOURCE_DIR -# or BRLCAD_BINARY_DIR paths, they are appended. # 4. Any remaining paths are appended. +# function(BRLCAD_SORT_INCLUDE_DIRS DIR_LIST) if(${DIR_LIST}) set(ORDERED_ELEMENTS "${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" "${BRLCAD_BINARY_DIR}/include" "${BRLCAD_SOURCE_DIR}/include") @@ -618,19 +664,21 @@ function(BRLCAD_SORT_INCLUDE_DIRS DIR_LIST) endif(${DIR_LIST}) endfunction(BRLCAD_SORT_INCLUDE_DIRS) -#----------------------------------------------------------------------------- -# Wrapper to properly include directories for a BRL-CAD build. Handles the -# SYSTEM option to the include_directories command, as well as calling the -# sort function. +#--------------------------------------------------------------------- +# Wrapper to properly include directories for a BRL-CAD build. +# Handles the SYSTEM option to the include_directories command, as +# well as calling the sort function. function(BRLCAD_INCLUDE_DIRS DIR_LIST) - # TODO - We don't want parent directories values augmenting DIR_LIST for - # subsequent targets - if we're calling this, we're taking full control of - # all inclusions for all targets in this and subsequent directories. We - # should probably use the target level INCLUDE_DIRECTORIES property and - # stop setting include_directories on entire directories all together - # for maximal precision and minimum surprises... - #set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "") + # TODO - We don't want parent directories values augmenting DIR_LIST + # for subsequent targets - if we're calling this, we're taking full + # control of all inclusions for all targets in this and subsequent + # directories. We should probably use the target level + # INCLUDE_DIRECTORIES property and stop setting include_directories + # on entire directories all together for maximal precision and + # minimum surprises... + # + # set_property(DIRECTORY PROPERTY INCLUDE_DIRECTORIES "") set(INCLUDE_DIRS ${${DIR_LIST}}) if(INCLUDE_DIRS) @@ -646,15 +694,6 @@ function(BRLCAD_INCLUDE_DIRS DIR_LIST) IS_SUBPATH("${BRLCAD_BINARY_DIR}" "${abs_inc_dir}" IS_LOCAL) endif (NOT IS_LOCAL) if("${inc_dir}" MATCHES "other" OR NOT IS_LOCAL) - # Unfortunately, a bug in the CMake SYSTEM option to - # include_directories requires that these variables - # be explicitly set on OSX until we can require CMake - # version 3.6 - see - # https://public.kitware.com/Bug/view.php?id=15953 - if(APPLE) - set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ") - set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ") - endif(APPLE) if("${inc_dir}" MATCHES "other") include_directories(SYSTEM ${inc_dir}) else("${inc_dir}" MATCHES "other") @@ -667,11 +706,12 @@ function(BRLCAD_INCLUDE_DIRS DIR_LIST) endfunction(BRLCAD_INCLUDE_DIRS DIR_LIST) -#----------------------------------------------------------------------------- -# Wrapper to handle include directories specific to libraries. Removes -# duplicates and makes sure the _INCLUDE_DIRS list is in the cache -# immediately, so it can be used by other libraries. These lists are not -# intended as toplevel user settable options so mark as advanced. +#--------------------------------------------------------------------- +# Wrapper to handle include directories specific to libraries. +# Removes duplicates and makes sure the _INCLUDE_DIRS list is in +# the cache immediately, so it can be used by other libraries. These +# lists are not intended as toplevel user settable options so mark as +# advanced. function(BRLCAD_LIB_INCLUDE_DIRS libname DIR_LIST LOCAL_DIR_LIST) string(TOUPPER ${libname} LIB_UPPER) @@ -684,27 +724,29 @@ function(BRLCAD_LIB_INCLUDE_DIRS libname DIR_LIST LOCAL_DIR_LIST) endfunction(BRLCAD_LIB_INCLUDE_DIRS) -#----------------------------------------------------------------------------- -# Files needed by BRL-CAD need to be both installed and copied into the -# correct locations in the build directories to allow executables to run -# at build time. Ideally, we would like any error messages returned when -# running from the build directory to direct back to the copies of files in -# the source tree, since those are the ones that should be edited. -# On platforms that support symlinks, this is possible - build directory -# "copies" of files are symlinks to the source tree version. On platforms -# without symlink support, we are forced to copy the files into place in -# the build directories. In both cases we have a build target that is -# triggered if source files are edited in order to allow the build system -# to take further actions (for example, re-generating tclIndex and pkgIndex.tcl -# files when the source .tcl files change). +#--------------------------------------------------------------------- +# Files needed by BRL-CAD need to be both installed and copied into +# the correct locations in the build directories to allow executables +# to run at build time. Ideally, we would like any error messages +# returned when running from the build directory to direct back to the +# copies of files in the source tree, since those are the ones that +# should be edited. On platforms that support symlinks, this is +# possible - build directory "copies" of files are symlinks to the +# source tree version. On platforms without symlink support, we are +# forced to copy the files into place in the build directories. In +# both cases we have a build target that is triggered if source files +# are edited in order to allow the build system to take further +# actions (for example, re-generating tclIndex and pkgIndex.tcl files +# when the source .tcl files change). # -# Because BRLCAD_MANAGE_FILES defines custom commands and specifies the files it is -# to copy/symlink as dependencies, there is a potential for file names to -# conflict with build target names. (This has actually been observed with -# MSVC - our file INSTALL in the toplevel source directory conflicts with the -# MSVC target named INSTALL.) To avoid conflicts and make the dependencies -# of the custom commands robust we supply full file paths as dependencies to -# the file copying custom commands. +# Because BRLCAD_MANAGE_FILES defines custom commands and specifies +# the files it is to copy/symlink as dependencies, there is a +# potential for file names to conflict with build target names. (This +# has actually been observed with MSVC - our file INSTALL in the +# toplevel source directory conflicts with the MSVC target named +# INSTALL.) To avoid conflicts and make the dependencies of the custom +# commands robust we supply full file paths as dependencies to the +# file copying custom commands. function(BRLCAD_MANAGE_FILES inputdata targetdir) @@ -718,14 +760,14 @@ function(BRLCAD_MANAGE_FILES inputdata targetdir) CMAKE_PARSE_ARGUMENTS(${VAR_PREFIX} "EXEC" "FOLDER" "" ${ARGN}) endif(${ARGC} GREATER 2) - # Handle both a list of one or more files and variable holding a list of files - - # find out what we've got. + # Handle both a list of one or more files and variable holding a + # list of files - find out what we've got. NORMALIZE_FILE_LIST("${inputdata}" RLIST datalist FPLIST fullpath_datalist TARGET targetname) # Identify the source files for CMake CMAKEFILES(${datalist}) - #----------------------------------------------------------------------------- + #------------------------------------------------------------------- # Some of the more advanced build system features in BRL-CAD's CMake # build need to know whether symlink support is present on the # current OS - go ahead and do this test up front, caching the @@ -747,13 +789,14 @@ function(BRLCAD_MANAGE_FILES inputdata targetdir) endif(EXISTS "${CMAKE_BINARY_DIR}/CMakeTmp/link_test_dest") endif(NOT DEFINED HAVE_SYMLINK) - # Now that the input data and target names are in order, define the custom - # commands needed for build directory data copying on this platform (per - # symlink test results.) + # Now that the input data and target names are in order, define the + # custom commands needed for build directory data copying on this + # platform (per symlink test results.) if(HAVE_SYMLINK) - # Make sure the target directory exists (symlinks need the target directory already in place) + # Make sure the target directory exists (symlinks need the target + # directory already in place) if(NOT CMAKE_CONFIGURATION_TYPES) execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/${targetdir}") else(NOT CMAKE_CONFIGURATION_TYPES) @@ -763,10 +806,11 @@ function(BRLCAD_MANAGE_FILES inputdata targetdir) endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) endif(NOT CMAKE_CONFIGURATION_TYPES) - # Using symlinks - in this case, the custom command doesn't actually have to - # do the work every time the source file changes - once established, the symlink - # will behave correctly. That being the case, we just go ahead and establish the - # symlinks in the configure stage. + # Using symlinks - in this case, the custom command doesn't + # actually have to do the work every time the source file changes + # - once established, the symlink will behave correctly. That + # being the case, we just go ahead and establish the symlinks in + # the configure stage. foreach(filename ${fullpath_datalist}) get_filename_component(ITEM_NAME ${filename} NAME) if(NOT CMAKE_CONFIGURATION_TYPES) @@ -788,9 +832,10 @@ function(BRLCAD_MANAGE_FILES inputdata targetdir) endif (NOT EXISTS ${filename}) endforeach (filename ${listing}) - # The custom command is still necessary - since it depends on the original source files, - # this will be the trigger that tells other commands depending on this data that - # they need to re-run one one of the source files is changed. + # The custom command is still necessary - since it depends on the + # original source files, this will be the trigger that tells other + # commands depending on this data that they need to re-run when + # one of the source files is changed. add_custom_command( OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${targetname}.sentinel" COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_CURRENT_BINARY_DIR}/${targetname}.sentinel" @@ -822,13 +867,15 @@ function(BRLCAD_MANAGE_FILES inputdata targetdir) ) endif(HAVE_SYMLINK) - # Define the target and add it to this directories list of data targets + # Define the target and add it to this directories list of data + # targets add_custom_target(${targetname}_cp ALL DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/${targetname}.sentinel") set_target_properties(${targetname}_cp PROPERTIES FOLDER "BRL-CAD File Copying") BRLCAD_ADD_DIR_LIST_ENTRY(DATA_TARGETS "${CMAKE_CURRENT_BINARY_DIR}" ${targetname}_cp) - # Because the target name for managed files is likely cryptic, we add a dependency to the managed_files target - # so this poriton of the logic can be referenced + # Because the target name for managed files is likely cryptic, we + # add a dependency to the managed_files target so this poriton of + # the logic can be referenced add_dependencies(managed_files ${targetname}_cp) # Set the FOLDER property. If the target has supplied a folder, use @@ -839,8 +886,9 @@ function(BRLCAD_MANAGE_FILES inputdata targetdir) set_target_properties(${targetname}_cp PROPERTIES FOLDER "BRL-CAD File Setup/${${VAR_PREFIX}_FOLDER}") endif("${${VAR_PREFIX}_FOLDER}" STREQUAL "") - # Add outputs to the distclean rules - this is consistent regardless of what type the output - # file is, symlink or copy. Just need to handle the single and multiconfig cases. + # Add outputs to the distclean rules - this is consistent regardless + # of what type the output file is, symlink or copy. Just need to + # handle the single and multiconfig cases. foreach(filename ${fullpath_datalist}) get_filename_component(ITEM_NAME "${filename}" NAME) if(NOT CMAKE_CONFIGURATION_TYPES) @@ -853,8 +901,9 @@ function(BRLCAD_MANAGE_FILES inputdata targetdir) endif(NOT CMAKE_CONFIGURATION_TYPES) endforeach(filename ${fullpath_datalist}) - # The installation rule relates only to the original source directory copy, and so doesn't - # need to explicitly concern itself with configurations. + # The installation rule relates only to the original source + # directory copy, and so doesn't need to explicitly concern itself + # with configurations. if(${VAR_PREFIX}_EXEC) install(PROGRAMS ${datalist} DESTINATION ${targetdir}) else(${VAR_PREFIX}_EXEC) @@ -864,8 +913,8 @@ function(BRLCAD_MANAGE_FILES inputdata targetdir) endfunction(BRLCAD_MANAGE_FILES) #----------------------------------------------------------------------------- -# Specific uses of the BRLCAD_MANAGED_FILES functionality - these cover most -# of the common cases in BRL-CAD. +# Specific uses of the BRLCAD_MANAGED_FILES functionality - these +# cover most of the common cases in BRL-CAD. function(BRLCAD_ADDDATA datalist targetdir) BRLCAD_MANAGE_FILES(${datalist} ${DATA_DIR}/${targetdir}) @@ -884,52 +933,57 @@ endfunction(ADD_MAN_PAGES) #----------------------------------------------------------------------------- -# The default operational mode of Regression tests is to be executed by a -# parent CMake script, which captures the I/O from the test and stores it in an -# individual log file named after the test. By default, a custom command and -# CTest add_test command are set up to run a configured script. If TEST_SCRIPT -# is provided specifying a particular script file that is used, otherwise the -# convention of ${testname}.cmake.in in the current source directory is assumed -# to specify the input test script. +# The default operational mode of Regression tests is to be executed +# by a parent CMake script, which captures the I/O from the test and +# stores it in an individual log file named after the test. By +# default, a custom command and CTest add_test command are set up to +# run a configured script. If TEST_SCRIPT is provided specifying a +# particular script file that is used, otherwise the convention of +# ${testname}.cmake.in in the current source directory is assumed to +# specify the input test script. # # Particularly when configuration dependent builds are in play, a test -# executable's location needs special handling to ensure the scripts run the -# correct version of a program. The standard mechanism is to specify the CMake -# target name of the executable by supplying it via the EXEC option and then -# pass the output of $ to the running CMake -# script. (Note that the script must in turn post-process this value to unquote -# it in case of special characters in pathnames.) +# executable's location needs special handling to ensure the scripts +# run the correct version of a program. The standard mechanism is to +# specify the CMake target name of the executable by supplying it via +# the EXEC option and then pass the output of +# $ to the running CMake +# script. (Note that the script must in turn post-process this value +# to unquote it in case of special characters in pathnames.) # -# To allow for more customized test execution, the option TEST_DEFINED may be -# passed to the function to instruct it to skip all setup for add_test and -# custom command definitions. It is the callers responsibility to define an -# appropriately named test with add_test - BRLCAD_REGRESSION_TEST in this mode -# will then perform only the specific build target definition and subsequent -# steps for wiring the test into the higher level commands. +# To allow for more customized test execution, the option TEST_DEFINED +# may be passed to the function to instruct it to skip all setup for +# add_test and custom command definitions. It is the callers +# responsibility to define an appropriately named test with add_test - +# BRLCAD_REGRESSION_TEST in this mode will then perform only the +# specific build target definition and subsequent steps for wiring the +# test into the higher level commands. # # Standard actions for all regression targets: # -# 1. A custom build target with the pattern regress-${testname} is defined -# to allow for individual execution of the regression test with -# "make ${testname}" +# 1. A custom build target with the pattern regress-${testname} is +# defined to allow for individual execution of the regression test +# with "make ${testname}" # -# 2. A label is added identifying the test as a regression test so the top -# level commands "make check" and "make regress" know this particular -# tests is one of the tests they are supposed to execute. +# 2. A label is added identifying the test as a regression test so +# the top level commands "make check" and "make regress" know this +# particular tests is one of the tests they are supposed to +# execute. # -# 3. Any dependencies in ${depends_list} are added as build requirements to -# the regress and check targets. This ensures that (unlike "make test" -# and CTest itself) when those targets are built the dependencies of the -# tests are built first. (A default CTest run prior to building will -# result in all tests failing.) +# 3. Any dependencies in ${depends_list} are added as build +# requirements to the regress and check targets. This ensures +# that (unlike "make test" and CTest itself) when those targets +# are built the dependencies of the tests are built first. (A +# default CTest run prior to building will result in all tests +# failing.) # # 4. If the keyword "STAND_ALONE" is passed in, a ${testname} target -# is defined but no other connections are made between that target and the -# agglomeration targets. +# is defined but no other connections are made between that target +# and the agglomeration targets. # -# 5. If a TIMEOUT argument is passed, a specific timeout tiem is set on the -# test. Otherwise, a default is assigned to ensure no test runs -# indefinitely. +# 5. If a TIMEOUT argument is passed, a specific timeout tiem is set +# on the test. Otherwise, a default is assigned to ensure no test +# runs indefinitely. function(BRLCAD_REGRESSION_TEST testname depends_list) @@ -943,6 +997,7 @@ function(BRLCAD_REGRESSION_TEST testname depends_list) else (${testname}_TEST_SCRIPT) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/${testname}.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${testname}.cmake" @ONLY) endif (${testname}_TEST_SCRIPT) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/${testname}.cmake") if (TARGET ${${testname}_EXEC}) add_test(NAME ${testname} COMMAND "${CMAKE_COMMAND}" -DEXEC=$ -P "${CMAKE_CURRENT_BINARY_DIR}/${testname}.cmake") @@ -969,20 +1024,21 @@ function(BRLCAD_REGRESSION_TEST testname depends_list) add_dependencies(${testname} ${depends_list}) endif (depends_list) - # Make sure we at least get this into the regression test folder - local - # subdirectories may override this if they have more specific locations - # they want to use. + # Make sure we at least get this into the regression test folder - + # local subdirectories may override this if they have more specific + # locations they want to use. if (${testname}_STAND_ALONE) set_target_properties(${testname} PROPERTIES FOLDER "BRL-CAD Regression Tests") else (${testname}_STAND_ALONE) set_target_properties(${testname} PROPERTIES FOLDER "BRL-CAD Regression Tests/regress") endif (${testname}_STAND_ALONE) - # In Visual Studio, none of the regress build targets are added to the default build. + # In Visual Studio, none of the regress build targets are added to + # the default build. set_target_properties(${testname} PROPERTIES EXCLUDE_FROM_DEFAULT_BUILD 1) - # Group any test not excluded by the STAND_ALONE flag with the other regression tests by - # assigning a standard label + # Group any test not excluded by the STAND_ALONE flag with the other + # regression tests by assigning a standard label if (NOT ${testname}_STAND_ALONE) set_tests_properties(${testname} PROPERTIES LABELS "Regression") else (NOT ${testname}_STAND_ALONE) diff --git a/misc/CMake/BRLCAD_Test_Wrappers.cmake b/misc/CMake/BRLCAD_Test_Wrappers.cmake new file mode 100644 index 00000000000..28ac69bbaf7 --- /dev/null +++ b/misc/CMake/BRLCAD_Test_Wrappers.cmake @@ -0,0 +1,249 @@ +# B R L C A D _ T E S T _ W R A P P E R S . C M A K E +# +# BRL-CAD +# +# Copyright (c) 2020-2021 United States Government as represented by +# the U.S. Army Research Laboratory. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +### +#--------------------------------------------------------------------- +# "make check" runs all of the tests (unit, benchmark, and regression) that are expected to work. +# "make unit" runs all the unit tests. + +# To build the required targets for testing in the style of GNU Autotools "make +# check") we define "unit" and "check" targets per +# http://www.cmake.org/Wiki/CMakeEmulateMakeCheck and have add_test +# automatically assemble its targets into the unit dependency list. + +cmake_host_system_information(RESULT N QUERY NUMBER_OF_LOGICAL_CORES) +if(NOT N EQUAL 0) + 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 core count + set(JFLAG) +endif(NOT N EQUAL 0) + +if(CMAKE_CONFIGURATION_TYPES) + set(CONFIG $) +else(CMAKE_CONFIGURATION_TYPES) + if ("${CONFIG}" STREQUAL "") + set(CONFIG "\"\"") + endif ("${CONFIG}" STREQUAL "") +endif(CMAKE_CONFIGURATION_TYPES) + +if (NOT TARGET check) + add_custom_target(check + COMMAND ${CMAKE_COMMAND} -E echo "\"**********************************************************************\"" + COMMAND ${CMAKE_COMMAND} -E echo "NOTE: The \\\"check\\\" a.k.a. \\\"BRL-CAD Validation Testing\\\" target runs" + COMMAND ${CMAKE_COMMAND} -E echo " BRL-CAD\\'s unit, system, integration, benchmark \\(performance\\), and" + COMMAND ${CMAKE_COMMAND} -E echo " regression tests. To consider a build viable for production use," + COMMAND ${CMAKE_COMMAND} -E echo " these tests must pass. Dependencies are compiled automatically." + COMMAND ${CMAKE_COMMAND} -E echo "\"**********************************************************************\"" + COMMAND ${CMAKE_CTEST_COMMAND} -C ${CONFIG} -LE \"Regression|STAND_ALONE\" -E \"^regress-|NOTE|benchmark|slow-\" --output-on-failure ${JFLAG} + COMMAND ${CMAKE_CTEST_COMMAND} -C ${CONFIG} -R \"benchmark\" --output-on-failure ${JFLAG} + COMMAND ${CMAKE_CTEST_COMMAND} -C ${CONFIG} -L \"Regression\" --output-on-failure ${JFLAG} + ) + set_target_properties(check PROPERTIES FOLDER "BRL-CAD Validation Testing") +endif (NOT TARGET check) + +if (NOT TARGET unit) + add_custom_target(unit + COMMAND ${CMAKE_COMMAND} -E echo "\"**********************************************************************\"" + COMMAND ${CMAKE_COMMAND} -E echo "NOTE: The \\\"unit\\\" a.k.a. \\\"BRL-CAD Unit Testing\\\" target runs the" + COMMAND ${CMAKE_COMMAND} -E echo " subset of BRL-CAD\\'s API unit tests that are expected to work \\(i.e.," + 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|benchmark|slow-\" ${JFLAG} + ) + set_target_properties(unit PROPERTIES FOLDER "BRL-CAD Validation Testing") +endif (NOT TARGET unit) + +# we wrap the CMake add_test() function in order to automatically set up test +# dependencies for the 'unit' and 'check' test targets. +# +# this function extravagantly tries to work around a bug in CMake where we +# cannot pass an empty string through this wrapper to add_test(). passed as a +# list (e.g., via ARGN, ARGV, or manually composed), the empty string is +# skipped(!). passed as a string, it is all treated as command name with no +# arguments. +# +# manual workaround used here involves invoking _add_test() with all args +# individually recreated/specified (i.e., not as a list) as this preserves +# empty strings. this approach means we cannot generalize and only support a +# limited variety of empty string arguments, but we do test and halt if someone +# unknowingly tries. +function(BRLCAD_ADD_TEST NAME test_name COMMAND test_prog) + + # TODO - once we can require CMake 3.18, replace the empty string workaround + # below with this cmake_language based version. See + # https://gitlab.kitware.com/cmake/cmake/-/issues/21414 + + # cmake_parse_arguments(PARSE_ARGV 3 ARG "" "" "") + # foreach(_av IN LISTS ARG_UNPARSED_ARGUMENTS) + # string(APPEND test_args " [==[${_av}]==]") + # endforeach() + # cmake_language(EVAL CODE "add_test(NAME ${test_name} COMMAND ${test_args})") + + + # find any occurrences of empty strings + set(idx 0) + set(matches) + foreach (ARG IN LISTS ARGV) + # need 'x' to avoid older cmake seeing "COMMAND" "STREQUAL" "" + if ("x${ARG}" STREQUAL "x") + list(APPEND matches ${idx}) + endif ("x${ARG}" STREQUAL "x") + math(EXPR idx "${idx} + 1") + endforeach() + + # make sure we don't exceed current support + list(LENGTH matches cnt) + if ("${cnt}" GREATER 1) + message(FATAL_ERROR "ERROR: encountered ${cnt} > 1 empty string being passed to add_test(${test_name}). Expand support in the top-level CMakeLists.txt file (grep add_test) or pass fewer empty strings.") + endif ("${cnt}" GREATER 1) + + # if there are empty strings, we need to manually recreate their calling + if ("${cnt}" GREATER 0) + + list(GET matches 0 empty) + if ("${empty}" EQUAL 4) + foreach (i 1) + if (ARGN) + list(REMOVE_AT ARGN 0) + endif (ARGN) + endforeach () + add_test(NAME ${test_name} COMMAND ${test_prog} "" ${ARGN}) + elseif ("${empty}" EQUAL 5) + foreach (i 1 2) + if (ARGN) + list(REMOVE_AT ARGN 0) + endif (ARGN) + endforeach () + add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} "" ${ARGN}) + elseif ("${empty}" EQUAL 6) + foreach (i 1 2 3) + if (ARGN) + list(REMOVE_AT ARGN 0) + endif (ARGN) + endforeach () + add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} "" ${ARGN}) + elseif ("${empty}" EQUAL 7) + foreach (i 1 2 3 4) + if (ARGN) + list(REMOVE_AT ARGN 0) + endif (ARGN) + endforeach () + add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} "" ${ARGN}) + elseif ("${empty}" EQUAL 8) + foreach (i 1 2 3 4 5) + if (ARGN) + list(REMOVE_AT ARGN 0) + endif (ARGN) + endforeach () + add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} ${ARGV7} "" ${ARGN}) + elseif ("${empty}" EQUAL 9) + foreach (i 1 2 3 4 5 6) + if (ARGN) + list(REMOVE_AT ARGN 0) + endif (ARGN) + endforeach () + add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} ${ARGV7} ${ARGV8} "" ${ARGN}) + elseif ("${empty}" EQUAL 10) + foreach (i 1 2 3 4 5 6 7) + if (ARGN) + list(REMOVE_AT ARGN 0) + endif (ARGN) + endforeach () + add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} ${ARGV7} ${ARGV8} ${ARGV9} "" ${ARGN}) + elseif ("${empty}" EQUAL 11) + foreach (i 1 2 3 4 5 6 7 8) + if (ARGN) + list(REMOVE_AT ARGN 0) + endif (ARGN) + endforeach () + add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGV4} ${ARGV5} ${ARGV6} ${ARGV7} ${ARGV8} ${ARGV9} ${ARGV10} "" ${ARGN}) + + + # ADD_EMPTY_HERE: insert support for additional argv positions + # as extra elseif tests here using the preceding pattern. be + # sure to update the index in the following else clause fatal + # error message too. + + else ("${empty}" EQUAL 4) + message(FATAL_ERROR "ERROR: encountered an empty string passed to add_test(${test_name}) as ARGV${empty} > ARGV11. Expand support in the top-level CMakeLists.txt file (grep ADD_EMPTY_HERE).") + endif ("${empty}" EQUAL 4) + + else ("${cnt}" GREATER 0) + # no empty strings, no worries + add_test(NAME ${test_name} COMMAND ${test_prog} ${ARGN}) + endif ("${cnt}" GREATER 0) + + + # There are a variety of criteria that disqualify test_prog as a + # dependency - check and return if we hit any of them. + if (NOT TARGET ${test_prog}) + return() + endif () + if ("${test_name}" MATCHES ^regress-) + return() + endif () + if ("${test_prog}" MATCHES ^regress-) + return() + endif () + if ("${test_name}" MATCHES ^slow-) + return() + endif () + if ("${test_name}" STREQUAL "benchmark") + return() + endif () + if ("${test_name}" MATCHES ^NOTE:) + return() + endif () + + # add program needed for test to unit and check target dependencies + add_dependencies(unit ${test_prog}) + add_dependencies(check ${test_prog}) + +endfunction(BRLCAD_ADD_TEST NAME test_name COMMAND test_prog) + + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/BRLCAD_User_Options.cmake b/misc/CMake/BRLCAD_User_Options.cmake new file mode 100644 index 00000000000..fe76c33720c --- /dev/null +++ b/misc/CMake/BRLCAD_User_Options.cmake @@ -0,0 +1,537 @@ +# B R L C A D _ U S E R _ O P T I O N S . C M A K E +# BRL-CAD +# +# Copyright (c) 2020-2021 United States Government as represented by +# the U.S. Army Research Laboratory. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +### +# Now we define the various options for BRL-CAD - ways to enable and disable +# features, select which parts of the system to build, etc. As much as +# possible, sane default options are either selected or detected. Because +# documentation is autogenerated for BRL-CAD options, be sure to initialize the +# file. +set(CONFIG_OPT_STRING "CONFIGURATION OPTIONS\n---------------------\n") +file(WRITE "${CMAKE_BINARY_DIR}/BRLCAD_OPTIONS" "${CONFIG_OPT_STRING}") + + +# Build shared libs by default. Mark this as advanced - turning off ALL shared +# library building is unlikely to result in a working build and is not a +# typical configuration. Note that turning this option off will not disable +# libraries specifically added as SHARED. +option(BUILD_SHARED_LIBS "Build shared libraries" ON) +mark_as_advanced(BUILD_SHARED_LIBS) + +# Build static libs by default unless we're debugging. Note: this option will +# not disable libraries specifically added as STATIC even when OFF. For +# multi-configuration options the build type determination is made at build +# time, so just default to "ON". +cmake_dependent_option(BUILD_STATIC_LIBS "Build static libraries" ON "CMAKE_CONFIGURATION_TYPES OR NOT \"${CMAKE_BUILD_TYPE}\" STREQUAL Debug" OFF) + +# Turn off the brlcad.dll build. +# It's an expert's setting at the moment. +option(BRLCAD_ENABLE_BRLCAD_LIBRARY "Build the brlcad.dll" OFF) +mark_as_advanced(BRLCAD_ENABLE_BRLCAD_LIBRARY) + +# Global third party controls - these options enable and disable ALL local +# copies of libraries in src/other. Forcing all local libraries off is not +# usually recommended unless attempting to build packages for a distribution. +# If both of these options are on the enabling of local packages is the +# "senior" option and will force the system libs option to off. +set(BRLCAD_BUNDLED_LIBS_DESCRIPTION " +Enables compilation of all 3rd party sources that are provided within a BRL-CAD +source distribution. If used this option sets all other 3rd party library +build flags to ON by default. However, that setting can be overridden by +manually setting individual variables. Default is \"AUTO\" - 3rd party sources +are compiled only if they are not detected as being available and functioning +as expected. +") + +if(MSVC) + set(BRLCAD_BUNDLED_LIBS_DEFAULT "BUNDLED") +else(MSVC) + set(BRLCAD_BUNDLED_LIBS_DEFAULT "AUTO") +endif(MSVC) +BRLCAD_OPTION(BRLCAD_BUNDLED_LIBS ${BRLCAD_BUNDLED_LIBS_DEFAULT} + TYPE ABS + ALIASES ENABLE_ALL + DESCRIPTION BRLCAD_BUNDLED_LIBS_DESCRIPTION) +if(NOT BRLCAD_BUNDLED_LIBS MATCHES "AUTO" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "BUNDLED" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "SYSTEM") + message(WARNING "Unknown value BRLCAD_BUNDLED_LIBS supplied for BRLCAD_BUNDLED_LIBS (${BRLCAD_BUNDLED_LIBS}) - defaulting to AUTO") + message(WARNING "Valid options are AUTO, BUNDLED and SYSTEM") + set(BRLCAD_BUNDLED_LIBS "AUTO" CACHE STRING "Build bundled libraries." FORCE) +endif(NOT BRLCAD_BUNDLED_LIBS MATCHES "AUTO" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "BUNDLED" AND NOT BRLCAD_BUNDLED_LIBS MATCHES "SYSTEM") + +# Single flag for disabling GUI instead of 5. +option(BRLCAD_ENABLE_MINIMAL "Skip GUI support and docs. Faster builds." OFF) +mark_as_advanced(BRLCAD_ENABLE_MINIMAL) + +if(BRLCAD_ENABLE_MINIMAL) + set(BRLCAD_ENABLE_OPENGL "OFF") + set(BRLCAD_ENABLE_X11 "OFF") + set(BRLCAD_ENABLE_TK "OFF") + set(BRLCAD_ENABLE_QT "OFF") + set(BRLCAD_ENABLE_AQUA "OFF") + set(BRLCAD_EXTRADOCS "OFF") +endif(BRLCAD_ENABLE_MINIMAL) + +# Enable Aqua widgets on Mac OSX. This impacts Tcl/Tk building and OpenGL +# building. Not currently working - needs work in at least Tk CMake logic +# (probably more), and the display manager/framebuffer codes are known to +# depend on either GLX or WGL specifically in their current forms. +option(BRLCAD_ENABLE_AQUA "Use Aqua instead of X11 whenever possible on OSX." OFF) +mark_as_advanced(BRLCAD_ENABLE_AQUA) + +# Install example BRL-CAD Geometry Files +option(BRLCAD_INSTALL_EXAMPLE_GEOMETRY "Install the example BRL-CAD geometry files." ON) + +# test for X11 on all platforms since we don't know when/where we'll find it, unless +# we've indicated we *don't* want an X11 build +if(NOT BRLCAD_ENABLE_AQUA AND NOT BRLCAD_ENABLE_MINIMAL) + find_package(X11) + if (X11_Xrender_FOUND) + CONFIG_H_APPEND(BRLCAD "#define HAVE_XRENDER 1\n") + endif (X11_Xrender_FOUND) +endif(NOT BRLCAD_ENABLE_AQUA AND NOT BRLCAD_ENABLE_MINIMAL) + +# make sure Xi is included in the list of X11 libs +# (Xext is automatically added during FindX11) +if(X11_Xi_FOUND) + set(X11_LIBRARIES ${X11_LIBRARIES} ${X11_Xi_LIB}) +endif(X11_Xi_FOUND) + +# Set whether X11 is enabled or disabled by default +if(WIN32) + # even if there is x11, we default to native + option(BRLCAD_ENABLE_X11 "Use X11." OFF) +elseif(BRLCAD_ENABLE_AQUA) + # aqua implies no X11 + option(BRLCAD_ENABLE_X11 "Use X11." OFF) +else(WIN32) + # make everywhere else depend on whether we found a suitable X11 + # X11_Xext_LIB AND X11_Xi_LIB AND + if(X11_FOUND AND NOT BRLCAD_ENABLE_MINIMAL) + option(BRLCAD_ENABLE_X11 "Use X11." ON) + else(X11_FOUND AND NOT BRLCAD_ENABLE_MINIMAL) + option(BRLCAD_ENABLE_X11 "Use X11." OFF) + endif(X11_FOUND AND NOT BRLCAD_ENABLE_MINIMAL) +endif(WIN32) +mark_as_advanced(BRLCAD_ENABLE_X11) + +# if X11 is enabled, make sure aqua is off +if(BRLCAD_ENABLE_X11) + set(BRLCAD_ENABLE_AQUA OFF CACHE STRING "Don't use Aqua if we're doing X11" FORCE) + set(OPENGL_USE_AQUA OFF CACHE STRING "Don't use Aqua if we're doing X11" FORCE) +endif(BRLCAD_ENABLE_X11) +mark_as_advanced(OPENGL_USE_AQUA) + +# Enable/disable features requiring the Tcl/Tk toolkit - usually this should be +# on, as a lot of functionality in BRL-CAD depends on Tcl/Tk +option(BRLCAD_ENABLE_TCL "Enable features requiring the Tcl toolkit" ON) +cmake_dependent_option(BRLCAD_ENABLE_TK "Enable features requiring the Tk toolkit" ON "BRLCAD_ENABLE_TCL" OFF) +mark_as_advanced(BRLCAD_ENABLE_TCL BRLCAD_ENABLE_TK) +if(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) + set(BRLCAD_ENABLE_TK OFF) +endif(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) +if(BRLCAD_ENABLE_X11) + set(TK_X11_GRAPHICS ON CACHE STRING "Need X11 Tk" FORCE) +endif(BRLCAD_ENABLE_X11) + +# Enable features requiring OPENGL +# Be smart about this - if we don't have X11 or Aqua and we're not on Windows, +# we're non-graphical and that means OpenGL is a no-go. The Windows version +# would have to be some sort of option for the WIN32 graphics layer? Should +# probably think about that... for now, on Win32 don't try OpenGL if Tk is off. +# That'll hold until we get a non-Tk based GUI - then setting non-graphical on +# Windows will take more thought. +if(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) + set(OPENGL_FOUND OFF) + set(BRLCAD_ENABLE_OPENGL OFF CACHE BOOL "Disabled - NOT BRLCAD_ENABLE_X11 and NOT BRLCAD_ENABLE_AQUA" FORCE) +else(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) + include(FindGL) +endif(NOT BRLCAD_ENABLE_X11 AND NOT BRLCAD_ENABLE_AQUA AND NOT WIN32) + +set(BRLCAD_ENABLE_OPENGL_DESCRIPTION " +Enable support for OpenGL based Display Managers in BRL-CAD. +Default depends on whether OpenGL is successfully detected - +if it is, default is to enable. +") +BRLCAD_OPTION(BRLCAD_ENABLE_OPENGL ${OPENGL_FOUND} + TYPE BOOL + ALIASES ENABLE_OPENGL + DESCRIPTION BRLCAD_ENABLE_OPENGL_DESCRIPTION) + +if(BRLCAD_ENABLE_AQUA) + set(OPENGL_USE_AQUA ON CACHE STRING "Aqua enabled - use Aqua OpenGL" FORCE) +endif(BRLCAD_ENABLE_AQUA) + +# Enable features requiring Bullet Physics SDK +option(BRLCAD_ENABLE_BULLET "Enable features requiring the Bullet Physics Library" OFF) +if(BRLCAD_ENABLE_BULLET) + message("Bullet support is not currently working - disabling.") + set(BRLCAD_ENABLE_BULLET OFF CACHE BOOL "Currently broken" FORCE) +endif(BRLCAD_ENABLE_BULLET) +mark_as_advanced(BRLCAD_ENABLE_BULLET) + +# Enable features requiring GDAL geospatial library +option(BRLCAD_ENABLE_GDAL "Enable features requiring the Geospatial Data Abstraction Library" ON) +mark_as_advanced(BRLCAD_ENABLE_GDAL) + +# Enable features requiring STEPcode library +option(BRLCAD_ENABLE_STEP "Enable features requiring the STEP support libraries" ON) +mark_as_advanced(BRLCAD_ENABLE_STEP) + +# Enable features requiring Qt +option(BRLCAD_ENABLE_QT "Enable features requiring Qt" OFF) +mark_as_advanced(BRLCAD_ENABLE_QT) +if (BRLCAD_ENABLE_QT) + # TODO - try COMPONENTS search: https://blog.kitware.com/cmake-finding-qt5-the-right-way/ + find_package(Qt5Widgets QUIET) + if(NOT Qt5Widgets_FOUND AND BRLCAD_ENABLE_QT) + message("QT interface requested, but QT5 is not found - disabling") + set(BRLCAD_ENABLE_QT OFF) + endif(NOT Qt5Widgets_FOUND AND BRLCAD_ENABLE_QT) +endif (BRLCAD_ENABLE_QT) +mark_as_advanced(Qt5Widgets_DIR) +mark_as_advanced(Qt5Core_DIR) +mark_as_advanced(Qt5Gui_DIR) + +# Enable features requiring OpenSceneGraph +option(BRLCAD_ENABLE_OSG "Enable features requiring OpenSceneGraph" OFF) +mark_as_advanced(BRLCAD_ENABLE_OSG) +if(BRLCAD_ENABLE_OSG) + if(APPLE AND NOT BRLCAD_ENABLE_AQUA) + set(OSG_WINDOWING_SYSTEM "X11" CACHE STRING "Use X11" FORCE) + endif(APPLE AND NOT BRLCAD_ENABLE_AQUA) +endif(BRLCAD_ENABLE_OSG) + +# Enable features requiring GCT +option(BRLCAD_ENABLE_GCT "Enable features requiring GCT" ON) +mark_as_advanced(BRLCAD_ENABLE_GCT) +if(NOT BRLCAD_ENABLE_GCT) + CONFIG_H_APPEND(BRLCAD "#define BRLCAD_DISABLE_GCT 1\n") +endif(NOT BRLCAD_ENABLE_GCT) + +# Enable features requiring OpenCL +option(BRLCAD_ENABLE_OPENCL "Enable features requiring OpenCL" OFF) +mark_as_advanced(BRLCAD_ENABLE_OPENCL) +if(BRLCAD_ENABLE_OPENCL) + find_package(OpenCL) + if(NOT OPENCL_FOUND) + message("OpenCL enablement requested, but OpenCL is not found - disabling") + set(BRLCAD_ENABLE_OPENCL OFF) + endif(NOT OPENCL_FOUND) +endif(BRLCAD_ENABLE_OPENCL) + +# Enable features requiring OpenVDB +option(BRLCAD_ENABLE_OPENVDB "Enable features requiring OpenVDB" OFF) +mark_as_advanced(BRLCAD_ENABLE_OPENVDB) +if(BRLCAD_ENABLE_OPENVDB) + find_package(OpenVDB) + if(NOT OpenVDB_FOUND) + message("OpenVDB enablement requested, but OpenVDB is not found - disabling") + set(BRLCAD_ENABLE_OPENVDB OFF) + endif(NOT OpenVDB_FOUND) +endif(BRLCAD_ENABLE_OPENVDB) + +# Enable experimental support for binary attributes +option(BRLCAD_ENABLE_BINARY_ATTRIBUTES "Enable support for binary attributes" OFF) +mark_as_advanced(BRLCAD_ENABLE_BINARY_ATTRIBUTES) +if(BRLCAD_ENABLE_BINARY_ATTRIBUTES) + CONFIG_H_APPEND(BRLCAD "#define USE_BINARY_ATTRIBUTES 1\n") +endif(BRLCAD_ENABLE_BINARY_ATTRIBUTES) + + +#------------------------------------------------------------------------------ +# The following are fine-grained options for enabling/disabling compiler and +# source code definition settings. Typically these are set to various +# configurations by the toplevel CMAKE_BUILD_TYPE setting, but can also be +# individually set. + +# Enable/disable runtime debugging - these are protections for minimizing the +# possibility of corrupted data files. Generally speaking these should be left +# on. +set(BRLCAD_ENABLE_RUNTIME_DEBUG_ALIASES + ENABLE_RUNTIME_DEBUG + ENABLE_RUN_TIME_DEBUG + ENABLE_RUNTIME_DEBUGGING + ENABLE_RUN_TIME_DEBUGGING) +set(BRLCAD_ENABLE_RUNTIME_DEBUG_DESCRIPTION " +Enables support for application and library debugging facilities. +Disabling the run-time debugging facilities can provide a significant +(10%-30%) performance boost at the expense of extensive error +checking (that in turn help prevent corruption of your data). +Default is \"ON\", and should only be disabled for read-only render +work where performance is critical. +") +BRLCAD_OPTION(BRLCAD_ENABLE_RUNTIME_DEBUG ON + TYPE BOOL + ALIASES ${BRLCAD_ENABLE_RUNTIME_DEBUG_ALIASES} + DESCRIPTION BRLCAD_ENABLE_RUNTIME_DEBUG_DESCRIPTION) +mark_as_advanced(BRLCAD_ENABLE_RUNTIME_DEBUG) +if(NOT BRLCAD_ENABLE_RUNTIME_DEBUG) + message("}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}") + message("While disabling run-time debugging should increase") + message("performance, it will likewise remove several") + message("data-protection safeguards that are in place to") + message("minimize the possibility of corrupted data files") + message("in the inevitable event of a user encountering a bug.") + message("You have been warned. Proceed at your own risk.") + message("{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{") + CONFIG_H_APPEND(BRLCAD "/*Define to not do anything for macros that only bomb on a fatal error. */\n") + CONFIG_H_APPEND(BRLCAD "#define NO_BOMBING_MACROS 1\n") + CONFIG_H_APPEND(BRLCAD "/*Define to not perform magic number checking */\n") + CONFIG_H_APPEND(BRLCAD "#define NO_MAGIC_CHECKING 1\n") + CONFIG_H_APPEND(BRLCAD "/*Define to not provide run-time debug facilities via RTG.debug */\n") + CONFIG_H_APPEND(BRLCAD "#define NO_DEBUG_CHECKING 1\n") +endif(NOT BRLCAD_ENABLE_RUNTIME_DEBUG) + +# Enable debug flags during compilation - we always want to use these unless +# explicitly told not to. +set(BRLCAD_FLAGS_DEBUG_DESCRIPTION " +Add compiler flags to aid in program debugging. Defaults to ON. +") +BRLCAD_OPTION(BRLCAD_FLAGS_DEBUG ON + TYPE BOOL + ALIASES ENABLE_DEBUG ENABLE_FLAGS_DEBUG ENABLE_DEBUG_FLAGS + DESCRIPTION BRLCAD_FLAGS_DEBUG_DESCRIPTION) + +# A variety of debugging messages in the code key off of the DEBUG definition - +# set it according to whether we're using debug flags. +if(BRLCAD_FLAGS_DEBUG) + CONFIG_H_APPEND(BRLCAD "#define DEBUG 1\n") +endif(BRLCAD_FLAGS_DEBUG) + +# Build with compiler warning flags +set(BRLCAD_ENABLE_COMPILER_WARNINGS_DESCRIPTION " +Use extra compiler warning flags when compiling C/C++ code. Defaults to ON. +") +BRLCAD_OPTION(BRLCAD_ENABLE_COMPILER_WARNINGS ON + TYPE BOOL + ALIASES ENABLE_WARNINGS ENABLE_COMPILER_WARNINGS + DESCRIPTION BRLCAD_ENABLE_COMPILER_WARNINGS_DESCRIPTION) +mark_as_advanced(BRLCAD_ENABLE_COMPILER_WARNINGS) + +# Enable/disable strict compiler settings - these are used for building BRL-CAD +# by default, but not src/other code. Always used for BRL-CAD code unless the +# NO_STRICT option is specified when defining a target with BRLCAD_ADDEXEC or +# BRLCAD_ADDLIB. If only C++ files in a target are not compatible with strict, +# the NO_STRICT_CXX option can be used. +set(BRLCAD_ENABLE_STRICT_DESCRIPTION " +Causes all compilation warnings for C code to be treated as errors. This is now +the default for BRL-CAD source code, and developers should address issues +discovered by these flags whenever possible rather than disabling strict +mode. +") +BRLCAD_OPTION(BRLCAD_ENABLE_STRICT ON + TYPE BOOL + ALIASES ENABLE_STRICT ENABLE_STRICT_COMPILE ENABLE_STRICT_COMPILE_FLAGS + DESCRIPTION BRLCAD_ENABLE_STRICT_DESCRIPTION) +if(BRLCAD_ENABLE_STRICT) + mark_as_advanced(BRLCAD_ENABLE_STRICT) +endif(BRLCAD_ENABLE_STRICT) + +# Build with compiler optimization flags. This should normally be on for +# release builds and off otherwise, unless the user specifically enables it. +# For multi-config build tools, this is managed on a per-configuration basis. +if(CMAKE_BUILD_TYPE) + cmake_dependent_option(BRLCAD_OPTIMIZED_BUILD "Enable optimized build flags" ON "${CMAKE_BUILD_TYPE} STREQUAL Release" OFF) +else(CMAKE_BUILD_TYPE) + # Note: the cmake_dependent_option test doesn't work if CMAKE_BUILD_TYPE isn't set. + option(BRLCAD_OPTIMIZED_BUILD "Enable optimized build flags" OFF) +endif(CMAKE_BUILD_TYPE) +mark_as_advanced(BRLCAD_OPTIMIZED_BUILD) + +# Build with full compiler lines visible by default (won't need make VERBOSE=1) +# on command line +option(BRLCAD_ENABLE_VERBOSE_PROGRESS "verbose output" OFF) +mark_as_advanced(BRLCAD_ENABLE_VERBOSE_PROGRESS) +if(BRLCAD_ENABLE_VERBOSE_PROGRESS) + set(CMAKE_VERBOSE_MAKEFILE ON) +endif(BRLCAD_ENABLE_VERBOSE_PROGRESS) + +# Build with profile-guided optimization support. this requires a two-pass +# compile, once with BRLCAD_PGO=ON on a location that did not exist beforehand +# (specified via the PGO_PATH environment variable), and again to use profiling +# metrics captured on "typical" operations and data. By default, path is +# BUILDDIR/profiling + +option(BRLCAD_PGO "Enable profile-guided optimization (set PGO_PATH environment variable)") +mark_as_advanced(BRLCAD_PGO) + +#====== ALL CXX COMPILE =================== +# Build all C and C++ files with a C++ compiler +set(ENABLE_ALL_CXX_COMPILE_DESCRIPTION " +Build all C and C++ files with a C++ compiler. Defaults to OFF. + +EXPERIMENTAL! +") +BRLCAD_OPTION(ENABLE_ALL_CXX_COMPILE OFF + TYPE BOOL + ALIASES ENABLE_ALL_CXX + DESCRIPTION ENABLE_ALL_CXX_COMPILE_DESCRIPTION) +mark_as_advanced(ENABLE_ALL_CXX_COMPILE) + +# Build with coverage enabled +option(BRLCAD_ENABLE_COVERAGE "Build with coverage enabled" OFF) +mark_as_advanced(BRLCAD_ENABLE_COVERAGE) + +# Build with dtrace support +option(BRLCAD_ENABLE_DTRACE "Build with dtrace support" OFF) +mark_as_advanced(BRLCAD_ENABLE_DTRACE) +if(BRLCAD_ENABLE_DTRACE) + BRLCAD_INCLUDE_FILE(sys/sdt.h HAVE_SYS_SDT_H) + if(NOT HAVE_SYS_SDT_H) + set(BRLCAD_ENABLE_DTRACE OFF) + endif(NOT HAVE_SYS_SDT_H) +endif(BRLCAD_ENABLE_DTRACE) + +# Take advantage of parallel processors if available - highly recommended +option(BRLCAD_ENABLE_SMP "Enable SMP architecture parallel computation support" ON) +mark_as_advanced(BRLCAD_ENABLE_SMP) +if(BRLCAD_ENABLE_SMP) + CONFIG_H_APPEND(BRLCAD "#define PARALLEL 1\n") +endif(BRLCAD_ENABLE_SMP) + +if(BRLCAD_HEADERS_OLD_COMPAT) + add_definitions(-DEXPOSE_FB_HEADER) + add_definitions(-DEXPOSE_DM_HEADER) +endif(BRLCAD_HEADERS_OLD_COMPAT) + +#----------------------------------------------------------------------------- +# Some generators in CMake support generating folders in IDEs for organizing +# build targets. We want to use them if they are there. +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +#----------------------------------------------------------------------------- +# There are extra documentation files available requiring DocBook They are +# quite useful in graphical interfaces, but also add considerably to the +# overall build time. If necessary BRL-CAD provides its own xsltproc (see +# src/other/xmltools), so the html and man page outputs are always potentially +# available. PDF output, on the other hand, needs Apache FOP. FOP is not a +# candidate for bundling with BRL-CAD for a number of reasons, so we simply +# check to see if it is present and set the options accordingly. + +# Do we have the environment variable set locally? +if(NOT "$ENV{APACHE_FOP}" STREQUAL "") + set(APACHE_FOP "$ENV{APACHE_FOP}") +endif(NOT "$ENV{APACHE_FOP}" STREQUAL "") +if(NOT APACHE_FOP) + find_program(APACHE_FOP fop DOC "path to the exec script for Apache FOP") +endif(NOT APACHE_FOP) +mark_as_advanced(APACHE_FOP) +# We care about the FOP version, unfortunately - find out what we have. +if(APACHE_FOP) + execute_process(COMMAND ${APACHE_FOP} -v OUTPUT_VARIABLE APACHE_FOP_INFO ERROR_QUIET) + string(REGEX REPLACE "FOP Version ([0-9\\.]*)" "\\1" APACHE_FOP_VERSION_REGEX "${APACHE_FOP_INFO}") + if(APACHE_FOP_VERSION_REGEX) + string(STRIP ${APACHE_FOP_VERSION_REGEX} APACHE_FOP_VERSION_REGEX) + endif(APACHE_FOP_VERSION_REGEX) + if(NOT "${APACHE_FOP_VERSION}" STREQUAL "${APACHE_FOP_VERSION_REGEX}") + message("-- Found Apache FOP: version ${APACHE_FOP_VERSION_REGEX}") + set(APACHE_FOP_VERSION ${APACHE_FOP_VERSION_REGEX} CACHE STRING "Apache FOP version" FORCE) + mark_as_advanced(APACHE_FOP_VERSION) + endif(NOT "${APACHE_FOP_VERSION}" STREQUAL "${APACHE_FOP_VERSION_REGEX}") +endif(APACHE_FOP) + +# Toplevel variable that controls all DocBook based documentation. Key it off +# of what target level is enabled. +if(NOT BRLCAD_ENABLE_TARGETS OR "${BRLCAD_ENABLE_TARGETS}" GREATER 2) + set(EXTRADOCS_DEFAULT "ON") +else(NOT BRLCAD_ENABLE_TARGETS OR "${BRLCAD_ENABLE_TARGETS}" GREATER 2) + set(EXTRADOCS_DEFAULT "OFF") +endif(NOT BRLCAD_ENABLE_TARGETS OR "${BRLCAD_ENABLE_TARGETS}" GREATER 2) +set(BRLCAD_EXTRADOCS_DESCRIPTION " +The core option that enables and disables building of BRL-CAD's +DocBook based documentation (includes manuals and man pages for +commands, among other things). Defaults to ON, but only HTML and MAN +formats are enabled by default - PDF must be enabled separately by use +of this option or one of its aliases. Note that you may set +environment variable APACHE_FOP to point to your locally installed fop +executable file (which on Linux is usually a shell script with 0755 +permissions). +") +BRLCAD_OPTION(BRLCAD_EXTRADOCS ${EXTRADOCS_DEFAULT} + TYPE BOOL + ALIASES ENABLE_DOCS ENABLE_EXTRA_DOCS ENABLE_DOCBOOK + DESCRIPTION BRLCAD_EXTRADOCS_DESCRIPTION) + + +# The HTML output is used in the graphical help browsers in MGED and Archer, as +# well as being the most likely candidate for external viewers. Turn this on +# unless explicitly instructed otherwise by the user or all extra documentation +# is disabled. +CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_HTML "Build MAN page output from DocBook documentation" ON "BRLCAD_EXTRADOCS" OFF) +mark_as_advanced(BRLCAD_EXTRADOCS_HTML) + +CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_PHP "Build MAN page output from DocBook documentation" OFF "BRLCAD_EXTRADOCS" OFF) +mark_as_advanced(BRLCAD_EXTRADOCS_PHP) + +CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_PPT "Build MAN page output from DocBook documentation" ON "BRLCAD_EXTRADOCS" OFF) +mark_as_advanced(BRLCAD_EXTRADOCS_PPT) + +# Normally, we'll turn on man page output by default, but there is no point in +# doing man page output for a Visual Studio build - the files aren't useful and +# it *seriously* increases the target build count/build time. Conditionalize +# on the CMake MSVC variable NOT being set. +CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_MAN "Build MAN page output from DocBook documentation" ON "BRLCAD_EXTRADOCS;NOT MSVC" OFF) +mark_as_advanced(BRLCAD_EXTRADOCS_MAN) + +# Don't do PDF by default because it's pretty expensive, and hide the option +# unless the tools to do it are present. +set(BRLCAD_EXTRADOCS_PDF_DESCRIPTION " +Option that enables building of BRL-CAD's DocBook PDF-based documentation +(includes manuals and man pages for commands, among +other things.) Defaults to OFF. +Note that you may set environment variable APACHE_FOP +to point to your locally installed fop executable file (which on Linux is +usually a shell script with 0755 permissions). +") +CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_PDF "Build PDF output from DocBook documentation" OFF "BRLCAD_EXTRADOCS;APACHE_FOP" OFF) + +# Provide an option to enable/disable XML validation as part of the DocBook +# build - sort of a "strict flags" mode for DocBook. By default, this will be +# enabled when extra docs are built and the toplevel BRLCAD_ENABLE_STRICT +# setting is enabled. Unfortunately, Visual Studio 2010 seems to have issues +# when we enable validation on top of everything else... not clear why, unless +# build target counts >1800 are beyond MSVC's practical limit. Until we either +# find a resolution or a way to reduce the target count on MSVC, disable +# validation there. +CMAKE_DEPENDENT_OPTION(BRLCAD_EXTRADOCS_VALIDATE "Perform validation for DocBook documentation" ON "BRLCAD_EXTRADOCS;BRLCAD_ENABLE_STRICT" OFF) +mark_as_advanced(BRLCAD_EXTRADOCS_VALIDATE) + + + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/BRLCAD_Util.cmake b/misc/CMake/BRLCAD_Util.cmake index 5a9c6722343..a21085e9dd8 100644 --- a/misc/CMake/BRLCAD_Util.cmake +++ b/misc/CMake/BRLCAD_Util.cmake @@ -1,7 +1,7 @@ # B R L C A D _ U T I L . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -37,6 +37,14 @@ # Need sophisticated option parsing include(CMakeParseArguments) +#----------------------------------------------------------------------------- +# Find the executable extension, if there is one. Really should be able to use +# CMAKE_EXECUTABLE_SUFFIX for this, but we've hit a few cases over the years +# where that hasn't been defined. CMAKE_COMMAND does seem to be reliably +# defined, however, so we establish the convention of using it to supply us +# with the platform exe extension, if there is one. +get_filename_component(EXE_EXT "${CMAKE_COMMAND}" EXT) + #----------------------------------------------------------------------------- # We want to support a "distclean" build target that will clear all # CMake-generated files from a source directory in the case of an @@ -477,151 +485,11 @@ function(ADD_TARGET_DEPS tname) endif(TARGET ${tname}) endfunction(ADD_TARGET_DEPS tname) -#--------------------------------------------------------------------------- -# Set variables reporting time of configuration. Sets CONFIG_DATE and -# CONFIG_DATESTAMP in parent scope. -# -# Unfortunately, CMake doesn't give you variables with current day, -# month, etc. There are several possible approaches to this, but most -# (e.g. the date command) are not cross platform. We build a small C -# program which supplies the needed info. -function(set_config_time) - - # We don't want any parent C flags here - hopefully, the below code will - # "just work" in any environment we care about. The gnu89 standard doesn't - # like the %z print specifier, but unless/until we hit a compiler that really - # can't deal with it don't worry about it. - set(CMAKE_C_FLAGS "") - - set(rfc2822_src " -/* RFC2822 timestamp and individual day, month and year files */ - -#include -#include -#include - -int main(int argc, const char **argv) { - time_t t = time(NULL); - struct tm *currenttime = localtime(&t); - if (argc <= 1) { - char rfc2822[200]; - strftime(rfc2822, sizeof(rfc2822), \"%a, %d %b %Y %H:%M:%S %z\", currenttime); - printf(\"%s\", rfc2822); - return 0; - } - if (strncmp(argv[1], \"day\", 4) == 0) { - printf(\"%02d\", currenttime->tm_mday); - } - if (strncmp(argv[1], \"month\", 5) == 0) { - printf(\"%02d\", currenttime->tm_mon + 1); - } - if (strncmp(argv[1], \"year\", 4) == 0) { - printf(\"%d\", currenttime->tm_year + 1900); - } - return 0; -}") - - # Build the code so we can run it - file(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/rfc2822.c" "${rfc2822_src}") - try_compile(rfc2822_build "${CMAKE_BINARY_DIR}/CMakeTmp" - SOURCES "${CMAKE_BINARY_DIR}/CMakeTmp/rfc2822.c" - OUTPUT_VARIABLE RFC2822_BUILD_INFO - COPY_FILE "${CMAKE_BINARY_DIR}/CMakeTmp/rfc2822${EXE_EXT}") - if(NOT rfc2822_build) - message(FATAL_ERROR "Could not build rfc2822 timestamp pretty-printing utility: ${RFC2822_BUILD_INFO}") - endif(NOT rfc2822_build) - file(REMOVE "${CMAKE_BINARY_DIR}/CMakeTmp/rfc2822.c") - - # Build up and set CONFIG_DATE - execute_process(COMMAND "${CMAKE_BINARY_DIR}/CMakeTmp/rfc2822" day OUTPUT_VARIABLE CONFIG_DAY) - string(STRIP ${CONFIG_DAY} CONFIG_DAY) - execute_process(COMMAND "${CMAKE_BINARY_DIR}/CMakeTmp/rfc2822" month OUTPUT_VARIABLE CONFIG_MONTH) - string(STRIP ${CONFIG_MONTH} CONFIG_MONTH) - execute_process(COMMAND "${CMAKE_BINARY_DIR}/CMakeTmp/rfc2822" year OUTPUT_VARIABLE CONFIG_YEAR) - string(STRIP ${CONFIG_YEAR} CONFIG_YEAR) - set(CONFIG_DATE "${CONFIG_YEAR}${CONFIG_MONTH}${CONFIG_DAY}" PARENT_SCOPE) - - # Set DATESTAMP - execute_process(COMMAND "${CMAKE_BINARY_DIR}/CMakeTmp/rfc2822" OUTPUT_VARIABLE RFC2822_STRING) - string(STRIP ${RFC2822_STRING} RFC2822_STRING) - set(CONFIG_DATESTAMP "${RFC2822_STRING}" PARENT_SCOPE) - - # Cleanup - file(REMOVE "${CMAKE_BINARY_DIR}/CMakeTmp/rfc2822") - -endfunction(set_config_time) #--------------------------------------------------------------------------- # Code for timing configuration and building of BRL-CAD. These executables # are used to define build targets for cross-platform reporting. Run after # set_config_time. -function(generate_sstamp) - - ######################################################################### - # Print a basic time stamp - - set(printtimestamp_src " -#define _CRT_SECURE_NO_WARNINGS 1 - -#include -#include - -int main(int argc, const char **argv) -{ - time_t t = time(NULL); - struct tm *currenttime = localtime(&t); - if (argc < 2) return 1; - printf(\"\\n%s%s\\n\", argv[1], asctime(currenttime)); - return 0; -} -") - - file(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/printtimestamp.c" "${printtimestamp_src}") - try_compile(pts_build ${CMAKE_BINARY_DIR}/CMakeTmp - "${CMAKE_BINARY_DIR}/CMakeTmp/printtimestamp.c" - COPY_FILE ${CMAKE_BINARY_DIR}/CMakeTmp/pts${EXE_EXT}) - if(NOT pts_build) - message(FATAL_ERROR "Could not build timestamp pretty-printing utility") - endif(NOT pts_build) - - ######################################################################### - # We need some way to know at the end of the build when we kicked things - # off (both configuration and the build itself). Create a simple program - # that can stash that info in a file - - set(sstamp_src " -#define _CRT_SECURE_NO_WARNINGS 1 - -#include -#include - -int main(int argc, const char **argv) { - FILE *outfp = NULL; - time_t t = time(NULL); - if (argc < 2) return 1; - outfp = fopen(argv[1], \"w\"); - fprintf(outfp, \"%ld\", (long)t); - fclose(outfp); - return 0; -} -") - - # Build the code so we can run it - file(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/sstamp.c" "${sstamp_src}") - try_compile(sstamp_build "${CMAKE_BINARY_DIR}/CMakeTmp" - SOURCES "${CMAKE_BINARY_DIR}/CMakeTmp/sstamp.c" - OUTPUT_VARIABLE SSTAMP_BUILD_INFO - COPY_FILE "${CMAKE_BINARY_DIR}/CMakeTmp/sstamp${EXE_EXT}") - if(NOT sstamp_build) - message(FATAL_ERROR "Could not build second timestamping utility: ${SSTAMP_BUILD_INFO}") - endif(NOT sstamp_build) - file(REMOVE "${CMAKE_BINARY_DIR}/CMakeTmp/sstamp.c") - if(COMMAND distclean) - distclean("${CMAKE_BINARY_DIR}/CMakeTmp/sstamp") - endif(COMMAND distclean) - -endfunction(generate_sstamp) - function(generate_dreport) diff --git a/misc/CMake/CMakeLists.txt b/misc/CMake/CMakeLists.txt index 99b36dec505..78425f63a6c 100644 --- a/misc/CMake/CMakeLists.txt +++ b/misc/CMake/CMakeLists.txt @@ -1,10 +1,16 @@ set(cmake_ignore_files + BRLCAD_Build_Types.cmake + BRLCAD_CPack.cmake BRLCAD_CPackOptions.cmake.in BRLCAD_CheckFunctions.cmake + BRLCAD_Environment_Setup.cmake + BRLCAD_Install_Prefix.cmake BRLCAD_Options.cmake BRLCAD_Regress_Util.cmake BRLCAD_Summary.cmake BRLCAD_Targets.cmake + BRLCAD_Test_Wrappers.cmake + BRLCAD_User_Options.cmake BRLCAD_Util.cmake CMakeLists.txt CheckCInline.cmake @@ -35,18 +41,18 @@ set(cmake_ignore_files FindOpenVDB.cmake FindPERPLEX.cmake FindPkgMacros.cmake + FindPOLY2TRI.cmake FindPROJ4.cmake FindRE2C.cmake FindREGEX.cmake FindSCL.cmake - FindSSE.cmake FindSTL.cmake FindShellDeps.cmake + FindSTEPCODE.cmake FindTBB.cmake FindTCL.cmake FindUTAHRLE.cmake FindUUID.cmake - FindVDS.cmake FindWix.cmake FindX11.cmake FindXMLLINT.cmake @@ -85,6 +91,7 @@ set(cmake_ignore_files compat/test_strtok_r.c configure_prefix.sh configure_suffix.sh + date_delta.cpp distcheck_in_src_dir.cmake.in distcheck_no_tcl.cmake.in distcheck_repo_verify.cmake.in @@ -95,6 +102,9 @@ set(cmake_ignore_files multiconfig_path_read.cmake.in source_archive_setup.cmake.in tcltest.tcl.in + scripts/printtime.cmake + scripts/timestamp.cmake + scripts/tcl_mkindex.cmake ) CMAKEFILES(${cmake_ignore_files}) diff --git a/misc/CMake/CheckCInline.cmake b/misc/CMake/CheckCInline.cmake index 5c7cc47ceb2..1f0bd955dfd 100644 --- a/misc/CMake/CheckCInline.cmake +++ b/misc/CMake/CheckCInline.cmake @@ -1,7 +1,7 @@ # C H E C K C I N L I N E . C M A K E # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/CompilerFlags.cmake b/misc/CMake/CompilerFlags.cmake index 60d24e3af32..2145ee67d13 100644 --- a/misc/CMake/CompilerFlags.cmake +++ b/misc/CMake/CompilerFlags.cmake @@ -1,7 +1,7 @@ # C O M P I L E R F L A G S . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -160,14 +160,16 @@ endmacro(ADD_NEW_FLAG) # This macro tests for a specified C or C++ compiler flag, setting the # result in the specified variable. -macro(CHECK_COMPILER_FLAG FLAG_LANG NEW_FLAG RESULTVAR) - if("${FLAG_LANG}" STREQUAL "C") - CHECK_C_COMPILER_FLAG(${NEW_FLAG} ${RESULTVAR}) - endif("${FLAG_LANG}" STREQUAL "C") - if("${FLAG_LANG}" STREQUAL "CXX") - CHECK_CXX_COMPILER_FLAG(${NEW_FLAG} ${RESULTVAR}) - endif("${FLAG_LANG}" STREQUAL "CXX") -endmacro(CHECK_COMPILER_FLAG LANG NEW_FLAG RESULTVAR) +if(NOT COMMAND CHECK_COMPILER_FLAG) + macro(CHECK_COMPILER_FLAG FLAG_LANG NEW_FLAG RESULTVAR) + if("${FLAG_LANG}" STREQUAL "C") + CHECK_C_COMPILER_FLAG(${NEW_FLAG} ${RESULTVAR}) + endif("${FLAG_LANG}" STREQUAL "C") + if("${FLAG_LANG}" STREQUAL "CXX") + CHECK_CXX_COMPILER_FLAG(${NEW_FLAG} ${RESULTVAR}) + endif("${FLAG_LANG}" STREQUAL "CXX") + endmacro(CHECK_COMPILER_FLAG LANG NEW_FLAG RESULTVAR) +endif(NOT COMMAND CHECK_COMPILER_FLAG) # Synopsis: CHECK_FLAG(LANG flag [BUILD_TYPES type1 type2 ...] [GROUPS group1 group2 ...] [VARS var1 var2 ...] ) diff --git a/misc/CMake/Distcheck.cmake b/misc/CMake/Distcheck.cmake index 1f1b9f02e37..b0b27ce6daa 100644 --- a/misc/CMake/Distcheck.cmake +++ b/misc/CMake/Distcheck.cmake @@ -1,7 +1,7 @@ # D I S T C H E C K . C M A K E # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -54,6 +54,7 @@ if(NOT BRLCAD_IS_SUBBUILD) # Set up the script that will be used to verify the source archives configure_file("${BRLCAD_CMAKE_DIR}/distcheck_repo_verify.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/distcheck_repo_verify.cmake" @ONLY) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/distcheck_repo_verify.cmake") # Define the repository verification build target add_custom_target(distcheck-repo_verify @@ -135,6 +136,7 @@ if(NOT BRLCAD_IS_SUBBUILD) # Based on the build command, generate a distcheck target definition from the template configure_file(${distcheck_template_file} "${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/distcheck_target_${TARGET_SUFFIX}.cmake" @ONLY) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/distcheck_target_${TARGET_SUFFIX}.cmake") include("${CMAKE_CURRENT_BINARY_DIR}/CMakeTmp/distcheck_target_${TARGET_SUFFIX}.cmake") # Keep track of the distcheck targets diff --git a/misc/CMake/DocBook.cmake b/misc/CMake/DocBook.cmake index 1bff000f76b..1f53a23ae16 100644 --- a/misc/CMake/DocBook.cmake +++ b/misc/CMake/DocBook.cmake @@ -1,7 +1,7 @@ # D O C B O O K . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -250,6 +250,7 @@ macro(ADD_DOCBOOK fmts in_xml_files outdir deps_list) if(NOT "${outputs}" STREQUAL "") string(MD5 path_md5 "${CMAKE_CURRENT_SOURCE_DIR}/${fname}") configure_file(${BRLCAD_CMAKE_DIR}/docbook.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/dbp_${fname_root}-${path_md5}.cmake @ONLY) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/dbp_${fname_root}-${path_md5}.cmake") add_custom_command( OUTPUT ${outputs} COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/dbp_${fname_root}-${path_md5}.cmake diff --git a/misc/CMake/Doxygen.cmake b/misc/CMake/Doxygen.cmake index a22a6b2094b..21860facbaa 100644 --- a/misc/CMake/Doxygen.cmake +++ b/misc/CMake/Doxygen.cmake @@ -1,7 +1,7 @@ # D O X Y G E N . C M A K E # BRL-CAD # -# Copyright (c) 2016-2020 United States Government as represented by +# Copyright (c) 2016-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindADAPTAGRAMS.cmake b/misc/CMake/FindADAPTAGRAMS.cmake index bffcabe5d6c..2fe2be82219 100644 --- a/misc/CMake/FindADAPTAGRAMS.cmake +++ b/misc/CMake/FindADAPTAGRAMS.cmake @@ -1,7 +1,7 @@ # F I N D A D A P T A G R A M S . C M A K E # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindGECODE.cmake b/misc/CMake/FindGECODE.cmake index ac25d71961d..1c79f8614d7 100644 --- a/misc/CMake/FindGECODE.cmake +++ b/misc/CMake/FindGECODE.cmake @@ -1,7 +1,7 @@ # F I N D G E C O D E . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindGL.cmake b/misc/CMake/FindGL.cmake index f08b1eb4cb7..c3bc3004c72 100644 --- a/misc/CMake/FindGL.cmake +++ b/misc/CMake/FindGL.cmake @@ -1,7 +1,7 @@ # F I N D G L . C M A K E # BRL-CAD # -# Copyright (c) 2001-2020 United States Government as represented by +# Copyright (c) 2001-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -172,7 +172,7 @@ else (WIN32) if(SEARCH_64BIT) set(64BIT_DIRS "/usr/lib64/X11;/usr/lib64;/usr/lib/x86_64-linux-gnu") else(SEARCH_64BIT) - set(32BIT_DIRS "/usr/lib/X11;/usr/lib;/usr/lib/i386-linux-gnu") + set(32BIT_DIRS "/usr/lib/X11;/usr/lib;/usr/lib/i386-linux-gnu;/usr/lib/arm-linux-gnueabihf") endif(SEARCH_64BIT) set(OPENGL_LIB_SEARCH_PATH diff --git a/misc/CMake/FindLEMON.cmake b/misc/CMake/FindLEMON.cmake index 6561ec848bc..6302fc65a35 100644 --- a/misc/CMake/FindLEMON.cmake +++ b/misc/CMake/FindLEMON.cmake @@ -10,7 +10,7 @@ # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel @@ -44,9 +44,35 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= -find_program(LEMON_EXECUTABLE lemon DOC "path to the lemon executable") +set(_LEMON_SEARCHES) + +# Search LEMON_ROOT first if it is set. +if(LEMON_ROOT) + set(_LEMON_SEARCH_ROOT PATHS ${LEMON_ROOT} NO_DEFAULT_PATH) + list(APPEND _LEMON_SEARCHES _LEMON_SEARCH_ROOT) +endif() + +# Normal search. +set(_LEMON_x86 "(x86)") +set(_LEMON_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/lemon" + "$ENV{ProgramFiles${_LEMON_x86}}/lemon") +unset(_LEMON_x86) +list(APPEND _LEMON_SEARCHES _LEMON_SEARCH_NORMAL) + +set(LEMON_NAMES lemon) + +# Try each search configuration. +foreach(search ${_LEMON_SEARCHES}) + find_program(LEMON_EXECUTABLE lemon ${${search}} PATH_SUFFIXES bin) +endforeach() mark_as_advanced(LEMON_EXECUTABLE) +foreach(search ${_LEMON_SEARCHES}) + find_file(LEMON_TEMPLATE lempar.c ${${search}} PATH_SUFFIXES ${DATA_DIR} ${DATA_DIR}/lemon) +endforeach() +mark_as_advanced(LEMON_TEMPLATE) + if (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE) # look for the template in share if (DATA_DIR AND EXISTS "${DATA_DIR}/lemon/lempar.c") @@ -113,6 +139,10 @@ if(NOT COMMAND LEMON_TARGET) CMAKE_PARSE_ARGUMENTS(${LVAR_PREFIX} "" "OUT_SRC_FILE;OUT_HDR_FILE;WORKING_DIR;EXTRA_ARGS" "" ${ARGN}) endif(${ARGC} GREATER 3) + if (TARGET perplex_stage) + set(DEPS_TARGET perplex_stage) + endif (TARGET perplex_stage) + # Need a working directory if("${${LVAR_PREFIX}_WORKING_DIR}" STREQUAL "") set(${LVAR_PREFIX}_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}/${LVAR_PREFIX}") @@ -160,8 +190,8 @@ if(NOT COMMAND LEMON_TARGET) add_custom_command( OUTPUT ${LEMON_GEN_OUT} ${LEMON_GEN_SOURCE} ${LEMON_GEN_HEADER} COMMAND ${CMAKE_COMMAND} -E copy ${lemon_in_file} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} - COMMAND ${LEMON_EXECUTABLE} -l -T${LEMON_TEMPLATE} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} ${${LVAR_PREFIX}__EXTRA_ARGS} - DEPENDS ${Input} ${LEMON_TEMPLATE} ${LEMON_EXECUTABLE_TARGET} + COMMAND ${LEMON_EXECUTABLE} -T${LEMON_TEMPLATE} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} ${${LVAR_PREFIX}__EXTRA_ARGS} + DEPENDS ${Input} ${LEMON_EXECUTABLE_TARGET} ${DEPS_TARGET} WORKING_DIRECTORY ${${LVAR_PREFIX}_WORKING_DIR} COMMENT "[LEMON][${Name}] Building parser with ${LEMON_EXECUTABLE}" ) @@ -171,7 +201,7 @@ if(NOT COMMAND LEMON_TARGET) add_custom_command( OUTPUT ${${LVAR_PREFIX}_OUT_SRC_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_SOURCE} ${${LVAR_PREFIX}_OUT_SRC_FILE} - DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_SOURCE} + DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_SOURCE} ${DEPS_TARGET} ) set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_SRC_FILE} ${LEMON_${Name}_OUTPUTS}) endif(NOT "${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "${LEMON_GEN_SOURCE}") @@ -179,7 +209,7 @@ if(NOT COMMAND LEMON_TARGET) add_custom_command( OUTPUT ${${LVAR_PREFIX}_OUT_HDR_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_HEADER} ${${LVAR_PREFIX}_OUT_HDR_FILE} - DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_HEADER} + DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_HEADER} ${DEPS_TARGET} ) set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_HDR_FILE} ${LEMON_${Name}_OUTPUTS}) endif(NOT "${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "${LEMON_GEN_HEADER}") diff --git a/misc/CMake/FindNETPBM.cmake b/misc/CMake/FindNETPBM.cmake index ee9e4a2001d..ec3b4888d59 100644 --- a/misc/CMake/FindNETPBM.cmake +++ b/misc/CMake/FindNETPBM.cmake @@ -1,59 +1,102 @@ -# F I N D N E T P B M . C M A K E -# BRL-CAD -# -# Copyright (c) 2011-2020 United States Government as represented by -# the U.S. Army Research Laboratory. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -### -# - Find netpbm library and headers -# -# The following variables are set: -# -# NETPBM_LIBRARIES - libnetpbm -# NETPBM_INCLUDE_DIRS - where to find ppm.h, pam.h, pbm.h, etc. -# NETPBM_FOUND - True if libnetpbm and header found. - -find_path(NETPBM_INCLUDE_DIR pam.h) -find_library(NETPBM_LIBRARY NAMES netpbm) +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindNETPBM +-------- + +Find the native NETPBM includes and library. + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``NETPBM::NETPBM``, if +NETPBM has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +:: + + NETPBM_INCLUDE_DIRS - where to find pam.h, etc. + NETPBM_LIBRARIES - List of libraries when using netpbm. + NETPBM_FOUND - True if netpbm found. + +Hints +^^^^^ + +A user may set ``NETPBM_ROOT`` to a netpbm installation root to tell this +module where to look. +#]=======================================================================] + +set(_NETPBM_SEARCHES) + +# Search NETPBM_ROOT first if it is set. +if(NETPBM_ROOT) + set(_NETPBM_SEARCH_ROOT PATHS ${NETPBM_ROOT} NO_DEFAULT_PATH) + list(APPEND _NETPBM_SEARCHES _NETPBM_SEARCH_ROOT) +endif() + +# Normal search. +set(_NETPBM_x86 "(x86)") +set(_NETPBM_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/netpbm" + "$ENV{ProgramFiles${_NETPBM_x86}}/netpbm") +unset(_NETPBM_x86) +list(APPEND _NETPBM_SEARCHES _NETPBM_SEARCH_NORMAL) + +set(NETPBM_NAMES netpbm) + +# Try each search configuration. +foreach(search ${_NETPBM_SEARCHES}) + find_path(NETPBM_INCLUDE_DIR NAMES pam.h ${${search}} PATH_SUFFIXES include include/netpbm netpbm) +endforeach() + +# Allow NETPBM_LIBRARY to be set manually, as the location of the netpbm library +if(NOT NETPBM_LIBRARY) + foreach(search ${_NETPBM_SEARCHES}) + find_library(NETPBM_LIBRARY NAMES ${NETPBM_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + endforeach() +endif() + +unset(NETPBM_NAMES) + +mark_as_advanced(NETPBM_INCLUDE_DIR) include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(NETPBM DEFAULT_MSG NETPBM_LIBRARY NETPBM_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(NETPBM REQUIRED_VARS NETPBM_LIBRARY NETPBM_INCLUDE_DIR) + +if(NETPBM_FOUND) + set(NETPBM_INCLUDE_DIRS ${NETPBM_INCLUDE_DIR}) + + if(NOT NETPBM_LIBRARIES) + set(NETPBM_LIBRARIES ${NETPBM_LIBRARY}) + endif() + + if(NOT TARGET NETPBM::NETPBM) + add_library(NETPBM::NETPBM UNKNOWN IMPORTED) + set_target_properties(NETPBM::NETPBM PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${NETPBM_INCLUDE_DIRS}") + + if(NETPBM_LIBRARY_RELEASE) + set_property(TARGET NETPBM::NETPBM APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(NETPBM::NETPBM PROPERTIES + IMPORTED_LOCATION_RELEASE "${NETPBM_LIBRARY_RELEASE}") + endif() + + if(NETPBM_LIBRARY_DEBUG) + set_property(TARGET NETPBM::NETPBM APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(NETPBM::NETPBM PROPERTIES + IMPORTED_LOCATION_DEBUG "${NETPBM_LIBRARY_DEBUG}") + endif() -IF (NETPBM_FOUND) - set(NETPBM_INCLUDE_DIRS ${NETPBM_INCLUDE_DIR}) - set(NETPBM_LIBRARIES ${NETPBM_LIBRARY}) + if(NOT NETPBM_LIBRARY_RELEASE AND NOT NETPBM_LIBRARY_DEBUG) + set_property(TARGET NETPBM::NETPBM APPEND PROPERTY + IMPORTED_LOCATION "${NETPBM_LIBRARY}") + endif() + endif() endif() -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/FindOPENNURBS.cmake b/misc/CMake/FindOPENNURBS.cmake index 750ff6e16d3..f9f8c6a35b4 100644 --- a/misc/CMake/FindOPENNURBS.cmake +++ b/misc/CMake/FindOPENNURBS.cmake @@ -1,63 +1,102 @@ -# F I N D O P E N N U R B S . C M A K E -# BRL-CAD -# -# Copyright (c) 2011-2020 United States Government as represented by -# the U.S. Army Research Laboratory. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -### -# - Find OpenNURBS -# -# The following variables are set: -# -# OPENNURBS_INCLUDE_DIRS - where to find opennurbs.h, etc. -# OPENNURBS_LIBRARIES - List of libraries when using openNURBS -# OPENNURBS_FOUND - True if openNURBS found. - -# OpenNURBS requires zlib -find_package(ZLIB) - -find_path(OPENNURBS_INCLUDE_DIR opennurbs.h) -find_library(OPENNURBS_LIBRARY NAMES opennurbs openNURBS OpenNURBS) +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindOPENNURBS +-------- + +Find the native OPENNURBS includes and library. + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``OPENNURBS::OPENNURBS``, if +OPENNURBS has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +:: + + OPENNURBS_INCLUDE_DIRS - where to find opennurbs.h, etc. + OPENNURBS_LIBRARIES - List of libraries when using openNURBS. + OPENNURBS_FOUND - True if openNURBS found. + +Hints +^^^^^ + +A user may set ``OPENNURBS_ROOT`` to a openNURBS installation root to tell this +module where to look. +#]=======================================================================] + +set(_OPENNURBS_SEARCHES) + +# Search OPENNURBS_ROOT first if it is set. +if(OPENNURBS_ROOT) + set(_OPENNURBS_SEARCH_ROOT PATHS ${OPENNURBS_ROOT} NO_DEFAULT_PATH) + list(APPEND _OPENNURBS_SEARCHES _OPENNURBS_SEARCH_ROOT) +endif() + +# Normal search. +set(_OPENNURBS_x86 "(x86)") +set(_OPENNURBS_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/openNURBS" + "$ENV{ProgramFiles${_OPENNURBS_x86}}/openNURBS") +unset(_OPENNURBS_x86) +list(APPEND _OPENNURBS_SEARCHES _OPENNURBS_SEARCH_NORMAL) + +set(OPENNURBS_NAMES openNURBS) + +# Try each search configuration. +foreach(search ${_OPENNURBS_SEARCHES}) + find_path(OPENNURBS_INCLUDE_DIR NAMES opennurbs.h ${${search}} PATH_SUFFIXES include include/openNURBS openNURBS) +endforeach() + +# Allow OPENNURBS_LIBRARY to be set manually, as the location of the openNURBS library +if(NOT OPENNURBS_LIBRARY) + foreach(search ${_OPENNURBS_SEARCHES}) + find_library(OPENNURBS_LIBRARY NAMES ${OPENNURBS_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + endforeach() +endif() + +unset(OPENNURBS_NAMES) + +mark_as_advanced(OPENNURBS_INCLUDE_DIR) include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(OPENNURBS DEFAULT_MSG OPENNURBS_LIBRARY OPENNURBS_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(OPENNURBS REQUIRED_VARS OPENNURBS_LIBRARY OPENNURBS_INCLUDE_DIR) if(OPENNURBS_FOUND) - set(OPENNURBS_INCLUDE_DIRS ${OPENNURBS_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR}) - list(REMOVE_DUPLICATES OPENNURBS_INCLUDE_DIR) - set(OPENNURBS_LIBRARIES ${OPENNURBS_LIBRARY} ${ZLIB_LIBRARY}) + set(OPENNURBS_INCLUDE_DIRS ${OPENNURBS_INCLUDE_DIR}) + + if(NOT OPENNURBS_LIBRARIES) + set(OPENNURBS_LIBRARIES ${OPENNURBS_LIBRARY}) + endif() + + if(NOT TARGET OPENNURBS::OPENNURBS) + add_library(OPENNURBS::OPENNURBS UNKNOWN IMPORTED) + set_target_properties(OPENNURBS::OPENNURBS PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${OPENNURBS_INCLUDE_DIRS}") + + if(OPENNURBS_LIBRARY_RELEASE) + set_property(TARGET OPENNURBS::OPENNURBS APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(OPENNURBS::OPENNURBS PROPERTIES + IMPORTED_LOCATION_RELEASE "${OPENNURBS_LIBRARY_RELEASE}") + endif() + + if(OPENNURBS_LIBRARY_DEBUG) + set_property(TARGET OPENNURBS::OPENNURBS APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(OPENNURBS::OPENNURBS PROPERTIES + IMPORTED_LOCATION_DEBUG "${OPENNURBS_LIBRARY_DEBUG}") + endif() + + if(NOT OPENNURBS_LIBRARY_RELEASE AND NOT OPENNURBS_LIBRARY_DEBUG) + set_property(TARGET OPENNURBS::OPENNURBS APPEND PROPERTY + IMPORTED_LOCATION "${OPENNURBS_LIBRARY}") + endif() + endif() endif() -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/FindOSL.cmake b/misc/CMake/FindOSL.cmake index b370b959052..a8a3a2a2cbb 100644 --- a/misc/CMake/FindOSL.cmake +++ b/misc/CMake/FindOSL.cmake @@ -1,7 +1,7 @@ # F I N D O S L . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindPERPLEX.cmake b/misc/CMake/FindPERPLEX.cmake index 85be047bd6c..583b7971b51 100644 --- a/misc/CMake/FindPERPLEX.cmake +++ b/misc/CMake/FindPERPLEX.cmake @@ -10,7 +10,7 @@ # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel @@ -44,9 +44,35 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= -find_program(PERPLEX_EXECUTABLE perplex DOC "path to the perplex executable") +set(_PERPLEX_SEARCHES) + +# Search PERPLEX_ROOT first if it is set. +if(PERPLEX_ROOT) + set(_PERPLEX_SEARCH_ROOT PATHS ${PERPLEX_ROOT} NO_DEFAULT_PATH) + list(APPEND _PERPLEX_SEARCHES _PERPLEX_SEARCH_ROOT) +endif() + +# Normal search. +set(_PERPLEX_x86 "(x86)") +set(_PERPLEX_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/perplex" + "$ENV{ProgramFiles${_PERPLEX_x86}}/perplex") +unset(_PERPLEX_x86) +list(APPEND _PERPLEX_SEARCHES _PERPLEX_SEARCH_NORMAL) + +set(PERPLEX_NAMES perplex) + +# Try each search configuration. +foreach(search ${_PERPLEX_SEARCHES}) + find_program(PERPLEX_EXECUTABLE perplex ${${search}} PATH_SUFFIXES bin) +endforeach() mark_as_advanced(PERPLEX_EXECUTABLE) +foreach(search ${_PERPLEX_SEARCHES}) + find_file(PERPLEX_TEMPLATE perplex_template.c ${${search}} PATH_SUFFIXES ${DATA_DIR} ${DATA_DIR}/perplex) +endforeach() +mark_as_advanced(PERPLEX_TEMPLATE) + if(PERPLEX_EXECUTABLE AND NOT PERPLEX_TEMPLATE) get_filename_component(perplex_path ${PERPLEX_EXECUTABLE} PATH) if(perplex_path) @@ -96,7 +122,7 @@ mark_as_advanced(PERPLEX_TEMPLATE) # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel @@ -141,6 +167,10 @@ if(NOT COMMAND PERPLEX_TARGET) get_filename_component(IN_FILE_WE ${Input} NAME_WE) set(PVAR_PREFIX ${Name}_${IN_FILE_WE}) + if (TARGET perplex_stage) + set(DEP_TARGET perplex_stage) + endif (TARGET perplex_stage) + if(${ARGC} GREATER 3) CMAKE_PARSE_ARGUMENTS(${PVAR_PREFIX} "" "TEMPLATE;OUT_SRC_FILE;OUT_HDR_FILE;WORKING_DIR" "" ${ARGN}) endif(${ARGC} GREATER 3) @@ -200,7 +230,7 @@ if(NOT COMMAND PERPLEX_TARGET) OUTPUT ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${perplex_in_file} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE} COMMAND ${PERPLEX_EXECUTABLE} -c -o ${re2c_src} -i ${${PVAR_PREFIX}_OUT_HDR_FILE} -t ${${PVAR_PREFIX}_TEMPLATE} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE} - DEPENDS ${Input} ${${PVAR_PREFIX}_TEMPLATE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} + DEPENDS ${Input} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET} WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR} COMMENT "[PERPLEX][${Name}] Generating re2c input with ${PERPLEX_EXECUTABLE}" ) @@ -209,7 +239,7 @@ if(NOT COMMAND PERPLEX_TARGET) add_custom_command( OUTPUT ${${PVAR_PREFIX}_OUT_SRC_FILE} COMMAND ${RE2C_EXECUTABLE} --no-debug-info --no-generation-date -c -o ${${PVAR_PREFIX}_OUT_SRC_FILE} ${re2c_src} - DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} + DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET} WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR} COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}" ) @@ -217,7 +247,7 @@ if(NOT COMMAND PERPLEX_TARGET) add_custom_command( OUTPUT ${${PVAR_PREFIX}_OUT_SRC_FILE} COMMAND ${RE2C_EXECUTABLE} --no-generation-date -c -o ${${PVAR_PREFIX}_OUT_SRC_FILE} ${re2c_src} - DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} + DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET} WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR} COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}" ) diff --git a/misc/CMake/FindPOLY2TRI.cmake b/misc/CMake/FindPOLY2TRI.cmake new file mode 100644 index 00000000000..0f0f74468df --- /dev/null +++ b/misc/CMake/FindPOLY2TRI.cmake @@ -0,0 +1,102 @@ +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindPOLY2TRI +-------- + +Find the native POLY2TRI includes and library. + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``POLY2TRI::POLY2TRI``, if +POLY2TRI has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +:: + + POLY2TRI_INCLUDE_DIRS - where to find poly2tri/poly2tri.h, etc. + POLY2TRI_LIBRARIES - List of libraries when using poly2tri. + POLY2TRI_FOUND - True if poly2tri found. + +Hints +^^^^^ + +A user may set ``POLY2TRI_ROOT`` to a poly2tri installation root to tell this +module where to look. +#]=======================================================================] + +set(_POLY2TRI_SEARCHES) + +# Search POLY2TRI_ROOT first if it is set. +if(POLY2TRI_ROOT) + set(_POLY2TRI_SEARCH_ROOT PATHS ${POLY2TRI_ROOT} NO_DEFAULT_PATH) + list(APPEND _POLY2TRI_SEARCHES _POLY2TRI_SEARCH_ROOT) +endif() + +# Normal search. +set(_POLY2TRI_x86 "(x86)") +set(_POLY2TRI_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/poly2tri" + "$ENV{ProgramFiles${_POLY2TRI_x86}}/poly2tri") +unset(_POLY2TRI_x86) +list(APPEND _POLY2TRI_SEARCHES _POLY2TRI_SEARCH_NORMAL) + +set(POLY2TRI_NAMES poly2tri) + +# Try each search configuration. +foreach(search ${_POLY2TRI_SEARCHES}) + find_path(POLY2TRI_INCLUDE_DIR NAMES poly2tri/poly2tri.h ${${search}} PATH_SUFFIXES include include/poly2tri poly2tri) +endforeach() + +# Allow POLY2TRI_LIBRARY to be set manually, as the location of the poly2tri library +if(NOT POLY2TRI_LIBRARY) + foreach(search ${_POLY2TRI_SEARCHES}) + find_library(POLY2TRI_LIBRARY NAMES ${POLY2TRI_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + endforeach() +endif() + +unset(POLY2TRI_NAMES) + +mark_as_advanced(POLY2TRI_INCLUDE_DIR) + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(POLY2TRI REQUIRED_VARS POLY2TRI_LIBRARY POLY2TRI_INCLUDE_DIR) + +if(POLY2TRI_FOUND) + set(POLY2TRI_INCLUDE_DIRS ${POLY2TRI_INCLUDE_DIR}) + + if(NOT POLY2TRI_LIBRARIES) + set(POLY2TRI_LIBRARIES ${POLY2TRI_LIBRARY}) + endif() + + if(NOT TARGET POLY2TRI::POLY2TRI) + add_library(POLY2TRI::POLY2TRI UNKNOWN IMPORTED) + set_target_properties(POLY2TRI::POLY2TRI PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${POLY2TRI_INCLUDE_DIRS}") + + if(POLY2TRI_LIBRARY_RELEASE) + set_property(TARGET POLY2TRI::POLY2TRI APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(POLY2TRI::POLY2TRI PROPERTIES + IMPORTED_LOCATION_RELEASE "${POLY2TRI_LIBRARY_RELEASE}") + endif() + + if(POLY2TRI_LIBRARY_DEBUG) + set_property(TARGET POLY2TRI::POLY2TRI APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(POLY2TRI::POLY2TRI PROPERTIES + IMPORTED_LOCATION_DEBUG "${POLY2TRI_LIBRARY_DEBUG}") + endif() + + if(NOT POLY2TRI_LIBRARY_RELEASE AND NOT POLY2TRI_LIBRARY_DEBUG) + set_property(TARGET POLY2TRI::POLY2TRI APPEND PROPERTY + IMPORTED_LOCATION "${POLY2TRI_LIBRARY}") + endif() + endif() +endif() diff --git a/misc/CMake/FindPkgMacros.cmake b/misc/CMake/FindPkgMacros.cmake index 01f7c4eda70..5f2ce7a9d4e 100644 --- a/misc/CMake/FindPkgMacros.cmake +++ b/misc/CMake/FindPkgMacros.cmake @@ -1,7 +1,7 @@ # F I N D P K G M A C R O S . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindRE2C.cmake b/misc/CMake/FindRE2C.cmake index e59a193d975..661a588d80d 100644 --- a/misc/CMake/FindRE2C.cmake +++ b/misc/CMake/FindRE2C.cmake @@ -3,7 +3,29 @@ # #============================================================================= -find_program(RE2C_EXECUTABLE re2c DOC "path to the re2c executable") +set(_RE2C_SEARCHES) + +# Search RE2C_ROOT first if it is set. +if(RE2C_ROOT) + set(_RE2C_SEARCH_ROOT PATHS ${RE2C_ROOT} NO_DEFAULT_PATH) + list(APPEND _RE2C_SEARCHES _RE2C_SEARCH_ROOT) +endif() + +# Normal search. +set(_RE2C_x86 "(x86)") +set(_RE2C_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/re2c" + "$ENV{ProgramFiles${_RE2C_x86}}/re2c") +unset(_RE2C_x86) +list(APPEND _RE2C_SEARCHES _RE2C_SEARCH_NORMAL) + +set(RE2C_NAMES re2c) + +# Try each search configuration. +foreach(search ${_RE2C_SEARCHES}) + find_program(RE2C_EXECUTABLE re2c ${${search}} PATH_SUFFIXES bin) +endforeach() + mark_as_advanced(RE2C_EXECUTABLE) include(FindPackageHandleStandardArgs) @@ -42,7 +64,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(RE2C DEFAULT_MSG RE2C_EXECUTABLE) # ==================================================================== # #============================================================================= -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel diff --git a/misc/CMake/FindREGEX.cmake b/misc/CMake/FindREGEX.cmake index ffeb0bd2860..b81395a8bea 100644 --- a/misc/CMake/FindREGEX.cmake +++ b/misc/CMake/FindREGEX.cmake @@ -1,7 +1,7 @@ # F I N D R E G E X . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindSCL.cmake b/misc/CMake/FindSCL.cmake index cc5762b82a0..381b01efc37 100644 --- a/misc/CMake/FindSCL.cmake +++ b/misc/CMake/FindSCL.cmake @@ -1,7 +1,7 @@ # F I N D S C L . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindSSE.cmake b/misc/CMake/FindSSE.cmake deleted file mode 100644 index 0122f19f7cb..00000000000 --- a/misc/CMake/FindSSE.cmake +++ /dev/null @@ -1,166 +0,0 @@ -# Copyright (c) 2016- Facebook, Inc (Adam Paszke) -# Copyright (c) 2014- Facebook, Inc (Soumith Chintala) -# Copyright (c) 2011-2014 Idiap Research Institute (Ronan Collobert) -# Copyright (c) 2012-2014 Deepmind Technologies (Koray Kavukcuoglu) -# Copyright (c) 2011-2012 NEC Laboratories America (Koray Kavukcuoglu) -# Copyright (c) 2011-2013 NYU (Clement Farabet) -# Copyright (c) 2006-2010 NEC Laboratories America (Ronan Collobert, Leon Bottou, Iain Melvin, Jason Weston) -# Copyright (c) 2006 Idiap Research Institute (Samy Bengio) -# Copyright (c) 2001-2004 Idiap Research Institute (Ronan Collobert, Samy Bengio, Johnny Mariethoz) -# -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the names of Facebook, Deepmind Technologies, NYU, NEC Laboratories America -# and IDIAP Research Institute nor the names of its contributors may be -# used to endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -include(CheckCSourceRuns) -include(CheckCXXSourceRuns) - -set(SSE1_CODE " - #include - - int main() - { - __m128 a; - float vals[4] = {0,0,0,0}; - a = _mm_loadu_ps(vals); - return 0; - }") - -set(SSE2_CODE " - #include - - int main() - { - __m128d a; - double vals[2] = {0,0}; - a = _mm_loadu_pd(vals); - return 0; - }") - -set(SSE3_CODE " - #include - - int main( ) - { - const int vals[4] = {0,0,0,0}; - __m128i a; - a = _mm_lddqu_si128( (const __m128i*)vals ); - return 0; - }") - -set(SSE4_1_CODE " - #include - - int main () - { - __m128i a = {0,0,0,0}, b = {0,0,0,0}; - __m128i res = _mm_max_epi8(a, b); - - return 0; - } -") - -set(SSE4_2_CODE " - #include - - int main() - { - __m128i a = {0,0,0,0}, b = {0,0,0,0}, c = {0,0,0,0}; - c = _mm_cmpgt_epi64(a, b); - return 0; - } -") - -set(AVX_CODE " - #include - - int main() - { - __m256 a; - a = _mm256_set1_ps(0); - return 0; - } -") - -set(AVX2_CODE " - #include - - int main() - { - __m256i a = {0}; - a = _mm256_abs_epi16(a); - return 0; - } -") - -macro(CHECK_SSE lang type flags) - set(__FLAG_I 1) - set(CMAKE_REQUIRED_FLAGS_SAVE ${CMAKE_REQUIRED_FLAGS}) - foreach(__FLAG ${flags}) - if(NOT ${lang}_${type}_FOUND) - set(CMAKE_REQUIRED_FLAGS ${__FLAG}) - if("${lang}" STREQUAL "CXX") - CHECK_CXX_SOURCE_RUNS("${${type}_CODE}" "${lang}_HAS_${type}_${__FLAG_I}") - else() - CHECK_C_SOURCE_RUNS("${${type}_CODE}" "${lang}_HAS_${type}_${__FLAG_I}") - endif("${lang}" STREQUAL "CXX") - if(${lang}_HAS_${type}_${__FLAG_I}) - set(${lang}_${type}_FOUND TRUE CACHE BOOL "${lang} ${type} support") - set(${lang}_${type}_FLAGS "${__FLAG}" CACHE STRING "${lang} ${type} flags") - endif(${lang}_HAS_${type}_${__FLAG_I}) - math(EXPR __FLAG_I "${__FLAG_I}+1") - endif(NOT ${lang}_${type}_FOUND) - endforeach(__FLAG ${flags}) - set(CMAKE_REQUIRED_FLAGS ${CMAKE_REQUIRED_FLAGS_SAVE}) - - if(NOT ${lang}_${type}_FOUND) - set(${lang}_${type}_FOUND FALSE CACHE BOOL "${lang} ${type} support") - set(${lang}_${type}_FLAGS "" CACHE STRING "${lang} ${type} flags") - endif(NOT ${lang}_${type}_FOUND) - - mark_as_advanced(${lang}_${type}_FOUND ${lang}_${type}_FLAGS) - -endmacro(CHECK_SSE) - -# Examples: - -# CHECK_SSE(C "SSE1" " ;-msse;/arch:SSE") -# CHECK_SSE(C "SSE2" " ;-msse2;/arch:SSE2") -# CHECK_SSE(C "SSE3" " ;-msse3;/arch:SSE3") -# CHECK_SSE(C "SSE4_1" " ;-msse4.1;-msse4;/arch:SSE4") -# CHECK_SSE(C "SSE4_2" " ;-msse4.2;-msse4;/arch:SSE4") -# CHECK_SSE(C "AVX" " ;-mavx;/arch:AVX") -# CHECK_SSE(C "AVX2" " ;-mavx2 -mfma;/arch:AVX2") - -# CHECK_SSE(CXX "SSE1" " ;-msse;/arch:SSE") -# CHECK_SSE(CXX "SSE2" " ;-msse2;/arch:SSE2") -# CHECK_SSE(CXX "SSE3" " ;-msse3;/arch:SSE3") -# CHECK_SSE(CXX "SSE4_1" " ;-msse4.1;-msse4;/arch:SSE4") -# CHECK_SSE(CXX "SSE4_2" " ;-msse4.2;-msse4;/arch:SSE4") -# CHECK_SSE(CXX "AVX" " ;-mavx;/arch:AVX") -# CHECK_SSE(CXX "AVX2" " ;-mavx2 -mfma;/arch:AVX2") diff --git a/misc/CMake/FindSTEPCODE.cmake b/misc/CMake/FindSTEPCODE.cmake new file mode 100644 index 00000000000..d23b6cdbb79 --- /dev/null +++ b/misc/CMake/FindSTEPCODE.cmake @@ -0,0 +1,164 @@ +# F I N D S T E P C O D E . C M A K E +# BRL-CAD +# +# Copyright (c) 2013-2021 United States Government as represented by +# the U.S. Army Research Laboratory. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# 3. The name of the author may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# +### +# - Find STEPCODE +# +# The following variables are set: +# +# STEPCODE_INCLUDE_DIRS - where to find stepcode headers +# STEPCODE_LIBRARIES - List of libraries when using stepcode. +# STEPCODE_FOUND - True if stepcode found. + + +# A user may set ``STEPCODE_ROOT`` to a stepcode installation root to tell this +# module where to look. +# ============================================================================= + +# Check that each of the libraries has an expected header, +# as well as the toplevel defined headers. (TODO - are the +# latter needed beyond the stepcode build itself? Trim this +# to the minimum actually needed...) +set(STEPCODE_HDRS + base/sc_benchmark.h + cldai/sdaiObject.h + cleditor/STEPfile.h + clstepcore/sdai.h + clutils/gennodearray.h + exppp/exppp.h + express/express.h + sc_cf.h + ) + +set(STEPCODE_LIBS + base + express + exppp + stepcore + stepeditor + stepdai + steputils + ) + +set(STEPCODE_EXEC + exp2cxx + exppp + ) + +# Search STEPCODE_ROOT first if it is set. +set(_STEPCODE_SEARCHES) +if(STEPCODE_ROOT) + set(_STEPCODE_SEARCH_ROOT PATHS ${STEPCODE_ROOT} NO_DEFAULT_PATH) + list(APPEND _STEPCODE_SEARCHES _STEPCODE_SEARCH_ROOT) +endif() + +# Try each search configuration. +foreach(search ${_STEPCODE_SEARCHES}) + find_path(STEPCODE_BASE_DIR NAMES sc_benchmark.h ${${search}} PATH_SUFFIXES include include/stepcode/base) + find_path(STEPCODE_DAI_DIR NAMES sdaiObject.h ${${search}} PATH_SUFFIXES include include/stepcode/cldai) + find_path(STEPCODE_EDITOR_DIR NAMES STEPfile.h ${${search}} PATH_SUFFIXES include include/stepcode/cleditor) + find_path(STEPCODE_STEPCORE_DIR NAMES sdai.h ${${search}} PATH_SUFFIXES include include/stepcode/clstepcore) + find_path(STEPCODE_UTILS_DIR NAMES gennodearray.h ${${search}} PATH_SUFFIXES include include/stepcode/clutils) + find_path(STEPCODE_EXPPP_DIR NAMES exppp.h ${${search}} PATH_SUFFIXES include include/stepcode/exppp) + find_path(STEPCODE_EXPRESS_DIR NAMES express.h ${${search}} PATH_SUFFIXES include include/stepcode/express) + find_path(STEPCODE_INCLUDE_DIR NAMES sc_cf.h ${${search}} PATH_SUFFIXES include include/stepcode) + #TODO - should be an all-or-nothing for the set... +endforeach() + +# Allow STEPCODE_LIBRARY to be set manually, as the location of the netpbm library +foreach(search ${_STEPCODE_SEARCHES}) + find_library(STEPCODE_BASE_LIBRARY NAMES base NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + find_library(STEPCODE_EXPRESS_LIBRARY NAMES express NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + find_library(STEPCODE_EXPPP_LIBRARY NAMES exppp NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + find_library(STEPCODE_CORE_LIBRARY NAMES stepcore NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + find_library(STEPCODE_EDITOR_LIBRARY NAMES stepeditor NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + find_library(STEPCODE_DAI_LIBRARY NAMES stepdai NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + find_library(STEPCODE_UTILS_LIBRARY NAMES steputils NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + #TODO - should be an all-or-nothing for the set... +endforeach() + +# Allow STEPCODE_LIBRARY to be set manually, as the location of the netpbm library +foreach(search ${_STEPCODE_SEARCHES}) + find_program(EXP2CXX_EXECUTABLE exp2cxx ${${search}} PATH_SUFFIXES bin) + find_program(EXPPP_EXECUTABLE exppp ${${search}} PATH_SUFFIXES bin) + #TODO - should be an all-or-nothing for the set... +endforeach() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(STEPCODE DEFAULT_MSG + STEPCODE_BASE_DIR + STEPCODE_DAI_DIR + STEPCODE_EDITOR_DIR + STEPCODE_STEPCORE_DIR + STEPCODE_UTILS_DIR + STEPCODE_EXPPP_DIR + STEPCODE_EXPRESS_DIR + STEPCODE_INCLUDE_DIR + STEPCODE_BASE_LIBRARY + STEPCODE_EXPRESS_LIBRARY + STEPCODE_EXPPP_LIBRARY + STEPCODE_CORE_LIBRARY + STEPCODE_EDITOR_LIBRARY + STEPCODE_DAI_LIBRARY + STEPCODE_UTILS_LIBRARY + EXP2CXX_EXECUTABLE + EXPPP_EXECUTABLE + ) + +if (STEPCODE_FOUND) + set(STEPCODE_INCLUDE_DIRS + ${STEPCODE_INCLUDE_DIR} + ${STEPCODE_BASE_DIR} + ${STEPCODE_STEPCORE_DIR} + ${STEPCODE_EDITOR_DIR} + ${STEPCODE_UTILS_DIR} + ${STEPCODE_DAI_DIR} + ) + set(STEPCODE_LIBRARIES + ${STEPCODE_BASE_LIBRARY} + ${STEPCODE_EXPRESS_LIBRARY} + ${STEPCODE_EXPPP_LIBRARY} + ${STEPCODE_CORE_LIBRARY} + ${STEPCODE_EDITOR_LIBRARY} + ${STEPCODE_DAI_LIBRARY} + ${STEPCODE_UTILS_LIBRARY} + ) +endif() + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/FindSTL.cmake b/misc/CMake/FindSTL.cmake index 6cdfef36a0a..f8819d59bf3 100644 --- a/misc/CMake/FindSTL.cmake +++ b/misc/CMake/FindSTL.cmake @@ -1,7 +1,7 @@ # F I N D S T L . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindShellDeps.cmake b/misc/CMake/FindShellDeps.cmake index 6a6b51fdbba..b00d6afac1e 100644 --- a/misc/CMake/FindShellDeps.cmake +++ b/misc/CMake/FindShellDeps.cmake @@ -1,7 +1,7 @@ # F I N D S H E L L D E P S . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindTCL.cmake b/misc/CMake/FindTCL.cmake index 4edc8ebd844..0cfeb73c6c3 100644 --- a/misc/CMake/FindTCL.cmake +++ b/misc/CMake/FindTCL.cmake @@ -11,24 +11,39 @@ library is. This code sets the following variables: :: - TCL_FOUND = Tcl was found - TK_FOUND = Tk was found - TCLTK_FOUND = Tcl and Tk were found - TCLSH_FOUND = TRUE if tclsh has been found - TCL_LIBRARY = path to Tcl library (tcl tcl80) - TCL_INCLUDE_PATH = path to where tcl.h can be found - TCL_TCLSH = path to tclsh binary (tcl tcl80) - TK_LIBRARY = path to Tk library (tk tk80 etc) - TK_INCLUDE_PATH = path to where tk.h can be found - TK_WISH = full path to the wish executable - TCL_STUB_LIBRARY = path to Tcl stub library - TK_STUB_LIBRARY = path to Tk stub library - TTK_STUB_LIBRARY = path to ttk stub library +TCL_FOUND = Tcl was found +TCLSH_FOUND = TRUE if tclsh has been found +TCL_LIBRARY = path to Tcl library (tcl tcl80) +TCL_INCLUDE_PATH = path to where tcl.h can be found +TCL_TCLSH = path to tclsh binary (tcl tcl80) + + + +If TCL_ENABLE_TK is set, the following are also set: + +:: + +TK_FOUND = Tk was found +TCLTK_FOUND = Tcl and Tk were found +TK_LIBRARY = path to Tk library (tk tk80 etc) +TK_INCLUDE_PATH = path to where tk.h can be found +TK_WISH = full path to the wish executable +TCL_STUB_LIBRARY = path to Tcl stub library +TK_STUB_LIBRARY = path to Tk stub library +TTK_STUB_LIBRARY = path to ttk stub library #]=======================================================================] include(CMakeFindFrameworks) +set(_TCL_SEARCHES) + +# Search TCL_ROOT first if it is set. +if(TCL_ROOT) + set(_TCL_SEARCH_ROOT PATHS ${TCL_ROOT} NO_DEFAULT_PATH) + list(APPEND _TCL_SEARCHES _TCL_SEARCH_ROOT) +endif() + if(WIN32) get_filename_component( ActiveTcl_CurrentVersion @@ -44,8 +59,8 @@ if(WIN32) "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/bin" ) - get_filename_component( - ActiveTcl_CurrentVersion + get_filename_component( + ActiveTcl_CurrentVersion "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]" NAME) set(TCLTK_POSSIBLE_LIB_PATHS ${TCLTK_POSSIBLE_LIB_PATHS} @@ -61,7 +76,7 @@ if(WIN32) "C:/Tcl/lib" ) - set(TCLTK_POSSIBLE_INCLUDE_PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS} + set(TCLTK_POSSIBLE_INCLUDE_PATHS ${TCLTK_POSSIBLE_INCLUDE_PATHS} "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/include" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/include" "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/include" @@ -87,34 +102,39 @@ set(TCL_TCLSH_NAMES tclsh80 tclsh8.0 ) if(CYGWIN) - set(TCL_TCLSH_NAMES ${TCL_TCLSH_NAMES} cygtclsh83 cygtclsh80) + set(TCL_TCLSH_NAMES ${TCL_TCLSH_NAMES} cygtclsh83 cygtclsh80) endif(CYGWIN) +foreach(search ${_TCL_SEARCHES}) + find_program(TCL_TCLSH NAMES ${TCL_TCLSH_NAMES} ${${search}} PATH_SUFFIXES bin) +endforeach() +if (NOT TCL_TCLSH) + find_program(TCL_TCLSH NAMES ${TCL_TCLSH_NAMES} HINTS ${TCLTK_POSSIBLE_BIN_PATHS}) +endif (NOT TCL_TCLSH) + +if (TCL_ENABLE_TK) + set(TK_WISH_NAMES + wish + wish${TCL_LIBRARY_VERSION} wish${TK_LIBRARY_VERSION} wish${TCL_TCLSH_VERSION} + wish86 wish8.6 + wish85 wish8.5 + wish84 wish8.4 + wish83 wish8.3 + wish82 wish8.2 + wish80 wish8.0 + ) -find_program(TCL_TCLSH - NAMES ${TCL_TCLSH_NAMES} - HINTS ${TCLTK_POSSIBLE_BIN_PATHS} - ) - -set(TK_WISH_NAMES - wish - wish${TCL_LIBRARY_VERSION} wish${TK_LIBRARY_VERSION} wish${TCL_TCLSH_VERSION} - wish86 wish8.6 - wish85 wish8.5 - wish84 wish8.4 - wish83 wish8.3 - wish82 wish8.2 - wish80 wish8.0 - ) - -if(CYGWIN) - set(TK_WISH_NAMES ${TK_WISH_NAMES} cygwish80 ) -endif() + if(CYGWIN) + set(TK_WISH_NAMES ${TK_WISH_NAMES} cygwish80 ) + endif() -find_program(TK_WISH - NAMES ${TK_WISH_NAMES} - HINTS ${TCLTK_POSSIBLE_BIN_PATHS} - ) + foreach(search ${_TCL_SEARCHES}) + find_program(TK_WISH NAMES ${TK_WISH_NAMES} ${${search}} PATH_SUFFIXES bin) + endforeach() + if (NOT TK_WISH) + find_program(TK_WISH NAMES ${TK_WISH_NAMES} HINTS ${TCLTK_POSSIBLE_BIN_PATHS}) + endif (NOT TK_WISH) +endif (TCL_ENABLE_TK) if(TCLSH_VERSION_STRING) set(TCL_TCLSH_VERSION "${TCLSH_VERSION_STRING}") @@ -127,26 +147,37 @@ endif() set(TCLTK_POSSIBLE_LIB_PATHS "${TCL_INCLUDE_PATH_PARENT}/lib" - "${TK_INCLUDE_PATH_PARENT}/lib" "${TCL_LIBRARY_PATH}" - "${TK_LIBRARY_PATH}" "${TCL_TCLSH_PATH_PARENT}/lib" - "${TK_WISH_PATH_PARENT}/lib" -) + ) +if (TCL_ENABLE_TK) + set(TCLTK_POSSIBLE_LIB_PATHS + ${TCLTK_POSSIBLE_LIB_PATHS} + "${TK_INCLUDE_PATH_PARENT}/lib" + "${TK_LIBRARY_PATH}" + "${TK_WISH_PATH_PARENT}/lib" + ) +endif (TCL_ENABLE_TK) set(TCLTK_POSSIBLE_LIB_PATH_SUFFIXES + lib + lib/tcl lib/tcl/tcl8.7 - lib/tcl/tk8.7 lib/tcl/tcl8.6 - lib/tcl/tk8.6 lib/tcl/tcl8.5 - lib/tcl/tk8.5 lib/tcl/tcl8.4 - lib/tcl/tk8.4 -) + ) +if (TCL_ENABLE_TK) + set(TCLTK_POSSIBLE_LIB_PATH_SUFFIXES + ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES} + lib/tcl/tk8.7 + lib/tcl/tk8.6 + lib/tcl/tk8.5 + lib/tcl/tk8.4 + ) +endif (TCL_ENABLE_TK) -find_library(TCL_LIBRARY - NAMES +set(TCL_POSSIBLE_LIB_NAMES tcl tcl${TCL_LIBRARY_VERSION} tcl${TCL_TCLSH_VERSION} tcl${TK_WISH_VERSION} tcl87 tcl8.7 tcl87t tcl8.7t @@ -156,12 +187,25 @@ find_library(TCL_LIBRARY tcl83 tcl8.3 tcl82 tcl8.2 tcl80 tcl8.0 - PATHS ${TCLTK_POSSIBLE_LIB_PATHS} - PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES} ) -find_library(TCL_STUB_LIBRARY - NAMES +if(NOT TCL_LIBRARY) + foreach(search ${_TCL_SEARCHES}) + find_library(TCL_LIBRARY + NAMES ${TCL_POSSIBLE_LIB_NAMES} + NAMES_PER_DIR ${${search}} + PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}) + endforeach() +endif() +if(NOT TCL_LIBRARY) + find_library(TCL_LIBRARY + NAMES ${TCL_POSSIBLE_LIB_NAMES} + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} + PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES} + ) +endif(NOT TCL_LIBRARY) + +set(TCLSTUB_POSSIBLE_LIB_NAMES tclstub tclstub${TK_LIBRARY_VERSION} tclstub${TCL_TCLSH_VERSION} tclstub${TK_WISH_VERSION} tclstub87 tclstub8.7 @@ -171,51 +215,111 @@ find_library(TCL_STUB_LIBRARY tclstub83 tclstub8.3 tclstub82 tclstub8.2 tclstub80 tclstub8.0 - PATHS ${TCLTK_POSSIBLE_LIB_PATHS} -) - -find_library(TK_LIBRARY - NAMES - tk - tk${TK_LIBRARY_VERSION} tk${TCL_TCLSH_VERSION} tk${TK_WISH_VERSION} - tk87 tk8.7 tk87t tk8.7t - tk86 tk8.6 tk86t tk8.6t - tk85 tk8.5 - tk84 tk8.4 - tk83 tk8.3 - tk82 tk8.2 - tk80 tk8.0 - PATHS ${TCLTK_POSSIBLE_LIB_PATHS} - PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES} ) +if(NOT TCL_STUB_LIBRARY) + foreach(search ${_TCL_SEARCHES}) + find_library(TCL_STUB_LIBRARY + NAMES ${TCLSTUB_POSSIBLE_LIB_NAMES} + NAMES_PER_DIR ${${search}} + PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES} + ) + endforeach() +endif() +if(NOT TCL_STUB_LIBRARY) + find_library(TCL_STUB_LIBRARY + NAMES ${TCLSTUB_POSSIBLE_LIB_NAMES} + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} + ) +endif() + +if (TCL_ENABLE_TK) + set(TK_POSSIBLE_LIB_NAMES + tk + tk${TK_LIBRARY_VERSION} tk${TCL_TCLSH_VERSION} tk${TK_WISH_VERSION} + tk87 tk8.7 tk87t tk8.7t + tk86 tk8.6 tk86t tk8.6t + tk85 tk8.5 + tk84 tk8.4 + tk83 tk8.3 + tk82 tk8.2 + tk80 tk8.0 + ) -find_library(TK_STUB_LIBRARY - NAMES - tkstub - tkstub${TCL_LIBRARY_VERSION} tkstub${TCL_TCLSH_VERSION} tkstub${TK_WISH_VERSION} - tkstub87 tkstub8.7 - tkstub86 tkstub8.6 - tkstub85 tkstub8.5 - tkstub84 tkstub8.4 - tkstub83 tkstub8.3 - tkstub82 tkstub8.2 - tkstub80 tkstub8.0 - PATHS ${TCLTK_POSSIBLE_LIB_PATHS} -) - -find_library(TTK_STUB_LIBRARY - NAMES - ttkstub - ttkstub${TCL_LIBRARY_VERSION} ttkstub${TCL_TCLSH_VERSION} ttkstub${TK_WISH_VERSION} - ttkstub88 ttkstub8.8 - ttkstub87 ttkstub8.7 - ttkstub86 ttkstub8.6 - ttkstub85 ttkstub8.5 - PATHS ${TCLTK_POSSIBLE_LIB_PATHS} -) + if(NOT TK_LIBRARY) + foreach(search ${_TCL_SEARCHES}) + find_library(TK_LIBRARY + NAMES ${TK_POSSIBLE_LIB_NAMES} + NAMES_PER_DIR ${${search}} + PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES} + ) + endforeach() + endif() + if(NOT TK_LIBRARY) + find_library(TK_LIBRARY + NAMES ${TK_POSSIBLE_LIB_NAMES} + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} + PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES} + ) + endif(NOT TK_LIBRARY) + + set(TK_STUB_POSSIBLE_LIB_NAMES + tkstub + tkstub${TCL_LIBRARY_VERSION} tkstub${TCL_TCLSH_VERSION} tkstub${TK_WISH_VERSION} + tkstub87 tkstub8.7 + tkstub86 tkstub8.6 + tkstub85 tkstub8.5 + tkstub84 tkstub8.4 + tkstub83 tkstub8.3 + tkstub82 tkstub8.2 + tkstub80 tkstub8.0 + ) + + if(NOT TK_STUB_LIBRARY) + foreach(search ${_TCL_SEARCHES}) + find_library(TK_STUB_LIBRARY + NAMES ${TK_STUB_POSSIBLE_LIB_NAMES} + NAMES_PER_DIR ${${search}} + PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES} + ) + endforeach() + endif() + if(NOT TK_STUB_LIBRARY) + find_library(TK_STUB_LIBRARY + NAMES ${TK_STUB_POSSIBLE_LIB_NAMES} + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} + ) + endif() + + set(TTK_STUB_POSSIBLE_LIB_NAMES + ttkstub + ttkstub${TCL_LIBRARY_VERSION} ttkstub${TCL_TCLSH_VERSION} ttkstub${TK_WISH_VERSION} + ttkstub88 ttkstub8.8 + ttkstub87 ttkstub8.7 + ttkstub86 ttkstub8.6 + ttkstub85 ttkstub8.5 + ) + + if(NOT TTK_STUB_LIBRARY) + foreach(search ${_TCL_SEARCHES}) + find_library(TTK_STUB_LIBRARY + NAMES ${TTK_STUB_POSSIBLE_LIB_NAMES} + NAMES_PER_DIR ${${search}} + PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES} + ) + endforeach() + endif() + if(NOT TTK_STUB_LIBRARY) + find_library(TTK_STUB_LIBRARY + NAMES ${TTK_STUB_POSSIBLE_LIB_NAMES} + PATHS ${TCLTK_POSSIBLE_LIB_PATHS} + ) + endif() +endif (TCL_ENABLE_TK) CMAKE_FIND_FRAMEWORKS(Tcl) -CMAKE_FIND_FRAMEWORKS(Tk) +if (TCL_ENABLE_TK) + CMAKE_FIND_FRAMEWORKS(Tk) +endif (TCL_ENABLE_TK) set(TCL_FRAMEWORK_INCLUDES) if(Tcl_FRAMEWORKS) @@ -226,113 +330,150 @@ if(Tcl_FRAMEWORKS) endif() endif() -set(TK_FRAMEWORK_INCLUDES) -if(Tk_FRAMEWORKS) - if(NOT TK_INCLUDE_PATH) - foreach(dir ${Tk_FRAMEWORKS}) - set(TK_FRAMEWORK_INCLUDES ${TK_FRAMEWORK_INCLUDES} - ${dir}/Headers ${dir}/PrivateHeaders) - endforeach() +if (TCL_ENABLE_TK) + set(TK_FRAMEWORK_INCLUDES) + if(Tk_FRAMEWORKS) + if(NOT TK_INCLUDE_PATH) + foreach(dir ${Tk_FRAMEWORKS}) + set(TK_FRAMEWORK_INCLUDES ${TK_FRAMEWORK_INCLUDES} + ${dir}/Headers ${dir}/PrivateHeaders) + endforeach() + endif() endif() -endif() +endif (TCL_ENABLE_TK) set(TCLTK_POSSIBLE_INCLUDE_PATHS "${TCL_LIBRARY_PATH_PARENT}/include" - "${TK_LIBRARY_PATH_PARENT}/include" "${TCL_INCLUDE_PATH}" - "${TK_INCLUDE_PATH}" ${TCL_FRAMEWORK_INCLUDES} - ${TK_FRAMEWORK_INCLUDES} "${TCL_TCLSH_PATH_PARENT}/include" - "${TK_WISH_PATH_PARENT}/include" ) +if (TCL_ENABLE_TK) + set(TCLTK_POSSIBLE_INCLUDE_PATHS + ${TCLTK_POSSIBLE_INCLUDE_PATHS} + "${TCL_LIBRARY_PATH_PARENT}/include" + "${TCL_INCLUDE_PATH}" + ${TCL_FRAMEWORK_INCLUDES} + "${TCL_TCLSH_PATH_PARENT}/include" + ) +endif (TCL_ENABLE_TK) set(TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES - include/tcl${TK_LIBRARY_VERSION} + include include/tcl${TCL_LIBRARY_VERSION} include/tcl8.7 - include/tk8.7 include/tcl8.6 - include/tk8.6 include/tcl8.5 - include/tk8.5 include/tcl8.4 - include/tk8.4 include/tcl8.3 include/tcl8.2 include/tcl8.0 ) -find_path(TCL_INCLUDE_PATH - NAMES tcl.h - HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS} - PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES} - ) +if (TCL_ENABLE_TK) + set(TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES + ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES} + include/tcl${TK_LIBRARY_VERSION} + include/tk8.7 + include/tk8.6 + include/tk8.5 + include/tk8.4 + ) +endif (TCL_ENABLE_TK) -find_path(TK_INCLUDE_PATH - NAMES tk.h - HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS} - PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES} - ) -# IFF we have TCL_TK_SYSTEM_GRAPHICS set and have a system TK_WISH, check that the -# windowing system matches the specified type -if (NOT "${TCL_TK_SYSTEM_GRAPHICS}" STREQUAL "" AND TK_WISH AND NOT TARGET "${TK_WISH}") - set(tkwin_script " - set filename \"${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM\" - set fileId [open $filename \"w\"] - set windowingsystem [tk windowingsystem] - puts $fileId $windowingsystem - close $fileId - exit - ") - set(tkwin_scriptfile "${CMAKE_BINARY_DIR}/CMakeTmp/tk_windowingsystem.tcl") - set(WSYS "wm-NOTFOUND") - file(WRITE ${tkwin_scriptfile} ${tkwin_script}) - execute_process(COMMAND ${TK_WISH} ${tkwin_scriptfile} OUTPUT_VARIABLE EXECOUTPUT) - if (EXISTS "${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM") - file(READ "${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM" readresultvar) - string(REGEX REPLACE "\n" "" WSYS "${readresultvar}") - endif (EXISTS "${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM") - - # If we have no information about the windowing system or it does not match - # a specified system, the find_package detection has failed - if (NOT "${WSYS}" STREQUAL "${TCL_TK_SYSTEM_GRAPHICS}") - unset(TCL_LIBRARY CACHE) - unset(TCL_STUB_LIBRARY CACHE) - unset(TK_LIBRARY CACHE) - unset(TK_STUB_LIBRARY CACHE) - unset(TCL_FOUND CACHE) - unset(TK_FOUND CACHE) - unset(TCLTK_FOUND CACHE) - unset(TCLSH_FOUND CACHE) - unset(TCL_LIBRARY CACHE) - unset(TCL_INCLUDE_PATH CACHE) - unset(TCL_TCLSH CACHE) - unset(TK_LIBRARY CACHE) - unset(TK_INCLUDE_PATH CACHE) - unset(TK_WISH CACHE) - unset(TCL_STUB_LIBRARY CACHE) - unset(TK_STUB_LIBRARY CACHE) - unset(TTK_STUB_LIBRARY CACHE) - endif (NOT "${WSYS}" STREQUAL "${TCL_TK_SYSTEM_GRAPHICS}") -endif (NOT "${TCL_TK_SYSTEM_GRAPHICS}" STREQUAL "" AND TK_WISH AND NOT TARGET "${TK_WISH}") +foreach(search ${_TCL_SEARCHES}) + find_path(TCL_INCLUDE_PATH + NAMES tcl.h ${${search}} + PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES} + ) +endforeach() +if (NOT TCL_INCLUDE_PATH) + find_path(TCL_INCLUDE_PATH + NAMES tcl.h + HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS} + PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES} + ) +endif() + +if (TCL_ENABLE_TK) + + foreach(search ${_TCL_SEARCHES}) + find_path(TK_INCLUDE_PATH + NAMES tk.h ${${search}} + PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES} + ) + endforeach() + if (NOT TK_INCLUDE_PATH) + find_path(TK_INCLUDE_PATH + NAMES tk.h + HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS} + PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES} + ) + endif() + + # IFF we have TCL_TK_SYSTEM_GRAPHICS set and have a system TK_WISH, check that the + # windowing system matches the specified type + if (NOT "${TCL_TK_SYSTEM_GRAPHICS}" STREQUAL "" AND TK_WISH AND NOT TARGET "${TK_WISH}") + set(tkwin_script " + set filename \"${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM\" + set fileId [open $filename \"w\"] + set windowingsystem [tk windowingsystem] + puts $fileId $windowingsystem + close $fileId + exit + ") + set(tkwin_scriptfile "${CMAKE_BINARY_DIR}/CMakeTmp/tk_windowingsystem.tcl") + set(WSYS "wm-NOTFOUND") + file(WRITE ${tkwin_scriptfile} ${tkwin_script}) + execute_process(COMMAND ${TK_WISH} ${tkwin_scriptfile} OUTPUT_VARIABLE EXECOUTPUT) + if (EXISTS "${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM") + file(READ "${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM" readresultvar) + string(REGEX REPLACE "\n" "" WSYS "${readresultvar}") + endif (EXISTS "${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM") + + # If we have no information about the windowing system or it does not match + # a specified system, the find_package detection has failed + if (NOT "${WSYS}" STREQUAL "${TCL_TK_SYSTEM_GRAPHICS}") + unset(TCL_LIBRARY CACHE) + unset(TCL_STUB_LIBRARY CACHE) + unset(TK_LIBRARY CACHE) + unset(TK_STUB_LIBRARY CACHE) + unset(TCL_FOUND CACHE) + unset(TK_FOUND CACHE) + unset(TCLTK_FOUND CACHE) + unset(TCLSH_FOUND CACHE) + unset(TCL_LIBRARY CACHE) + unset(TCL_INCLUDE_PATH CACHE) + unset(TCL_TCLSH CACHE) + unset(TK_LIBRARY CACHE) + unset(TK_INCLUDE_PATH CACHE) + unset(TK_WISH CACHE) + unset(TCL_STUB_LIBRARY CACHE) + unset(TK_STUB_LIBRARY CACHE) + unset(TTK_STUB_LIBRARY CACHE) + endif (NOT "${WSYS}" STREQUAL "${TCL_TK_SYSTEM_GRAPHICS}") + endif (NOT "${TCL_TK_SYSTEM_GRAPHICS}" STREQUAL "" AND TK_WISH AND NOT TARGET "${TK_WISH}") +endif (TCL_ENABLE_TK) include(FindPackageHandleStandardArgs) FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCL - REQUIRED_VARS TCL_LIBRARY TCL_STUB_LIBRARY TCL_INCLUDE_PATH TCL_TCLSH - VERSION_VAR TCLSH_VERSION_STRING) -set(FPHSA_NAME_MISMATCHED 1) -set(TCLTK_FIND_REQUIRED ${TCL_FIND_REQUIRED}) -set(TCLTK_FIND_QUIETLY ${TCL_FIND_QUIETLY}) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCLTK - REQUIRED_VARS TCL_LIBRARY TCL_STUB_LIBRARY TCL_INCLUDE_PATH TK_LIBRARY TK_STUB_LIBRARY TK_INCLUDE_PATH) -set(TK_FIND_REQUIRED ${TCL_FIND_REQUIRED}) -set(TK_FIND_QUIETLY ${TCL_FIND_QUIETLY}) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(TK - REQUIRED_VARS TK_LIBRARY TK_STUB_LIBRARY TK_INCLUDE_PATH TK_WISH) -unset(FPHSA_NAME_MISMATCHED) + REQUIRED_VARS TCL_LIBRARY TCL_STUB_LIBRARY TCL_INCLUDE_PATH TCL_TCLSH + VERSION_VAR TCLSH_VERSION_STRING) + +if (TCL_ENABLE_TK) + set(FPHSA_NAME_MISMATCHED 1) + set(TCLTK_FIND_REQUIRED ${TCL_FIND_REQUIRED}) + set(TCLTK_FIND_QUIETLY ${TCL_FIND_QUIETLY}) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(TCLTK + REQUIRED_VARS TCL_LIBRARY TCL_STUB_LIBRARY TCL_INCLUDE_PATH TK_LIBRARY TK_STUB_LIBRARY TK_INCLUDE_PATH) + set(TK_FIND_REQUIRED ${TCL_FIND_REQUIRED}) + set(TK_FIND_QUIETLY ${TCL_FIND_QUIETLY}) + FIND_PACKAGE_HANDLE_STANDARD_ARGS(TK + REQUIRED_VARS TK_LIBRARY TK_STUB_LIBRARY TK_INCLUDE_PATH TK_WISH) + unset(FPHSA_NAME_MISMATCHED) +endif (TCL_ENABLE_TK) mark_as_advanced( TCL_INCLUDE_PATH @@ -346,3 +487,10 @@ mark_as_advanced( TTK_STUB_LIBRARY ) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/FindUTAHRLE.cmake b/misc/CMake/FindUTAHRLE.cmake index 4d7c9bd7046..5368cf259c2 100644 --- a/misc/CMake/FindUTAHRLE.cmake +++ b/misc/CMake/FindUTAHRLE.cmake @@ -1,62 +1,102 @@ -# F I N D U T A H R L E . C M A K E -# BRL-CAD -# -# Copyright (c) 2011-2020 United States Government as represented by -# the U.S. Army Research Laboratory. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -### -# - Find UtahRLE libraries -# -# The following variables are set: -# -# UTAHRLE_LIBRARY -# The following variables are set: -# -# UTAHRLE_INCLUDE_DIRS - where to find zlib.h, etc. -# UTAHRLE_LIBRARIES - List of libraries when using zlib. -# UTAHRLE_FOUND - True if zlib found. - -find_path(UTAHRLE_INCLUDE_DIR rle.h) -find_library(UTAHRLE_LIBRARY NAMES UTAHRLE) +# Distributed under the OSI-approved BSD 3-Clause License. See accompanying +# file Copyright.txt or https://cmake.org/licensing for details. + +#[=======================================================================[.rst: +FindUTAHRLE +-------- + +Find the native UTAHRLE includes and library. + +IMPORTED Targets +^^^^^^^^^^^^^^^^ + +This module defines :prop_tgt:`IMPORTED` target ``UTAHRLE::UTAHRLE``, if +UTAHRLE has been found. + +Result Variables +^^^^^^^^^^^^^^^^ + +This module defines the following variables: + +:: + + UTAHRLE_INCLUDE_DIRS - where to find pam.h, etc. + UTAHRLE_LIBRARIES - List of libraries when using utahrle. + UTAHRLE_FOUND - True if utahrle found. + +Hints +^^^^^ + +A user may set ``UTAHRLE_ROOT`` to a utahrle installation root to tell this +module where to look. +#]=======================================================================] + +set(_UTAHRLE_SEARCHES) + +# Search UTAHRLE_ROOT first if it is set. +if(UTAHRLE_ROOT) + set(_UTAHRLE_SEARCH_ROOT PATHS ${UTAHRLE_ROOT} NO_DEFAULT_PATH) + list(APPEND _UTAHRLE_SEARCHES _UTAHRLE_SEARCH_ROOT) +endif() + +# Normal search. +set(_UTAHRLE_x86 "(x86)") +set(_UTAHRLE_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/utahrle" + "$ENV{ProgramFiles${_UTAHRLE_x86}}/utahrle") +unset(_UTAHRLE_x86) +list(APPEND _UTAHRLE_SEARCHES _UTAHRLE_SEARCH_NORMAL) + +set(UTAHRLE_NAMES utahrle) + +# Try each search configuration. +foreach(search ${_UTAHRLE_SEARCHES}) + find_path(UTAHRLE_INCLUDE_DIR NAMES rle.h ${${search}} PATH_SUFFIXES include include/utahrle) +endforeach() + +# Allow UTAHRLE_LIBRARY to be set manually, as the location of the utahrle library +if(NOT UTAHRLE_LIBRARY) + foreach(search ${_UTAHRLE_SEARCHES}) + find_library(UTAHRLE_LIBRARY NAMES ${UTAHRLE_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib) + endforeach() +endif() + +unset(UTAHRLE_NAMES) + +mark_as_advanced(UTAHRLE_INCLUDE_DIR) include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(UTAHRLE DEFAULT_MSG UTAHRLE_LIBRARY UTAHRLE_INCLUDE_DIR) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(UTAHRLE REQUIRED_VARS UTAHRLE_LIBRARY UTAHRLE_INCLUDE_DIR) + +if(UTAHRLE_FOUND) + set(UTAHRLE_INCLUDE_DIRS ${UTAHRLE_INCLUDE_DIR}) + + if(NOT UTAHRLE_LIBRARIES) + set(UTAHRLE_LIBRARIES ${UTAHRLE_LIBRARY}) + endif() + + if(NOT TARGET UTAHRLE::UTAHRLE) + add_library(UTAHRLE::UTAHRLE UNKNOWN IMPORTED) + set_target_properties(UTAHRLE::UTAHRLE PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${UTAHRLE_INCLUDE_DIRS}") + + if(UTAHRLE_LIBRARY_RELEASE) + set_property(TARGET UTAHRLE::UTAHRLE APPEND PROPERTY + IMPORTED_CONFIGURATIONS RELEASE) + set_target_properties(UTAHRLE::UTAHRLE PROPERTIES + IMPORTED_LOCATION_RELEASE "${UTAHRLE_LIBRARY_RELEASE}") + endif() + + if(UTAHRLE_LIBRARY_DEBUG) + set_property(TARGET UTAHRLE::UTAHRLE APPEND PROPERTY + IMPORTED_CONFIGURATIONS DEBUG) + set_target_properties(UTAHRLE::UTAHRLE PROPERTIES + IMPORTED_LOCATION_DEBUG "${UTAHRLE_LIBRARY_DEBUG}") + endif() -IF (UTAHRLE_FOUND) - set(UTAHRLE_INCLUDE_DIRS ${UTAHRLE_INCLUDE_DIR}) - set(UTAHRLE_LIBRARIES ${UTAHRLE_LIBRARY}) + if(NOT UTAHRLE_LIBRARY_RELEASE AND NOT UTAHRLE_LIBRARY_DEBUG) + set_property(TARGET UTAHRLE::UTAHRLE APPEND PROPERTY + IMPORTED_LOCATION "${UTAHRLE_LIBRARY}") + endif() + endif() endif() -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/FindVDS.cmake b/misc/CMake/FindVDS.cmake deleted file mode 100644 index 2d95ece8b11..00000000000 --- a/misc/CMake/FindVDS.cmake +++ /dev/null @@ -1,60 +0,0 @@ -# F I N D V D S . C M A K E -# BRL-CAD -# -# Copyright (c) 2013-2020 United States Government as represented by -# the U.S. Army Research Laboratory. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -# -### -# - Find View Dependent Simplification library -# -# The following variables are set: -# -# VDS_INCLUDE_DIRS - where to find vds.h, etc. -# VDS_LIBRARIES - List of libraries when using vds. -# VDS_FOUND - True if vds found. - -find_path(VDS_INCLUDE_DIR vds.h) -find_library(VDS_LIBRARY NAMES vds vdslib) - -include(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(VDS DEFAULT_MSG VDS_LIBRARY VDS_INCLUDE_DIR) - -IF (VDS_FOUND) - set(VDS_INCLUDE_DIRS ${VDS_INCLUDE_DIR}) - set(VDS_LIBRARIES ${VDS_LIBRARY}) -endif() - -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/FindX11.cmake b/misc/CMake/FindX11.cmake index 72be3c1e834..933863816f5 100644 --- a/misc/CMake/FindX11.cmake +++ b/misc/CMake/FindX11.cmake @@ -1,7 +1,7 @@ # F I N D X 1 1 . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -169,7 +169,7 @@ if(UNIX) set(64BIT_DIRS ${64BIT_DIRS} /usr/lib/X11 /usr/lib) endif(EXISTS "/usr/lib32" OR NOT EXISTS "/usr/lib64") else(SEARCH_64BIT) - set(32BIT_DIRS "/usr/lib32/X11;/usr/lib32;/usr/lib/i386-linux-gnu") + set(32BIT_DIRS "/usr/lib32/X11;/usr/lib32;/usr/lib/i386-linux-gnu;/usr/lib/arm-linux-gnueabihf") if(EXISTS "/usr/lib64" OR NOT EXISTS "/usr/lib32") set(32BIT_DIRS ${32BIT_DIRS} /usr/lib/X11 /usr/lib) endif(EXISTS "/usr/lib64" OR NOT EXISTS "/usr/lib32") diff --git a/misc/CMake/FindXMLLINT.cmake b/misc/CMake/FindXMLLINT.cmake index 33e45e8d555..9032abd74a1 100644 --- a/misc/CMake/FindXMLLINT.cmake +++ b/misc/CMake/FindXMLLINT.cmake @@ -1,7 +1,7 @@ # F I N D X M L L I N T . C M A K E # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/FindXSLTPROC.cmake b/misc/CMake/FindXSLTPROC.cmake index 6193c1cec5a..b6989f5bde5 100644 --- a/misc/CMake/FindXSLTPROC.cmake +++ b/misc/CMake/FindXSLTPROC.cmake @@ -1,7 +1,7 @@ # F I N D X S L T P R O C . C M A K E # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/Path_Setup.cmake b/misc/CMake/Path_Setup.cmake index f5db3b4116f..b47805f9a01 100644 --- a/misc/CMake/Path_Setup.cmake +++ b/misc/CMake/Path_Setup.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/RPath_Setup.cmake b/misc/CMake/RPath_Setup.cmake index 8009f9dfd08..f4168ac9fd8 100644 --- a/misc/CMake/RPath_Setup.cmake +++ b/misc/CMake/RPath_Setup.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -55,16 +55,16 @@ if(NOT COMMAND cmake_set_rpath) # location relative to the loading file's path if the installed version is # not present. How to do so is platform specific. if(NOT APPLE) - set(CMAKE_INSTALL_RPATH "${BRLCAD_INSTALL_PREFIX}/${LIB_DIR}:\$ORIGIN/../${LIB_DIR}" PARENT_SCOPE) + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}:\$ORIGIN/../${LIB_DIR}" PARENT_SCOPE) else(NOT APPLE) - set(CMAKE_INSTALL_RPATH "${BRLCAD_INSTALL_PREFIX}/${LIB_DIR};@loader_path/../${LIB_DIR}" PARENT_SCOPE) + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_DIR};@loader_path/../${LIB_DIR}" PARENT_SCOPE) endif(NOT APPLE) # On OSX, we need to set INSTALL_NAME_DIR instead of RPATH for CMake < 3.0 # http://www.cmake.org/cmake/help/cmake-2-8-docs.html#variable:CMAKE_INSTALL_NAME_DIR # http://www.cmake.org/cmake/help/v3.2/policy/CMP0042.html if ("${CMAKE_VERSION}" VERSION_LESS 3.0) - set(CMAKE_INSTALL_NAME_DIR "${BRLCAD_INSTALL_PREFIX}/${LIB_DIR}" PARENT_SCOPE) + set(CMAKE_INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}" PARENT_SCOPE) endif ("${CMAKE_VERSION}" VERSION_LESS 3.0) # Add the automatically determined parts of the RPATH which point to diff --git a/misc/CMake/ResetCache.cmake b/misc/CMake/ResetCache.cmake index 2f9608a3964..24825ac1cf3 100644 --- a/misc/CMake/ResetCache.cmake +++ b/misc/CMake/ResetCache.cmake @@ -1,7 +1,7 @@ # R E S E T C A C H E . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/TCL_PKGINDEX.cmake b/misc/CMake/TCL_PKGINDEX.cmake index e72040f781e..2e6462f2b61 100644 --- a/misc/CMake/TCL_PKGINDEX.cmake +++ b/misc/CMake/TCL_PKGINDEX.cmake @@ -1,6 +1,6 @@ #============================================================================= # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # All rights reserved. # @@ -37,38 +37,23 @@ #============================================================ function(TCL_PKGINDEX target pkgname pkgversion) - # Identify the shared library suffix to be used - set(lname ${CMAKE_SHARED_LIBRARY_PREFIX}${target}${CMAKE_SHARED_LIBRARY_SUFFIX}) - - # Create a "working" pkgIndex.tcl file that will allow - # the package to work from the build directory - set(lld_install "${LIB_DIR}") + set(INST_DIR "${LIB_DIR}") if(MSVC) - set(lld_install "${BIN_DIR}") + set(INST_DIR "${BIN_DIR}") endif(MSVC) - if(NOT CMAKE_CONFIGURATION_TYPES) - set(lld_build "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") - set(bpkgindex "${CMAKE_BINARY_DIR}/lib/${pkgname}${pkgversion}/pkgIndex.tcl") - file(WRITE "${bpkgindex}" "package ifneeded ${pkgname} ${pkgversion} [list load [file join $dir \"${lld_build}\" ${lname}] ${pkgname}]") - DISTCLEAN("${CMAKE_BINARY_DIR}/lib/${pkgname}${pkgversion}") - else(NOT CMAKE_CONFIGURATION_TYPES) - foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) - string(TOUPPER "${CFG_TYPE}" CFG_TYPE_UPPER) - set(bpkgindex "${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}}/${pkgname}${pkgversion}/pkgIndex.tcl") - set(lld_build "${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}}") - if(MSVC) - set(lld_build "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}}") - endif(MSVC) - file(WRITE "${bpkgindex}" "package ifneeded ${pkgname} ${pkgversion} [list load [file join $dir \"${lld_build}\" ${lname}] ${pkgname}]") - DISTCLEAN(${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}}/${pkgname}${pkgversion}) - endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) - endif(NOT CMAKE_CONFIGURATION_TYPES) - # Create the file Tcl will use once installed - set(ipkgindex "${CMAKE_CURRENT_BINARY_DIR}/pkgIndex.tcl") - file(WRITE "${ipkgindex}" "package ifneeded ${pkgname} ${pkgversion} [list load [file join $dir .. .. \"${lld_install}\" ${lname}] ${pkgname}]") - install(FILES "${ipkgindex}" DESTINATION lib/${pkgname}${pkgversion}) - DISTCLEAN("${ipkgindex}") + set(WORKING_PKGFILE ${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${LIB_DIR}/${pkgname}${pkgversion}/pkgIndex.tcl) + set(INSTALL_PKGFILE ${CMAKE_CURRENT_BINARY_DIR}/pkgIndex.tcl) + + add_custom_command(OUTPUT ${WORKING_PKGFILE} ${INSTALL_PKGFILE} + COMMAND ${CMAKE_COMMAND} -DWORKING_PKGFILE="${WORKING_PKGFILE}" -DINSTALL_PKGFILE="${INSTALL_PKGFILE}" -DTF_NAME="$" -DTF_DIR="$" -Dpkgname="${pkgname}" -Dpkgversion="${pkgversion}" -DINST_DIR="${INST_DIR}" -P ${BRLCAD_CMAKE_DIR}/scripts/tcl_mkindex.cmake + ) + add_custom_target(${pkgname}_pkgIndex ALL DEPENDS ${WORKING_PKGFILE} ${INSTALL_PKGFILE}) + + install(FILES ${INSTALL_PKGFILE} DESTINATION ${LIB_DIR}/${pkgname}${pkgversion}) + + DISTCLEAN("${WORKING_PKGFILE}") + DISTCLEAN("${INSTALL_PKGFILE}") endfunction(TCL_PKGINDEX) diff --git a/misc/CMake/ThirdParty.cmake b/misc/CMake/ThirdParty.cmake index 8bba0cdc034..2acf0a2bfe3 100644 --- a/misc/CMake/ThirdParty.cmake +++ b/misc/CMake/ThirdParty.cmake @@ -1,7 +1,7 @@ # T H I R D P A R T Y . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/ThirdParty_TCL.cmake b/misc/CMake/ThirdParty_TCL.cmake index c6404a80ea4..1cae9c44b9c 100644 --- a/misc/CMake/ThirdParty_TCL.cmake +++ b/misc/CMake/ThirdParty_TCL.cmake @@ -1,7 +1,7 @@ # T H I R D P A R T Y _ T C L . C M A K E # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -246,10 +246,10 @@ macro(THIRD_PARTY_TCL_PACKAGE pkgname dir wishcmd depends required_vars NEEDS_LI set(${PKGNAME_UPPER}_FOUND_STATUS ${${PKGNAME_UPPER}_FOUND}) # 1. If we have no wish command, we fail immediately. - if("${wishcmd}" STREQUAL "" OR "${wishcmd}" MATCHES "NOTFOUND") + if("${wishcmd}" STREQUAL "" OR "${wishcmd}" MATCHES "NOTFOUND" OR TARGET "${wishcmd}") message(WARNING "Test for ${pkgname} failed - no tclsh/wish command available for testing!") set(${PKGNAME_UPPER}_TEST_FAIL 1) - endif("${wishcmd}" STREQUAL "" OR "${wishcmd}" MATCHES "NOTFOUND") + endif("${wishcmd}" STREQUAL "" OR "${wishcmd}" MATCHES "NOTFOUND" OR TARGET "${wishcmd}") # 2. We have wish - now things get interesting. Write out # a Tcl script to probe for information on the package we're @@ -258,6 +258,7 @@ macro(THIRD_PARTY_TCL_PACKAGE pkgname dir wishcmd depends required_vars NEEDS_LI set(CURRENT_TCL_PACKAGE_NAME ${pkgname}) set(pkg_test_file "${CMAKE_BINARY_DIR}/CMakeTmp/${pkgname}_version.tcl") configure_file("${BRLCAD_SOURCE_DIR}/misc/CMake/tcltest.tcl.in" ${pkg_test_file} @ONLY) + DISTCLEAN("${pkg_test_file}") EXEC_PROGRAM(${wishcmd} ARGS ${pkg_test_file} OUTPUT_VARIABLE EXECOUTPUT) file(READ "${CMAKE_BINARY_DIR}/CMakeTmp/${PKGNAME_UPPER}_PKG_VERSION" pkgversion) string(REGEX REPLACE "\n" "" ${PKGNAME_UPPER}_PACKAGE_VERSION ${pkgversion}) diff --git a/misc/CMake/date_delta.cpp b/misc/CMake/date_delta.cpp new file mode 100644 index 00000000000..342726df3d6 --- /dev/null +++ b/misc/CMake/date_delta.cpp @@ -0,0 +1,48 @@ +/* D A T E _ D E L T A . C P P + * BRL-CAD + * + * Published in 2020 by the United States Government. + * This work is in the public domain. + * + */ +/** @file date_delta.cpp + * + * Delta calculations using https://github.com/HowardHinnant/date, which + * is close to what is being considered for C++20. + * + */ + +#include "date.h" +#include + +int +main() +{ + long t1 = 1602012807; + long t2 = 1602114000; + std::time_t s1 = std::time_t(t1); + std::time_t s2 = std::time_t(t2); + std::chrono::system_clock::time_point tp1 = std::chrono::system_clock::from_time_t(s1); + std::chrono::system_clock::time_point tp2 = std::chrono::system_clock::from_time_t(s2); + + auto dd = date::floor(tp2) - date::floor(tp1); + if (dd.count()) + std::cout << "delta(dys): " << dd.count() << "\n"; + + auto dtime = date::make_time(std::chrono::duration_cast(tp2-tp1)); + if (dtime.hours().count()) + std::cout << "delta(hrs): " << dtime.hours().count() << "\n"; + if (dtime.minutes().count()) + std::cout << "delta(min): " << dtime.minutes().count() << "\n"; + if (dtime.seconds().count()) + std::cout << "delta(sec): " << dtime.seconds().count() << "\n"; +} + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/misc/CMake/distcheck_in_src_dir.cmake.in b/misc/CMake/distcheck_in_src_dir.cmake.in index 7b386469526..9563f7672e7 100644 --- a/misc/CMake/distcheck_in_src_dir.cmake.in +++ b/misc/CMake/distcheck_in_src_dir.cmake.in @@ -1,7 +1,7 @@ # D I S T C H E C K _ I N _ S R C _ D I R . C M A K E . I N # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -41,6 +41,7 @@ file(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/distcheck-${TARGET_SUFFIX}-initstat.cma set(final_status_script "file(GLOB_RECURSE SOURCE_ARCHIVE_CONTENTS RELATIVE \"${CMAKE_CURRENT_BINARY_DIR}/distcheck-${TARGET_SUFFIX}/${CPACK_SOURCE_PACKAGE_FILE_NAME}\" \"${CMAKE_CURRENT_BINARY_DIR}/distcheck-${TARGET_SUFFIX}/${CPACK_SOURCE_PACKAGE_FILE_NAME}/*\") +list(REMOVE_ITEM SOURCE_ARCHIVE_CONTENTS .ninja_log) file(WRITE \"${CMAKE_CURRENT_BINARY_DIR}/distcheck-${TARGET_SUFFIX}/final_src_contents.txt\" \"\${SOURCE_ARCHIVE_CONTENTS}\")") file(WRITE "${CMAKE_BINARY_DIR}/CMakeTmp/distcheck-${TARGET_SUFFIX}-finalstat.cmake" "${final_status_script}") diff --git a/misc/CMake/distcheck_no_tcl.cmake.in b/misc/CMake/distcheck_no_tcl.cmake.in index b36a8e1963c..b29d63bbd47 100644 --- a/misc/CMake/distcheck_no_tcl.cmake.in +++ b/misc/CMake/distcheck_no_tcl.cmake.in @@ -1,7 +1,7 @@ # D I S T C H E C K _ T A R G E T . C M A K E . I N # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -35,6 +35,10 @@ ### set(check_distcheck "file(GLOB_RECURSE BUILD_DIR_CONTENTS RELATIVE \"${CMAKE_CURRENT_BINARY_DIR}/distcheck-${TARGET_SUFFIX}/${build_dir}\" \"${CMAKE_CURRENT_BINARY_DIR}/distcheck-${TARGET_SUFFIX}/${build_dir}/*\") +# Ninja keeps a running log in .ninja_log - if we're using ninja itself to run the +# tests, we can't clear this file. Ignore it, as it's not a sign of a problem with +# the clean logic. +list(REMOVE_ITEM BUILD_DIR_CONTENTS .ninja_log) if(BUILD_DIR_CONTENTS) message(\"Files present after distclean in ${CMAKE_CURRENT_BINARY_DIR}/distcheck-${TARGET_SUFFIX}/${build_dir}:\") foreach(filename \${BUILD_DIR_CONTENTS}) diff --git a/misc/CMake/distcheck_repo_verify.cmake.in b/misc/CMake/distcheck_repo_verify.cmake.in index b5dc196a013..bb3aa00e054 100644 --- a/misc/CMake/distcheck_repo_verify.cmake.in +++ b/misc/CMake/distcheck_repo_verify.cmake.in @@ -2,7 +2,7 @@ # # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/distcheck_target.cmake.in b/misc/CMake/distcheck_target.cmake.in index 5b3689950b8..2064516a53f 100644 --- a/misc/CMake/distcheck_target.cmake.in +++ b/misc/CMake/distcheck_target.cmake.in @@ -1,7 +1,7 @@ # D I S T C H E C K _ T A R G E T . C M A K E . I N # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -35,6 +35,10 @@ ### set(check_distcheck "file(GLOB_RECURSE BUILD_DIR_CONTENTS RELATIVE \"${CMAKE_CURRENT_BINARY_DIR}/distcheck-${TARGET_SUFFIX}/${build_dir}\" \"${CMAKE_CURRENT_BINARY_DIR}/distcheck-${TARGET_SUFFIX}/${build_dir}/*\") +# Ninja keeps a running log in .ninja_log - if we're using ninja itself to run the +# tests, we can't clear this file. Ignore it, as it's not a sign of a problem with +# the clean logic. +list(REMOVE_ITEM BUILD_DIR_CONTENTS .ninja_log) if(BUILD_DIR_CONTENTS) message(\"Files present after distclean in ${CMAKE_CURRENT_BINARY_DIR}/distcheck-${TARGET_SUFFIX}/${build_dir}:\") foreach(filename \${BUILD_DIR_CONTENTS}) diff --git a/misc/CMake/distclean.cmake.in b/misc/CMake/distclean.cmake.in index 38090dde4e3..7ddc640f24e 100644 --- a/misc/CMake/distclean.cmake.in +++ b/misc/CMake/distclean.cmake.in @@ -1,7 +1,7 @@ # D I S T C L E A N . C M A K E . I N # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/docbook.cmake.in b/misc/CMake/docbook.cmake.in index b3b5d988025..3d4ebbd0834 100644 --- a/misc/CMake/docbook.cmake.in +++ b/misc/CMake/docbook.cmake.in @@ -1,7 +1,7 @@ # D O C B O O K . C M A K E . I N # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/multiconfig_path_clean.cmake.in b/misc/CMake/multiconfig_path_clean.cmake.in index b9cfde43785..7bd9de33972 100644 --- a/misc/CMake/multiconfig_path_clean.cmake.in +++ b/misc/CMake/multiconfig_path_clean.cmake.in @@ -1,7 +1,7 @@ # M U L T I C O N F I G _ P A T H _ C L E A N . C M A K E . I N # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMake/multiconfig_path_read.cmake.in b/misc/CMake/multiconfig_path_read.cmake.in index e0925d89414..ac78c706da8 100644 --- a/misc/CMake/multiconfig_path_read.cmake.in +++ b/misc/CMake/multiconfig_path_read.cmake.in @@ -1,7 +1,7 @@ # M U L T I C O N F I G _ P A T H _ R E A D . C M A K E . I N # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -52,38 +52,36 @@ if(NOT BUILD_TYPE_NEW) set(BUILD_TYPE_NEW "${BUILD_TYPE}") endif(NOT BUILD_TYPE_NEW) -# The installation directory is compiled in, so to that extent at least a build time configuration -# change that results in a different installation path requires a re-compile. Write to a temp file -# to allow the build target to avoid changing the PATH file unless there is an actual path change - -# this minimizes recompilation based on PATH to actual installation path changes, rather than -# just configuration changes - if CMAKE_INSTALL_PREFIX is not defined based on the build configuration, -# PATH is constant. -string(REPLACE "----BUILD_TYPE----" "${BUILD_TYPE_NEW}" CMAKE_INSTALL_PREFIX_CFG "@CMAKE_INSTALL_PREFIX_CFG@") - # We have no way to tell the build tool at build time what string we want # it to use for the installation path - it only knows its build configuration # type. Hence, we update the cmake_install.cmake files to let them know -# directly. Only do this if we need to - i.e. we're using a string other -# than the build type string itself in the install path. -# -# In the event of multiple configuration switches we need to avoid matching failures -# due to previous substitutions, so the first time we do this stash the original -# contents in cmake_install.cmake.orig file. -string(REPLACE "----BUILD_TYPE----" "\${BUILD_TYPE}" CMAKE_INSTALL_PREFIX_CFG_ORIG "@CMAKE_INSTALL_PREFIX_CFG@") -if(NOT "${BUILD_TYPE_NEW}" STREQUAL "${BUILD_TYPE}") - file(GLOB_RECURSE ALL_CMAKE_INSTALL_FILES "cmake_install.cmake") - foreach(cmake_install_file ${ALL_CMAKE_INSTALL_FILES}) - if(EXISTS "${cmake_install_file}.orig") - file(READ "${cmake_install_file}.orig" OLD_INSTALL_CONTENTS) - else(EXISTS "${cmake_install_file}.orig") - file(READ "${cmake_install_file}" OLD_INSTALL_CONTENTS) - file(WRITE "${cmake_install_file}.orig" "\n${OLD_INSTALL_CONTENTS}") - endif(EXISTS "${cmake_install_file}.orig") - string(REPLACE "${CMAKE_INSTALL_PREFIX_CFG_ORIG}" "${CMAKE_INSTALL_PREFIX_CFG}" INSTALL_CONTENTS "${OLD_INSTALL_CONTENTS}") - string(REPLACE "@CMAKE_BINARY_DIR@/@CMAKE_CFG_INTDIR@" "@CMAKE_BINARY_DIR@/${BUILD_TYPE}" INSTALL_CONTENTS "${INSTALL_CONTENTS}") - file(WRITE "${cmake_install_file}" "${INSTALL_CONTENTS}") - endforeach(cmake_install_file ${ALL_CMAKE_INSTALL_FILES}) -endif(NOT "${BUILD_TYPE_NEW}" STREQUAL "${BUILD_TYPE}") +# directly. + +file(GLOB_RECURSE ALL_CMAKE_INSTALL_FILES "cmake_install.cmake") +foreach(cmake_install_file ${ALL_CMAKE_INSTALL_FILES}) + + # We need to work with the original state of the cmake_install.cmake file + # for consistency, so stash a copy if we haven't already done so. + if(EXISTS "${cmake_install_file}.orig") + file(READ "${cmake_install_file}.orig" OLD_INSTALL_CONTENTS) + else(EXISTS "${cmake_install_file}.orig") + file(READ "${cmake_install_file}" OLD_INSTALL_CONTENTS) + file(WRITE "${cmake_install_file}.orig" "\n${OLD_INSTALL_CONTENTS}") + endif(EXISTS "${cmake_install_file}.orig") + + # Remove the obsolete previous state + file(REMOVE "${cmake_install_file}") + + # Replace the original cmake_install contents with config specific info + set(INSTALL_CONTENTS "${OLD_INSTALL_CONTENTS}") + string(REPLACE "$/" "${BUILD_TYPE}/" INSTALL_CONTENTS "${INSTALL_CONTENTS}") + string(REPLACE "$" "${BUILD_TYPE}" INSTALL_CONTENTS "${INSTALL_CONTENTS}") + string(REPLACE "\${CONFIGURATION}/" "${BUILD_TYPE}/" INSTALL_CONTENTS "${INSTALL_CONTENTS}") + string(REPLACE "\${CONFIGURATION}" "${BUILD_TYPE}" INSTALL_CONTENTS "${INSTALL_CONTENTS}") + string(REPLACE "@BUILD_TYPE_KEY@" "${BUILD_TYPE_NEW}" INSTALL_CONTENTS "${INSTALL_CONTENTS}") + file(WRITE "${cmake_install_file}" "${INSTALL_CONTENTS}\n") + +endforeach(cmake_install_file ${ALL_CMAKE_INSTALL_FILES}) # Local Variables: # tab-width: 8 diff --git a/misc/CMake/scripts/printtime.cmake b/misc/CMake/scripts/printtime.cmake new file mode 100644 index 00000000000..d1536d43990 --- /dev/null +++ b/misc/CMake/scripts/printtime.cmake @@ -0,0 +1,3 @@ +string(TIMESTAMP CTIME "%a %b %d %H:%M:%S %Y") +message("\n${MSG} ${CTIME}\n") + diff --git a/misc/CMake/scripts/tcl_mkindex.cmake b/misc/CMake/scripts/tcl_mkindex.cmake new file mode 100644 index 00000000000..ad419c58f62 --- /dev/null +++ b/misc/CMake/scripts/tcl_mkindex.cmake @@ -0,0 +1,57 @@ +#============================================================================= +# +# Copyright (c) 2010-2021 United States Government as represented by +# the U.S. Army Research Laboratory. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# +# * The names of the authors may not be used to endorse or promote +# products derived from this software without specific prior written +# permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= +get_filename_component(TFD "${TF_DIR}" REALPATH) + +# file(WRITE) is digesting the paths and producing incorrect directories +# when there are spaces in paths. To avoid this, use get_filename_component +# to "pre-digest" the paths and then correct any "/ " patterns introduced. +get_filename_component(WFD "${WORKING_PKGFILE}" DIRECTORY) +get_filename_component(WFN "${WORKING_PKGFILE}" NAME) +string(REPLACE "/ " " " WFD "${WFD}") +file(WRITE "${WFD}/${WFN}" "package ifneeded ${pkgname} ${pkgversion} [list load [file join $dir \"${TFD}\" ${TF_NAME}] ${pkgname}]") + +# file(WRITE) is digesting the paths and producing incorrect directories +# when there are spaces in paths. To avoid this, use get_filename_component +# to "pre-digest" the paths and then correct any "/ " patterns introduced. +get_filename_component(WFD "${INSTALL_PKGFILE}" DIRECTORY) +get_filename_component(WFN "${INSTALL_PKGFILE}" NAME) +string(REPLACE "/ " " " WFD "${WFD}") +file(WRITE "${WFD}/${WFN}" "package ifneeded ${pkgname} ${pkgversion} [list load [file join $dir .. .. \"${INST_DIR}\" ${TF_NAME}] ${pkgname}]") + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/scripts/timestamp.cmake b/misc/CMake/scripts/timestamp.cmake new file mode 100644 index 00000000000..05edcf62fa6 --- /dev/null +++ b/misc/CMake/scripts/timestamp.cmake @@ -0,0 +1,12 @@ +string(TIMESTAMP CTIME "%s") +if (NOT STAMP_FILE) + message(FATAL_ERROR "No stamp file specified") +endif (NOT STAMP_FILE) +file(WRITE "${STAMP_FILE}" "${CTIME}\n") + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/misc/CMake/source_archive_setup.cmake.in b/misc/CMake/source_archive_setup.cmake.in index 17df7635e38..8a7a8ffa1b4 100644 --- a/misc/CMake/source_archive_setup.cmake.in +++ b/misc/CMake/source_archive_setup.cmake.in @@ -2,7 +2,7 @@ # # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/CMakeLists.txt b/misc/CMakeLists.txt index 0219e353ba2..db7cbba631f 100644 --- a/misc/CMakeLists.txt +++ b/misc/CMakeLists.txt @@ -79,13 +79,6 @@ set(misc_ignore_files check/volume.sh check/gap.sh clang-static-analyzer-run.sh - external_build_testing/CMakeLists.txt - external_build_testing/CMake/buildpath_replace.cxx.in - external_build_testing/CMake/Path_Setup.cmake - external_build_testing/CMake/rpath_replace.cxx.in - external_build_testing/CMake/RPath_Setup.cmake - external_build_testing/CMake/ExternalProject_Target.cmake - external_build_testing/NOTES flawfinder hawaii_islands.sh jove.emacs diff --git a/misc/archlinux/brlcad.install b/misc/archlinux/brlcad.install index 5069c930610..11c79d2fcf4 100644 --- a/misc/archlinux/brlcad.install +++ b/misc/archlinux/brlcad.install @@ -2,7 +2,7 @@ # B R L C A D . I N S T A L L # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/attributes/gen-attributes-file.cpp b/misc/attributes/gen-attributes-file.cpp index 5a7fa2c95bf..cff176d8228 100644 --- a/misc/attributes/gen-attributes-file.cpp +++ b/misc/attributes/gen-attributes-file.cpp @@ -1,7 +1,7 @@ /* G E N - A T T R I B U T E S - F I L E . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/brlcad-config.in b/misc/brlcad-config.in index 63e4aac6067..f263ac02e59 100644 --- a/misc/brlcad-config.in +++ b/misc/brlcad-config.in @@ -2,7 +2,7 @@ # B R L C A D - C O N F I G . I N # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/brlcad.spec.in b/misc/brlcad.spec.in index a78396346cb..48eeed2eef1 100644 --- a/misc/brlcad.spec.in +++ b/misc/brlcad.spec.in @@ -1,7 +1,7 @@ # B R L C A D . S P E C . I N # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/misc/debian/changelog b/misc/debian/changelog index 45d3e2f03cb..0c0e80928e5 100644 --- a/misc/debian/changelog +++ b/misc/debian/changelog @@ -1,3 +1,10 @@ +brlcad (7.32.2-0) unstable; urgency=low + + * update brlcad version + + -- Cliff Yapp Sat, 06 Feb 2021 04:20:16 UTC + + brlcad (7.32.0-0) unstable; urgency=low * update brlcad version diff --git a/misc/debian/copyright b/misc/debian/copyright index 48a310cdd3c..771d6ad527f 100644 --- a/misc/debian/copyright +++ b/misc/debian/copyright @@ -22,7 +22,7 @@ Copyright: and all contributions being made. The following notice should be prominent in the BRL-CAD sources: - Copyright (c) 1984-2020 United States Government as represented by + Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. License: diff --git a/misc/external_build_testing/CMake/ExternalProject_Target.cmake b/misc/external_build_testing/CMake/ExternalProject_Target.cmake deleted file mode 100644 index 579a94189cf..00000000000 --- a/misc/external_build_testing/CMake/ExternalProject_Target.cmake +++ /dev/null @@ -1,268 +0,0 @@ -# This is based on the logic generated by CMake for EXPORT, but customized for -# use with ExternalProject: -# -# https://cmake.org/cmake/help/latest/module/ExternalProject.html -# -# The goal is to create an imported target based on the ExternalProject -# information, and then append the necessary install logic to manage RPath -# settings in the external projects as if the external files were built by the -# main CMake project. - - -# The catch to this is that the external project outputs MUST be built in a way -# that is compatible with CMake's RPath handling assumptions. See -# https://stackoverflow.com/questions/41175354/can-i-install-shared-imported-library -# for one of the issues surrounding this - file(RPATH_CHANGE) must be able to -# succeed, and it is up to the 3rd party build setups to prepare their outputs -# to be ready. The key variable CMAKE_BUILD_RPATH comes from running the -# function cmake_set_rpath, which must be available. - -# Sophisticated argument parsing is needed (TODO - remove this line after -# we require >3.4 CMake - after that it is built in -include(CMakeParseArguments) - -# Custom patch utility to replace the build directory path with the install -# directory path in text files - make sure CMAKE_BINARY_DIR and -# CMAKE_INSTALL_PREFIX are finalized before generating this file! -configure_file(${CMAKE_SOURCE_DIR}/CMake/buildpath_replace.cxx.in ${CMAKE_BINARY_DIR}/buildpath_replace.cxx) -add_executable(buildpath_replace ${CMAKE_BINARY_DIR}/buildpath_replace.cxx) - -function(ExternalProject_ByProducts extproj E_IMPORT_PREFIX) - cmake_parse_arguments(E "FIXPATH" "" "" ${ARGN}) - if (EXTPROJ_VERBOSE) - list(LENGTH E_UNPARSED_ARGUMENTS FCNT) - if (E_FIXPATH) - if (FCNT GREATER 1) - message("${extproj}: Adding path adjustment and installation rules for ${FCNT} byproducts") - else (FCNT GREATER 1) - message("${extproj}: Adding path adjustment and installation rules for ${FCNT} byproduct") - endif (FCNT GREATER 1) - else (E_FIXPATH) - if (FCNT GREATER 1) - message("${extproj}: Adding install rules for ${FCNT} byproducts") - else (FCNT GREATER 1) - message("${extproj}: Adding install rules for ${FCNT} byproduct") - endif (FCNT GREATER 1) - endif (E_FIXPATH) - endif (EXTPROJ_VERBOSE) - foreach (bpf ${E_UNPARSED_ARGUMENTS}) - set(I_IMPORT_PREFIX ${CMAKE_BINARY_DIR}/${E_IMPORT_PREFIX}) - get_filename_component(BPF_DIR "${bpf}" DIRECTORY) - set(D_IMPORT_PREFIX "${E_IMPORT_PREFIX}") - if (BPF_DIR) - set(D_IMPORT_PREFIX "${D_IMPORT_PREFIX}/${BPF_DIR}") - endif (BPF_DIR) - install(FILES "${I_IMPORT_PREFIX}/${bpf}" DESTINATION "${D_IMPORT_PREFIX}/") - if (E_FIXPATH) - # Note - proper quoting for install(CODE) is extremely important for CPack, see - # https://stackoverflow.com/a/48487133 - install(CODE "execute_process(COMMAND ${CMAKE_BINARY_DIR}/${BIN_DIR}/buildpath_replace${CMAKE_EXECUTABLE_SUFFIX} \"\${CMAKE_INSTALL_PREFIX}/${E_IMPORT_PREFIX}/${bpf}\")") - endif (E_FIXPATH) - endforeach (bpf ${E_UNPARSED_ARGUMENTS}) -endfunction(ExternalProject_ByProducts) - - -function(ET_target_props etarg IN_IMPORT_PREFIX IN_LINK_TARGET) - - cmake_parse_arguments(ET "STATIC;EXEC" "LINK_TARGET_DEBUG" "" ${ARGN}) - - if(NOT CMAKE_CONFIGURATION_TYPES) - - if(ET_STATIC) - set(IMPORT_PREFIX "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY}") - elseif(ET_EXEC) - set(IMPORT_PREFIX "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}") - else() - set(IMPORT_PREFIX "${CMAKE_LIBRARY_OUTPUT_DIRECTORY}") - endif(ET_STATIC) - if(IN_IMPORT_PREFIX) - set(IMPORT_PREFIX "${IMPORT_PREFIX}/${IN_IMPORT_PREFIX}") - endif(IN_IMPORT_PREFIX) - - set_property(TARGET ${etarg} APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) - set_target_properties(${etarg} PROPERTIES - IMPORTED_LOCATION_NOCONFIG "${IMPORT_PREFIX}/${IN_LINK_TARGET}" - IMPORTED_SONAME_NOCONFIG "${IN_LINK_TARGET}" - ) - - else(NOT CMAKE_CONFIGURATION_TYPES) - - foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) - string(TOUPPER "${CFG_TYPE}" CFG_TYPE_UPPER) - - # The config variables are the ones set in this mode, but everything is being targeted to - # one consistent top-level layout. Adjust accordingly. - if(ET_STATIC) - set(IMPORT_PREFIX "${CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}}/../../${LIB_DIR}") - elseif(ET_EXEC) - set(IMPORT_PREFIX "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}}/../../${BIN_DIR}") - else() - set(IMPORT_PREFIX "${CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}}/../../${LIB_DIR}") - endif(ET_STATIC) - - if(IN_IMPORT_PREFIX) - set(IMPORT_PREFIX "${IMPORT_PREFIX}/${IN_IMPORT_PREFIX}") - endif(IN_IMPORT_PREFIX) - - if("${CFG_TYPE_UPPER}" STREQUAL "DEBUG") - set(LINK_TARGET ${ET_LINK_TARGET_DEBUG}) - else("${CFG_TYPE_UPPER}" STREQUAL "DEBUG") - set(LINK_TARGET ${IN_LINK_TARGET}) - endif("${CFG_TYPE_UPPER}" STREQUAL "DEBUG") - - set_target_properties(${etarg} PROPERTIES - IMPORTED_LOCATION_${CFG_TYPE_UPPER} "${IMPORT_PREFIX}/${LINK_TARGET}" - IMPORTED_SONAME_${CFG_TYPE_UPPER} "${LINK_TARGET}" - ) - - if(NOT ET_STATIC AND NOT ET_EXEC AND MSVC) - # For Windows, IMPORTED_IMPLIB is important for shared libraries. - # It is that property that will tell a toplevel target what to link against - # when building - pointing out the dll isn't enough by itself. - string(REPLACE "${CMAKE_SHARED_LIBRARY_SUFFIX}" ".lib" IMPLIB_FILE "${LINK_TARGET}") - set_target_properties(${etarg} PROPERTIES - IMPORTED_IMPLIB_${CFG_TYPE_UPPER} "${IMPORT_PREFIX}/${IMPLIB_FILE}" - ) - endif(NOT ET_STATIC AND NOT ET_EXEC AND MSVC) - - endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) - - # For everything except Debug, use the Release version - #set_target_properties(TARGET ${etarg} PROPERTIES - # MAP_IMPORTED_CONFIG_MINSIZEREL Release - # MAP_IMPORTED_CONFIG_RELWITHDEBINFO Release - # ) - - endif(NOT CMAKE_CONFIGURATION_TYPES) - -endfunction(ET_target_props) - - -# Mimic the magic of the CMake install(TARGETS) form of the install command. -# This is the key to treating external project build outputs as fully managed -# CMake outputs, and requires that the external project build in such a way -# that the rpath settings in the build outputs are compatible with this -# mechanism. -function(ET_RPath REL_DIR LIB_DIR E_OUTPUT_FILE) - if (NOT APPLE) - set(NEW_RPATH "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${LIB_DIR}:$ORIGIN/../${LIB_DIR}") - else (NOT APPLE) - set(NEW_RPATH "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/${LIB_DIR}:@loader_path/../${LIB_DIR}") - endif (NOT APPLE) - if (NOT DEFINED CMAKE_BUILD_RPATH) - message(FATAL_ERROR "ET_RPath run without CMAKE_BUILD_RPATH defined - run cmake_set_rpath before defining external projects.") - endif (NOT DEFINED CMAKE_BUILD_RPATH) - # Note - proper quoting for install(CODE) is extremely important for CPack, see - # https://stackoverflow.com/a/48487133 - install(CODE " - file(RPATH_CHANGE - FILE \"\$ENV{DESTDIR}\${CMAKE_INSTALL_PREFIX}/${REL_DIR}/${E_OUTPUT_FILE}\" - OLD_RPATH \"${CMAKE_BUILD_RPATH}\" - NEW_RPATH \"${NEW_RPATH}\") - ") -endfunction(ET_RPath) - -function(ExternalProject_Target etarg extproj) - - cmake_parse_arguments(E "RPATH;EXEC" "IMPORT_PREFIX;OUTPUT_FILE;LINK_TARGET;LINK_TARGET_DEBUG;STATIC_OUTPUT_FILE;STATIC_LINK_TARGET;STATIC_LINK_TARGET_DEBUG" "SYMLINKS;DEPS" ${ARGN}) - - if(NOT TARGET ${extproj}) - message(FATAL_ERROR "${extprog} is not a target") - endif(NOT TARGET ${extproj}) - - # Protect against redefinition of already defined targets. - if(TARGET ${etarg}) - message(FATAL_ERROR "Target ${etarg} is already defined\n") - endif(TARGET ${etarg}) - if(E_STATIC AND TARGET ${etarg}-static) - message(FATAL_ERROR "Target ${etarg}-static is already defined\n") - endif(E_STATIC AND TARGET ${etarg}-static) - - if (EXTPROJ_VERBOSE) - message("${extproj}: Adding target \"${etarg}\"") - endif (EXTPROJ_VERBOSE) - - if (E_STATIC_OUTPUT_FILE) - set(E_STATIC 1) - endif (E_STATIC_OUTPUT_FILE) - - if (E_OUTPUT_FILE AND NOT E_EXEC) - set(E_SHARED 1) - endif (E_OUTPUT_FILE AND NOT E_EXEC) - - if (E_LINK_TARGET_DEBUG) - set(LINK_TARGET_DEBUG "${E_LINK_TARGET_DEBUG}") - endif (E_LINK_TARGET_DEBUG) - - if (E_STATIC_LINK_TARGET_DEBUG) - set(STATIC LINK_TARGET_DEBUG "${E_STATIC_LINK_TARGET_DEBUG}") - endif (E_STATIC_LINK_TARGET_DEBUG) - - # Create imported target - need to both make the target itself - # and set the necessary properties. See also - # https://gitlab.kitware.com/cmake/community/wikis/doc/tutorials/Exporting-and-Importing-Targets - - if (E_IMPORT_PREFIX) - set(LIB_DIR "${LIB_DIR}/${E_IMPORT_PREFIX}") - set(BIN_DIR "${BIN_DIR}/${E_IMPORT_PREFIX}") - endif (E_IMPORT_PREFIX) - - # Because the outputs are not properly build target outputs of the primary - # CMake project, we need to install as either FILES or PROGRAMS - if (NOT E_EXEC) - - # Handle shared library - if (E_SHARED) - add_library(${etarg} SHARED IMPORTED GLOBAL) - if (E_LINK_TARGET) - ET_target_props(${etarg} "${E_IMPORT_PREFIX}" ${E_LINK_TARGET} LINK_TARGET_DEBUG "${LINK_TARGET_DEBUG}") - else (E_LINK_TARGET) - ET_target_props(${etarg} "${E_IMPORT_PREFIX}" ${E_OUTPUT_FILE} LINK_TARGET_DEBUG "${LINK_TARGET_DEBUG}") - endif (E_LINK_TARGET) - install(FILES "${IMPORT_PREFIX}/${E_OUTPUT_FILE}" DESTINATION ${LIB_DIR}) - if (E_RPATH AND NOT MSVC) - ET_RPath(${LIB_DIR} ${LIB_DIR} ${E_OUTPUT_FILE}) - endif (E_RPATH AND NOT MSVC) - endif (E_SHARED) - - # If we do have a static lib as well, handle that - if (E_STATIC) - add_library(${etarg}-static STATIC IMPORTED GLOBAL) - if (E_STATIC_LINK_TARGET) - ET_target_props(${etarg}-static "${E_IMPORT_PREFIX}" ${E_STATIC_LINK_TARGET} STATIC_LINK_TARGET_DEBUG "${STATIC_LINK_TARGET_DEBUG}" STATIC) - else (E_STATIC_LINK_TARGET) - ET_target_props(${etarg}-static "${E_IMPORT_PREFIX}" ${E_STATIC_OUTPUT_FILE} STATIC_LINK_TARGET_DEBUG "${STATIC_LINK_TARGET_DEBUG}" STATIC) - endif (E_STATIC_LINK_TARGET) - install(FILES "${IMPORT_PREFIX}/${E_STATIC_OUTPUT_FILE}" DESTINATION ${LIB_DIR}) - endif (E_STATIC) - - else (NOT E_EXEC) - - add_executable(${etarg} IMPORTED GLOBAL) - ET_target_props(${etarg} "${E_IMPORT_PREFIX}" ${E_OUTPUT_FILE} EXEC) - install(PROGRAMS "${IMPORT_PREFIX}/${E_OUTPUT_FILE}" DESTINATION ${BIN_DIR}) - if (E_RPATH AND NOT MSVC) - ET_RPath(${BIN_DIR} ${LIB_DIR} ${E_OUTPUT_FILE}) - endif (E_RPATH AND NOT MSVC) - - endif (NOT E_EXEC) - - # Let CMake know there is a target dependency here, despite this being an import target - add_dependencies(${etarg} ${extproj}) - - # Add install rules for any symlinks the caller has listed - if(E_SYMLINKS) - foreach(slink ${E_SYMLINKS}) - install(FILES "${IMPORT_PREFIX}/${slink}" DESTINATION ${LIB_DIR}) - endforeach(slink ${E_SYMLINKS}) - endif (E_SYMLINKS) - -endfunction(ExternalProject_Target) - -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 - diff --git a/misc/external_build_testing/CMake/Path_Setup.cmake b/misc/external_build_testing/CMake/Path_Setup.cmake deleted file mode 100644 index 00585b6febf..00000000000 --- a/misc/external_build_testing/CMake/Path_Setup.cmake +++ /dev/null @@ -1,151 +0,0 @@ -# Copyright (c) 2010-2020 United States Government as represented by -# the U.S. Army Research Laboratory. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - - -#--------------------------------------------------------------------- -# Define relative install locations. Don't set these if they have already -# been set by some other means (like a higher level CMakeLists.txt file -# including this one). - -# The location in which to install BRL-CAD executables. -if(NOT BIN_DIR) - set(BIN_DIR bin) -endif(NOT BIN_DIR) - -# The location in which to install BRL-CAD header files. -if(NOT INCLUDE_DIR) - set(INCLUDE_DIR include) -endif(NOT INCLUDE_DIR) - -# The location in which to install BRL-CAD libraries. -if(NOT LIB_DIR) - set(LIB_DIR lib) -endif(NOT LIB_DIR) - -# The location in which to install BRL-CAD configuration files. -if(NOT CONF_DIR) - set(CONF_DIR etc) -endif(NOT CONF_DIR) - -# The location in which to install BRL-CAD data files -if(NOT DATA_DIR) - set(DATA_DIR share) -endif(NOT DATA_DIR) - -# The location in which to install BRL-CAD Manual pages -if(NOT MAN_DIR) - set(MAN_DIR ${DATA_DIR}/man) -endif(NOT MAN_DIR) - -# The location in which to install BRL-CAD documentation files -if(NOT DOC_DIR) - set(DOC_DIR ${DATA_DIR}/doc) -endif(NOT DOC_DIR) - -# Make sure no absolute paths have been supplied to these variables -set(INSTALL_DIRS BIN INCLUDE LIB CONF DATA MAN DOC) -foreach(instdir ${INSTALL_DIRS}) - get_filename_component(instdir_full ${${instdir}_DIR} ABSOLUTE) - if("${${instdir}_DIR}" STREQUAL "${instdir_full}") - message(FATAL_ERROR "Error - absolute path supplied for ${instdir}_DIR. This path must be relative - e.g. \"bin\" instead of \"/usr/bin\"") - set(HAVE_INSTALL_DIR_FULL_PATH 1) - endif("${${instdir}_DIR}" STREQUAL "${instdir_full}") -endforeach(instdir ${INSTALL_DIRS}) - -#--------------------------------------------------------------------- -# Output directories - this is where built library and executable -# files will be placed after building but prior to install. The -# necessary variables change between single and multi configuration -# build systems, so it is necessary to handle both cases on a -# conditional basis. - -if(NOT CMAKE_CONFIGURATION_TYPES) - # If we're not doing multi-configuration, just set the three main - # variables to the correct values. - if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY) - set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${${PROJECT_NAME}_BINARY_DIR}/${LIB_DIR} CACHE INTERNAL "Single output directory for building all libraries.") - endif(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY) - if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY) - set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${${PROJECT_NAME}_BINARY_DIR}/${LIB_DIR} CACHE INTERNAL "Single output directory for building all archives.") - endif(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY) - if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) - set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${${PROJECT_NAME}_BINARY_DIR}/${BIN_DIR} CACHE INTERNAL "Single output directory for building all executables.") - endif(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY) -else(NOT CMAKE_CONFIGURATION_TYPES) - # Multi-configuration is more difficult. Not only do we need to - # properly set the output directories, but we also need to - # identify the "toplevel" directory for each configuration so - # we can place files, documentation, etc. in the correct - # relative positions. Because files may be placed by CMake - # without a build target to put them in their proper relative build - # directory position using these paths, we must fully qualify them - # without using CMAKE_CFG_INTDIR. - # - # We define directories that may not be quite "standard" - # for a particular build tool - for example, native VS2010 projects use - # another directory to denote CPU type being compiled for - but CMake only - # supports multi-configuration setups having multiple configurations, - # not multiple compilers. - # - # One additional wrinkle we must watch for here is the case where - # a multi-configuration setup uses "." for its internal directory - - # if that's the case, we need to just set the various config output - # directories to the same value. - set(CFG_ROOT ${${PROJECT_NAME}_BINARY_DIR}) - foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) - if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") - set(CFG_ROOT ${${PROJECT_NAME}_BINARY_DIR}/${CFG_TYPE}) - endif(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") - string(TOUPPER "${CFG_TYPE}" CFG_TYPE_UPPER) - if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}) - set("CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}" ${CFG_ROOT}/${LIB_DIR} CACHE INTERNAL "Single output directory for building ${CFG_TYPE} libraries.") - endif(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}) - if(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}) - set("CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}" ${CFG_ROOT}/${LIB_DIR} CACHE INTERNAL "Single output directory for building ${CFG_TYPE} archives.") - endif(NOT DEFINED CMAKE_ARCHIVE_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}) - if(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}) - set("CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}" ${CFG_ROOT}/${BIN_DIR} CACHE INTERNAL "Single output directory for building ${CFG_TYPE} executables.") - endif(NOT DEFINED CMAKE_RUNTIME_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}) - if(NOT DEFINED CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}) - set("CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}" ${CFG_ROOT} CACHE INTERNAL "Toplevel binary dir for ${CFG_TYPE} building.") - endif(NOT DEFINED CMAKE_BINARY_DIR_${CFG_TYPE_UPPER}) - if(NOT DEFINED ${PROJECT_NAME}_BINARY_DIR_${CFG_TYPE_UPPER}) - set("${PROJECT_NAME}_BINARY_DIR_${CFG_TYPE_UPPER}" ${CFG_ROOT} CACHE INTERNAL "Toplevel binary dir for ${CFG_TYPE} building.") - endif(NOT DEFINED ${PROJECT_NAME}_BINARY_DIR_${CFG_TYPE_UPPER}) - endforeach() -endif(NOT CMAKE_CONFIGURATION_TYPES) - -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 diff --git a/misc/external_build_testing/CMake/RPath_Setup.cmake b/misc/external_build_testing/CMake/RPath_Setup.cmake deleted file mode 100644 index 639bc561d52..00000000000 --- a/misc/external_build_testing/CMake/RPath_Setup.cmake +++ /dev/null @@ -1,112 +0,0 @@ -# Copyright (c) 2010-2020 United States Government as represented by -# the U.S. Army Research Laboratory. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#--------------------------------------------------------------------- -# The following logic is what allows binaries to run successfully in -# the build directory AND install directory. -# http://www.cmake.org/Wiki/CMake_RPATH_handling - -include(CMakeParseArguments) - -if(NOT COMMAND cmake_set_rpath) - - function(cmake_set_rpath) - - # See if we have a suffix for the paths - cmake_parse_arguments(R "" "SUFFIX" "" ${ARGN}) - - # We want the full RPATH set in the build tree so we can run programs without - # needing to set LD_LIBRARY_PATH - set(CMAKE_SKIP_BUILD_RPATH FALSE PARENT_SCOPE) - - # We DON'T want the final install directory RPATH set in the build directory - # - it should only be set to the installation value when actually installed. - set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE PARENT_SCOPE) - - # Add the automatically determined parts of the RPATH which point to - # directories outside the build tree to the install RPATH - set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE PARENT_SCOPE) - - - # Set RPATH value to use when installing. This should be set to always - # prefer the version in the installed path when possible, but fall back on a - # location relative to the loading file's path if the installed version is - # not present. How to do so is platform specific. - if(NOT R_SUFFIX) - if(NOT APPLE) - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}:\$ORIGIN/../${LIB_DIR}") - else(NOT APPLE) - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_DIR};@loader_path/../${LIB_DIR}") - endif(NOT APPLE) - else(NOT R_SUFFIX) - if(NOT APPLE) - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}/${R_SUFFIX}:\$ORIGIN/../${LIB_DIR}/${R_SUFFIX}") - else(NOT APPLE) - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/${LIB_DIR}/${R_SUFFIX};@loader_path/../${LIB_DIR}/${R_SUFFIX}") - endif(NOT APPLE) - endif(NOT R_SUFFIX) - - # Determine what the build time RPATH will be that is used to support - # CMake's RPATH manipulation, so it can be used in external projects. - if(NOT R_SUFFIX) - set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}/${LIB_DIR}") - else(NOT R_SUFFIX) - set(CMAKE_BUILD_RPATH "${CMAKE_BINARY_DIR}/${LIB_DIR}/${suffix}") - endif(NOT R_SUFFIX) - string(LENGTH "${CMAKE_INSTALL_RPATH}" INSTALL_LEN) - string(LENGTH "${CMAKE_BUILD_RPATH}" CURR_LEN) - while("${CURR_LEN}" LESS "${INSTALL_LEN}") - # This is the key to the process - the ":" characters appended to the - # build time path result in a path string in the compile outputs that - # has sufficient length to hold the install directory, while is what - # allows CMake's file command to manipulate the paths. At the same time, - # the colon lengthened paths do not break the functioning of the shorter - # build path. Normally this is an internal CMake detail, but we need it - # to supply to external build systems so their outputs can be manipulated - # as if they were outputs of our own build. - set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}:") - string(LENGTH "${CMAKE_BUILD_RPATH}" CURR_LEN) - endwhile("${CURR_LEN}" LESS "${INSTALL_LEN}") - - # Done - let the parent know what the answers are - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_RPATH}" PARENT_SCOPE) - set(CMAKE_BUILD_RPATH "${CMAKE_BUILD_RPATH}" PARENT_SCOPE) - - endfunction(cmake_set_rpath) - -endif(NOT COMMAND cmake_set_rpath) - -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 diff --git a/misc/external_build_testing/CMake/buildpath_replace.cxx.in b/misc/external_build_testing/CMake/buildpath_replace.cxx.in deleted file mode 100644 index 8d0be7eb662..00000000000 --- a/misc/external_build_testing/CMake/buildpath_replace.cxx.in +++ /dev/null @@ -1,62 +0,0 @@ -#include -#include -#include -#include -#include - -int main(int argc, const char **argv) -{ - int verbose = @EXTPROJ_VERBOSE@; - std::smatch m; - std::string build_path("@CMAKE_BINARY_DIR@"); - std::string install_path = std::string("@CMAKE_INSTALL_PREFIX@"); - - // Because the input path might be anything, we need to quote it for - // processing - see https://stackoverflow.com/a/40195721 - std::regex schars { R"([-[\]{}()*+?.,\^$|#\s])" }; - std::string bp_sanetized = std::regex_replace(build_path, schars, R"(\$&)"); - std::regex build_path_regex(bp_sanetized); - - if (argc < 1) { - std::cerr << "Error: no file specified for processing.\n"; - return -1; - } - - for (int i = 1; i < argc; i++) { - std::string cline; - std::string nfile_contents; - std::ifstream fs; - fs.open(argv[i]); - if (!fs.is_open()) { - std::cerr << "Error: file " << argv[i] << " could not be opened.\n"; - return -1; - } else { - std::cerr << "-- Patching " << argv[i] << "\n"; - } - - while (std::getline(fs, cline)) { - std::string nline = std::regex_replace(cline, build_path_regex, install_path); - nfile_contents.append(nline); - nfile_contents.append("\n"); - if (nline != cline && verbose > 1) { - std::cerr << " Changed line: " << cline << " -> " << nline << "\n"; - } - } - - fs.close(); - - std::ofstream ofs(argv[i], std::ios::trunc); - ofs << nfile_contents; - ofs.close(); - } -} - -// Local Variables: -// tab-width: 8 -// mode: C++ -// c-basic-offset: 4 -// indent-tabs-mode: t -// c-file-style: "stroustrup" -// End: -// ex: shiftwidth=4 tabstop=8 - diff --git a/misc/external_build_testing/CMake/rpath_replace.cxx.in b/misc/external_build_testing/CMake/rpath_replace.cxx.in deleted file mode 100644 index 4956db8e41d..00000000000 --- a/misc/external_build_testing/CMake/rpath_replace.cxx.in +++ /dev/null @@ -1,58 +0,0 @@ -#include -#include -#include -#include -#include - -int main(int argc, const char **argv) -{ - int verbose = @EXTPROJ_VERBOSE@; - std::regex old_rpath("-rpath,\\$\\{LIB_RUNTIME_DIR\\}"); - if (argc < 3) { - std::cerr << "Error: no file specified for processing or missing RPATH to set.\n"; - return -1; - } - std::string new_rpath = std::string("-rpath,") + std::string(argv[1]); - - for (int i = 2; i < argc; i++) { - std::string cline; - std::string nfile_contents; - std::ifstream fs; - fs.open(argv[i]); - if (!fs.is_open()) { - std::cerr << "Error: file " << argv[i] << " could not be opened.\n"; - return -1; - } else { - if (verbose) { - std::cerr << "Patching " << argv[i] << "\n"; - } - } - - while (std::getline(fs, cline)) { - std::string nline = std::regex_replace(cline, old_rpath, new_rpath); - nfile_contents.append(nline); - nfile_contents.append("\n"); - if (nline != cline) { - if (verbose > 1) { - std::cerr << " Changed line: " << cline << " -> " << nline << "\n"; - } - } - } - - fs.close(); - - std::ofstream ofs(argv[i], std::ios::trunc); - ofs << nfile_contents; - ofs.close(); - } -} - -// Local Variables: -// tab-width: 8 -// mode: C++ -// c-basic-offset: 4 -// indent-tabs-mode: t -// c-file-style: "stroustrup" -// End: -// ex: shiftwidth=4 tabstop=8 - diff --git a/misc/external_build_testing/CMakeLists.txt b/misc/external_build_testing/CMakeLists.txt deleted file mode 100644 index 8a988752665..00000000000 --- a/misc/external_build_testing/CMakeLists.txt +++ /dev/null @@ -1,1092 +0,0 @@ -# Copyright (c) 2016-2020 United States Government as represented by -# the U.S. Army Research Laboratory. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# ******************************************************************* -# *** CMakeLists.txt *** -# ******************************************************************* - -# External project management - see -# https://cmake.org/cmake/help/latest/module/ExternalProject.html - -# Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) - -# set CMake project name -project(SP) - -# Standard path definitions -include(${CMAKE_SOURCE_DIR}/CMake/Path_Setup.cmake) - -# Use this variable to key both CMake messages and tools like rpath_replace -if(NOT DEFINED EXTPROJ_VERBOSE) - set(EXTPROJ_VERBOSE 0) -endif(NOT DEFINED EXTPROJ_VERBOSE) - -# Custom patch utility for external RPath preparation -configure_file(${CMAKE_SOURCE_DIR}/CMake/rpath_replace.cxx.in ${CMAKE_BINARY_DIR}/rpath_replace.cxx @ONLY) -add_executable(rpath_replace ${CMAKE_BINARY_DIR}/rpath_replace.cxx) - -# TODO - hardcode this for easy testing - should go away once we're ready -set(CMAKE_INSTALL_PREFIX ${CMAKE_BINARY_DIR}/../install) - -# Load the primary functionality for external project management -include(${CMAKE_SOURCE_DIR}/CMake/RPath_Setup.cmake) -cmake_set_rpath() -include(ExternalProject) -# Note- make sure CMAKE_BINARY_DIR and CMAKE_INSTALL_PREFIX are set before including this file -include(${CMAKE_SOURCE_DIR}/CMake/ExternalProject_Target.cmake) - -# With MSVC, some of the subbuilds are going to need the vcvars bat file -# to set up the environment. -if(MSVC) - get_filename_component(COMPILER_DIR "${CMAKE_C_COMPILER}" DIRECTORY) - get_filename_component(COMPILER_ROOT "${COMPILER_DIR}" NAME) - set(VCVARS_BAT "${COMPILER_DIR}/vcvars${COMPILER_ROOT}.bat") - if(NOT EXISTS "${VCVARS_BAT}") - # Try the VS2017 location (https://stackoverflow.com/q/43372235) - set(COMPILER_ROOT "") - foreach(DIRS RANGE 0 5) - get_filename_component(COMPILER_DIR "${COMPILER_DIR}" DIRECTORY) - endforeach(DIRS RANGE 0 5) - set(COMPILER_DIR "${COMPILER_DIR}/Auxiliary/Build") - if(CMAKE_CL_64) - set(VCVARS_BAT "${COMPILER_DIR}/vcvars64.bat") - else(CMAKE_CL_64) - set(VCVARS_BAT "${COMPILER_DIR}/vcvars32.bat") - endif(CMAKE_CL_64) - if(NOT EXISTS "${VCVARS_BAT}") - message(FATAL_ERROR "Could not find vcvars bat file in ${COMPILER_DIR}") - endif(NOT EXISTS "${VCVARS_BAT}") - endif(NOT EXISTS "${VCVARS_BAT}") -endif(MSVC) - -############################################################################### -# Zlib -############################################################################### -ExternalProject_Add(ZLIB_BLD - URL ${CMAKE_SOURCE_DIR}/external/zlib-1.2.11.tar.gz - URL_HASH MD5=1c9f62f0778697a09d36121ead88e08e - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} - ) -if(NOT MSVC) - ExternalProject_Target(zlib ZLIB_BLD - OUTPUT_FILE libz${CMAKE_SHARED_LIBRARY_SUFFIX}.1.2.11 - STATIC_OUTPUT_FILE libz${CMAKE_STATIC_LIBRARY_SUFFIX} - SYMLINKS "libz${CMAKE_SHARED_LIBRARY_SUFFIX};libz${CMAKE_SHARED_LIBRARY_SUFFIX}.1" - LINK_TARGET "libz${CMAKE_SHARED_LIBRARY_SUFFIX}" - ) -else(NOT MSVC) - ExternalProject_Target(zlib ZLIB_BLD - OUTPUT_FILE zlib${CMAKE_SHARED_LIBRARY_SUFFIX} - STATIC_OUTPUT_FILE zlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX} - LINK_TARGET_DEBUG "zlibd${CMAKE_SHARED_LIBRARY_SUFFIX}" - STATIC_LINK_TARGET_DEBUG "zlibstaticd${CMAKE_STATIC_LIBRARY_SUFFIX}" - ) -endif(NOT MSVC) -ExternalProject_ByProducts(ZLIB_BLD ${INCLUDE_DIR} - zconf.h - zlib.h - ) - -# Temporarily stub in the library variable setting here - normally this will be -# defined by the ThirdParty logic but we need to test that the import library -# works, particularly with regards to build dependencies since the zlib target -# itself is not a build target, but has to require that the ZLIB_BLD target -# execute before anything that needs it is built. -set(ZLIB_LIBRARY zlib) -set(ZLIB_INCLUDE_DIR ${CMAKE_BINARY_DIR}/${INCLUDE_DIR}) - -############################################################################### -# libpng -# -# Have find_package check for a local libz before trying the system search (in -# case we are building our own zlib) by defining the ZLIB_ROOT prefix for -# find_package -############################################################################### -ExternalProject_Add(PNG_BLD - URL ${CMAKE_SOURCE_DIR}/external/libpng-1.6.35.tar.gz - URL_HASH MD5=d94d9587c421ac42316b6ab8f64f1b85 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_INSTALL_LIBDIR=${LIB_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} -DZLIB_ROOT=${CMAKE_BINARY_DIR} - DEPENDS ${ZLIB_LIBRARY} - ) -ExternalProject_Target(png PNG_BLD - OUTPUT_FILE libpng16${CMAKE_SHARED_LIBRARY_SUFFIX}.16.35.0 - STATIC_OUTPUT_FILE libpng16${CMAKE_STATIC_LIBRARY_SUFFIX} - SYMLINKS "libpng${CMAKE_SHARED_LIBRARY_SUFFIX};libpng16${CMAKE_SHARED_LIBRARY_SUFFIX};libpng16${CMAKE_SHARED_LIBRARY_SUFFIX}.16;libpng${CMAKE_STATIC_LIBRARY_SUFFIX}" - LINK_TARGET "libpng${CMAKE_SHARED_LIBRARY_SUFFIX}" - STATIC_LINK_TARGET "libpng${CMAKE_STATIC_LIBRARY_SUFFIX}" - RPATH - ) -ExternalProject_ByProducts(PNG_BLD ${INCLUDE_DIR} - png.h - pngconf.h - pnglibconf.h - libpng16/png.h - libpng16/pngconf.h - libpng16/pnglibconf.h - ) - -# Temporarily stub in the library variable setting here -set(PNG_LIBRARY png) - - -############################################################################### -# freetype -# -# Note: Having find_package check for local libz and libpng versions before -# trying the system search by defining the ZLIB_ROOT and PNG_ROOT prefixes for -# find_package -############################################################################### -ExternalProject_Add(FREETYPE_BLD - URL ${CMAKE_SOURCE_DIR}/external/freetype-2.9.tar.bz2 - URL_HASH MD5=513c403c110016fdc7e537216a642b1d - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DBUILD_SHARED_LIBS=ON -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} -DPNG_ROOT=${CMAKE_BINARY_DIR} -DZLIB_ROOT=${CMAKE_BINARY_DIR} - DEPENDS ${ZLIB_LIBRARY} ${PNG_LIBRARY} - ) -ExternalProject_Target(freetype FREETYPE_BLD - OUTPUT_FILE libfreetype${CMAKE_SHARED_LIBRARY_SUFFIX}.2.9.0 - SYMLINKS "libfreetype${CMAKE_SHARED_LIBRARY_SUFFIX};libfreetype${CMAKE_SHARED_LIBRARY_SUFFIX}.2.9" - LINK_TARGET "libfreetype${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) -ExternalProject_ByProducts(FREETYPE_BLD ${INCLUDE_DIR} - freetype2/ft2build.h - freetype2/freetype/config/ftheader.h - freetype2/freetype/config/ftmodule.h - freetype2/freetype/config/ftstdlib.h - freetype2/freetype/ftlcdfil.h - freetype2/freetype/ftsynth.h - freetype2/freetype/ftmm.h - freetype2/freetype/ftsizes.h - freetype2/freetype/freetype.h - freetype2/freetype/tttables.h - freetype2/freetype/ftotval.h - freetype2/freetype/ftcache.h - freetype2/freetype/tttags.h - freetype2/freetype/ftbbox.h - freetype2/freetype/fterrors.h - freetype2/freetype/ftfntfmt.h - freetype2/freetype/ftsystem.h - freetype2/freetype/ftbdf.h - freetype2/freetype/ftmoderr.h - freetype2/freetype/ftimage.h - freetype2/freetype/ftoutln.h - freetype2/freetype/ftmodapi.h - freetype2/freetype/fttrigon.h - freetype2/freetype/ftrender.h - freetype2/freetype/ftwinfnt.h - freetype2/freetype/ftadvanc.h - freetype2/freetype/ftchapters.h - freetype2/freetype/ftcid.h - freetype2/freetype/ftpfr.h - freetype2/freetype/ftparams.h - freetype2/freetype/fterrdef.h - freetype2/freetype/ttnameid.h - freetype2/freetype/ftstroke.h - freetype2/freetype/ftbzip2.h - freetype2/freetype/ftgxval.h - freetype2/freetype/ftsnames.h - freetype2/freetype/ftglyph.h - freetype2/freetype/ftlist.h - freetype2/freetype/ftdriver.h - freetype2/freetype/fttypes.h - freetype2/freetype/ftgasp.h - freetype2/freetype/ftlzw.h - freetype2/freetype/t1tables.h - freetype2/freetype/ftincrem.h - freetype2/freetype/ftgzip.h - freetype2/freetype/ftbitmap.h - freetype2/freetype/ftmac.h - freetype2/freetype/config/ftconfig.h - freetype2/freetype/config/ftoption.h - ) - -############################################################################### -# fontconfig -# -# Note: Since Tk uses this on some platforms, on those platforms we must also -# provide a local fontconfig if we want to use a local freetype -############################################################################### - -if(NOT MSVC) - if (TARGET FREETYPE_BLD) - - # fontconfig requires expat - ExternalProject_Add(EXPAT_BLD - URL ${CMAKE_SOURCE_DIR}/external/expat-2.2.6.tar.bz2 - URL_HASH MD5=ca047ae951b40020ac831c28859161b2 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_LIBDIR=${LIB_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) - ExternalProject_Target(expat EXPAT_BLD - OUTPUT_FILE libexpat${CMAKE_SHARED_LIBRARY_SUFFIX}.1.6.8 - SYMLINKS "libexpat${CMAKE_SHARED_LIBRARY_SUFFIX};libexpat${CMAKE_SHARED_LIBRARY_SUFFIX}.1" - LINK_TARGET "libexpat${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) - - # fontconfig requires gperf - set(GPERF_SRC_DIR "${CMAKE_BINARY_DIR}/GPERF_BLD-prefix/src/GPERF_BLD") - set(GPERF_PATCH_FILES "${GPERF_SRC_DIR}/configure") - ExternalProject_Add(GPERF_BLD - URL ${CMAKE_SOURCE_DIR}/external/gperf-3.1.tar.gz - URL_HASH MD5=9e251c0a618ad0824b51117d5d9db87e - PATCH_COMMAND rpath_replace "${CMAKE_BUILD_RPATH}" ${GPERF_PATCH_FILES} - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR}/pkgconfig ${GPERF_SRC_DIR}/configure --prefix=${CMAKE_BINARY_DIR} - BUILD_COMMAND make -j9 - BUILD_IN_SOURCE 1 - INSTALL_COMMAND make install - ) - ExternalProject_Target(gperf GPERF_BLD EXEC - OUTPUT_FILE gperf${CMAKE_EXECUTABLE_SUFFIX} - ) - - set(FONTCONFIG_SRC_DIR "${CMAKE_BINARY_DIR}/FONTCONFIG_BLD-prefix/src/FONTCONFIG_BLD") - set(FONTCONFIG_PATCH_FILES "${FONTCONFIG_SRC_DIR}/configure") - ExternalProject_Add(FONTCONFIG_BLD - URL ${CMAKE_SOURCE_DIR}/external/fontconfig-2.12.3.tar.bz2 - URL_HASH MD5=872f757ec180e8c51918ff39705c40de - PATCH_COMMAND rpath_replace "${CMAKE_BUILD_RPATH}" ${FONTCONFIG_PATCH_FILES} - CONFIGURE_COMMAND ${CMAKE_COMMAND} -E remove ${FONTCONFIG_SRC_DIR}/src/fcobjshash.gperf - COMMAND ${CMAKE_COMMAND} -E remove ${FONTCONFIG_SRC_DIR}/src/fcobjshash.h - COMMAND ${CMAKE_COMMAND} -E env GPERF=${CMAKE_BINARY_DIR}/${BIN_DIR}/gperf${CMAKE_EXECUTABLE_SUFFIX} PKG_CONFIG_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR}/pkgconfig FREETYPE_LIBS=${CMAKE_BINARY_DIR}/${LIB_DIR}/libfreetype${CMAKE_SHARED_LIBRARY_SUFFIX} FREETYPE_LIBS=${CMAKE_BINARY_DIR}/${LIB_DIR}/libfreetype${CMAKE_SHARED_LIBRARY_SUFFIX} FREETYPE_CFLAGS=-I${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/freetype2 LDFLAGS=-lfreetype ${FONTCONFIG_SRC_DIR}/configure --prefix=${CMAKE_BINARY_DIR} - BUILD_COMMAND make -j9 - BUILD_IN_SOURCE 1 - INSTALL_COMMAND make install - DEPENDS FREETYPE_BLD EXPAT_BLD GPERF_BLD - ) - ExternalProject_Target(fontconfig FONTCONFIG_BLD - OUTPUT_FILE libfontconfig${CMAKE_SHARED_LIBRARY_SUFFIX}.1.9.3 - SYMLINKS "libfontconfig${CMAKE_SHARED_LIBRARY_SUFFIX};libfontconfig${CMAKE_SHARED_LIBRARY_SUFFIX}.1" - LINK_TARGET "libfontconfig${CMAKE_SHARED_LIBRARY_SUFFIX}" - ) - endif (TARGET FREETYPE_BLD) -else(NOT MSVC) - set(FONTCONFIG_LIBRARY "") -endif(NOT MSVC) - -############################################################################### -# Tcl -############################################################################### -set(TCL_SRC_DIR "${CMAKE_BINARY_DIR}/TCL_BLD-prefix/src/TCL_BLD") -set(TCL_SRC "${CMAKE_SOURCE_DIR}/external/tcl8.6.9-src.tar.gz") -set(TCL_MD5 "aa0a121d95a0e7b73a036f26028538d4") -set(TCL_MINOR_VERSION 6) -set(ITCL_VERSION 4.1.2) -if(NOT MSVC) - set(TCL_PATCH_FILES "${TCL_SRC_DIR}/unix/configure" "${TCL_SRC_DIR}/macosx/configure" "${TCL_SRC_DIR}/unix/tcl.m4") - ExternalProject_Add(TCL_BLD - URL ${TCL_SRC} - URL_HASH MD5=${TCL_MD5} - PATCH_COMMAND rpath_replace "${CMAKE_BUILD_RPATH}" ${TCL_PATCH_FILES} - CONFIGURE_COMMAND ${TCL_SRC_DIR}/unix/configure --prefix=${CMAKE_BINARY_DIR} - BUILD_COMMAND make -j9 - INSTALL_COMMAND make install - ) -else(NOT MSVC) - ExternalProject_Add(TCL_BLD - URL ${TCL_SRC} - URL_HASH MD5=${TCL_MD5} - CONFIGURE_COMMAND "" - BINARY_DIR ${TCL_SRC_DIR}/win - BUILD_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc INSTALLDIR=${CMAKE_BINARY_DIR} - INSTALL_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc install INSTALLDIR=${CMAKE_BINARY_DIR} - ) -endif(NOT MSVC) -ExternalProject_Target(tcl TCL_BLD - OUTPUT_FILE libtcl8.${TCL_MINOR_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX} - STATIC_OUTPUT_FILE libtclstub8.${TCL_MINOR_VERSION}${CMAKE_STATIC_LIBRARY_SUFFIX} - RPATH - ) -ExternalProject_Target(tclsh TCL_BLD - OUTPUT_FILE tclsh8.${TK_MINOR_VERSION}${CMAKE_EXECUTABLE_SUFFIX} - RPATH EXEC - ) -ExternalProject_ByProducts(TCL_BLD ${LIB_DIR} FIXPATH - tclConfig.sh - tclooConfig.sh - ) -ExternalProject_ByProducts(TCL_BLD ${INCLUDE_DIR} - tclDecls.h - tcl.h - tclOODecls.h - tclOO.h - tclPlatDecls.h - tclTomMathDecls.h - tclTomMath.h - ) - -include(${CMAKE_SOURCE_DIR}/external/tcl_lib_byproducts.cmake) -ExternalProject_ByProducts(TCL_BLD ${LIB_DIR} ${TCL_LIB_BYPRODUCTS}) - - -############################################################################### -# Tk -############################################################################### -set(TK_SRC_DIR "${CMAKE_BINARY_DIR}/TK_BLD-prefix/src/TK_BLD") -set(TK_SRC "${CMAKE_SOURCE_DIR}/external/tk8.6.9.1-src.tar.gz") -set(TK_MD5 "9efe3976468352dc894dae0c4e785a8e") -set(TK_MINOR_VERSION 6) -if(NOT MSVC) - set(TK_PATCH_FILES "${TK_SRC_DIR}/unix/configure" "${TK_SRC_DIR}/macosx/configure" "${TK_SRC_DIR}/unix/tcl.m4") - ExternalProject_Add(TK_BLD - URL ${TK_SRC} - URL_HASH MD5=${TK_MD5} - PATCH_COMMAND rpath_replace "${CMAKE_BUILD_RPATH}" ${TK_PATCH_FILES} - CONFIGURE_COMMAND ${TK_SRC_DIR}/unix/configure --prefix=${CMAKE_BINARY_DIR} --with-tcl=${CMAKE_BINARY_DIR}/${LIB_DIR} - BUILD_COMMAND make -j9 - INSTALL_COMMAND make install - DEPENDS TCL_BLD ${FONTCONFIG_LIBRARY} - ) -else(NOT MSVC) - ExternalProject_Add(TK_BLD - URL ${TK_SRC} - URL_HASH MD5=${TK_MD5} - CONFIGURE_COMMAND "" - BINARY_DIR ${TK_SRC_DIR}/win - BUILD_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc INSTALLDIR=${CMAKE_BINARY_DIR} TCLDIR=${TCL_SRC_DIR} - INSTALL_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc install INSTALLDIR=${CMAKE_BINARY_DIR} TCLDIR=${TCL_SRC_DIR} - DEPENDS TCL_BLD - ) -endif(NOT MSVC) -ExternalProject_Target(tk TK_BLD - OUTPUT_FILE libtk8.${TK_MINOR_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX} - STATIC_OUTPUT_FILE libtkstub8.${TK_MINOR_VERSION}${CMAKE_STATIC_LIBRARY_SUFFIX} - RPATH - ) -ExternalProject_Target(wish TK_BLD - OUTPUT_FILE wish8.${TK_MINOR_VERSION}${CMAKE_EXECUTABLE_SUFFIX} - RPATH EXEC - ) - -ExternalProject_ByProducts(TK_BLD ${LIB_DIR} FIXPATH - tkConfig.sh - ) - -ExternalProject_ByProducts(TK_BLD ${INCLUDE_DIR} - tkDecls.h - tk.h - tkPlatDecls.h - ) - -include(${CMAKE_SOURCE_DIR}/external/tk_lib_byproducts.cmake) -ExternalProject_ByProducts(TK_BLD ${LIB_DIR} ${TK_LIB_BYPRODUCTS}) - -############################################################################### -# Itk -############################################################################### -set(ITK_SRC_DIR "${CMAKE_BINARY_DIR}/ITK_BLD-prefix/src/ITK_BLD") -set(ITK_SRC "${CMAKE_SOURCE_DIR}/external/itk4.1.0.tar.gz") -set(ITK_MD5 "600df0a12868507c52d46fd59d4e1c16") -if(NOT MSVC) - set(ITK_PATCH_FILES "${ITK_SRC_DIR}/configure" "${ITK_SRC_DIR}/tclconfig/tcl.m4") - ExternalProject_Add(ITK_BLD - URL ${ITK_SRC} - URL_HASH MD5=${ITK_MD5} - PATCH_COMMAND rpath_replace "${CMAKE_BUILD_RPATH}" ${ITK_PATCH_FILES} - CONFIGURE_COMMAND ${ITK_SRC_DIR}/configure --prefix=${CMAKE_BINARY_DIR} --with-tcl=${CMAKE_BINARY_DIR}/lib --with-tk=${CMAKE_BINARY_DIR}/lib --with-itcl=${CMAKE_BINARY_DIR}/lib/itcl${ITCL_VERSION} - BUILD_COMMAND make -j9 - INSTALL_COMMAND make install - DEPENDS TCL_BLD TK_BLD - ) -else(NOT MSVC) - ExternalProject_Add(ITK_BLD - URL ${ITK_SRC} - URL_HASH MD5=${ITK_MD5} - CONFIGURE_COMMAND "" - BINARY_DIR ${ITK_SRC_DIR}/win - BUILD_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc INSTALLDIR=${CMAKE_BINARY_DIR} TCLDIR=${TCL_SRC_DIR} TKDIR=${TK_SRC_DIR} - INSTALL_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc install INSTALLDIR=${CMAKE_BINARY_DIR} TCLDIR=${TCL_SRC_DIR} TKDIR=${TK_SRC_DIR} - DEPENDS TCL_BLD TK_BLD - ) -endif(NOT MSVC) -ExternalProject_Target(itk ITK_BLD - IMPORT_PREFIX itk4.1.0 - OUTPUT_FILE libitk4.1.0${CMAKE_SHARED_LIBRARY_SUFFIX} - ) - -ExternalProject_ByProducts(ITK_BLD ${INCLUDE_DIR} - itk.h - itkInt.h - ) - -ExternalProject_ByProducts(ITK_BLD ${LIB_DIR} - itk4.1.0/itk.tcl - itk4.1.0/pkgIndex.tcl - itk4.1.0/Widget.itk - itk4.1.0/Archetype.itk - itk4.1.0/Toplevel.itk - itk4.1.0/tclIndex - ) - -############################################################################### -# IWidgets -############################################################################### -set(IWIDGETS_SRC_DIR "${CMAKE_BINARY_DIR}/IWIDGETS_BLD-prefix/src/IWIDGETS_BLD") -set(IWIDGETS_SRC "${CMAKE_SOURCE_DIR}/external/iwidgets-4.1.1.tar.gz") -set(IWIDGETS_MD5 "cca62e022b0d561a2bba19bd56ecc667") -if(NOT MSVC) - set(IWIDGETS_PATCH_FILES "${IWIDGETS_SRC_DIR}/configure" "${IWIDGETS_SRC_DIR}/tclconfig/tcl.m4") - ExternalProject_Add(IWIDGETS_BLD - URL ${IWIDGETS_SRC} - URL_HASH MD5=${IWIDGETS_MD5} - PATCH_COMMAND rpath_replace "${CMAKE_BUILD_RPATH}" ${IWIDGETS_PATCH_FILES} - CONFIGURE_COMMAND ${IWIDGETS_SRC_DIR}/configure --prefix=${CMAKE_BINARY_DIR} --with-tcl=${CMAKE_BINARY_DIR}/lib --with-tk=${CMAKE_BINARY_DIR}/lib --with-itcl=${CMAKE_BINARY_DIR}/lib/itcl${ITCL_VERSION} --with-itk=${ITK_SRC_DIR} - BUILD_COMMAND make -j9 - INSTALL_COMMAND make install - DEPENDS TCL_BLD TK_BLD ITK_BLD - ) -else(NOT MSVC) - ExternalProject_Add(IWIDGETS_BLD - URL ${IWIDGETS_SRC} - URL_HASH MD5=${IWIDGETS_MD5} - CONFIGURE_COMMAND "" - BINARY_DIR ${IWIDGETS_SRC_DIR}/win - BUILD_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc INSTALLDIR=${CMAKE_BINARY_DIR} - INSTALL_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc install INSTALLDIR=${CMAKE_BINARY_DIR} - DEPENDS TCL_BLD TK_BLD - ) -endif(NOT MSVC) - -include(${CMAKE_SOURCE_DIR}/external/iwidgets_lib_byproducts.cmake) -ExternalProject_ByProducts(IWIDGETS_BLD ${LIB_DIR} ${IWIDGETS_LIB_BYPRODUCTS}) - -############################################################################### -# TkTable -############################################################################### -set(TKTABLE_SRC_DIR "${CMAKE_BINARY_DIR}/TKTABLE_BLD-prefix/src/TKTABLE_BLD") -set(TKTABLE_PATCH_FILES "${TKTABLE_SRC_DIR}/configure" "${TKTABLE_SRC_DIR}/tclconfig/tcl.m4") -ExternalProject_Add(TKTABLE_BLD - URL ${CMAKE_SOURCE_DIR}/external/Tktable2.10.tar.gz - URL_HASH MD5=ecdd96b39ad49b820bf084eb1c786f66 - PATCH_COMMAND rpath_replace "${CMAKE_BUILD_RPATH}" ${TKTABLE_PATCH_FILES} - CONFIGURE_COMMAND ${TKTABLE_SRC_DIR}/configure --prefix=${CMAKE_BINARY_DIR} --with-tcl=${CMAKE_BINARY_DIR}/lib --with-tk=${CMAKE_BINARY_DIR}/lib - BUILD_COMMAND make -j9 - INSTALL_COMMAND make install - DEPENDS TCL_BLD TK_BLD - ) -ExternalProject_Target(tktable TKTABLE_BLD - IMPORT_PREFIX Tktable2.10 - OUTPUT_FILE libTktable2.10${CMAKE_SHARED_LIBRARY_SUFFIX} - ) - -ExternalProject_ByProducts(TKTABLE_BLD ${LIB_DIR} - Tktable2.10/README.txt - Tktable2.10/html/tkTable.html - Tktable2.10/pkgIndex.tcl - Tktable2.10/tkTable.tcl - Tktable2.10/tktable.py - Tktable2.10/license.txt - ) - -############################################################################### -# Tkhtml -############################################################################### -cmake_set_rpath(SUFFIX "Tkhtml3.0.1") -ExternalProject_Add(TKHTML_BLD - URL ${CMAKE_SOURCE_DIR}/external/tkhtml-3.0.1.tar.gz - URL_HASH MD5=9abfe32b386558178f4d9cb8fb67a78c - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} -DTCL_STUB_LIBRARY=${CMAKE_BINARY_DIR}/${LIB_DIR}/libtclstub8.${TCL_MINOR_VERSION}${CMAKE_STATIC_LIBRARY_SUFFIX} -DTK_STUB_LIBRARY=${CMAKE_BINARY_DIR}/${LIB_DIR}/libtkstub8.${TCL_MINOR_VERSION}${CMAKE_STATIC_LIBRARY_SUFFIX} -DTK_LIBRARY=${CMAKE_BINARY_DIR}/${LIB_DIR}/libtk8.${TCL_MINOR_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX} -DTCL_TCLSH=${CMAKE_BINARY_DIR}/${BIN_DIR}/tclsh8.${TCL_MINOR_VERSION}${CMAKE_EXECUTABLE_SUFFIX} -DTCL_INCLUDE_DIRS=${CMAKE_BINARY_DIR}/include - DEPENDS TCL_BLD TK_BLD - ) -ExternalProject_Target(tkhtml TKHTML_BLD - IMPORT_PREFIX Tkhtml3.0.1 - OUTPUT_FILE libTkhtml${CMAKE_SHARED_LIBRARY_SUFFIX}.3.0 - SYMLINKS "libTkhtml${CMAKE_SHARED_LIBRARY_SUFFIX}" - LINK_TARGET "libTkhtml${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) -cmake_set_rpath("") - -ExternalProject_ByProducts(TKHTML_BLD ${LIB_DIR} - Tkhtml3.0.1/pkgIndex.tcl - ) - -############################################################################### -# GDiam -############################################################################### -ExternalProject_Add(GDIAM_BLD - URL ${CMAKE_SOURCE_DIR}/external/libgdiam-1.0.3.tar.gz - URL_HASH MD5=f52c1a0e565a9cedadeeb3b0bedcca6f - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) -ExternalProject_Target(gdiam GDIAM_BLD - OUTPUT_FILE libgdiam${CMAKE_SHARED_LIBRARY_SUFFIX} - RPATH - ) - -# TODO - update gdiam build to install header - -############################################################################### -# NETPBM -############################################################################### -ExternalProject_Add(NETPBM_BLD - URL ${CMAKE_SOURCE_DIR}/external/libnetpbm-minimal.tar.gz - URL_HASH MD5=4e89f5b70c7b3f24e08b9a3b5e62c2b4 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) -ExternalProject_Target(netpbm NETPBM_BLD - OUTPUT_FILE libnetpbm${CMAKE_SHARED_LIBRARY_SUFFIX} - RPATH - ) - -# TODO - update netpbm build to install headers - -############################################################################### -# libregex -############################################################################### -ExternalProject_Add(REGEX_BLD - URL ${CMAKE_SOURCE_DIR}/external/libregex.tar.gz - URL_HASH MD5=ef1f76c1af29bb0e4105b7c0eb5a215e - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) -ExternalProject_Target(regex REGEX_BLD - OUTPUT_FILE libregex${CMAKE_SHARED_LIBRARY_SUFFIX}.1.0.4 - SYMLINKS "libregex${CMAKE_SHARED_LIBRARY_SUFFIX};libregex${CMAKE_SHARED_LIBRARY_SUFFIX}.1" - LINK_TARGET "libregex${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) - -# TODO - update libregex build to install headers - -############################################################################### -# Screened Poisson Surface Reconstruction -############################################################################### -ExternalProject_Add(SPSR_BLD - URL ${CMAKE_SOURCE_DIR}/external/libspsr.tar.gz - URL_HASH MD5=e5b10c7982cd2b9b287579d43588fbfa - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DBUILD_SHARED_LIBS=ON -DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) -ExternalProject_Target(spsr SPSR_BLD - OUTPUT_FILE libSPSR${CMAKE_SHARED_LIBRARY_SUFFIX} - RPATH - ) - -# TODO - update SPSR build to install headers - -############################################################################### -# libtermlib -############################################################################### -if(NOT MSVC) - ExternalProject_Add(TERMLIB_BLD - URL ${CMAKE_SOURCE_DIR}/external/libtermlib.tar.gz - URL_HASH MD5=00b6ff29ddba4a75ede48618cb7cacc5 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) - ExternalProject_Target(termlib TERMLIB_BLD - OUTPUT_FILE libtermlib${CMAKE_SHARED_LIBRARY_SUFFIX}.1.7.1 - SYMLINKS "libtermlib${CMAKE_SHARED_LIBRARY_SUFFIX};libtermlib${CMAKE_SHARED_LIBRARY_SUFFIX}.1" - LINK_TARGET "libtermlib${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) -endif(NOT MSVC) - -# TODO - update termlib build to install headers - -############################################################################### -# libutahrle -############################################################################### -ExternalProject_Add(UTAHRLE_BLD - URL ${CMAKE_SOURCE_DIR}/external/libutahrle.tar.gz - URL_HASH MD5=a50af0cbb6cc7e47b44142be82968383 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) -ExternalProject_Target(utahrle UTAHRLE_BLD - OUTPUT_FILE libutahrle${CMAKE_SHARED_LIBRARY_SUFFIX}.19.0.1 - STATIC_OUTPUT_FILE libutahrle${CMAKE_STATIC_LIBRARY_SUFFIX} - SYMLINKS "libutahrle${CMAKE_SHARED_LIBRARY_SUFFIX};libutahrle${CMAKE_SHARED_LIBRARY_SUFFIX}.19" - LINK_TARGET "libutahrle${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) -ExternalProject_ByProducts(UTAHRLE_BLD ${INCLUDE_DIR} - rle.h - rle_code.h - rle_config.h - rle_put.h - rle_raw.h - ) - -############################################################################### -# libvds -############################################################################### -ExternalProject_Add(VDS_BLD - URL ${CMAKE_SOURCE_DIR}/external/libvds.tar.gz - URL_HASH MD5=e5b216a89af6b02a65d50abae8e52cb2 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) -ExternalProject_Target(vds VDS_BLD - OUTPUT_FILE libvds${CMAKE_SHARED_LIBRARY_SUFFIX}.1.0.1 - SYMLINKS "libvds${CMAKE_SHARED_LIBRARY_SUFFIX};libvds${CMAKE_SHARED_LIBRARY_SUFFIX}.1" - LINK_TARGET "libvds${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) -ExternalProject_ByProducts(VDS_BLD ${INCLUDE_DIR} - vds.h - ) - -############################################################################### -# LZ4 -############################################################################### -ExternalProject_Add(LZ4_BLD - URL ${CMAKE_SOURCE_DIR}/external/lz4-1.8.3-minimal-cmakeified.tar.gz - URL_HASH MD5=cc9610d7466926011380cd617ed62a49 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) -ExternalProject_Target(lz4 LZ4_BLD - OUTPUT_FILE liblz4${CMAKE_SHARED_LIBRARY_SUFFIX} - RPATH - ) -ExternalProject_ByProducts(LZ4_BLD ${INCLUDE_DIR} - lz4.h - lz4hc.h - lz4frame.h - ) - -############################################################################### -# OpenNURBS -############################################################################### -ExternalProject_Add(OPENNURBS_BLD - URL ${CMAKE_SOURCE_DIR}/external/openNURBS.tar.gz - URL_HASH MD5=c55cae1c39e263dc990773434d8c978c - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - DEPENDS ${ZLIB_LIBRARY} - ) -ExternalProject_Target(openNURBS OPENNURBS_BLD - OUTPUT_FILE libopenNURBS${CMAKE_SHARED_LIBRARY_SUFFIX}.2012.10.245 - SYMLINKS "libopenNURBS${CMAKE_SHARED_LIBRARY_SUFFIX}" - LINK_TARGET "libopenNURBS${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) -ExternalProject_ByProducts(OPENNURBS_BLD ${INCLUDE_DIR} - openNURBS/opennurbs.h - openNURBS/opennurbs_3dm.h - openNURBS/opennurbs_3dm_attributes.h - openNURBS/opennurbs_3dm_properties.h - openNURBS/opennurbs_3dm_settings.h - openNURBS/opennurbs_annotation.h - openNURBS/opennurbs_annotation2.h - openNURBS/opennurbs_arc.h - openNURBS/opennurbs_arccurve.h - openNURBS/opennurbs_archive.h - openNURBS/opennurbs_array.h - openNURBS/opennurbs_array_defs.h - openNURBS/opennurbs_base32.h - openNURBS/opennurbs_base64.h - openNURBS/opennurbs_beam.h - openNURBS/opennurbs_bezier.h - openNURBS/opennurbs_bitmap.h - openNURBS/opennurbs_bounding_box.h - openNURBS/opennurbs_box.h - openNURBS/opennurbs_brep.h - openNURBS/opennurbs_circle.h - openNURBS/opennurbs_color.h - openNURBS/opennurbs_compress.h - openNURBS/opennurbs_cone.h - openNURBS/opennurbs_crc.h - openNURBS/opennurbs_curve.h - openNURBS/opennurbs_curveonsurface.h - openNURBS/opennurbs_curveproxy.h - openNURBS/opennurbs_cylinder.h - openNURBS/opennurbs_defines.h - openNURBS/opennurbs_detail.h - openNURBS/opennurbs_dimstyle.h - openNURBS/opennurbs_dll_resource.h - openNURBS/opennurbs_ellipse.h - openNURBS/opennurbs_error.h - openNURBS/opennurbs_evaluate_nurbs.h - openNURBS/opennurbs_extensions.h - openNURBS/opennurbs_font.h - openNURBS/opennurbs_fpoint.h - openNURBS/opennurbs_fsp.h - openNURBS/opennurbs_fsp_defs.h - openNURBS/opennurbs_geometry.h - openNURBS/opennurbs_group.h - openNURBS/opennurbs_hatch.h - openNURBS/opennurbs_hsort_template.h - openNURBS/opennurbs_instance.h - openNURBS/opennurbs_intersect.h - openNURBS/opennurbs_knot.h - openNURBS/opennurbs_layer.h - openNURBS/opennurbs_light.h - openNURBS/opennurbs_line.h - openNURBS/opennurbs_linecurve.h - openNURBS/opennurbs_linestyle.h - openNURBS/opennurbs_linetype.h - openNURBS/opennurbs_lookup.h - openNURBS/opennurbs_mapchan.h - openNURBS/opennurbs_massprop.h - openNURBS/opennurbs_material.h - openNURBS/opennurbs_math.h - openNURBS/opennurbs_matrix.h - openNURBS/opennurbs_memory.h - openNURBS/opennurbs_mesh.h - openNURBS/opennurbs_nurbscurve.h - openNURBS/opennurbs_nurbssurface.h - openNURBS/opennurbs_object.h - openNURBS/opennurbs_object_history.h - openNURBS/opennurbs_objref.h - openNURBS/opennurbs_offsetsurface.h - openNURBS/opennurbs_optimize.h - openNURBS/opennurbs_plane.h - openNURBS/opennurbs_planesurface.h - openNURBS/opennurbs_pluginlist.h - openNURBS/opennurbs_point.h - openNURBS/opennurbs_pointcloud.h - openNURBS/opennurbs_pointgeometry.h - openNURBS/opennurbs_pointgrid.h - openNURBS/opennurbs_polycurve.h - openNURBS/opennurbs_polyedgecurve.h - openNURBS/opennurbs_polyline.h - openNURBS/opennurbs_polylinecurve.h - openNURBS/opennurbs_qsort_template.h - openNURBS/opennurbs_rand.h - openNURBS/opennurbs_rendering.h - openNURBS/opennurbs_revsurface.h - openNURBS/opennurbs_rtree.h - openNURBS/opennurbs_sphere.h - openNURBS/opennurbs_string.h - openNURBS/opennurbs_sumsurface.h - openNURBS/opennurbs_surface.h - openNURBS/opennurbs_surfaceproxy.h - openNURBS/opennurbs_system.h - openNURBS/opennurbs_textlog.h - openNURBS/opennurbs_texture.h - openNURBS/opennurbs_texture_mapping.h - openNURBS/opennurbs_torus.h - openNURBS/opennurbs_unicode.h - openNURBS/opennurbs_userdata.h - openNURBS/opennurbs_uuid.h - openNURBS/opennurbs_version.h - openNURBS/opennurbs_viewport.h - openNURBS/opennurbs_workspace.h - openNURBS/opennurbs_x.h - openNURBS/opennurbs_xform.h - openNURBS/opennurbs_zlib.h - ) - -############################################################################### -# Poly2Tri -############################################################################### -ExternalProject_Add(POLY2TRI_BLD - URL ${CMAKE_SOURCE_DIR}/external/poly2tri.tar.gz - URL_HASH MD5=e2b2ec40f7907c46cc08199ab3b3f6f1 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DBUILD_SHARED_LIBS=ON -DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) -ExternalProject_Target(poly2tri POLY2TRI_BLD - OUTPUT_FILE libp2t${CMAKE_SHARED_LIBRARY_SUFFIX}.1.0.1 - SYMLINKS "libp2t${CMAKE_SHARED_LIBRARY_SUFFIX};libp2t${CMAKE_SHARED_LIBRARY_SUFFIX}.1" - LINK_TARGET "libp2t${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) -ExternalProject_ByProducts(POLY2TRI_BLD ${INCLUDE_DIR} - poly2tri/poly2tri.h - poly2tri/common/shapes.h - poly2tri/sweep/cdt.h - ) - -############################################################################### -# RPly -############################################################################### -ExternalProject_Add(RPLY_BLD - URL ${CMAKE_SOURCE_DIR}/external/rply.tar.gz - URL_HASH MD5=4f30f8db7e36374415559405f348e58c - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DBUILD_SHARED_LIBS=ON -DLIB_DIR=${LIB_DIR} -DBIN_DIR=${BIN_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} - ) -ExternalProject_Target(rply RPLY_BLD - OUTPUT_FILE librply${CMAKE_SHARED_LIBRARY_SUFFIX} - RPATH - ) - -#TODO - update rply build to install header - -############################################################################### -# PROJ-4 -############################################################################### -#ExternalProject_Add(PROJ4_BLD -# URL ${CMAKE_SOURCE_DIR}/external/proj-5.2.0.tar.gz -# URL_HASH MD5=c85b0da471fcd80655e3448ebf4b9027 -# CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DPROJ_TESTS=OFF -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_LIBDIR=${LIB_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} -# ) -#ExternalProject_Target(proj4 PROJ4_BLD -# OUTPUT_FILE libproj${CMAKE_SHARED_LIBRARY_SUFFIX}.14.0.2 -# SYMLINKS "libproj${CMAKE_SHARED_LIBRARY_SUFFIX};libproj${CMAKE_SHARED_LIBRARY_SUFFIX}.14" -# LINK_TARGET "libproj${CMAKE_SHARED_LIBRARY_SUFFIX}" -# RPATH -# ) - -############################################################################### -# GDAL -############################################################################### - -#ExternalProject_Add(JPEG_BLD -# URL ${CMAKE_SOURCE_DIR}/external/libjpeg-cmake.tar.gz -# URL_HASH MD5=9856064c3a3d572b6248bbba97cea820 -# CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_LIBDIR=${LIB_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} -# ) -#ExternalProject_Target(jpeg JPEG_BLD -# OUTPUT_FILE libjpeg${CMAKE_SHARED_LIBRARY_SUFFIX} -# RPATH -# ) -# -#set(XML2_SRC_DIR "${CMAKE_BINARY_DIR}/XML2_BLD-prefix/src/XML2_BLD") -#ExternalProject_Add(XML2_BLD -# URL ${CMAKE_SOURCE_DIR}/external/libxml2-2.9.8.tar.gz -# URL_HASH MD5=b786e353e2aa1b872d70d5d1ca0c740d -# CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env CFLAGS=-I${CMAKE_BINARY_DIR}/${INCLUDE_DIR} LDFLAGS=-Wl,-rpath,${CMAKE_BUILD_RPATH} ${XML2_SRC_DIR}/configure --without-python --with-zlib=${CMAKE_BINARY_DIR} --prefix=${CMAKE_BINARY_DIR} -# BUILD_COMMAND make -j9 -# INSTALL_COMMAND make install -# DEPENDS ${ZLIB_LIBRARY} -# ) -#ExternalProject_Target(xml2 XML2_BLD -# OUTPUT_FILE libxml2${CMAKE_SHARED_LIBRARY_SUFFIX}.2.9.8 -# SYMLINKS "libxml2${CMAKE_SHARED_LIBRARY_SUFFIX};libxml2${CMAKE_SHARED_LIBRARY_SUFFIX}.2" -# LINK_TARGET "libxml2${CMAKE_SHARED_LIBRARY_SUFFIX}" -# RPATH -# ) -# -#set(GDAL_SRC_DIR "${CMAKE_BINARY_DIR}/GDAL_BLD-prefix/src/GDAL_BLD") -#if(NOT MSVC) -#ExternalProject_Add(GDAL_BLD -# URL ${CMAKE_SOURCE_DIR}/external/gdal-2.3.2.tar.gz -# URL_HASH MD5=221e4bfe3e8e9443fd33f8fe46f8bf60 -# CONFIGURE_COMMAND ${CMAKE_COMMAND} -E env CFLAGS=-I${CMAKE_BINARY_DIR}/${INCLUDE_DIR} CXXFLAGS=-I${CMAKE_BINARY_DIR}/${INCLUDE_DIR} LDFLAGS=-Wl,-rpath,${CMAKE_BUILD_RPATH} ${GDAL_SRC_DIR}/configure --without-libtool --with-jpeg=${CMAKE_BINARY_DIR} --with-libz=${CMAKE_BINARY_DIR} --with-png=${CMAKE_BINARY_DIR} --with-xml2=${CMAKE_BINARY_DIR} --with-proj=${CMAKE_BINARY_DIR} --prefix=${CMAKE_BINARY_DIR} -# BUILD_COMMAND make -j9 -# BUILD_IN_SOURCE 1 -# INSTALL_COMMAND make install -# DEPENDS PROJ4_BLD ${PNG_LIBRARY} ${ZLIB_LIBRARY} JPEG_BLD XML2_BLD -# ) -#else(NOT MSVC) -#ExternalProject_Add(GDAL_BLD -# URL ${CMAKE_SOURCE_DIR}/external/gdal-2.3.2.tar.gz -# URL_HASH MD5=221e4bfe3e8e9443fd33f8fe46f8bf60 -# CONFIGURE_COMMAND "" -# BUILD_IN_SOURCE 1 -# BUILD_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc GDAL_HOME=${CMAKE_BINARY_DIR} WIN64=1 -# INSTALL_COMMAND ${VCVARS_BAT} && nmake -f makefile.vc install GDAL_HOME=${CMAKE_BINARY_DIR} WIN64=1 -# DEPENDS PROJ4_BLD -# ) -#endif(NOT MSVC) -#ExternalProject_Target(gdal GDAL_BLD -# OUTPUT_FILE libgdal${CMAKE_SHARED_LIBRARY_SUFFIX}.2.3.2 -# SYMLINKS "libgdal${CMAKE_SHARED_LIBRARY_SUFFIX};libgdal${CMAKE_SHARED_LIBRARY_SUFFIX}.2" -# LINK_TARGET "libgdal${CMAKE_SHARED_LIBRARY_SUFFIX}" -# RPATH -# ) - -############################################################################### -# OpenSceneGraph -############################################################################### - -# TODO - plugins are handled in a subdirectory, which means one RPATH setting -# will not work here unless we patch the build to put all the plugins in the -# same lib directory as the main libraries or actually accept and repeat our -# own RPATH setup. (Don't see a viable way to do either without -# actually patching the sources to respect what we're trying to do - -# that's a possiblity, but needs a portable patch command: -# https://gitlab.kitware.com/cmake/cmake/issues/16854) -# -# Need to see if I can get https://github.com/starseeker/unix-tools/tree/master/patch to -# build and work on Windows -# -#ExternalProject_Add(OSG_BLD -# URL ${CMAKE_SOURCE_DIR}/external/OpenSceneGraph-3.6.3.tar.gz -# URL_HASH MD5=bd4cd3f50d0f030facbd71524540d5e7 -# CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DBUILD_SHARED_LIBS=ON -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DLIB_POSTFIX="" -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} -DBUILD_OSG_DEPRECATED_SERIALIZERS=OFF -DBUILD_OSG_APPLICATIONS=OFF -DCMAKE_DEBUG_POSTFIX="" -DOSG_USE_DEPRECATED_API=OFF -DBUILD_OSG_EXAMPLES=OFF -# ) -#ExternalProject_Target(osg OSG_BLD -# OUTPUT_FILE libosg${CMAKE_SHARED_LIBRARY_SUFFIX}.14.0.2 -# SYMLINKS "libosg${CMAKE_SHARED_LIBRARY_SUFFIX};libosg${CMAKE_SHARED_LIBRARY_SUFFIX}.14" -# LINK_TARGET "libosg${CMAKE_SHARED_LIBRARY_SUFFIX}" -# RPATH -# ) - -############################################################################### -# STEPcode -############################################################################### - -ExternalProject_Add(LEMON_BLD - URL ${CMAKE_SOURCE_DIR}/external/lemon.tar.gz - URL_HASH MD5=69a6efbe1e577a872b9ae036da3af793 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} - ) -ExternalProject_Target(lemon LEMON_BLD EXEC - OUTPUT_FILE lemon${CMAKE_EXECUTABLE_SUFFIX} - ) - -ExternalProject_Add(RE2C_BLD - URL ${CMAKE_SOURCE_DIR}/external/re2c.tar.gz - URL_HASH MD5=ac1f6b63f478fc3435a85f7aca2864ea - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLEMON_TEMPLATE=${CMAKE_BINARY_DIR}/share/lemon/lempar.c - DEPENDS lemon - ) -ExternalProject_Target(re2c RE2C_BLD EXEC - OUTPUT_FILE re2c${CMAKE_EXECUTABLE_SUFFIX} - ) - -ExternalProject_Add(PERPLEX_BLD - URL ${CMAKE_SOURCE_DIR}/external/perplex.tar.gz - URL_HASH MD5=9e68cadea7764c56ff73dfdfea985551 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DLEMON_TEMPLATE=${CMAKE_BINARY_DIR}/share/lemon/lempar.c - DEPENDS lemon re2c - ) -ExternalProject_Target(perplex PERPLEX_BLD EXEC - OUTPUT_FILE perplex${CMAKE_EXECUTABLE_SUFFIX} - ) - -ExternalProject_Add(STEPCODE_BLD - URL ${CMAKE_SOURCE_DIR}/external/STEPcode-0.7.tar.gz - URL_HASH MD5=93066e11024ceb0f3225f7df881eff99 - CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DCMAKE_PREFIX_PATH=${CMAKE_BINARY_DIR}/${LIB_DIR} -DCMAKE_INSTALL_RPATH=${CMAKE_BUILD_RPATH} -DSC_BUILD_SCHEMAS= -DLEMON_TEMPLATE=${CMAKE_BINARY_DIR}/share/lemon/lempar.c -DHAVE_PARENT_BUILD=1 -DSC_INSTALL_PREFIX=${CMAKE_BINARY_DIR} - DEPENDS lemon re2c perplex - ) -set(STEPCODE_LIBS base express exppp stepcore stepeditor stepdai steputils) -foreach(SCLIB ${STEPCODE_LIBS}) - ExternalProject_Target(lib${SCLIB} STEPCODE_BLD - OUTPUT_FILE lib${SCLIB}${CMAKE_SHARED_LIBRARY_SUFFIX}.2.0.0 - SYMLINKS "lib${SCLIB}${CMAKE_SHARED_LIBRARY_SUFFIX};lib${SCLIB}${CMAKE_SHARED_LIBRARY_SUFFIX}.2" - LINK_TARGET "lib${SCLIB}${CMAKE_SHARED_LIBRARY_SUFFIX}" - RPATH - ) -endforeach(SCLIB ${STEPCODE_LIBS}) -set(STEPCODE_EXECS check-express exppp exp2cxx exp2python) -foreach(SCEXEC ${STEPCODE_EXECS}) - ExternalProject_Target(${SCEXEC} STEPCODE_BLD - OUTPUT_FILE ${SCEXEC}${CMAKE_EXECUTABLE_SUFFIX} - RPATH EXEC - ) -endforeach(SCEXEC ${STEPCODE_EXECS}) -ExternalProject_ByProducts(STEPCODE_BLD ${INCLUDE_DIR} - stepcode/cldai/sdaiApplication_instance_set.h - stepcode/cldai/sdaiSession_instance.h - stepcode/cldai/sdaiObject.h - stepcode/cldai/sdaiString.h - stepcode/cldai/sdaiEntity_extent.h - stepcode/cldai/sdaiEnum.h - stepcode/cldai/sdaiModel_contents.h - stepcode/cldai/sdaiBinary.h - stepcode/cldai/sdaiEntity_extent_set.h - stepcode/cldai/sdaiModel_contents_list.h - stepcode/cldai/sdaiDaObject.h - stepcode/ordered_attrs.h - stepcode/exppp/exppp.h - stepcode/express/hash.h - stepcode/express/error.h - stepcode/express/linklist.h - stepcode/express/basic.h - stepcode/express/memory.h - stepcode/express/lexact.h - stepcode/express/type.h - stepcode/express/caseitem.h - stepcode/express/entity.h - stepcode/express/resolve.h - stepcode/express/schema.h - stepcode/express/stmt.h - stepcode/express/expr.h - stepcode/express/dict.h - stepcode/express/expbasic.h - stepcode/express/alg.h - stepcode/express/variable.h - stepcode/express/express.h - stepcode/express/object.h - stepcode/express/symbol.h - stepcode/express/scope.h - stepcode/sc_export.h - stepcode/sc_cf.h - stepcode/clutils/Str.h - stepcode/clutils/gennodearray.h - stepcode/clutils/gennode.h - stepcode/clutils/errordesc.h - stepcode/clutils/gennodelist.h - stepcode/clutils/sc_hash.h - stepcode/clutils/dirobj.h - stepcode/cleditor/cmdmgr.h - stepcode/cleditor/editordefines.h - stepcode/cleditor/SdaiHeaderSchemaClasses.h - stepcode/cleditor/seeinfodefault.h - stepcode/cleditor/SdaiHeaderSchema.h - stepcode/cleditor/SdaiSchemaInit.h - stepcode/cleditor/STEPfile.h - stepcode/sc_version_string.h - stepcode/sc_stdbool.h - stepcode/base/sc_getopt.h - stepcode/base/sc_trace_fprintf.h - stepcode/base/sc_benchmark.h - stepcode/base/sc_memmgr.h - stepcode/clstepcore/STEPundefined.h - stepcode/clstepcore/mgrnodelist.h - stepcode/clstepcore/STEPattribute.h - stepcode/clstepcore/STEPaggregate.h - stepcode/clstepcore/ExpDict.h - stepcode/clstepcore/read_func.h - stepcode/clstepcore/needFunc.h - stepcode/clstepcore/mgrnodearray.h - stepcode/clstepcore/mgrnode.h - stepcode/clstepcore/dispnode.h - stepcode/clstepcore/sdai.h - stepcode/clstepcore/STEPcomplex.h - stepcode/clstepcore/instmgr.h - stepcode/clstepcore/baseType.h - stepcode/clstepcore/sdaiSelect.h - stepcode/clstepcore/SubSuperIterators.h - stepcode/clstepcore/dictdefs.h - stepcode/clstepcore/SingleLinkList.h - stepcode/clstepcore/STEPattributeList.h - stepcode/clstepcore/dispnodelist.h - stepcode/clstepcore/sdaiApplication_instance.h - stepcode/clstepcore/Registry.h - stepcode/clstepcore/complexSupport.h - ) - -# Simple "parent" build that tests the use of the imported library defined by ExternalProject_Target -include_directories(${CMAKE_BINARY_DIR}/include) -add_executable(zpipe zpipe.c) -target_link_libraries(zpipe ${ZLIB_LIBRARY}) -install(TARGETS zpipe - RUNTIME DESTINATION ${BIN_DIR} - LIBRARY DESTINATION ${LIB_DIR} - ARCHIVE DESTINATION ${LIB_DIR}) - -# By default, we want debugging information -set(CPACK_STRIP_FILES FALSE) -set(CPACK_GENERATOR TGZ ZIP) -include(CPack) - - - -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 - - - - diff --git a/misc/external_build_testing/NOTES b/misc/external_build_testing/NOTES deleted file mode 100644 index 712599e44fb..00000000000 --- a/misc/external_build_testing/NOTES +++ /dev/null @@ -1,8 +0,0 @@ -Per https://cmake.org/pipermail/cmake/2019-June/069643.html investigate -whether we can use git apply in lieu of porting patch to Windows... - -If we're converting to git anyway, that would be considerably simpler. -Just need to make sure we can use git apply on vanilla source hierarchies -that aren't themselves git repositories... - -An example use: https://cmake.org/pipermail/cmake/2019-June/069669.html diff --git a/misc/macosx/Resources/License.rtf b/misc/macosx/Resources/License.rtf index e6b18bbddd2..0d1194a69e7 100644 --- a/misc/macosx/Resources/License.rtf +++ b/misc/macosx/Resources/License.rtf @@ -12,7 +12,7 @@ Copying and Distribution Terms\ \f1\fs28 \cf0 \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural -\f0 \cf0 Copyright (c) 2005-2020 United States Government as represented by the U.S. Army Research Laboratory. All Rights Reserved. +\f0 \cf0 Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. All Rights Reserved. \f1 \ \ BRL-CAD is open source software controlled and maintained by the designated project developers and the US Army Research Laboratory.\ @@ -53,7 +53,7 @@ When referring to BRL-CAD, its source code, documentation, and/or libraries, thi \ Authors and other BRL-CAD contributors must comply with the copyright and distribution terms for their respective contributions unless otherwise arranged. The following copyright should be prominent in all BRL-CAD source contributions:\ \ - Copyright (c) 2005-2020 United States Government as represented by the U.S. Army Research Laboratory. All Rights Reserved.\ + Copyright (c) 2005-2021 United States Government as represented by the U.S. Army Research Laboratory. All Rights Reserved.\ \ \pard\tx1440\tx2880\tx4320\tx5760\tx7200\ql\qnatural diff --git a/misc/macosx/Resources/ReadMe.rtfd/TXT.rtf b/misc/macosx/Resources/ReadMe.rtfd/TXT.rtf index ea9b1d60117..675f481f799 100644 --- a/misc/macosx/Resources/ReadMe.rtfd/TXT.rtf +++ b/misc/macosx/Resources/ReadMe.rtfd/TXT.rtf @@ -11,7 +11,7 @@ \f0\i\b\fs72 \cf0 README \fs36 \ -\f1\i0\b0\fs28 This is BRL-CAD 7.32.0 for Mac OS X. Please send any bugs, comments, questions, or suggestions to the project website.\ +\f1\i0\b0\fs28 This is BRL-CAD 7.32.2 for Mac OS X. Please send any bugs, comments, questions, or suggestions to the project website.\ \fs22 \ diff --git a/misc/macosx/Resources/Welcome.rtfd/TXT.rtf b/misc/macosx/Resources/Welcome.rtfd/TXT.rtf index e5ba91514f0..33e7a0c9c9d 100644 --- a/misc/macosx/Resources/Welcome.rtfd/TXT.rtf +++ b/misc/macosx/Resources/Welcome.rtfd/TXT.rtf @@ -4,7 +4,7 @@ \margl1440\margr1440\vieww8020\viewh6280\viewkind0 \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural -\f0\fs22 \cf0 This installer will guide you through the installation of BRL-CAD 7.32.0 for Mac OS X and Darwin.\ +\f0\fs22 \cf0 This installer will guide you through the installation of BRL-CAD 7.32.2 for Mac OS X and Darwin.\ \ This distribution of BRL-CAD requires approximately 500 MB of available disk space and does not include source code.\ \ diff --git a/misc/opencl-raytracer-tests/version1/clhost.cpp b/misc/opencl-raytracer-tests/version1/clhost.cpp index 5369d52f906..43a4baf6a3c 100644 --- a/misc/opencl-raytracer-tests/version1/clhost.cpp +++ b/misc/opencl-raytracer-tests/version1/clhost.cpp @@ -1,7 +1,7 @@ /* C L H O S T . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/opencl-raytracer-tests/version1/clhost.hpp b/misc/opencl-raytracer-tests/version1/clhost.hpp index bb3a3d7a5f4..c805328f81a 100644 --- a/misc/opencl-raytracer-tests/version1/clhost.hpp +++ b/misc/opencl-raytracer-tests/version1/clhost.hpp @@ -1,7 +1,7 @@ /* C L H O S T . H P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/opencl-raytracer-tests/version1/main.cpp b/misc/opencl-raytracer-tests/version1/main.cpp index a18a1fe0e28..3766766707b 100644 --- a/misc/opencl-raytracer-tests/version1/main.cpp +++ b/misc/opencl-raytracer-tests/version1/main.cpp @@ -1,7 +1,7 @@ /* M A I N . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/opencl-raytracer-tests/version1/raytracer.hpp b/misc/opencl-raytracer-tests/version1/raytracer.hpp index 5fe6bf83643..753625f3bc6 100644 --- a/misc/opencl-raytracer-tests/version1/raytracer.hpp +++ b/misc/opencl-raytracer-tests/version1/raytracer.hpp @@ -1,7 +1,7 @@ /* R A Y T R A C E R . H P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/opencl-raytracer-tests/version1/utility.hpp b/misc/opencl-raytracer-tests/version1/utility.hpp index d5aa29451d8..d35a40fed99 100644 --- a/misc/opencl-raytracer-tests/version1/utility.hpp +++ b/misc/opencl-raytracer-tests/version1/utility.hpp @@ -1,7 +1,7 @@ /* U T I L I T Y . H P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/opencl-raytracer-tests/version2/main.cpp b/misc/opencl-raytracer-tests/version2/main.cpp index 3d83609cd9e..da8cd6b2dd9 100644 --- a/misc/opencl-raytracer-tests/version2/main.cpp +++ b/misc/opencl-raytracer-tests/version2/main.cpp @@ -1,7 +1,7 @@ /* M A I N . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/opencl-raytracer-tests/version2/raytracer.cpp b/misc/opencl-raytracer-tests/version2/raytracer.cpp index 95e442ec74d..16258378428 100644 --- a/misc/opencl-raytracer-tests/version2/raytracer.cpp +++ b/misc/opencl-raytracer-tests/version2/raytracer.cpp @@ -1,7 +1,7 @@ /* R A Y T R A C E R . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/opencl-raytracer-tests/version2/raytracer.hpp b/misc/opencl-raytracer-tests/version2/raytracer.hpp index f3fcb1bfe23..8f933825d73 100644 --- a/misc/opencl-raytracer-tests/version2/raytracer.hpp +++ b/misc/opencl-raytracer-tests/version2/raytracer.hpp @@ -1,7 +1,7 @@ /* R A Y T R A C E R . H P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/opencl-raytracer-tests/version2/rt.cl b/misc/opencl-raytracer-tests/version2/rt.cl index 8aa84e20d2b..4dc5f084fc2 100644 --- a/misc/opencl-raytracer-tests/version2/rt.cl +++ b/misc/opencl-raytracer-tests/version2/rt.cl @@ -1,7 +1,7 @@ /* R T . C L * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/opencl-raytracer-tests/version2/utility.hpp b/misc/opencl-raytracer-tests/version2/utility.hpp index e249dcce1d4..e91f1e6741d 100644 --- a/misc/opencl-raytracer-tests/version2/utility.hpp +++ b/misc/opencl-raytracer-tests/version2/utility.hpp @@ -1,7 +1,7 @@ /* U T I L I T Y . H P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/pkgconfig/CMakeLists.txt b/misc/pkgconfig/CMakeLists.txt index 803c1d0f662..c400c15f90f 100644 --- a/misc/pkgconfig/CMakeLists.txt +++ b/misc/pkgconfig/CMakeLists.txt @@ -60,6 +60,7 @@ endif("${BRLCAD_ENABLE_TARGETS}" GREATER 1 OR "${BRLCAD_ENABLE_TARGETS}" STREQUA foreach(pkgfile ${pkgconfig_DATA}) string(REGEX REPLACE "([0-9a-z_-]*).pc.in" "\\1" filename_root "${pkgfile}") configure_file(${pkgfile} ${CMAKE_CURRENT_BINARY_DIR}/${filename_root}.pc @ONLY) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/${filename_root}.pc") install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${filename_root}.pc DESTINATION ${LIB_DIR}/pkgconfig) endforeach(pkgfile ${pkgconfig_DATA}) diff --git a/misc/repoconv/CONVERT.sh b/misc/repoconv/CONVERT.sh index 59824a733cb..f9e0e67f058 100755 --- a/misc/repoconv/CONVERT.sh +++ b/misc/repoconv/CONVERT.sh @@ -212,6 +212,9 @@ cd ../repowork && mkdir build && cd build && cmake .. && make -j5 && cd ../../re mkdir brlcad_final.git && cd brlcad_final.git && git init cat ../brlcad_final.fi | git fast-import +# Rename master to newer default branch naming convention "main" +git branch -m master main + # Compress the fast-import - by default, it is unoptimized git gc --aggressive git reflog expire --expire-unreachable=now --all @@ -228,5 +231,5 @@ tar -czf brlcad_final.tar.gz brlcad_final.git # cd brlcad_final.git # git remote add origin git@github.com:BRL-CAD/BRL-CAD.git # git push --all -u origin - +# git push --follow-tags diff --git a/misc/repoconv/NOTES b/misc/repoconv/NOTES index 7faed11d2d7..a00d4ce762d 100644 --- a/misc/repoconv/NOTES +++ b/misc/repoconv/NOTES @@ -314,3 +314,15 @@ messed up gitk). cd brlcad && git checkout master git fast-export --all --show-original-ids > ../brlcad.fi + +############################################################################# +Other large scale git conversions: +https://web.archive.org/web/20130327012743/https://techbase.kde.org/Projects/MovetoGit +https://techbase.kde.org/Projects/MovetoGit +https://blog.runtux.com/posts/2014/04/18/233/ +https://blogs.ed.ac.uk/timc/2017/11/24/migrating-from-svn-to-git-while-splitting-repository/ +http://esr.ibiblio.org/?p=5634 +http://esr.ibiblio.org/?p=6792 +http://esr.ibiblio.org/?p=8607 +https://gitlab.com/ideasman42/blender-git-migration/ + diff --git a/misc/repoconv/checkout_dercs.sh b/misc/repoconv/checkout_dercs.sh index 59590ab1ff6..b02a0204139 100755 --- a/misc/repoconv/checkout_dercs.sh +++ b/misc/repoconv/checkout_dercs.sh @@ -1,10 +1,10 @@ #!/bin/bash -find . -type f ! -path "*/misc/*" ! -path "*/src/other/stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Date:[^$;"]*/$Date/' {} \; -find . -type f ! -path "*/misc/*" ! -path "*/src/other/stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Header:[^$;"]*/$Header/' {} \; -find . -type f ! -path "*/misc/*" ! -path "*/src/other/stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Id:[^$;"]*/$Id/' {} \; -find . -type f ! -path "*/misc/*" ! -path "*/src/other/stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Log:[^$;"]*/$Log/' {} \; -find . -type f ! -path "*/misc/*" ! -path "*/src/other/stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Revision:[^$;"]*/$Revision/' {} \; -find . -type f ! -path "*/misc/*" ! -path "*/src/other/stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Source:[^$;"]*/$Source/' {} \; +find . -type f ! -path "*/misc/*" ! -path "*/src/superbuild/stepcode/*" ! -path "*/src/other/*stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Date:[^$;"]*/$Date/' {} \; +find . -type f ! -path "*/misc/*" ! -path "*/src/superbuild/stepcode/*" ! -path "*/src/other/*stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Header:[^$;"]*/$Header/' {} \; +find . -type f ! -path "*/misc/*" ! -path "*/src/superbuild/stepcode/*" ! -path "*/src/other/*stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Id:[^$;"]*/$Id/' {} \; +find . -type f ! -path "*/misc/*" ! -path "*/src/superbuild/stepcode/*" ! -path "*/src/other/*stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Log:[^$;"]*/$Log/' {} \; +find . -type f ! -path "*/misc/*" ! -path "*/src/superbuild/stepcode/*" ! -path "*/src/other/*stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Revision:[^$;"]*/$Revision/' {} \; +find . -type f ! -path "*/misc/*" ! -path "*/src/superbuild/stepcode/*" ! -path "*/src/other/*stepcode/*" ! -path "*/src/other/step/*" ! -path "*/src/conv/step/*" ! -path "*/ap242.exp" -exec sed -i 's/$Source:[^$;"]*/$Source/' {} \; find . -type f -path "*/re2c/*" -exec sed -i 's/$Date:[^$;"]*/$Date/' {} \; find . -type f -path "*/re2c/*" -exec sed -i 's/$Header:[^$;"]*/$Header/' {} \; find . -type f -path "*/re2c/*" -exec sed -i 's/$Id:[^$;"]*/$Id/' {} \; diff --git a/misc/repoconv/github_ci_actions.yml b/misc/repoconv/github_ci_actions.yml index c110ad62e8e..26c51564557 100644 --- a/misc/repoconv/github_ci_actions.yml +++ b/misc/repoconv/github_ci_actions.yml @@ -1,173 +1,118 @@ +# For information about available platforms for testing, see: # -# This logic defines cross platform build testing for BRL-CAD using -# Github's "Actions" mechanism. -# -# We define a setup similar to https://github.com/cristianadam/HelloWorld/ -# -# Github has a time limit on these tests, and we also don't want to stress the -# system too heavily (particularly if we want to run them per-commit.) For -# testing purposes we're currently using distcheck, but for eventual -# production use we need to change our build targets to something more -# streamlined. It is probably also worth disabling step and gdal based -# features for the standard tests, as those compilation pieces are quite -# expensive - they should probably be regulated to something like a once-a-day -# test. -# -# TODO - figure out how to schedule chron based jobs as well as the per -# commit tests below, so we can define rarer but progressively more -# comprehensive and heaver test runs. -# -# TODO - figure out if we can generate actual release binaries from the -# artifacts of these builds. -# +# https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners name: BRL-CAD on: [push] jobs: - build: - # - # Define a matrix of the operating system and compiler combinations - # we want to build against. - # - # Note that for Windows the vcvars64.bat script is important - that - # is what sets up environment variables to make sure we get the 64 - # bit version of the compiler and libraries. See: - # https://docs.microsoft.com/en-us/cpp/build/building-on-the-command-line - # - name: ${{ matrix.config.name }} - runs-on: ${{ matrix.config.os }} + windows: + name: Windows Latest MSVC + runs-on: windows-latest + strategy: + fail-fast: true + steps: + - name: Setup - CMake + uses: lukka/get-cmake@latest + + - name: Setup - Ninja + uses: seanmiddleditch/gha-setup-ninja@master + + - name: Checkout + uses: actions/checkout@v2 + + - name: Add github workspace to path + # https://github.community/t/deprecated-add-path/136621 + run: echo "$ENV{GITHUB_WORKSPACE}" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 + + - name: Add msbuild to PATH + uses: microsoft/setup-msbuild@v1.0.2 + + - name: Add cl.exe to PATH + uses: ilammy/msvc-dev-cmd@v1 + + - name: Configure + run: | + cmake -S . -B build -G Ninja -D CMAKE_C_COMPILER="cl.exe" -D CMAKE_CXX_COMPILER="cl.exe" -D ENABLE_ALL=ON -D CMAKE_BUILD_TYPE=Release -DEXT_BUILD_VERBOSE=ON + #cmake -S . -B build -D ENABLE_ALL=ON + powershell Write-VolumeCache C + powershell Write-VolumeCache D + + - name: Build + #run: cd build && ninja -j1 -v STEPCODE_BLD && cd src/other/ext/STEPCODE_BLD-prefix/src/STEPCODE_BLD-build && ninja clean && ninja -j1 -v + #run: cmake --build build --config Release --target STEPCODE_BLD && cd build/src/other/ext/STEPCODE_BLD-prefix/src/STEPCODE_BLD-build && msbuild ALL_BUILD.vcxproj -t:clean && msbuild ALL_BUILD.vcxproj -v:diag + run: cd build && ninja -j1 -v + #run: cmake --build build --config Release --target package + +# - name: Upload Package +# uses: actions/upload-artifact@v2 +# with: +# name: BRLCAD_Windows +# path: ${{ github.workspace }}/build/BRL-CAD*exe + + linux: + name: Ubuntu Latest GCC + runs-on: ubuntu-20.04 strategy: - fail-fast: false - matrix: - config: - - { - name: "Windows Latest MSVC", artifact: "Windows-MSVC.tar.xz", - os: windows-latest, - cc: "cl", cxx: "cl", - environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat" - } - - { - name: "Ubuntu Latest GCC", artifact: "Linux.tar.xz", - os: ubuntu-20.04, - cc: "gcc", cxx: "g++" - } - - { - name: "macOS Latest Clang", artifact: "macOS.tar.xz", - os: macos-latest, - cc: "clang", cxx: "clang++" - } - - # - # For each platform, we need to checkout the git repository, - # and run CMake. - # - # The logic below uses the approach demonstrated by Cristian Adam - # which takes CMake's scripting mode (-P) and passes in from stdin - # a script that incorporates values defined in the YAML environment. - # - # Windows in particular needs the environment set up for compilation, - # so the script recognizes when it is in that environment and - # operates accordingly. - # + fail-fast: true steps: - - uses: actions/checkout@v1 - - uses: lukka/get-cmake@latest - - uses: seanmiddleditch/gha-setup-ninja@master - - - name: Configure - shell: cmake -P {0} - run: | - set(ENV{CC} ${{ matrix.config.cc }}) - set(ENV{CXX} ${{ matrix.config.cxx }}) - - if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") - execute_process( - COMMAND "${{ matrix.config.environment_script }}" && set - OUTPUT_FILE environment_script_output.txt - ) - file(STRINGS environment_script_output.txt output_lines) - foreach(line IN LISTS output_lines) - if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") - set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") - endif() - endforeach() - endif() - - set(path_separator ":") - if ("${{ runner.os }}" STREQUAL "Windows") - set(path_separator ";") - endif() - set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") - - if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") - execute_process( - COMMAND cmake - -S . - -B build - -D ENABLE_ALL=ON - -D CMAKE_BUILD_TYPE=Release - -D CMAKE_VERBOSE_DISTCHECK=ON - RESULT_VARIABLE result - ) - else() - execute_process( - COMMAND cmake - -S . - -G Ninja - -B build - -D ENABLE_ALL=ON - -D CMAKE_BUILD_TYPE=Release - -D CMAKE_VERBOSE_DISTCHECK=ON - RESULT_VARIABLE result - ) - endif() - if (NOT result EQUAL 0) - message(FATAL_ERROR "Bad exit status") - endif() - - # - # As with the configure stage, the build uses CMake's scripting mode (-P) - # and passes a script in on stdin. - # - # Windows needs the environment set up for compilation - paths for the - # compilation are not set up by default in command line environments, - # unlike most Unix-like systems. Accordingly the script recognizes when - # it is on Windows and executes the necessary setup code. - # - - name: Build - shell: cmake -P {0} - run: | - if ("${{ runner.os }}" STREQUAL "Windows" AND NOT "x${{ matrix.config.environment_script }}" STREQUAL "x") - file(STRINGS environment_script_output.txt output_lines) - foreach(line IN LISTS output_lines) - if (line MATCHES "^([a-zA-Z0-9_-]+)=(.*)$") - set(ENV{${CMAKE_MATCH_1}} "${CMAKE_MATCH_2}") - endif() - endforeach() - endif() - - set(path_separator ":") - if ("${{ runner.os }}" STREQUAL "Windows") - set(path_separator ";") - endif() - set(ENV{PATH} "$ENV{GITHUB_WORKSPACE}${path_separator}$ENV{PATH}") - - if ("${{ runner.os }}" STREQUAL "Windows") - execute_process( - COMMAND cmake --build build -j 1 --config Release --target ALL_BUILD - COMMAND cmake --build build -j 1 --config Release --target check - RESULT_VARIABLE result - ) - else ("${{ runner.os }}" STREQUAL "Windows") - execute_process( - COMMAND cmake --build build --verbose --config Release --target all - COMMAND cmake --build build --verbose --config Release --target check - RESULT_VARIABLE result - ) - endif ("${{ runner.os }}" STREQUAL "Windows") - if (NOT result EQUAL 0) - message(FATAL_ERROR "Bad exit status") - endif() + - name: Setup - CMake + uses: lukka/get-cmake@latest + + - name: Setup - Ninja + uses: seanmiddleditch/gha-setup-ninja@master + + - name: Checkout + uses: actions/checkout@v2 + + - name: Configure + run: | + export PATH=$ENV{GITHUB_WORKSPACE}:$PATH + cmake -S . -G Ninja -B build -D ENABLE_ALL=ON -D CMAKE_BUILD_TYPE=Release -DEXT_BUILD_VERBOSE=ON + + - name: Build + run: | + export PATH=$ENV{GITHUB_WORKSPACE}:$PATH + cmake --build build --config Release --target package + +# - name: Upload Package +# uses: actions/upload-artifact@v2 +# with: +# name: BRLCAD_Linux +# path: ${{ github.workspace }}/build/BRL-CAD*gz + + osx: + name: macOS Latest Clang + runs-on: macos-latest + strategy: + fail-fast: true + steps: + - name: Setup - CMake + uses: lukka/get-cmake@latest + + - name: Setup - Ninja + uses: seanmiddleditch/gha-setup-ninja@master + + - name: Checkout + uses: actions/checkout@v2 + + - name: Configure + run: | + export PATH=$ENV{GITHUB_WORKSPACE}:$PATH + export CC=clang + export CXX=clang++ + cmake -S . -G Ninja -B build -D ENABLE_ALL=ON -D CMAKE_BUILD_TYPE=Release -DEXT_BUILD_VERBOSE=ON + + - name: Build + run: | + export PATH=$ENV{GITHUB_WORKSPACE}:$PATH + cmake --build build --config Release --target package + +# - name: Upload Package +# uses: actions/upload-artifact@v2 +# with: +# name: BRLCAD_OSX +# path: ${{ github.workspace }}/build/BRL-CAD*gz + diff --git a/misc/repowork/repowork.cpp b/misc/repowork/repowork.cpp index 7c36c00b2ed..340284dd49f 100644 --- a/misc/repowork/repowork.cpp +++ b/misc/repowork/repowork.cpp @@ -127,6 +127,128 @@ git_unpack_notes(git_fi_data *s, std::ifstream &infile, std::string &repo_path) return 0; } +/* There are two potential cases - assigning a previously unassigned svn rev, and + * fixing an erroneously assigned rev. Handle both. */ +int +git_update_svnrevs(git_fi_data *s, std::string &svn_rev_map) +{ + + if (!s->have_sha1s) { + std::cerr << "Fatal - sha1 SVN rev updating requested, but don't have original sha1 ids - redo fast-export with the --show-original-ids option.\n"; + exit(1); + } + + // read map + std::ifstream infile(svn_rev_map, std::ifstream::binary); + if (!infile.good()) { + std::cerr << "Could not open svn_rev_map file: " << svn_rev_map << "\n"; + exit(-1); + } + + std::map rmap; + + std::string line; + while (std::getline(infile, line)) { + // Skip empty lines + if (!line.length()) { + continue; + } + + size_t spos = line.find_first_of(";"); + if (spos == std::string::npos) { + std::cerr << "Invalid sha1;rev map line!: " << line << "\n"; + exit(-1); + } + + std::string id1 = line.substr(0, spos); + std::string id2 = line.substr(spos+1, std::string::npos); + int rev = std::stoi(id2); + + std::cout << "sha1: \"" << id1 << "\" -> rev: \"" << rev << "\n"; + rmap[id1] = rev; + } + + infile.close(); + + // Iterate over the commits looking for note commits. If we find one, + // find its associated blob with data, read it, find the associated + // commit, and stash it in a string in that container. + for (size_t i = 0; i < s->commits.size(); i++) { + + if (!s->commits[i].id.sha1.length()) { + continue; + } + + if (rmap.find(s->commits[i].id.sha1) == rmap.end()) { + continue; + } + + int nrev = rmap[s->commits[i].id.sha1]; + s->commits[i].svn_id = nrev; + // Store the id->sha1 relationship for potential later use + if (s->commits[i].id.sha1.length()) { + s->rev_to_sha1[s->commits[i].svn_id] = s->commits[i].id.sha1; + std::cout << "Assigning new SVN rev " << nrev << " to " << s->commits[i].id.sha1 << "\n"; + } + + // Update the message + std::stringstream ss(s->commits[i].commit_msg); + std::string nmsg, cline; + bool srev = false; + while (std::getline(ss, cline, '\n')) { + if (srev) { + // Already done - just put the rest back on the msg, + // as long as it's not an old svn revision line; + std::regex svnrevline("^svn:revision:([0-9]+).*"); + bool srmatch = std::regex_match(cline, svnrevline); + if (!srmatch) { + nmsg.append(cline); + nmsg.append("\n"); + } + continue; + } + std::regex svnline("^svn:.*"); + bool smatch = std::regex_match(cline, svnline); + if (smatch) { + std::string nrevline = std::string("svn:revision:") + std::to_string(nrev); + nmsg.append(nrevline); + nmsg.append("\n"); + + std::regex svnrevline("^svn:revision:([0-9]+).*"); + bool srmatch = std::regex_match(cline, svnrevline); + if (!srmatch) { + // svn line is not the rev - we're not replacing it + nmsg.append(cline); + nmsg.append("\n"); + } + srev = true; + continue; + } + std::regex cvsline("^cvs:.*"); + bool cmatch = std::regex_match(cline, cvsline); + if (cmatch) { + int nrev = rmap[s->commits[i].id.sha1]; + std::string nrevline = std::string("svn:revision:") + std::to_string(nrev); + nmsg.append(nrevline); + nmsg.append("\n"); + nmsg.append(cline); + nmsg.append("\n"); + srev = true; + continue; + } + nmsg.append(cline); + nmsg.append("\n"); + } + + s->commits[i].commit_msg = nmsg; + + } + + return 0; +} + + + int git_map_emails(git_fi_data *s, std::string &email_map) { @@ -519,6 +641,7 @@ main(int argc, char *argv[]) std::string repo_path; std::string email_map; std::string svn_map; + std::string svn_rev_map; std::string cvs_auth_map; std::string cvs_branch_map; std::string keymap; @@ -535,6 +658,7 @@ main(int argc, char *argv[]) options.add_options() ("e,email-map", "Specify replacement username+email mappings (one map per line, format is commit-id-1;commit-id-2)", cxxopts::value>(), "map file") ("s,svn-map", "Specify svn rev -> committer map (one mapping per line, format is commit-rev name)", cxxopts::value>(), "map file") + ("svn-revs", "Specify git sha1 -> svn rev map (one mapping per line, format is sha1 commit-rev)", cxxopts::value>(), "map file") ("cvs-auth-map", "msg&time -> cvs author map (needs sha1->key map)", cxxopts::value>(), "file") ("cvs-branch-map", "msg&time -> cvs branch map (needs sha1->key map)", cxxopts::value>(), "file") @@ -609,6 +733,12 @@ main(int argc, char *argv[]) keymap = ff[0]; } + if (result.count("svn-revs")) + { + auto& ff = result["svn-revs"].as>(); + svn_rev_map = ff[0]; + } + if (result.count("width")) { cwidth = result["width"].as(); @@ -694,6 +824,11 @@ main(int argc, char *argv[]) git_id_rebuild_commits(&fi_data, id_file, repo_path, children_file); } + if (svn_rev_map.length()) { + // Handle svn rev assignments + git_update_svnrevs(&fi_data, svn_rev_map); + } + fi_data.wrap_width = cwidth; fi_data.wrap_commit_lines = wrap_commit_lines; fi_data.trim_whitespace = trim_whitespace; diff --git a/misc/tools/astyle/CMakeLists.txt b/misc/tools/astyle/CMakeLists.txt index 136aa9ec436..fb40dc0b79a 100644 --- a/misc/tools/astyle/CMakeLists.txt +++ b/misc/tools/astyle/CMakeLists.txt @@ -1,5 +1,5 @@ # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # Set CMake project name project(ASTYLE) diff --git a/misc/tools/debug2c/CMakeLists.txt b/misc/tools/debug2c/CMakeLists.txt index bec8a8092bb..58658cd65dd 100644 --- a/misc/tools/debug2c/CMakeLists.txt +++ b/misc/tools/debug2c/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -34,7 +34,7 @@ # ******************************************************************* # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(DEBUG2C) diff --git a/misc/tools/debug2c/debug2c.cxx b/misc/tools/debug2c/debug2c.cxx index 6c86c441ce9..24d85991623 100644 --- a/misc/tools/debug2c/debug2c.cxx +++ b/misc/tools/debug2c/debug2c.cxx @@ -1,7 +1,7 @@ /* D E B U G 2 C . C X X * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/misc/tools/dom2dox/CMake/FindLEMON.cmake b/misc/tools/dom2dox/CMake/FindLEMON.cmake index 4ce415e2a99..6302fc65a35 100644 --- a/misc/tools/dom2dox/CMake/FindLEMON.cmake +++ b/misc/tools/dom2dox/CMake/FindLEMON.cmake @@ -10,7 +10,7 @@ # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel @@ -44,9 +44,35 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= -find_program(LEMON_EXECUTABLE lemon DOC "path to the lemon executable") +set(_LEMON_SEARCHES) + +# Search LEMON_ROOT first if it is set. +if(LEMON_ROOT) + set(_LEMON_SEARCH_ROOT PATHS ${LEMON_ROOT} NO_DEFAULT_PATH) + list(APPEND _LEMON_SEARCHES _LEMON_SEARCH_ROOT) +endif() + +# Normal search. +set(_LEMON_x86 "(x86)") +set(_LEMON_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/lemon" + "$ENV{ProgramFiles${_LEMON_x86}}/lemon") +unset(_LEMON_x86) +list(APPEND _LEMON_SEARCHES _LEMON_SEARCH_NORMAL) + +set(LEMON_NAMES lemon) + +# Try each search configuration. +foreach(search ${_LEMON_SEARCHES}) + find_program(LEMON_EXECUTABLE lemon ${${search}} PATH_SUFFIXES bin) +endforeach() mark_as_advanced(LEMON_EXECUTABLE) +foreach(search ${_LEMON_SEARCHES}) + find_file(LEMON_TEMPLATE lempar.c ${${search}} PATH_SUFFIXES ${DATA_DIR} ${DATA_DIR}/lemon) +endforeach() +mark_as_advanced(LEMON_TEMPLATE) + if (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE) # look for the template in share if (DATA_DIR AND EXISTS "${DATA_DIR}/lemon/lempar.c") @@ -113,6 +139,10 @@ if(NOT COMMAND LEMON_TARGET) CMAKE_PARSE_ARGUMENTS(${LVAR_PREFIX} "" "OUT_SRC_FILE;OUT_HDR_FILE;WORKING_DIR;EXTRA_ARGS" "" ${ARGN}) endif(${ARGC} GREATER 3) + if (TARGET perplex_stage) + set(DEPS_TARGET perplex_stage) + endif (TARGET perplex_stage) + # Need a working directory if("${${LVAR_PREFIX}_WORKING_DIR}" STREQUAL "") set(${LVAR_PREFIX}_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}/${LVAR_PREFIX}") @@ -161,7 +191,7 @@ if(NOT COMMAND LEMON_TARGET) OUTPUT ${LEMON_GEN_OUT} ${LEMON_GEN_SOURCE} ${LEMON_GEN_HEADER} COMMAND ${CMAKE_COMMAND} -E copy ${lemon_in_file} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} COMMAND ${LEMON_EXECUTABLE} -T${LEMON_TEMPLATE} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} ${${LVAR_PREFIX}__EXTRA_ARGS} - DEPENDS ${Input} ${LEMON_TEMPLATE} ${LEMON_EXECUTABLE_TARGET} + DEPENDS ${Input} ${LEMON_EXECUTABLE_TARGET} ${DEPS_TARGET} WORKING_DIRECTORY ${${LVAR_PREFIX}_WORKING_DIR} COMMENT "[LEMON][${Name}] Building parser with ${LEMON_EXECUTABLE}" ) @@ -171,7 +201,7 @@ if(NOT COMMAND LEMON_TARGET) add_custom_command( OUTPUT ${${LVAR_PREFIX}_OUT_SRC_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_SOURCE} ${${LVAR_PREFIX}_OUT_SRC_FILE} - DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_SOURCE} + DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_SOURCE} ${DEPS_TARGET} ) set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_SRC_FILE} ${LEMON_${Name}_OUTPUTS}) endif(NOT "${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "${LEMON_GEN_SOURCE}") @@ -179,7 +209,7 @@ if(NOT COMMAND LEMON_TARGET) add_custom_command( OUTPUT ${${LVAR_PREFIX}_OUT_HDR_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_HEADER} ${${LVAR_PREFIX}_OUT_HDR_FILE} - DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_HEADER} + DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_HEADER} ${DEPS_TARGET} ) set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_HDR_FILE} ${LEMON_${Name}_OUTPUTS}) endif(NOT "${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "${LEMON_GEN_HEADER}") diff --git a/misc/tools/dom2dox/CMake/FindPERPLEX.cmake b/misc/tools/dom2dox/CMake/FindPERPLEX.cmake index 85be047bd6c..583b7971b51 100644 --- a/misc/tools/dom2dox/CMake/FindPERPLEX.cmake +++ b/misc/tools/dom2dox/CMake/FindPERPLEX.cmake @@ -10,7 +10,7 @@ # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel @@ -44,9 +44,35 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= -find_program(PERPLEX_EXECUTABLE perplex DOC "path to the perplex executable") +set(_PERPLEX_SEARCHES) + +# Search PERPLEX_ROOT first if it is set. +if(PERPLEX_ROOT) + set(_PERPLEX_SEARCH_ROOT PATHS ${PERPLEX_ROOT} NO_DEFAULT_PATH) + list(APPEND _PERPLEX_SEARCHES _PERPLEX_SEARCH_ROOT) +endif() + +# Normal search. +set(_PERPLEX_x86 "(x86)") +set(_PERPLEX_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/perplex" + "$ENV{ProgramFiles${_PERPLEX_x86}}/perplex") +unset(_PERPLEX_x86) +list(APPEND _PERPLEX_SEARCHES _PERPLEX_SEARCH_NORMAL) + +set(PERPLEX_NAMES perplex) + +# Try each search configuration. +foreach(search ${_PERPLEX_SEARCHES}) + find_program(PERPLEX_EXECUTABLE perplex ${${search}} PATH_SUFFIXES bin) +endforeach() mark_as_advanced(PERPLEX_EXECUTABLE) +foreach(search ${_PERPLEX_SEARCHES}) + find_file(PERPLEX_TEMPLATE perplex_template.c ${${search}} PATH_SUFFIXES ${DATA_DIR} ${DATA_DIR}/perplex) +endforeach() +mark_as_advanced(PERPLEX_TEMPLATE) + if(PERPLEX_EXECUTABLE AND NOT PERPLEX_TEMPLATE) get_filename_component(perplex_path ${PERPLEX_EXECUTABLE} PATH) if(perplex_path) @@ -96,7 +122,7 @@ mark_as_advanced(PERPLEX_TEMPLATE) # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel @@ -141,6 +167,10 @@ if(NOT COMMAND PERPLEX_TARGET) get_filename_component(IN_FILE_WE ${Input} NAME_WE) set(PVAR_PREFIX ${Name}_${IN_FILE_WE}) + if (TARGET perplex_stage) + set(DEP_TARGET perplex_stage) + endif (TARGET perplex_stage) + if(${ARGC} GREATER 3) CMAKE_PARSE_ARGUMENTS(${PVAR_PREFIX} "" "TEMPLATE;OUT_SRC_FILE;OUT_HDR_FILE;WORKING_DIR" "" ${ARGN}) endif(${ARGC} GREATER 3) @@ -200,7 +230,7 @@ if(NOT COMMAND PERPLEX_TARGET) OUTPUT ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${perplex_in_file} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE} COMMAND ${PERPLEX_EXECUTABLE} -c -o ${re2c_src} -i ${${PVAR_PREFIX}_OUT_HDR_FILE} -t ${${PVAR_PREFIX}_TEMPLATE} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE} - DEPENDS ${Input} ${${PVAR_PREFIX}_TEMPLATE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} + DEPENDS ${Input} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET} WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR} COMMENT "[PERPLEX][${Name}] Generating re2c input with ${PERPLEX_EXECUTABLE}" ) @@ -209,7 +239,7 @@ if(NOT COMMAND PERPLEX_TARGET) add_custom_command( OUTPUT ${${PVAR_PREFIX}_OUT_SRC_FILE} COMMAND ${RE2C_EXECUTABLE} --no-debug-info --no-generation-date -c -o ${${PVAR_PREFIX}_OUT_SRC_FILE} ${re2c_src} - DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} + DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET} WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR} COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}" ) @@ -217,7 +247,7 @@ if(NOT COMMAND PERPLEX_TARGET) add_custom_command( OUTPUT ${${PVAR_PREFIX}_OUT_SRC_FILE} COMMAND ${RE2C_EXECUTABLE} --no-generation-date -c -o ${${PVAR_PREFIX}_OUT_SRC_FILE} ${re2c_src} - DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} + DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET} WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR} COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}" ) diff --git a/misc/tools/dom2dox/CMake/FindRE2C.cmake b/misc/tools/dom2dox/CMake/FindRE2C.cmake index e59a193d975..1d7c04a927b 100644 --- a/misc/tools/dom2dox/CMake/FindRE2C.cmake +++ b/misc/tools/dom2dox/CMake/FindRE2C.cmake @@ -42,7 +42,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(RE2C DEFAULT_MSG RE2C_EXECUTABLE) # ==================================================================== # #============================================================================= -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel diff --git a/misc/tools/dom2dox/CMakeLists.txt b/misc/tools/dom2dox/CMakeLists.txt index 5fa4db7b000..c9f30494249 100644 --- a/misc/tools/dom2dox/CMakeLists.txt +++ b/misc/tools/dom2dox/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2020 United States Government as represented by +# Copyright (c) 2015-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -30,7 +30,7 @@ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) project(DOM2DOX) diff --git a/misc/tools/dom2dox/dom2dox.c b/misc/tools/dom2dox/dom2dox.c index 5612920feea..e57591076c6 100644 --- a/misc/tools/dom2dox/dom2dox.c +++ b/misc/tools/dom2dox/dom2dox.c @@ -1,7 +1,7 @@ /* D O M 2 D O X . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/tools/dom2dox/dom2dox.h b/misc/tools/dom2dox/dom2dox.h index 71effdbd94c..6844d777b1f 100644 --- a/misc/tools/dom2dox/dom2dox.h +++ b/misc/tools/dom2dox/dom2dox.h @@ -1,7 +1,7 @@ /* D O M 2 D O X . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/tools/dom2dox/dom2dox_parser.lemon b/misc/tools/dom2dox/dom2dox_parser.lemon index 458af9b24ac..d1cff8bd8ff 100644 --- a/misc/tools/dom2dox/dom2dox_parser.lemon +++ b/misc/tools/dom2dox/dom2dox_parser.lemon @@ -1,7 +1,7 @@ /* D O M 2 D O X _ P A R S E R . L E M O N * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/tools/dom2dox/dom2dox_scanner.perplex b/misc/tools/dom2dox/dom2dox_scanner.perplex index ad903c36b85..d77ef6ab766 100644 --- a/misc/tools/dom2dox/dom2dox_scanner.perplex +++ b/misc/tools/dom2dox/dom2dox_scanner.perplex @@ -1,7 +1,7 @@ /* D O M 2 D O X _ S C A N N E R . P E R P L E X * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/tools/env2c/CMakeLists.txt b/misc/tools/env2c/CMakeLists.txt index b40bb5a6cfe..2b7b4663533 100644 --- a/misc/tools/env2c/CMakeLists.txt +++ b/misc/tools/env2c/CMakeLists.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -34,7 +34,7 @@ # ******************************************************************* # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(ENV2C) @@ -55,7 +55,7 @@ if (O3_COMPILER_FLAG) target_compile_options(env2c PRIVATE "-O3") endif (O3_COMPILER_FLAG) -target_link_libraries(env2c ${CMAKE_THREAD_LIBS_INIT}) +target_link_libraries(env2c Threads::Threads) # Local Variables: # tab-width: 8 diff --git a/misc/tools/env2c/env2c.cxx b/misc/tools/env2c/env2c.cxx index 72538969abf..f514a71376e 100644 --- a/misc/tools/env2c/env2c.cxx +++ b/misc/tools/env2c/env2c.cxx @@ -1,7 +1,7 @@ /* E N V 2 C . C X X * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/misc/tools/inactvhdrs/inactvhdrs.cpp b/misc/tools/inactvhdrs/inactvhdrs.cpp index 9201771fa3a..c600fdc28b9 100644 --- a/misc/tools/inactvhdrs/inactvhdrs.cpp +++ b/misc/tools/inactvhdrs/inactvhdrs.cpp @@ -1,7 +1,7 @@ /* I N A C T V H D R S . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/misc/tools/lemon/CMakeLists.txt b/misc/tools/lemon/CMakeLists.txt index 52b73fcc408..e5595932bc3 100644 --- a/misc/tools/lemon/CMakeLists.txt +++ b/misc/tools/lemon/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set project name PROJECT(LEMON) @@ -23,6 +23,7 @@ if (NOT LEMON_SKIP_INSTALL) endif (NOT LEMON_SKIP_INSTALL) configure_file(lempar.c ${CMAKE_BINARY_DIR}/${DATA_DIR}/lemon COPYONLY) +DISTCLEAN(${CMAKE_BINARY_DIR}/${DATA_DIR}/lemon) # Local Variables: # tab-width: 8 diff --git a/misc/tools/perplex/CMake/FindLEMON.cmake b/misc/tools/perplex/CMake/FindLEMON.cmake index 4ce415e2a99..c3eb759c4ec 100644 --- a/misc/tools/perplex/CMake/FindLEMON.cmake +++ b/misc/tools/perplex/CMake/FindLEMON.cmake @@ -10,7 +10,7 @@ # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel diff --git a/misc/tools/perplex/CMake/FindRE2C.cmake b/misc/tools/perplex/CMake/FindRE2C.cmake index e59a193d975..1d7c04a927b 100644 --- a/misc/tools/perplex/CMake/FindRE2C.cmake +++ b/misc/tools/perplex/CMake/FindRE2C.cmake @@ -42,7 +42,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(RE2C DEFAULT_MSG RE2C_EXECUTABLE) # ==================================================================== # #============================================================================= -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel diff --git a/misc/tools/perplex/CMakeLists.txt b/misc/tools/perplex/CMakeLists.txt index 6e373ca026e..4cf5ba7dc3f 100644 --- a/misc/tools/perplex/CMakeLists.txt +++ b/misc/tools/perplex/CMakeLists.txt @@ -2,7 +2,7 @@ # # Perplex - re2c scanner input generator # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -34,7 +34,7 @@ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # ### -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) project(PERPLEX) diff --git a/misc/tools/perplex/parser.y b/misc/tools/perplex/parser.y index f18588265c5..4a763e189ae 100644 --- a/misc/tools/perplex/parser.y +++ b/misc/tools/perplex/parser.y @@ -1,7 +1,7 @@ /* P A R S E R . Y * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/misc/tools/perplex/perplex.cpp b/misc/tools/perplex/perplex.cpp index 93990e79203..a3872afe9c8 100644 --- a/misc/tools/perplex/perplex.cpp +++ b/misc/tools/perplex/perplex.cpp @@ -1,7 +1,7 @@ /* P E R P L E X . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/misc/tools/perplex/perplex.h b/misc/tools/perplex/perplex.h index abe28c84112..737937ec1e1 100644 --- a/misc/tools/perplex/perplex.h +++ b/misc/tools/perplex/perplex.h @@ -1,7 +1,7 @@ /* P E R P L E X . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/misc/tools/perplex/perplex_template.c b/misc/tools/perplex/perplex_template.c index 9908e843221..84e5e79691a 100644 --- a/misc/tools/perplex/perplex_template.c +++ b/misc/tools/perplex/perplex_template.c @@ -1,7 +1,7 @@ /* P E R P L E X _ T E M P L A T E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Copyright (c) 1990 The Regents of the University of California. @@ -99,7 +99,7 @@ int PERPLEX_PUBLIC_LEXER; /* S C A N N E R _ T E M P L A T E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Copyright (c) 1990 The Regents of the University of California. diff --git a/misc/tools/perplex/scanner.re b/misc/tools/perplex/scanner.re index 24944f194d8..ec9fa965a7c 100644 --- a/misc/tools/perplex/scanner.re +++ b/misc/tools/perplex/scanner.re @@ -1,7 +1,7 @@ /* S C A N N E R . R E * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Copyright (c) 1990 The Regents of the University of California. diff --git a/misc/tools/perplex/token_type.h b/misc/tools/perplex/token_type.h index 1fd38b5655e..597a4ef772d 100644 --- a/misc/tools/perplex/token_type.h +++ b/misc/tools/perplex/token_type.h @@ -1,7 +1,7 @@ /* T O K E N _ T Y P E . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/misc/tools/re2c/CMake/FindLEMON.cmake b/misc/tools/re2c/CMake/FindLEMON.cmake index 4ce415e2a99..c3eb759c4ec 100644 --- a/misc/tools/re2c/CMake/FindLEMON.cmake +++ b/misc/tools/re2c/CMake/FindLEMON.cmake @@ -10,7 +10,7 @@ # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel diff --git a/misc/tools/re2c/CMakeLists.txt b/misc/tools/re2c/CMakeLists.txt index c56c1ea4e02..db1e1d251da 100644 --- a/misc/tools/re2c/CMakeLists.txt +++ b/misc/tools/re2c/CMakeLists.txt @@ -1,5 +1,5 @@ # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # Set CMake project name project(RE2C) @@ -48,6 +48,7 @@ CHECK_TYPE_SIZE(long SIZEOF_LONG) CHECK_TYPE_SIZE(short SIZEOF_SHORT) configure_file(config.h.in ${CMAKE_CURRENT_BINARY_DIR}/config.h) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/config.h") add_definitions(-DHAVE_CONFIG_H) set(re2c_common_SRCS @@ -130,6 +131,7 @@ if(NOT RE2C_SKIP_INSTALL) endif(NOT RE2C_SKIP_INSTALL) configure_file(README.in ${CMAKE_CURRENT_BINARY_DIR}/README) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/README") # Local Variables: # tab-width: 8 diff --git a/misc/tools/xmltools/CMakeLists.txt b/misc/tools/xmltools/CMakeLists.txt index b6e18883340..78d96d0c0e5 100644 --- a/misc/tools/xmltools/CMakeLists.txt +++ b/misc/tools/xmltools/CMakeLists.txt @@ -1,5 +1,5 @@ # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # Set CMake project name project(XSLTPROC) diff --git a/misc/tools/xmltools/README b/misc/tools/xmltools/README index 910ac2c7102..94cb35f416b 100644 --- a/misc/tools/xmltools/README +++ b/misc/tools/xmltools/README @@ -20,7 +20,7 @@ BSD license (note that this is NOT the license of libxml2, libxslt, or other non-BRL-CAD authored code in this directory - for that see the Copyright files and file headers!) -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/misc/tools/xmltools/libexslt/CMakeLists.txt b/misc/tools/xmltools/libexslt/CMakeLists.txt index e17cfa9ab5b..df9b0a7ab4e 100644 --- a/misc/tools/xmltools/libexslt/CMakeLists.txt +++ b/misc/tools/xmltools/libexslt/CMakeLists.txt @@ -6,6 +6,7 @@ SET(WITH_CRYPTO 0) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/exsltconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/../include/libexslt/exsltconfig.h) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../include/libexslt/exsltconfig.h") SET(libexslt_srcs src/common.c diff --git a/misc/tools/xmltools/libxml/CMakeLists.txt b/misc/tools/xmltools/libxml/CMakeLists.txt index 010c74f2368..656a52f786f 100644 --- a/misc/tools/xmltools/libxml/CMakeLists.txt +++ b/misc/tools/xmltools/libxml/CMakeLists.txt @@ -151,14 +151,17 @@ SET(LIBXML_VERSION_EXTRA "-BRLCAD") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/libxml/xmlversion.h.in ${CMAKE_CURRENT_BINARY_DIR}/../include/libxml/xmlversion.h) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../include/libxml/xmlversion.h") IF(WIN32) - configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/libxml/xmlwin32version.h.in - ${CMAKE_CURRENT_BINARY_DIR}/../include/libxml/xmlwin32version.h) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/include/libxml/xmlwin32version.h.in + ${CMAKE_CURRENT_BINARY_DIR}/../include/libxml/xmlwin32version.h) + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../include/libxml/xmlwin32version.h") ENDIF(WIN32) configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in - ${CMAKE_CURRENT_BINARY_DIR}/../include/libxml/config.h) + ${CMAKE_CURRENT_BINARY_DIR}/../include/libxml/config.h) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../include/libxml/config.h") add_definitions(-DHAVE_CONFIG_H) diff --git a/misc/tools/xmltools/libxslt/CMakeLists.txt b/misc/tools/xmltools/libxslt/CMakeLists.txt index bfc77b0c474..44b4f60e510 100644 --- a/misc/tools/xmltools/libxslt/CMakeLists.txt +++ b/misc/tools/xmltools/libxslt/CMakeLists.txt @@ -76,10 +76,12 @@ SET(LIBXSLT_VERSION_NUMBER 10126) SET(LIBXSLT_VERSION_EXTRA "-BRLCAD") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.in - ${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt/config.h) + ${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt/config.h) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt/config.h") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/xsltconfig.h.in ${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt/xsltconfig.h) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/../include/libxslt/xsltconfig.h") SET(libxslt_srcs src/attributes.c diff --git a/misc/uncpowerplant2g.sh b/misc/uncpowerplant2g.sh index 258f033658c..2081586e002 100755 --- a/misc/uncpowerplant2g.sh +++ b/misc/uncpowerplant2g.sh @@ -2,7 +2,7 @@ # U N C P O W E R P L A N T 2 G . S H # BRL-CAD # -# Copyright (c) 2014-2020 United States Government as represented by +# Copyright (c) 2014-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/misc/win32-msvc/Dll/BrlcadCore.rc b/misc/win32-msvc/Dll/BrlcadCore.rc index 8c1dc257446..5a28e80fa7b 100644 --- a/misc/win32-msvc/Dll/BrlcadCore.rc +++ b/misc/win32-msvc/Dll/BrlcadCore.rc @@ -38,7 +38,7 @@ BEGIN VALUE "FileDescription", "BRL-CAD for Windows Dynamic-Link Library\0" VALUE "FileVersion", BRLCAD_DLL_RC_VERSION VALUE "InternalName", "BrlcadCore\0" - VALUE "LegalCopyright", "Copyright (c) 1984-2020 United States Government as represented by the U.S. Army Research Laboratory. All Rights Reserved.\0" + VALUE "LegalCopyright", "Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. All Rights Reserved.\0" VALUE "LegalTrademarks", "The word mark ""BRL-CAD"" and the ""BRL-CAD Eagle"" image are registered trademarks of the Department of the Army, United States Government. All rights are reserved.\0" VALUE "OriginalFilename", "BrlcadCore.dll\0" VALUE "ProductName", "BRL-CAD\0" diff --git a/misc/win32-msvc/Dll/CMakeLists.txt b/misc/win32-msvc/Dll/CMakeLists.txt index 5f9acc0d1bb..0ac4aab9d02 100644 --- a/misc/win32-msvc/Dll/CMakeLists.txt +++ b/misc/win32-msvc/Dll/CMakeLists.txt @@ -38,12 +38,10 @@ target_link_libraries(BrlcadCore libbn-static libbrep-static libbu-static - gdiam-static libged-static regex-static librt-static libbrep-static - vds-static libwdb-static libnmg-static poly2tri-static @@ -119,12 +117,10 @@ target_link_libraries(brlcad libbn-static libbrep-static libbu-static - gdiam-static libged-static regex-static librt-static libbrep-static - vds-static libwdb-static libnmg-static poly2tri-static diff --git a/misc/win32-msvc/Dll/TclDummies.c b/misc/win32-msvc/Dll/TclDummies.c index e4690eefd87..519ab5a2005 100644 --- a/misc/win32-msvc/Dll/TclDummies.c +++ b/misc/win32-msvc/Dll/TclDummies.c @@ -1,7 +1,7 @@ /* T C L D U M M I E S . C * BRL-CAD * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/win32-msvc/Dll/brlcad.rc b/misc/win32-msvc/Dll/brlcad.rc index 606b1936487..836e8600e1b 100644 --- a/misc/win32-msvc/Dll/brlcad.rc +++ b/misc/win32-msvc/Dll/brlcad.rc @@ -38,7 +38,7 @@ BEGIN VALUE "FileDescription", "BRL-CAD for Windows Dynamic-Link Library\0" VALUE "FileVersion", BRLCAD_DLL_RC_VERSION VALUE "InternalName", "brlcad\0" - VALUE "LegalCopyright", "Copyright (c) 1984-2020 United States Government as represented by the U.S. Army Research Laboratory. All Rights Reserved.\0" + VALUE "LegalCopyright", "Copyright (c) 1984-2021 United States Government as represented by the U.S. Army Research Laboratory. All Rights Reserved.\0" VALUE "LegalTrademarks", "The word mark ""BRL-CAD"" and the ""BRL-CAD Eagle"" image are registered trademarks of the Department of the Army, United States Government. All rights are reserved.\0" VALUE "OriginalFilename", "brlcad.dll\0" VALUE "ProductName", "BRL-CAD\0" diff --git a/misc/win32-msvc/bootstrap.cpp b/misc/win32-msvc/bootstrap.cpp index 2658ae690c3..347162fd626 100644 --- a/misc/win32-msvc/bootstrap.cpp +++ b/misc/win32-msvc/bootstrap.cpp @@ -1,7 +1,7 @@ /* B O O T S T R A P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/misc/wix/License.rtf b/misc/wix/License.rtf index a995ecb61ff..09cabc0fd0b 100644 --- a/misc/wix/License.rtf +++ b/misc/wix/License.rtf @@ -221,7 +221,7 @@ prominent in the BRL-CAD sources:} \par \pard\plain \s20\sb0\sa0\dbch\af7\dbch\af5\afs20\loch\f5\fs20{\rtlch \ltrch }{\rtlch \ltrch\loch -Copyright (c) 1984-2020 United States Government as represented by} +Copyright (c) 1984-2021 United States Government as represented by} \par \pard\plain \s20\sb0\sa0\dbch\af7\dbch\af5\afs20\loch\f5\fs20{\rtlch \ltrch }{\rtlch \ltrch\loch the U.S. Army Research Laboratory.} diff --git a/regress/CMakeLists.txt b/regress/CMakeLists.txt index f8339660a0c..514d3bc8a0c 100644 --- a/regress/CMakeLists.txt +++ b/regress/CMakeLists.txt @@ -108,11 +108,11 @@ add_subdirectory(weight) if(SH_EXEC) - add_test(NAME regress-usage COMMAND ${SH_EXEC} "${CMAKE_SOURCE_DIR}/regress/usage.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-usage COMMAND ${SH_EXEC} "${CMAKE_SOURCE_DIR}/regress/usage.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-usage "rt" STAND_ALONE TEST_DEFINED) # TODO - test for Python before adding this one - add_test(NAME regress-flawfinder COMMAND ${SH_EXEC} "${CMAKE_SOURCE_DIR}/regress/flawfinder.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-flawfinder COMMAND ${SH_EXEC} "${CMAKE_SOURCE_DIR}/regress/flawfinder.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-flawfinder "" STAND_ALONE TEST_DEFINED) endif(SH_EXEC) diff --git a/regress/asc/CMakeLists.txt b/regress/asc/CMakeLists.txt index 8e57ab45c0c..9693c6daabf 100644 --- a/regress/asc/CMakeLists.txt +++ b/regress/asc/CMakeLists.txt @@ -2,12 +2,12 @@ if(SH_EXEC) if (TARGET asc2g) - add_test(NAME regress-asc COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/asc.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-asc COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/asc.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-asc "asc2g;g2asc;gdiff;dbupgrade" TEST_DEFINED) endif (TARGET asc2g) - add_test(NAME regress-asc2dsp COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/asc2dsp.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-asc2dsp COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/asc2dsp.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-asc2dsp "cv;asc2pix;pix-bw;asc2dsp" TEST_DEFINED) endif(SH_EXEC) diff --git a/regress/asc/asc.sh b/regress/asc/asc.sh index a1e2b7b2372..81921eb242e 100755 --- a/regress/asc/asc.sh +++ b/regress/asc/asc.sh @@ -2,7 +2,7 @@ # A S C . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/asc/asc2dsp.sh b/regress/asc/asc2dsp.sh index fb932b4e56b..e4fb291d65b 100755 --- a/regress/asc/asc2dsp.sh +++ b/regress/asc/asc2dsp.sh @@ -2,7 +2,7 @@ # A S C 2 D S P . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/bots/CMakeLists.txt b/regress/bots/CMakeLists.txt index 73ee13e54f2..8c97c7247c2 100644 --- a/regress/bots/CMakeLists.txt +++ b/regress/bots/CMakeLists.txt @@ -1,7 +1,7 @@ if (SH_EXEC AND TARGET mged) - add_test(NAME regress-bots COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/bots.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-bots COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/bots.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-bots "mged;pixdiff;rt" TEST_DEFINED) endif (SH_EXEC AND TARGET mged) diff --git a/regress/bots/bots.sh b/regress/bots/bots.sh index dbf8233fc89..67e606710ee 100755 --- a/regress/bots/bots.sh +++ b/regress/bots/bots.sh @@ -2,7 +2,7 @@ # B O T S . S H # BRL-CAD # -# Copyright (c) 2008-2020 United States Government as represented by +# Copyright (c) 2008-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/comgeom/CMakeLists.txt b/regress/comgeom/CMakeLists.txt index 68fb26ee9d3..d6f45ea7207 100644 --- a/regress/comgeom/CMakeLists.txt +++ b/regress/comgeom/CMakeLists.txt @@ -1,7 +1,7 @@ if (SH_EXEC AND TARGET mged AND TARGET asc2g) - add_test(NAME regress-comgeom COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/comgeom.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-comgeom COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/comgeom.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-comgeom "mged;asc2g;vdeck;comgeom-g" TEST_DEFINED) endif (SH_EXEC AND TARGET mged AND TARGET asc2g) diff --git a/regress/comgeom/comgeom.sh b/regress/comgeom/comgeom.sh index 76ac1217bf7..2613068232b 100755 --- a/regress/comgeom/comgeom.sh +++ b/regress/comgeom/comgeom.sh @@ -2,7 +2,7 @@ # C O M G E O M . S H # BRL-CAD # -# Copyright (c) 2008-2020 United States Government as represented by +# Copyright (c) 2008-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/coverage/CMakeLists.txt b/regress/coverage/CMakeLists.txt index 5aa1f509b97..e395c1959d2 100644 --- a/regress/coverage/CMakeLists.txt +++ b/regress/coverage/CMakeLists.txt @@ -24,7 +24,7 @@ foreach(rf ${REGRESS_FILES_CMAKE}) endforeach(rf ${REGRESS_FILES_CMAKE}) # Build a scanner to introspect the tests -BRLCAD_ADDEXEC(covgcheck covgcheck.cpp "libbu;${CMAKE_THREAD_LIBS_INIT}" TEST) +BRLCAD_ADDEXEC(covgcheck covgcheck.cpp "libbu;Threads::Threads" TEST) if (O3_COMPILER_FLAG) # This check benefits greatly from optimization. If we have the O3 flag, use # it - whether or not the standard build settings would add it. diff --git a/regress/coverage/covgcheck.cpp b/regress/coverage/covgcheck.cpp index e76def8066e..fa6c3ba51b5 100644 --- a/regress/coverage/covgcheck.cpp +++ b/regress/coverage/covgcheck.cpp @@ -1,7 +1,7 @@ /* C O V G C H E C K . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/regress/dsp/CMakeLists.txt b/regress/dsp/CMakeLists.txt index 859ef9790a2..61e51c328e5 100644 --- a/regress/dsp/CMakeLists.txt +++ b/regress/dsp/CMakeLists.txt @@ -2,7 +2,7 @@ if (SH_EXEC AND TARGET mged) if (NOT WIN32) - add_test(NAME regress-dsp COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/dsp.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-dsp COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/dsp.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-dsp "mged;cv;asc2pix;rt;pix-bw" TEST_DEFINED) else (NOT WIN32) message(WARNING "regress-dsp failes on some Windows platforms (pix-bw appears to hang on github runners) - skipping") diff --git a/regress/dsp/dsp.sh b/regress/dsp/dsp.sh index c7c0894b08c..0803f2ad9db 100755 --- a/regress/dsp/dsp.sh +++ b/regress/dsp/dsp.sh @@ -2,7 +2,7 @@ # D S P . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/flawfinder.sh b/regress/flawfinder.sh index 3c5874dac14..0922b95105d 100755 --- a/regress/flawfinder.sh +++ b/regress/flawfinder.sh @@ -2,7 +2,7 @@ # F L A W F I N D E R . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/fuzz/CMakeLists.txt b/regress/fuzz/CMakeLists.txt index 2664b061a29..e63fa46a805 100644 --- a/regress/fuzz/CMakeLists.txt +++ b/regress/fuzz/CMakeLists.txt @@ -19,7 +19,7 @@ if (HAVE_FUZZER) install(PROGRAMS "${CMAKE_CURRENT_BINARY_DIR}/fuzz" DESTINATION ${BIN_DIR}) configure_file(run.sh ${CMAKE_BINARY_DIR}/bin/fuzz COPYONLY) - #add_test(NAME fuzz COMMAND ${SH_EXEC} ${CMAKE_BINARY_DIR}/bin/fuzz run) + #BRLCAD_ADD_TEST(NAME fuzz COMMAND ${SH_EXEC} ${CMAKE_BINARY_DIR}/bin/fuzz run) add_custom_target(fuzz COMMAND ${SH_EXEC} ${CMAKE_BINARY_DIR}/bin/fuzz run diff --git a/regress/fuzz/fuzz_ged.cpp b/regress/fuzz/fuzz_ged.cpp index b80814ab302..c7598dd92bb 100644 --- a/regress/fuzz/fuzz_ged.cpp +++ b/regress/fuzz/fuzz_ged.cpp @@ -1,7 +1,7 @@ /* F U Z Z _ G E D . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/regress/fuzz/fuzz_test1.cxx b/regress/fuzz/fuzz_test1.cxx index dae15b7703b..6eefaed6b8f 100644 --- a/regress/fuzz/fuzz_test1.cxx +++ b/regress/fuzz/fuzz_test1.cxx @@ -1,7 +1,7 @@ /* F U Z Z _ T E S T 1 . C X X * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/regress/g-dot.sh b/regress/g-dot.sh index 96154cb2b1d..20ba17b3bb6 100755 --- a/regress/g-dot.sh +++ b/regress/g-dot.sh @@ -2,7 +2,7 @@ # G - D O T . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/g-nff.sh b/regress/g-nff.sh index 67980f3eb3d..860d414ec1e 100755 --- a/regress/g-nff.sh +++ b/regress/g-nff.sh @@ -2,7 +2,7 @@ # G - N F F . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/gcv/dem/CMakeLists.txt b/regress/gcv/dem/CMakeLists.txt index 508693ba791..f878a44e2e9 100644 --- a/regress/gcv/dem/CMakeLists.txt +++ b/regress/gcv/dem/CMakeLists.txt @@ -1,4 +1,6 @@ -BRLCAD_REGRESSION_TEST(regress-dem "gcv;libgcv_gdal" EXEC gcv) +if (TARGET libgcv_gdal) + BRLCAD_REGRESSION_TEST(regress-dem "gcv;libgcv_gdal" EXEC gcv) +endif (TARGET libgcv_gdal) DISTCLEAN( "${CMAKE_CURRENT_BINARY_DIR}/regress-dem.log" diff --git a/regress/ged/CMakeLists.txt b/regress/ged/CMakeLists.txt index d9a1beacae7..6a630b594cf 100644 --- a/regress/ged/CMakeLists.txt +++ b/regress/ged/CMakeLists.txt @@ -1,16 +1,24 @@ -# Tests for the various geometry format conversions supported -# by BRL-CAD +# Tests for various GED commands include_directories(${GED_INCLUDE_DIRS}) BRLCAD_ADDEXEC(regress_mater mater.c libged TEST_USESDATA) - -BRLCAD_REGRESSION_TEST(regress-ged_mater "regress_mater;density_DATAFILES_cp" EXEC regress_mater) +BRLCAD_REGRESSION_TEST(regress-ged_mater "regress_mater;ged-mater;density_DATAFILES_cp" EXEC regress_mater) DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/regress-ged_mater.log") + +BRLCAD_ADDEXEC(regress_push push.cpp libged TEST_USESDATA) +BRLCAD_REGRESSION_TEST(regress-ged_push "regress_push;ged-npush" EXEC regress_push) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/regress-ged_push.log") + + CMAKEFILES( CMakeLists.txt regress-ged_mater.cmake.in + regress-ged_push.cmake.in + push_tests.g + ppush_tests.g + xpush_tests.g ) # Local Variables: diff --git a/regress/ged/mater.c b/regress/ged/mater.c index 5ff2798a26c..a0f7e822247 100644 --- a/regress/ged/mater.c +++ b/regress/ged/mater.c @@ -1,7 +1,7 @@ /* M A T E R . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/regress/ged/ppush_tests.g b/regress/ged/ppush_tests.g new file mode 100644 index 0000000000000000000000000000000000000000..143eb90b47fd31e0190c988b7d6e943e4b9c54a4 GIT binary patch literal 8632 zcmc&)Npl-T6n-N)iR}OeDl8Qrq(k5Wm>G>WA0T3>0;*DMmEt;99NAKpNm7>L;+S6m zSICVEzr#NXet~&QzfpJFEv3haJO|Hc`t|F#d~fLl>7&VP3fWE?x<((RDe;BQNsVsEzX{Ex zzI9{zWSs6yVUONkblv^;qPO#Rk>j#%W9>SwTcq#?in0!g5#o&GBe@!D>pYG^zm60) zm;%Yq%(%$iCAm*`=d##OcmMl~uIKhU`#EwPZOddi8GAz%Qo+PyBN&IdKzZUZQ^u_t5X$I$6vUX&@y`=G>v0oRG z+fb|Bf+XapLEE+pK#0zzil+79Rhv;0Y`1MP_0Y8z&DbfUQ^)0ejmaQ%j49>5~ zy2T-EA z?W;#q2&Gq@oCco@3iNMCP94{KEFFQ4oJ_fiAE+Yo16ONgt2m^3&1uRH^cP)vnP}cP zuFG{#@P&1!V%Z~^3A45yJqo8#{T?JaU#gdXj~q98Y*W4Mas7^}w=IC*G4W!n;@QU+ ztNa~HH~6lcdf|ieBl*#8dbxT<_YwIk*Xy*hUfjnJ-h0Jxc^l&`qvldOh3>I*A^O4B z?g}9~m#R|T75GxB=oQ+=n7C@(GI83wEL^Lm7u8SoH|{Irp5)6~6!=wFP|muNe|N|2 z{DtdAw(V9^Mlxdpll;}-zO6{JmR*;Ly;YZi_E)SgZ&Z9a^|vdpzMbFW#%=ksuG=@5 ztp~Gq>59zOgQi(}Q2yWMy3-xTrT;%6q24N_!K$h|K@Rt9QeEjm{AlU*;N|MIqFfZv z3vnm-M5P^khW)z#a`pe|*&M$36!O1ARDsUZzoqfHmo)m42Q%FN{sZ;3<^m9|C~=33 z;Me^S-DQmx;yd`|nZr6n=MdqKSUPsr(8S_e zTR(Cf*QI>0NqH{1i*in5q)?drs^?fO>$rx?gso?v`(O`;uUJp&gZq~`$0DK6)x)$8 zZ{j(|Cc9VIn?hpjaqTr+m+EFQ`fX;{9Ic&(?z*AtGTnQ)M}NyeW@sRTsf}3McFY&G z6$3SB;2t@S>k?l0{4TGwpO_zglHA5jq>sfn8j0A?2l)cZYtB8=9B!jc@mLVuA>z}) zN6!5ui(<>s=hspDB_|>bRM_z1uZF=v+GqdTm@z;QI@3R`(6OpF_icHFV_BkWq{>^bpa(nu7T(#qI*IB@q?EkLx1!)_eV{f|XSls)p;Hh7l#eayUE6qpyIZ;^S z59O6QxXXF%dw(hUy==kAapPC6gS)ZYrMXK#08G$7Rs62 z!bKTBIAHg+JS{+H#~Dw%h^|P}U3XoLF0C(`ud>{)TNKK~(~d(vCO%z#9CqU4uxrPQ zf3B?ctrH)Iy#;*jIP5Ho!_(EBz>4{(4vNAYU+Pz`2mGPb-?eI3Mh2QrEAQ@njYG3; z^>Yi783Ag?S(durn^L#_lyQc12UcA0G%J3ZgpW-$7Y+=OMQnp$)iWa`+QP`G^)I#h z6c&fS&&YZ#isK(HfTcmb2iLydApVRSckJ1A&sn^B#`a`8QGR#6$N$r)v1=d|j7tOXlZKF5(!*R=XhE)Bi^h Pz7>b +#include +#include +#include +#include +#include +#include +#include + +#include "bu/app.h" +#include "bu/path.h" +#include "bu/str.h" +#include "ged.h" + +static void +regress_push_usage(struct bu_vls *str, struct bu_opt_desc *d) { + char *option_help = bu_opt_describe(d, NULL); + bu_vls_sprintf(str, "Usage: regress_push [options] control.g working.g\n"); + bu_vls_printf(str, "\nRuns the specified push configuration on a series of pre-defined objects in the working.g file, then compares the results to those from the control.g file.\n \n"); + if (option_help) { + bu_vls_printf(str, "Options:\n%s\n", option_help); + bu_free(option_help, "help str"); + } +} + +int +main(int argc, const char **argv) +{ + + int print_help = 0; + int xpush = 0; + int to_regions = 0; + int to_solids = 0; + int max_depth = 0; + int verbosity = 0; + int local_changes_only = 0; + int dry_run = 0; + struct bu_opt_desc d[11]; + BU_OPT(d[0], "h", "help", "", NULL, &print_help, "Print help and exit"); + BU_OPT(d[1], "?", "", "", NULL, &print_help, ""); + BU_OPT(d[2], "v", "verbosity", "", &bu_opt_incr_long, &verbosity, "Increase output verbosity (multiple specifications of -v increase verbosity)"); + BU_OPT(d[3], "f", "force", "", NULL, &xpush, "Create new objects if needed to push matrices (xpush)"); + BU_OPT(d[4], "x", "xpush", "", NULL, &xpush, ""); + BU_OPT(d[5], "r", "regions", "", NULL, &to_regions, "Halt push at regions (matrix will be above region reference)"); + BU_OPT(d[6], "s", "solids", "", NULL, &to_solids, "Halt push at solids (matrix will be above solid reference)"); + BU_OPT(d[7], "d", "max-depth", "", &bu_opt_int, &max_depth, "Halt at depth # from tree root (matrix will be above item # layers deep)"); + BU_OPT(d[8], "L", "local", "", NULL, &local_changes_only, "Ensure push operations do not impact geometry outside the specified trees."); + BU_OPT(d[9], "D", "dry-run", "", NULL, &dry_run, "Calculate the changes but do not apply them."); + BU_OPT_NULL(d[10]); + + bu_setprogname(argv[0]); + + // We will reuse most of the argv array when we actually call the ged command, but we also need + // to process it here so we know what to look for when comparing the control and the output. Make + // a duplicate for later use. + int gargc = argc; + char **gargv = bu_argv_dup(argc, argv); + + /* parse standard options */ + argc--;argv++; + int opt_ret = bu_opt_parse(NULL, argc, argv, d); + + /* adjust argc to match the leftovers of the options parsing */ + argc = opt_ret; + + if (argc != 2 || print_help) { + struct bu_vls push_help = BU_VLS_INIT_ZERO; + regress_push_usage(&push_help, d); + bu_log("%s", bu_vls_cstr(&push_help)); + bu_vls_free(&push_help); + return -1; + } + + if (BU_STR_EQUAL(argv[0], argv[1])) { + bu_log("Error - control and working .g file cannot match.\n"); + return -1; + } + + if (!bu_file_exists(argv[0], NULL)) { + bu_exit(1, "%s does not exist", argv[0]); + } + if (!bu_file_exists(argv[1], NULL)) { + bu_exit(1, "%s does not exist", argv[1]); + } + + // Adjust the duplicate argv copy for ged purposes. + bu_free(gargv[0], "free copy of argv[0]"); + bu_free(gargv[gargc-2], "free copy of argv[argc-1]"); + bu_free(gargv[gargc-1], "free copy of argv[argc-1]"); + gargv[0] = bu_strdup("npush"); + gargv[gargc-2] = NULL; + gargv[gargc-1] = NULL; + + // All set - open up the .g file and go to work. + struct ged *gedp = ged_open("db", argv[1], 1); + if (gedp == GED_NULL) { + bu_exit(1, "Failed to open \"%s\" ", argv[1]); + } + + // Make sure our reference counts are up to date + db_update_nref(gedp->ged_wdbp->dbip, &rt_uniresource); + + // Perform the specified push operation on all example objects + for (size_t i = 0; i <= 16; i++) { + std::ostringstream ss; + ss << "sph_"; + ss << std::setfill('0') << std::setw(3) << i; + std::string oname = ss.str(); + char *gobj = bu_strdup(oname.c_str()); + gargv[gargc-2] = gobj; + char **av = bu_argv_dup(gargc-1, (const char **)gargv); + ged_npush(gedp, gargc - 1, (const char **)av); + bu_argv_free((size_t)gargc-1, av); + bu_free(gobj, "free objname"); + gargv[gargc-2] = NULL; + } + + // To avoid problems with bu_argv_free, make very sure the last two entires + // are not pointing to something else. + gargv[gargc-2] = NULL; + gargv[gargc-1] = NULL; + bu_argv_free((size_t)gargc, gargv); + + // dbconcat the control file into the current database, with a prefix + const char *dbcargv[4]; + dbcargv[0] = "dbconcat"; + dbcargv[1] = argv[0]; + dbcargv[2] = "ctrl_"; + dbcargv[3] = NULL; + ged_concat(gedp, 3, (const char **)dbcargv); + + // object names may not be identical - what we are concerned with is that + // the geometry shapes remain unchanged from what is expected (or, in a few + // specific cases, we check that differences are found.) Use the libged + // raytracing based gdiff and a parallel tree walk to check this. + bool have_diff_vol = false; + bool have_diff_struct = false; + const char *gdiffargv[4]; + gdiffargv[0] = "gdiff"; + for (size_t i = 0; i <= 16; i++) { + std::ostringstream ss; + ss << "sph_"; + ss << std::setfill('0') << std::setw(3) << i; + std::string oname = ss.str(); + char *gobj = bu_strdup(oname.c_str()); + std::string cname = std::string("ctrl_") + oname; + char *cobj = bu_strdup(cname.c_str()); + std::cout << "\nChecking: " << cobj << " and " << gobj << ":\n"; + gdiffargv[1] = cobj; + gdiffargv[2] = gobj; + bu_vls_trunc(gedp->ged_result_str, 0); + ged_gdiff(gedp, 3, (const char **)gdiffargv); + if (!BU_STR_EQUAL(bu_vls_cstr(gedp->ged_result_str), "0")) { + std::cout << "***VOL DIFF***\n"; + have_diff_vol = true; + } else { + std::cout << "VOL match\n"; + } + gdiffargv[1] = "-S"; + gdiffargv[2] = cobj; + gdiffargv[3] = gobj; + bu_vls_trunc(gedp->ged_result_str, 0); + ged_gdiff(gedp, 4, (const char **)gdiffargv); + if (!BU_STR_EQUAL(bu_vls_cstr(gedp->ged_result_str), "0")) { + std::cout << "***STRUCT DIFF***\n"; + have_diff_struct = true; + } else { + std::cout << "STRUCT match\n"; + } + + bu_free(cobj, "ctrl objname"); + bu_free(gobj, "push objname"); + } + + // We also check, when they exist, _ext trees for expected results. What + // we expect depends on the type of push - if -L is set we expect no + // differences, without -L there are expected structural differences. + for (size_t i = 0; i <= 16; i++) { + bool dvol = false; + bool dstruct = false; + std::ostringstream ss; + ss << "sph_"; + ss << std::setfill('0') << std::setw(3) << i; + ss << "_ext"; + std::string oname = ss.str(); + if (db_lookup(gedp->ged_wdbp->dbip, oname.c_str(), LOOKUP_QUIET) == RT_DIR_NULL) { + continue; + } + char *gobj = bu_strdup(oname.c_str()); + std::string cname = std::string("ctrl_") + oname; + char *cobj = bu_strdup(cname.c_str()); + std::cout << "\nChecking: " << cobj << " and " << gobj << ":\n"; + gdiffargv[1] = cobj; + gdiffargv[2] = gobj; + bu_vls_trunc(gedp->ged_result_str, 0); + ged_gdiff(gedp, 3, (const char **)gdiffargv); + if (!BU_STR_EQUAL(bu_vls_cstr(gedp->ged_result_str), "0")) { + dvol = true; + } + gdiffargv[1] = "-S"; + gdiffargv[2] = cobj; + gdiffargv[3] = gobj; + bu_vls_trunc(gedp->ged_result_str, 0); + ged_gdiff(gedp, 4, (const char **)gdiffargv); + if (!BU_STR_EQUAL(bu_vls_cstr(gedp->ged_result_str), "0")) { + dstruct = true; + } + // Whether we expect a differences depends on the options. There + // is only one condition in which we expect ext changes: local + // protection disabled and xpush enabled: + if (!local_changes_only && xpush) { + if (!dvol) { + std::cout << "ERROR: expected volume change not found\n"; + have_diff_vol = true; + } else { + std::cout << "VOL expected change\n"; + } + if (!dstruct) { + std::cout << "ERROR: expected struct change not found\n"; + have_diff_struct = true; + } else { + std::cout << "STRUCT expected change\n"; + } + } else { + if (dvol) { + std::cout << "ERROR: unexpected volume change\n"; + have_diff_vol = true; + } else { + std::cout << "VOL match\n"; + } + if (dstruct) { + std::cout << "ERROR: unexpected struct change\n"; + have_diff_struct = true; + } else { + std::cout << "STRUCT match\n"; + } + } + bu_free(cobj, "ctrl objname"); + bu_free(gobj, "push objname"); + } + + + if (!have_diff_vol && !have_diff_struct) { + // Remove the copy of the .g file + //std::remove(bu_vls_cstr(&gfile)); + } + + // Clean up + ged_close(gedp); + + if (have_diff_vol || have_diff_struct) { + bu_log("Found differences.\n"); + return -1; + } else { + bu_log("Push results match.\n"); + } + + return 0; +} + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/regress/ged/push_tests.g b/regress/ged/push_tests.g new file mode 100644 index 0000000000000000000000000000000000000000..8b02fd3b264c3c8a85ee5cc0bf9e34f13b1b72ca GIT binary patch literal 11320 zcmdT~OLH4V5bl+1#}B}SGLNzk(jjmGoL#M6K0w5y3aCmIkD_v2D~@cb$|NaEadFHq zfGgz2h2No{1i!#^_w>j!Bab%Y#A7oD?P{lYrr-U|%$_EIEoq(JsY3-eR*P@$fB)qd z_u;F_XmUJ&AD)ee^`8ghN&VZ=;G}$E}_9KR0r zq`G-){B)S^j$xmkUexaWbJ5fDXMz1{-rCX%&ReAL7P7Jmi7;_S{1IQZrB&`nrr$)0 zTTFrEXVS0uZWG_ry>nj7yL>`rA)xABq0j zkZePxvIU9HPQ9k76#yTdO%+b(8+W>EkL;tfslw-<*$w!PG)|GG{H?l4`pU9+fgpaq ztmZ9_U=#g(js2Y2Ko{XAbngn?A^Z*r(fQQWyCW~k#YbmTT}qu9Oj9&3)v0ae zUs!j7%HD67tgyWM)DbgTVa!l7_1K|s_Th(Kl5^v?F8B%T7d`G!z3(u72&(rDfD&E0 zEc$frqw9U=_SpaRc*MWxk_c?Mf^kfK<#J6gEf?b`inmVDFNaaiG+JG@66gPg()s9n zU)y8*=xnM>)qUl@l&U&~hEWn%wJpgLomX{NH#KO!L*)|l&ElT;%Ni8;dPMhHHbYpy z#K*eK8@OyRKq2w0)(wF9nDJndW{pyu6%h}TGw7!CEX&OcHQnQ0!}RIC?Rv19x2AA) z+r~|@^x`3Gx*{|26}@KSE7bQ6*WGqMto;1}31Lg0gt5>Kxje2}6}q4sWsMee91KjFUP3KL@HxbK} z#&O$f-tgV15_CF^SB6My8t2dONTUpoOt-`UatSrB{r3DnJsz7C%cN=NZag?Lvoozj zy5aknWoC|)Oo(|lv*=Of`yx%d@HXzFt#f!O@uZOJdjAH#O1P;Q{5mmf17Q~;6}lCn zYct*ZxJPtbLbfj2k9UhPNci|p8&_X+DsU_bK7^_%RNU&VUT1>o9&Ev7H{6G}(? zD^v1dwp>@Ro{R{(9JvUWyr=4Nn!^jkh6}dkBPLAcKD6^nb zp(@xKjTx8#>NmNAxW#I`H98u!RrZ_qRb9mTcy zNtVOfqrub35OAa92JQUkD1d6(PJ|npl>c1E6}nQqRF*fKer+epf6egxho=wcM~}p} zqks1MX1L$C7L04gf3qz9d(N?@Bfi$^+%=SLras!wQ3A6nOuO!pUFT+!2W1lm_KRH^ zhwfoq{7<)=NoCxW9u*GVD~_6FI5c9}CH3lj%=<~mUw(tK4694Ko#;{Xd6V|NSZy9Y zvzw*QhGx^UJL2ZOo5iQDE;IiWypZKCZl_8_3Cqk^d`x={b*L3yhuUVnaL;uS2XGx~ zh1a3Zf^p3{)GDh((|9MKN_~VwmB8$)+OCY7B7UfZ^AZl@bI&XdEkq?yZ5nTxjJ$It zGV^Da;s+5WEJj==v3hl4a`-I&-X-F9B&0Uo#6Nb{(OprWee{sf1yY#>;%%8}Cqdyz z|NFD=$Fj8i;4_i|d^j>9U_v_|stsIa@VW2Dcmbq6#J&0i&~#z_5+~}MqiLUWIqMn9 z_si_3gzv2{iReYO^3mf7UA};hzBl@m^KtVMUY~pjm1=Flc|;_)FH^VAEN)`-(dp;z oRnJR#gVfKT{3yflw`a|QbWh*sQvK22sWpv#0Aq)N3?TOV4`#2byZ`_I literal 0 HcmV?d00001 diff --git a/regress/ged/regress-ged_push.cmake.in b/regress/ged/regress-ged_push.cmake.in new file mode 100644 index 00000000000..e6b02ae56d4 --- /dev/null +++ b/regress/ged/regress-ged_push.cmake.in @@ -0,0 +1,86 @@ +# Values set at CMake configure time +set(CBDIR "@CMAKE_CURRENT_BINARY_DIR@") +set(CSDIR "@CMAKE_CURRENT_SOURCE_DIR@") +set(LOGFILE "${CBDIR}/regress-ged_push.log") + +set(OUTPUT_FILES + "${CBDIR}/ged_push.g" + "${CBDIR}/ged_xpush.g" + "${CBDIR}/ged_local_xpush.g" + ) + +file(WRITE "${LOGFILE}" "Starting push test run\n") + +# The executable locations aren't know at CMake configure time, so it is passed +# in via the EXEC variable at runtime by a generator expression in the parent +# build. De-quote it and assign it to the appropriate variable. +string(REPLACE "\\" "" PUSH_EXEC "${EXEC}") +if (NOT EXISTS "${PUSH_EXEC}") + file(WRITE "${LOGFILE}" "push test program not found at location \"${PUSH_EXEC}\" - aborting\n") + file(READ "${LOGFILE}" LOG) + message(FATAL_ERROR "Unable to find push test program, aborting.\nSee ${LOGFILE} for more details.\n${LOG}") +endif (NOT EXISTS "${PUSH_EXEC}") + +# Clean up in case we've run before unsuccessfully +foreach(of ${OUTPUT_FILES}) + execute_process(COMMAND "@CMAKE_COMMAND@" -E remove -f "${of}") +endforeach(of ${OUTPUT_FILES}) + +# Run basic push test +file(APPEND "${LOGFILE}" "Running ${PUSH_EXEC} standard test\n") +execute_process(COMMAND "${CMAKE_COMMAND}" -E copy "${CSDIR}/push_tests.g" "${CBDIR}/ged_push.g") +execute_process( + COMMAND "${PUSH_EXEC}" "${CSDIR}/ppush_tests.g" "${CBDIR}/ged_push.g" RESULT_VARIABLE ged_push_result + OUTPUT_VARIABLE ged_push_log ERROR_VARIABLE ged_push_log + WORKING_DIRECTORY ${CBDIR} + ) +file(APPEND "${LOGFILE}" "${ged_push_log}") +set(get_push_log) +if(ged_push_result) + file(READ "${LOGFILE}" LOG) + message(FATAL_ERROR "[regress-ged_push] Failure: ${ged_push_result}. See ${LOGFILE} for more info.\n${LOG}") +endif(ged_push_result) + +# Run basic xpush test +file(APPEND "${LOGFILE}" "Running ${PUSH_EXEC} xpush test\n") +execute_process(COMMAND "${CMAKE_COMMAND}" -E copy "${CSDIR}/push_tests.g" "${CBDIR}/ged_xpush.g") +execute_process( + COMMAND "${PUSH_EXEC}" -f "${CSDIR}/xpush_tests.g" "${CBDIR}/ged_xpush.g" RESULT_VARIABLE ged_push_result + OUTPUT_VARIABLE ged_push_log ERROR_VARIABLE ged_push_log + WORKING_DIRECTORY ${CBDIR} + ) +file(APPEND "${LOGFILE}" "${ged_push_log}") +set(get_push_log) +if(ged_push_result) + file(READ "${LOGFILE}" LOG) + message(FATAL_ERROR "[regress-ged_push] Failure: ${ged_push_result}. See ${LOGFILE} for more info.\n${LOG}") +endif(ged_push_result) + +# Run local xpush test +file(APPEND "${LOGFILE}" "Running ${PUSH_EXEC} local xpush test\n") +execute_process(COMMAND "${CMAKE_COMMAND}" -E copy "${CSDIR}/push_tests.g" "${CBDIR}/ged_local_xpush.g") +execute_process( + COMMAND "${PUSH_EXEC}" -L -f "${CSDIR}/xpush_tests.g" "${CBDIR}/ged_local_xpush.g" RESULT_VARIABLE ged_push_result + OUTPUT_VARIABLE ged_push_log ERROR_VARIABLE ged_push_log + WORKING_DIRECTORY ${CBDIR} + ) +file(APPEND "${LOGFILE}" "${ged_push_log}") +set(get_push_log) +if(ged_push_result) + file(READ "${LOGFILE}" LOG) + message(FATAL_ERROR "[regress-ged_push] Failure: ${ged_push_result}. See ${LOGFILE} for more info.\n${LOG}") +endif(ged_push_result) + + +# Clean up +foreach(of ${OUTPUT_FILES}) + execute_process(COMMAND "@CMAKE_COMMAND@" -E remove -f "${of}") +endforeach(of ${OUTPUT_FILES}) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 + diff --git a/regress/ged/xpush_tests.g b/regress/ged/xpush_tests.g new file mode 100644 index 0000000000000000000000000000000000000000..c9a62f7929aa4d08c8b1993bc319adbf0968a766 GIT binary patch literal 9440 zcmc&)ZEqVz5MDPg&07;%RiXk38&m-jmAUi1IQc@&iv&m&Z$f;%n#7GQg|@QYh>!gl zz^~~~f?p73W@qkZ_s(foiQW6qoNs4$pP6TNW_GvdEdx(0JHOvCH_Yx<@$I7@zxwi# z`FcK?pN-5_yhUX80m_zXF^CJqhq&77ThtDqZ-K;3 zk^u1wZeKgtf%d#RE27vues#Bkqu(C>_cuQO=x_Qxq#bZ|0N3s|&RfLYsd+FRolc%T zHNTj%XJC7P`p0lSnofpi#pJ}q#x~n`a~rhSB`p{Z1p9rk3s6*VYKJ88BFE{TQbK|bnoXmDX2E+-ei|D@#pW~Pb9o(;Q>$gB( z(_QIZ^|$l3H|)H{DLT>}AZd@F3KH?R_6F(`$Hfyz$aZt|uyRP`Ag#^sgJ={`Am5-} z^k96a<^Yt~E|u_k5k1C^Tyg5lF@JGv?g4*ycsx)a=>t2ArGvv?_Llg|y2l=Wj70cb zJ0PCvYi}jg2roP@;OlAEVI&nk;t#$8xGx%MH(`EJAH(f0_;}u9?GFe;t!IpTw@?mj zoP~wGPmEdn&^ixuME*nXJ?l&Gj+2QWVLpN|0A^Tz3_u&fyr|!f)enL|P*|_h7h*=6 zi5{4r`m!93EE}TI;CuevO6ak_>i-S`+F1|EPkjosLGiq2RElEUPFzD?;5+crb(MLw z1Z7|bSD)bgl<53~xRpN};CqwwDTXRNS*xLc_KPw-F`s2U(pPD(58W?>Z(8R)A$r%`eoSEUde{7`pd{Nje5x=cX3wKwPOycYM% z>dKWXVg#;K=AKpjB|B1Y%nyrduqaL0d^=#m~7q5Qsqg{4z9RycX&Tb!3m+@B4X?m(IqT)%`1?HneE{hf( zZCqbk6+NjAKD^2~4TC1qt^EwxkM_?+6djs(V4uB1yxVD5Q1qsK6%p(cE5EOoVBweN z4LqJwhX$73GN0}Nf3Vhi#putu-Xltd?C1+s%Sw`j$43m+oW_PQns|$$vT@~TNfIG! zzxQpP7>31-zf23yNER{bp9C$E6VH&pp>j4>!D5vcFoNZW&#&^LcZvS!-hC`j*-G>La^9Ml?UT{-`PhI%>0#{v<$AXFAE~Un6_gNS zC%pei!`B_0g;(o?am%`c^(s4D4(hfecV0fsvi?ARNc9t};>Ce?fabg88C=qaO>VpRAi-5fNxgH;3G4WDs));!EONvn=G|jm zSCL|HPE*AQ}V_({cr7{{u8hta$(c literal 0 HcmV?d00001 diff --git a/regress/gqa/CMakeLists.txt b/regress/gqa/CMakeLists.txt index f9e6e9c44fc..b66c7f1985f 100644 --- a/regress/gqa/CMakeLists.txt +++ b/regress/gqa/CMakeLists.txt @@ -1,7 +1,7 @@ if (SH_EXEC AND TARGET mged AND TARGET gqa) - add_test(NAME regress-gqa COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/gqa.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-gqa COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/gqa.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-gqa "gqa;mged" TEST_DEFINED) endif (SH_EXEC AND TARGET mged AND TARGET gqa) diff --git a/regress/gqa/gqa.sh b/regress/gqa/gqa.sh index c70cb324dd7..0d2866eb3fa 100755 --- a/regress/gqa/gqa.sh +++ b/regress/gqa/gqa.sh @@ -2,7 +2,7 @@ # G Q A . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/icv/CMakeLists.txt b/regress/icv/CMakeLists.txt index 12bd136f6ef..49e58a8eacc 100644 --- a/regress/icv/CMakeLists.txt +++ b/regress/icv/CMakeLists.txt @@ -122,6 +122,8 @@ CMAKEFILES( m35.ppm.tbz2 m35.dpix.tbz2 m35.bw.tbz2 + regress-icv_export.cmake.in + regress-icv_import.cmake.in ) # Local Variables: diff --git a/regress/iges/CMakeLists.txt b/regress/iges/CMakeLists.txt index f48a6ad96c2..9109225e9b2 100644 --- a/regress/iges/CMakeLists.txt +++ b/regress/iges/CMakeLists.txt @@ -2,7 +2,7 @@ if (SH_EXEC AND TARGET mged AND TARGET asc2g) if (NOT WIN32) - add_test(NAME regress-iges COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/iges.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-iges COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/iges.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-iges "iges-g;g-iges;mged;asc2g" TEST_DEFINED) else (NOT WIN32) message(WARNING "iges.sh doesn not currently pass on Windows - disabling") diff --git a/regress/iges/iges.sh b/regress/iges/iges.sh index 331e2546e1a..2e519cb05dd 100755 --- a/regress/iges/iges.sh +++ b/regress/iges/iges.sh @@ -2,7 +2,7 @@ # I G E S . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/library.sh b/regress/library.sh index d9dc5654b0c..6fb172646b5 100755 --- a/regress/library.sh +++ b/regress/library.sh @@ -2,7 +2,7 @@ # L I B R A R Y . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/licenses/licenses_check.cpp b/regress/licenses/licenses_check.cpp index 72d73b4897b..c76267ab1e0 100644 --- a/regress/licenses/licenses_check.cpp +++ b/regress/licenses/licenses_check.cpp @@ -1,7 +1,7 @@ /* L I C E N S E _ C H E C K . C X X * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/regress/lights/CMakeLists.txt b/regress/lights/CMakeLists.txt index 8e128e81b42..c0a9217b7c3 100644 --- a/regress/lights/CMakeLists.txt +++ b/regress/lights/CMakeLists.txt @@ -1,7 +1,7 @@ if (SH_EXEC AND TARGET asc2g) - add_test(NAME regress-lights COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/lights.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-lights COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/lights.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-lights "rt;asc2g;pixdiff" TEST_DEFINED) endif (SH_EXEC AND TARGET asc2g) diff --git a/regress/lights/lights.cmake b/regress/lights/lights.cmake old mode 100755 new mode 100644 index f536d3db8aa..94b32f1941a --- a/regress/lights/lights.cmake +++ b/regress/lights/lights.cmake @@ -1,7 +1,7 @@ # L I G H T S . C M A K E # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/lights/lights.sh b/regress/lights/lights.sh index d6975e3f3a7..485a7c02ab3 100755 --- a/regress/lights/lights.sh +++ b/regress/lights/lights.sh @@ -2,7 +2,7 @@ # L I G H T S . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/regress/mged/CMakeLists.txt b/regress/mged/CMakeLists.txt index 0c515a7e9c0..1f67381c53f 100644 --- a/regress/mged/CMakeLists.txt +++ b/regress/mged/CMakeLists.txt @@ -98,7 +98,7 @@ if (TARGET mged) # Original shell based test if (SH_EXEC) - add_test(NAME regress-mged COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/mged.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-mged COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/mged.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-mged "mged;rtarea;rt;rtcheck" TEST_DEFINED) endif (SH_EXEC) diff --git a/regress/mged/mged.sh b/regress/mged/mged.sh index bbaa9fc3590..4747ed4c433 100755 --- a/regress/mged/mged.sh +++ b/regress/mged/mged.sh @@ -2,7 +2,7 @@ # M G E D . S H # BRL-CAD # -# Copyright (c) 2008-2020 United States Government as represented by +# Copyright (c) 2008-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -99,14 +99,6 @@ check_command ( ) { return 0 } -touch mged.g -output="`$MGED -c mged.g quit 2>&1`" -if test $? != 0 ; then - log "Output: $output" - log "Unable to run mged, aborting" - exit 1 -fi - log "seting up an almost empty database (mged.g) to make sure mged runs" rm -f mged.g $MGED -c >> $LOGFILE 2>&1 </${INCLUDE_DIR}/brlcad") else(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") target_include_directories(cad_user PUBLIC "${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/brlcad") endif(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") diff --git a/regress/user/cad_user.c b/regress/user/cad_user.c index 549dc58779d..15afb13d223 100644 --- a/regress/user/cad_user.c +++ b/regress/user/cad_user.c @@ -1,7 +1,7 @@ /* C A D _ U S E R . C * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/regress/weight/CMakeLists.txt b/regress/weight/CMakeLists.txt index 5cdb2a49977..671e26b4bc7 100644 --- a/regress/weight/CMakeLists.txt +++ b/regress/weight/CMakeLists.txt @@ -1,7 +1,7 @@ if (SH_EXEC AND TARGET mged) - add_test(NAME regress-weight COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/weight.sh" ${CMAKE_SOURCE_DIR}) + BRLCAD_ADD_TEST(NAME regress-weight COMMAND ${SH_EXEC} "${CMAKE_CURRENT_SOURCE_DIR}/weight.sh" ${CMAKE_SOURCE_DIR}) BRLCAD_REGRESSION_TEST(regress-weight "rtweight;mged" TEST_DEFINED) endif (SH_EXEC AND TARGET mged) diff --git a/regress/weight/weight.sh b/regress/weight/weight.sh index 8d2e89b44c1..6868e671327 100755 --- a/regress/weight/weight.sh +++ b/regress/weight/weight.sh @@ -2,7 +2,7 @@ # W E I G H T . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/cmp.sh b/sh/cmp.sh index 77895558644..c3c7ba9e4d7 100755 --- a/sh/cmp.sh +++ b/sh/cmp.sh @@ -2,7 +2,7 @@ # C M P . S H # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/conversion.sh b/sh/conversion.sh index 9f71e50280e..b9579233085 100755 --- a/sh/conversion.sh +++ b/sh/conversion.sh @@ -2,7 +2,7 @@ # C O N V E R S I O N . S H # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/copyright.sh b/sh/copyright.sh index e5a1cdf26cd..3dd24bb6017 100755 --- a/sh/copyright.sh +++ b/sh/copyright.sh @@ -2,7 +2,7 @@ # C O P Y R I G H T . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/elapsed.sh b/sh/elapsed.sh index deae5c9a925..5ccf929243e 100755 --- a/sh/elapsed.sh +++ b/sh/elapsed.sh @@ -2,7 +2,7 @@ # E L A P S E D . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/enumerate.sh b/sh/enumerate.sh index 2da07fcc2b9..b83441be189 100755 --- a/sh/enumerate.sh +++ b/sh/enumerate.sh @@ -2,7 +2,7 @@ # E N U M E R A T E . S H # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/footer.sh b/sh/footer.sh index c5609ca89d7..371c8b5cc31 100755 --- a/sh/footer.sh +++ b/sh/footer.sh @@ -2,7 +2,7 @@ # F O O T E R . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/fs2org.sh b/sh/fs2org.sh index ab0a07cc6a0..b696f117be5 100755 --- a/sh/fs2org.sh +++ b/sh/fs2org.sh @@ -2,7 +2,7 @@ # F S 2 O R G . S H # BRL-CAD # -# Copyright (c) 2016-2020 United States Government as represented by +# Copyright (c) 2016-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/header.sh b/sh/header.sh index e91f7258ef6..9b7e5e56c34 100755 --- a/sh/header.sh +++ b/sh/header.sh @@ -2,7 +2,7 @@ # H E A D E R . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/indent.sh b/sh/indent.sh index 9f710c34cbf..69346ba1696 100755 --- a/sh/indent.sh +++ b/sh/indent.sh @@ -2,7 +2,7 @@ # I N D E N T . S H # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/ios-icons.sh b/sh/ios-icons.sh index 754b76a5cc0..ef80ca77d19 100755 --- a/sh/ios-icons.sh +++ b/sh/ios-icons.sh @@ -2,7 +2,7 @@ # I O S - I C O N S # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/linkroot.sh b/sh/linkroot.sh index c663ee2e648..396452e04d9 100755 --- a/sh/linkroot.sh +++ b/sh/linkroot.sh @@ -2,7 +2,7 @@ # L I N K R O O T . S H # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/make_deb.sh b/sh/make_deb.sh index 22498e7d5c4..b661d10731c 100755 --- a/sh/make_deb.sh +++ b/sh/make_deb.sh @@ -2,7 +2,7 @@ # M A K E _ D E B . S H # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/make_dmg.sh b/sh/make_dmg.sh index 7da0ee870b5..e0051845b4e 100755 --- a/sh/make_dmg.sh +++ b/sh/make_dmg.sh @@ -2,7 +2,7 @@ # M A K E _ D M G . S H # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/make_rpm.sh b/sh/make_rpm.sh index 362d9557ef5..5909dfb2bef 100755 --- a/sh/make_rpm.sh +++ b/sh/make_rpm.sh @@ -2,7 +2,7 @@ # M A K E _ R P M . S H # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/news2tracker.sh b/sh/news2tracker.sh index 3776dbd0480..d74c385e925 100755 --- a/sh/news2tracker.sh +++ b/sh/news2tracker.sh @@ -2,7 +2,7 @@ # N E W S 2 T R A C K E R . S H # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/show.sh b/sh/show.sh index 394b9f55d81..85423417b5e 100755 --- a/sh/show.sh +++ b/sh/show.sh @@ -2,7 +2,7 @@ # S H O W . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/template.sh b/sh/template.sh index 79de374915c..3e231163d8e 100755 --- a/sh/template.sh +++ b/sh/template.sh @@ -1,7 +1,7 @@ # T E M P L A T E . S H # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/sh/ws.sh b/sh/ws.sh index 562238b61c7..d1bdf113477 100755 --- a/sh/ws.sh +++ b/sh/ws.sh @@ -2,7 +2,7 @@ # W S . S H # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/src/adrt/CMakeLists.txt b/src/adrt/CMakeLists.txt index 4e8f3a2b7fc..40cf2087045 100644 --- a/src/adrt/CMakeLists.txt +++ b/src/adrt/CMakeLists.txt @@ -42,7 +42,7 @@ set(LIBRENDER_SRCS ) BRLCAD_ADDLIB(librender "${LIBRENDER_SRCS}" "libgcv") set_target_properties(librender PROPERTIES VERSION 20.0.1 SOVERSION 20) -add_dependencies(librender libgcv_plugins) +add_dependencies(librender gcv_plugins) set(tie_HDRS adrt.h diff --git a/src/adrt/adrt.h b/src/adrt/adrt.h index fbb666a1447..a56f749606d 100644 --- a/src/adrt/adrt.h +++ b/src/adrt/adrt.h @@ -1,7 +1,7 @@ /* A D R T . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/adrt_struct.h b/src/adrt/adrt_struct.h index d25594812bc..f72dc817020 100644 --- a/src/adrt/adrt_struct.h +++ b/src/adrt/adrt_struct.h @@ -1,7 +1,7 @@ /* A D R T _ S T R U C T . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/isst.c b/src/adrt/isst.c index 0c512e856c5..48121d00f93 100644 --- a/src/adrt/isst.c +++ b/src/adrt/isst.c @@ -1,7 +1,7 @@ /* I S S T . C * BRL-CAD * - * Copyright (c) 2005-2020 United States Government as represented by + * Copyright (c) 2005-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -653,8 +653,8 @@ const char *fullname; argv++; argc--; tclcad_set_argv(interp, argc, argv); - isst_tcl = bu_brlcad_root("share/tclscripts/isst/isst.tcl", 1); Tcl_DStringInit(&temp); + isst_tcl = bu_dir(NULL, 0, BU_DIR_DATA, "tclscripts", "isst", "isst.tcl", NULL); fullname = Tcl_TranslateFileName(interp, isst_tcl, &temp); status = Tcl_EvalFile(interp, fullname); Tcl_DStringFree(&temp); diff --git a/src/adrt/isst.tcl b/src/adrt/isst.tcl index 7fdea42f3c4..8f44bfc0b5d 100755 --- a/src/adrt/isst.tcl +++ b/src/adrt/isst.tcl @@ -1,7 +1,7 @@ # I S S T . T C L # BRL-CAD # -# Copyright (c) 2016-2020 United States Government as represented by +# Copyright (c) 2016-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/camera.c b/src/adrt/librender/camera.c index cd7554012a1..8aa9664013c 100644 --- a/src/adrt/librender/camera.c +++ b/src/adrt/librender/camera.c @@ -1,7 +1,7 @@ /* C A M E R A . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/camera.h b/src/adrt/librender/camera.h index f032262e335..3a170395266 100644 --- a/src/adrt/librender/camera.h +++ b/src/adrt/librender/camera.h @@ -1,7 +1,7 @@ /* C A M E R A . H * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/component.c b/src/adrt/librender/component.c index 956137fd347..893cc52485b 100644 --- a/src/adrt/librender/component.c +++ b/src/adrt/librender/component.c @@ -1,7 +1,7 @@ /* C O M P O N E N T . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/cut.c b/src/adrt/librender/cut.c index 4b3216951b5..0c1e6a9f67d 100644 --- a/src/adrt/librender/cut.c +++ b/src/adrt/librender/cut.c @@ -1,7 +1,7 @@ /* C U T . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/depth.c b/src/adrt/librender/depth.c index 75b1d9c5287..3f88c4c3ff9 100644 --- a/src/adrt/librender/depth.c +++ b/src/adrt/librender/depth.c @@ -1,7 +1,7 @@ /* D E P T H . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/flat.c b/src/adrt/librender/flat.c index b7cc38bc2b7..9c716cc7ef4 100644 --- a/src/adrt/librender/flat.c +++ b/src/adrt/librender/flat.c @@ -1,7 +1,7 @@ /* F L A T . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/flos.c b/src/adrt/librender/flos.c index e65ccf44490..d2c98f183a9 100644 --- a/src/adrt/librender/flos.c +++ b/src/adrt/librender/flos.c @@ -1,7 +1,7 @@ /* F L O S . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/grid.c b/src/adrt/librender/grid.c index f5e53d7309f..6ce6f083bea 100644 --- a/src/adrt/librender/grid.c +++ b/src/adrt/librender/grid.c @@ -1,7 +1,7 @@ /* G R I D . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/hit.c b/src/adrt/librender/hit.c index ecd7f3d48f2..f34e009901c 100644 --- a/src/adrt/librender/hit.c +++ b/src/adrt/librender/hit.c @@ -1,7 +1,7 @@ /* H I T . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/normal.c b/src/adrt/librender/normal.c index ffb8f571092..e7aca7a8e65 100644 --- a/src/adrt/librender/normal.c +++ b/src/adrt/librender/normal.c @@ -1,7 +1,7 @@ /* N O R M A L . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/path.c b/src/adrt/librender/path.c index a3d7c81ac66..a8662f68f1e 100644 --- a/src/adrt/librender/path.c +++ b/src/adrt/librender/path.c @@ -1,7 +1,7 @@ /* P A T H . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/phong.c b/src/adrt/librender/phong.c index e5de982b853..08b7e22820d 100644 --- a/src/adrt/librender/phong.c +++ b/src/adrt/librender/phong.c @@ -1,7 +1,7 @@ /* P H O N G . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/render.h b/src/adrt/librender/render.h index 6e4775047df..569296614d4 100644 --- a/src/adrt/librender/render.h +++ b/src/adrt/librender/render.h @@ -1,7 +1,7 @@ /* R E N D E R . H * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/render_internal.h b/src/adrt/librender/render_internal.h index ea0b8df2673..f04ee354c5d 100644 --- a/src/adrt/librender/render_internal.h +++ b/src/adrt/librender/render_internal.h @@ -1,7 +1,7 @@ /* R E N D E R _ I N T E R N A L . H * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/render_util.c b/src/adrt/librender/render_util.c index cdd1395b08c..58a1c501358 100644 --- a/src/adrt/librender/render_util.c +++ b/src/adrt/librender/render_util.c @@ -1,7 +1,7 @@ /* R E N D E R _ U T I L . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/render_util.h b/src/adrt/librender/render_util.h index 98e1b0dc008..5136efdcee2 100644 --- a/src/adrt/librender/render_util.h +++ b/src/adrt/librender/render_util.h @@ -1,7 +1,7 @@ /* R E N D E R _ U T I L . H * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/spall.c b/src/adrt/librender/spall.c index 156b82688d5..a157807a18a 100644 --- a/src/adrt/librender/spall.c +++ b/src/adrt/librender/spall.c @@ -1,7 +1,7 @@ /* S P A L L . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/surfel.c b/src/adrt/librender/surfel.c index f3d54c0146e..a045d875efd 100644 --- a/src/adrt/librender/surfel.c +++ b/src/adrt/librender/surfel.c @@ -1,7 +1,7 @@ /* S U R F E L . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture.h b/src/adrt/librender/texture.h index b97f59e5f6b..9f8d08c7772 100644 --- a/src/adrt/librender/texture.h +++ b/src/adrt/librender/texture.h @@ -1,7 +1,7 @@ /* T E X T U R E . H * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_blend.c b/src/adrt/librender/texture_blend.c index 2ed6de156cf..74b96a37f21 100644 --- a/src/adrt/librender/texture_blend.c +++ b/src/adrt/librender/texture_blend.c @@ -1,7 +1,7 @@ /* T E X T U R E _ B L E N D . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_bump.c b/src/adrt/librender/texture_bump.c index 43e532bcc10..f7006e8fbb1 100644 --- a/src/adrt/librender/texture_bump.c +++ b/src/adrt/librender/texture_bump.c @@ -1,7 +1,7 @@ /* T E X T U R E _ B U M P . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_camo.c b/src/adrt/librender/texture_camo.c index b1a10fcadd3..3660af8fe93 100644 --- a/src/adrt/librender/texture_camo.c +++ b/src/adrt/librender/texture_camo.c @@ -1,7 +1,7 @@ /* T E X T U R E _ C A M O . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_checker.c b/src/adrt/librender/texture_checker.c index 0a27499fdd1..34cd91ae981 100644 --- a/src/adrt/librender/texture_checker.c +++ b/src/adrt/librender/texture_checker.c @@ -1,7 +1,7 @@ /* T E X T U R E _ C H E C K E R . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_clouds.c b/src/adrt/librender/texture_clouds.c index 28ef77fbc55..e67e01e618c 100644 --- a/src/adrt/librender/texture_clouds.c +++ b/src/adrt/librender/texture_clouds.c @@ -1,7 +1,7 @@ /* T E X T U R E _ C L O U D S . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_gradient.c b/src/adrt/librender/texture_gradient.c index deca5d196ef..3996b1653bb 100644 --- a/src/adrt/librender/texture_gradient.c +++ b/src/adrt/librender/texture_gradient.c @@ -1,7 +1,7 @@ /* T E X T U R E _ G R A D I E N T . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_image.c b/src/adrt/librender/texture_image.c index a6e61e0191e..e131cc61ac5 100644 --- a/src/adrt/librender/texture_image.c +++ b/src/adrt/librender/texture_image.c @@ -1,7 +1,7 @@ /* T E X T U R E _ I M A G E . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_internal.h b/src/adrt/librender/texture_internal.h index 4b3e820fee4..453cd2e5c1d 100644 --- a/src/adrt/librender/texture_internal.h +++ b/src/adrt/librender/texture_internal.h @@ -1,7 +1,7 @@ /* T E X T U R E _ I N T E R N A L . H * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_mix.c b/src/adrt/librender/texture_mix.c index e1242c96296..51d77d6332c 100644 --- a/src/adrt/librender/texture_mix.c +++ b/src/adrt/librender/texture_mix.c @@ -1,7 +1,7 @@ /* T E X T U R E _ M I X . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_perlin.c b/src/adrt/librender/texture_perlin.c index a293b59eecd..ae36363b41d 100644 --- a/src/adrt/librender/texture_perlin.c +++ b/src/adrt/librender/texture_perlin.c @@ -1,7 +1,7 @@ /* T E X T U R E _ P E R L I N . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/librender/texture_stack.c b/src/adrt/librender/texture_stack.c index 345aa9982fa..3e4284af4e2 100644 --- a/src/adrt/librender/texture_stack.c +++ b/src/adrt/librender/texture_stack.c @@ -1,7 +1,7 @@ /* T E X T U R E _ S T A C K . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/load.c b/src/adrt/load.c index 1db1ea62543..9eec1340fd7 100644 --- a/src/adrt/load.c +++ b/src/adrt/load.c @@ -1,7 +1,7 @@ /* L O A D . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/load.h b/src/adrt/load.h index 6a34fc1b65c..fc9716e6ea7 100644 --- a/src/adrt/load.h +++ b/src/adrt/load.h @@ -1,7 +1,7 @@ /* L O A D . H * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/load_g.c b/src/adrt/load_g.c index f09ac697cf3..ff939074d5f 100644 --- a/src/adrt/load_g.c +++ b/src/adrt/load_g.c @@ -1,7 +1,7 @@ /* L O A D _ G . C * BRL-CAD / ADRT * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/master/compnet.c b/src/adrt/master/compnet.c index 666b571f8ba..c1cb8949f50 100644 --- a/src/adrt/master/compnet.c +++ b/src/adrt/master/compnet.c @@ -1,7 +1,7 @@ /* C O M P N E T . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/master/compnet.h b/src/adrt/master/compnet.h index 016e336dca5..7c5645b822f 100644 --- a/src/adrt/master/compnet.h +++ b/src/adrt/master/compnet.h @@ -1,7 +1,7 @@ /* C O M P N E T . H * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/master/dispatcher.c b/src/adrt/master/dispatcher.c index 7335f8db6b6..a8b832213fe 100644 --- a/src/adrt/master/dispatcher.c +++ b/src/adrt/master/dispatcher.c @@ -1,7 +1,7 @@ /* D I S P A T C H E R . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/master/dispatcher.h b/src/adrt/master/dispatcher.h index f1ff98690ab..36f1f333120 100644 --- a/src/adrt/master/dispatcher.h +++ b/src/adrt/master/dispatcher.h @@ -1,7 +1,7 @@ /* D I S P A T C H E R . H * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/master/master.c b/src/adrt/master/master.c index 3371bae282e..6c6296ced20 100644 --- a/src/adrt/master/master.c +++ b/src/adrt/master/master.c @@ -1,7 +1,7 @@ /* M A S T E R . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/master/master.h b/src/adrt/master/master.h index 7d9a33f7cf7..ed950f32aba 100644 --- a/src/adrt/master/master.h +++ b/src/adrt/master/master.h @@ -1,7 +1,7 @@ /* M A S T E R . H * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/master/tienet_master.c b/src/adrt/master/tienet_master.c index e926406fdac..24aca26ed3e 100644 --- a/src/adrt/master/tienet_master.c +++ b/src/adrt/master/tienet_master.c @@ -1,7 +1,7 @@ /* T I E N E T _ M A S T E R . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/master/tienet_master.h b/src/adrt/master/tienet_master.h index 740b3a68801..843866012dd 100644 --- a/src/adrt/master/tienet_master.h +++ b/src/adrt/master/tienet_master.h @@ -1,7 +1,7 @@ /* T I E N E T _ M A S T E R . H * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/slave/slave.c b/src/adrt/slave/slave.c index 4e271b5269e..49e07003487 100644 --- a/src/adrt/slave/slave.c +++ b/src/adrt/slave/slave.c @@ -1,7 +1,7 @@ /* S L A V E . C * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/slave/slave.h b/src/adrt/slave/slave.h index 859ce715a09..437b6660ecc 100644 --- a/src/adrt/slave/slave.h +++ b/src/adrt/slave/slave.h @@ -1,7 +1,7 @@ /* S L A V E . H * BRL-CAD / ADRT * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/slave/tienet_slave.c b/src/adrt/slave/tienet_slave.c index 10f925e9db4..c504d060355 100644 --- a/src/adrt/slave/tienet_slave.c +++ b/src/adrt/slave/tienet_slave.c @@ -1,7 +1,7 @@ /* T I E N E T _ S L A V E . C * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/slave/tienet_slave.h b/src/adrt/slave/tienet_slave.h index da5bcade7b3..d47395db33b 100644 --- a/src/adrt/slave/tienet_slave.h +++ b/src/adrt/slave/tienet_slave.h @@ -1,7 +1,7 @@ /* T I E N E T _ S L A V E . H * BRL-CAD / ADRT * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/tienet.c b/src/adrt/tienet.c index c166fd4dbf9..d3273a2227e 100644 --- a/src/adrt/tienet.c +++ b/src/adrt/tienet.c @@ -1,7 +1,7 @@ /* T I E N E T . C * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/adrt/tienet.h b/src/adrt/tienet.h index 3d7e3cc035a..338c16b8f02 100644 --- a/src/adrt/tienet.h +++ b/src/adrt/tienet.h @@ -1,7 +1,7 @@ /* T I E N E T . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/archer/CMakeLists.txt b/src/archer/CMakeLists.txt index 30f6fa30537..e7d4fad7727 100644 --- a/src/archer/CMakeLists.txt +++ b/src/archer/CMakeLists.txt @@ -16,7 +16,7 @@ BRLCAD_ADDDATA(archer_launch.tcl tclscripts/archer) # If/when we add MGED's ability to work in "classic" mode, Archer will have # to be built as a non-GUI application (or we'll have to build two executables) if(BRLCAD_ENABLE_TK) - set(archer_libs libtclcad libbu ${ITCL_LIBRARY} ${ITK_LIBRARY} ${TCL_LIBRARY} ${IMM32_LIBRARY} ${COMCTL32_LIBRARY}) + set(archer_libs libtclcad libbu ${TCL_LIBRARY} ${IMM32_LIBRARY} ${COMCTL32_LIBRARY}) set(archer_srcs archer.c) if (HAVE_WINDOWS_H) # To associate an icon with the application for Windows (needed @@ -40,6 +40,7 @@ if(BRLCAD_ENABLE_TK) set_property(INSTALL "${BIN_DIR}/$" PROPERTY CPACK_DESKTOP_SHORTCUTS "Archer ${BRLCAD_VERSION}" ) + endif(BRLCAD_ENABLE_TK) diff --git a/src/archer/archer.c b/src/archer/archer.c index 367665bb654..013749e92b2 100644 --- a/src/archer/archer.c +++ b/src/archer/archer.c @@ -1,7 +1,7 @@ /* A R C H E R . C * BRL-CAD * - * Copyright (c) 2005-2020 United States Government as represented by + * Copyright (c) 2005-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -22,6 +22,10 @@ #include +#ifdef HAVE_WINDOWS_H +# include /* For chdir */ +#endif + #include "bresource.h" #include "bnetwork.h" #include "bio.h" @@ -66,6 +70,17 @@ main(int argc, const char **argv) /* initialize progname for run-tim resource finding */ bu_setprogname(argv[0]); + + /* Change the working directory to BU_DIR_HOME if we are invoking + * without any arguments. */ + if (argc == 1) { + const char *homed = bu_dir(NULL, 0, BU_DIR_HOME, NULL); + if (homed && chdir(homed)) { + bu_exit(1, "Failed to change working directory to \"%s\" ", homed); + } + } + + /* initialize Tcl args */ bu_vls_sprintf(&tcl_cmd, "set argv0 %s", argv[0]); (void)Tcl_Eval(interp, bu_vls_addr(&tcl_cmd)); bu_vls_sprintf(&tcl_cmd, "set ::no_bwish 1"); @@ -95,7 +110,7 @@ main(int argc, const char **argv) } bu_vls_free(&tlog); - archer_tcl = bu_brlcad_root("share/tclscripts/archer/archer_launch.tcl", 1); + archer_tcl = bu_dir(NULL, 0, BU_DIR_DATA, "tclscripts", "archer", "archer_launch.tcl", NULL); Tcl_DStringInit(&temp); fullname = Tcl_TranslateFileName(interp, archer_tcl, &temp); status = Tcl_EvalFile(interp, fullname); diff --git a/src/archer/archer_launch.tcl b/src/archer/archer_launch.tcl index e51c91c17eb..ded7f774743 100755 --- a/src/archer/archer_launch.tcl +++ b/src/archer/archer_launch.tcl @@ -1,7 +1,7 @@ # A R C H E R _ I N I T . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -39,7 +39,7 @@ if {! [info exists argv0] } { # already exists in the configured install path, all tcl scripts # will be pulled from the installed location and not the local # build location. This is an inevitable consequence of how -# bu_brlcad_root has to work (there are security implication to +# BRL-CAD's path lookup has to work (there are security implication to # NOT using the installed files if they are present) but it also # makes for a subtle and vexing problem if a developer is trying # to tweak tcl scripts in the source tree and forgets that @@ -48,7 +48,7 @@ if {! [info exists argv0] } { # installed file will be loaded instead of the edited version. # Warn if it looks like this situation is occurring by checking # the root path against the argv0 path. -set check_root_dir [file normalize [bu_brlcad_root [bu_brlcad_dir bin]]] +set check_root_dir [file normalize [bu_dir bin]] set check_bin_dir [file dirname [file normalize $argv0]] # Because there are conditions where we don't know our argv0 full path @@ -57,20 +57,12 @@ set check_bin_dir [file dirname [file normalize $argv0]] if {[file exists [file normalize $argv0]]} { set dir_same [string compare $check_root_dir $check_bin_dir] if {!$dir_same == 0} { - puts "WARNING - bu_brlcad_root is set to [file dirname $check_root_dir], but binary being run is located in [file dirname $check_bin_dir]. This probably means you are running [file tail $argv0] from a non-install directory with BRL-CAD already present in [file dirname $check_root_dir] - be aware that .tcl files from [file dirname $check_root_dir] will be loaded INSTEAD OF local files. Tcl script changes made to source files for testing purposes will not be loaded, even though [file tail $argv0] will most likely 'work'. To test local changes, either clear [file dirname $check_root_dir], specify a different install prefix (i.e. a directory *without* BRL-CAD installed) while building, or manually set the BRLCAD_ROOT environment variable." + puts "WARNING - bu_dir's bin value is set to [file dirname $check_root_dir], but binary being run is located in [file dirname $check_bin_dir]. This probably means you are running [file tail $argv0] from a non-install directory with BRL-CAD already present in [file dirname $check_root_dir] - be aware that .tcl files from [file dirname $check_root_dir] will be loaded INSTEAD OF local files. Tcl script changes made to source files for testing purposes will not be loaded, even though [file tail $argv0] will most likely 'work'. To test local changes, either clear [file dirname $check_root_dir], specify a different install prefix (i.e. a directory *without* BRL-CAD installed) while building, or manually set the BRLCAD_ROOT environment variable." } } # Itk's default class doesn't keep the menu, but Archer needs it - redefine itk:Toplevel -set itk_file [file join [bu_brlcad_root "share/tclscripts"] archer itk_redefines.tcl] -if { ![file exists $itk_file] } { - #try src tree - set itk_file [file join [bu_brlcad_root "src"] tclscripts archer itk_redefines.tcl] - if { ![file exists $itk_file] } { - #try local relative - set itk_file [file join src tclscripts archer itk_redefines.tcl] - } -} +set itk_file [file join [bu_dir data] "tclscripts" archer itk_redefines.tcl] source $itk_file # Set ttk theme @@ -150,16 +142,7 @@ proc createSplashScreen {} { set useImage 1 if {$useImage} { - # try installed, uninstalled - set imgfile [file join [bu_brlcad_root "share/tclscripts"] archer images aboutArcher.png] - if { ![file exists $imgfile] } { - # try src tree - set imgfile [file join [bu_brlcad_root "src"] archer images aboutArcher.png] - if { [!file exists $imgfile] } { - # try local relative - set imgfile [file join tclscripts archer images aboutArcher.png] - } - } + set imgfile [file join [bu_dir data] tclscripts archer images aboutArcher.png] set image [image create photo -file $imgfile] set ::ArcherCore::splash [Splash .splash -image $image] } else { @@ -241,7 +224,7 @@ proc main {} { wm title $::ArcherCore::application "Archer $brlcad_version" if {$tcl_platform(os) == "Windows NT"} { wm iconbitmap $::ArcherCore::application -default \ - [file join [bu_brlcad_root "share/icons"] archer.ico] + [file join [bu_dir data] icons archer.ico] } set size [wm maxsize $::ArcherCore::application] set w [lindex $size 0] @@ -260,7 +243,7 @@ proc main {} { wm title . "Archer $brlcad_version" if {$tcl_platform(os) == "Windows NT"} { wm iconbitmap . -default \ - [file join [bu_brlcad_root "share/html"] manuals archer archer.ico] + [file join [bu_dir data] html manuals archer archer.ico] } set ::ArcherCore::application [Archer .\#auto] set size [wm maxsize .] diff --git a/src/archer/plugins/Utility/attrGroupsDisplayUtilityP.tcl b/src/archer/plugins/Utility/attrGroupsDisplayUtilityP.tcl index bca67ac1824..9776d02d215 100755 --- a/src/archer/plugins/Utility/attrGroupsDisplayUtilityP.tcl +++ b/src/archer/plugins/Utility/attrGroupsDisplayUtilityP.tcl @@ -1,7 +1,7 @@ # A T T R G R O U P S D I S P L A Y U T I L I T Y P . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -23,14 +23,8 @@ # This is a script for loading/registering the attribute groups display utility. # -set brlcadDataPath [bu_brlcad_root "share/plugins"] -# puts "pwd is [pwd], path is $brlcadDataPath" +set brlcadDataPath [file join [bu_dir data] plugins] set filename [file join $brlcadDataPath archer Utility attrGroupsDisplayUtilityP AttrGroupsDisplayUtilityP.tcl] -if { ![file exists $filename] } { - # non-tclscript resource, look in the source invocation path - set brlcadDataPath [bu_brlcad_root "src"] - set filename [file join $brlcadDataPath archer plugins Utility attrGroupsDisplayUtilityP AttrGroupsDisplayUtilityP.tcl] -} if { ![file exists $filename] } { puts "Could not load the AttrGroupsDisplayUtilityP plugin, skipping $filename" return diff --git a/src/archer/plugins/Utility/attrGroupsDisplayUtilityP/AttrGroupsDisplayUtilityP.tcl b/src/archer/plugins/Utility/attrGroupsDisplayUtilityP/AttrGroupsDisplayUtilityP.tcl index 3028fcffba1..da720518a2a 100755 --- a/src/archer/plugins/Utility/attrGroupsDisplayUtilityP/AttrGroupsDisplayUtilityP.tcl +++ b/src/archer/plugins/Utility/attrGroupsDisplayUtilityP/AttrGroupsDisplayUtilityP.tcl @@ -1,7 +1,7 @@ # A T T R G R O U P S D I S P L A Y U T I L I T Y P . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/archer/plugins/Utility/botUtilityP.tcl b/src/archer/plugins/Utility/botUtilityP.tcl index 2c91caaeca0..ff93bb051f7 100755 --- a/src/archer/plugins/Utility/botUtilityP.tcl +++ b/src/archer/plugins/Utility/botUtilityP.tcl @@ -1,7 +1,7 @@ # B O T U T I L I T Y P. T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -23,11 +23,7 @@ # This is a script for loading/registering the bot editor utility. # -set filename [file join [bu_brlcad_root "share/plugins"] archer Utility botUtilityP BotUtilityP.tcl] -if { ![file exists $filename] } { - # non-tclscript resource, look in the source invocation path - set filename [file join [bu_brlcad_root "src"] archer plugins Utility botUtilityP BotUtilityP.tcl] -} +set filename [file join [bu_dir data] plugins archer Utility botUtilityP BotUtilityP.tcl] if { ![file exists $filename] } { puts "Could not load the BotUtilityP plugin, skipping $filename" return diff --git a/src/archer/plugins/Utility/botUtilityP/BotUtilityP.tcl b/src/archer/plugins/Utility/botUtilityP/BotUtilityP.tcl index d890450c467..293cea7aa76 100755 --- a/src/archer/plugins/Utility/botUtilityP/BotUtilityP.tcl +++ b/src/archer/plugins/Utility/botUtilityP/BotUtilityP.tcl @@ -1,7 +1,7 @@ # B O T U T I L I T Y P . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/archer/plugins/Utility/lodUtilityP.tcl b/src/archer/plugins/Utility/lodUtilityP.tcl index 1c4367f5da8..7a478eb435f 100644 --- a/src/archer/plugins/Utility/lodUtilityP.tcl +++ b/src/archer/plugins/Utility/lodUtilityP.tcl @@ -1,7 +1,7 @@ # L O D U T I L I T Y P . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -24,11 +24,7 @@ # configuration utility. # -set filename [file join [bu_brlcad_root "share/plugins"] archer Utility lodUtilityP LODUtilityP.tcl] -if { ![file exists $filename] } { - # non-tclscript resource, look in the source invocation path - set filename [file join [bu_brlcad_root "src"] archer plugins Utility lodUtilityP LODUtilityP.tcl] -} +set filename [file join [bu_dir data] plugins archer Utility lodUtilityP LODUtilityP.tcl] if { ![file exists $filename] } { puts "Could not load the LODUtilityP plugin, skipping $filename" return diff --git a/src/archer/plugins/Utility/lodUtilityP/LODUtilityP.tcl b/src/archer/plugins/Utility/lodUtilityP/LODUtilityP.tcl index 1e5fce39a97..c2f99f4cf37 100644 --- a/src/archer/plugins/Utility/lodUtilityP/LODUtilityP.tcl +++ b/src/archer/plugins/Utility/lodUtilityP/LODUtilityP.tcl @@ -1,7 +1,7 @@ # L O D U T I L I T Y P . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/archer/plugins/Wizards/humanwizard.tcl b/src/archer/plugins/Wizards/humanwizard.tcl index cb0a3c06955..0bbb7e103ce 100755 --- a/src/archer/plugins/Wizards/humanwizard.tcl +++ b/src/archer/plugins/Wizards/humanwizard.tcl @@ -1,7 +1,7 @@ # H U M A N W I Z A R D . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -23,14 +23,9 @@ # This is a script for loading/registering the human wizard. # -set brlcadDataPath [bu_brlcad_root "share/plugins"] +set brlcadDataPath [file join [bu_dir data] plugins] # puts "pwd is [pwd], path is $brlcadDataPath" set filename [file join $brlcadDataPath archer Wizards humanwizard HumanWizard.tcl] -if { ![file exists $filename] } { - # non-tclscript resource, look in the source invocation path - set brlcadDataPath [bu_brlcad_root "src"] - set filename [file join $brlcadDataPath archer plugins Wizards humanwizard HumanWizard.tcl] -} if { ![file exists $filename] } { puts "Could not load the HumanWizard plugin, skipping $filename" return diff --git a/src/archer/plugins/Wizards/humanwizard/HumanWizard.tcl b/src/archer/plugins/Wizards/humanwizard/HumanWizard.tcl index e2fafe7bdea..4562454ea45 100755 --- a/src/archer/plugins/Wizards/humanwizard/HumanWizard.tcl +++ b/src/archer/plugins/Wizards/humanwizard/HumanWizard.tcl @@ -1,7 +1,7 @@ # H U M A N W I Z A R D . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/archer/plugins/Wizards/tankwizard.tcl b/src/archer/plugins/Wizards/tankwizard.tcl index a5928219bb3..3bac6a0faa9 100755 --- a/src/archer/plugins/Wizards/tankwizard.tcl +++ b/src/archer/plugins/Wizards/tankwizard.tcl @@ -1,7 +1,7 @@ # T A N K W I Z A R D . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -26,14 +26,9 @@ # This is a script for loading/registering the tank wizard. # -set brlcadDataPath [bu_brlcad_root "share/plugins"] +set brlcadDataPath [file join [bu_dir data] plugins] # puts "pwd is [pwd], path is $brlcadDataPath" set filename [file join $brlcadDataPath archer Wizards tankwizard TankWizard.tcl] -if { ![file exists $filename] } { - # non-tclscript resource, look in the source invocation path - set brlcadDataPath [bu_brlcad_root "src"] - set filename [file join $brlcadDataPath archer plugins Wizards tankwizard TankWizard.tcl] -} if { ![file exists $filename] } { puts "Could not load the TankWizard plugin, skipping $filename" return diff --git a/src/archer/plugins/Wizards/tankwizard/TankWizard.tcl b/src/archer/plugins/Wizards/tankwizard/TankWizard.tcl index db13cf2941a..6cb0e58d032 100755 --- a/src/archer/plugins/Wizards/tankwizard/TankWizard.tcl +++ b/src/archer/plugins/Wizards/tankwizard/TankWizard.tcl @@ -1,7 +1,7 @@ # T A N K W I Z A R D . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/archer/plugins/Wizards/tirewizard.tcl b/src/archer/plugins/Wizards/tirewizard.tcl index dd71ed3cb71..b53c5436723 100755 --- a/src/archer/plugins/Wizards/tirewizard.tcl +++ b/src/archer/plugins/Wizards/tirewizard.tcl @@ -1,7 +1,7 @@ # T I R E W I Z A R D . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -23,14 +23,9 @@ # This is a script for loading/registering the tire wizard. # -set brlcadDataPath [bu_brlcad_root "share/plugins"] +set brlcadDataPath [file join [bu_dir data] plugins] # puts "pwd is [pwd], path is $brlcadDataPath" set filename [file join $brlcadDataPath archer Wizards tirewizard TireWizard.tcl] -if { ![file exists $filename] } { - # non-tclscript resource, look in the source invocation path - set brlcadDataPath [bu_brlcad_root "src"] - set filename [file join $brlcadDataPath archer plugins Wizards tirewizard TireWizard.tcl] -} if { ![file exists $filename] } { puts "Could not load the TireWizard plugin, skipping $filename" return diff --git a/src/archer/plugins/Wizards/tirewizard/TireWizard.tcl b/src/archer/plugins/Wizards/tirewizard/TireWizard.tcl index b4d504db876..f8c175e929b 100755 --- a/src/archer/plugins/Wizards/tirewizard/TireWizard.tcl +++ b/src/archer/plugins/Wizards/tirewizard/TireWizard.tcl @@ -1,7 +1,7 @@ # T I R E W I Z A R D . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/art/CMakeLists.txt b/src/art/CMakeLists.txt index 4059f1a28b9..532fd76e6f0 100644 --- a/src/art/CMakeLists.txt +++ b/src/art/CMakeLists.txt @@ -9,7 +9,7 @@ list(REMOVE_DUPLICATES ART_INCLUDE_DIRS) BRLCAD_INCLUDE_DIRS(ART_INCLUDE_DIRS) set(RT_STD_LIBS - ${CMAKE_THREAD_LIBS_INIT} + Threads::Threads librt libnmg libdm diff --git a/src/art/art.cpp b/src/art/art.cpp index 21934a0f38d..301edef8377 100644 --- a/src/art/art.cpp +++ b/src/art/art.cpp @@ -1,7 +1,7 @@ /* A R T . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -85,14 +85,15 @@ # pragma GCC diagnostic ignored "-Wfloat-equal" # pragma GCC diagnostic ignored "-Wunused-parameter" # pragma GCC diagnostic ignored "-Wpedantic" -# pragma GCC diagnostic ignored "-Wclass-memaccess" # pragma GCC diagnostic ignored "-Wignored-qualifiers" +# if (__GNUC__ >= 8) +# pragma GCC diagnostic ignored "-Wclass-memaccess" +# endif #endif #if defined(__clang__) # pragma clang diagnostic ignored "-Wfloat-equal" # pragma clang diagnostic ignored "-Wunused-parameter" # pragma clang diagnostic ignored "-Wpedantic" -# pragma clang diagnostic ignored "-Wclass-memaccess" # pragma clang diagnostic ignored "-Wignored-qualifiers" #endif diff --git a/src/art/art.h b/src/art/art.h index 4c968b6cb4c..e9e917f2d84 100644 --- a/src/art/art.h +++ b/src/art/art.h @@ -1,7 +1,7 @@ /* A R T . H * BRL-CAD * - * Copyright (c) 2004-2019 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -74,14 +74,15 @@ # pragma GCC diagnostic ignored "-Wfloat-equal" # pragma GCC diagnostic ignored "-Wunused-parameter" # pragma GCC diagnostic ignored "-Wpedantic" -# pragma GCC diagnostic ignored "-Wclass-memaccess" # pragma GCC diagnostic ignored "-Wignored-qualifiers" +# if (__GNUC__ >= 8) +# pragma GCC diagnostic ignored "-Wclass-memaccess" +# endif #endif #if defined(__clang__) # pragma clang diagnostic ignored "-Wfloat-equal" # pragma clang diagnostic ignored "-Wunused-parameter" # pragma clang diagnostic ignored "-Wpedantic" -# pragma clang diagnostic ignored "-Wclass-memaccess" # pragma clang diagnostic ignored "-Wignored-qualifiers" #endif diff --git a/src/art/brlcadplugin.cpp b/src/art/brlcadplugin.cpp index 0aec9999442..4891aa737fe 100644 --- a/src/art/brlcadplugin.cpp +++ b/src/art/brlcadplugin.cpp @@ -1,7 +1,7 @@ /* A R T P L U G I N . C P P * BRL-CAD * - * Copyright (c) 2004-2019 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -74,14 +74,15 @@ # pragma GCC diagnostic ignored "-Wfloat-equal" # pragma GCC diagnostic ignored "-Wunused-parameter" # pragma GCC diagnostic ignored "-Wpedantic" -# pragma GCC diagnostic ignored "-Wclass-memaccess" # pragma GCC diagnostic ignored "-Wignored-qualifiers" +# if (__GNUC__ >= 8) +# pragma GCC diagnostic ignored "-Wclass-memaccess" +# endif #endif #if defined(__clang__) # pragma clang diagnostic ignored "-Wfloat-equal" # pragma clang diagnostic ignored "-Wunused-parameter" # pragma clang diagnostic ignored "-Wpedantic" -# pragma clang diagnostic ignored "-Wclass-memaccess" # pragma clang diagnostic ignored "-Wignored-qualifiers" #endif diff --git a/src/art/brlcadplugin.h b/src/art/brlcadplugin.h index 24f8ca7416f..ef3aec624b1 100644 --- a/src/art/brlcadplugin.h +++ b/src/art/brlcadplugin.h @@ -1,7 +1,7 @@ /* B R L C A D P L U G I N . H * BRL-CAD * - * Copyright (c) 2004-2019 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/brlman/brlman.c b/src/brlman/brlman.c index a01bb70fc66..5dd9999d5d0 100644 --- a/src/brlman/brlman.c +++ b/src/brlman/brlman.c @@ -1,7 +1,7 @@ /* B R L M A N . C * BRL-CAD * - * Copyright (c) 2005-2020 United States Government as represented by + * Copyright (c) 2005-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -421,11 +421,11 @@ BRLMAN_MAIN( (void)Tcl_Eval(interp, bu_vls_addr(&tcl_cmd)); } else { - bu_vls_sprintf(&tcl_cmd, "set ::data_dir %s/html", bu_brlcad_dir("doc", 1)); + bu_vls_sprintf(&tcl_cmd, "set ::data_dir %s/html", bu_dir(NULL, 0, BU_DIR_DOC, NULL)); (void)Tcl_Eval(interp, bu_vls_addr(&tcl_cmd)); } - brlman_tcl = bu_brlcad_root("share/tclscripts/brlman/brlman.tcl", 1); + brlman_tcl = bu_dir(NULL, 0, BU_DIR_DATA, "tclscripts", "brlman", "brlman.tcl", NULL); Tcl_DStringInit(&temp); fullname = Tcl_TranslateFileName(interp, brlman_tcl, &temp); status = Tcl_EvalFile(interp, fullname); diff --git a/src/brlman/brlman.tcl b/src/brlman/brlman.tcl index dd9c001a5d0..f5b6d89e8f3 100755 --- a/src/brlman/brlman.tcl +++ b/src/brlman/brlman.tcl @@ -2,7 +2,7 @@ # B R L M A N . T C L # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -42,7 +42,7 @@ bind $w ::exit if {[info exists ::man_file]} { $w select $man_file } else { - set intro_file [file join [bu_brlcad_root "share/$::data_dir"] mann/Introduction.html] + set intro_file [file join [bu_dir doc] html mann Introduction.html] $w loadPage $intro_file } diff --git a/src/burst/burst.cpp b/src/burst/burst.cpp index 8cd8c1b890c..9ee2eb69e8c 100644 --- a/src/burst/burst.cpp +++ b/src/burst/burst.cpp @@ -1,7 +1,7 @@ /* B U R S T . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -1786,7 +1786,7 @@ main(int argc, const char **argv) if (argc == 0 || !argv) return -1; - /* Let bu_brlcad_root and friends know where we are */ + /* Let libbu know where we are */ bu_setprogname(argv[0]); /* Initialize */ diff --git a/src/burst/burst.h b/src/burst/burst.h index eeae6cadb2e..9e4ae7612cf 100644 --- a/src/burst/burst.h +++ b/src/burst/burst.h @@ -1,7 +1,7 @@ /* B U R S T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/grid.cpp b/src/burst/grid.cpp index cdeb4debb35..bbb6e86bbde 100644 --- a/src/burst/grid.cpp +++ b/src/burst/grid.cpp @@ -1,7 +1,7 @@ /* G R I D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/idents.cpp b/src/burst/idents.cpp index 9898e0bdc02..ac16986fb46 100644 --- a/src/burst/idents.cpp +++ b/src/burst/idents.cpp @@ -1,7 +1,7 @@ /* I D E N T S . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/Hm.c b/src/burst/old/Hm.c index cc929da4d6c..db326807a7e 100644 --- a/src/burst/old/Hm.c +++ b/src/burst/old/Hm.c @@ -1,7 +1,7 @@ /* H M . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/HmGetc.c b/src/burst/old/HmGetc.c index 91b9701b27b..f930663bf10 100644 --- a/src/burst/old/HmGetc.c +++ b/src/burst/old/HmGetc.c @@ -1,7 +1,7 @@ /* H M G E T C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/HmGlob.c b/src/burst/old/HmGlob.c index 0766e379c0f..73d329a8410 100644 --- a/src/burst/old/HmGlob.c +++ b/src/burst/old/HmGlob.c @@ -1,7 +1,7 @@ /* H M G L O B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/Mm.h b/src/burst/old/Mm.h index 7850641991a..9033d77f3e3 100644 --- a/src/burst/old/Mm.h +++ b/src/burst/old/Mm.h @@ -1,7 +1,7 @@ /* M M . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/Sc.c b/src/burst/old/Sc.c index b554ddd1022..5854f3044d6 100644 --- a/src/burst/old/Sc.c +++ b/src/burst/old/Sc.c @@ -1,7 +1,7 @@ /* S C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/Sc.h b/src/burst/old/Sc.h index aabfc595a0d..1d70d2e705e 100644 --- a/src/burst/old/Sc.h +++ b/src/burst/old/Sc.h @@ -1,7 +1,7 @@ /* S C . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/ascii.h b/src/burst/old/ascii.h index 21d5d60da9c..36cd910ce55 100644 --- a/src/burst/old/ascii.h +++ b/src/burst/old/ascii.h @@ -1,7 +1,7 @@ /* A S C I I . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/burst.c b/src/burst/old/burst.c index 0e0d1abcdb1..95b1d708a1b 100644 --- a/src/burst/old/burst.c +++ b/src/burst/old/burst.c @@ -1,7 +1,7 @@ /* B U R S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/burst.h b/src/burst/old/burst.h index 5568dea4a8c..fde1ca1e6d5 100644 --- a/src/burst/old/burst.h +++ b/src/burst/old/burst.h @@ -1,7 +1,7 @@ /* B U R S T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/error.c b/src/burst/old/error.c index db8c781135f..98b1388c0cb 100644 --- a/src/burst/old/error.c +++ b/src/burst/old/error.c @@ -1,7 +1,7 @@ /* E R R O R . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/extern.h b/src/burst/old/extern.h index 72aaa3f5066..91923c0d37e 100644 --- a/src/burst/old/extern.h +++ b/src/burst/old/extern.h @@ -1,7 +1,7 @@ /* E X T E R N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/fb.c b/src/burst/old/fb.c index 7424cba8a2f..274217921d0 100644 --- a/src/burst/old/fb.c +++ b/src/burst/old/fb.c @@ -1,7 +1,7 @@ /* F B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/glob.c b/src/burst/old/glob.c index aacc3ec788a..e94ec579691 100644 --- a/src/burst/old/glob.c +++ b/src/burst/old/glob.c @@ -1,7 +1,7 @@ /* G L O B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/grid.c b/src/burst/old/grid.c index 6dfe288234e..d608f3fdc9c 100644 --- a/src/burst/old/grid.c +++ b/src/burst/old/grid.c @@ -1,7 +1,7 @@ /* G R I D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/gridrotate.c b/src/burst/old/gridrotate.c index c3f58e843e4..81ff99ae2df 100644 --- a/src/burst/old/gridrotate.c +++ b/src/burst/old/gridrotate.c @@ -1,7 +1,7 @@ /* G R I D R O T A T E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/idents.c b/src/burst/old/idents.c index 1338fb8ce4a..c64ace199b4 100644 --- a/src/burst/old/idents.c +++ b/src/burst/old/idents.c @@ -1,7 +1,7 @@ /* I D E N T S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/paint.c b/src/burst/old/paint.c index 5d79db3dcd9..77d5535e9db 100644 --- a/src/burst/old/paint.c +++ b/src/burst/old/paint.c @@ -1,7 +1,7 @@ /* P A I N T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/plot.c b/src/burst/old/plot.c index ec623509ecd..d7785fd7e08 100644 --- a/src/burst/old/plot.c +++ b/src/burst/old/plot.c @@ -1,7 +1,7 @@ /* P L O T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/prnt.c b/src/burst/old/prnt.c index 391e25b3aad..2d336d781ec 100644 --- a/src/burst/old/prnt.c +++ b/src/burst/old/prnt.c @@ -1,7 +1,7 @@ /* P R N T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/trie.c b/src/burst/old/trie.c index a16e3abe5d7..246388bfa7b 100644 --- a/src/burst/old/trie.c +++ b/src/burst/old/trie.c @@ -1,7 +1,7 @@ /* T R I E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/old/ui.c b/src/burst/old/ui.c index 78266286e7c..b1e9a122aa0 100644 --- a/src/burst/old/ui.c +++ b/src/burst/old/ui.c @@ -1,7 +1,7 @@ /* U I . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/burst/paint.cpp b/src/burst/paint.cpp index ef93c4d9107..6a363c31489 100644 --- a/src/burst/paint.cpp +++ b/src/burst/paint.cpp @@ -1,7 +1,7 @@ /* P A I N T . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/bwish/CMakeLists.txt b/src/bwish/CMakeLists.txt index 1733e44ae0b..30111d62ff5 100644 --- a/src/bwish/CMakeLists.txt +++ b/src/bwish/CMakeLists.txt @@ -12,7 +12,7 @@ if(TARGET libtclcad) list(REMOVE_DUPLICATES BWISH_INCLUDE_DIRS) BRLCAD_INCLUDE_DIRS(BWISH_INCLUDE_DIRS) - set(btclsh_libs libtclcad libbu ${TCL_LIBRARY} ${ITCL_LIBRARY}) + set(btclsh_libs libtclcad libbu ${TCL_LIBRARY}) if(TARGET libtermio) set(btclsh_libs ${btclsh_libs} libtermio) @@ -28,7 +28,7 @@ if(TARGET libtclcad) # If we have Tk enabled, we want bwish too if(BRLCAD_ENABLE_TK) - set(bwish_libs libtclcad libbu ${TCL_LIBRARY} ${ITCL_LIBRARY} ${TK_LIBRARY} ${ITK_LIBRARY} ${IMM32_LIBRARY} ${COMCTL32_LIBRARY}) + set(bwish_libs libtclcad libbu ${TCL_LIBRARY} ${TK_LIBRARY} ${IMM32_LIBRARY} ${COMCTL32_LIBRARY}) if(TARGET libtermio) set(bwish_libs ${bwish_libs} libtermio) diff --git a/src/bwish/cmd.c b/src/bwish/cmd.c index 1ca6d1267a7..a27308b1458 100644 --- a/src/bwish/cmd.c +++ b/src/bwish/cmd.c @@ -1,7 +1,7 @@ /* C M D . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/bwish/input.c b/src/bwish/input.c index bbacd5cfe06..8beb606d4cd 100644 --- a/src/bwish/input.c +++ b/src/bwish/input.c @@ -1,7 +1,7 @@ /* I N P U T . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/bwish/main.c b/src/bwish/main.c index e9bd21fccc9..2baefd36370 100644 --- a/src/bwish/main.c +++ b/src/bwish/main.c @@ -1,7 +1,7 @@ /* M A I N . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/3dm/3dm-g.c b/src/conv/3dm/3dm-g.c index 719d636efce..fcaec55b418 100644 --- a/src/conv/3dm/3dm-g.c +++ b/src/conv/3dm/3dm-g.c @@ -1,7 +1,7 @@ /* 3 D M - G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/3dm/CMakeLists.txt b/src/conv/3dm/CMakeLists.txt index 10c838fda80..0996b17a69f 100644 --- a/src/conv/3dm/CMakeLists.txt +++ b/src/conv/3dm/CMakeLists.txt @@ -4,7 +4,7 @@ set(3DM_INCLUDE_DIRS BRLCAD_INCLUDE_DIRS(3DM_INCLUDE_DIRS) BRLCAD_ADDEXEC(3dm-g 3dm-g.c "libgcv") -add_dependencies(3dm-g libgcv_plugins) +add_dependencies(3dm-g gcv_plugins) CMAKEFILES(CMakeLists.txt) diff --git a/src/conv/CMakeLists.txt b/src/conv/CMakeLists.txt index 8c8b1bb96a1..83161168362 100644 --- a/src/conv/CMakeLists.txt +++ b/src/conv/CMakeLists.txt @@ -61,10 +61,10 @@ endif(BRLCAD_ENABLE_TCL) BRLCAD_ADDEXEC(g-dot g-dot.c "libged;libbu") BRLCAD_ADDEXEC(g-dxf dxf/g-dxf.c "librt;libgcv;libnmg;libbu") -add_dependencies(g-dxf libgcv_plugins) +add_dependencies(g-dxf gcv_plugins) BRLCAD_ADDEXEC(g-egg g-egg.c "libwdb;libgcv;libnmg") -add_dependencies(g-egg libgcv_plugins) +add_dependencies(g-egg gcv_plugins) BRLCAD_ADDEXEC(g-nff g-nff.c "libwdb;libnmg;${M_LIBRARY}") @@ -81,7 +81,7 @@ BRLCAD_ADDEXEC(off-g off/off-g.c "libwdb;librt;libnmg;libbu") BRLCAD_ADDEXEC(stl-g stl/stl-g.c "libwdb;librt;libbu;${WINSOCK_LIB}") BRLCAD_ADDEXEC(g-stl stl/g-stl.c "librt;libgcv;libnmg;libbu;${WINSOCK_LIB}") -add_dependencies(g-stl libgcv_plugins) +add_dependencies(g-stl gcv_plugins) BRLCAD_ADDEXEC(g4-g5 g4-g5.c "librt;libbu" NO_INSTALL) diff --git a/src/conv/asc/asc2dsp.c b/src/conv/asc/asc2dsp.c index 3ee9e30ea70..3bec35b9504 100644 --- a/src/conv/asc/asc2dsp.c +++ b/src/conv/asc/asc2dsp.c @@ -1,7 +1,7 @@ /* A S C 2 D S P . C * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/asc/asc2g.c b/src/conv/asc/asc2g.c index 70008f02cfa..64f0b5d8fdf 100644 --- a/src/conv/asc/asc2g.c +++ b/src/conv/asc/asc2g.c @@ -1,7 +1,7 @@ /* A S C 2 G . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -1572,6 +1572,8 @@ main(int argc, char *argv[]) if (!bu_vls_strncmp(&line, &str_title, 5) || !bu_vls_strncmp(&line, &str_put, 4)) { Tcl_Interp *interp; Tcl_Interp *safe_interp; + struct bu_vls msg = BU_VLS_INIT_ZERO; + int tret = 0; /* this is a Tcl script */ @@ -1580,7 +1582,11 @@ main(int argc, char *argv[]) BU_LIST_INIT(&RTG.rtg_headwdb.l); interp = Tcl_CreateInterp(); - tclcad_init(interp, 0, NULL); + tret = tclcad_init(interp, 0, &msg); + if (tret == TCL_ERROR) { + bu_log("tclcad_init error: %s\n", bu_vls_cstr(&msg)); + } + bu_vls_free(&msg); wdb_close(ofp); { diff --git a/src/conv/asc/asc2pix.c b/src/conv/asc/asc2pix.c index 83239729f35..41066b0481e 100644 --- a/src/conv/asc/asc2pix.c +++ b/src/conv/asc/asc2pix.c @@ -1,7 +1,7 @@ /* A S C 2 P I X . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/asc/g2asc.c b/src/conv/asc/g2asc.c index f3ec6b4b7f6..09cd0449d66 100644 --- a/src/conv/asc/g2asc.c +++ b/src/conv/asc/g2asc.c @@ -1,7 +1,7 @@ /* G 2 A S C . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/asc/pix2asc.c b/src/conv/asc/pix2asc.c index f290680f152..499b1597fde 100644 --- a/src/conv/asc/pix2asc.c +++ b/src/conv/asc/pix2asc.c @@ -1,7 +1,7 @@ /* P I X 2 A S C . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/bot_dump.c b/src/conv/bot_dump.c index c3024a7249e..da607b92466 100644 --- a/src/conv/bot_dump.c +++ b/src/conv/bot_dump.c @@ -1,7 +1,7 @@ /* B O T _ D U M P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/comgeom/cvt.c b/src/conv/comgeom/cvt.c index 0c6b38cd847..5b487375a67 100644 --- a/src/conv/comgeom/cvt.c +++ b/src/conv/comgeom/cvt.c @@ -1,7 +1,7 @@ /* C V T . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/comgeom/f2a.c b/src/conv/comgeom/f2a.c index 71d57e0b45a..dca688bafd0 100644 --- a/src/conv/comgeom/f2a.c +++ b/src/conv/comgeom/f2a.c @@ -1,7 +1,7 @@ /* F 2 A . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/comgeom/mat.c b/src/conv/comgeom/mat.c index d160a3619c8..37f74b00f85 100644 --- a/src/conv/comgeom/mat.c +++ b/src/conv/comgeom/mat.c @@ -1,7 +1,7 @@ /* M A T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/comgeom/read.c b/src/conv/comgeom/read.c index 544f898aa4d..019ebbee51f 100644 --- a/src/conv/comgeom/read.c +++ b/src/conv/comgeom/read.c @@ -1,7 +1,7 @@ /* R E A D . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/comgeom/region.c b/src/conv/comgeom/region.c index f9fa82ecd96..1e1aeac38f9 100644 --- a/src/conv/comgeom/region.c +++ b/src/conv/comgeom/region.c @@ -1,7 +1,7 @@ /* R E G I O N . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/comgeom/solid.c b/src/conv/comgeom/solid.c index f622f18b0b9..fd17b8e19f9 100644 --- a/src/conv/comgeom/solid.c +++ b/src/conv/comgeom/solid.c @@ -1,7 +1,7 @@ /* S O L I D . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/comgeom/tools.c b/src/conv/comgeom/tools.c index 1614503d179..0604be51ada 100644 --- a/src/conv/comgeom/tools.c +++ b/src/conv/comgeom/tools.c @@ -1,7 +1,7 @@ /* T O O L S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/comgeom/try.sh b/src/conv/comgeom/try.sh index fba5b15c306..33d90eba062 100755 --- a/src/conv/comgeom/try.sh +++ b/src/conv/comgeom/try.sh @@ -2,7 +2,7 @@ # T R Y . S H # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/src/conv/conv-vg2g.c b/src/conv/conv-vg2g.c index 91653d64263..6006a53d763 100644 --- a/src/conv/conv-vg2g.c +++ b/src/conv/conv-vg2g.c @@ -1,7 +1,7 @@ /* C O N V - V G 2 G . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/csg/csg.c b/src/conv/csg/csg.c index 5bce3216f7f..94f34552dac 100644 --- a/src/conv/csg/csg.c +++ b/src/conv/csg/csg.c @@ -1,7 +1,7 @@ /* C S G . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/csg/csg.h b/src/conv/csg/csg.h index 5b098adbc94..8765181036f 100644 --- a/src/conv/csg/csg.h +++ b/src/conv/csg/csg.h @@ -1,7 +1,7 @@ /* C S G . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/csg/csg_parser.lemon b/src/conv/csg/csg_parser.lemon index 0764ef6f603..6e35ac8a106 100644 --- a/src/conv/csg/csg_parser.lemon +++ b/src/conv/csg/csg_parser.lemon @@ -1,7 +1,7 @@ /* C S G _ P A R S E R . L E M O N * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/csg/csg_scanner.perplex b/src/conv/csg/csg_scanner.perplex index c6fe94d8fdc..8853903a58f 100644 --- a/src/conv/csg/csg_scanner.perplex +++ b/src/conv/csg/csg_scanner.perplex @@ -1,7 +1,7 @@ /* C S G _ S C A N N E R . P E R P L E X * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/dbclean.sh b/src/conv/dbclean.sh index ebf063e2e7b..8f3a987c575 100755 --- a/src/conv/dbclean.sh +++ b/src/conv/dbclean.sh @@ -2,7 +2,7 @@ # D B C L E A N . S H # BRL-CAD # -# Copyright (c) 1991-2020 United States Government as represented by +# Copyright (c) 1991-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This program is free software; you can redistribute it and/or diff --git a/src/conv/dbupgrade.c b/src/conv/dbupgrade.c index 6d909956801..211447f9c24 100644 --- a/src/conv/dbupgrade.c +++ b/src/conv/dbupgrade.c @@ -1,7 +1,7 @@ /* D B U P G R A D E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/dxf/dxf-g.c b/src/conv/dxf/dxf-g.c index ebc1149af61..d466f46509b 100644 --- a/src/conv/dxf/dxf-g.c +++ b/src/conv/dxf/dxf-g.c @@ -1,7 +1,7 @@ /* D X F - G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/dxf/dxf.h b/src/conv/dxf/dxf.h index b9f1c37f7e2..60a16841720 100644 --- a/src/conv/dxf/dxf.h +++ b/src/conv/dxf/dxf.h @@ -1,7 +1,7 @@ /* D X F . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/dxf/g-dxf.c b/src/conv/dxf/g-dxf.c index 5c9144074b2..c8404fef57d 100644 --- a/src/conv/dxf/g-dxf.c +++ b/src/conv/dxf/g-dxf.c @@ -1,7 +1,7 @@ /* G - D X F . C * BRL-CAD * - * Copyright (c) 2003-2020 United States Government as represented by + * Copyright (c) 2003-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/enf-g.c b/src/conv/enf-g.c index 073f528cdb5..0531d09e6dd 100644 --- a/src/conv/enf-g.c +++ b/src/conv/enf-g.c @@ -1,7 +1,7 @@ /* E N F - G . C * BRL-CAD * - * Copyright (c) 2001-2020 United States Government as represented by + * Copyright (c) 2001-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/fast4-g.c b/src/conv/fast4-g.c index 34149790236..4e918a6b948 100644 --- a/src/conv/fast4-g.c +++ b/src/conv/fast4-g.c @@ -1,7 +1,7 @@ /* F A S T 4 - G . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -38,6 +38,7 @@ #include "bu/app.h" #include "bu/debug.h" #include "bu/getopt.h" +#include "bu/path.h" #include "rt/db4.h" #include "vmath.h" #include "nmg.h" @@ -2839,8 +2840,12 @@ main(int argc, char **argv) rewind(fpin); /* Make an ID record if no vehicle card was found */ - if (!vehicle[0]) - mk_id_units(fpout, argv[bu_optind], "in"); + if (!vehicle[0]) { + struct bu_vls fname = BU_VLS_INIT_ZERO; + bu_path_component(&fname, argv[bu_optind], BU_PATH_BASENAME); + mk_id_units(fpout, bu_vls_cstr(&fname), "in"); + bu_vls_free(&fname); + } if (!quiet) bu_log("Building components....\n"); diff --git a/src/conv/g-acad.c b/src/conv/g-acad.c index 12086c6aae0..6d4f6f74a6d 100644 --- a/src/conv/g-acad.c +++ b/src/conv/g-acad.c @@ -1,7 +1,7 @@ /* G - A C A D . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-dot.c b/src/conv/g-dot.c index ce6eacefb34..1358bc88da9 100644 --- a/src/conv/g-dot.c +++ b/src/conv/g-dot.c @@ -1,7 +1,7 @@ /* G - D O T . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/g-egg.c b/src/conv/g-egg.c index 6b9d04b7fff..52421693fbd 100644 --- a/src/conv/g-egg.c +++ b/src/conv/g-egg.c @@ -1,7 +1,7 @@ /* G - E G G . C * BRL-CAD * - * Copyright (c) 2003-2020 United States Government as represented by + * Copyright (c) 2003-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-nff.c b/src/conv/g-nff.c index 43290f86b22..8490770042e 100644 --- a/src/conv/g-nff.c +++ b/src/conv/g-nff.c @@ -1,7 +1,7 @@ /* G - N F F . C * BRL-CAD * - * Copyright (c) 2003-2020 United States Government as represented by + * Copyright (c) 2003-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-obj.c b/src/conv/g-obj.c index c7ed9f50f90..e052749f63b 100644 --- a/src/conv/g-obj.c +++ b/src/conv/g-obj.c @@ -1,7 +1,7 @@ /* G - O B J . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-shell-rect.c b/src/conv/g-shell-rect.c index 07e4072f0cf..50488767662 100644 --- a/src/conv/g-shell-rect.c +++ b/src/conv/g-shell-rect.c @@ -1,7 +1,7 @@ /* G - S H E L L - R E C T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-var.c b/src/conv/g-var.c index 9d7e5b73553..4d2723edd05 100644 --- a/src/conv/g-var.c +++ b/src/conv/g-var.c @@ -1,7 +1,7 @@ /* G - V A R . C * BRL-CAD * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/g-vdb.cpp b/src/conv/g-vdb.cpp index 7d6ede2a87d..fe6dbc0dbc1 100644 --- a/src/conv/g-vdb.cpp +++ b/src/conv/g-vdb.cpp @@ -1,7 +1,7 @@ /* G - V D B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-voxel.c b/src/conv/g-voxel.c index 1ef6ae351aa..36724f4d4af 100644 --- a/src/conv/g-voxel.c +++ b/src/conv/g-voxel.c @@ -1,7 +1,7 @@ /* G - V O X E L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-vrml.c b/src/conv/g-vrml.c index 62b74736415..2ec5fece55c 100644 --- a/src/conv/g-vrml.c +++ b/src/conv/g-vrml.c @@ -1,7 +1,7 @@ /* G - V R M L . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-x3d.c b/src/conv/g-x3d.c index 8a3475ab556..888ccb83d08 100644 --- a/src/conv/g-x3d.c +++ b/src/conv/g-x3d.c @@ -1,7 +1,7 @@ /* G - X 3 D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-xxx.c b/src/conv/g-xxx.c index ef950bd46e1..b29e86c9a65 100644 --- a/src/conv/g-xxx.c +++ b/src/conv/g-xxx.c @@ -1,7 +1,7 @@ /* G - X X X . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g-xxx_facets.c b/src/conv/g-xxx_facets.c index 0d37e49a2c8..d2415d7d149 100644 --- a/src/conv/g-xxx_facets.c +++ b/src/conv/g-xxx_facets.c @@ -1,7 +1,7 @@ /* G - X X X _ F A C E T S . C * BRL-CAD * - * Copyright (c) 2003-2020 United States Government as represented by + * Copyright (c) 2003-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g4-g5.c b/src/conv/g4-g5.c index 8173c0acfc6..b2639781040 100644 --- a/src/conv/g4-g5.c +++ b/src/conv/g4-g5.c @@ -2,7 +2,7 @@ * BRL-CAD * * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/g5-g4.c b/src/conv/g5-g4.c index 876bdfebd8b..e3ff1489ba8 100644 --- a/src/conv/g5-g4.c +++ b/src/conv/g5-g4.c @@ -1,7 +1,7 @@ /* G 5 - G 4 . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/gcv/CMakeLists.txt b/src/conv/gcv/CMakeLists.txt index 35da8af57c6..4e09e41ebae 100644 --- a/src/conv/gcv/CMakeLists.txt +++ b/src/conv/gcv/CMakeLists.txt @@ -7,7 +7,7 @@ BRLCAD_INCLUDE_DIRS(GCV_INCLUDE_DIRS) BRLCAD_ADDEXEC(gcv gcv.c "libgcv;libbn;libbu;${M_LIBRARY}") -add_dependencies(gcv libgcv_plugins) +add_dependencies(gcv gcv_plugins) CMAKEFILES(gcv.sh) CMAKEFILES(CMakeLists.txt) diff --git a/src/conv/gcv/gcv.c b/src/conv/gcv/gcv.c index 1fd23997f95..7e43780a291 100644 --- a/src/conv/gcv/gcv.c +++ b/src/conv/gcv/gcv.c @@ -1,7 +1,7 @@ /* G C V . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -300,9 +300,8 @@ file_null(struct bu_vls *msg, size_t argc, const char **argv, void *set_var) if (bu_file_exists(argv[0], NULL)) { if (msg) { - bu_vls_sprintf(msg, "Error - file %s already exists!\n", argv[0]); + bu_vls_sprintf(msg, "Note - file %s already exists, appending conversion output\n", argv[0]); } - return -1; } if (file_set) diff --git a/src/conv/iges/BrepHandler.cpp b/src/conv/iges/BrepHandler.cpp index d7ed74a0485..7097ecdc85a 100644 --- a/src/conv/iges/BrepHandler.cpp +++ b/src/conv/iges/BrepHandler.cpp @@ -1,7 +1,7 @@ /* B R E P H A N D L E R . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/iges/PullbackCurve.cpp b/src/conv/iges/PullbackCurve.cpp index dcd763adcc6..edda56762ae 100644 --- a/src/conv/iges/PullbackCurve.cpp +++ b/src/conv/iges/PullbackCurve.cpp @@ -1,7 +1,7 @@ /* P U L L B A C K C U R V E . C P P * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/iges/PullbackCurve.h b/src/conv/iges/PullbackCurve.h index f426b3b33f4..438a0f16e35 100644 --- a/src/conv/iges/PullbackCurve.h +++ b/src/conv/iges/PullbackCurve.h @@ -1,7 +1,7 @@ /* P U L L B A C K C U R V E . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/iges/add_face.c b/src/conv/iges/add_face.c index 0afe7164a57..8d07105bedb 100644 --- a/src/conv/iges/add_face.c +++ b/src/conv/iges/add_face.c @@ -1,7 +1,7 @@ /* A D D _ F A C E . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/add_face.cpp b/src/conv/iges/add_face.cpp index 8449759861f..09943696f48 100644 --- a/src/conv/iges/add_face.cpp +++ b/src/conv/iges/add_face.cpp @@ -1,7 +1,7 @@ /* A D D _ F A C E . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/add_inner_shell.c b/src/conv/iges/add_inner_shell.c index 0f59f343847..673df469dea 100644 --- a/src/conv/iges/add_inner_shell.c +++ b/src/conv/iges/add_inner_shell.c @@ -1,7 +1,7 @@ /* A D D _ I N N E R _ S H E L L . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/add_loop.c b/src/conv/iges/add_loop.c index b2a4a57bbdc..8b0c2fecb20 100644 --- a/src/conv/iges/add_loop.c +++ b/src/conv/iges/add_loop.c @@ -1,7 +1,7 @@ /* A D D _ L O O P . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/arrange.c b/src/conv/iges/arrange.c index 33d712981a6..2b0adad3bd1 100644 --- a/src/conv/iges/arrange.c +++ b/src/conv/iges/arrange.c @@ -1,7 +1,7 @@ /* A R R A N G E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/b-spline.c b/src/conv/iges/b-spline.c index 61416e14156..876f59bf795 100644 --- a/src/conv/iges/b-spline.c +++ b/src/conv/iges/b-spline.c @@ -1,7 +1,7 @@ /* B - S P L I N E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/block2.c b/src/conv/iges/block2.c index fd1b7fcac4b..668194263dd 100644 --- a/src/conv/iges/block2.c +++ b/src/conv/iges/block2.c @@ -1,7 +1,7 @@ /* B L O C K 2 . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/brep.c b/src/conv/iges/brep.c index 7bcadd96b38..be0793c2d92 100644 --- a/src/conv/iges/brep.c +++ b/src/conv/iges/brep.c @@ -1,7 +1,7 @@ /* B R E P . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/brep.cpp b/src/conv/iges/brep.cpp index 7c1b7219b0a..99180cc2b6b 100644 --- a/src/conv/iges/brep.cpp +++ b/src/conv/iges/brep.cpp @@ -1,7 +1,7 @@ /* B R E P . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/brlcad_brep.cpp b/src/conv/iges/brlcad_brep.cpp index 82f96e7294f..e0fe278d763 100644 --- a/src/conv/iges/brlcad_brep.cpp +++ b/src/conv/iges/brlcad_brep.cpp @@ -1,7 +1,7 @@ /* B R L C A D _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/iges/brlcad_brep.hpp b/src/conv/iges/brlcad_brep.hpp index 33fc05dfe5e..c09c199c426 100644 --- a/src/conv/iges/brlcad_brep.hpp +++ b/src/conv/iges/brlcad_brep.hpp @@ -1,7 +1,7 @@ /* B R L C A D . H P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/iges/bubbleup.c b/src/conv/iges/bubbleup.c index cc082563c26..1d48ceaa711 100644 --- a/src/conv/iges/bubbleup.c +++ b/src/conv/iges/bubbleup.c @@ -1,7 +1,7 @@ /* B U B B L E U P . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/check_names.c b/src/conv/iges/check_names.c index f858c1ead79..39cf5e4df67 100644 --- a/src/conv/iges/check_names.c +++ b/src/conv/iges/check_names.c @@ -1,7 +1,7 @@ /* C H E C K _ N A M E S . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/cone.c b/src/conv/iges/cone.c index b2a9950e02a..e88e38f8246 100644 --- a/src/conv/iges/cone.c +++ b/src/conv/iges/cone.c @@ -1,7 +1,7 @@ /* C O N E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/conv_drawings.c b/src/conv/iges/conv_drawings.c index a289e6a0ee5..748f67d2cd6 100644 --- a/src/conv/iges/conv_drawings.c +++ b/src/conv/iges/conv_drawings.c @@ -1,7 +1,7 @@ /* C O N V _ D R A W I N G S . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/convassem.c b/src/conv/iges/convassem.c index d26f3dee386..3d95a9e08f4 100644 --- a/src/conv/iges/convassem.c +++ b/src/conv/iges/convassem.c @@ -1,7 +1,7 @@ /* C O N V A S S E M . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/convinst.c b/src/conv/iges/convinst.c index 4bde11a50a4..16409ddbf2d 100644 --- a/src/conv/iges/convinst.c +++ b/src/conv/iges/convinst.c @@ -1,7 +1,7 @@ /* C O N V I N S T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/convsolids.c b/src/conv/iges/convsolids.c index 48023b75ced..afceee1fcba 100644 --- a/src/conv/iges/convsolids.c +++ b/src/conv/iges/convsolids.c @@ -1,7 +1,7 @@ /* C O N V S O L I D S . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/convsurf.c b/src/conv/iges/convsurf.c index cbdd5ef27f0..89909a1b778 100644 --- a/src/conv/iges/convsurf.c +++ b/src/conv/iges/convsurf.c @@ -1,7 +1,7 @@ /* C O N V S U R F . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/convtree.c b/src/conv/iges/convtree.c index 00db8ad058c..0f1b3fdefa9 100644 --- a/src/conv/iges/convtree.c +++ b/src/conv/iges/convtree.c @@ -1,7 +1,7 @@ /* C O N V T R E E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/copytree.c b/src/conv/iges/copytree.c index fe17d7308e9..d337982bf81 100644 --- a/src/conv/iges/copytree.c +++ b/src/conv/iges/copytree.c @@ -1,7 +1,7 @@ /* C O P Y T R E E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/cyl.c b/src/conv/iges/cyl.c index 705e5241a4b..8bdf8eb45d7 100644 --- a/src/conv/iges/cyl.c +++ b/src/conv/iges/cyl.c @@ -1,7 +1,7 @@ /* C Y L . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/do_subfigs.c b/src/conv/iges/do_subfigs.c index cd1b06dedbb..5c681f0b728 100644 --- a/src/conv/iges/do_subfigs.c +++ b/src/conv/iges/do_subfigs.c @@ -1,7 +1,7 @@ /* D O _ S U B F I G S . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/docolor.c b/src/conv/iges/docolor.c index 16764f83978..36a2f139739 100644 --- a/src/conv/iges/docolor.c +++ b/src/conv/iges/docolor.c @@ -1,7 +1,7 @@ /* D O C O L O R . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/ell.c b/src/conv/iges/ell.c index cf1e8e75c47..4df73534733 100644 --- a/src/conv/iges/ell.c +++ b/src/conv/iges/ell.c @@ -1,7 +1,7 @@ /* E L L . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/evalxform.c b/src/conv/iges/evalxform.c index 6d10c224442..c6baf6dafa2 100644 --- a/src/conv/iges/evalxform.c +++ b/src/conv/iges/evalxform.c @@ -1,7 +1,7 @@ /* E V A L X F O R M . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/extrudcirc.c b/src/conv/iges/extrudcirc.c index 71a587b143e..f7b980e9c02 100644 --- a/src/conv/iges/extrudcirc.c +++ b/src/conv/iges/extrudcirc.c @@ -1,7 +1,7 @@ /* E X T R U D C I R C . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/extrudcon.c b/src/conv/iges/extrudcon.c index 44df6859616..643fe31db71 100644 --- a/src/conv/iges/extrudcon.c +++ b/src/conv/iges/extrudcon.c @@ -1,7 +1,7 @@ /* E X T R U D C O N . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/extrude.c b/src/conv/iges/extrude.c index 72b8eaf7a3f..12309a7be0c 100644 --- a/src/conv/iges/extrude.c +++ b/src/conv/iges/extrude.c @@ -1,7 +1,7 @@ /* E X T R U D E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/findp.c b/src/conv/iges/findp.c index 91a12c4c9f4..dde9734fe7d 100644 --- a/src/conv/iges/findp.c +++ b/src/conv/iges/findp.c @@ -1,7 +1,7 @@ /* F I N D P . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/g-iges.c b/src/conv/iges/g-iges.c index 2064add10e1..04a9c75534b 100644 --- a/src/conv/iges/g-iges.c +++ b/src/conv/iges/g-iges.c @@ -1,7 +1,7 @@ /* G - I G E S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -612,9 +612,6 @@ do_nmg_region_end(struct db_tree_state *tsp, const struct db_full_path *pathp, u } else if (mode == TRIMMED_SURF_MODE) dp->d_uses = (-nmgregion_to_tsurf(dp->d_namep, r, fp_dir, fp_param)); - /* NMG region is no longer necessary */ - nmg_kr(r); - if (multi_file) { char copy_buffer[CP_BUF_SIZE] = {0}; diff --git a/src/conv/iges/get_att.c b/src/conv/iges/get_att.c index 5665a04d162..4d831b5eaa4 100644 --- a/src/conv/iges/get_att.c +++ b/src/conv/iges/get_att.c @@ -1,7 +1,7 @@ /* G E T _ A T T . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/get_cnurb_curve.c b/src/conv/iges/get_cnurb_curve.c index 5471f276c95..f2e51390678 100644 --- a/src/conv/iges/get_cnurb_curve.c +++ b/src/conv/iges/get_cnurb_curve.c @@ -1,7 +1,7 @@ /* G E T _ C N U R B _ C U R V E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/get_edge_list.c b/src/conv/iges/get_edge_list.c index 29ccb42985b..abe0a4f2876 100644 --- a/src/conv/iges/get_edge_list.c +++ b/src/conv/iges/get_edge_list.c @@ -1,7 +1,7 @@ /* G E T _ E D G E _ L I S T . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/get_iges_vertex.c b/src/conv/iges/get_iges_vertex.c index 6f5ee610393..ca142b94899 100644 --- a/src/conv/iges/get_iges_vertex.c +++ b/src/conv/iges/get_iges_vertex.c @@ -1,7 +1,7 @@ /* G E T _ I G E S _ V E R T E X . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/get_outer_shell.c b/src/conv/iges/get_outer_shell.c index 44e035fc4f4..c3a75b2cdc5 100644 --- a/src/conv/iges/get_outer_shell.c +++ b/src/conv/iges/get_outer_shell.c @@ -1,7 +1,7 @@ /* G E T _ O U T E R _ S H E L L . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/get_outer_shell.cpp b/src/conv/iges/get_outer_shell.cpp index e0a512f039b..412f1eeb73e 100644 --- a/src/conv/iges/get_outer_shell.cpp +++ b/src/conv/iges/get_outer_shell.cpp @@ -1,7 +1,7 @@ /* G E T _ O U T E R _ S H E L L . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/get_vertex.c b/src/conv/iges/get_vertex.c index dfbe7f1d0aa..e22ecada5ce 100644 --- a/src/conv/iges/get_vertex.c +++ b/src/conv/iges/get_vertex.c @@ -1,7 +1,7 @@ /* G E T _ V E R T E X . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/get_vertex_list.c b/src/conv/iges/get_vertex_list.c index 8680bc9180c..ddb8bdddb0b 100644 --- a/src/conv/iges/get_vertex_list.c +++ b/src/conv/iges/get_vertex_list.c @@ -1,7 +1,7 @@ /* G E T _ V E R T E X _ L I S T . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/getcurve.c b/src/conv/iges/getcurve.c index f450bd95e25..2c0b2eff1ce 100644 --- a/src/conv/iges/getcurve.c +++ b/src/conv/iges/getcurve.c @@ -1,7 +1,7 @@ /* G E T C U R V E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/iges.c b/src/conv/iges/iges.c index 1cdfebb076c..86ccd16373b 100644 --- a/src/conv/iges/iges.c +++ b/src/conv/iges/iges.c @@ -1,7 +1,7 @@ /* I G E S . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/iges.h b/src/conv/iges/iges.h index ef5cc3f50a3..742ff7559ba 100644 --- a/src/conv/iges/iges.h +++ b/src/conv/iges/iges.h @@ -1,7 +1,7 @@ /* I G E S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/iges_extern.h b/src/conv/iges/iges_extern.h index cba16ba0dfe..e49ddb2c1ed 100644 --- a/src/conv/iges/iges_extern.h +++ b/src/conv/iges/iges_extern.h @@ -1,7 +1,7 @@ /* I G E S _ E X T E R N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/iges_struct.h b/src/conv/iges/iges_struct.h index 4456a8e53a4..523bacf0905 100644 --- a/src/conv/iges/iges_struct.h +++ b/src/conv/iges/iges_struct.h @@ -1,7 +1,7 @@ /* I G E S _ S T R U C T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/iges_types.c b/src/conv/iges/iges_types.c index 1aa933ca42d..89022ab6df3 100644 --- a/src/conv/iges/iges_types.c +++ b/src/conv/iges/iges_types.c @@ -1,7 +1,7 @@ /* I G E S _ T Y P E S . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/iges_types.h b/src/conv/iges/iges_types.h index 16e4be47d16..b0946d4b1d5 100644 --- a/src/conv/iges/iges_types.h +++ b/src/conv/iges/iges_types.h @@ -1,7 +1,7 @@ /* I G E S _ T Y P E S . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/main.c b/src/conv/iges/main.c index 70e681a44ea..862dbf194b2 100644 --- a/src/conv/iges/main.c +++ b/src/conv/iges/main.c @@ -1,7 +1,7 @@ /* M A I N . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/make_face.c b/src/conv/iges/make_face.c index 3ea2d0b8555..d0ead1343a7 100644 --- a/src/conv/iges/make_face.c +++ b/src/conv/iges/make_face.c @@ -1,7 +1,7 @@ /* M A K E _ F A C E . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/make_nurb_face.c b/src/conv/iges/make_nurb_face.c index 6fc54976460..4a7344650fb 100644 --- a/src/conv/iges/make_nurb_face.c +++ b/src/conv/iges/make_nurb_face.c @@ -1,7 +1,7 @@ /* M A K E _ N U R B _ F A C E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/makedir.c b/src/conv/iges/makedir.c index 1134155e01b..6b95fda8a7b 100644 --- a/src/conv/iges/makedir.c +++ b/src/conv/iges/makedir.c @@ -1,7 +1,7 @@ /* M A K E D I R . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/makegroup.c b/src/conv/iges/makegroup.c index 706c94dc895..10eff504aac 100644 --- a/src/conv/iges/makegroup.c +++ b/src/conv/iges/makegroup.c @@ -1,7 +1,7 @@ /* M A K E G R O U P . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/matmult.c b/src/conv/iges/matmult.c index 6b5d05b4202..9be72f7d61e 100644 --- a/src/conv/iges/matmult.c +++ b/src/conv/iges/matmult.c @@ -1,7 +1,7 @@ /* M A T M U L T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/n_iges.cpp b/src/conv/iges/n_iges.cpp index 373efdbedab..97da69abe87 100644 --- a/src/conv/iges/n_iges.cpp +++ b/src/conv/iges/n_iges.cpp @@ -1,7 +1,7 @@ /* N _ I G E S . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/iges/n_iges.hpp b/src/conv/iges/n_iges.hpp index 3f1cf807a20..3188dd333c0 100644 --- a/src/conv/iges/n_iges.hpp +++ b/src/conv/iges/n_iges.hpp @@ -1,7 +1,7 @@ /* N _ I G E S . H P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/iges/n_main.cpp b/src/conv/iges/n_main.cpp index fba5d26c4a5..a105e92349a 100644 --- a/src/conv/iges/n_main.cpp +++ b/src/conv/iges/n_main.cpp @@ -1,7 +1,7 @@ /* N _ M A I N . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/iges/orient_loops.c b/src/conv/iges/orient_loops.c index 1fd72285cf5..081fc4f5dc3 100644 --- a/src/conv/iges/orient_loops.c +++ b/src/conv/iges/orient_loops.c @@ -1,7 +1,7 @@ /* O R I E N T _ L O O P S . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/read_att.c b/src/conv/iges/read_att.c index b99ac2f5e10..086700fd337 100644 --- a/src/conv/iges/read_att.c +++ b/src/conv/iges/read_att.c @@ -1,7 +1,7 @@ /* R E A D _ A T T . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/read_edge_list.c b/src/conv/iges/read_edge_list.c index 4770978625d..c9c1497a759 100644 --- a/src/conv/iges/read_edge_list.c +++ b/src/conv/iges/read_edge_list.c @@ -1,7 +1,7 @@ /* R E A D _ E D G E _ L I S T . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/read_vertex_list.c b/src/conv/iges/read_vertex_list.c index ca78de0bfd7..4543b443ff0 100644 --- a/src/conv/iges/read_vertex_list.c +++ b/src/conv/iges/read_vertex_list.c @@ -1,7 +1,7 @@ /* R E A D _ V E R T E X _ L I S T . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readcnv.c b/src/conv/iges/readcnv.c index 11553e8f0fe..601e3a7423d 100644 --- a/src/conv/iges/readcnv.c +++ b/src/conv/iges/readcnv.c @@ -1,7 +1,7 @@ /* R E A D C N V . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readcols.c b/src/conv/iges/readcols.c index b0bf909d63e..d0aa51d72a2 100644 --- a/src/conv/iges/readcols.c +++ b/src/conv/iges/readcols.c @@ -1,7 +1,7 @@ /* R E A D C O L S . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readdbl.c b/src/conv/iges/readdbl.c index 4a9c3bf538a..d048c4d7419 100644 --- a/src/conv/iges/readdbl.c +++ b/src/conv/iges/readdbl.c @@ -1,7 +1,7 @@ /* R E A D D B L . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readflt.c b/src/conv/iges/readflt.c index 9fb45211b6a..720e9748400 100644 --- a/src/conv/iges/readflt.c +++ b/src/conv/iges/readflt.c @@ -1,7 +1,7 @@ /* R E A D F L T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readglobal.c b/src/conv/iges/readglobal.c index d1adb22968f..63ea4ad0e6b 100644 --- a/src/conv/iges/readglobal.c +++ b/src/conv/iges/readglobal.c @@ -1,7 +1,7 @@ /* R E A D G L O B A L . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readint.c b/src/conv/iges/readint.c index 3d64fb06a92..2c951db879f 100644 --- a/src/conv/iges/readint.c +++ b/src/conv/iges/readint.c @@ -1,7 +1,7 @@ /* R E A D I N T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readmatrix.c b/src/conv/iges/readmatrix.c index cb0b7524bd5..f3fb255d32f 100644 --- a/src/conv/iges/readmatrix.c +++ b/src/conv/iges/readmatrix.c @@ -1,7 +1,7 @@ /* R E A D M A T R I X . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readname.c b/src/conv/iges/readname.c index 2878bf3dc58..53f9ebbb9eb 100644 --- a/src/conv/iges/readname.c +++ b/src/conv/iges/readname.c @@ -1,7 +1,7 @@ /* R E A D N A M E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readrec.c b/src/conv/iges/readrec.c index e96a61d3960..aa29ec31bff 100644 --- a/src/conv/iges/readrec.c +++ b/src/conv/iges/readrec.c @@ -1,7 +1,7 @@ /* R E A D R E C . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readstart.c b/src/conv/iges/readstart.c index edf32428196..4bb49f3a208 100644 --- a/src/conv/iges/readstart.c +++ b/src/conv/iges/readstart.c @@ -1,7 +1,7 @@ /* R E A D S T A R T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readstrg.c b/src/conv/iges/readstrg.c index 851178527aa..5c27e2254c6 100644 --- a/src/conv/iges/readstrg.c +++ b/src/conv/iges/readstrg.c @@ -1,7 +1,7 @@ /* R E A D S T R G . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readtime.c b/src/conv/iges/readtime.c index 508b1f8ec17..9eac93ad717 100644 --- a/src/conv/iges/readtime.c +++ b/src/conv/iges/readtime.c @@ -1,7 +1,7 @@ /* R E A D T I M E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/readtree.c b/src/conv/iges/readtree.c index 2479123b0e2..a62411da31f 100644 --- a/src/conv/iges/readtree.c +++ b/src/conv/iges/readtree.c @@ -1,7 +1,7 @@ /* R E A D T R E E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/recsize.c b/src/conv/iges/recsize.c index 266c46f0410..1b2e45297d2 100644 --- a/src/conv/iges/recsize.c +++ b/src/conv/iges/recsize.c @@ -1,7 +1,7 @@ /* R E C S I Z E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/revolve.c b/src/conv/iges/revolve.c index 19453f69251..1f8d00e138f 100644 --- a/src/conv/iges/revolve.c +++ b/src/conv/iges/revolve.c @@ -1,7 +1,7 @@ /* R E V O L V E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/showtree.c b/src/conv/iges/showtree.c index 88f59b0ba83..46181033b38 100644 --- a/src/conv/iges/showtree.c +++ b/src/conv/iges/showtree.c @@ -1,7 +1,7 @@ /* S H O W T R E E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/sphere.c b/src/conv/iges/sphere.c index 78c2a2e106d..4ad4d4f1a59 100644 --- a/src/conv/iges/sphere.c +++ b/src/conv/iges/sphere.c @@ -1,7 +1,7 @@ /* S P H E R E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/spline.c b/src/conv/iges/spline.c index 5092fd3d949..2718d8d7100 100644 --- a/src/conv/iges/spline.c +++ b/src/conv/iges/spline.c @@ -1,7 +1,7 @@ /* S P L I N E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/splinef.c b/src/conv/iges/splinef.c index 9f1ee1a10b2..7d599836921 100644 --- a/src/conv/iges/splinef.c +++ b/src/conv/iges/splinef.c @@ -1,7 +1,7 @@ /* S P L I N E F . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/stack.c b/src/conv/iges/stack.c index 34f0d13fc96..6503160331d 100644 --- a/src/conv/iges/stack.c +++ b/src/conv/iges/stack.c @@ -1,7 +1,7 @@ /* S T A C K . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/summary.c b/src/conv/iges/summary.c index 9bdd13854b0..b56213ccc91 100644 --- a/src/conv/iges/summary.c +++ b/src/conv/iges/summary.c @@ -1,7 +1,7 @@ /* S U M M A R Y . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/tor.c b/src/conv/iges/tor.c index fbeface48b6..7261605d93a 100644 --- a/src/conv/iges/tor.c +++ b/src/conv/iges/tor.c @@ -1,7 +1,7 @@ /* T O R . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/trimsurf.c b/src/conv/iges/trimsurf.c index 1b5e6d2630f..63a500ac801 100644 --- a/src/conv/iges/trimsurf.c +++ b/src/conv/iges/trimsurf.c @@ -1,7 +1,7 @@ /* T R I M S U R F . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/usage.c b/src/conv/iges/usage.c index f132149ff6d..e6c225ee8ae 100644 --- a/src/conv/iges/usage.c +++ b/src/conv/iges/usage.c @@ -1,7 +1,7 @@ /* U S A G E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/iges/wedge.c b/src/conv/iges/wedge.c index 3a42c722d18..3e87c4751b8 100644 --- a/src/conv/iges/wedge.c +++ b/src/conv/iges/wedge.c @@ -1,7 +1,7 @@ /* W E D G E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/intaval/glob.h b/src/conv/intaval/glob.h index c87f4036746..4fc46ef634f 100644 --- a/src/conv/intaval/glob.h +++ b/src/conv/intaval/glob.h @@ -1,7 +1,7 @@ /* G L O B . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/intaval/read_dra.cpp b/src/conv/intaval/read_dra.cpp index 3123f540de9..afe909e46a9 100644 --- a/src/conv/intaval/read_dra.cpp +++ b/src/conv/intaval/read_dra.cpp @@ -1,7 +1,7 @@ /* R E A D _ D R A . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/intaval/read_dra.h b/src/conv/intaval/read_dra.h index cfc5c750b7e..81f2e2b59e8 100644 --- a/src/conv/intaval/read_dra.h +++ b/src/conv/intaval/read_dra.h @@ -1,7 +1,7 @@ /* R E A D _ D R A . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/intaval/regtab.cpp b/src/conv/intaval/regtab.cpp index 9db484911d4..e85fdb3503a 100644 --- a/src/conv/intaval/regtab.cpp +++ b/src/conv/intaval/regtab.cpp @@ -1,7 +1,7 @@ /* R E G T A B . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/intaval/regtab.h b/src/conv/intaval/regtab.h index a2786ef0ea4..8f9c3d2d1ce 100644 --- a/src/conv/intaval/regtab.h +++ b/src/conv/intaval/regtab.h @@ -1,7 +1,7 @@ /* R E G T A B . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/intaval/tgf-g.cpp b/src/conv/intaval/tgf-g.cpp index 1318c14afa6..e01ea67215a 100644 --- a/src/conv/intaval/tgf-g.cpp +++ b/src/conv/intaval/tgf-g.cpp @@ -1,7 +1,7 @@ /* T G F - G . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/intaval/write_brl.cpp b/src/conv/intaval/write_brl.cpp index f898cecfcf7..7c153b42005 100644 --- a/src/conv/intaval/write_brl.cpp +++ b/src/conv/intaval/write_brl.cpp @@ -1,7 +1,7 @@ /* W R I T E _ B R L . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/intaval/write_brl.h b/src/conv/intaval/write_brl.h index b0d22de3f45..70611e08f97 100644 --- a/src/conv/intaval/write_brl.h +++ b/src/conv/intaval/write_brl.h @@ -1,7 +1,7 @@ /* W R I T E _ B R L . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/jack/g-jack.c b/src/conv/jack/g-jack.c index 5c58509fc33..e945df841f7 100644 --- a/src/conv/jack/g-jack.c +++ b/src/conv/jack/g-jack.c @@ -1,7 +1,7 @@ /* G - J A C K . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/jack/jack-g.c b/src/conv/jack/jack-g.c index 11dec6dcc31..0f5f52957dc 100644 --- a/src/conv/jack/jack-g.c +++ b/src/conv/jack/jack-g.c @@ -1,7 +1,7 @@ /* J A C K - G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/k-g.cpp b/src/conv/k-g.cpp index bddcb5652f7..2d0d47bd6f0 100644 --- a/src/conv/k-g.cpp +++ b/src/conv/k-g.cpp @@ -1,7 +1,7 @@ /* K - G . C P P * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/nastran-g.c b/src/conv/nastran-g.c index 409ac1fafd4..4bf009246aa 100644 --- a/src/conv/nastran-g.c +++ b/src/conv/nastran-g.c @@ -1,7 +1,7 @@ /* N A S T R A N - G . C * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/nmg/asc-nmg.c b/src/conv/nmg/asc-nmg.c index cbac73b08ca..cc9da38447c 100644 --- a/src/conv/nmg/asc-nmg.c +++ b/src/conv/nmg/asc-nmg.c @@ -1,7 +1,7 @@ /* A S C - N M G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/obj-g.c b/src/conv/obj-g.c index 864ac79407f..4b480763154 100644 --- a/src/conv/obj-g.c +++ b/src/conv/obj-g.c @@ -1,7 +1,7 @@ /* O B J - G . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/off/g-off.c b/src/conv/off/g-off.c index ef3f00f545b..341696d065c 100644 --- a/src/conv/off/g-off.c +++ b/src/conv/off/g-off.c @@ -1,7 +1,7 @@ /* G - O F F . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/off/off-g.c b/src/conv/off/off-g.c index ba83febadc6..1f851fa7216 100644 --- a/src/conv/off/off-g.c +++ b/src/conv/off/off-g.c @@ -1,7 +1,7 @@ /* O F F - G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/patch/patch-g.c b/src/conv/patch/patch-g.c index e0fd088f406..edb99167fd3 100644 --- a/src/conv/patch/patch-g.c +++ b/src/conv/patch/patch-g.c @@ -1,7 +1,7 @@ /* P A T C H - G . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/patch/patch-g.h b/src/conv/patch/patch-g.h index 09a8ec7d6db..e969f6f71b9 100644 --- a/src/conv/patch/patch-g.h +++ b/src/conv/patch/patch-g.h @@ -1,7 +1,7 @@ /* P A T C H - G . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/patch/pull_comp.sh b/src/conv/patch/pull_comp.sh index f9e303cbaf8..25056338b98 100755 --- a/src/conv/patch/pull_comp.sh +++ b/src/conv/patch/pull_comp.sh @@ -2,7 +2,7 @@ # P U L L _ C O M P . S H # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/src/conv/patch/pull_solidsub.sh b/src/conv/patch/pull_solidsub.sh index 0fdcd0a3c7d..0a340f27507 100755 --- a/src/conv/patch/pull_solidsub.sh +++ b/src/conv/patch/pull_solidsub.sh @@ -2,7 +2,7 @@ # P U L L _ S O L I D S U B . S H # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/src/conv/patch/rpatch.c b/src/conv/patch/rpatch.c index 5c18e831ad0..027c1410aa8 100644 --- a/src/conv/patch/rpatch.c +++ b/src/conv/patch/rpatch.c @@ -1,7 +1,7 @@ /* R P A T C H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/ply/g-ply.c b/src/conv/ply/g-ply.c index f0dc08b5acf..da6feef639d 100644 --- a/src/conv/ply/g-ply.c +++ b/src/conv/ply/g-ply.c @@ -1,7 +1,7 @@ /* G - P L Y . C * BRL-CAD * - * Copyright (c) 2003-2020 United States Government as represented by + * Copyright (c) 2003-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/ply/ply-g.c b/src/conv/ply/ply-g.c index 1dc87853540..fab857afbb8 100644 --- a/src/conv/ply/ply-g.c +++ b/src/conv/ply/ply-g.c @@ -1,7 +1,7 @@ /* P L Y - G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/raw/Bot.cpp b/src/conv/raw/Bot.cpp index 35c79c997f0..11b2d665ab7 100644 --- a/src/conv/raw/Bot.cpp +++ b/src/conv/raw/Bot.cpp @@ -1,7 +1,7 @@ /* B O T . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/raw/Bot.h b/src/conv/raw/Bot.h index 2e321b9554f..574ccd5c5c7 100644 --- a/src/conv/raw/Bot.h +++ b/src/conv/raw/Bot.h @@ -1,7 +1,7 @@ /* B O T . H * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/raw/CMakeLists.txt b/src/conv/raw/CMakeLists.txt index fc3d692fadc..df599e2f5da 100644 --- a/src/conv/raw/CMakeLists.txt +++ b/src/conv/raw/CMakeLists.txt @@ -14,7 +14,7 @@ set(rawg_SRCS BRLCAD_ADDEXEC(raw-g "${rawg_SRCS}" "libwdb;librt;libbu" NO_STRICT) BRLCAD_ADDEXEC(g-raw g-raw.c "librt;libgcv;libnmg;libbu;${WINSOCK_LIB}") -add_dependencies(g-raw libgcv_plugins) +add_dependencies(g-raw gcv_plugins) set(RAW_IGNORE_FILES Bot.h diff --git a/src/conv/raw/RegionList.cpp b/src/conv/raw/RegionList.cpp index 0a974cdee35..4f22147f24f 100644 --- a/src/conv/raw/RegionList.cpp +++ b/src/conv/raw/RegionList.cpp @@ -1,7 +1,7 @@ /* R E G I O N L I S T . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/raw/RegionList.h b/src/conv/raw/RegionList.h index 57474c97b95..b8f6374fb87 100644 --- a/src/conv/raw/RegionList.h +++ b/src/conv/raw/RegionList.h @@ -1,7 +1,7 @@ /* R E G I O N L I S T . H * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/raw/g-raw.c b/src/conv/raw/g-raw.c index 2b41cb4ff5b..782c13d7469 100644 --- a/src/conv/raw/g-raw.c +++ b/src/conv/raw/g-raw.c @@ -1,7 +1,7 @@ /* G - R A W . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/raw/raw-g.cpp b/src/conv/raw/raw-g.cpp index 1cf6807ec3c..e1be76b9171 100644 --- a/src/conv/raw/raw-g.cpp +++ b/src/conv/raw/raw-g.cpp @@ -1,7 +1,7 @@ /* R A W - G . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/shp/shp-g.c b/src/conv/shp/shp-g.c index 98f3681de84..3b35edf4078 100644 --- a/src/conv/shp/shp-g.c +++ b/src/conv/shp/shp-g.c @@ -1,7 +1,7 @@ /* S H P - G . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/AP_Common.h b/src/conv/step/AP_Common.h index 32fb00c943d..8e24a7aa568 100644 --- a/src/conv/step/AP_Common.h +++ b/src/conv/step/AP_Common.h @@ -1,7 +1,7 @@ /* A P _ S C H E M A . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/BRLCADWrapper.cpp b/src/conv/step/BRLCADWrapper.cpp index f82893616c4..b7e8c3abf61 100644 --- a/src/conv/step/BRLCADWrapper.cpp +++ b/src/conv/step/BRLCADWrapper.cpp @@ -1,7 +1,7 @@ /* BRLCADWrapper.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/BRLCADWrapper.h b/src/conv/step/BRLCADWrapper.h index bf266475071..601bbaf57a5 100644 --- a/src/conv/step/BRLCADWrapper.h +++ b/src/conv/step/BRLCADWrapper.h @@ -1,7 +1,7 @@ /* BRLCADWrapper.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/CMakeLists.txt b/src/conv/step/CMakeLists.txt index 0186bc82602..c998953c06e 100644 --- a/src/conv/step/CMakeLists.txt +++ b/src/conv/step/CMakeLists.txt @@ -36,58 +36,60 @@ set(STEP_INCLUDE_DIRS BRLCAD_INCLUDE_DIRS(STEP_INCLUDE_DIRS) macro(GENERATE_SCHEMA_INPUTS SCHEMA_FILE TARGET_SUFFIX) - # This Schema determines which version of STEP the command will support - # TODO - see if there is some way to automatically support multiple versions - # read the schema name from a line like 'SCHEMA AUTOMOTIVE_DESIGN;' - file(STRINGS ${SCHEMA_FILE} SCHEMA_STATEMENT LIMIT_COUNT 1 REGEX "SCHEMA .*") - string(REGEX REPLACE "^SCHEMA \(.*\)\;$" "\\1" SCHEMA_N ${SCHEMA_STATEMENT} ) - string(TOUPPER ${SCHEMA_N} SCHEMA_NAME) #exp2cxx always uses upper case for file names - - # Because SCHEMA_OUT_DIR is the working directory for exp2cxx, it must be - # created at configure time and be present when exp2cxx is run - set(SCHEMA_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/${SCHEMA_NAME}_${TARGET_SUFFIX}) - set(${TARGET_SUFFIX}_SCHEMA_OUT_DIR ${SCHEMA_OUT_DIR}) - file(MAKE_DIRECTORY ${SCHEMA_OUT_DIR}) - DISTCLEAN(${SCHEMA_OUT_DIR}) - - # These files are the standard exp2cxx outputs that need to be compiled. - set(express_srcs - ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}.cc - ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}.init.cc - ${SCHEMA_OUT_DIR}/SdaiAll.cc - ${SCHEMA_OUT_DIR}/compstructs.cc - ${SCHEMA_OUT_DIR}/schema.cc - ) - - # For the subdirectory add_custom_command definitions, need the generated - # headers as well. - set(EXPRESS_OUTPUT - ${express_srcs} - ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}.h - ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}Helpers.h - ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}Names.h - ${SCHEMA_OUT_DIR}/Sdaiclasses.h - ${SCHEMA_OUT_DIR}/schema.h - ) - - add_custom_command(OUTPUT ${EXPRESS_OUTPUT} ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.done - COMMAND ${EXP2CXX_EXEC} ARGS ${SCHEMA_FILE} > ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.log 2>&1 - COMMAND ${CMAKE_COMMAND} -E touch ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.done - DEPENDS ${SCHEMA_FILE} ${EXP2CXX_EXECUTABLE_TARGET} - WORKING_DIRECTORY ${SCHEMA_OUT_DIR} - COMMENT "Generating C++ code to express ${SCHEMA_NAME}..." - VERBATIM) - - add_custom_target(step-express-${SCHEMA_NAME}-${TARGET_SUFFIX} - DEPENDS ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.done) - set_target_properties(step-express-${SCHEMA_NAME}-${TARGET_SUFFIX} PROPERTIES FOLDER "Compilation Utilities") - - set(clean_files - ${EXPRESS_OUTPUT} - ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.done - ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.log - ) - set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${clean_files}") + if (BRLCAD_ENABLE_STEP) + # This Schema determines which version of STEP the command will support + # TODO - see if there is some way to automatically support multiple versions + # read the schema name from a line like 'SCHEMA AUTOMOTIVE_DESIGN;' + file(STRINGS ${SCHEMA_FILE} SCHEMA_STATEMENT LIMIT_COUNT 1 REGEX "SCHEMA .*") + string(REGEX REPLACE "^SCHEMA \(.*\)\;$" "\\1" SCHEMA_N ${SCHEMA_STATEMENT} ) + string(TOUPPER ${SCHEMA_N} SCHEMA_NAME) #exp2cxx always uses upper case for file names + + # Because SCHEMA_OUT_DIR is the working directory for exp2cxx, it must be + # created at configure time and be present when exp2cxx is run + set(SCHEMA_OUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/${SCHEMA_NAME}_${TARGET_SUFFIX}) + set(${TARGET_SUFFIX}_SCHEMA_OUT_DIR ${SCHEMA_OUT_DIR}) + file(MAKE_DIRECTORY ${SCHEMA_OUT_DIR}) + DISTCLEAN(${SCHEMA_OUT_DIR}) + + # These files are the standard exp2cxx outputs that need to be compiled. + set(express_srcs + ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}.cc + ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}.init.cc + ${SCHEMA_OUT_DIR}/SdaiAll.cc + ${SCHEMA_OUT_DIR}/compstructs.cc + ${SCHEMA_OUT_DIR}/schema.cc + ) + + # For the subdirectory add_custom_command definitions, need the generated + # headers as well. + set(EXPRESS_OUTPUT + ${express_srcs} + ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}.h + ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}Helpers.h + ${SCHEMA_OUT_DIR}/Sdai${SCHEMA_NAME}Names.h + ${SCHEMA_OUT_DIR}/Sdaiclasses.h + ${SCHEMA_OUT_DIR}/schema.h + ) + + add_custom_command(OUTPUT ${EXPRESS_OUTPUT} ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.done + COMMAND ${EXP2CXX_EXEC} ARGS ${SCHEMA_FILE} > ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.log 2>&1 + COMMAND ${CMAKE_COMMAND} -E touch ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.done + DEPENDS ${SCHEMA_FILE} ${EXP2CXX_EXECUTABLE_TARGET} + WORKING_DIRECTORY ${SCHEMA_OUT_DIR} + COMMENT "Generating C++ code to express ${SCHEMA_NAME}..." + VERBATIM) + + add_custom_target(step-express-${SCHEMA_NAME}-${TARGET_SUFFIX} + DEPENDS ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.done) + set_target_properties(step-express-${SCHEMA_NAME}-${TARGET_SUFFIX} PROPERTIES FOLDER "Compilation Utilities") + + set(clean_files + ${EXPRESS_OUTPUT} + ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.done + ${SCHEMA_OUT_DIR}/step_express_${SCHEMA_NAME}.log + ) + set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${clean_files}") + endif (BRLCAD_ENABLE_STEP) endmacro(GENERATE_SCHEMA_INPUTS SCHEMA_FILE) # AP203 diff --git a/src/conv/step/STEPWrapper.cpp b/src/conv/step/STEPWrapper.cpp index 00841fcb821..096bb31fd12 100644 --- a/src/conv/step/STEPWrapper.cpp +++ b/src/conv/step/STEPWrapper.cpp @@ -1,7 +1,7 @@ /* S T E P W R A P P E R . C P P * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/STEPWrapper.h b/src/conv/step/STEPWrapper.h index ece64b6d7c3..9162c3f03d2 100644 --- a/src/conv/step/STEPWrapper.h +++ b/src/conv/step/STEPWrapper.h @@ -1,7 +1,7 @@ /* S T E P W R A P P E R . H * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/ap203e2-g/CMakeLists.txt b/src/conv/step/ap203e2-g/CMakeLists.txt index 5109c56770a..e499d036b4a 100644 --- a/src/conv/step/ap203e2-g/CMakeLists.txt +++ b/src/conv/step/ap203e2-g/CMakeLists.txt @@ -2,10 +2,13 @@ set(AP203_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../step-g + ${STEPCODE_INCLUDE_DIRS} ${OPENNURBS_INCLUDE_DIRS} ) BRLCAD_INCLUDE_DIRS(AP203_INCLUDE_DIRS) +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) + set(STEP_SCHEMA_FILE ${STEPCODE_DIR}/data/ap203e2/ap203e2_mim_lf.exp) add_definitions(-DAP203e2) diff --git a/src/conv/step/ap214-g/CMakeLists.txt b/src/conv/step/ap214-g/CMakeLists.txt index 9705326f692..4ba9426cc2d 100644 --- a/src/conv/step/ap214-g/CMakeLists.txt +++ b/src/conv/step/ap214-g/CMakeLists.txt @@ -3,8 +3,12 @@ set(AP214_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../step-g + ${STEPCODE_INCLUDE_DIRS} ${OPENNURBS_INCLUDE_DIRS} ) + +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) + BRLCAD_INCLUDE_DIRS(AP214_INCLUDE_DIRS) set(STEP_SCHEMA_FILE ${STEPCODE_DIR}/data/ap214e3/AP214E3_2010.exp) diff --git a/src/conv/step/ap242-g/CMakeLists.txt b/src/conv/step/ap242-g/CMakeLists.txt index 11f72bffbac..a83dd1290bb 100644 --- a/src/conv/step/ap242-g/CMakeLists.txt +++ b/src/conv/step/ap242-g/CMakeLists.txt @@ -2,8 +2,12 @@ set(AP242_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../step-g + ${STEPCODE_INCLUDE_DIRS} ${OPENNURBS_INCLUDE_DIRS} ) + +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) + BRLCAD_INCLUDE_DIRS(AP242_INCLUDE_DIRS) set(STEP_SCHEMA_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../../other/stepcode/data/ap242/ap242e1.exp) diff --git a/src/conv/step/ap242-g/Factory.cpp b/src/conv/step/ap242-g/Factory.cpp index 087416775f0..b0d20c84455 100644 --- a/src/conv/step/ap242-g/Factory.cpp +++ b/src/conv/step/ap242-g/Factory.cpp @@ -1,7 +1,7 @@ /* Factory.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/GlobalUnitAssignedContext.cpp b/src/conv/step/ap242-g/GlobalUnitAssignedContext.cpp index a4bcfc26073..3c8155db646 100644 --- a/src/conv/step/ap242-g/GlobalUnitAssignedContext.cpp +++ b/src/conv/step/ap242-g/GlobalUnitAssignedContext.cpp @@ -1,7 +1,7 @@ /* GlobalUnitAssignedContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/GlobalUnitAssignedContext.h b/src/conv/step/ap242-g/GlobalUnitAssignedContext.h index a76f3c114c8..14d0bff30a9 100644 --- a/src/conv/step/ap242-g/GlobalUnitAssignedContext.h +++ b/src/conv/step/ap242-g/GlobalUnitAssignedContext.h @@ -1,7 +1,7 @@ /* GlobalUnitAssignedContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/MeasureValue.cpp b/src/conv/step/ap242-g/MeasureValue.cpp index 4031f73160f..cef6adcf2c8 100644 --- a/src/conv/step/ap242-g/MeasureValue.cpp +++ b/src/conv/step/ap242-g/MeasureValue.cpp @@ -1,7 +1,7 @@ /* MeasureValue.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/MeasureValue.h b/src/conv/step/ap242-g/MeasureValue.h index deba237d146..b8453d9e405 100644 --- a/src/conv/step/ap242-g/MeasureValue.h +++ b/src/conv/step/ap242-g/MeasureValue.h @@ -1,7 +1,7 @@ /* MeasureValue.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/MeasureWithUnit.cpp b/src/conv/step/ap242-g/MeasureWithUnit.cpp index 520ee6e2f70..e870bdc490c 100644 --- a/src/conv/step/ap242-g/MeasureWithUnit.cpp +++ b/src/conv/step/ap242-g/MeasureWithUnit.cpp @@ -1,7 +1,7 @@ /* MeasureWithUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/MeasureWithUnit.h b/src/conv/step/ap242-g/MeasureWithUnit.h index 8d7788f2352..fc99bf4f09f 100644 --- a/src/conv/step/ap242-g/MeasureWithUnit.h +++ b/src/conv/step/ap242-g/MeasureWithUnit.h @@ -1,7 +1,7 @@ /* MeasureWithUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/PropertyDefinitionRepresentation.cpp b/src/conv/step/ap242-g/PropertyDefinitionRepresentation.cpp index d8e03a21c36..454452eb543 100644 --- a/src/conv/step/ap242-g/PropertyDefinitionRepresentation.cpp +++ b/src/conv/step/ap242-g/PropertyDefinitionRepresentation.cpp @@ -1,7 +1,7 @@ /* PropertyDefinitionRepresentation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/PropertyDefinitionRepresentation.h b/src/conv/step/ap242-g/PropertyDefinitionRepresentation.h index 483e51c5304..cf8c8b6b4e7 100644 --- a/src/conv/step/ap242-g/PropertyDefinitionRepresentation.h +++ b/src/conv/step/ap242-g/PropertyDefinitionRepresentation.h @@ -1,7 +1,7 @@ /* PropertyDefinitionRepresentation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/RepresentedDefinition.cpp b/src/conv/step/ap242-g/RepresentedDefinition.cpp index 1e23a17f572..ccbf720ca25 100644 --- a/src/conv/step/ap242-g/RepresentedDefinition.cpp +++ b/src/conv/step/ap242-g/RepresentedDefinition.cpp @@ -1,7 +1,7 @@ /* RepresentedDefinition.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap242-g/RepresentedDefinition.h b/src/conv/step/ap242-g/RepresentedDefinition.h index 68834a4f55d..324e231ce21 100644 --- a/src/conv/step/ap242-g/RepresentedDefinition.h +++ b/src/conv/step/ap242-g/RepresentedDefinition.h @@ -1,7 +1,7 @@ /* RepresentedDefinition.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ap_schema.h b/src/conv/step/ap_schema.h index 9dff2b2d5d9..d39f8826ec4 100644 --- a/src/conv/step/ap_schema.h +++ b/src/conv/step/ap_schema.h @@ -1,7 +1,7 @@ /* A P _ S C H E M A . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap203e2/AP203e2.h b/src/conv/step/g-ap203e2/AP203e2.h index 67bb0accd65..931084c504b 100644 --- a/src/conv/step/g-ap203e2/AP203e2.h +++ b/src/conv/step/g-ap203e2/AP203e2.h @@ -1,7 +1,7 @@ /* A P 2 0 3 E 2. h * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap203e2/CMakeLists.txt b/src/conv/step/g-ap203e2/CMakeLists.txt index a0bdb059517..1ed306cdcae 100644 --- a/src/conv/step/g-ap203e2/CMakeLists.txt +++ b/src/conv/step/g-ap203e2/CMakeLists.txt @@ -1,8 +1,12 @@ set(AP203_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${STEPCODE_INCLUDE_DIRS} ${OPENNURBS_INCLUDE_DIRS} ) + +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) + BRLCAD_INCLUDE_DIRS(AP203_INCLUDE_DIRS) set(STEP_SCHEMA_FILE ${STEPCODE_DIR}/data/ap203e2/ap203e2_mim_lf.exp) diff --git a/src/conv/step/g-ap203e2/g-ap203e2.cpp b/src/conv/step/g-ap203e2/g-ap203e2.cpp index 7cf42ba405c..6637efadfef 100644 --- a/src/conv/step/g-ap203e2/g-ap203e2.cpp +++ b/src/conv/step/g-ap203e2/g-ap203e2.cpp @@ -1,7 +1,7 @@ /* G - A P 2 0 3 E 2 . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap214/AP214e3.h b/src/conv/step/g-ap214/AP214e3.h index 51eddb15dec..7c2e4e5c866 100644 --- a/src/conv/step/g-ap214/AP214e3.h +++ b/src/conv/step/g-ap214/AP214e3.h @@ -1,7 +1,7 @@ /* A P 2 1 4 E 3. h * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap214/Add_Tree.cpp b/src/conv/step/g-ap214/Add_Tree.cpp index 7ec2c87fb67..94648990fc5 100644 --- a/src/conv/step/g-ap214/Add_Tree.cpp +++ b/src/conv/step/g-ap214/Add_Tree.cpp @@ -1,7 +1,7 @@ /* A D D _ T R E E . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap214/CMakeLists.txt b/src/conv/step/g-ap214/CMakeLists.txt index edeadd56336..9f27b418505 100644 --- a/src/conv/step/g-ap214/CMakeLists.txt +++ b/src/conv/step/g-ap214/CMakeLists.txt @@ -2,8 +2,12 @@ set(AP214_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../g-step + ${STEPCODE_INCLUDE_DIRS} ${OPENNURBS_INCLUDE_DIRS} ) + +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) + BRLCAD_INCLUDE_DIRS(AP214_INCLUDE_DIRS) set(STEP_SCHEMA_FILE ${STEPCODE_DIR}/data/ap214e3/AP214E3_2010.exp) diff --git a/src/conv/step/g-ap214/Comb.cpp b/src/conv/step/g-ap214/Comb.cpp index 8c42852aa81..fe74a2c52a8 100644 --- a/src/conv/step/g-ap214/Comb.cpp +++ b/src/conv/step/g-ap214/Comb.cpp @@ -1,7 +1,7 @@ /* C O M B . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap214/G_Objects.cpp b/src/conv/step/g-ap214/G_Objects.cpp index 99977269d1f..e0fff939ab6 100644 --- a/src/conv/step/g-ap214/G_Objects.cpp +++ b/src/conv/step/g-ap214/G_Objects.cpp @@ -1,7 +1,7 @@ /* G _ O B J E C T S . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap214/Shape_Definition_Representation.cpp b/src/conv/step/g-ap214/Shape_Definition_Representation.cpp index 3771a5ce244..4bfddf1a74f 100644 --- a/src/conv/step/g-ap214/Shape_Definition_Representation.cpp +++ b/src/conv/step/g-ap214/Shape_Definition_Representation.cpp @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap214/g-ap214.cpp b/src/conv/step/g-ap214/g-ap214.cpp index cd0eb88bb66..839d68af577 100644 --- a/src/conv/step/g-ap214/g-ap214.cpp +++ b/src/conv/step/g-ap214/g-ap214.cpp @@ -1,7 +1,7 @@ /* G - A P 2 1 4 . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap242/AP242.h b/src/conv/step/g-ap242/AP242.h index 81f39c124b5..832b0cf52b2 100644 --- a/src/conv/step/g-ap242/AP242.h +++ b/src/conv/step/g-ap242/AP242.h @@ -1,7 +1,7 @@ /* A P 2 4 2 . h * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-ap242/CMakeLists.txt b/src/conv/step/g-ap242/CMakeLists.txt index be85f55d8ab..8f3bc505521 100644 --- a/src/conv/step/g-ap242/CMakeLists.txt +++ b/src/conv/step/g-ap242/CMakeLists.txt @@ -2,8 +2,12 @@ set(AP242_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../g-step + ${STEPCODE_INCLUDE_DIRS} ${OPENNURBS_INCLUDE_DIRS} ) + +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) + BRLCAD_INCLUDE_DIRS(AP242_INCLUDE_DIRS) set(STEP_SCHEMA_FILE ${CMAKE_CURRENT_SOURCE_DIR}/../../../other/stepcode/data/ap242/ap242e1.exp) diff --git a/src/conv/step/g-ap242/g-ap242.cpp b/src/conv/step/g-ap242/g-ap242.cpp index a40fca15511..a1e0e53be94 100644 --- a/src/conv/step/g-ap242/g-ap242.cpp +++ b/src/conv/step/g-ap242/g-ap242.cpp @@ -1,7 +1,7 @@ /* G - A P 2 4 2 . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/AP203.cpp b/src/conv/step/g-step/AP203.cpp index 429142b134b..aa5f4a36ccd 100644 --- a/src/conv/step/g-step/AP203.cpp +++ b/src/conv/step/g-step/AP203.cpp @@ -1,7 +1,7 @@ /* G _ S T E P _ U T I L . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/AP203.h b/src/conv/step/g-step/AP203.h index b5fea1807df..3de51814035 100644 --- a/src/conv/step/g-step/AP203.h +++ b/src/conv/step/g-step/AP203.h @@ -1,7 +1,7 @@ /* A P 2 0 3 . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Assembly_Product.cpp b/src/conv/step/g-step/Assembly_Product.cpp index bbf0ce38ae2..b1c4ff46e85 100644 --- a/src/conv/step/g-step/Assembly_Product.cpp +++ b/src/conv/step/g-step/Assembly_Product.cpp @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Assembly_Product.h b/src/conv/step/g-step/Assembly_Product.h index b7a1f7f5913..ca64b39ae15 100644 --- a/src/conv/step/g-step/Assembly_Product.h +++ b/src/conv/step/g-step/Assembly_Product.h @@ -1,7 +1,7 @@ /* Assembly_Product.h * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/CMakeLists.txt b/src/conv/step/g-step/CMakeLists.txt index 0068a4bf54e..e9f20bc15bb 100644 --- a/src/conv/step/g-step/CMakeLists.txt +++ b/src/conv/step/g-step/CMakeLists.txt @@ -2,9 +2,12 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${STEPCODE_INCLUDE_DIRS} ) -set(STEP_SCHEMA_FILE ${STEPCODE_DIR}/data/ap203/ap203.exp) +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) + +set(STEP_SCHEMA_FILE ${CMAKE_SOURCE_DIR}/src/other/stepcode/data/ap203/ap203.exp) add_definitions(-DAP203) GENERATE_SCHEMA_INPUTS(${STEP_SCHEMA_FILE} gstep) @@ -26,39 +29,42 @@ set(gstep_SOURCES Trees.cpp g-step.cpp ) +CMAKEFILES(${gstep_SOURCES}) -set(gstep_LIBS - libwdb - librt - libbrep - libbn - libbu - steputils - stepeditor - stepdai - stepcore - ${OPENNURBS_LIBRARIES} - ) -list(APPEND gstep_LIBS ${gstep_LIBS}) +if (BRLCAD_ENABLE_STEP) + set(gstep_LIBS + libwdb + librt + libbrep + libbn + libbu + steputils + stepeditor + stepdai + stepcore + ${OPENNURBS_LIBRARIES} + ) -BRLCAD_ADDEXEC(g-step "${gstep_SOURCES}" "${gstep_LIBS}" NO_STRICT) -add_dependencies(g-step step-express-${SCHEMA_NAME}-gstep) -set_property(TARGET g-step APPEND PROPERTY INCLUDE_DIRECTORIES "${gstep_SCHEMA_OUT_DIR}") + BRLCAD_ADDEXEC(g-step "${gstep_SOURCES}" "${gstep_LIBS}" NO_STRICT) + add_dependencies(g-step step-express-${SCHEMA_NAME}-gstep) + set_property(TARGET g-step APPEND PROPERTY INCLUDE_DIRECTORIES "${gstep_SCHEMA_OUT_DIR}") + target_compile_definitions(g-step PRIVATE SC_SCHEMA_DLL_EXPORTS) -if (HIDE_INTERNAL_SYMBOLS) - set(gstep_IMPORTS - BU_DLL_IMPORTS - BN_DLL_IMPORTS - RT_DLL_IMPORTS - WDB_DLL_IMPORTS - SC_CORE_DLL_IMPORTS - SC_DAI_DLL_IMPORTS - SC_EDITOR_DLL_IMPORTS - SC_UTILS_DLL_IMPORTS - ) - list(APPEND gstep_IMPORTS ${gstep_IMPORTS}) - set_property(TARGET g-step APPEND PROPERTY COMPILE_DEFINITIONS "${gstep_IMPORTS}") -endif (HIDE_INTERNAL_SYMBOLS) + if (HIDE_INTERNAL_SYMBOLS) + set(gstep_IMPORTS + BU_DLL_IMPORTS + BN_DLL_IMPORTS + RT_DLL_IMPORTS + WDB_DLL_IMPORTS + SC_CORE_DLL_IMPORTS + SC_DAI_DLL_IMPORTS + SC_EDITOR_DLL_IMPORTS + SC_UTILS_DLL_IMPORTS + ) + list(APPEND gstep_IMPORTS ${gstep_IMPORTS}) + set_property(TARGET g-step APPEND PROPERTY COMPILE_DEFINITIONS "${gstep_IMPORTS}") + endif (HIDE_INTERNAL_SYMBOLS) +endif (BRLCAD_ENABLE_STEP) set(IGNORE_FILES CMakeLists.txt diff --git a/src/conv/step/g-step/Comb.cpp b/src/conv/step/g-step/Comb.cpp index 1f200f8d5d3..261cf76b261 100644 --- a/src/conv/step/g-step/Comb.cpp +++ b/src/conv/step/g-step/Comb.cpp @@ -1,7 +1,7 @@ /* C O M B . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Comb.h b/src/conv/step/g-step/Comb.h index 74cc01b6e6f..2c8a7abc8f7 100644 --- a/src/conv/step/g-step/Comb.h +++ b/src/conv/step/g-step/Comb.h @@ -1,7 +1,7 @@ /* Comb.h * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Default_Geometric_Context.cpp b/src/conv/step/g-step/Default_Geometric_Context.cpp index c46ca051a37..e529d651564 100644 --- a/src/conv/step/g-step/Default_Geometric_Context.cpp +++ b/src/conv/step/g-step/Default_Geometric_Context.cpp @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Default_Geometric_Context.h b/src/conv/step/g-step/Default_Geometric_Context.h index 40898644b28..82aa9ff6ae7 100644 --- a/src/conv/step/g-step/Default_Geometric_Context.h +++ b/src/conv/step/g-step/Default_Geometric_Context.h @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/G_Objects.cpp b/src/conv/step/g-step/G_Objects.cpp index 9dc563b78d1..a7d3518d6c2 100644 --- a/src/conv/step/g-step/G_Objects.cpp +++ b/src/conv/step/g-step/G_Objects.cpp @@ -1,7 +1,7 @@ /* G _ O B J E C T S . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/G_Objects.h b/src/conv/step/g-step/G_Objects.h index 34d273b617c..6e3cd53769e 100644 --- a/src/conv/step/g-step/G_Objects.h +++ b/src/conv/step/g-step/G_Objects.h @@ -1,7 +1,7 @@ /* G _ O B J E C T S . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/ON_Brep.cpp b/src/conv/step/g-step/ON_Brep.cpp index 908bdc71c07..d95f23ee871 100644 --- a/src/conv/step/g-step/ON_Brep.cpp +++ b/src/conv/step/g-step/ON_Brep.cpp @@ -1,7 +1,7 @@ /* O N _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/ON_Brep.h b/src/conv/step/g-step/ON_Brep.h index 908090e4187..fac99c7ae8b 100644 --- a/src/conv/step/g-step/ON_Brep.h +++ b/src/conv/step/g-step/ON_Brep.h @@ -1,7 +1,7 @@ /* ON_Brep.h * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/ON_NurbsCurve.cpp b/src/conv/step/g-step/ON_NurbsCurve.cpp index 03d487e9449..6de7ea671ba 100644 --- a/src/conv/step/g-step/ON_NurbsCurve.cpp +++ b/src/conv/step/g-step/ON_NurbsCurve.cpp @@ -1,7 +1,7 @@ /* O N _ N U R B S C U R V E . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/ON_NurbsSurface.cpp b/src/conv/step/g-step/ON_NurbsSurface.cpp index e69580df858..9baa7c26ac9 100644 --- a/src/conv/step/g-step/ON_NurbsSurface.cpp +++ b/src/conv/step/g-step/ON_NurbsSurface.cpp @@ -1,7 +1,7 @@ /* O N _ N U R B S S U R F A C E . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Shape_Definition_Representation.cpp b/src/conv/step/g-step/Shape_Definition_Representation.cpp index 64131b56145..22ae7864f8b 100644 --- a/src/conv/step/g-step/Shape_Definition_Representation.cpp +++ b/src/conv/step/g-step/Shape_Definition_Representation.cpp @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Shape_Definition_Representation.h b/src/conv/step/g-step/Shape_Definition_Representation.h index f18d35b7811..0d71bc51c85 100644 --- a/src/conv/step/g-step/Shape_Definition_Representation.h +++ b/src/conv/step/g-step/Shape_Definition_Representation.h @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Shape_Representation.cpp b/src/conv/step/g-step/Shape_Representation.cpp index 763704b908f..99353575f9f 100644 --- a/src/conv/step/g-step/Shape_Representation.cpp +++ b/src/conv/step/g-step/Shape_Representation.cpp @@ -1,7 +1,7 @@ /* S H A P E _ R E P R E S E N T A T I O N . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Shape_Representation.h b/src/conv/step/g-step/Shape_Representation.h index 07517a22815..e70d85a5844 100644 --- a/src/conv/step/g-step/Shape_Representation.h +++ b/src/conv/step/g-step/Shape_Representation.h @@ -1,7 +1,7 @@ /* S H A P E _ R E P R E S E N T A T I O N . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Shape_Representation_Relationship.cpp b/src/conv/step/g-step/Shape_Representation_Relationship.cpp index bb3182390ee..0cd2348783b 100644 --- a/src/conv/step/g-step/Shape_Representation_Relationship.cpp +++ b/src/conv/step/g-step/Shape_Representation_Relationship.cpp @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Shape_Representation_Relationship.h b/src/conv/step/g-step/Shape_Representation_Relationship.h index 8b87d6ba525..0040344044a 100644 --- a/src/conv/step/g-step/Shape_Representation_Relationship.h +++ b/src/conv/step/g-step/Shape_Representation_Relationship.h @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Trees.cpp b/src/conv/step/g-step/Trees.cpp index b6b4fb45c85..2cf5821df2c 100644 --- a/src/conv/step/g-step/Trees.cpp +++ b/src/conv/step/g-step/Trees.cpp @@ -1,7 +1,7 @@ /* T R E E S . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/Trees.h b/src/conv/step/g-step/Trees.h index 7633d65cf1c..3e1a381799c 100644 --- a/src/conv/step/g-step/Trees.h +++ b/src/conv/step/g-step/Trees.h @@ -1,7 +1,7 @@ /* T R E E S . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/g-step/g-step.cpp b/src/conv/step/g-step/g-step.cpp index a45267b349f..f711ab1c5b5 100644 --- a/src/conv/step/g-step/g-step.cpp +++ b/src/conv/step/g-step/g-step.cpp @@ -1,7 +1,7 @@ /* G - S T E P . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/ifc-g/CMakeLists.txt b/src/conv/step/ifc-g/CMakeLists.txt index 73084c856cf..5d4610fc330 100644 --- a/src/conv/step/ifc-g/CMakeLists.txt +++ b/src/conv/step/ifc-g/CMakeLists.txt @@ -1,8 +1,12 @@ set(IFC_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${STEPCODE_INCLUDE_DIRS} ${OPENNURBS_INCLUDE_DIRS} ) + +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) + BRLCAD_INCLUDE_DIRS(IFC_INCLUDE_DIRS) set(IFC_SCHEMA_FILE ${STEPCODE_DIR}/data/ifc4/IFC4.exp) diff --git a/src/conv/step/ifc-g/IFCWrapper.cpp b/src/conv/step/ifc-g/IFCWrapper.cpp index d5a30768876..a9b8e0ad5f3 100644 --- a/src/conv/step/ifc-g/IFCWrapper.cpp +++ b/src/conv/step/ifc-g/IFCWrapper.cpp @@ -1,7 +1,7 @@ /* I F C W R A P P E R . C P P * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/ifc-g/IFCWrapper.h b/src/conv/step/ifc-g/IFCWrapper.h index 8f171b468e6..81317c6b034 100644 --- a/src/conv/step/ifc-g/IFCWrapper.h +++ b/src/conv/step/ifc-g/IFCWrapper.h @@ -1,7 +1,7 @@ /* I F C W R A P P E R . H * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/ifc-g/ifc-g.cpp b/src/conv/step/ifc-g/ifc-g.cpp index 00c8e536d8f..ba997876e89 100644 --- a/src/conv/step/ifc-g/ifc-g.cpp +++ b/src/conv/step/ifc-g/ifc-g.cpp @@ -1,7 +1,7 @@ /* I F C - G . C P P * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AdvancedBrepShapeRepresentation.cpp b/src/conv/step/step-g/AdvancedBrepShapeRepresentation.cpp index fc94663a77e..601ffd3ba4f 100644 --- a/src/conv/step/step-g/AdvancedBrepShapeRepresentation.cpp +++ b/src/conv/step/step-g/AdvancedBrepShapeRepresentation.cpp @@ -1,7 +1,7 @@ /* AdvancedBrepShapeRepresentation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AdvancedBrepShapeRepresentation.h b/src/conv/step/step-g/AdvancedBrepShapeRepresentation.h index d86397c5fc1..3e6ee8a6768 100644 --- a/src/conv/step/step-g/AdvancedBrepShapeRepresentation.h +++ b/src/conv/step/step-g/AdvancedBrepShapeRepresentation.h @@ -1,7 +1,7 @@ /* AdvancedBrepShapeRepresentation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AdvancedFace.cpp b/src/conv/step/step-g/AdvancedFace.cpp index 5ce914d942e..139dcd22dd0 100644 --- a/src/conv/step/step-g/AdvancedFace.cpp +++ b/src/conv/step/step-g/AdvancedFace.cpp @@ -1,7 +1,7 @@ /* AdvancedFace.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AdvancedFace.h b/src/conv/step/step-g/AdvancedFace.h index 06b7ee784c8..e952acad199 100644 --- a/src/conv/step/step-g/AdvancedFace.h +++ b/src/conv/step/step-g/AdvancedFace.h @@ -1,7 +1,7 @@ /* AdvancedFace.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AmountOfSubstanceContextDependentUnit.cpp b/src/conv/step/step-g/AmountOfSubstanceContextDependentUnit.cpp index b24d3c52f21..71b031f9405 100644 --- a/src/conv/step/step-g/AmountOfSubstanceContextDependentUnit.cpp +++ b/src/conv/step/step-g/AmountOfSubstanceContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* AmountOfSubstanceContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AmountOfSubstanceContextDependentUnit.h b/src/conv/step/step-g/AmountOfSubstanceContextDependentUnit.h index 84fdafb373b..6c92d22dd3e 100644 --- a/src/conv/step/step-g/AmountOfSubstanceContextDependentUnit.h +++ b/src/conv/step/step-g/AmountOfSubstanceContextDependentUnit.h @@ -1,7 +1,7 @@ /* AmountOfSubstanceContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AmountOfSubstanceConversionBasedUnit.cpp b/src/conv/step/step-g/AmountOfSubstanceConversionBasedUnit.cpp index 37dea1386c4..c629fd93576 100644 --- a/src/conv/step/step-g/AmountOfSubstanceConversionBasedUnit.cpp +++ b/src/conv/step/step-g/AmountOfSubstanceConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* AmountOfSubstanceConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AmountOfSubstanceConversionBasedUnit.h b/src/conv/step/step-g/AmountOfSubstanceConversionBasedUnit.h index 50b26576293..bba07749fbb 100644 --- a/src/conv/step/step-g/AmountOfSubstanceConversionBasedUnit.h +++ b/src/conv/step/step-g/AmountOfSubstanceConversionBasedUnit.h @@ -1,7 +1,7 @@ /* AmountOfSubstanceConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AmountOfSubstanceSiUnit.cpp b/src/conv/step/step-g/AmountOfSubstanceSiUnit.cpp index 6df973e5ea8..ccba5621098 100644 --- a/src/conv/step/step-g/AmountOfSubstanceSiUnit.cpp +++ b/src/conv/step/step-g/AmountOfSubstanceSiUnit.cpp @@ -1,7 +1,7 @@ /* AmountOfSubstanceSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AmountOfSubstanceSiUnit.h b/src/conv/step/step-g/AmountOfSubstanceSiUnit.h index e557399098e..a0d54b5145f 100644 --- a/src/conv/step/step-g/AmountOfSubstanceSiUnit.h +++ b/src/conv/step/step-g/AmountOfSubstanceSiUnit.h @@ -1,7 +1,7 @@ /* AmountOfSubstanceSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AmountOfSubstanceUnit.cpp b/src/conv/step/step-g/AmountOfSubstanceUnit.cpp index a4604b1b6f2..e8d8091d258 100644 --- a/src/conv/step/step-g/AmountOfSubstanceUnit.cpp +++ b/src/conv/step/step-g/AmountOfSubstanceUnit.cpp @@ -1,7 +1,7 @@ /* AmountOfSubstanceUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AmountOfSubstanceUnit.h b/src/conv/step/step-g/AmountOfSubstanceUnit.h index 49edd4c4843..9b46492748c 100644 --- a/src/conv/step/step-g/AmountOfSubstanceUnit.h +++ b/src/conv/step/step-g/AmountOfSubstanceUnit.h @@ -1,7 +1,7 @@ /* AmountOfSubstanceUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ApplicationContext.cpp b/src/conv/step/step-g/ApplicationContext.cpp index 62056f6eff6..ab110cb89e0 100644 --- a/src/conv/step/step-g/ApplicationContext.cpp +++ b/src/conv/step/step-g/ApplicationContext.cpp @@ -1,7 +1,7 @@ /* ApplicationContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ApplicationContext.h b/src/conv/step/step-g/ApplicationContext.h index 3e53af98318..391de339e3a 100644 --- a/src/conv/step/step-g/ApplicationContext.h +++ b/src/conv/step/step-g/ApplicationContext.h @@ -1,7 +1,7 @@ /* ApplicationContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ApplicationContextElement.cpp b/src/conv/step/step-g/ApplicationContextElement.cpp index f2c6b6802cc..118c927d6fb 100644 --- a/src/conv/step/step-g/ApplicationContextElement.cpp +++ b/src/conv/step/step-g/ApplicationContextElement.cpp @@ -1,7 +1,7 @@ /* ApplicationContextElement.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ApplicationContextElement.h b/src/conv/step/step-g/ApplicationContextElement.h index b8d166e1857..36e5d89c714 100644 --- a/src/conv/step/step-g/ApplicationContextElement.h +++ b/src/conv/step/step-g/ApplicationContextElement.h @@ -1,7 +1,7 @@ /* ApplicationContextElement.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AreaContextDependentUnit.cpp b/src/conv/step/step-g/AreaContextDependentUnit.cpp index 2fcdb974f94..8f01e6a2d8e 100644 --- a/src/conv/step/step-g/AreaContextDependentUnit.cpp +++ b/src/conv/step/step-g/AreaContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* AreaContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AreaContextDependentUnit.h b/src/conv/step/step-g/AreaContextDependentUnit.h index e2bb0a318ad..cd98e3b5a42 100644 --- a/src/conv/step/step-g/AreaContextDependentUnit.h +++ b/src/conv/step/step-g/AreaContextDependentUnit.h @@ -1,7 +1,7 @@ /* AreaContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AreaConversionBasedUnit.cpp b/src/conv/step/step-g/AreaConversionBasedUnit.cpp index ee11cc837a8..623c893d2be 100644 --- a/src/conv/step/step-g/AreaConversionBasedUnit.cpp +++ b/src/conv/step/step-g/AreaConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* AreaConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AreaConversionBasedUnit.h b/src/conv/step/step-g/AreaConversionBasedUnit.h index e4c8aa86fa7..92cc72729e9 100644 --- a/src/conv/step/step-g/AreaConversionBasedUnit.h +++ b/src/conv/step/step-g/AreaConversionBasedUnit.h @@ -1,7 +1,7 @@ /* AreaConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AreaSiUnit.cpp b/src/conv/step/step-g/AreaSiUnit.cpp index cf995b94be2..3c6287a8ddb 100644 --- a/src/conv/step/step-g/AreaSiUnit.cpp +++ b/src/conv/step/step-g/AreaSiUnit.cpp @@ -1,7 +1,7 @@ /* AreaSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AreaSiUnit.h b/src/conv/step/step-g/AreaSiUnit.h index d74671b362f..d5940037eee 100644 --- a/src/conv/step/step-g/AreaSiUnit.h +++ b/src/conv/step/step-g/AreaSiUnit.h @@ -1,7 +1,7 @@ /* AreaSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AreaUnit.cpp b/src/conv/step/step-g/AreaUnit.cpp index dc51c7798da..1e7c840695b 100644 --- a/src/conv/step/step-g/AreaUnit.cpp +++ b/src/conv/step/step-g/AreaUnit.cpp @@ -1,7 +1,7 @@ /* AreaUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AreaUnit.h b/src/conv/step/step-g/AreaUnit.h index f42499b72de..df81baefa5e 100644 --- a/src/conv/step/step-g/AreaUnit.h +++ b/src/conv/step/step-g/AreaUnit.h @@ -1,7 +1,7 @@ /* AreaUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AssemblyComponentUsage.cpp b/src/conv/step/step-g/AssemblyComponentUsage.cpp index 9e4822eb454..7bf07a99503 100644 --- a/src/conv/step/step-g/AssemblyComponentUsage.cpp +++ b/src/conv/step/step-g/AssemblyComponentUsage.cpp @@ -1,7 +1,7 @@ /* AssemblyComponentUsage.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/AssemblyComponentUsage.h b/src/conv/step/step-g/AssemblyComponentUsage.h index 19d0d13639a..7f54be9d919 100644 --- a/src/conv/step/step-g/AssemblyComponentUsage.h +++ b/src/conv/step/step-g/AssemblyComponentUsage.h @@ -1,7 +1,7 @@ /* AssemblyComponentUsage.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Axis1Placement.cpp b/src/conv/step/step-g/Axis1Placement.cpp index 55e628e7a33..8a6b2905680 100644 --- a/src/conv/step/step-g/Axis1Placement.cpp +++ b/src/conv/step/step-g/Axis1Placement.cpp @@ -1,7 +1,7 @@ /* Axis1Placement.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Axis1Placement.h b/src/conv/step/step-g/Axis1Placement.h index 941c1609ba3..dde11de9c41 100644 --- a/src/conv/step/step-g/Axis1Placement.h +++ b/src/conv/step/step-g/Axis1Placement.h @@ -1,7 +1,7 @@ /* Axis1Placement.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Axis2Placement.cpp b/src/conv/step/step-g/Axis2Placement.cpp index de619562dba..5093aa6f3a5 100644 --- a/src/conv/step/step-g/Axis2Placement.cpp +++ b/src/conv/step/step-g/Axis2Placement.cpp @@ -1,7 +1,7 @@ /* Axis2Placement.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Axis2Placement.h b/src/conv/step/step-g/Axis2Placement.h index 2dd561b09aa..38b3e4fc2cc 100644 --- a/src/conv/step/step-g/Axis2Placement.h +++ b/src/conv/step/step-g/Axis2Placement.h @@ -1,7 +1,7 @@ /* Axis2Placement.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Axis2Placement2D.cpp b/src/conv/step/step-g/Axis2Placement2D.cpp index 30cef53a8f8..dc86ee0dbcb 100644 --- a/src/conv/step/step-g/Axis2Placement2D.cpp +++ b/src/conv/step/step-g/Axis2Placement2D.cpp @@ -1,7 +1,7 @@ /* Axis2Placement2D.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Axis2Placement2D.h b/src/conv/step/step-g/Axis2Placement2D.h index f85098e94d9..9779d4ca0cd 100644 --- a/src/conv/step/step-g/Axis2Placement2D.h +++ b/src/conv/step/step-g/Axis2Placement2D.h @@ -1,7 +1,7 @@ /* Axis2Placement2D.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Axis2Placement3D.cpp b/src/conv/step/step-g/Axis2Placement3D.cpp index ca370c7e55b..7f75be2f9b1 100644 --- a/src/conv/step/step-g/Axis2Placement3D.cpp +++ b/src/conv/step/step-g/Axis2Placement3D.cpp @@ -1,7 +1,7 @@ /* Axis2Placement3D.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Axis2Placement3D.h b/src/conv/step/step-g/Axis2Placement3D.h index 5af2f4fb134..cd72368c6f1 100644 --- a/src/conv/step/step-g/Axis2Placement3D.h +++ b/src/conv/step/step-g/Axis2Placement3D.h @@ -1,7 +1,7 @@ /* Axis2Placement3D.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BSplineCurve.cpp b/src/conv/step/step-g/BSplineCurve.cpp index df54cb4ddb6..91902bb18b1 100644 --- a/src/conv/step/step-g/BSplineCurve.cpp +++ b/src/conv/step/step-g/BSplineCurve.cpp @@ -1,7 +1,7 @@ /* BSplineCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BSplineCurve.h b/src/conv/step/step-g/BSplineCurve.h index 54798189b20..83c5d6cd915 100644 --- a/src/conv/step/step-g/BSplineCurve.h +++ b/src/conv/step/step-g/BSplineCurve.h @@ -1,7 +1,7 @@ /* BSplineCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BSplineCurveWithKnots.cpp b/src/conv/step/step-g/BSplineCurveWithKnots.cpp index d9e743b285b..b3e236da8df 100644 --- a/src/conv/step/step-g/BSplineCurveWithKnots.cpp +++ b/src/conv/step/step-g/BSplineCurveWithKnots.cpp @@ -1,7 +1,7 @@ /* BSplineCurveWithKnots.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BSplineCurveWithKnots.h b/src/conv/step/step-g/BSplineCurveWithKnots.h index 176983c30b1..f126c6656a2 100644 --- a/src/conv/step/step-g/BSplineCurveWithKnots.h +++ b/src/conv/step/step-g/BSplineCurveWithKnots.h @@ -1,7 +1,7 @@ /* BSplineCurveWithKnots.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BSplineSurface.cpp b/src/conv/step/step-g/BSplineSurface.cpp index 89a5fa17d8f..bb7698a5c53 100644 --- a/src/conv/step/step-g/BSplineSurface.cpp +++ b/src/conv/step/step-g/BSplineSurface.cpp @@ -1,7 +1,7 @@ /* BSplineSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BSplineSurface.h b/src/conv/step/step-g/BSplineSurface.h index e2ef9880427..142812881d6 100644 --- a/src/conv/step/step-g/BSplineSurface.h +++ b/src/conv/step/step-g/BSplineSurface.h @@ -1,7 +1,7 @@ /* BSplineSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BSplineSurfaceWithKnots.cpp b/src/conv/step/step-g/BSplineSurfaceWithKnots.cpp index ff4ba57a348..fba1b27f367 100644 --- a/src/conv/step/step-g/BSplineSurfaceWithKnots.cpp +++ b/src/conv/step/step-g/BSplineSurfaceWithKnots.cpp @@ -1,7 +1,7 @@ /* BSplineSurfaceWithKnots.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BSplineSurfaceWithKnots.h b/src/conv/step/step-g/BSplineSurfaceWithKnots.h index 3acbd88ee21..4edf782d74e 100644 --- a/src/conv/step/step-g/BSplineSurfaceWithKnots.h +++ b/src/conv/step/step-g/BSplineSurfaceWithKnots.h @@ -1,7 +1,7 @@ /* BSplineCurveWithKnots.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BezierCurve.cpp b/src/conv/step/step-g/BezierCurve.cpp index 0f690e19c9d..186cfd7a074 100644 --- a/src/conv/step/step-g/BezierCurve.cpp +++ b/src/conv/step/step-g/BezierCurve.cpp @@ -1,7 +1,7 @@ /* BezierCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BezierCurve.h b/src/conv/step/step-g/BezierCurve.h index dc3644ad665..6ba708cad6f 100644 --- a/src/conv/step/step-g/BezierCurve.h +++ b/src/conv/step/step-g/BezierCurve.h @@ -1,7 +1,7 @@ /* BezierCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BezierSurface.cpp b/src/conv/step/step-g/BezierSurface.cpp index b26a812fe00..a68d3bbffcd 100644 --- a/src/conv/step/step-g/BezierSurface.cpp +++ b/src/conv/step/step-g/BezierSurface.cpp @@ -1,7 +1,7 @@ /* BezierSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BezierSurface.h b/src/conv/step/step-g/BezierSurface.h index 367f442d166..35ae1e36854 100644 --- a/src/conv/step/step-g/BezierSurface.h +++ b/src/conv/step/step-g/BezierSurface.h @@ -1,7 +1,7 @@ /* BezierSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundaryCurve.cpp b/src/conv/step/step-g/BoundaryCurve.cpp index 04801ebd694..674f8b5c96e 100644 --- a/src/conv/step/step-g/BoundaryCurve.cpp +++ b/src/conv/step/step-g/BoundaryCurve.cpp @@ -1,7 +1,7 @@ /* BoundaryCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundaryCurve.h b/src/conv/step/step-g/BoundaryCurve.h index c470052332b..5822c54f8e5 100644 --- a/src/conv/step/step-g/BoundaryCurve.h +++ b/src/conv/step/step-g/BoundaryCurve.h @@ -1,7 +1,7 @@ /* BoundaryCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundedCurve.cpp b/src/conv/step/step-g/BoundedCurve.cpp index c5ae6fd8dfa..14b964233bb 100644 --- a/src/conv/step/step-g/BoundedCurve.cpp +++ b/src/conv/step/step-g/BoundedCurve.cpp @@ -1,7 +1,7 @@ /* BoundedCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundedCurve.h b/src/conv/step/step-g/BoundedCurve.h index 04c4fe18e04..b614c81a691 100644 --- a/src/conv/step/step-g/BoundedCurve.h +++ b/src/conv/step/step-g/BoundedCurve.h @@ -1,7 +1,7 @@ /* BoundedCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundedPCurve.cpp b/src/conv/step/step-g/BoundedPCurve.cpp index 92ae7117892..01744bbf6c5 100644 --- a/src/conv/step/step-g/BoundedPCurve.cpp +++ b/src/conv/step/step-g/BoundedPCurve.cpp @@ -1,7 +1,7 @@ /* BoundedPCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundedPCurve.h b/src/conv/step/step-g/BoundedPCurve.h index e91a7d96c96..e7c7bb4b90b 100644 --- a/src/conv/step/step-g/BoundedPCurve.h +++ b/src/conv/step/step-g/BoundedPCurve.h @@ -1,7 +1,7 @@ /* BoundedPCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundedSurface.cpp b/src/conv/step/step-g/BoundedSurface.cpp index cadc485bff0..c00abcbdee0 100644 --- a/src/conv/step/step-g/BoundedSurface.cpp +++ b/src/conv/step/step-g/BoundedSurface.cpp @@ -1,7 +1,7 @@ /* BoundedSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundedSurface.h b/src/conv/step/step-g/BoundedSurface.h index d1f876d67fd..021b82644a9 100644 --- a/src/conv/step/step-g/BoundedSurface.h +++ b/src/conv/step/step-g/BoundedSurface.h @@ -1,7 +1,7 @@ /* BoundedSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundedSurfaceCurve.cpp b/src/conv/step/step-g/BoundedSurfaceCurve.cpp index 9a4944088ef..da2a4afa613 100644 --- a/src/conv/step/step-g/BoundedSurfaceCurve.cpp +++ b/src/conv/step/step-g/BoundedSurfaceCurve.cpp @@ -1,7 +1,7 @@ /* BoundedSurfaceCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BoundedSurfaceCurve.h b/src/conv/step/step-g/BoundedSurfaceCurve.h index b5d923d0706..56a48acac89 100644 --- a/src/conv/step/step-g/BoundedSurfaceCurve.h +++ b/src/conv/step/step-g/BoundedSurfaceCurve.h @@ -1,7 +1,7 @@ /* BoundedSurfaceCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BrepWithVoids.cpp b/src/conv/step/step-g/BrepWithVoids.cpp index e2a853fa385..c4c3e0a5977 100644 --- a/src/conv/step/step-g/BrepWithVoids.cpp +++ b/src/conv/step/step-g/BrepWithVoids.cpp @@ -1,7 +1,7 @@ /* BrepWithVoids.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/BrepWithVoids.h b/src/conv/step/step-g/BrepWithVoids.h index c97126fa619..344a9698a86 100644 --- a/src/conv/step/step-g/BrepWithVoids.h +++ b/src/conv/step/step-g/BrepWithVoids.h @@ -1,7 +1,7 @@ /* ManifoldSolidBrep.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CMakeLists.txt b/src/conv/step/step-g/CMakeLists.txt index 9cf49b761ce..4f689b71dc6 100644 --- a/src/conv/step/step-g/CMakeLists.txt +++ b/src/conv/step/step-g/CMakeLists.txt @@ -2,10 +2,13 @@ set(AP203_INCLUDE_DIRS ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} ${OPENNURBS_INCLUDE_DIRS} + ${STEPCODE_INCLUDE_DIRS} ) BRLCAD_INCLUDE_DIRS(AP203_INCLUDE_DIRS) -set(STEP_SCHEMA_FILE ${STEPCODE_DIR}/data/ap203/ap203.exp) +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) + +set(STEP_SCHEMA_FILE ${CMAKE_SOURCE_DIR}/src/other/stepcode/data/ap203/ap203.exp) add_definitions(-DAP203) #set(STEP_SCHEMA_FILE ${STEPCODE_DIR}/data/ap203e2/ap203e2_mim_lf.exp) #add_definitions(-DAP203e2) @@ -233,6 +236,7 @@ set(stepg_SOURCES VolumeUnit.cpp step-g.cpp ) +CMAKEFILES(${stepg_SOURCES}) set(stepg_HDRS AdvancedBrepShapeRepresentation.h @@ -452,29 +456,31 @@ set(stepg_HDRS ) CMAKEFILES(${stepg_HDRS}) -set(stepg_LIBS - libwdb - librt - libbu - libbrep - steputils - stepeditor - stepdai - stepcore - ${OPENNURBS_LIBRARIES} - ) -list(APPEND stepg_LIBS ${stepg_LIBS}) +if (BRLCAD_ENABLE_STEP) + set(stepg_LIBS + libwdb + librt + libbu + libbrep + steputils + stepeditor + stepdai + stepcore + ${OPENNURBS_LIBRARIES} + ) -BRLCAD_ADDEXEC(step-g "${stepg_SOURCES}" "${stepg_LIBS}" NO_STRICT) -add_dependencies(step-g step-express-${SCHEMA_NAME}-stepg) -set_property(TARGET step-g APPEND PROPERTY INCLUDE_DIRECTORIES "${stepg_SCHEMA_OUT_DIR}") + BRLCAD_ADDEXEC(step-g "${stepg_SOURCES}" "${stepg_LIBS}" NO_STRICT) + add_dependencies(step-g step-express-${SCHEMA_NAME}-stepg) + set_property(TARGET step-g APPEND PROPERTY INCLUDE_DIRECTORIES "${stepg_SCHEMA_OUT_DIR}") + target_compile_definitions(step-g PRIVATE SC_SCHEMA_DLL_EXPORTS) -if(HIDE_INTERNAL_SYMBOLS) - set(SCIMPORTS SC_CORE_DLL_IMPORTS SC_DAI_DLL_IMPORTS SC_EDITOR_DLL_IMPORTS SC_UTILS_DLL_IMPORTS ON_DLL_IMPORTS) - foreach(scp ${SCIMPORTS}) - set_property(TARGET step-g APPEND PROPERTY COMPILE_DEFINITIONS "${scp}") - endforeach(scp ${SCIMPORTS}) -endif(HIDE_INTERNAL_SYMBOLS) + if(HIDE_INTERNAL_SYMBOLS) + set(SCIMPORTS SC_CORE_DLL_IMPORTS SC_DAI_DLL_IMPORTS SC_EDITOR_DLL_IMPORTS SC_UTILS_DLL_IMPORTS ON_DLL_IMPORTS) + foreach(scp ${SCIMPORTS}) + set_property(TARGET step-g APPEND PROPERTY COMPILE_DEFINITIONS "${scp}") + endforeach(scp ${SCIMPORTS}) + endif(HIDE_INTERNAL_SYMBOLS) +endif (BRLCAD_ENABLE_STEP) CMAKEFILES(CMakeLists.txt) diff --git a/src/conv/step/step-g/CartesianPoint.cpp b/src/conv/step/step-g/CartesianPoint.cpp index 033b327363e..02868617184 100644 --- a/src/conv/step/step-g/CartesianPoint.cpp +++ b/src/conv/step/step-g/CartesianPoint.cpp @@ -1,7 +1,7 @@ /* CartesianPoint.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CartesianPoint.h b/src/conv/step/step-g/CartesianPoint.h index 2ab61e4010e..49feec02712 100644 --- a/src/conv/step/step-g/CartesianPoint.h +++ b/src/conv/step/step-g/CartesianPoint.h @@ -1,7 +1,7 @@ /* CartesianPoint.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CartesianTransformationOperator.cpp b/src/conv/step/step-g/CartesianTransformationOperator.cpp index b94bf3ddd03..6f2034c1196 100644 --- a/src/conv/step/step-g/CartesianTransformationOperator.cpp +++ b/src/conv/step/step-g/CartesianTransformationOperator.cpp @@ -1,7 +1,7 @@ /* CartesianTransformationOperator.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CartesianTransformationOperator.h b/src/conv/step/step-g/CartesianTransformationOperator.h index 9c68721db9d..a4e484c4040 100644 --- a/src/conv/step/step-g/CartesianTransformationOperator.h +++ b/src/conv/step/step-g/CartesianTransformationOperator.h @@ -1,7 +1,7 @@ /* CartesianTransformationOperator.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CartesianTransformationOperator2D.cpp b/src/conv/step/step-g/CartesianTransformationOperator2D.cpp index 4aa9e7f53e7..54e8166b07c 100644 --- a/src/conv/step/step-g/CartesianTransformationOperator2D.cpp +++ b/src/conv/step/step-g/CartesianTransformationOperator2D.cpp @@ -1,7 +1,7 @@ /* CartesianTransformationOperator2D.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CartesianTransformationOperator2D.h b/src/conv/step/step-g/CartesianTransformationOperator2D.h index a490586cacd..49304566aa9 100644 --- a/src/conv/step/step-g/CartesianTransformationOperator2D.h +++ b/src/conv/step/step-g/CartesianTransformationOperator2D.h @@ -1,7 +1,7 @@ /* CartesianTransformationOperator2D.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CartesianTransformationOperator3D.cpp b/src/conv/step/step-g/CartesianTransformationOperator3D.cpp index 212bebe6897..3f63c0599f8 100644 --- a/src/conv/step/step-g/CartesianTransformationOperator3D.cpp +++ b/src/conv/step/step-g/CartesianTransformationOperator3D.cpp @@ -1,7 +1,7 @@ /* CartesianTransformationOperator3D.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CartesianTransformationOperator3D.h b/src/conv/step/step-g/CartesianTransformationOperator3D.h index 1986c1a61b3..6d27e33fa42 100644 --- a/src/conv/step/step-g/CartesianTransformationOperator3D.h +++ b/src/conv/step/step-g/CartesianTransformationOperator3D.h @@ -1,7 +1,7 @@ /* CartesianTransformationOperator3D.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CharacterizedDefinition.cpp b/src/conv/step/step-g/CharacterizedDefinition.cpp index 885ac571d49..f143ba31557 100644 --- a/src/conv/step/step-g/CharacterizedDefinition.cpp +++ b/src/conv/step/step-g/CharacterizedDefinition.cpp @@ -1,7 +1,7 @@ /* CharacterizedDefinition.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CharacterizedDefinition.h b/src/conv/step/step-g/CharacterizedDefinition.h index e86d29125d0..5e2a6b96703 100644 --- a/src/conv/step/step-g/CharacterizedDefinition.h +++ b/src/conv/step/step-g/CharacterizedDefinition.h @@ -1,7 +1,7 @@ /* CharacterizedDefinition.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CharacterizedProductDefinition.cpp b/src/conv/step/step-g/CharacterizedProductDefinition.cpp index 684072121f4..7758a6171c6 100644 --- a/src/conv/step/step-g/CharacterizedProductDefinition.cpp +++ b/src/conv/step/step-g/CharacterizedProductDefinition.cpp @@ -1,7 +1,7 @@ /* CharacterizedProductDefinition.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CharacterizedProductDefinition.h b/src/conv/step/step-g/CharacterizedProductDefinition.h index 41b5f503c8b..2223f593c8f 100644 --- a/src/conv/step/step-g/CharacterizedProductDefinition.h +++ b/src/conv/step/step-g/CharacterizedProductDefinition.h @@ -1,7 +1,7 @@ /* CharacterizedDefinition.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Circle.cpp b/src/conv/step/step-g/Circle.cpp index 801591c58df..6a7079cfc55 100644 --- a/src/conv/step/step-g/Circle.cpp +++ b/src/conv/step/step-g/Circle.cpp @@ -1,7 +1,7 @@ /* Circle.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Circle.h b/src/conv/step/step-g/Circle.h index 194d003394b..c044a19b1f8 100644 --- a/src/conv/step/step-g/Circle.h +++ b/src/conv/step/step-g/Circle.h @@ -1,7 +1,7 @@ /* Circle.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ClosedShell.cpp b/src/conv/step/step-g/ClosedShell.cpp index d55f2e3672d..44a875609c4 100644 --- a/src/conv/step/step-g/ClosedShell.cpp +++ b/src/conv/step/step-g/ClosedShell.cpp @@ -1,7 +1,7 @@ /* ClosedShell.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ClosedShell.h b/src/conv/step/step-g/ClosedShell.h index 119aef1594e..e5e8f7f50fa 100644 --- a/src/conv/step/step-g/ClosedShell.h +++ b/src/conv/step/step-g/ClosedShell.h @@ -1,7 +1,7 @@ /* ClosedShell.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CompositeCurve.cpp b/src/conv/step/step-g/CompositeCurve.cpp index 42524845fb3..89a103c34c6 100644 --- a/src/conv/step/step-g/CompositeCurve.cpp +++ b/src/conv/step/step-g/CompositeCurve.cpp @@ -1,7 +1,7 @@ /* CompositeCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CompositeCurve.h b/src/conv/step/step-g/CompositeCurve.h index 1a5988af372..c5bdfb09be3 100644 --- a/src/conv/step/step-g/CompositeCurve.h +++ b/src/conv/step/step-g/CompositeCurve.h @@ -1,7 +1,7 @@ /* CompositeCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CompositeCurveOnSurface.cpp b/src/conv/step/step-g/CompositeCurveOnSurface.cpp index aa1caed2f9e..e8fb3bb6ef3 100644 --- a/src/conv/step/step-g/CompositeCurveOnSurface.cpp +++ b/src/conv/step/step-g/CompositeCurveOnSurface.cpp @@ -1,7 +1,7 @@ /* CompositeCurveOnSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CompositeCurveOnSurface.h b/src/conv/step/step-g/CompositeCurveOnSurface.h index 8b5f520233d..f5c21c0e9fa 100644 --- a/src/conv/step/step-g/CompositeCurveOnSurface.h +++ b/src/conv/step/step-g/CompositeCurveOnSurface.h @@ -1,7 +1,7 @@ /* CompositeCurveOnSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CompositeCurveSegment.cpp b/src/conv/step/step-g/CompositeCurveSegment.cpp index 3190f7234fa..375067b3e8d 100644 --- a/src/conv/step/step-g/CompositeCurveSegment.cpp +++ b/src/conv/step/step-g/CompositeCurveSegment.cpp @@ -1,7 +1,7 @@ /* CompositeCurveSegment.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CompositeCurveSegment.h b/src/conv/step/step-g/CompositeCurveSegment.h index 58f05ec899d..f326c70e17d 100644 --- a/src/conv/step/step-g/CompositeCurveSegment.h +++ b/src/conv/step/step-g/CompositeCurveSegment.h @@ -1,7 +1,7 @@ /* CompositeCurveSegment.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Conic.cpp b/src/conv/step/step-g/Conic.cpp index c015f605856..cfb7558c9c6 100644 --- a/src/conv/step/step-g/Conic.cpp +++ b/src/conv/step/step-g/Conic.cpp @@ -1,7 +1,7 @@ /* Conic.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Conic.h b/src/conv/step/step-g/Conic.h index d555992402f..adda52b414a 100644 --- a/src/conv/step/step-g/Conic.h +++ b/src/conv/step/step-g/Conic.h @@ -1,7 +1,7 @@ /* Conic.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ConicalSurface.cpp b/src/conv/step/step-g/ConicalSurface.cpp index 10d6ec57ce4..13fde120f34 100644 --- a/src/conv/step/step-g/ConicalSurface.cpp +++ b/src/conv/step/step-g/ConicalSurface.cpp @@ -1,7 +1,7 @@ /* ConicalSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ConicalSurface.h b/src/conv/step/step-g/ConicalSurface.h index a8e9ac5f1a8..7f0761d8674 100644 --- a/src/conv/step/step-g/ConicalSurface.h +++ b/src/conv/step/step-g/ConicalSurface.h @@ -1,7 +1,7 @@ /* ConicalSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ConnectedFaceSet.cpp b/src/conv/step/step-g/ConnectedFaceSet.cpp index 09def9bc130..621fd7e0500 100644 --- a/src/conv/step/step-g/ConnectedFaceSet.cpp +++ b/src/conv/step/step-g/ConnectedFaceSet.cpp @@ -1,7 +1,7 @@ /* ConnectedFaceSet.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ConnectedFaceSet.h b/src/conv/step/step-g/ConnectedFaceSet.h index f838d62e12b..21d264630b7 100644 --- a/src/conv/step/step-g/ConnectedFaceSet.h +++ b/src/conv/step/step-g/ConnectedFaceSet.h @@ -1,7 +1,7 @@ /* ConnectedFaceSet.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ContextDependentShapeRepresentation.cpp b/src/conv/step/step-g/ContextDependentShapeRepresentation.cpp index d857fab0992..3c9c38370fa 100644 --- a/src/conv/step/step-g/ContextDependentShapeRepresentation.cpp +++ b/src/conv/step/step-g/ContextDependentShapeRepresentation.cpp @@ -1,7 +1,7 @@ /* ContextDependentShapeRepresentation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ContextDependentShapeRepresentation.h b/src/conv/step/step-g/ContextDependentShapeRepresentation.h index 07477ff25f0..7aefc06e8de 100644 --- a/src/conv/step/step-g/ContextDependentShapeRepresentation.h +++ b/src/conv/step/step-g/ContextDependentShapeRepresentation.h @@ -1,7 +1,7 @@ /* ContextDependentShapeRepresentation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ContextDependentUnit.cpp b/src/conv/step/step-g/ContextDependentUnit.cpp index a7a9b07f121..3e781501525 100644 --- a/src/conv/step/step-g/ContextDependentUnit.cpp +++ b/src/conv/step/step-g/ContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* ContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ContextDependentUnit.h b/src/conv/step/step-g/ContextDependentUnit.h index d670a714dde..60ceec40268 100644 --- a/src/conv/step/step-g/ContextDependentUnit.h +++ b/src/conv/step/step-g/ContextDependentUnit.h @@ -1,7 +1,7 @@ /* ContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ConversionBasedUnit.cpp b/src/conv/step/step-g/ConversionBasedUnit.cpp index cb8d20ccd3d..4b6afc0af40 100644 --- a/src/conv/step/step-g/ConversionBasedUnit.cpp +++ b/src/conv/step/step-g/ConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* ConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ConversionBasedUnit.h b/src/conv/step/step-g/ConversionBasedUnit.h index a9bd58a6d30..c4b2eaa3068 100644 --- a/src/conv/step/step-g/ConversionBasedUnit.h +++ b/src/conv/step/step-g/ConversionBasedUnit.h @@ -1,7 +1,7 @@ /* ConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Curve.cpp b/src/conv/step/step-g/Curve.cpp index b36c2a6b8ac..524ed46a56d 100644 --- a/src/conv/step/step-g/Curve.cpp +++ b/src/conv/step/step-g/Curve.cpp @@ -1,7 +1,7 @@ /* Curve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Curve.h b/src/conv/step/step-g/Curve.h index 585efef8221..2341d3a773e 100644 --- a/src/conv/step/step-g/Curve.h +++ b/src/conv/step/step-g/Curve.h @@ -1,7 +1,7 @@ /* Curve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CurveBoundedSurface.cpp b/src/conv/step/step-g/CurveBoundedSurface.cpp index 97f030ffa32..f1ac63e686f 100644 --- a/src/conv/step/step-g/CurveBoundedSurface.cpp +++ b/src/conv/step/step-g/CurveBoundedSurface.cpp @@ -1,7 +1,7 @@ /* CurveBoundedSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CurveBoundedSurface.h b/src/conv/step/step-g/CurveBoundedSurface.h index 31d0d2f7e0f..652f64d8073 100644 --- a/src/conv/step/step-g/CurveBoundedSurface.h +++ b/src/conv/step/step-g/CurveBoundedSurface.h @@ -1,7 +1,7 @@ /* CurveBoundedSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CurveReplica.cpp b/src/conv/step/step-g/CurveReplica.cpp index 456f612085a..f795361c0af 100644 --- a/src/conv/step/step-g/CurveReplica.cpp +++ b/src/conv/step/step-g/CurveReplica.cpp @@ -1,7 +1,7 @@ /* CurveReplica.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CurveReplica.h b/src/conv/step/step-g/CurveReplica.h index 37819181007..a7c59865387 100644 --- a/src/conv/step/step-g/CurveReplica.h +++ b/src/conv/step/step-g/CurveReplica.h @@ -1,7 +1,7 @@ /* CurveReplica.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CylindricalSurface.cpp b/src/conv/step/step-g/CylindricalSurface.cpp index d247bb91994..28fbcbbdf6a 100644 --- a/src/conv/step/step-g/CylindricalSurface.cpp +++ b/src/conv/step/step-g/CylindricalSurface.cpp @@ -1,7 +1,7 @@ /* CylindricalSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/CylindricalSurface.h b/src/conv/step/step-g/CylindricalSurface.h index 834d0157934..5d4088cf1c5 100644 --- a/src/conv/step/step-g/CylindricalSurface.h +++ b/src/conv/step/step-g/CylindricalSurface.h @@ -1,7 +1,7 @@ /* CylindricalSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DefinitionalRepresentation.cpp b/src/conv/step/step-g/DefinitionalRepresentation.cpp index ac8ebfe9a27..f70c07d6eda 100644 --- a/src/conv/step/step-g/DefinitionalRepresentation.cpp +++ b/src/conv/step/step-g/DefinitionalRepresentation.cpp @@ -1,7 +1,7 @@ /* DefinitionalRepresentation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DefinitionalRepresentation.h b/src/conv/step/step-g/DefinitionalRepresentation.h index da040e090c8..378d8ae0cc8 100644 --- a/src/conv/step/step-g/DefinitionalRepresentation.h +++ b/src/conv/step/step-g/DefinitionalRepresentation.h @@ -1,7 +1,7 @@ /* DefinitionalRepresentation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DerivedUnit.cpp b/src/conv/step/step-g/DerivedUnit.cpp index 50827677820..e0eb2df35ff 100644 --- a/src/conv/step/step-g/DerivedUnit.cpp +++ b/src/conv/step/step-g/DerivedUnit.cpp @@ -1,7 +1,7 @@ /* DerivedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DerivedUnit.h b/src/conv/step/step-g/DerivedUnit.h index 7b427c57f35..633d29ff387 100644 --- a/src/conv/step/step-g/DerivedUnit.h +++ b/src/conv/step/step-g/DerivedUnit.h @@ -1,7 +1,7 @@ /* DerivedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DerivedUnitElement.cpp b/src/conv/step/step-g/DerivedUnitElement.cpp index 05802aba904..d9d597566d6 100644 --- a/src/conv/step/step-g/DerivedUnitElement.cpp +++ b/src/conv/step/step-g/DerivedUnitElement.cpp @@ -1,7 +1,7 @@ /* D E R I V E D U N I T E L E M E N T . C P P * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DerivedUnitElement.h b/src/conv/step/step-g/DerivedUnitElement.h index 194c39caaf5..536cf4b7e34 100644 --- a/src/conv/step/step-g/DerivedUnitElement.h +++ b/src/conv/step/step-g/DerivedUnitElement.h @@ -1,7 +1,7 @@ /* D E R I V E D U N I T E L E M E N T . H * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DesignContext.cpp b/src/conv/step/step-g/DesignContext.cpp index 8f80c743e48..74f6fd0b3f2 100644 --- a/src/conv/step/step-g/DesignContext.cpp +++ b/src/conv/step/step-g/DesignContext.cpp @@ -1,7 +1,7 @@ /* DesignContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DesignContext.h b/src/conv/step/step-g/DesignContext.h index 0983bf167dd..8f3864028fb 100644 --- a/src/conv/step/step-g/DesignContext.h +++ b/src/conv/step/step-g/DesignContext.h @@ -1,7 +1,7 @@ /* DesignContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DimensionalExponents.cpp b/src/conv/step/step-g/DimensionalExponents.cpp index 65e1f5de65a..812d1a0181a 100644 --- a/src/conv/step/step-g/DimensionalExponents.cpp +++ b/src/conv/step/step-g/DimensionalExponents.cpp @@ -1,7 +1,7 @@ /* D I M E N S I O N A L E X P O N E N T S . C P P * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/DimensionalExponents.h b/src/conv/step/step-g/DimensionalExponents.h index 3a4b21fa357..31417cac0a7 100644 --- a/src/conv/step/step-g/DimensionalExponents.h +++ b/src/conv/step/step-g/DimensionalExponents.h @@ -1,7 +1,7 @@ /* D I M E N S I O N A L E X P O N E N T S . H * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Direction.cpp b/src/conv/step/step-g/Direction.cpp index 45974943310..b9c07b7cf4b 100644 --- a/src/conv/step/step-g/Direction.cpp +++ b/src/conv/step/step-g/Direction.cpp @@ -1,7 +1,7 @@ /* Direction.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Direction.h b/src/conv/step/step-g/Direction.h index 1fb93243d0b..ab9ffba880a 100644 --- a/src/conv/step/step-g/Direction.h +++ b/src/conv/step/step-g/Direction.h @@ -1,7 +1,7 @@ /* Direction.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Edge.cpp b/src/conv/step/step-g/Edge.cpp index 9369696b60d..39627a1640d 100644 --- a/src/conv/step/step-g/Edge.cpp +++ b/src/conv/step/step-g/Edge.cpp @@ -1,7 +1,7 @@ /* Edge.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Edge.h b/src/conv/step/step-g/Edge.h index 60eccdf8762..7c360ec5fd2 100644 --- a/src/conv/step/step-g/Edge.h +++ b/src/conv/step/step-g/Edge.h @@ -1,7 +1,7 @@ /* Edge.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/EdgeCurve.cpp b/src/conv/step/step-g/EdgeCurve.cpp index f9623f39587..8117f6464bc 100644 --- a/src/conv/step/step-g/EdgeCurve.cpp +++ b/src/conv/step/step-g/EdgeCurve.cpp @@ -1,7 +1,7 @@ /* EdgeCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/EdgeCurve.h b/src/conv/step/step-g/EdgeCurve.h index 67381585235..633215372d3 100644 --- a/src/conv/step/step-g/EdgeCurve.h +++ b/src/conv/step/step-g/EdgeCurve.h @@ -1,7 +1,7 @@ /* EdgeCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/EdgeLoop.cpp b/src/conv/step/step-g/EdgeLoop.cpp index 60d2aadd1f5..faab677a0d0 100644 --- a/src/conv/step/step-g/EdgeLoop.cpp +++ b/src/conv/step/step-g/EdgeLoop.cpp @@ -1,7 +1,7 @@ /* EdgeLoop.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/EdgeLoop.h b/src/conv/step/step-g/EdgeLoop.h index a2f661255d0..bd0ef24b073 100644 --- a/src/conv/step/step-g/EdgeLoop.h +++ b/src/conv/step/step-g/EdgeLoop.h @@ -1,7 +1,7 @@ /* EdgeLoop.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElectricCurrentContextDependentUnit.cpp b/src/conv/step/step-g/ElectricCurrentContextDependentUnit.cpp index dfe49c45c04..37d04522e4e 100644 --- a/src/conv/step/step-g/ElectricCurrentContextDependentUnit.cpp +++ b/src/conv/step/step-g/ElectricCurrentContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* ElectricCurrentContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElectricCurrentContextDependentUnit.h b/src/conv/step/step-g/ElectricCurrentContextDependentUnit.h index 200f4063127..bbbe9c28e5e 100644 --- a/src/conv/step/step-g/ElectricCurrentContextDependentUnit.h +++ b/src/conv/step/step-g/ElectricCurrentContextDependentUnit.h @@ -1,7 +1,7 @@ /* ElectricCurrentContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElectricCurrentConversionBasedUnit.cpp b/src/conv/step/step-g/ElectricCurrentConversionBasedUnit.cpp index 80eb74dbb81..bd4ccb43478 100644 --- a/src/conv/step/step-g/ElectricCurrentConversionBasedUnit.cpp +++ b/src/conv/step/step-g/ElectricCurrentConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* ElectricCurrentConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElectricCurrentConversionBasedUnit.h b/src/conv/step/step-g/ElectricCurrentConversionBasedUnit.h index 2ed211a0e4c..a1b9dcbb450 100644 --- a/src/conv/step/step-g/ElectricCurrentConversionBasedUnit.h +++ b/src/conv/step/step-g/ElectricCurrentConversionBasedUnit.h @@ -1,7 +1,7 @@ /* ElectricCurrentConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElectricCurrentSiUnit.cpp b/src/conv/step/step-g/ElectricCurrentSiUnit.cpp index f6f358cb75a..2f446d3145b 100644 --- a/src/conv/step/step-g/ElectricCurrentSiUnit.cpp +++ b/src/conv/step/step-g/ElectricCurrentSiUnit.cpp @@ -1,7 +1,7 @@ /* ElectricCurrentSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElectricCurrentSiUnit.h b/src/conv/step/step-g/ElectricCurrentSiUnit.h index c8c6f5abd5f..b67ba57aff3 100644 --- a/src/conv/step/step-g/ElectricCurrentSiUnit.h +++ b/src/conv/step/step-g/ElectricCurrentSiUnit.h @@ -1,7 +1,7 @@ /* ElectricCurrentSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElectricCurrentUnit.cpp b/src/conv/step/step-g/ElectricCurrentUnit.cpp index 356b7251235..778b27c391c 100644 --- a/src/conv/step/step-g/ElectricCurrentUnit.cpp +++ b/src/conv/step/step-g/ElectricCurrentUnit.cpp @@ -1,7 +1,7 @@ /* ElectricCurrentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElectricCurrentUnit.h b/src/conv/step/step-g/ElectricCurrentUnit.h index 9c5124f06b9..82db76140d5 100644 --- a/src/conv/step/step-g/ElectricCurrentUnit.h +++ b/src/conv/step/step-g/ElectricCurrentUnit.h @@ -1,7 +1,7 @@ /* ElectricCurrentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElementarySurface.cpp b/src/conv/step/step-g/ElementarySurface.cpp index 04f4387ca59..cecc64967c3 100644 --- a/src/conv/step/step-g/ElementarySurface.cpp +++ b/src/conv/step/step-g/ElementarySurface.cpp @@ -1,7 +1,7 @@ /* ElementarySurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ElementarySurface.h b/src/conv/step/step-g/ElementarySurface.h index 2277dacf653..b160d4aea8b 100644 --- a/src/conv/step/step-g/ElementarySurface.h +++ b/src/conv/step/step-g/ElementarySurface.h @@ -1,7 +1,7 @@ /* ElementarySurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Ellipse.cpp b/src/conv/step/step-g/Ellipse.cpp index ceb4cf9ffb8..8184117c0e5 100644 --- a/src/conv/step/step-g/Ellipse.cpp +++ b/src/conv/step/step-g/Ellipse.cpp @@ -1,7 +1,7 @@ /* Ellipse.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Ellipse.h b/src/conv/step/step-g/Ellipse.h index 9fc0c510bba..10cc71783c5 100644 --- a/src/conv/step/step-g/Ellipse.h +++ b/src/conv/step/step-g/Ellipse.h @@ -1,7 +1,7 @@ /* Ellipse.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Face.cpp b/src/conv/step/step-g/Face.cpp index 57fccd36e05..03aae203c15 100644 --- a/src/conv/step/step-g/Face.cpp +++ b/src/conv/step/step-g/Face.cpp @@ -1,7 +1,7 @@ /* Face.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Face.h b/src/conv/step/step-g/Face.h index 1b55e532986..31f1247cf18 100644 --- a/src/conv/step/step-g/Face.h +++ b/src/conv/step/step-g/Face.h @@ -1,7 +1,7 @@ /* Face.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FaceBound.cpp b/src/conv/step/step-g/FaceBound.cpp index 8db49b73404..be41865d111 100644 --- a/src/conv/step/step-g/FaceBound.cpp +++ b/src/conv/step/step-g/FaceBound.cpp @@ -1,7 +1,7 @@ /* FaceBound.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FaceBound.h b/src/conv/step/step-g/FaceBound.h index eede0a54b47..e28c27133b8 100644 --- a/src/conv/step/step-g/FaceBound.h +++ b/src/conv/step/step-g/FaceBound.h @@ -1,7 +1,7 @@ /* FaceBound.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FaceOuterBound.cpp b/src/conv/step/step-g/FaceOuterBound.cpp index 7120e04a55e..554fcb70583 100644 --- a/src/conv/step/step-g/FaceOuterBound.cpp +++ b/src/conv/step/step-g/FaceOuterBound.cpp @@ -1,7 +1,7 @@ /* FaceOuterBound.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FaceOuterBound.h b/src/conv/step/step-g/FaceOuterBound.h index 229c45cb0fe..26670e72cc6 100644 --- a/src/conv/step/step-g/FaceOuterBound.h +++ b/src/conv/step/step-g/FaceOuterBound.h @@ -1,7 +1,7 @@ /* FaceOuterBound.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FaceSurface.cpp b/src/conv/step/step-g/FaceSurface.cpp index df5adc1b049..76c6d77c20a 100644 --- a/src/conv/step/step-g/FaceSurface.cpp +++ b/src/conv/step/step-g/FaceSurface.cpp @@ -1,7 +1,7 @@ /* FaceSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FaceSurface.h b/src/conv/step/step-g/FaceSurface.h index 6bcda4c89ee..4a2ee61cd17 100644 --- a/src/conv/step/step-g/FaceSurface.h +++ b/src/conv/step/step-g/FaceSurface.h @@ -1,7 +1,7 @@ /* FaceSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Factory.cpp b/src/conv/step/step-g/Factory.cpp index d33c0a43715..f1d4b1577a1 100644 --- a/src/conv/step/step-g/Factory.cpp +++ b/src/conv/step/step-g/Factory.cpp @@ -1,7 +1,7 @@ /* Factory.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Factory.h b/src/conv/step/step-g/Factory.h index 8e3d5b80ff3..61103349560 100644 --- a/src/conv/step/step-g/Factory.h +++ b/src/conv/step/step-g/Factory.h @@ -1,7 +1,7 @@ /* Factory.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FoundedItem.cpp b/src/conv/step/step-g/FoundedItem.cpp index 7b8d29bc5ba..f140924afb9 100644 --- a/src/conv/step/step-g/FoundedItem.cpp +++ b/src/conv/step/step-g/FoundedItem.cpp @@ -1,7 +1,7 @@ /* FoundedItem.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FoundedItem.h b/src/conv/step/step-g/FoundedItem.h index 51fab8cf181..4bb64907d90 100644 --- a/src/conv/step/step-g/FoundedItem.h +++ b/src/conv/step/step-g/FoundedItem.h @@ -1,7 +1,7 @@ /* FoundedItem.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FunctionallyDefinedTransformation.cpp b/src/conv/step/step-g/FunctionallyDefinedTransformation.cpp index bd28494ce2b..a574b3fb73d 100644 --- a/src/conv/step/step-g/FunctionallyDefinedTransformation.cpp +++ b/src/conv/step/step-g/FunctionallyDefinedTransformation.cpp @@ -1,7 +1,7 @@ /* FunctionallyDefinedTransformation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/FunctionallyDefinedTransformation.h b/src/conv/step/step-g/FunctionallyDefinedTransformation.h index 9aaa472ca12..a95adf0d2ee 100644 --- a/src/conv/step/step-g/FunctionallyDefinedTransformation.h +++ b/src/conv/step/step-g/FunctionallyDefinedTransformation.h @@ -1,7 +1,7 @@ /* FunctionallyDefinedTransformation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricRepresentationContext.cpp b/src/conv/step/step-g/GeometricRepresentationContext.cpp index 9fc5462a821..9980f75b1f0 100644 --- a/src/conv/step/step-g/GeometricRepresentationContext.cpp +++ b/src/conv/step/step-g/GeometricRepresentationContext.cpp @@ -1,7 +1,7 @@ /* GeometricRepresentationContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricRepresentationContext.h b/src/conv/step/step-g/GeometricRepresentationContext.h index 4cf7016e87f..3a2e23400d5 100644 --- a/src/conv/step/step-g/GeometricRepresentationContext.h +++ b/src/conv/step/step-g/GeometricRepresentationContext.h @@ -1,7 +1,7 @@ /* GeometricRepresentationContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricRepresentationItem.cpp b/src/conv/step/step-g/GeometricRepresentationItem.cpp index 010529e0726..20db4e5b4b4 100644 --- a/src/conv/step/step-g/GeometricRepresentationItem.cpp +++ b/src/conv/step/step-g/GeometricRepresentationItem.cpp @@ -1,7 +1,7 @@ /* GeometricRepresentationItem.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricRepresentationItem.h b/src/conv/step/step-g/GeometricRepresentationItem.h index d8c4e444588..69720a352c2 100644 --- a/src/conv/step/step-g/GeometricRepresentationItem.h +++ b/src/conv/step/step-g/GeometricRepresentationItem.h @@ -1,7 +1,7 @@ /* GeometricRepresentationItem.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricSet.cpp b/src/conv/step/step-g/GeometricSet.cpp index 3a5f5bd79c1..de18d8cf3b8 100644 --- a/src/conv/step/step-g/GeometricSet.cpp +++ b/src/conv/step/step-g/GeometricSet.cpp @@ -1,7 +1,7 @@ /* GeometricSet.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricSet.h b/src/conv/step/step-g/GeometricSet.h index f7350d2c8a8..f2702568711 100644 --- a/src/conv/step/step-g/GeometricSet.h +++ b/src/conv/step/step-g/GeometricSet.h @@ -1,7 +1,7 @@ /* GeometricSet.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricSetSelect.cpp b/src/conv/step/step-g/GeometricSetSelect.cpp index a36995c7f60..1e472204467 100644 --- a/src/conv/step/step-g/GeometricSetSelect.cpp +++ b/src/conv/step/step-g/GeometricSetSelect.cpp @@ -1,7 +1,7 @@ /* GeometricSetSelect.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricSetSelect.h b/src/conv/step/step-g/GeometricSetSelect.h index b13cea599ed..d4acf813dbf 100644 --- a/src/conv/step/step-g/GeometricSetSelect.h +++ b/src/conv/step/step-g/GeometricSetSelect.h @@ -1,7 +1,7 @@ /* GeometricSetSelect.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricallyBoundedSurfaceShapeRepresentation.cpp b/src/conv/step/step-g/GeometricallyBoundedSurfaceShapeRepresentation.cpp index eeb24e06a09..4f3898950cc 100644 --- a/src/conv/step/step-g/GeometricallyBoundedSurfaceShapeRepresentation.cpp +++ b/src/conv/step/step-g/GeometricallyBoundedSurfaceShapeRepresentation.cpp @@ -1,7 +1,7 @@ /* GeometricallyBoundedSurfaceShapeRepresentation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GeometricallyBoundedSurfaceShapeRepresentation.h b/src/conv/step/step-g/GeometricallyBoundedSurfaceShapeRepresentation.h index 0b730209cb7..91ee45f98b1 100644 --- a/src/conv/step/step-g/GeometricallyBoundedSurfaceShapeRepresentation.h +++ b/src/conv/step/step-g/GeometricallyBoundedSurfaceShapeRepresentation.h @@ -1,7 +1,7 @@ /* GeometricallyBoundedSurfaceShapeRepresentation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GlobalUncertaintyAssignedContext.cpp b/src/conv/step/step-g/GlobalUncertaintyAssignedContext.cpp index 4fee3cfe464..6e4c0b693b9 100644 --- a/src/conv/step/step-g/GlobalUncertaintyAssignedContext.cpp +++ b/src/conv/step/step-g/GlobalUncertaintyAssignedContext.cpp @@ -1,7 +1,7 @@ /* GlobalUncertaintyAssignedContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GlobalUncertaintyAssignedContext.h b/src/conv/step/step-g/GlobalUncertaintyAssignedContext.h index 01b1a881a43..22576133ce0 100644 --- a/src/conv/step/step-g/GlobalUncertaintyAssignedContext.h +++ b/src/conv/step/step-g/GlobalUncertaintyAssignedContext.h @@ -1,7 +1,7 @@ /* GlobalUncertaintyAssignedContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GlobalUnitAssignedContext.cpp b/src/conv/step/step-g/GlobalUnitAssignedContext.cpp index 9d084825a60..7f216468dff 100644 --- a/src/conv/step/step-g/GlobalUnitAssignedContext.cpp +++ b/src/conv/step/step-g/GlobalUnitAssignedContext.cpp @@ -1,7 +1,7 @@ /* GlobalUnitAssignedContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/GlobalUnitAssignedContext.h b/src/conv/step/step-g/GlobalUnitAssignedContext.h index a76f3c114c8..14d0bff30a9 100644 --- a/src/conv/step/step-g/GlobalUnitAssignedContext.h +++ b/src/conv/step/step-g/GlobalUnitAssignedContext.h @@ -1,7 +1,7 @@ /* GlobalUnitAssignedContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Hyperbola.cpp b/src/conv/step/step-g/Hyperbola.cpp index 2b70154ac6b..2ae5e38b30e 100644 --- a/src/conv/step/step-g/Hyperbola.cpp +++ b/src/conv/step/step-g/Hyperbola.cpp @@ -1,7 +1,7 @@ /* Hyperbola.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Hyperbola.h b/src/conv/step/step-g/Hyperbola.h index 329074ab955..2f51cd8c5dd 100644 --- a/src/conv/step/step-g/Hyperbola.h +++ b/src/conv/step/step-g/Hyperbola.h @@ -1,7 +1,7 @@ /* Hyperbola.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/IntersectionCurve.cpp b/src/conv/step/step-g/IntersectionCurve.cpp index 9140e72051b..5c2f022facd 100644 --- a/src/conv/step/step-g/IntersectionCurve.cpp +++ b/src/conv/step/step-g/IntersectionCurve.cpp @@ -1,7 +1,7 @@ /* IntersectionCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/IntersectionCurve.h b/src/conv/step/step-g/IntersectionCurve.h index 1c3bf8216f4..5b97f6216cd 100644 --- a/src/conv/step/step-g/IntersectionCurve.h +++ b/src/conv/step/step-g/IntersectionCurve.h @@ -1,7 +1,7 @@ /* IntersectionCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ItemDefinedTransformation.cpp b/src/conv/step/step-g/ItemDefinedTransformation.cpp index 8a35757ac6a..3ca6020162a 100644 --- a/src/conv/step/step-g/ItemDefinedTransformation.cpp +++ b/src/conv/step/step-g/ItemDefinedTransformation.cpp @@ -1,7 +1,7 @@ /* ItemDefinedTransformation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ItemDefinedTransformation.h b/src/conv/step/step-g/ItemDefinedTransformation.h index 0924fa151e5..bbb04a4eb73 100644 --- a/src/conv/step/step-g/ItemDefinedTransformation.h +++ b/src/conv/step/step-g/ItemDefinedTransformation.h @@ -1,7 +1,7 @@ /* ItemDefinedTransformation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthContextDependentUnit.cpp b/src/conv/step/step-g/LengthContextDependentUnit.cpp index 470dfb4cb80..86ae95b4565 100644 --- a/src/conv/step/step-g/LengthContextDependentUnit.cpp +++ b/src/conv/step/step-g/LengthContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* LengthContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthContextDependentUnit.h b/src/conv/step/step-g/LengthContextDependentUnit.h index b2e12b1e6f6..c997d4209a6 100644 --- a/src/conv/step/step-g/LengthContextDependentUnit.h +++ b/src/conv/step/step-g/LengthContextDependentUnit.h @@ -1,7 +1,7 @@ /* LengthContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthConversionBasedUnit.cpp b/src/conv/step/step-g/LengthConversionBasedUnit.cpp index 320e0725d50..fe1ac58839c 100644 --- a/src/conv/step/step-g/LengthConversionBasedUnit.cpp +++ b/src/conv/step/step-g/LengthConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* LengthConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthConversionBasedUnit.h b/src/conv/step/step-g/LengthConversionBasedUnit.h index d26743d8113..1cbf617b402 100644 --- a/src/conv/step/step-g/LengthConversionBasedUnit.h +++ b/src/conv/step/step-g/LengthConversionBasedUnit.h @@ -1,7 +1,7 @@ /* LengthConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthMeasureWithUnit.cpp b/src/conv/step/step-g/LengthMeasureWithUnit.cpp index 4db211edb0c..6e9710f5452 100644 --- a/src/conv/step/step-g/LengthMeasureWithUnit.cpp +++ b/src/conv/step/step-g/LengthMeasureWithUnit.cpp @@ -1,7 +1,7 @@ /* LengthMeasureWithUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthMeasureWithUnit.h b/src/conv/step/step-g/LengthMeasureWithUnit.h index 9bf232c007a..b0e25e319df 100644 --- a/src/conv/step/step-g/LengthMeasureWithUnit.h +++ b/src/conv/step/step-g/LengthMeasureWithUnit.h @@ -1,7 +1,7 @@ /* LengthMeasureWithUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthSiUnit.cpp b/src/conv/step/step-g/LengthSiUnit.cpp index 366e8a6c643..cbfb555300b 100644 --- a/src/conv/step/step-g/LengthSiUnit.cpp +++ b/src/conv/step/step-g/LengthSiUnit.cpp @@ -1,7 +1,7 @@ /* LengthSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthSiUnit.h b/src/conv/step/step-g/LengthSiUnit.h index 12bda989f94..1c44901deff 100644 --- a/src/conv/step/step-g/LengthSiUnit.h +++ b/src/conv/step/step-g/LengthSiUnit.h @@ -1,7 +1,7 @@ /* LengthSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthUnit.cpp b/src/conv/step/step-g/LengthUnit.cpp index d9eda2b8555..8e8c1c7ecf4 100644 --- a/src/conv/step/step-g/LengthUnit.cpp +++ b/src/conv/step/step-g/LengthUnit.cpp @@ -1,7 +1,7 @@ /* LengthUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LengthUnit.h b/src/conv/step/step-g/LengthUnit.h index 53d449064b4..0c789181abd 100644 --- a/src/conv/step/step-g/LengthUnit.h +++ b/src/conv/step/step-g/LengthUnit.h @@ -1,7 +1,7 @@ /* LengthUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Line.cpp b/src/conv/step/step-g/Line.cpp index feb73e204b1..18f2ee607bf 100644 --- a/src/conv/step/step-g/Line.cpp +++ b/src/conv/step/step-g/Line.cpp @@ -1,7 +1,7 @@ /* Line.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Line.h b/src/conv/step/step-g/Line.h index 6237cc2fc96..92afb7adb60 100644 --- a/src/conv/step/step-g/Line.h +++ b/src/conv/step/step-g/Line.h @@ -1,7 +1,7 @@ /* Line.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LocalUnits.cpp b/src/conv/step/step-g/LocalUnits.cpp index bf1a01d07e6..45f52cb6bde 100644 --- a/src/conv/step/step-g/LocalUnits.cpp +++ b/src/conv/step/step-g/LocalUnits.cpp @@ -1,7 +1,7 @@ /* LocalUnits.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LocalUnits.h b/src/conv/step/step-g/LocalUnits.h index 7878389364c..b96a4a59a48 100644 --- a/src/conv/step/step-g/LocalUnits.h +++ b/src/conv/step/step-g/LocalUnits.h @@ -1,7 +1,7 @@ /* LocalUnits.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Loop.cpp b/src/conv/step/step-g/Loop.cpp index fe912a1b9ee..c54f6f5d47c 100644 --- a/src/conv/step/step-g/Loop.cpp +++ b/src/conv/step/step-g/Loop.cpp @@ -1,7 +1,7 @@ /* Loop.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Loop.h b/src/conv/step/step-g/Loop.h index 1d6a51f6bf7..67056671373 100644 --- a/src/conv/step/step-g/Loop.h +++ b/src/conv/step/step-g/Loop.h @@ -1,7 +1,7 @@ /* Loop.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LuminousIntensityContextDependentUnit.cpp b/src/conv/step/step-g/LuminousIntensityContextDependentUnit.cpp index 80d899cb0ff..7eefc4b7c04 100644 --- a/src/conv/step/step-g/LuminousIntensityContextDependentUnit.cpp +++ b/src/conv/step/step-g/LuminousIntensityContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* LuminousIntensityContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LuminousIntensityContextDependentUnit.h b/src/conv/step/step-g/LuminousIntensityContextDependentUnit.h index 112aa449ea8..b7cc3f6e288 100644 --- a/src/conv/step/step-g/LuminousIntensityContextDependentUnit.h +++ b/src/conv/step/step-g/LuminousIntensityContextDependentUnit.h @@ -1,7 +1,7 @@ /* LuminousIntensityContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LuminousIntensityConversionBasedUnit.cpp b/src/conv/step/step-g/LuminousIntensityConversionBasedUnit.cpp index a0129532a6e..bb64417f8fd 100644 --- a/src/conv/step/step-g/LuminousIntensityConversionBasedUnit.cpp +++ b/src/conv/step/step-g/LuminousIntensityConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* LuminousIntensityConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LuminousIntensityConversionBasedUnit.h b/src/conv/step/step-g/LuminousIntensityConversionBasedUnit.h index a9478196e94..6b9264d7d0b 100644 --- a/src/conv/step/step-g/LuminousIntensityConversionBasedUnit.h +++ b/src/conv/step/step-g/LuminousIntensityConversionBasedUnit.h @@ -1,7 +1,7 @@ /* LuminousIntensityConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LuminousIntensitySiUnit.cpp b/src/conv/step/step-g/LuminousIntensitySiUnit.cpp index 3e4377a4865..5b9934646f4 100644 --- a/src/conv/step/step-g/LuminousIntensitySiUnit.cpp +++ b/src/conv/step/step-g/LuminousIntensitySiUnit.cpp @@ -1,7 +1,7 @@ /* LuminousIntensitySiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LuminousIntensitySiUnit.h b/src/conv/step/step-g/LuminousIntensitySiUnit.h index 85e13507f03..45b11ae3ee0 100644 --- a/src/conv/step/step-g/LuminousIntensitySiUnit.h +++ b/src/conv/step/step-g/LuminousIntensitySiUnit.h @@ -1,7 +1,7 @@ /* LuminousIntensitySiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LuminousIntensityUnit.cpp b/src/conv/step/step-g/LuminousIntensityUnit.cpp index 512534f749d..c6f1337ee63 100644 --- a/src/conv/step/step-g/LuminousIntensityUnit.cpp +++ b/src/conv/step/step-g/LuminousIntensityUnit.cpp @@ -1,7 +1,7 @@ /* LuminousIntensityUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/LuminousIntensityUnit.h b/src/conv/step/step-g/LuminousIntensityUnit.h index 5fe76f65718..60cfa302126 100644 --- a/src/conv/step/step-g/LuminousIntensityUnit.h +++ b/src/conv/step/step-g/LuminousIntensityUnit.h @@ -1,7 +1,7 @@ /* LuminousIntensityUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ManifoldSolidBrep.cpp b/src/conv/step/step-g/ManifoldSolidBrep.cpp index 3b7067c7e6a..25758100918 100644 --- a/src/conv/step/step-g/ManifoldSolidBrep.cpp +++ b/src/conv/step/step-g/ManifoldSolidBrep.cpp @@ -1,7 +1,7 @@ /* ManifoldSolidBrep.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ManifoldSolidBrep.h b/src/conv/step/step-g/ManifoldSolidBrep.h index 8339ec06ebe..c62c17c7716 100644 --- a/src/conv/step/step-g/ManifoldSolidBrep.h +++ b/src/conv/step/step-g/ManifoldSolidBrep.h @@ -1,7 +1,7 @@ /* ManifoldSolidBrep.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.cpp b/src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.cpp index 2629ba9b524..709c037fe5a 100644 --- a/src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.cpp +++ b/src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.cpp @@ -1,7 +1,7 @@ /* M A N I F O L D S U R F A C E S H A P E R E P R E S E N T A T I O N . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.h b/src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.h index a3e3fbfb255..0e90a2fbb58 100644 --- a/src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.h +++ b/src/conv/step/step-g/ManifoldSurfaceShapeRepresentation.h @@ -1,7 +1,7 @@ /* M A N I F O L D S U R F A C E S H A P E R E P R E S E N T A T I O N . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MassContextDependentUnit.cpp b/src/conv/step/step-g/MassContextDependentUnit.cpp index 12d28bb4f2d..330750d8982 100644 --- a/src/conv/step/step-g/MassContextDependentUnit.cpp +++ b/src/conv/step/step-g/MassContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* MassContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MassContextDependentUnit.h b/src/conv/step/step-g/MassContextDependentUnit.h index 407a66bd060..6af0dd44b2b 100644 --- a/src/conv/step/step-g/MassContextDependentUnit.h +++ b/src/conv/step/step-g/MassContextDependentUnit.h @@ -1,7 +1,7 @@ /* MassContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MassConversionBasedUnit.cpp b/src/conv/step/step-g/MassConversionBasedUnit.cpp index dbb81fedb5b..7eff002391c 100644 --- a/src/conv/step/step-g/MassConversionBasedUnit.cpp +++ b/src/conv/step/step-g/MassConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* MassConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MassConversionBasedUnit.h b/src/conv/step/step-g/MassConversionBasedUnit.h index c6345c170e2..aa4dcfb2ab1 100644 --- a/src/conv/step/step-g/MassConversionBasedUnit.h +++ b/src/conv/step/step-g/MassConversionBasedUnit.h @@ -1,7 +1,7 @@ /* MassConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MassSiUnit.cpp b/src/conv/step/step-g/MassSiUnit.cpp index 206274908f2..5ea8b5dea1a 100644 --- a/src/conv/step/step-g/MassSiUnit.cpp +++ b/src/conv/step/step-g/MassSiUnit.cpp @@ -1,7 +1,7 @@ /* MassSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MassSiUnit.h b/src/conv/step/step-g/MassSiUnit.h index 8b17c23fcc8..9ea28572d88 100644 --- a/src/conv/step/step-g/MassSiUnit.h +++ b/src/conv/step/step-g/MassSiUnit.h @@ -1,7 +1,7 @@ /* MassSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MassUnit.cpp b/src/conv/step/step-g/MassUnit.cpp index f7ccff46704..19422e95994 100644 --- a/src/conv/step/step-g/MassUnit.cpp +++ b/src/conv/step/step-g/MassUnit.cpp @@ -1,7 +1,7 @@ /* MassUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MassUnit.h b/src/conv/step/step-g/MassUnit.h index 5f076ae3309..e959bdb4726 100644 --- a/src/conv/step/step-g/MassUnit.h +++ b/src/conv/step/step-g/MassUnit.h @@ -1,7 +1,7 @@ /* MassUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MeasureValue.cpp b/src/conv/step/step-g/MeasureValue.cpp index fb12de66eba..58a766f51d9 100644 --- a/src/conv/step/step-g/MeasureValue.cpp +++ b/src/conv/step/step-g/MeasureValue.cpp @@ -1,7 +1,7 @@ /* MeasureValue.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MeasureValue.h b/src/conv/step/step-g/MeasureValue.h index 8ecc825ed50..ce259857bbb 100644 --- a/src/conv/step/step-g/MeasureValue.h +++ b/src/conv/step/step-g/MeasureValue.h @@ -1,7 +1,7 @@ /* MeasureValue.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MeasureWithUnit.cpp b/src/conv/step/step-g/MeasureWithUnit.cpp index 94fc756b6c0..45023811f2f 100644 --- a/src/conv/step/step-g/MeasureWithUnit.cpp +++ b/src/conv/step/step-g/MeasureWithUnit.cpp @@ -1,7 +1,7 @@ /* MeasureWithUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MeasureWithUnit.h b/src/conv/step/step-g/MeasureWithUnit.h index 8d7788f2352..fc99bf4f09f 100644 --- a/src/conv/step/step-g/MeasureWithUnit.h +++ b/src/conv/step/step-g/MeasureWithUnit.h @@ -1,7 +1,7 @@ /* MeasureWithUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MechanicalContext.cpp b/src/conv/step/step-g/MechanicalContext.cpp index 7f783da57c9..ec588478560 100644 --- a/src/conv/step/step-g/MechanicalContext.cpp +++ b/src/conv/step/step-g/MechanicalContext.cpp @@ -1,7 +1,7 @@ /* MechanicalContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/MechanicalContext.h b/src/conv/step/step-g/MechanicalContext.h index 872078d956b..2063813d663 100644 --- a/src/conv/step/step-g/MechanicalContext.h +++ b/src/conv/step/step-g/MechanicalContext.h @@ -1,7 +1,7 @@ /* MechanicalContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/NamedUnit.cpp b/src/conv/step/step-g/NamedUnit.cpp index 1d8472d3e64..b36b5b3171b 100644 --- a/src/conv/step/step-g/NamedUnit.cpp +++ b/src/conv/step/step-g/NamedUnit.cpp @@ -1,7 +1,7 @@ /* NamedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/NamedUnit.h b/src/conv/step/step-g/NamedUnit.h index 6728bf333a6..11c296a88fa 100644 --- a/src/conv/step/step-g/NamedUnit.h +++ b/src/conv/step/step-g/NamedUnit.h @@ -1,7 +1,7 @@ /* NamedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/NextAssemblyUsageOccurrence.cpp b/src/conv/step/step-g/NextAssemblyUsageOccurrence.cpp index 683a516ddd6..c7a9700bf2d 100644 --- a/src/conv/step/step-g/NextAssemblyUsageOccurrence.cpp +++ b/src/conv/step/step-g/NextAssemblyUsageOccurrence.cpp @@ -1,7 +1,7 @@ /* NextAssemblyUsageOccurrence.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/NextAssemblyUsageOccurrence.h b/src/conv/step/step-g/NextAssemblyUsageOccurrence.h index 2aeff88136c..f73d8b56d06 100644 --- a/src/conv/step/step-g/NextAssemblyUsageOccurrence.h +++ b/src/conv/step/step-g/NextAssemblyUsageOccurrence.h @@ -1,7 +1,7 @@ /* NextAssemblyUsageOccurrence.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OffsetCurve2D.cpp b/src/conv/step/step-g/OffsetCurve2D.cpp index 1e35c01d21e..fa18a253a18 100644 --- a/src/conv/step/step-g/OffsetCurve2D.cpp +++ b/src/conv/step/step-g/OffsetCurve2D.cpp @@ -1,7 +1,7 @@ /* OffsetCurve2D.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OffsetCurve2D.h b/src/conv/step/step-g/OffsetCurve2D.h index 58e41a521ee..f01ae565f04 100644 --- a/src/conv/step/step-g/OffsetCurve2D.h +++ b/src/conv/step/step-g/OffsetCurve2D.h @@ -1,7 +1,7 @@ /* OffsetCurve2D.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OffsetCurve3D.cpp b/src/conv/step/step-g/OffsetCurve3D.cpp index bf21c63cf2e..f552610fed8 100644 --- a/src/conv/step/step-g/OffsetCurve3D.cpp +++ b/src/conv/step/step-g/OffsetCurve3D.cpp @@ -1,7 +1,7 @@ /* OffsetCurve3D.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OffsetCurve3D.h b/src/conv/step/step-g/OffsetCurve3D.h index 9fc001e88c2..0e9b3373b31 100644 --- a/src/conv/step/step-g/OffsetCurve3D.h +++ b/src/conv/step/step-g/OffsetCurve3D.h @@ -1,7 +1,7 @@ /* OffsetCurve3D.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OffsetSurface.cpp b/src/conv/step/step-g/OffsetSurface.cpp index e0435a427bd..e4ff4e4880a 100644 --- a/src/conv/step/step-g/OffsetSurface.cpp +++ b/src/conv/step/step-g/OffsetSurface.cpp @@ -1,7 +1,7 @@ /* OffsetSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OffsetSurface.h b/src/conv/step/step-g/OffsetSurface.h index a2244b6bf57..edca5b6bc43 100644 --- a/src/conv/step/step-g/OffsetSurface.h +++ b/src/conv/step/step-g/OffsetSurface.h @@ -1,7 +1,7 @@ /* OffsetSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OpenNurbsInterfaces.cpp b/src/conv/step/step-g/OpenNurbsInterfaces.cpp index 2088992a2d7..9f1366a4695 100644 --- a/src/conv/step/step-g/OpenNurbsInterfaces.cpp +++ b/src/conv/step/step-g/OpenNurbsInterfaces.cpp @@ -1,7 +1,7 @@ /* OpenNurbsInterfaces.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -26,8 +26,27 @@ #include "common.h" +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# if GCC_PREREQ(8,0) +# pragma GCC diagnostic ignored "-Wclass-memaccess" +# endif +#endif + #include "opennurbs.h" +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop +#endif +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + #include "sdai.h" class SDAI_Application_instance; diff --git a/src/conv/step/step-g/OpenShell.cpp b/src/conv/step/step-g/OpenShell.cpp index 4caca55213d..8158a8015ac 100644 --- a/src/conv/step/step-g/OpenShell.cpp +++ b/src/conv/step/step-g/OpenShell.cpp @@ -1,7 +1,7 @@ /* OpenShell.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OpenShell.h b/src/conv/step/step-g/OpenShell.h index 3d7f8792d35..f90ba45fc5b 100644 --- a/src/conv/step/step-g/OpenShell.h +++ b/src/conv/step/step-g/OpenShell.h @@ -1,7 +1,7 @@ /* O P E N S H E L L . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OrientedClosedShell.cpp b/src/conv/step/step-g/OrientedClosedShell.cpp index 807d88f3d5d..87a4a49793e 100644 --- a/src/conv/step/step-g/OrientedClosedShell.cpp +++ b/src/conv/step/step-g/OrientedClosedShell.cpp @@ -1,7 +1,7 @@ /* OrientedClosedShell.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OrientedClosedShell.h b/src/conv/step/step-g/OrientedClosedShell.h index dc46021d17d..c58d2570575 100644 --- a/src/conv/step/step-g/OrientedClosedShell.h +++ b/src/conv/step/step-g/OrientedClosedShell.h @@ -1,7 +1,7 @@ /* OrientedClosedShell.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OrientedEdge.cpp b/src/conv/step/step-g/OrientedEdge.cpp index b74df13ce5b..91f34f4b644 100644 --- a/src/conv/step/step-g/OrientedEdge.cpp +++ b/src/conv/step/step-g/OrientedEdge.cpp @@ -1,7 +1,7 @@ /* OrientedEdge.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OrientedEdge.h b/src/conv/step/step-g/OrientedEdge.h index c053418cba5..e195c500258 100644 --- a/src/conv/step/step-g/OrientedEdge.h +++ b/src/conv/step/step-g/OrientedEdge.h @@ -1,7 +1,7 @@ /* OrientedEdge.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OrientedFace.cpp b/src/conv/step/step-g/OrientedFace.cpp index 7ff4a57ba0a..b2fbda1ef83 100644 --- a/src/conv/step/step-g/OrientedFace.cpp +++ b/src/conv/step/step-g/OrientedFace.cpp @@ -1,7 +1,7 @@ /* OrientedFace.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/OrientedFace.h b/src/conv/step/step-g/OrientedFace.h index 6ca22d378ad..a4c38b48ab8 100644 --- a/src/conv/step/step-g/OrientedFace.h +++ b/src/conv/step/step-g/OrientedFace.h @@ -1,7 +1,7 @@ /* OrientedFace.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PCurve.cpp b/src/conv/step/step-g/PCurve.cpp index f48dd4297bf..1c94dd526c7 100644 --- a/src/conv/step/step-g/PCurve.cpp +++ b/src/conv/step/step-g/PCurve.cpp @@ -1,7 +1,7 @@ /* PCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PCurve.h b/src/conv/step/step-g/PCurve.h index 132141dc32b..0b9380913e5 100644 --- a/src/conv/step/step-g/PCurve.h +++ b/src/conv/step/step-g/PCurve.h @@ -1,7 +1,7 @@ /* PCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PCurveOrSurface.cpp b/src/conv/step/step-g/PCurveOrSurface.cpp index ccc13ca7f37..22a24e81d38 100644 --- a/src/conv/step/step-g/PCurveOrSurface.cpp +++ b/src/conv/step/step-g/PCurveOrSurface.cpp @@ -1,7 +1,7 @@ /* PCurveOrSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PCurveOrSurface.h b/src/conv/step/step-g/PCurveOrSurface.h index e7a18675d47..96c3ba76acf 100644 --- a/src/conv/step/step-g/PCurveOrSurface.h +++ b/src/conv/step/step-g/PCurveOrSurface.h @@ -1,7 +1,7 @@ /* PCurveOrSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Parabola.cpp b/src/conv/step/step-g/Parabola.cpp index 7ffaea69979..f2cb6216da5 100644 --- a/src/conv/step/step-g/Parabola.cpp +++ b/src/conv/step/step-g/Parabola.cpp @@ -1,7 +1,7 @@ /* Parabola.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Parabola.h b/src/conv/step/step-g/Parabola.h index d7938db31b3..3a04e77ef56 100644 --- a/src/conv/step/step-g/Parabola.h +++ b/src/conv/step/step-g/Parabola.h @@ -1,7 +1,7 @@ /* Parabola.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ParametricRepresentationContext.cpp b/src/conv/step/step-g/ParametricRepresentationContext.cpp index c09890e6b05..29c2af3f3e7 100644 --- a/src/conv/step/step-g/ParametricRepresentationContext.cpp +++ b/src/conv/step/step-g/ParametricRepresentationContext.cpp @@ -1,7 +1,7 @@ /* ParametricRepresentationContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ParametricRepresentationContext.h b/src/conv/step/step-g/ParametricRepresentationContext.h index 4f9e0839ee5..b1850147eae 100644 --- a/src/conv/step/step-g/ParametricRepresentationContext.h +++ b/src/conv/step/step-g/ParametricRepresentationContext.h @@ -1,7 +1,7 @@ /* ParametricRepresentationContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Path.cpp b/src/conv/step/step-g/Path.cpp index 69573177e96..0d36108683e 100644 --- a/src/conv/step/step-g/Path.cpp +++ b/src/conv/step/step-g/Path.cpp @@ -1,7 +1,7 @@ /* Path.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Path.h b/src/conv/step/step-g/Path.h index e34d36aa057..378b21272a4 100644 --- a/src/conv/step/step-g/Path.h +++ b/src/conv/step/step-g/Path.h @@ -1,7 +1,7 @@ /* Path.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Placement.cpp b/src/conv/step/step-g/Placement.cpp index 1b442146261..0c4c89bc49c 100644 --- a/src/conv/step/step-g/Placement.cpp +++ b/src/conv/step/step-g/Placement.cpp @@ -1,7 +1,7 @@ /* Placement.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Placement.h b/src/conv/step/step-g/Placement.h index 00311097060..baefefa09ee 100644 --- a/src/conv/step/step-g/Placement.h +++ b/src/conv/step/step-g/Placement.h @@ -1,7 +1,7 @@ /* Placement.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Plane.cpp b/src/conv/step/step-g/Plane.cpp index b12f5a2862b..677228f8997 100644 --- a/src/conv/step/step-g/Plane.cpp +++ b/src/conv/step/step-g/Plane.cpp @@ -1,7 +1,7 @@ /* Plane.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Plane.h b/src/conv/step/step-g/Plane.h index cb2301f63d7..17e61eae7d4 100644 --- a/src/conv/step/step-g/Plane.h +++ b/src/conv/step/step-g/Plane.h @@ -1,7 +1,7 @@ /* Plane.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleContextDependentUnit.cpp b/src/conv/step/step-g/PlaneAngleContextDependentUnit.cpp index 15ec1f2d87b..2dcef89f2c3 100644 --- a/src/conv/step/step-g/PlaneAngleContextDependentUnit.cpp +++ b/src/conv/step/step-g/PlaneAngleContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* PlaneAngleContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleContextDependentUnit.h b/src/conv/step/step-g/PlaneAngleContextDependentUnit.h index 09d54daf830..5ca41f6c41a 100644 --- a/src/conv/step/step-g/PlaneAngleContextDependentUnit.h +++ b/src/conv/step/step-g/PlaneAngleContextDependentUnit.h @@ -1,7 +1,7 @@ /* PlaneAngleContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleConversionBasedUnit.cpp b/src/conv/step/step-g/PlaneAngleConversionBasedUnit.cpp index 0d2c202d6de..e938c687fc4 100644 --- a/src/conv/step/step-g/PlaneAngleConversionBasedUnit.cpp +++ b/src/conv/step/step-g/PlaneAngleConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* PlaneAngleConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleConversionBasedUnit.h b/src/conv/step/step-g/PlaneAngleConversionBasedUnit.h index 1beedfc6e65..331dfa1ead6 100644 --- a/src/conv/step/step-g/PlaneAngleConversionBasedUnit.h +++ b/src/conv/step/step-g/PlaneAngleConversionBasedUnit.h @@ -1,7 +1,7 @@ /* PlaneAngleConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleMeasureWithUnit.cpp b/src/conv/step/step-g/PlaneAngleMeasureWithUnit.cpp index 0a1fa00ea65..ab18f7e80c9 100644 --- a/src/conv/step/step-g/PlaneAngleMeasureWithUnit.cpp +++ b/src/conv/step/step-g/PlaneAngleMeasureWithUnit.cpp @@ -1,7 +1,7 @@ /* PlaneAngleMeasureWithUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleMeasureWithUnit.h b/src/conv/step/step-g/PlaneAngleMeasureWithUnit.h index ef60a9158db..3fc5b7987bf 100644 --- a/src/conv/step/step-g/PlaneAngleMeasureWithUnit.h +++ b/src/conv/step/step-g/PlaneAngleMeasureWithUnit.h @@ -1,7 +1,7 @@ /* PlaneAngleMeasureWithUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleSiUnit.cpp b/src/conv/step/step-g/PlaneAngleSiUnit.cpp index 5a70c8811d2..6cbf8efccdd 100644 --- a/src/conv/step/step-g/PlaneAngleSiUnit.cpp +++ b/src/conv/step/step-g/PlaneAngleSiUnit.cpp @@ -1,7 +1,7 @@ /* PlaneAngleSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleSiUnit.h b/src/conv/step/step-g/PlaneAngleSiUnit.h index cdb4fedc625..e5bd919cfc6 100644 --- a/src/conv/step/step-g/PlaneAngleSiUnit.h +++ b/src/conv/step/step-g/PlaneAngleSiUnit.h @@ -1,7 +1,7 @@ /* PlaneAngleSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleUnit.cpp b/src/conv/step/step-g/PlaneAngleUnit.cpp index 65fbfa52f2d..c52a9b2f2bf 100644 --- a/src/conv/step/step-g/PlaneAngleUnit.cpp +++ b/src/conv/step/step-g/PlaneAngleUnit.cpp @@ -1,7 +1,7 @@ /* PlaneAngleUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PlaneAngleUnit.h b/src/conv/step/step-g/PlaneAngleUnit.h index 7265269f7b3..81f21b4b2dd 100644 --- a/src/conv/step/step-g/PlaneAngleUnit.h +++ b/src/conv/step/step-g/PlaneAngleUnit.h @@ -1,7 +1,7 @@ /* PlaneAngleUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Point.cpp b/src/conv/step/step-g/Point.cpp index f3a0051c689..aa5abda792d 100644 --- a/src/conv/step/step-g/Point.cpp +++ b/src/conv/step/step-g/Point.cpp @@ -1,7 +1,7 @@ /* Point.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Point.h b/src/conv/step/step-g/Point.h index ef7e91bf77d..19fa5cb09b9 100644 --- a/src/conv/step/step-g/Point.h +++ b/src/conv/step/step-g/Point.h @@ -1,7 +1,7 @@ /* Point.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Polyline.cpp b/src/conv/step/step-g/Polyline.cpp index a9eee502f9e..6cc2c1ce6de 100644 --- a/src/conv/step/step-g/Polyline.cpp +++ b/src/conv/step/step-g/Polyline.cpp @@ -1,7 +1,7 @@ /* Polyline.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Polyline.h b/src/conv/step/step-g/Polyline.h index e9da64fd784..a7e4a0325cc 100644 --- a/src/conv/step/step-g/Polyline.h +++ b/src/conv/step/step-g/Polyline.h @@ -1,7 +1,7 @@ /* Polyline.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Product.cpp b/src/conv/step/step-g/Product.cpp index cb434b46ec7..8bc156ecd02 100644 --- a/src/conv/step/step-g/Product.cpp +++ b/src/conv/step/step-g/Product.cpp @@ -1,7 +1,7 @@ /* Product.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Product.h b/src/conv/step/step-g/Product.h index 12d7ea808f8..79e4ed893ec 100644 --- a/src/conv/step/step-g/Product.h +++ b/src/conv/step/step-g/Product.h @@ -1,7 +1,7 @@ /* Product.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductCategory.cpp b/src/conv/step/step-g/ProductCategory.cpp index 62541268e53..502c348a469 100644 --- a/src/conv/step/step-g/ProductCategory.cpp +++ b/src/conv/step/step-g/ProductCategory.cpp @@ -1,7 +1,7 @@ /* ProductCategory.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductCategory.h b/src/conv/step/step-g/ProductCategory.h index ee01768bed3..2605ee83c94 100644 --- a/src/conv/step/step-g/ProductCategory.h +++ b/src/conv/step/step-g/ProductCategory.h @@ -1,7 +1,7 @@ /* ProductCategory.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductContext.cpp b/src/conv/step/step-g/ProductContext.cpp index 374c016d300..375cfe42856 100644 --- a/src/conv/step/step-g/ProductContext.cpp +++ b/src/conv/step/step-g/ProductContext.cpp @@ -1,7 +1,7 @@ /* ProductContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductContext.h b/src/conv/step/step-g/ProductContext.h index 871f248eb21..920a1ae1941 100644 --- a/src/conv/step/step-g/ProductContext.h +++ b/src/conv/step/step-g/ProductContext.h @@ -1,7 +1,7 @@ /* ProductContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinition.cpp b/src/conv/step/step-g/ProductDefinition.cpp index 697b631a66d..02f4697cf25 100644 --- a/src/conv/step/step-g/ProductDefinition.cpp +++ b/src/conv/step/step-g/ProductDefinition.cpp @@ -1,7 +1,7 @@ /* ProductDefinition.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinition.h b/src/conv/step/step-g/ProductDefinition.h index 2436ff1ca51..09673b909bb 100644 --- a/src/conv/step/step-g/ProductDefinition.h +++ b/src/conv/step/step-g/ProductDefinition.h @@ -1,7 +1,7 @@ /* ProductDefinition.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionContext.cpp b/src/conv/step/step-g/ProductDefinitionContext.cpp index fda362e8ed0..4d35cc7e8db 100644 --- a/src/conv/step/step-g/ProductDefinitionContext.cpp +++ b/src/conv/step/step-g/ProductDefinitionContext.cpp @@ -1,7 +1,7 @@ /* ProductDefinitionContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionContext.h b/src/conv/step/step-g/ProductDefinitionContext.h index 8a512770f3f..2cbf208ef74 100644 --- a/src/conv/step/step-g/ProductDefinitionContext.h +++ b/src/conv/step/step-g/ProductDefinitionContext.h @@ -1,7 +1,7 @@ /* ProductDefinitionContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionContextAssociation.cpp b/src/conv/step/step-g/ProductDefinitionContextAssociation.cpp index 275c8544d1f..8901424573b 100644 --- a/src/conv/step/step-g/ProductDefinitionContextAssociation.cpp +++ b/src/conv/step/step-g/ProductDefinitionContextAssociation.cpp @@ -1,7 +1,7 @@ /* ProductDefinitionContextAssociation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionContextAssociation.h b/src/conv/step/step-g/ProductDefinitionContextAssociation.h index ba8a22875f2..324d55fd62c 100644 --- a/src/conv/step/step-g/ProductDefinitionContextAssociation.h +++ b/src/conv/step/step-g/ProductDefinitionContextAssociation.h @@ -1,7 +1,7 @@ /* ProductDefinitionContextAssociation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionContextRole.cpp b/src/conv/step/step-g/ProductDefinitionContextRole.cpp index 9c5e4b78684..b3ba4425a40 100644 --- a/src/conv/step/step-g/ProductDefinitionContextRole.cpp +++ b/src/conv/step/step-g/ProductDefinitionContextRole.cpp @@ -1,7 +1,7 @@ /* ProductDefinitionContextRole.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionContextRole.h b/src/conv/step/step-g/ProductDefinitionContextRole.h index 9ccf540ee20..480e6f13a3f 100644 --- a/src/conv/step/step-g/ProductDefinitionContextRole.h +++ b/src/conv/step/step-g/ProductDefinitionContextRole.h @@ -1,7 +1,7 @@ /* ProductDefinitionContextRole.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionFormation.cpp b/src/conv/step/step-g/ProductDefinitionFormation.cpp index 7669b767244..5a756860e86 100644 --- a/src/conv/step/step-g/ProductDefinitionFormation.cpp +++ b/src/conv/step/step-g/ProductDefinitionFormation.cpp @@ -1,7 +1,7 @@ /* ProductDefinitionFormation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionFormation.h b/src/conv/step/step-g/ProductDefinitionFormation.h index 005a8d0baf3..008fa705d5d 100644 --- a/src/conv/step/step-g/ProductDefinitionFormation.h +++ b/src/conv/step/step-g/ProductDefinitionFormation.h @@ -1,7 +1,7 @@ /* ProductDefinitionFormation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionFormationWithSpecifiedSource.cpp b/src/conv/step/step-g/ProductDefinitionFormationWithSpecifiedSource.cpp index 0f07f80b7f7..99a4edc1c27 100644 --- a/src/conv/step/step-g/ProductDefinitionFormationWithSpecifiedSource.cpp +++ b/src/conv/step/step-g/ProductDefinitionFormationWithSpecifiedSource.cpp @@ -1,7 +1,7 @@ /* ProductDefinitionFormationWithSpecifiedSource.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionFormationWithSpecifiedSource.h b/src/conv/step/step-g/ProductDefinitionFormationWithSpecifiedSource.h index 106eb07de60..884af154eaa 100644 --- a/src/conv/step/step-g/ProductDefinitionFormationWithSpecifiedSource.h +++ b/src/conv/step/step-g/ProductDefinitionFormationWithSpecifiedSource.h @@ -1,7 +1,7 @@ /* ProductDefinitionFormationWithSpecifiedSource.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionRelationship.cpp b/src/conv/step/step-g/ProductDefinitionRelationship.cpp index d1393410e39..97c6058b0d5 100644 --- a/src/conv/step/step-g/ProductDefinitionRelationship.cpp +++ b/src/conv/step/step-g/ProductDefinitionRelationship.cpp @@ -1,7 +1,7 @@ /* ProductDefinitionRelationship.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionRelationship.h b/src/conv/step/step-g/ProductDefinitionRelationship.h index 8767d79bcf3..c9470c16fee 100644 --- a/src/conv/step/step-g/ProductDefinitionRelationship.h +++ b/src/conv/step/step-g/ProductDefinitionRelationship.h @@ -1,7 +1,7 @@ /* ProductDefinitionRelationship.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionShape.cpp b/src/conv/step/step-g/ProductDefinitionShape.cpp index 91d9ab7ccdf..83a3bd0565c 100644 --- a/src/conv/step/step-g/ProductDefinitionShape.cpp +++ b/src/conv/step/step-g/ProductDefinitionShape.cpp @@ -1,7 +1,7 @@ /* ProductDefinitionShape.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionShape.h b/src/conv/step/step-g/ProductDefinitionShape.h index d39fd51359d..390488d484e 100644 --- a/src/conv/step/step-g/ProductDefinitionShape.h +++ b/src/conv/step/step-g/ProductDefinitionShape.h @@ -1,7 +1,7 @@ /* ProductDefinitionShape.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionUsage.cpp b/src/conv/step/step-g/ProductDefinitionUsage.cpp index 4e3f8de7a4d..67fb8eb7bbf 100644 --- a/src/conv/step/step-g/ProductDefinitionUsage.cpp +++ b/src/conv/step/step-g/ProductDefinitionUsage.cpp @@ -1,7 +1,7 @@ /* ProductDefinitionUsage.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionUsage.h b/src/conv/step/step-g/ProductDefinitionUsage.h index 97fe9963a80..acda5296fd7 100644 --- a/src/conv/step/step-g/ProductDefinitionUsage.h +++ b/src/conv/step/step-g/ProductDefinitionUsage.h @@ -1,7 +1,7 @@ /* ProductDefinitionUsage.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionWithAssociatedDocuments.cpp b/src/conv/step/step-g/ProductDefinitionWithAssociatedDocuments.cpp index d37148a1830..2a1d0c45a0a 100644 --- a/src/conv/step/step-g/ProductDefinitionWithAssociatedDocuments.cpp +++ b/src/conv/step/step-g/ProductDefinitionWithAssociatedDocuments.cpp @@ -1,7 +1,7 @@ /* ProductDefinition.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductDefinitionWithAssociatedDocuments.h b/src/conv/step/step-g/ProductDefinitionWithAssociatedDocuments.h index 1f23fbf1c90..01f1a0d580d 100644 --- a/src/conv/step/step-g/ProductDefinitionWithAssociatedDocuments.h +++ b/src/conv/step/step-g/ProductDefinitionWithAssociatedDocuments.h @@ -1,7 +1,7 @@ /* ProductDefinitionWithAssociatedDocuments.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductRelatedProductCategory.cpp b/src/conv/step/step-g/ProductRelatedProductCategory.cpp index 9cdcd7ba82e..3d8db456d6d 100644 --- a/src/conv/step/step-g/ProductRelatedProductCategory.cpp +++ b/src/conv/step/step-g/ProductRelatedProductCategory.cpp @@ -1,7 +1,7 @@ /* ProductRelatedProductCategory.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ProductRelatedProductCategory.h b/src/conv/step/step-g/ProductRelatedProductCategory.h index cada448de08..38fa35e72d0 100644 --- a/src/conv/step/step-g/ProductRelatedProductCategory.h +++ b/src/conv/step/step-g/ProductRelatedProductCategory.h @@ -1,7 +1,7 @@ /* ProductRelatedProductCategory.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PropertyDefinition.cpp b/src/conv/step/step-g/PropertyDefinition.cpp index ed4fa5fdb39..833a41787aa 100644 --- a/src/conv/step/step-g/PropertyDefinition.cpp +++ b/src/conv/step/step-g/PropertyDefinition.cpp @@ -1,7 +1,7 @@ /* PropertyDefinition.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PropertyDefinition.h b/src/conv/step/step-g/PropertyDefinition.h index ee8b0272160..ba57fa32bd6 100644 --- a/src/conv/step/step-g/PropertyDefinition.h +++ b/src/conv/step/step-g/PropertyDefinition.h @@ -1,7 +1,7 @@ /* PropertyDefinition.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PropertyDefinitionRepresentation.cpp b/src/conv/step/step-g/PropertyDefinitionRepresentation.cpp index 35523fbbe68..e6843c595a2 100644 --- a/src/conv/step/step-g/PropertyDefinitionRepresentation.cpp +++ b/src/conv/step/step-g/PropertyDefinitionRepresentation.cpp @@ -1,7 +1,7 @@ /* PropertyDefinitionRepresentation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/PropertyDefinitionRepresentation.h b/src/conv/step/step-g/PropertyDefinitionRepresentation.h index 4a30debca12..925f6298655 100644 --- a/src/conv/step/step-g/PropertyDefinitionRepresentation.h +++ b/src/conv/step/step-g/PropertyDefinitionRepresentation.h @@ -1,7 +1,7 @@ /* PropertyDefinitionRepresentation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/QuasiUniformCurve.cpp b/src/conv/step/step-g/QuasiUniformCurve.cpp index 77693e63026..8b626cf3d81 100644 --- a/src/conv/step/step-g/QuasiUniformCurve.cpp +++ b/src/conv/step/step-g/QuasiUniformCurve.cpp @@ -1,7 +1,7 @@ /* QuasiUniformCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/QuasiUniformCurve.h b/src/conv/step/step-g/QuasiUniformCurve.h index d116801cf34..78dd8272884 100644 --- a/src/conv/step/step-g/QuasiUniformCurve.h +++ b/src/conv/step/step-g/QuasiUniformCurve.h @@ -1,7 +1,7 @@ /* QuasiUniformCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/QuasiUniformSurface.cpp b/src/conv/step/step-g/QuasiUniformSurface.cpp index 48b4ad92067..a51ef95abfb 100644 --- a/src/conv/step/step-g/QuasiUniformSurface.cpp +++ b/src/conv/step/step-g/QuasiUniformSurface.cpp @@ -1,7 +1,7 @@ /* QuasiUniformSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/QuasiUniformSurface.h b/src/conv/step/step-g/QuasiUniformSurface.h index 65c62569e46..7e8023ffca5 100644 --- a/src/conv/step/step-g/QuasiUniformSurface.h +++ b/src/conv/step/step-g/QuasiUniformSurface.h @@ -1,7 +1,7 @@ /* QuasiUniformSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RatioContextDependentUnit.cpp b/src/conv/step/step-g/RatioContextDependentUnit.cpp index 30fbc157ae9..2d492a348d2 100644 --- a/src/conv/step/step-g/RatioContextDependentUnit.cpp +++ b/src/conv/step/step-g/RatioContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* RatioContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RatioContextDependentUnit.h b/src/conv/step/step-g/RatioContextDependentUnit.h index b30f5993c75..70e529a6dc7 100644 --- a/src/conv/step/step-g/RatioContextDependentUnit.h +++ b/src/conv/step/step-g/RatioContextDependentUnit.h @@ -1,7 +1,7 @@ /* RatioContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RatioConversionBasedUnit.cpp b/src/conv/step/step-g/RatioConversionBasedUnit.cpp index 076d346ae27..78854017ba3 100644 --- a/src/conv/step/step-g/RatioConversionBasedUnit.cpp +++ b/src/conv/step/step-g/RatioConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* RatioConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RatioConversionBasedUnit.h b/src/conv/step/step-g/RatioConversionBasedUnit.h index 2701ba0e828..8d033266e20 100644 --- a/src/conv/step/step-g/RatioConversionBasedUnit.h +++ b/src/conv/step/step-g/RatioConversionBasedUnit.h @@ -1,7 +1,7 @@ /* RatioConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RatioSiUnit.cpp b/src/conv/step/step-g/RatioSiUnit.cpp index 4312cdb4759..fcf672bbc19 100644 --- a/src/conv/step/step-g/RatioSiUnit.cpp +++ b/src/conv/step/step-g/RatioSiUnit.cpp @@ -1,7 +1,7 @@ /* RatioSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RatioSiUnit.h b/src/conv/step/step-g/RatioSiUnit.h index eee49fc2a49..bac1d95650e 100644 --- a/src/conv/step/step-g/RatioSiUnit.h +++ b/src/conv/step/step-g/RatioSiUnit.h @@ -1,7 +1,7 @@ /* RatioSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RatioUnit.cpp b/src/conv/step/step-g/RatioUnit.cpp index 60c78d1ee32..85c0cf77048 100644 --- a/src/conv/step/step-g/RatioUnit.cpp +++ b/src/conv/step/step-g/RatioUnit.cpp @@ -1,7 +1,7 @@ /* RatioUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RatioUnit.h b/src/conv/step/step-g/RatioUnit.h index 1f13b5f7b43..a557e7cc783 100644 --- a/src/conv/step/step-g/RatioUnit.h +++ b/src/conv/step/step-g/RatioUnit.h @@ -1,7 +1,7 @@ /* RatioUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBSplineCurve.cpp b/src/conv/step/step-g/RationalBSplineCurve.cpp index 73d9f2e8d03..4b87c0a3cda 100644 --- a/src/conv/step/step-g/RationalBSplineCurve.cpp +++ b/src/conv/step/step-g/RationalBSplineCurve.cpp @@ -1,7 +1,7 @@ /* RationalBSplineCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBSplineCurve.h b/src/conv/step/step-g/RationalBSplineCurve.h index b3579ee8558..33b354633da 100644 --- a/src/conv/step/step-g/RationalBSplineCurve.h +++ b/src/conv/step/step-g/RationalBSplineCurve.h @@ -1,7 +1,7 @@ /* RationalBSplineCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBSplineCurveWithKnots.cpp b/src/conv/step/step-g/RationalBSplineCurveWithKnots.cpp index b943ede94bf..6f43b4cf9f9 100644 --- a/src/conv/step/step-g/RationalBSplineCurveWithKnots.cpp +++ b/src/conv/step/step-g/RationalBSplineCurveWithKnots.cpp @@ -1,7 +1,7 @@ /* RationalBSplineCurveWithKnots.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBSplineCurveWithKnots.h b/src/conv/step/step-g/RationalBSplineCurveWithKnots.h index feeeaa6f901..d891ba07ae2 100644 --- a/src/conv/step/step-g/RationalBSplineCurveWithKnots.h +++ b/src/conv/step/step-g/RationalBSplineCurveWithKnots.h @@ -1,7 +1,7 @@ /* RationalBSplineCurveWithKnots.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBSplineSurface.cpp b/src/conv/step/step-g/RationalBSplineSurface.cpp index ebbad6317e9..6feaeaa2db4 100644 --- a/src/conv/step/step-g/RationalBSplineSurface.cpp +++ b/src/conv/step/step-g/RationalBSplineSurface.cpp @@ -1,7 +1,7 @@ /* RationalBSplineSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBSplineSurface.h b/src/conv/step/step-g/RationalBSplineSurface.h index bdca3069726..246d09c51de 100644 --- a/src/conv/step/step-g/RationalBSplineSurface.h +++ b/src/conv/step/step-g/RationalBSplineSurface.h @@ -1,7 +1,7 @@ /* RationalBSplineSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBSplineSurfaceWithKnots.cpp b/src/conv/step/step-g/RationalBSplineSurfaceWithKnots.cpp index 26fccab992f..a0c99a99886 100644 --- a/src/conv/step/step-g/RationalBSplineSurfaceWithKnots.cpp +++ b/src/conv/step/step-g/RationalBSplineSurfaceWithKnots.cpp @@ -1,7 +1,7 @@ /* RationalBSplineSurfaceWithKnots.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBSplineSurfaceWithKnots.h b/src/conv/step/step-g/RationalBSplineSurfaceWithKnots.h index 44bf6006205..cb4a74efdb2 100644 --- a/src/conv/step/step-g/RationalBSplineSurfaceWithKnots.h +++ b/src/conv/step/step-g/RationalBSplineSurfaceWithKnots.h @@ -1,7 +1,7 @@ /* RationalBSplineSurfaceWithKnots.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBezierCurve.cpp b/src/conv/step/step-g/RationalBezierCurve.cpp index 8e83226e8ac..627f3198223 100644 --- a/src/conv/step/step-g/RationalBezierCurve.cpp +++ b/src/conv/step/step-g/RationalBezierCurve.cpp @@ -1,7 +1,7 @@ /* RationalBezierCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBezierCurve.h b/src/conv/step/step-g/RationalBezierCurve.h index 5b7e00782f5..20c4d2b9c18 100644 --- a/src/conv/step/step-g/RationalBezierCurve.h +++ b/src/conv/step/step-g/RationalBezierCurve.h @@ -1,7 +1,7 @@ /* RationalBezierCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBezierSurface.cpp b/src/conv/step/step-g/RationalBezierSurface.cpp index 5e507fea757..c3a7cda16ae 100644 --- a/src/conv/step/step-g/RationalBezierSurface.cpp +++ b/src/conv/step/step-g/RationalBezierSurface.cpp @@ -1,7 +1,7 @@ /* RationalBezierSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalBezierSurface.h b/src/conv/step/step-g/RationalBezierSurface.h index c0fa91b3f7f..597b3c3891d 100644 --- a/src/conv/step/step-g/RationalBezierSurface.h +++ b/src/conv/step/step-g/RationalBezierSurface.h @@ -1,7 +1,7 @@ /* RationalBezierSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalQuasiUniformCurve.cpp b/src/conv/step/step-g/RationalQuasiUniformCurve.cpp index 30dc08b1aa1..31eb176d9f9 100644 --- a/src/conv/step/step-g/RationalQuasiUniformCurve.cpp +++ b/src/conv/step/step-g/RationalQuasiUniformCurve.cpp @@ -1,7 +1,7 @@ /* RationalQuasiUniformCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalQuasiUniformCurve.h b/src/conv/step/step-g/RationalQuasiUniformCurve.h index b05ba93e362..9b230c90c5a 100644 --- a/src/conv/step/step-g/RationalQuasiUniformCurve.h +++ b/src/conv/step/step-g/RationalQuasiUniformCurve.h @@ -1,7 +1,7 @@ /* RationalQuasiUniformCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalQuasiUniformSurface.cpp b/src/conv/step/step-g/RationalQuasiUniformSurface.cpp index 8c1450ee52d..d11a25881f7 100644 --- a/src/conv/step/step-g/RationalQuasiUniformSurface.cpp +++ b/src/conv/step/step-g/RationalQuasiUniformSurface.cpp @@ -1,7 +1,7 @@ /* RationalQuasiUniformSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalQuasiUniformSurface.h b/src/conv/step/step-g/RationalQuasiUniformSurface.h index 3cccd9e5059..9b30cf4a067 100644 --- a/src/conv/step/step-g/RationalQuasiUniformSurface.h +++ b/src/conv/step/step-g/RationalQuasiUniformSurface.h @@ -1,7 +1,7 @@ /* RationalQuasiUniformSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalUniformCurve.cpp b/src/conv/step/step-g/RationalUniformCurve.cpp index a553e6ed4a3..b4fd7b6df9c 100644 --- a/src/conv/step/step-g/RationalUniformCurve.cpp +++ b/src/conv/step/step-g/RationalUniformCurve.cpp @@ -1,7 +1,7 @@ /* RationalUniformCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalUniformCurve.h b/src/conv/step/step-g/RationalUniformCurve.h index 1b721ee8868..10f086b16a8 100644 --- a/src/conv/step/step-g/RationalUniformCurve.h +++ b/src/conv/step/step-g/RationalUniformCurve.h @@ -1,7 +1,7 @@ /* RationalUniformCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalUniformSurface.cpp b/src/conv/step/step-g/RationalUniformSurface.cpp index 47b601e635d..bb17b4df322 100644 --- a/src/conv/step/step-g/RationalUniformSurface.cpp +++ b/src/conv/step/step-g/RationalUniformSurface.cpp @@ -1,7 +1,7 @@ /* RationalUniformSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RationalUniformSurface.h b/src/conv/step/step-g/RationalUniformSurface.h index bc4be830979..a3ea9e8e7ae 100644 --- a/src/conv/step/step-g/RationalUniformSurface.h +++ b/src/conv/step/step-g/RationalUniformSurface.h @@ -1,7 +1,7 @@ /* RationalUniformSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RectangularCompositeSurface.cpp b/src/conv/step/step-g/RectangularCompositeSurface.cpp index 6a570878a97..af595de00a4 100644 --- a/src/conv/step/step-g/RectangularCompositeSurface.cpp +++ b/src/conv/step/step-g/RectangularCompositeSurface.cpp @@ -1,7 +1,7 @@ /* RectangularCompositeSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RectangularCompositeSurface.h b/src/conv/step/step-g/RectangularCompositeSurface.h index 79579d2b75d..07b21c47bd0 100644 --- a/src/conv/step/step-g/RectangularCompositeSurface.h +++ b/src/conv/step/step-g/RectangularCompositeSurface.h @@ -1,7 +1,7 @@ /* RectangularCompositeSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RectangularTrimmedSurface.cpp b/src/conv/step/step-g/RectangularTrimmedSurface.cpp index ede752b6433..81d6976c80c 100644 --- a/src/conv/step/step-g/RectangularTrimmedSurface.cpp +++ b/src/conv/step/step-g/RectangularTrimmedSurface.cpp @@ -1,7 +1,7 @@ /* RectangularTrimmedSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RectangularTrimmedSurface.h b/src/conv/step/step-g/RectangularTrimmedSurface.h index b7ac42c2ddc..cf7519b8136 100644 --- a/src/conv/step/step-g/RectangularTrimmedSurface.h +++ b/src/conv/step/step-g/RectangularTrimmedSurface.h @@ -1,7 +1,7 @@ /* RectangularTrimmedSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Representation.cpp b/src/conv/step/step-g/Representation.cpp index 6c3723c72e4..9edd6fb1982 100644 --- a/src/conv/step/step-g/Representation.cpp +++ b/src/conv/step/step-g/Representation.cpp @@ -1,7 +1,7 @@ /* Representation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Representation.h b/src/conv/step/step-g/Representation.h index 5e6e0ecb5e8..11d80d6f109 100644 --- a/src/conv/step/step-g/Representation.h +++ b/src/conv/step/step-g/Representation.h @@ -1,7 +1,7 @@ /* Representation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentationContext.cpp b/src/conv/step/step-g/RepresentationContext.cpp index 3699c2d227f..15ce61f662e 100644 --- a/src/conv/step/step-g/RepresentationContext.cpp +++ b/src/conv/step/step-g/RepresentationContext.cpp @@ -1,7 +1,7 @@ /* RepresentationContext.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentationContext.h b/src/conv/step/step-g/RepresentationContext.h index a4a3c8fa49b..e1adcf84098 100644 --- a/src/conv/step/step-g/RepresentationContext.h +++ b/src/conv/step/step-g/RepresentationContext.h @@ -1,7 +1,7 @@ /* RepresentationContext.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentationItem.cpp b/src/conv/step/step-g/RepresentationItem.cpp index ff7b9a5ec0c..9de3adfcb1b 100644 --- a/src/conv/step/step-g/RepresentationItem.cpp +++ b/src/conv/step/step-g/RepresentationItem.cpp @@ -1,7 +1,7 @@ /* RepresentationItem.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentationItem.h b/src/conv/step/step-g/RepresentationItem.h index 27d3aa4a945..f8141c15730 100644 --- a/src/conv/step/step-g/RepresentationItem.h +++ b/src/conv/step/step-g/RepresentationItem.h @@ -1,7 +1,7 @@ /* RepresentationItem.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentationRelationship.cpp b/src/conv/step/step-g/RepresentationRelationship.cpp index a926a210cea..04be72ae3c0 100644 --- a/src/conv/step/step-g/RepresentationRelationship.cpp +++ b/src/conv/step/step-g/RepresentationRelationship.cpp @@ -1,7 +1,7 @@ /* RepresentationRelationship.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentationRelationship.h b/src/conv/step/step-g/RepresentationRelationship.h index e70041fb9b1..65ff841adc7 100644 --- a/src/conv/step/step-g/RepresentationRelationship.h +++ b/src/conv/step/step-g/RepresentationRelationship.h @@ -1,7 +1,7 @@ /* RepresentationRelationship.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentationRelationshipWithTransformation.cpp b/src/conv/step/step-g/RepresentationRelationshipWithTransformation.cpp index d72c94f522b..6d8c5612c83 100644 --- a/src/conv/step/step-g/RepresentationRelationshipWithTransformation.cpp +++ b/src/conv/step/step-g/RepresentationRelationshipWithTransformation.cpp @@ -1,7 +1,7 @@ /* RepresentationRelationshipWithTransformation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentationRelationshipWithTransformation.h b/src/conv/step/step-g/RepresentationRelationshipWithTransformation.h index dc6fc26d083..94c2c28c777 100644 --- a/src/conv/step/step-g/RepresentationRelationshipWithTransformation.h +++ b/src/conv/step/step-g/RepresentationRelationshipWithTransformation.h @@ -1,7 +1,7 @@ /* RepresentationRelationshipWithTransformation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentedDefinition.cpp b/src/conv/step/step-g/RepresentedDefinition.cpp index 3d58a1756b4..1a0f6d36ea1 100644 --- a/src/conv/step/step-g/RepresentedDefinition.cpp +++ b/src/conv/step/step-g/RepresentedDefinition.cpp @@ -1,7 +1,7 @@ /* RepresentedDefinition.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/RepresentedDefinition.h b/src/conv/step/step-g/RepresentedDefinition.h index be8e77839e5..776fc3812cd 100644 --- a/src/conv/step/step-g/RepresentedDefinition.h +++ b/src/conv/step/step-g/RepresentedDefinition.h @@ -1,7 +1,7 @@ /* RepresentedDefinition.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/STEPEntity.cpp b/src/conv/step/step-g/STEPEntity.cpp index f3fc9ee1952..6bd37704362 100644 --- a/src/conv/step/step-g/STEPEntity.cpp +++ b/src/conv/step/step-g/STEPEntity.cpp @@ -1,7 +1,7 @@ /* S T E P E N T I T Y . C P P * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/STEPEntity.h b/src/conv/step/step-g/STEPEntity.h index f81c6882697..9f0238794a4 100644 --- a/src/conv/step/step-g/STEPEntity.h +++ b/src/conv/step/step-g/STEPEntity.h @@ -1,7 +1,7 @@ /* S T E P E N T I T Y . H * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SeamCurve.cpp b/src/conv/step/step-g/SeamCurve.cpp index a92aab4ecde..1b68d0e5909 100644 --- a/src/conv/step/step-g/SeamCurve.cpp +++ b/src/conv/step/step-g/SeamCurve.cpp @@ -1,7 +1,7 @@ /* SeamCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SeamCurve.h b/src/conv/step/step-g/SeamCurve.h index 6922e36716e..ab0277365be 100644 --- a/src/conv/step/step-g/SeamCurve.h +++ b/src/conv/step/step-g/SeamCurve.h @@ -1,7 +1,7 @@ /* SeamCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeAspect.cpp b/src/conv/step/step-g/ShapeAspect.cpp index 4965c30bfa6..d9c5b754e1c 100644 --- a/src/conv/step/step-g/ShapeAspect.cpp +++ b/src/conv/step/step-g/ShapeAspect.cpp @@ -1,7 +1,7 @@ /* ShapeAspect.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeAspect.h b/src/conv/step/step-g/ShapeAspect.h index d0d5848e405..eeac37767a2 100644 --- a/src/conv/step/step-g/ShapeAspect.h +++ b/src/conv/step/step-g/ShapeAspect.h @@ -1,7 +1,7 @@ /* ShapeAspect.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeAspectRelationship.cpp b/src/conv/step/step-g/ShapeAspectRelationship.cpp index 1bb198676f9..6a00bca9f94 100644 --- a/src/conv/step/step-g/ShapeAspectRelationship.cpp +++ b/src/conv/step/step-g/ShapeAspectRelationship.cpp @@ -1,7 +1,7 @@ /* ShapeAspectRelationship.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeAspectRelationship.h b/src/conv/step/step-g/ShapeAspectRelationship.h index 7b5db7dc877..a5cfb641408 100644 --- a/src/conv/step/step-g/ShapeAspectRelationship.h +++ b/src/conv/step/step-g/ShapeAspectRelationship.h @@ -1,7 +1,7 @@ /* ShapeAspectRelationship.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeDefinition.cpp b/src/conv/step/step-g/ShapeDefinition.cpp index c83aebc7dda..e5f7eb3e745 100644 --- a/src/conv/step/step-g/ShapeDefinition.cpp +++ b/src/conv/step/step-g/ShapeDefinition.cpp @@ -1,7 +1,7 @@ /* ShapeDefinition.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeDefinition.h b/src/conv/step/step-g/ShapeDefinition.h index d1592933248..cccd526bd2c 100644 --- a/src/conv/step/step-g/ShapeDefinition.h +++ b/src/conv/step/step-g/ShapeDefinition.h @@ -1,7 +1,7 @@ /* ShapeDefinition.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeDefinitionRepresentation.cpp b/src/conv/step/step-g/ShapeDefinitionRepresentation.cpp index e933d57ee1f..95e6c7098c2 100644 --- a/src/conv/step/step-g/ShapeDefinitionRepresentation.cpp +++ b/src/conv/step/step-g/ShapeDefinitionRepresentation.cpp @@ -1,7 +1,7 @@ /* ShapeDefinitionRepresentation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeDefinitionRepresentation.h b/src/conv/step/step-g/ShapeDefinitionRepresentation.h index 82e05752d7b..a91b2c7ce90 100644 --- a/src/conv/step/step-g/ShapeDefinitionRepresentation.h +++ b/src/conv/step/step-g/ShapeDefinitionRepresentation.h @@ -1,7 +1,7 @@ /* ShapeDefinitionRepresentation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeRepresentation.cpp b/src/conv/step/step-g/ShapeRepresentation.cpp index 17280adc014..5f555fa2b2a 100644 --- a/src/conv/step/step-g/ShapeRepresentation.cpp +++ b/src/conv/step/step-g/ShapeRepresentation.cpp @@ -1,7 +1,7 @@ /* ShapeRepresentation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeRepresentation.h b/src/conv/step/step-g/ShapeRepresentation.h index d0131005322..916a3605480 100644 --- a/src/conv/step/step-g/ShapeRepresentation.h +++ b/src/conv/step/step-g/ShapeRepresentation.h @@ -1,7 +1,7 @@ /* ShapeRepresentation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeRepresentationRelationship.cpp b/src/conv/step/step-g/ShapeRepresentationRelationship.cpp index bcd424d1219..2d9135b7e5d 100644 --- a/src/conv/step/step-g/ShapeRepresentationRelationship.cpp +++ b/src/conv/step/step-g/ShapeRepresentationRelationship.cpp @@ -1,7 +1,7 @@ /* ShapeRepresentationRelationship.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShapeRepresentationRelationship.h b/src/conv/step/step-g/ShapeRepresentationRelationship.h index 3a0e38a875f..4b4587ed6d9 100644 --- a/src/conv/step/step-g/ShapeRepresentationRelationship.h +++ b/src/conv/step/step-g/ShapeRepresentationRelationship.h @@ -1,7 +1,7 @@ /* ShapeRepresentationRelationship.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShellBasedSurfaceModel.cpp b/src/conv/step/step-g/ShellBasedSurfaceModel.cpp index 562ea049de0..5ce92eaf355 100644 --- a/src/conv/step/step-g/ShellBasedSurfaceModel.cpp +++ b/src/conv/step/step-g/ShellBasedSurfaceModel.cpp @@ -1,7 +1,7 @@ /* S H E L L B A S E D S U R F A C E M O D E L . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ShellBasedSurfaceModel.h b/src/conv/step/step-g/ShellBasedSurfaceModel.h index d00e2ce3eb8..1e3c5437221 100644 --- a/src/conv/step/step-g/ShellBasedSurfaceModel.h +++ b/src/conv/step/step-g/ShellBasedSurfaceModel.h @@ -1,7 +1,7 @@ /* S H E L L B A S E D S U R F A C E M O D E L . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SiUnit.cpp b/src/conv/step/step-g/SiUnit.cpp index cbf9adc441a..9bcbddd0bd2 100644 --- a/src/conv/step/step-g/SiUnit.cpp +++ b/src/conv/step/step-g/SiUnit.cpp @@ -1,7 +1,7 @@ /* SiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SiUnit.h b/src/conv/step/step-g/SiUnit.h index de906576f81..01105486245 100644 --- a/src/conv/step/step-g/SiUnit.h +++ b/src/conv/step/step-g/SiUnit.h @@ -1,7 +1,7 @@ /* SiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidAngleContextDependentUnit.cpp b/src/conv/step/step-g/SolidAngleContextDependentUnit.cpp index f9cc7bababf..08eadd10b79 100644 --- a/src/conv/step/step-g/SolidAngleContextDependentUnit.cpp +++ b/src/conv/step/step-g/SolidAngleContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* SolidAngleContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidAngleContextDependentUnit.h b/src/conv/step/step-g/SolidAngleContextDependentUnit.h index d4c909214b4..f1d6919eb97 100644 --- a/src/conv/step/step-g/SolidAngleContextDependentUnit.h +++ b/src/conv/step/step-g/SolidAngleContextDependentUnit.h @@ -1,7 +1,7 @@ /* SolidAngleContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidAngleConversionBasedUnit.cpp b/src/conv/step/step-g/SolidAngleConversionBasedUnit.cpp index e846b2ef99a..3d88ff30bb6 100644 --- a/src/conv/step/step-g/SolidAngleConversionBasedUnit.cpp +++ b/src/conv/step/step-g/SolidAngleConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* SolidAngleConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidAngleConversionBasedUnit.h b/src/conv/step/step-g/SolidAngleConversionBasedUnit.h index 175addc1a5d..1c3e7900417 100644 --- a/src/conv/step/step-g/SolidAngleConversionBasedUnit.h +++ b/src/conv/step/step-g/SolidAngleConversionBasedUnit.h @@ -1,7 +1,7 @@ /* SolidAngleConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidAngleSiUnit.cpp b/src/conv/step/step-g/SolidAngleSiUnit.cpp index 4257a7f791c..b652e5ce0a9 100644 --- a/src/conv/step/step-g/SolidAngleSiUnit.cpp +++ b/src/conv/step/step-g/SolidAngleSiUnit.cpp @@ -1,7 +1,7 @@ /* SolidAngleSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidAngleSiUnit.h b/src/conv/step/step-g/SolidAngleSiUnit.h index c6913badeb2..549a3d1f244 100644 --- a/src/conv/step/step-g/SolidAngleSiUnit.h +++ b/src/conv/step/step-g/SolidAngleSiUnit.h @@ -1,7 +1,7 @@ /* SolidAngleSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidAngleUnit.cpp b/src/conv/step/step-g/SolidAngleUnit.cpp index f08bdbcfd05..06c97fdbd19 100644 --- a/src/conv/step/step-g/SolidAngleUnit.cpp +++ b/src/conv/step/step-g/SolidAngleUnit.cpp @@ -1,7 +1,7 @@ /* SolidAngleUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidAngleUnit.h b/src/conv/step/step-g/SolidAngleUnit.h index e804da1c648..3a04413ef16 100644 --- a/src/conv/step/step-g/SolidAngleUnit.h +++ b/src/conv/step/step-g/SolidAngleUnit.h @@ -1,7 +1,7 @@ /* SolidAngleUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidModel.cpp b/src/conv/step/step-g/SolidModel.cpp index f650dc10e52..9426a654f6e 100644 --- a/src/conv/step/step-g/SolidModel.cpp +++ b/src/conv/step/step-g/SolidModel.cpp @@ -1,7 +1,7 @@ /* SolidModel.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SolidModel.h b/src/conv/step/step-g/SolidModel.h index 655f13a789f..1bff880f84a 100644 --- a/src/conv/step/step-g/SolidModel.h +++ b/src/conv/step/step-g/SolidModel.h @@ -1,7 +1,7 @@ /* SolidModel.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SphericalSurface.cpp b/src/conv/step/step-g/SphericalSurface.cpp index 789b1ce91c1..fb218390088 100644 --- a/src/conv/step/step-g/SphericalSurface.cpp +++ b/src/conv/step/step-g/SphericalSurface.cpp @@ -1,7 +1,7 @@ /* SphericalSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SphericalSurface.h b/src/conv/step/step-g/SphericalSurface.h index 2f8c0fd47a6..0a0a23e60c8 100644 --- a/src/conv/step/step-g/SphericalSurface.h +++ b/src/conv/step/step-g/SphericalSurface.h @@ -1,7 +1,7 @@ /* SphericalSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Surface.cpp b/src/conv/step/step-g/Surface.cpp index 72c8d477834..da365b9228a 100644 --- a/src/conv/step/step-g/Surface.cpp +++ b/src/conv/step/step-g/Surface.cpp @@ -1,7 +1,7 @@ /* Surface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Surface.h b/src/conv/step/step-g/Surface.h index 137dd55904f..fdc6e03618b 100644 --- a/src/conv/step/step-g/Surface.h +++ b/src/conv/step/step-g/Surface.h @@ -1,7 +1,7 @@ /* Surface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfaceCurve.cpp b/src/conv/step/step-g/SurfaceCurve.cpp index 401587b9b8d..1d62b716531 100644 --- a/src/conv/step/step-g/SurfaceCurve.cpp +++ b/src/conv/step/step-g/SurfaceCurve.cpp @@ -1,7 +1,7 @@ /* SurfaceCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfaceCurve.h b/src/conv/step/step-g/SurfaceCurve.h index 60f92cd274e..ca3169f8b25 100644 --- a/src/conv/step/step-g/SurfaceCurve.h +++ b/src/conv/step/step-g/SurfaceCurve.h @@ -1,7 +1,7 @@ /* SurfaceCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfaceOfLinearExtrusion.cpp b/src/conv/step/step-g/SurfaceOfLinearExtrusion.cpp index 9f5e7d036f4..696f902a032 100644 --- a/src/conv/step/step-g/SurfaceOfLinearExtrusion.cpp +++ b/src/conv/step/step-g/SurfaceOfLinearExtrusion.cpp @@ -1,7 +1,7 @@ /* SurfaceOfLinearExtrusion.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfaceOfLinearExtrusion.h b/src/conv/step/step-g/SurfaceOfLinearExtrusion.h index 9321f609590..62b48d9ad7a 100644 --- a/src/conv/step/step-g/SurfaceOfLinearExtrusion.h +++ b/src/conv/step/step-g/SurfaceOfLinearExtrusion.h @@ -1,7 +1,7 @@ /* SurfaceOfLinearExtrusion.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfaceOfRevolution.cpp b/src/conv/step/step-g/SurfaceOfRevolution.cpp index 09138a5cafa..2929c3e559e 100644 --- a/src/conv/step/step-g/SurfaceOfRevolution.cpp +++ b/src/conv/step/step-g/SurfaceOfRevolution.cpp @@ -1,7 +1,7 @@ /* SurfaceOfRevolution.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfaceOfRevolution.h b/src/conv/step/step-g/SurfaceOfRevolution.h index d0494e65745..99b11b7e2d4 100644 --- a/src/conv/step/step-g/SurfaceOfRevolution.h +++ b/src/conv/step/step-g/SurfaceOfRevolution.h @@ -1,7 +1,7 @@ /* SurfaceOfRevolution.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfacePatch.cpp b/src/conv/step/step-g/SurfacePatch.cpp index bf533d595f1..7393abb7b78 100644 --- a/src/conv/step/step-g/SurfacePatch.cpp +++ b/src/conv/step/step-g/SurfacePatch.cpp @@ -1,7 +1,7 @@ /* SurfacePatch.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfacePatch.h b/src/conv/step/step-g/SurfacePatch.h index 4cc8f688b12..f463f237c74 100644 --- a/src/conv/step/step-g/SurfacePatch.h +++ b/src/conv/step/step-g/SurfacePatch.h @@ -1,7 +1,7 @@ /* SurfacePatch.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfaceReplica.cpp b/src/conv/step/step-g/SurfaceReplica.cpp index 78654c0dbb9..44885ca3ff3 100644 --- a/src/conv/step/step-g/SurfaceReplica.cpp +++ b/src/conv/step/step-g/SurfaceReplica.cpp @@ -1,7 +1,7 @@ /* SurfaceReplica.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SurfaceReplica.h b/src/conv/step/step-g/SurfaceReplica.h index d1a0c216a96..a67e9f7a17a 100644 --- a/src/conv/step/step-g/SurfaceReplica.h +++ b/src/conv/step/step-g/SurfaceReplica.h @@ -1,7 +1,7 @@ /* SurfaceReplica.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SweptSurface.cpp b/src/conv/step/step-g/SweptSurface.cpp index b6c8e7eae96..f83b8ba4c93 100644 --- a/src/conv/step/step-g/SweptSurface.cpp +++ b/src/conv/step/step-g/SweptSurface.cpp @@ -1,7 +1,7 @@ /* SweptSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/SweptSurface.h b/src/conv/step/step-g/SweptSurface.h index 5e2c5da6c82..7261c3d891e 100644 --- a/src/conv/step/step-g/SweptSurface.h +++ b/src/conv/step/step-g/SweptSurface.h @@ -1,7 +1,7 @@ /* SweptSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ThermodynamicTemperatureContextDependentUnit.cpp b/src/conv/step/step-g/ThermodynamicTemperatureContextDependentUnit.cpp index fa6ce6c1686..4c47b46b59d 100644 --- a/src/conv/step/step-g/ThermodynamicTemperatureContextDependentUnit.cpp +++ b/src/conv/step/step-g/ThermodynamicTemperatureContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* ThermodynamicTemperatureContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ThermodynamicTemperatureContextDependentUnit.h b/src/conv/step/step-g/ThermodynamicTemperatureContextDependentUnit.h index 5045080fc05..069b78c11e7 100644 --- a/src/conv/step/step-g/ThermodynamicTemperatureContextDependentUnit.h +++ b/src/conv/step/step-g/ThermodynamicTemperatureContextDependentUnit.h @@ -1,7 +1,7 @@ /* ThermodynamicTemperatureContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ThermodynamicTemperatureConversionBasedUnit.cpp b/src/conv/step/step-g/ThermodynamicTemperatureConversionBasedUnit.cpp index 911c7357f58..5b99a49eb73 100644 --- a/src/conv/step/step-g/ThermodynamicTemperatureConversionBasedUnit.cpp +++ b/src/conv/step/step-g/ThermodynamicTemperatureConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* ThermodynamicTemperatureConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ThermodynamicTemperatureConversionBasedUnit.h b/src/conv/step/step-g/ThermodynamicTemperatureConversionBasedUnit.h index 3bd010e383b..4427ec5d674 100644 --- a/src/conv/step/step-g/ThermodynamicTemperatureConversionBasedUnit.h +++ b/src/conv/step/step-g/ThermodynamicTemperatureConversionBasedUnit.h @@ -1,7 +1,7 @@ /* ThermodynamicTemperatureConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ThermodynamicTemperatureSiUnit.cpp b/src/conv/step/step-g/ThermodynamicTemperatureSiUnit.cpp index 0f538dbbaa4..04cdea32d0b 100644 --- a/src/conv/step/step-g/ThermodynamicTemperatureSiUnit.cpp +++ b/src/conv/step/step-g/ThermodynamicTemperatureSiUnit.cpp @@ -1,7 +1,7 @@ /* ThermodynamicTemperatureSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ThermodynamicTemperatureSiUnit.h b/src/conv/step/step-g/ThermodynamicTemperatureSiUnit.h index 5b67c9322d7..d785c3c8ba1 100644 --- a/src/conv/step/step-g/ThermodynamicTemperatureSiUnit.h +++ b/src/conv/step/step-g/ThermodynamicTemperatureSiUnit.h @@ -1,7 +1,7 @@ /* ThermodynamicTemperatureSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ThermodynamicTemperatureUnit.cpp b/src/conv/step/step-g/ThermodynamicTemperatureUnit.cpp index 87da4a6172e..a16bd686789 100644 --- a/src/conv/step/step-g/ThermodynamicTemperatureUnit.cpp +++ b/src/conv/step/step-g/ThermodynamicTemperatureUnit.cpp @@ -1,7 +1,7 @@ /* ThermodynamicTemperatureUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ThermodynamicTemperatureUnit.h b/src/conv/step/step-g/ThermodynamicTemperatureUnit.h index 4b529bdc065..f141c5efe17 100644 --- a/src/conv/step/step-g/ThermodynamicTemperatureUnit.h +++ b/src/conv/step/step-g/ThermodynamicTemperatureUnit.h @@ -1,7 +1,7 @@ /* ThermodynamicTemperatureUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TimeContextDependentUnit.cpp b/src/conv/step/step-g/TimeContextDependentUnit.cpp index 7fbca5ee68a..41e7e0492e8 100644 --- a/src/conv/step/step-g/TimeContextDependentUnit.cpp +++ b/src/conv/step/step-g/TimeContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* TimeContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TimeContextDependentUnit.h b/src/conv/step/step-g/TimeContextDependentUnit.h index 311a8103d37..e238c33ad5e 100644 --- a/src/conv/step/step-g/TimeContextDependentUnit.h +++ b/src/conv/step/step-g/TimeContextDependentUnit.h @@ -1,7 +1,7 @@ /* TimeContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TimeConversionBasedUnit.cpp b/src/conv/step/step-g/TimeConversionBasedUnit.cpp index c0568b14d52..67e07113b2c 100644 --- a/src/conv/step/step-g/TimeConversionBasedUnit.cpp +++ b/src/conv/step/step-g/TimeConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* TimeConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TimeConversionBasedUnit.h b/src/conv/step/step-g/TimeConversionBasedUnit.h index 6d58a17c499..4ca207c4b40 100644 --- a/src/conv/step/step-g/TimeConversionBasedUnit.h +++ b/src/conv/step/step-g/TimeConversionBasedUnit.h @@ -1,7 +1,7 @@ /* TimeConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TimeSiUnit.cpp b/src/conv/step/step-g/TimeSiUnit.cpp index 0ca1e2eb593..4b733c8fd08 100644 --- a/src/conv/step/step-g/TimeSiUnit.cpp +++ b/src/conv/step/step-g/TimeSiUnit.cpp @@ -1,7 +1,7 @@ /* TimeSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TimeSiUnit.h b/src/conv/step/step-g/TimeSiUnit.h index a2a208fb862..8d702fc0022 100644 --- a/src/conv/step/step-g/TimeSiUnit.h +++ b/src/conv/step/step-g/TimeSiUnit.h @@ -1,7 +1,7 @@ /* TimeSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TimeUnit.cpp b/src/conv/step/step-g/TimeUnit.cpp index 881cb556236..34a2eead940 100644 --- a/src/conv/step/step-g/TimeUnit.cpp +++ b/src/conv/step/step-g/TimeUnit.cpp @@ -1,7 +1,7 @@ /* TimeUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TimeUnit.h b/src/conv/step/step-g/TimeUnit.h index 6d4c32fa858..6981ba354c1 100644 --- a/src/conv/step/step-g/TimeUnit.h +++ b/src/conv/step/step-g/TimeUnit.h @@ -1,7 +1,7 @@ /* TimeUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TopologicalRepresentationItem.cpp b/src/conv/step/step-g/TopologicalRepresentationItem.cpp index 013d15aa8bf..090035821a3 100644 --- a/src/conv/step/step-g/TopologicalRepresentationItem.cpp +++ b/src/conv/step/step-g/TopologicalRepresentationItem.cpp @@ -1,7 +1,7 @@ /* TopologicalRepresentationItem.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TopologicalRepresentationItem.h b/src/conv/step/step-g/TopologicalRepresentationItem.h index 7ef789ce885..f649721c549 100644 --- a/src/conv/step/step-g/TopologicalRepresentationItem.h +++ b/src/conv/step/step-g/TopologicalRepresentationItem.h @@ -1,7 +1,7 @@ /* TopologicalRepresentationItem.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ToroidalSurface.cpp b/src/conv/step/step-g/ToroidalSurface.cpp index a2157993b12..2584115ce7c 100644 --- a/src/conv/step/step-g/ToroidalSurface.cpp +++ b/src/conv/step/step-g/ToroidalSurface.cpp @@ -1,7 +1,7 @@ /* ToroidalSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/ToroidalSurface.h b/src/conv/step/step-g/ToroidalSurface.h index 9736e552cf2..14848014c95 100644 --- a/src/conv/step/step-g/ToroidalSurface.h +++ b/src/conv/step/step-g/ToroidalSurface.h @@ -1,7 +1,7 @@ /* ToroidalSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Transformation.cpp b/src/conv/step/step-g/Transformation.cpp index f76539bf255..d22aa3ee95e 100644 --- a/src/conv/step/step-g/Transformation.cpp +++ b/src/conv/step/step-g/Transformation.cpp @@ -1,7 +1,7 @@ /* Transformation.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Transformation.h b/src/conv/step/step-g/Transformation.h index 1a47e2b5a2d..93f117162ad 100644 --- a/src/conv/step/step-g/Transformation.h +++ b/src/conv/step/step-g/Transformation.h @@ -1,7 +1,7 @@ /* Transformation.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TrimmedCurve.cpp b/src/conv/step/step-g/TrimmedCurve.cpp index 5281ea7bf2b..6840c7b63c4 100644 --- a/src/conv/step/step-g/TrimmedCurve.cpp +++ b/src/conv/step/step-g/TrimmedCurve.cpp @@ -1,7 +1,7 @@ /* TrimmedCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TrimmedCurve.h b/src/conv/step/step-g/TrimmedCurve.h index 5dca7406bc5..d038918c0a8 100644 --- a/src/conv/step/step-g/TrimmedCurve.h +++ b/src/conv/step/step-g/TrimmedCurve.h @@ -1,7 +1,7 @@ /* TrimmedCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TrimmingSelect.cpp b/src/conv/step/step-g/TrimmingSelect.cpp index f92fcb38e11..d18e0d5e96f 100644 --- a/src/conv/step/step-g/TrimmingSelect.cpp +++ b/src/conv/step/step-g/TrimmingSelect.cpp @@ -1,7 +1,7 @@ /* TrimmingSelect.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/TrimmingSelect.h b/src/conv/step/step-g/TrimmingSelect.h index 0b5548ac9ed..558e8c06eec 100644 --- a/src/conv/step/step-g/TrimmingSelect.h +++ b/src/conv/step/step-g/TrimmingSelect.h @@ -1,7 +1,7 @@ /* TrimmingSelect.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/UncertaintyMeasureWithUnit.cpp b/src/conv/step/step-g/UncertaintyMeasureWithUnit.cpp index ccb6a09a253..0add369e7aa 100644 --- a/src/conv/step/step-g/UncertaintyMeasureWithUnit.cpp +++ b/src/conv/step/step-g/UncertaintyMeasureWithUnit.cpp @@ -1,7 +1,7 @@ /* UncertaintyMeasureWithUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/UncertaintyMeasureWithUnit.h b/src/conv/step/step-g/UncertaintyMeasureWithUnit.h index 4ce99caf98f..e2c4721b4d0 100644 --- a/src/conv/step/step-g/UncertaintyMeasureWithUnit.h +++ b/src/conv/step/step-g/UncertaintyMeasureWithUnit.h @@ -1,7 +1,7 @@ /* UncertaintyMeasureWithUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/UniformCurve.cpp b/src/conv/step/step-g/UniformCurve.cpp index 4bbe11076bf..152af9827db 100644 --- a/src/conv/step/step-g/UniformCurve.cpp +++ b/src/conv/step/step-g/UniformCurve.cpp @@ -1,7 +1,7 @@ /* UniformCurve.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/UniformCurve.h b/src/conv/step/step-g/UniformCurve.h index 3e45f42eab5..dfcb027972c 100644 --- a/src/conv/step/step-g/UniformCurve.h +++ b/src/conv/step/step-g/UniformCurve.h @@ -1,7 +1,7 @@ /* UniformCurve.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/UniformSurface.cpp b/src/conv/step/step-g/UniformSurface.cpp index 70b93ea2204..062bad96187 100644 --- a/src/conv/step/step-g/UniformSurface.cpp +++ b/src/conv/step/step-g/UniformSurface.cpp @@ -1,7 +1,7 @@ /* UniformSurface.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/UniformSurface.h b/src/conv/step/step-g/UniformSurface.h index 5df0577b091..eef4855e19f 100644 --- a/src/conv/step/step-g/UniformSurface.h +++ b/src/conv/step/step-g/UniformSurface.h @@ -1,7 +1,7 @@ /* UniformSurface.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Unit.cpp b/src/conv/step/step-g/Unit.cpp index 3c8c4670b40..36cfb8aebba 100644 --- a/src/conv/step/step-g/Unit.cpp +++ b/src/conv/step/step-g/Unit.cpp @@ -1,7 +1,7 @@ /* Unit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Unit.h b/src/conv/step/step-g/Unit.h index d9e6e1671de..5954350bd64 100644 --- a/src/conv/step/step-g/Unit.h +++ b/src/conv/step/step-g/Unit.h @@ -1,7 +1,7 @@ /* Unit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Vector.cpp b/src/conv/step/step-g/Vector.cpp index 691cc87482e..1ac5b108412 100644 --- a/src/conv/step/step-g/Vector.cpp +++ b/src/conv/step/step-g/Vector.cpp @@ -1,7 +1,7 @@ /* Vector.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Vector.h b/src/conv/step/step-g/Vector.h index b02219fd7e1..6c6d4329a90 100644 --- a/src/conv/step/step-g/Vector.h +++ b/src/conv/step/step-g/Vector.h @@ -1,7 +1,7 @@ /* Vector.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Vertex.cpp b/src/conv/step/step-g/Vertex.cpp index f02b34de83b..ce30c1efa3b 100644 --- a/src/conv/step/step-g/Vertex.cpp +++ b/src/conv/step/step-g/Vertex.cpp @@ -1,7 +1,7 @@ /* Vertex.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/Vertex.h b/src/conv/step/step-g/Vertex.h index 55cb584e9d4..251010b3ffb 100644 --- a/src/conv/step/step-g/Vertex.h +++ b/src/conv/step/step-g/Vertex.h @@ -1,7 +1,7 @@ /* Vertex.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VertexLoop.cpp b/src/conv/step/step-g/VertexLoop.cpp index 6a94da738a6..ba6a39bee7d 100644 --- a/src/conv/step/step-g/VertexLoop.cpp +++ b/src/conv/step/step-g/VertexLoop.cpp @@ -1,7 +1,7 @@ /* VertexLoop.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VertexLoop.h b/src/conv/step/step-g/VertexLoop.h index 89c349c39a4..fa3a1eed028 100644 --- a/src/conv/step/step-g/VertexLoop.h +++ b/src/conv/step/step-g/VertexLoop.h @@ -1,7 +1,7 @@ /* VertexLoop.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VertexPoint.cpp b/src/conv/step/step-g/VertexPoint.cpp index 020c93c876f..fb6a40cc7f4 100644 --- a/src/conv/step/step-g/VertexPoint.cpp +++ b/src/conv/step/step-g/VertexPoint.cpp @@ -1,7 +1,7 @@ /* VertexPoint.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VertexPoint.h b/src/conv/step/step-g/VertexPoint.h index 2c296c877bc..13d5f9affcf 100644 --- a/src/conv/step/step-g/VertexPoint.h +++ b/src/conv/step/step-g/VertexPoint.h @@ -1,7 +1,7 @@ /* VertexPoint.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VolumeContextDependentUnit.cpp b/src/conv/step/step-g/VolumeContextDependentUnit.cpp index 26475031c05..5e8db80c5dc 100644 --- a/src/conv/step/step-g/VolumeContextDependentUnit.cpp +++ b/src/conv/step/step-g/VolumeContextDependentUnit.cpp @@ -1,7 +1,7 @@ /* VolumeContextDependentUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VolumeContextDependentUnit.h b/src/conv/step/step-g/VolumeContextDependentUnit.h index 5da80a20257..fa4e5a788a2 100644 --- a/src/conv/step/step-g/VolumeContextDependentUnit.h +++ b/src/conv/step/step-g/VolumeContextDependentUnit.h @@ -1,7 +1,7 @@ /* VolumeContextDependentUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VolumeConversionBasedUnit.cpp b/src/conv/step/step-g/VolumeConversionBasedUnit.cpp index 8a64bd9991b..a81b7933148 100644 --- a/src/conv/step/step-g/VolumeConversionBasedUnit.cpp +++ b/src/conv/step/step-g/VolumeConversionBasedUnit.cpp @@ -1,7 +1,7 @@ /* VolumeConversionBasedUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VolumeConversionBasedUnit.h b/src/conv/step/step-g/VolumeConversionBasedUnit.h index c81e9975083..1f2dd0810cd 100644 --- a/src/conv/step/step-g/VolumeConversionBasedUnit.h +++ b/src/conv/step/step-g/VolumeConversionBasedUnit.h @@ -1,7 +1,7 @@ /* VolumeConversionBasedUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VolumeSiUnit.cpp b/src/conv/step/step-g/VolumeSiUnit.cpp index 79c434bb8e4..64942a19fdd 100644 --- a/src/conv/step/step-g/VolumeSiUnit.cpp +++ b/src/conv/step/step-g/VolumeSiUnit.cpp @@ -1,7 +1,7 @@ /* VolumeSiUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VolumeSiUnit.h b/src/conv/step/step-g/VolumeSiUnit.h index 84ed436225a..8b41f8ebfa2 100644 --- a/src/conv/step/step-g/VolumeSiUnit.h +++ b/src/conv/step/step-g/VolumeSiUnit.h @@ -1,7 +1,7 @@ /* VolumeSiUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VolumeUnit.cpp b/src/conv/step/step-g/VolumeUnit.cpp index 3ffa2b5525a..2a6ba7b011d 100644 --- a/src/conv/step/step-g/VolumeUnit.cpp +++ b/src/conv/step/step-g/VolumeUnit.cpp @@ -1,7 +1,7 @@ /* VolumeUnit.cpp * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/VolumeUnit.h b/src/conv/step/step-g/VolumeUnit.h index 3c66ecb709c..2ad4291f270 100644 --- a/src/conv/step/step-g/VolumeUnit.h +++ b/src/conv/step/step-g/VolumeUnit.h @@ -1,7 +1,7 @@ /* VolumeUnit.h * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/step-g/step-g.cpp b/src/conv/step/step-g/step-g.cpp index 4506e5431b4..22e8b9304f5 100644 --- a/src/conv/step/step-g/step-g.cpp +++ b/src/conv/step/step-g/step-g.cpp @@ -1,7 +1,7 @@ /* S T E P - G . C P P * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/step/util/CMakeLists.txt b/src/conv/step/util/CMakeLists.txt index bea36feef0a..2d446f6b3ac 100644 --- a/src/conv/step/util/CMakeLists.txt +++ b/src/conv/step/util/CMakeLists.txt @@ -1,45 +1,55 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR} + ${STEPCODE_INCLUDE_DIRS} ) -set(STEP_SCHEMA_FILE ${STEPCODE_DIR}/data/ap203/ap203.exp) -add_definitions(-DAP203) +link_directories(${CMAKE_BINARY_DIR}/${LIB_DIR}) -set(lelem_LIBS - libbrep - libbn - libbu - steputils - stepeditor - stepdai - stepcore - ${OPENNURBS_LIBRARIES} - ) +set(STEP_SCHEMA_FILE ${CMAKE_SOURCE_DIR}/src/other/stepcode/data/ap203/ap203.exp) +add_definitions(-DAP203) GENERATE_SCHEMA_INPUTS(${STEP_SCHEMA_FILE} list_elements) set(list_elements_srcs ${express_srcs} list_elements.cpp) -BRLCAD_ADDEXEC(list_elements "${list_elements_srcs}" "${lelem_LIBS}" NO_STRICT NO_INSTALL) -add_dependencies(list_elements step-express-${SCHEMA_NAME}-list_elements) -set_property(TARGET list_elements APPEND PROPERTY INCLUDE_DIRECTORIES "${list_elements_SCHEMA_OUT_DIR}") - -if (HIDE_INTERNAL_SYMBOLS) - set(list_elements_IMPORTS - BU_DLL_IMPORTS - BN_DLL_IMPORTS - RT_DLL_IMPORTS - WDB_DLL_IMPORTS - SC_CORE_DLL_IMPORTS - SC_DAI_DLL_IMPORTS - SC_EDITOR_DLL_IMPORTS - SC_UTILS_DLL_IMPORTS + +if (BRLCAD_ENABLE_STEP) + set(lelem_LIBS + libbrep + libbn + libbu + steputils + stepeditor + stepdai + stepcore + ${OPENNURBS_LIBRARIES} ) - list(APPEND list_elements_IMPORTS ${list_elements_IMPORTS}) - set_property(TARGET list_elements APPEND PROPERTY COMPILE_DEFINITIONS "${list_elements_IMPORTS}") -endif (HIDE_INTERNAL_SYMBOLS) -CMAKEFILES(CMakeLists.txt) + BRLCAD_ADDEXEC(list_elements "${list_elements_srcs}" "${lelem_LIBS}" NO_STRICT NO_INSTALL) + add_dependencies(list_elements step-express-${SCHEMA_NAME}-list_elements) + set_property(TARGET list_elements APPEND PROPERTY INCLUDE_DIRECTORIES "${list_elements_SCHEMA_OUT_DIR}") + target_compile_definitions(list_elements PRIVATE SC_SCHEMA_DLL_EXPORTS) + + if (HIDE_INTERNAL_SYMBOLS) + set(list_elements_IMPORTS + BU_DLL_IMPORTS + BN_DLL_IMPORTS + RT_DLL_IMPORTS + WDB_DLL_IMPORTS + SC_CORE_DLL_IMPORTS + SC_DAI_DLL_IMPORTS + SC_EDITOR_DLL_IMPORTS + SC_UTILS_DLL_IMPORTS + ) + list(APPEND list_elements_IMPORTS ${list_elements_IMPORTS}) + set_property(TARGET list_elements APPEND PROPERTY COMPILE_DEFINITIONS "${list_elements_IMPORTS}") + endif (HIDE_INTERNAL_SYMBOLS) +endif (BRLCAD_ENABLE_STEP) + +CMAKEFILES( + CMakeLists.txt + ${list_elements_srcs} + ) # Local Variables: # tab-width: 8 diff --git a/src/conv/stl/g-stl.c b/src/conv/stl/g-stl.c index d7809932206..a1773125e4c 100644 --- a/src/conv/stl/g-stl.c +++ b/src/conv/stl/g-stl.c @@ -1,7 +1,7 @@ /* G - S T L . C * BRL-CAD * - * Copyright (c) 2003-2020 United States Government as represented by + * Copyright (c) 2003-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/stl/stl-g.c b/src/conv/stl/stl-g.c index 896e08dbf80..4f9a6800936 100644 --- a/src/conv/stl/stl-g.c +++ b/src/conv/stl/stl-g.c @@ -1,7 +1,7 @@ /* S T L - G . C * BRL-CAD * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/tankill/tankill-g.c b/src/conv/tankill/tankill-g.c index cb07ea91928..e53934ac1df 100644 --- a/src/conv/tankill/tankill-g.c +++ b/src/conv/tankill/tankill-g.c @@ -1,7 +1,7 @@ /* T A N K I L L - G . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/vdeck/cgarbs.c b/src/conv/vdeck/cgarbs.c index 97c03487a9a..818ca152228 100644 --- a/src/conv/vdeck/cgarbs.c +++ b/src/conv/vdeck/cgarbs.c @@ -1,7 +1,7 @@ /* C G A R B S . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/vdeck/match.c b/src/conv/vdeck/match.c index daf96ea901a..bedb46c132c 100644 --- a/src/conv/vdeck/match.c +++ b/src/conv/vdeck/match.c @@ -1,7 +1,7 @@ /* M A T C H . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/vdeck/parsarg.c b/src/conv/vdeck/parsarg.c index 0d6251f74d7..14976fe5d1f 100644 --- a/src/conv/vdeck/parsarg.c +++ b/src/conv/vdeck/parsarg.c @@ -1,7 +1,7 @@ /* P A R S A R G . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/vdeck/std.h b/src/conv/vdeck/std.h index 879fcc77857..09466311a6d 100644 --- a/src/conv/vdeck/std.h +++ b/src/conv/vdeck/std.h @@ -1,7 +1,7 @@ /* S T D . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/vdeck/vdeck.c b/src/conv/vdeck/vdeck.c index 694a5a5e2de..63598178498 100644 --- a/src/conv/vdeck/vdeck.c +++ b/src/conv/vdeck/vdeck.c @@ -1,7 +1,7 @@ /* V D E C K . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/vdeck/vextern.h b/src/conv/vdeck/vextern.h index c2996400aef..0723fd23cf6 100644 --- a/src/conv/vdeck/vextern.h +++ b/src/conv/vdeck/vextern.h @@ -1,7 +1,7 @@ /* V E X T E R N . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/conv/walk_example.c b/src/conv/walk_example.c index 55caba37713..264852c4bf6 100644 --- a/src/conv/walk_example.c +++ b/src/conv/walk_example.c @@ -1,7 +1,7 @@ /* W A L K _ E X A M P L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/external/Creo/CMakeLists.txt b/src/external/Creo/CMakeLists.txt index 5a68de1789f..cc088a20201 100644 --- a/src/external/Creo/CMakeLists.txt +++ b/src/external/Creo/CMakeLists.txt @@ -1,7 +1,7 @@ if(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) # Minimum required version of CMake - cmake_minimum_required(VERSION 3.1.3) + cmake_minimum_required(VERSION 3.12) # Set CMake project name project(CREO2BRL) @@ -38,7 +38,7 @@ if(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) set(CREO_DEFS "-DPRO_MACHINE=36 -DPRO_OS=4 -DPRO_USE_VAR_ARGS -D_USING_V100_SDK71_") # BRL-CAD definitions - set(BRLCAD_DEFS "-DHAVE_CONFIG_H -DBRLCAD_DLL -DBRLCADBUILD -DBU_DLL_IMPORTS -DBN_DLL_IMPORTS -DNMG_DLL_IMPORTS -DBG_DLL_IMPORTS -DBREP_DLL_IMPORTS -DRT_DLL_IMPORTS -DWDB_DLL_IMPORTS -DTIE_DLL_IMPORTS -DDB5_DLL_IMPORTS -DVDS_DLL_IMPORTS -DGDIAM_DLL_IMPORTS -DON_DLL_IMPORTS -DLZ4_DLL_IMPORT=1") + set(BRLCAD_DEFS "-DHAVE_CONFIG_H -DBRLCAD_DLL -DBRLCADBUILD -DBU_DLL_IMPORTS -DBN_DLL_IMPORTS -DNMG_DLL_IMPORTS -DBG_DLL_IMPORTS -DBREP_DLL_IMPORTS -DRT_DLL_IMPORTS -DWDB_DLL_IMPORTS -DTIE_DLL_IMPORTS -DDB5_DLL_IMPORTS -DON_DLL_IMPORTS") # These settings are global to all the configs. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${CREO_DEFS} ${BRLCAD_DEFS}" CACHE STRING "" FORCE) @@ -207,12 +207,9 @@ if(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) libnmg librt libwdb - SPSR - gdiam openNURBS poly2tri regex_brl - vds z_brl1 ) set(BRLCAD_STATIC_LIBS) @@ -295,7 +292,6 @@ if(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) configure_file(creo-brl.dat.in ${CMAKE_CURRENT_BINARY_DIR}/${CFG_TYPE}/creo-brl-debug.dat @ONLY) endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) set_property(TARGET creo-brl-exe APPEND PROPERTY COMPILE_DEFINITIONS "TINYCTHREAD_DLL_IMPORTS") - set_property(TARGET creo-brl-exe APPEND PROPERTY COMPILE_DEFINITIONS "SPSR_DLL_IMPORTS") endif(DEFINED CREO_EXEC_PLUGIN) # Install the resource files @@ -349,8 +345,8 @@ else(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) "${CMAKE_CURRENT_BINARY_DIR}/../../../include" "${CMAKE_CURRENT_SOURCE_DIR}/../../../include" "${CMAKE_CURRENT_SOURCE_DIR}/../../../src/other/openNURBS" - "${ZLIB_INCLUDE_DIRS}" - "${REGEX_INCLUDE_DIRS}" + ${ZLIB_INCLUDE_DIRS} + ${REGEX_INCLUDE_DIRS} ) # The build shims aren't so great at mocking the initialization @@ -372,10 +368,7 @@ else(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) set_property(TARGET creo-brl APPEND PROPERTY COMPILE_DEFINITIONS "DB5_DLL_IMPORTS") set_property(TARGET creo-brl APPEND PROPERTY COMPILE_DEFINITIONS "WDB_DLL_IMPORTS") set_property(TARGET creo-brl APPEND PROPERTY COMPILE_DEFINITIONS "TIE_DLL_IMPORTS") - set_property(TARGET creo-brl APPEND PROPERTY COMPILE_DEFINITIONS "GDIAM_DLL_IMPORTS") - set_property(TARGET creo-brl APPEND PROPERTY COMPILE_DEFINITIONS "VDS_DLL_IMPORTS") set_property(TARGET creo-brl APPEND PROPERTY COMPILE_DEFINITIONS "ON_DLL_IMPORTS") - set_property(TARGET creo-brl APPEND PROPERTY COMPILE_DEFINITIONS "LZ4_DLL_IMPORT=1") endif(HIDE_INTERNAL_SYMBOLS) # Distcheck file list diff --git a/src/external/Creo/assembly.cpp b/src/external/Creo/assembly.cpp index 6da8ba2d999..5ab8d7709fa 100644 --- a/src/external/Creo/assembly.cpp +++ b/src/external/Creo/assembly.cpp @@ -1,7 +1,7 @@ /* A S S E M B L Y . C P P * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/external/Creo/creo-brl.h b/src/external/Creo/creo-brl.h index 0cfadfc7bc9..07610e11fb7 100644 --- a/src/external/Creo/creo-brl.h +++ b/src/external/Creo/creo-brl.h @@ -1,7 +1,7 @@ /* C R E O - B R L . H * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -45,6 +45,7 @@ extern "C" { #include #include #include +#include #include #include #include diff --git a/src/external/Creo/csg.cpp b/src/external/Creo/csg.cpp index c59c6fa107d..19407e6e81d 100644 --- a/src/external/Creo/csg.cpp +++ b/src/external/Creo/csg.cpp @@ -1,7 +1,7 @@ /* C S G . C P P * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -51,120 +51,70 @@ hole_elem_filter(ProElement UNUSED(elem_tree), ProElement UNUSED(elem), ProElemp return PRO_TK_NO_ERROR; } + extern "C" ProError hole_elem_visit(ProElement UNUSED(elem_tree), ProElement elem, ProElempath UNUSED(elem_path), ProAppData data) { - ProError ret; - ProElemId elem_id; - ProValue val_junk; - ProValueData val; - struct hole_info *hinfo = (struct hole_info *)data; + ProError err; + ProElemId elemid; + ProValueDataType data_type; - if ((ret = ProElementIdGet(elem, &elem_id)) != PRO_TK_NO_ERROR) return ret; - - switch (elem_id) { - case PRO_E_HLE_ADD_CBORE: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->add_cbore = val.v.i; - break; - case PRO_E_HLE_ADD_CSINK: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->add_csink = val.v.i; - break; - case PRO_E_DIAMETER: - /* diameter of straight hole */ - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->hole_diam = val.v.d; - break; - case PRO_E_HLE_HOLEDIAM: - /* diameter of main portion of standard drilled hole */ - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->hole_diam = val.v.d; - break; - case PRO_E_HLE_CBOREDEPTH: - /* depth of counterbore */ - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->cb_depth = val.v.d; - break; - case PRO_E_HLE_CBOREDIAM: - /* diameter of counterbore */ - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->cb_diam = val.v.d; - break; - case PRO_E_HLE_CSINKANGLE: - /* angle of countersink (degrees) */ - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->cs_angle = val.v.d; - break; - case PRO_E_HLE_CSINKDIAM: - /* diameter of countersink */ - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->cs_diam = val.v.d; - break; - case PRO_E_HLE_DRILLDEPTH: - /* overall depth of standard drilled hole without drill tip */ - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->hole_depth = val.v.d; - break; - case PRO_E_HLE_DRILLANGLE: - /* drill tip angle (degrees) */ - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->drill_angle = val.v.d; - break; - case PRO_E_HLE_DEPTH: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->hole_depth_type = val.v.i; - break; - case PRO_E_HLE_TYPE_NEW: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - hinfo->hole_type = val.v.i; - break; - case PRO_E_HLE_STAN_TYPE: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - break; - case PRO_E_STD_EDGE_CHAMF_DIM1: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - break; - case PRO_E_STD_EDGE_CHAMF_DIM2: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - break; - case PRO_E_STD_EDGE_CHAMF_ANGLE: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - break; - case PRO_E_STD_EDGE_CHAMF_DIM: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - break; - case PRO_E_STD_EDGE_CHAMF_SCHEME: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - break; - case PRO_E_EXT_DEPTH_FROM_VALUE: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - break; - case PRO_E_EXT_DEPTH_TO_VALUE: - if ((ret = ProElementValueGet(elem, &val_junk)) != PRO_TK_NO_ERROR) return ret; - if ((ret = ProValueDataGet(val_junk, &val)) != PRO_TK_NO_ERROR) return ret; - break; - } + struct hole_info *hinfo = (struct hole_info *)data; + if ((err = ProElementValuetypeGet(elem, &data_type)) != PRO_TK_NO_ERROR) return err; + + switch (data_type) { + case PRO_VALUE_TYPE_INT: /* integer data type */ + int intval; + if ((err = ProElementIntegerGet(elem, NULL, &intval)) != PRO_TK_NO_ERROR) return err; + if ((err = ProElementIdGet(elem, &elemid)) != PRO_TK_NO_ERROR) return err; + switch (elemid) { + case PRO_E_HLE_ADD_CBORE: /* add counterbore */ + hinfo->add_cbore = intval; + break; + case PRO_E_HLE_ADD_CSINK: /* add countersink */ + hinfo->add_csink = intval; + break; + case PRO_E_HLE_DEPTH: /* hole depth */ + hinfo->hole_depth_type = intval; + break; + case PRO_E_HLE_TYPE_NEW: /* hole type */ + hinfo->hole_type = intval; + break; + } + break; + case PRO_VALUE_TYPE_DOUBLE: /* double data type */ + double dblval; + if ((err = ProElementDoubleGet(elem, NULL, &dblval)) != PRO_TK_NO_ERROR) return err; + if ((err = ProElementIdGet(elem, &elemid)) != PRO_TK_NO_ERROR) return err; + switch (elemid) { + case PRO_E_DIAMETER: /* hole diameter */ + hinfo->hole_diam = dblval; + break; + case PRO_E_HLE_CBOREDEPTH: /* counterbore depth */ + hinfo->cb_depth = dblval; + break; + case PRO_E_HLE_CBOREDIAM: /* counterbore diameter */ + hinfo->cb_diam = dblval; + break; + case PRO_E_HLE_CSINKANGLE: /* countersink angle (deg) */ + hinfo->cs_angle = dblval; + break; + case PRO_E_HLE_CSINKDIAM: /* countersink diameter */ + hinfo->cs_diam = dblval; + break; + case PRO_E_HLE_DRILLANGLE: /* drill tip angle (deg) */ + hinfo->drill_angle = dblval; + break; + case PRO_E_HLE_DRILLDEPTH: /* drill depth w/o tip */ + hinfo->hole_depth = dblval; + break; + case PRO_E_HLE_HOLEDIAM: /* hole diameter */ + hinfo->hole_diam = dblval; + break; + } + break; + } return PRO_TK_NO_ERROR; } @@ -245,7 +195,7 @@ subtract_hole(struct part_conv_info *pinfo) hinfo->diameter = pinfo->diameter; /* Do a more detailed characterization of the hole elements */ - if ((ret=ProFeatureElemtreeCreate(hinfo->feat, &elem_tree )) == PRO_TK_NO_ERROR ) { + if ((ret=ProFeatureElemtreeExtract(hinfo->feat, NULL, PRO_FEAT_EXTRACT_NO_OPTS, &elem_tree )) == PRO_TK_NO_ERROR ) { if ((ret=ProElemtreeElementVisit( elem_tree, elem_path, hole_elem_filter, hole_elem_visit, (ProAppData)hinfo)) != PRO_TK_NO_ERROR ) { if ( ProElementFree( &elem_tree ) != PRO_TK_NO_ERROR ) {fprintf( stderr, "Error freeing element tree\n" );} BU_PUT(hinfo, struct hole_info); diff --git a/src/external/Creo/main.cpp b/src/external/Creo/main.cpp index 35f87f9399e..6c0eb726dad 100644 --- a/src/external/Creo/main.cpp +++ b/src/external/Creo/main.cpp @@ -1,7 +1,7 @@ /* M A I N . C P P * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/external/Creo/part.cpp b/src/external/Creo/part.cpp index 5ca9a437cbf..8224765ea36 100644 --- a/src/external/Creo/part.cpp +++ b/src/external/Creo/part.cpp @@ -1,7 +1,7 @@ /* P A R T . C P P * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -515,7 +515,7 @@ tessellate_part(struct creo_conv_info *cinfo, ProMdl model, struct bu_vls **snam ProMdlMdlnameGet(model, wname); ProWstringToString(pname, wname); - creo_log(cinfo, MSG_DEBUG, "Tessellating part %s...", pname); + creo_log(cinfo, MSG_DEBUG, "Tessellating part %s...\n", pname); /* Tessellate part, going from coarse to fine tessellation */ for (int i = 0; i <= cinfo->max_to_min_steps; ++i) { diff --git a/src/external/Creo/shim.cpp b/src/external/Creo/shim.cpp index f0ca498bc76..ec0abeb9e6f 100644 --- a/src/external/Creo/shim.cpp +++ b/src/external/Creo/shim.cpp @@ -29,12 +29,16 @@ extern "C" int ProBsplinesrfdataGet(void**,int[2],double**,double**,double**,Pro extern "C" int ProCmdActionAdd(const char*,int(*)(int,int*,void*),int,int(*)(int),int,int,int*) {return 0;} extern "C" int ProDimensionTypeGet(void**,int*) {return 0;} extern "C" int ProDimensionValueGet(void**,double *) {return 0;} +extern "C" int ProElementDoubleGet(void*,void*,double*) {return 0;} extern "C" int ProElementFree(void**) {return 0;} extern "C" int ProElementIdGet(void*,int*) {return 0;} +extern "C" int ProElementIntegerGet(void*,void*,int*) {return 0;} extern "C" int ProElementValueGet(void*,void**) {return 0;} +extern "C" int ProElementValuetypeGet(void*,int*) {return 0;} extern "C" int ProElemtreeElementVisit(void*,void*,int (*)(void*,void*,void*,void*),int (*)(void*,void*,void*,void*),void*) {return 0;} extern "C" int ProFeatureDimensionVisit(ProFeature *,int (*)(void* *,int ,void*),int (*)(void**,void*),void*) {return 0;} extern "C" int ProFeatureElemtreeCreate(ProFeature *,void**) {return 0;} +extern "C" int ProFeatureElemtreeExtract(ProFeature *,void*,int,void**) {return 0;} extern "C" int ProFeatureGeomitemVisit(ProFeature *,int,int (*)(void**,int,void*),int (*)(void**,void*),void*) {return 0;} extern "C" int ProFeatureInit(void*,int,ProFeature*) {return 0;} extern "C" int ProFeatureResume(void*,int*,int,void*,int) {return 0;} @@ -54,6 +58,7 @@ extern "C" int ProMenubarmenuPushbuttonAdd(const char*,const char*,const char*,c extern "C" int ProMessageDisplay(wchar_t *,const char *,const char *) {return 0;} extern "C" int ProParameterInit(void *,wchar_t *,void *) {return 0;} extern "C" int ProParameterValueGet(ProParameter *,void *) {return 0;} +extern "C" int ProParameterValueWithUnitsGet(ProParameter *,void *,void *) {return 0;} extern "C" int ProParameterVisit (void **, void*,int (*)(ProParameter*,int,void*),void *) {return 0;} extern "C" int ProParamvalueTypeGet(void **,void *) {return 0;} extern "C" int ProParamvalueValueGet(void **,int,void *) {return 0;} diff --git a/src/external/Creo/shim.h b/src/external/Creo/shim.h index 0974d36f18e..44f07a949f9 100644 --- a/src/external/Creo/shim.h +++ b/src/external/Creo/shim.h @@ -99,6 +99,9 @@ #define PRO_PARAM_INTEGER 79 #define PRO_PARAM_BOOLEAN 80 #define PRO_PARAM_DOUBLE 81 +#define PRO_VALUE_TYPE_INT 82 +#define PRO_VALUE_TYPE_DOUBLE 83 +#define PRO_FEAT_EXTRACT_NO_OPTS 84 typedef int ProBool; typedef int ProBoolean; @@ -118,6 +121,7 @@ typedef int ProSrftype; typedef int ProSurfaceOrient; typedef int ProType; typedef int ProUIMessageButton; +typedef int ProValueDataType; typedef int uiCmdAccessMode; typedef int uiCmdAccessState; typedef int uiCmdCmdId; @@ -177,7 +181,6 @@ extern "C" int ProArrayFree(void**); extern "C" int ProArraySizeGet(ProArray,int*); extern "C" int ProAsmcompMdlGet(ProFeature*,void**); extern "C" int ProAsmcompMdlNameGet(ProFeature*,int*,wchar_t*); -extern "C" int ProAsmcompMdlNameGet(ProFeature*,int*,wchar_t*); extern "C" int ProAsmcomppathInit(void*,ProIdTable,int,void**); extern "C" int ProAsmcomppathTrfGet(void**,int,ProMatrix); extern "C" int ProAssemblyIsExploded(void*,int*); @@ -185,12 +188,16 @@ extern "C" int ProBsplinesrfdataGet(void**,int[2],double**,double**,double**,Pro extern "C" int ProCmdActionAdd(const char*,int(*)(int,int*,void*),int,int(*)(int),int,int,int*); extern "C" int ProDimensionTypeGet(void**,int*); extern "C" int ProDimensionValueGet(void**,double *); +extern "C" int ProElementDoubleGet(void*,void*,double*); extern "C" int ProElementFree(void**); extern "C" int ProElementIdGet(void*,int*); +extern "C" int ProElementIntegerGet(void*,void*,int*); extern "C" int ProElementValueGet(void*,void**); +extern "C" int ProElementValuetypeGet(void*,int*); extern "C" int ProElemtreeElementVisit(void*,void*,int (*)(void*,void*,void*,void*),int (*)(void*,void*,void*,void*),void*); extern "C" int ProFeatureDimensionVisit(ProFeature *,int (*)(void* *,int ,void*),int (*)(void**,void*),void*); extern "C" int ProFeatureElemtreeCreate(ProFeature *,void**); +extern "C" int ProFeatureElemtreeExtract(ProFeature *,void*,int,void**); extern "C" int ProFeatureGeomitemVisit(ProFeature *,int,int (*)(void**,int,void*),int (*)(void**,void*),void*); extern "C" int ProFeatureInit(void*,int,ProFeature*); extern "C" int ProFeatureResume(void*,int*,int,void*,int); @@ -210,6 +217,7 @@ extern "C" int ProMenubarmenuPushbuttonAdd(const char*,const char*,const char*,c extern "C" int ProMessageDisplay(wchar_t *,const char *,const char *); extern "C" int ProParameterInit(void *,wchar_t *,void *); extern "C" int ProParameterValueGet(ProParameter *,void *); +extern "C" int ProParameterValueWithUnitsGet(ProParameter *,void *,void *); extern "C" int ProParameterVisit (void **, void*,int (*)(ProParameter*,int,void*),void *); extern "C" int ProParamvalueTypeGet(void **,void *); extern "C" int ProParamvalueValueGet(void **,int,void *); @@ -248,6 +256,7 @@ extern "C" void ProAssemblyUnexplode(void*); extern "C" void ProContourEdgeVisit(void*,void*,int(*)(void*,int,void*),int(*)(void*,void*),void*); extern "C" void ProContourTraversalGet(void*,int*); extern "C" void ProMdlIsSkeleton(void*, int*); +extern "C" void ProMdlMdlNameGet(void*,int*,wchar_t*); extern "C" void ProMdlMdlnameGet(void*,wchar_t*); extern "C" void ProMessageClear(); extern "C" void ProPartTessellationFree(ProSurfaceTessellationData**); @@ -261,6 +270,6 @@ extern "C" void ProUIInputpanelMaxlenSet(const char*,const char*,int); extern "C" void ProUIMessageDialogDisplay(int,const wchar_t *,const wchar_t *,ProUIMessageButton*,int,ProUIMessageButton*); extern "C" void ProUnitInit(void*,const wchar_t *,void**); extern "C" void ProWstringToString(char*,wchar_t*); -extern "C" void* ProMdlToPart(void*); -extern "C" void* ProMdlToSolid(void*); +extern "C" void* ProMdlToPart(void*v); +extern "C" void* ProMdlToSolid(void*v); extern "C" void** PRO_CURVE_DATA(void*); diff --git a/src/external/Creo/util.cpp b/src/external/Creo/util.cpp index b1e0c1947ff..e799df0dc48 100644 --- a/src/external/Creo/util.cpp +++ b/src/external/Creo/util.cpp @@ -1,7 +1,7 @@ /* U T I L . C P P * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -167,12 +167,16 @@ struct pparam_data { extern "C" ProError regex_key(ProParameter *param, ProError UNUSED(status), ProAppData app_data) { - char pname[CREO_NAME_MAX]; - char val[CREO_NAME_MAX]; - wchar_t wval[CREO_NAME_MAX]; - ProParamvalue pval; - ProParamvalueType ptype; + char pname[CREO_NAME_MAX]; + char val[CREO_NAME_MAX]; + wchar_t wval[CREO_NAME_MAX]; + regex_t reg; + + ProParamvalue pval; + ProParamvalueType ptype; + ProUnititem punits; + struct pparam_data *pdata = (struct pparam_data *)app_data; if (pdata->val) return PRO_TK_NO_ERROR; @@ -185,7 +189,7 @@ extern "C" ProError regex_key(ProParameter *param, ProError UNUSED(status), ProA } regfree(®); - if (ProParameterValueGet(param, &pval) != PRO_TK_NO_ERROR) + if (ProParameterValueWithUnitsGet(param, &pval, &punits) != PRO_TK_NO_ERROR) return PRO_TK_CONTINUE; if (ProParamvalueTypeGet(&pval, &ptype) != PRO_TK_NO_ERROR) @@ -209,17 +213,20 @@ extern "C" ProError creo_attribute_val(char **val, const char *key, ProMdl m) { struct bu_vls cpval = BU_VLS_INIT_ZERO; - wchar_t wkey[CREO_NAME_MAX]; - char cval[CREO_NAME_MAX]; - char *fval = NULL; - ProError pstatus; - ProModelitem mitm; - ProParameter param; - ProParamvalueType ptype; - ProParamvalue pval; + wchar_t wkey[CREO_NAME_MAX]; wchar_t w_val[CREO_NAME_MAX]; - short b_val; - int i_val; + char cval[CREO_NAME_MAX]; + char *fval = NULL; + + ProError pstatus; + ProModelitem mitm; + ProParameter param; + ProParamvalueType ptype; + ProParamvalue pval; + ProUnititem punits; + + short b_val; + int i_val; double d_val; ProStringToWstring(wkey, (char *)key); @@ -230,7 +237,7 @@ creo_attribute_val(char **val, const char *key, ProMdl m) if (pstatus != PRO_TK_NO_ERROR) return PRO_TK_CONTINUE; - ProParameterValueGet(¶m, &pval); + ProParameterValueWithUnitsGet(¶m, &pval, &punits); ProParamvalueTypeGet(&pval, &ptype); switch (ptype) { case PRO_PARAM_STRING: diff --git a/src/external/Cubit/CMakeLists.txt b/src/external/Cubit/CMakeLists.txt index 932d321e0ad..fe056158294 100644 --- a/src/external/Cubit/CMakeLists.txt +++ b/src/external/Cubit/CMakeLists.txt @@ -1,6 +1,6 @@ if(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) # Minimum required version of CMake - cmake_minimum_required(VERSION 3.1.3) + cmake_minimum_required(VERSION 3.12) # Set CMake project name project(G2SAT) @@ -11,8 +11,8 @@ else(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) "${CMAKE_CURRENT_BINARY_DIR}/../../../include" "${CMAKE_CURRENT_SOURCE_DIR}/../../../include" "${CMAKE_CURRENT_SOURCE_DIR}/../../../src/other/openNURBS" - "${ZLIB_INCLUDE_DIRS}" - "${REGEX_INCLUDE_DIRS}" + ${ZLIB_INCLUDE_DIRS} + ${REGEX_INCLUDE_DIRS} ) # The build shims aren't so great at mocking the initialization @@ -35,11 +35,8 @@ else(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) set_property(TARGET g-sat APPEND PROPERTY COMPILE_DEFINITIONS "DB5_DLL_IMPORTS") set_property(TARGET g-sat APPEND PROPERTY COMPILE_DEFINITIONS "WDB_DLL_IMPORTS") set_property(TARGET g-sat APPEND PROPERTY COMPILE_DEFINITIONS "TIE_DLL_IMPORTS") - set_property(TARGET g-sat APPEND PROPERTY COMPILE_DEFINITIONS "GDIAM_DLL_IMPORTS") - set_property(TARGET g-sat APPEND PROPERTY COMPILE_DEFINITIONS "VDS_DLL_IMPORTS") set_property(TARGET g-sat APPEND PROPERTY COMPILE_DEFINITIONS "ON_DLL_IMPORTS") set_property(TARGET g-sat APPEND PROPERTY COMPILE_DEFINITIONS "TINYCTHREAD_DLL_IMPORTS") - set_property(TARGET g-sat APPEND PROPERTY COMPILE_DEFINITIONS "LZ4_DLL_IMPORT=1") endif(HIDE_INTERNAL_SYMBOLS) CMAKEFILES(${g_sat_srcs} shim.h) diff --git a/src/external/Cubit/g-sat.cpp b/src/external/Cubit/g-sat.cpp index 04f8dcdccdb..f343b0e22c4 100644 --- a/src/external/Cubit/g-sat.cpp +++ b/src/external/Cubit/g-sat.cpp @@ -1,7 +1,7 @@ /* G - S A T . C P P * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/external/Unigraphics/CMakeLists.txt b/src/external/Unigraphics/CMakeLists.txt index 98264b8c628..c717541bca3 100644 --- a/src/external/Unigraphics/CMakeLists.txt +++ b/src/external/Unigraphics/CMakeLists.txt @@ -1,6 +1,6 @@ if(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) # Minimum required version of CMake - cmake_minimum_required(VERSION 3.1.3) + cmake_minimum_required(VERSION 3.12) # Set CMake project name project(UG2G) @@ -15,9 +15,9 @@ else(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) "${CMAKE_CURRENT_BINARY_DIR}/../../../include" "${CMAKE_CURRENT_SOURCE_DIR}/../../../include" "${CMAKE_CURRENT_SOURCE_DIR}/../../../src/other/openNURBS" - "${ZLIB_INCLUDE_DIRS}" - "${REGEX_INCLUDE_DIRS}" - "${TCL_INCLUDE_PATH}" + ${ZLIB_INCLUDE_DIRS} + ${REGEX_INCLUDE_DIRS} + ${TCL_INCLUDE_PATH} ) # The build shims aren't so great at mocking the initialization @@ -40,11 +40,8 @@ else(NOT DEFINED BRLCAD_BUILDTEST_EXTERNALS) set_property(TARGET ug-g APPEND PROPERTY COMPILE_DEFINITIONS "DB5_DLL_IMPORTS") set_property(TARGET ug-g APPEND PROPERTY COMPILE_DEFINITIONS "WDB_DLL_IMPORTS") set_property(TARGET ug-g APPEND PROPERTY COMPILE_DEFINITIONS "TIE_DLL_IMPORTS") - set_property(TARGET ug-g APPEND PROPERTY COMPILE_DEFINITIONS "GDIAM_DLL_IMPORTS") - set_property(TARGET ug-g APPEND PROPERTY COMPILE_DEFINITIONS "VDS_DLL_IMPORTS") set_property(TARGET ug-g APPEND PROPERTY COMPILE_DEFINITIONS "ON_DLL_IMPORTS") set_property(TARGET ug-g APPEND PROPERTY COMPILE_DEFINITIONS "TINYCTHREAD_DLL_IMPORTS") - set_property(TARGET ug-g APPEND PROPERTY COMPILE_DEFINITIONS "LZ4_DLL_IMPORT=1") endif(HIDE_INTERNAL_SYMBOLS) endif (BRLCAD_ENABLE_TCL) diff --git a/src/external/Unigraphics/conv.h b/src/external/Unigraphics/conv.h index 213c1cfe41b..e5d6cf2eed0 100644 --- a/src/external/Unigraphics/conv.h +++ b/src/external/Unigraphics/conv.h @@ -1,7 +1,7 @@ /* C O N V . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/external/Unigraphics/log.h b/src/external/Unigraphics/log.h index a1964fc3d11..5a78d8ccb2b 100644 --- a/src/external/Unigraphics/log.h +++ b/src/external/Unigraphics/log.h @@ -1,7 +1,7 @@ /* L O G . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/external/Unigraphics/ug-g.1 b/src/external/Unigraphics/ug-g.1 index d39b4c91e84..ec3b05fb3a2 100644 --- a/src/external/Unigraphics/ug-g.1 +++ b/src/external/Unigraphics/ug-g.1 @@ -2,7 +2,7 @@ .\" U G - G . 1 .\" BRL-CAD .\" -.\" Copyright (c) 2005-2020 United States Government as represented by +.\" Copyright (c) 2005-2021 United States Government as represented by .\" the U.S. Army Research Laboratory. .\" .\" Redistribution and use in source (Docbook format) and 'compiled' diff --git a/src/external/Unigraphics/ug-g.c b/src/external/Unigraphics/ug-g.c index 215f25a0738..0673995a123 100644 --- a/src/external/Unigraphics/ug-g.c +++ b/src/external/Unigraphics/ug-g.c @@ -1,7 +1,7 @@ /* U G - G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/external/Unigraphics/ug_misc.c b/src/external/Unigraphics/ug_misc.c index 9ba98d362f2..4a8f897ee27 100644 --- a/src/external/Unigraphics/ug_misc.c +++ b/src/external/Unigraphics/ug_misc.c @@ -1,7 +1,7 @@ /* U G _ M I S C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/external/Unigraphics/ug_misc.h b/src/external/Unigraphics/ug_misc.h index 3b1046be976..3f1bb3e0d95 100644 --- a/src/external/Unigraphics/ug_misc.h +++ b/src/external/Unigraphics/ug_misc.h @@ -1,7 +1,7 @@ /* U G _ M I S C . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/CMakeLists.txt b/src/fb/CMakeLists.txt index d5a5af1a26a..b65856731a1 100644 --- a/src/fb/CMakeLists.txt +++ b/src/fb/CMakeLists.txt @@ -4,7 +4,6 @@ set(FBBIN_INCLUDE_DIRS ${BN_INCLUDE_DIRS} ${PKG_INCLUDE_DIRS} ${DM_INCLUDE_DIRS} - ${UTAHRLE_INCLUDE_DIR} ${PNG_INCLUDE_DIRS} ) BRLCAD_INCLUDE_DIRS(FBBIN_INCLUDE_DIRS) diff --git a/src/fb/bw-fb.c b/src/fb/bw-fb.c index fed2300078d..44573a28fcd 100644 --- a/src/fb/bw-fb.c +++ b/src/fb/bw-fb.c @@ -1,7 +1,7 @@ /* B W - F B . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/cmap-crunch.c b/src/fb/cmap-crunch.c index cf8db2fad94..6d3d098677c 100644 --- a/src/fb/cmap-crunch.c +++ b/src/fb/cmap-crunch.c @@ -1,7 +1,7 @@ /* C M A P - C R U N C H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fb-bw.c b/src/fb/fb-bw.c index 57835717e19..eaba295e299 100644 --- a/src/fb/fb-bw.c +++ b/src/fb/fb-bw.c @@ -1,7 +1,7 @@ /* F B - B W . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fb-fb.c b/src/fb/fb-fb.c index 946808d2a3e..27e6cb05a4e 100644 --- a/src/fb/fb-fb.c +++ b/src/fb/fb-fb.c @@ -1,7 +1,7 @@ /* F B - F B . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fb-pix.c b/src/fb/fb-pix.c index 7f2b1d381cd..46498c196d1 100644 --- a/src/fb/fb-pix.c +++ b/src/fb/fb-pix.c @@ -1,7 +1,7 @@ /* F B - P I X . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fb-png.c b/src/fb/fb-png.c index 54da3f1d604..aeeea21b70b 100644 --- a/src/fb/fb-png.c +++ b/src/fb/fb-png.c @@ -1,7 +1,7 @@ /* F B - P N G . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbcbars.c b/src/fb/fbcbars.c index ee14317ed9f..3e030b53774 100644 --- a/src/fb/fbcbars.c +++ b/src/fb/fbcbars.c @@ -1,7 +1,7 @@ /* F B C B A R S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbclear.c b/src/fb/fbclear.c index 8310256ab19..4541948ab14 100644 --- a/src/fb/fbclear.c +++ b/src/fb/fbclear.c @@ -1,7 +1,7 @@ /* F B C L E A R . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbcmap.c b/src/fb/fbcmap.c index 25025b23076..cb68a3e4038 100644 --- a/src/fb/fbcmap.c +++ b/src/fb/fbcmap.c @@ -1,7 +1,7 @@ /* F B C M A P . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbcolor.c b/src/fb/fbcolor.c index 58cbe869e2d..b71f00e3b8c 100644 --- a/src/fb/fbcolor.c +++ b/src/fb/fbcolor.c @@ -1,7 +1,7 @@ /* F B C O L O R . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbfade.c b/src/fb/fbfade.c index a3394d091a9..a9c9bffae84 100644 --- a/src/fb/fbfade.c +++ b/src/fb/fbfade.c @@ -1,7 +1,7 @@ /* F B F A D E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbframe.c b/src/fb/fbframe.c index c9c35bc9a2d..5d4913f3e02 100644 --- a/src/fb/fbframe.c +++ b/src/fb/fbframe.c @@ -1,7 +1,7 @@ /* F B F R A M E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbfree.c b/src/fb/fbfree.c index 104091ddd9b..521dbf255c5 100644 --- a/src/fb/fbfree.c +++ b/src/fb/fbfree.c @@ -1,7 +1,7 @@ /* F B F R E E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbgamma.c b/src/fb/fbgamma.c index 0bcf25337d2..9be02043780 100644 --- a/src/fb/fbgamma.c +++ b/src/fb/fbgamma.c @@ -1,7 +1,7 @@ /* F B G A M M A . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbgrid.c b/src/fb/fbgrid.c index a028459945c..cfed91a4238 100644 --- a/src/fb/fbgrid.c +++ b/src/fb/fbgrid.c @@ -1,7 +1,7 @@ /* F B G R I D . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbhelp.c b/src/fb/fbhelp.c index 53b404e4df0..4556acf0d22 100644 --- a/src/fb/fbhelp.c +++ b/src/fb/fbhelp.c @@ -1,7 +1,7 @@ /* F B H E L P . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fblabel.c b/src/fb/fblabel.c index 5777c4d4a0b..6ed98da0178 100644 --- a/src/fb/fblabel.c +++ b/src/fb/fblabel.c @@ -1,7 +1,7 @@ /* F B L A B E L . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbline.c b/src/fb/fbline.c index dc987ae5562..cafab64f6cc 100644 --- a/src/fb/fbline.c +++ b/src/fb/fbline.c @@ -1,7 +1,7 @@ /* F B L I N E . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbpoint.c b/src/fb/fbpoint.c index 7806d0db9a1..6d83b58794b 100644 --- a/src/fb/fbpoint.c +++ b/src/fb/fbpoint.c @@ -1,7 +1,7 @@ /* F B P O I N T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbstretch.c b/src/fb/fbstretch.c index 605406ab836..b2c5f495642 100644 --- a/src/fb/fbstretch.c +++ b/src/fb/fbstretch.c @@ -1,7 +1,7 @@ /* F B S T R E T C H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/fbzoom.c b/src/fb/fbzoom.c index afb7e8b5689..09e6edd5020 100644 --- a/src/fb/fbzoom.c +++ b/src/fb/fbzoom.c @@ -1,7 +1,7 @@ /* F B Z O O M . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/gif-fb.c b/src/fb/gif-fb.c index a945360deb5..3328e686327 100644 --- a/src/fb/gif-fb.c +++ b/src/fb/gif-fb.c @@ -1,7 +1,7 @@ /* G I F - F B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/gif2fb.c b/src/fb/gif2fb.c index 304c9cf9e39..c40f8385fef 100644 --- a/src/fb/gif2fb.c +++ b/src/fb/gif2fb.c @@ -1,7 +1,7 @@ /* G I F 2 F B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/ioutil.c b/src/fb/ioutil.c index cc05c283742..af6226cb92d 100644 --- a/src/fb/ioutil.c +++ b/src/fb/ioutil.c @@ -1,7 +1,7 @@ /* I O U T I L . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/fb/pix-fb.c b/src/fb/pix-fb.c index d978c351a54..9a5a485c1cf 100644 --- a/src/fb/pix-fb.c +++ b/src/fb/pix-fb.c @@ -1,7 +1,7 @@ /* P I X - F B . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/pixautosize.c b/src/fb/pixautosize.c index faef514f473..81e8b2d1055 100644 --- a/src/fb/pixautosize.c +++ b/src/fb/pixautosize.c @@ -1,7 +1,7 @@ /* P I X A U T O S I Z E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/plot3-fb.c b/src/fb/plot3-fb.c index 68dad3864e7..6b626d07d63 100644 --- a/src/fb/plot3-fb.c +++ b/src/fb/plot3-fb.c @@ -1,7 +1,7 @@ /* P L O T 3 - F B . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/png-fb.c b/src/fb/png-fb.c index 66f30e1be92..f3fbe1c1eef 100644 --- a/src/fb/png-fb.c +++ b/src/fb/png-fb.c @@ -1,7 +1,7 @@ /* P N G - F B . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fb/spm-fb.c b/src/fb/spm-fb.c index 1e75e0f2a21..d54a5f2859e 100644 --- a/src/fb/spm-fb.c +++ b/src/fb/spm-fb.c @@ -1,7 +1,7 @@ /* S P M - F B . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fbserv/fbserv.c b/src/fbserv/fbserv.c index caed7fb3f38..c859d3e48fb 100644 --- a/src/fbserv/fbserv.c +++ b/src/fbserv/fbserv.c @@ -1,7 +1,7 @@ /* F B S E R V . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/fbserv/server.c b/src/fbserv/server.c index 8759f6b886a..e6496f32a1d 100644 --- a/src/fbserv/server.c +++ b/src/fbserv/server.c @@ -1,7 +1,7 @@ /* S E R V E R . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/beset/beset.c b/src/gtools/beset/beset.c index b1489560fcf..abe0a21adbc 100644 --- a/src/gtools/beset/beset.c +++ b/src/gtools/beset/beset.c @@ -1,7 +1,7 @@ /* B E S E T . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/beset/beset.h b/src/gtools/beset/beset.h index 4e31de2271b..b4782d1d5ce 100644 --- a/src/gtools/beset/beset.h +++ b/src/gtools/beset/beset.h @@ -1,7 +1,7 @@ /* B E S E T . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/beset/fitness.c b/src/gtools/beset/fitness.c index 776771ff55b..5524b78eda8 100644 --- a/src/gtools/beset/fitness.c +++ b/src/gtools/beset/fitness.c @@ -1,7 +1,7 @@ /* F I T N E S S . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/beset/fitness.h b/src/gtools/beset/fitness.h index 6781a438926..588546590b7 100644 --- a/src/gtools/beset/fitness.h +++ b/src/gtools/beset/fitness.h @@ -1,7 +1,7 @@ /* F I T N E S S . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/beset/population.c b/src/gtools/beset/population.c index 95637517378..59865f9d299 100644 --- a/src/gtools/beset/population.c +++ b/src/gtools/beset/population.c @@ -1,7 +1,7 @@ /* P O P U L A T I O N . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/beset/population.h b/src/gtools/beset/population.h index 4f03b746ebd..2e7c8af8160 100644 --- a/src/gtools/beset/population.h +++ b/src/gtools/beset/population.h @@ -1,7 +1,7 @@ /* P O P U L A T I O N . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/ganalyze.cpp b/src/gtools/ganalyze.cpp index 31f593c17ea..1e900bb708a 100644 --- a/src/gtools/ganalyze.cpp +++ b/src/gtools/ganalyze.cpp @@ -1,7 +1,7 @@ /* G A N A L Y Z E . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/gtools/gchecker.cpp b/src/gtools/gchecker.cpp index 59b265be360..eed44e06c13 100644 --- a/src/gtools/gchecker.cpp +++ b/src/gtools/gchecker.cpp @@ -1,7 +1,7 @@ /* G C H E C K E R . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/gdiff/diff3_summary.c b/src/gtools/gdiff/diff3_summary.c index 601baf76897..f5329547225 100644 --- a/src/gtools/gdiff/diff3_summary.c +++ b/src/gtools/gdiff/diff3_summary.c @@ -1,7 +1,7 @@ /* D I F F 3 _ S U M M A R Y . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/gdiff/diff_summary.c b/src/gtools/gdiff/diff_summary.c index 0770634ac23..e6a11bb610c 100644 --- a/src/gtools/gdiff/diff_summary.c +++ b/src/gtools/gdiff/diff_summary.c @@ -1,7 +1,7 @@ /* D I F F _ S U M M A R Y . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/gdiff/gdiff.c b/src/gtools/gdiff/gdiff.c index 877171eace1..92b6daf2109 100644 --- a/src/gtools/gdiff/gdiff.c +++ b/src/gtools/gdiff/gdiff.c @@ -1,7 +1,7 @@ /* G D I F F . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -283,7 +283,7 @@ main(int argc, const char **argv) BU_OPT(d[3], "d", "deleted", "", NULL, &state->return_removed, "Report deleted objects"); BU_OPT(d[4], "m", "modified", "", NULL, &state->return_changed, "Report modified objects"); BU_OPT(d[5], "u", "unchanged", "", NULL, &state->return_unchanged, "Report unchanged objects"); - BU_OPT(d[6], "F", "filter", "string", &bu_opt_vls, state->search_filter, "Report unchanged objects"); + BU_OPT(d[6], "F", "filter", "string", &bu_opt_vls, state->search_filter, "Specify filter to use on results"); BU_OPT(d[7], "M", "merge-file", "merge.g", &bu_opt_vls, state->merge_file, "Specify merge file"); BU_OPT(d[8], "t", "tolerance", "#", &bu_opt_fastf_t, &state->diff_tol->dist, "numerical distance tolerance for same/different decisions (RT_LEN_TOL is default)"); BU_OPT(d[9], "v", "verbosity", "", &bu_opt_incr_long, &state->verbosity, "increase output verbosity (multiple specifications of -v increase verbosity more)"); diff --git a/src/gtools/gdiff/gdiff.h b/src/gtools/gdiff/gdiff.h index 9a2b6d7e438..8780a978fb6 100644 --- a/src/gtools/gdiff/gdiff.h +++ b/src/gtools/gdiff/gdiff.h @@ -1,7 +1,7 @@ /* G D I F F 2 . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/gdiff/merge.c b/src/gtools/gdiff/merge.c index 99e982f9d7c..2d0cb1529d5 100644 --- a/src/gtools/gdiff/merge.c +++ b/src/gtools/gdiff/merge.c @@ -1,7 +1,7 @@ /* M E R G E . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/gdiff/utility.c b/src/gtools/gdiff/utility.c index ef793c1fc01..a8a38774a2b 100644 --- a/src/gtools/gdiff/utility.c +++ b/src/gtools/gdiff/utility.c @@ -1,7 +1,7 @@ /* U T I L I T Y . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/gex.cpp b/src/gtools/gex.cpp index cec6d12000f..400710b8688 100644 --- a/src/gtools/gex.cpp +++ b/src/gtools/gex.cpp @@ -1,7 +1,7 @@ /* G E X . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/gtools/glint.cpp b/src/gtools/glint.cpp index d94738f8654..a0deb9fe3fb 100644 --- a/src/gtools/glint.cpp +++ b/src/gtools/glint.cpp @@ -1,7 +1,7 @@ /* G L I N T . C P P * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/gtools/gqa.c b/src/gtools/gqa.c index 64d26dfb830..910f85b2680 100644 --- a/src/gtools/gqa.c +++ b/src/gtools/gqa.c @@ -1,7 +1,7 @@ /* G _ Q A . C * BRL-CAD * - * Copyright (c) 2005-2020 United States Government as represented by + * Copyright (c) 2005-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/gtools/gsh.cpp b/src/gtools/gsh.cpp index 84923e3b9ed..97c9d32a728 100644 --- a/src/gtools/gsh.cpp +++ b/src/gtools/gsh.cpp @@ -1,7 +1,7 @@ /* G S H . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -57,7 +57,7 @@ main(int argc, const char **argv) if (argc == 0 || !argv) return -1; - /* Let bu_brlcad_root and friends know where we are */ + /* Let libbu know where we are */ bu_setprogname(argv[0]); /* Done with program name */ @@ -249,9 +249,17 @@ main(int argc, const char **argv) /* If we're not opening or closing, and we have an active gedp, * make a standard libged call */ - ged_exec(gedp, ac, (const char **)av); - printf("%s\n", bu_vls_cstr(gedp->ged_result_str)); - bu_vls_trunc(gedp->ged_result_str, 0); + if (ged_cmd_valid(av[0], NULL)) { + const char *ccmd = NULL; + int edist = ged_cmd_lookup(&ccmd, av[0]); + if (edist) { + printf("Command %s not found, did you mean %s (edit distance %d)?\n", av[0], ccmd, edist); + } + } else { + ged_exec(gedp, ac, (const char **)av); + printf("%s\n", bu_vls_cstr(gedp->ged_result_str)); + bu_vls_trunc(gedp->ged_result_str, 0); + } #if 0 int (*func)(struct ged *, int, char *[]); *(void **)(&func) = bu_dlsym(libged, av[0]); diff --git a/src/gtools/gtransfer.c b/src/gtools/gtransfer.c index 0beef6ebd36..ca7687e99f8 100644 --- a/src/gtools/gtransfer.c +++ b/src/gtools/gtransfer.c @@ -1,7 +1,7 @@ /* G _ T R A N S F E R . C * BRL-CAD * - * Copyright (c) 2006-2020 United States Government as represented by + * Copyright (c) 2006-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/gtools/tests/CMakeLists.txt b/src/gtools/tests/CMakeLists.txt index 05af5698b97..83baebb1b26 100644 --- a/src/gtools/tests/CMakeLists.txt +++ b/src/gtools/tests/CMakeLists.txt @@ -1,8 +1,29 @@ -BRLCAD_ADDEXEC(bigdb bigdb.c "libged;libwdb;librt;libbu" TEST) +BRLCAD_ADDEXEC(bigdb bigdb.c "libged;libwdb;librt;libbu" TEST_USESDATA) + +BRLCAD_ADD_TEST(NAME slow-bigdb_1gb COMMAND bigdb 1) +BRLCAD_ADD_TEST(NAME slow-bigdb_5gb COMMAND bigdb 5) + +set_property(TEST slow-bigdb_1gb PROPERTY SKIP_RETURN_CODE 123) +set_property(TEST slow-bigdb_5gb PROPERTY SKIP_RETURN_CODE 123) + +# Test GQA's ability to write out valid plot files, both in single and +# multithreaded modes. + +set(GQA_GFILE "${CMAKE_CURRENT_SOURCE_DIR}/../../libged/tests/ged_tests.g") + +set(GQA_PFILE "${CMAKE_CURRENT_BINARY_DIR}/ovlp_overlaps.plot3") +BRLCAD_ADD_TEST(NAME gqa_plot COMMAND gqa -P 1 -Ao -p ovlp_ "${GQA_GFILE}" ovlp) +BRLCAD_ADD_TEST(NAME gqa_plot_verify COMMAND bn_plot3 -b "${GQA_PFILE}") +set_property(TEST gqa_plot_verify PROPERTY DEPENDS gqa_plot) +DISTCLEAN("${GQA_PFILE}") + +set(GQA_MULTI_PFILE "${CMAKE_CURRENT_BINARY_DIR}/ovlpmulti_overlaps.plot3") +BRLCAD_ADD_TEST(NAME gqa_plot_multithreaded COMMAND gqa -Ao -p ovlpmulti_ "${GQA_GFILE}" ovlp) +BRLCAD_ADD_TEST(NAME gqa_plot_verify_multithreaded COMMAND bn_plot3 -b "${GQA_MULTI_PFILE}") +set_property(TEST gqa_plot_verify_multithreaded PROPERTY DEPENDS gqa_plot_multithreaded) +DISTCLEAN("${GQA_MULTI_PFILE}") -add_test(NAME slow-bigdb_1gb COMMAND bigdb 1) -add_test(NAME slow-bigdb_5gb COMMAND bigdb 5) CMAKEFILES(CMakeLists.txt) diff --git a/src/gtools/tests/bigdb.c b/src/gtools/tests/bigdb.c index d7cea76ad4d..00f4f6c3ef4 100644 --- a/src/gtools/tests/bigdb.c +++ b/src/gtools/tests/bigdb.c @@ -1,7 +1,7 @@ /* B I G D B . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without @@ -50,6 +50,7 @@ #include "common.h" #include +#include #include "bu.h" #include "raytrace.h" @@ -87,17 +88,39 @@ main(int ac, char *av[]) /* bu_log("using %s temp file\n", filename); */ - title = (char *)bu_malloc(sz * 2, "test allocation"); - bu_free(title, "test allocation"); - + /* make sure we don't overflow */ + BU_ASSERT((uint64_t)sz < (uint64_t)(SIZE_MAX/2)); + BU_ASSERT(sz > strlen("123......321")+1); + + /* intentionally using malloc so we can halt the test if this + * system will let us allocate enough memory. + * + * unfortunately, librt currently re-allocates a title 9 times in + * the process of writing it to disk, keeping what appears to be 5 + * of them in memory at the same time. + */ +#define MULTIPLIER 5 + title = (char *)malloc(sz * MULTIPLIER); + if (!title) { + bu_log("WARNING: unable to allocate %zu MB\n", (sz * MULTIPLIER) / (1024 * 1024)); + bu_exit(123, "Aborting test.\n"); + } + free(title); + title = (char *)bu_malloc(sz, "title"); memset(title, ' ', sz); - title[0] = '3'; + title[0] = '1'; title[1] = '2'; - title[2] = '1'; - title[sz-4] = '1'; + title[2] = '3'; + title[3] = '.'; + title[4] = '.'; + title[5] = '.'; + title[sz-7] = '.'; + title[sz-6] = '.'; + title[sz-5] = '.'; + title[sz-4] = '3'; title[sz-3] = '2'; - title[sz-2] = '3'; + title[sz-2] = '1'; title[sz-1] = '\0'; /* bu_log("setting title to %ld == %ld chars long (%c%c%c <> %c%c%c)\n", strlen(title), sz-1, title[0], title[1], title[2], title[sz-4], title[sz-3], title[sz-2]); */ diff --git a/src/libanalyze/GridGeneration/rectangular_grid.c b/src/libanalyze/GridGeneration/rectangular_grid.c index 96a0b61b4da..6fe85f53d93 100644 --- a/src/libanalyze/GridGeneration/rectangular_grid.c +++ b/src/libanalyze/GridGeneration/rectangular_grid.c @@ -1,7 +1,7 @@ /* R E C T A N G U L A R _ G R I D . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/DCEL.h b/src/libanalyze/MeshHealing/DCEL.h index c2fdb381319..de8db23e20f 100644 --- a/src/libanalyze/MeshHealing/DCEL.h +++ b/src/libanalyze/MeshHealing/DCEL.h @@ -1,7 +1,7 @@ /* D C E L . H * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/Geometry.cpp b/src/libanalyze/MeshHealing/Geometry.cpp index 7a72351a002..9cda3498e05 100644 --- a/src/libanalyze/MeshHealing/Geometry.cpp +++ b/src/libanalyze/MeshHealing/Geometry.cpp @@ -1,7 +1,7 @@ /* G E O M E T R Y . C P P * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/Geometry.h b/src/libanalyze/MeshHealing/Geometry.h index fa399385881..ccdbd879455 100644 --- a/src/libanalyze/MeshHealing/Geometry.h +++ b/src/libanalyze/MeshHealing/Geometry.h @@ -1,7 +1,7 @@ /* G E O M E T R Y . H * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/MeshConversion.cpp b/src/libanalyze/MeshHealing/MeshConversion.cpp index 55ea7f77a50..c8108cccf38 100644 --- a/src/libanalyze/MeshHealing/MeshConversion.cpp +++ b/src/libanalyze/MeshHealing/MeshConversion.cpp @@ -1,7 +1,7 @@ /* M E S H C O N V E R S I O N . C P P * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/MeshConversion.h b/src/libanalyze/MeshHealing/MeshConversion.h index cd4a0770d6b..f9eecfc53e7 100644 --- a/src/libanalyze/MeshHealing/MeshConversion.h +++ b/src/libanalyze/MeshHealing/MeshConversion.h @@ -1,7 +1,7 @@ /* M E S H C O N V E R S I O N . H * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/MeshConversion_brlcad.cpp b/src/libanalyze/MeshHealing/MeshConversion_brlcad.cpp index a0c4639fe6c..e4430a6fdae 100644 --- a/src/libanalyze/MeshHealing/MeshConversion_brlcad.cpp +++ b/src/libanalyze/MeshHealing/MeshConversion_brlcad.cpp @@ -1,7 +1,7 @@ /* M E S H C O N V E R S I O N _ B R L C A D . C P P * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/MeshConversion_brlcad.h b/src/libanalyze/MeshHealing/MeshConversion_brlcad.h index 0490d5b8011..edda0f3f4e1 100644 --- a/src/libanalyze/MeshHealing/MeshConversion_brlcad.h +++ b/src/libanalyze/MeshHealing/MeshConversion_brlcad.h @@ -1,7 +1,7 @@ /* M E S H C O N V E R S I O N _ B R L C A D . H * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/Stitch.cpp b/src/libanalyze/MeshHealing/Stitch.cpp index d4bae1913e9..4eb8ccd59b2 100644 --- a/src/libanalyze/MeshHealing/Stitch.cpp +++ b/src/libanalyze/MeshHealing/Stitch.cpp @@ -1,7 +1,7 @@ /* S T I T C H . C P P * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/Stitch.h b/src/libanalyze/MeshHealing/Stitch.h index f1e6906d7dc..bc556484ac1 100644 --- a/src/libanalyze/MeshHealing/Stitch.h +++ b/src/libanalyze/MeshHealing/Stitch.h @@ -1,7 +1,7 @@ /* S T I T C H . H * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/Zipper.cpp b/src/libanalyze/MeshHealing/Zipper.cpp index c9371e100b6..dd99281ba0f 100644 --- a/src/libanalyze/MeshHealing/Zipper.cpp +++ b/src/libanalyze/MeshHealing/Zipper.cpp @@ -1,7 +1,7 @@ /* Z I P P E R . C P P * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/MeshHealing/Zipper.h b/src/libanalyze/MeshHealing/Zipper.h index 21c6fdac663..8fd004eac77 100644 --- a/src/libanalyze/MeshHealing/Zipper.h +++ b/src/libanalyze/MeshHealing/Zipper.h @@ -1,7 +1,7 @@ /* Z I P P E R . H * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/analyze_private.h b/src/libanalyze/analyze_private.h index a80f98872ff..89921a0163f 100644 --- a/src/libanalyze/analyze_private.h +++ b/src/libanalyze/analyze_private.h @@ -1,7 +1,7 @@ /* A N A L Y Z E _ P R I V A T E . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -112,6 +112,9 @@ struct current_state { double *m_len; unsigned long *shots; + /* Plot file I/O protection */ + int sem_plot; + vect_t u_dir; /* direction of U vector for "current view" */ vect_t v_dir; /* direction of V vector for "current view" */ long steps[3]; /* this is per-dimension, not per-view */ diff --git a/src/libanalyze/api.c b/src/libanalyze/api.c index 1e0796dcc7d..ee49ddf426a 100644 --- a/src/libanalyze/api.c +++ b/src/libanalyze/api.c @@ -1,7 +1,7 @@ /* A P I . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -338,6 +338,7 @@ analyze_hit(struct application *ap, struct partition *PartHeadp, struct seg *seg bu_semaphore_release(BU_SEM_GENERAL); } if (state->plot_volume) { + bu_semaphore_acquire(state->sem_plot); if (ap->a_user & 1) { pl_color(state->plot_volume, 128, 255, 192); /* pale green */ } else { @@ -345,6 +346,7 @@ analyze_hit(struct application *ap, struct partition *PartHeadp, struct seg *seg } pdv_3line(state->plot_volume, pt, opt); + bu_semaphore_acquire(state->sem_plot); } } @@ -1402,6 +1404,7 @@ perform_raytracing(struct current_state *state, struct db_i *dbip, char *names[] /* initialize some stuff */ state->sem_worker = bu_semaphore_register("analyze_sem_worker"); state->sem_stats = bu_semaphore_register("analyze_sem_stats"); + state->sem_plot = bu_semaphore_register("analyze_sem_plot"); allocate_region_data(state, names); grid.refine_flag = 0; shoot_rays(state); diff --git a/src/libanalyze/centroid.c b/src/libanalyze/centroid.c index 318c28df5b3..a88f82513de 100644 --- a/src/libanalyze/centroid.c +++ b/src/libanalyze/centroid.c @@ -1,7 +1,7 @@ /* C E N T R O I D . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/check_options.c b/src/libanalyze/check_options.c index 5739a9c920b..04b27b28415 100644 --- a/src/libanalyze/check_options.c +++ b/src/libanalyze/check_options.c @@ -1,7 +1,7 @@ /* C H E C K _ O P T I O N S. C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/density.cpp b/src/libanalyze/density.cpp index af6cef1ed9b..65654fe1dd1 100644 --- a/src/libanalyze/density.cpp +++ b/src/libanalyze/density.cpp @@ -1,7 +1,7 @@ /* D E N S I T Y . C P P * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/find_subtracted_shapes.cpp b/src/libanalyze/find_subtracted_shapes.cpp index aea2d36b77a..ce5e83cc5ff 100644 --- a/src/libanalyze/find_subtracted_shapes.cpp +++ b/src/libanalyze/find_subtracted_shapes.cpp @@ -1,7 +1,7 @@ /* F I N D _ S U B T R A C T E D _ S H A P E S . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/globals.c b/src/libanalyze/globals.c index 8fc1cc6126b..ace8d411356 100644 --- a/src/libanalyze/globals.c +++ b/src/libanalyze/globals.c @@ -1,7 +1,7 @@ /* G L O B A L S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/heal_mesh.cpp b/src/libanalyze/heal_mesh.cpp index 1518206a23d..f40876faa63 100644 --- a/src/libanalyze/heal_mesh.cpp +++ b/src/libanalyze/heal_mesh.cpp @@ -1,7 +1,7 @@ /* H E A L _ M E S H . C P P * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/inside.c b/src/libanalyze/inside.c index 901673fa64e..ebbcd7afac1 100644 --- a/src/libanalyze/inside.c +++ b/src/libanalyze/inside.c @@ -1,7 +1,7 @@ /* I N S I D E . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/mass.c b/src/libanalyze/mass.c index 4bc6779632e..fbb4850977e 100644 --- a/src/libanalyze/mass.c +++ b/src/libanalyze/mass.c @@ -1,7 +1,7 @@ /* M A S S . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/moments.c b/src/libanalyze/moments.c index 7a14d9300ab..9697c540be1 100644 --- a/src/libanalyze/moments.c +++ b/src/libanalyze/moments.c @@ -1,7 +1,7 @@ /* M O M E N T S . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/nirt/diff.cpp b/src/libanalyze/nirt/diff.cpp index 55ee25bf937..2b7b83bf201 100644 --- a/src/libanalyze/nirt/diff.cpp +++ b/src/libanalyze/nirt/diff.cpp @@ -1,7 +1,7 @@ /* D I F F . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/nirt/nirt.cpp b/src/libanalyze/nirt/nirt.cpp index 95f400bafa8..afd0a6ab2ad 100644 --- a/src/libanalyze/nirt/nirt.cpp +++ b/src/libanalyze/nirt/nirt.cpp @@ -1,7 +1,7 @@ /* N I R T . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/nirt/nirt.h b/src/libanalyze/nirt/nirt.h index 08c7a334b8d..35590702157 100644 --- a/src/libanalyze/nirt/nirt.h +++ b/src/libanalyze/nirt/nirt.h @@ -1,7 +1,7 @@ /* N I R T . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/obj_to_pnts.cpp b/src/libanalyze/obj_to_pnts.cpp index 6106dd69014..81e77ebf19f 100644 --- a/src/libanalyze/obj_to_pnts.cpp +++ b/src/libanalyze/obj_to_pnts.cpp @@ -1,7 +1,7 @@ /* O B J _ T O _ P N T S . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/overlaps.c b/src/libanalyze/overlaps.c index 86f0f4fee63..61454675d79 100644 --- a/src/libanalyze/overlaps.c +++ b/src/libanalyze/overlaps.c @@ -1,7 +1,7 @@ /* O V E R L A P S . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/raydiff.c b/src/libanalyze/raydiff.c index 56fe6ed6e65..ac9e2d36319 100644 --- a/src/libanalyze/raydiff.c +++ b/src/libanalyze/raydiff.c @@ -1,7 +1,7 @@ /* R A Y D I F F . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -195,9 +195,9 @@ analyze_raydiff(struct analyze_raydiff_results **results, struct db_i *dbip, fastf_t oldtime, currtime; int ind = 0; int count = 0; - struct rt_i *rtip; + struct rt_i *rtip = NULL; int ncpus = bu_avail_cpus(); - fastf_t *rays; + fastf_t *rays = NULL; struct rt_gen_worker_vars *state = (struct rt_gen_worker_vars *)bu_calloc(ncpus+1, sizeof(struct rt_gen_worker_vars ), "state"); struct raydiff_container *local_state = (struct raydiff_container *)bu_calloc(ncpus+1, sizeof(struct raydiff_container), "local state"); struct bu_ptbl test_tbl = BU_PTBL_INIT_ZERO; @@ -250,8 +250,14 @@ analyze_raydiff(struct analyze_raydiff_results **results, struct db_i *dbip, } #endif #if 1 - if (rt_gettree(rtip, left) < 0) return -1; - if (rt_gettree(rtip, right) < 0) return -1; + if (rt_gettree(rtip, left) < 0) { + rt_free_rti(rtip); + return -1; + } + if (rt_gettree(rtip, right) < 0) { + rt_free_rti(rtip); + return -1; + } #endif rt_prep_parallel(rtip, ncpus); @@ -330,13 +336,31 @@ analyze_raydiff(struct analyze_raydiff_results **results, struct db_i *dbip, memfree: /* Free memory not stored in tables */ for (i = 0; i < ncpus+1; i++) { - if (local_state[i].left != NULL) BU_PUT(local_state[i].left, struct bu_ptbl); - if (local_state[i].right != NULL) BU_PUT(local_state[i].right, struct bu_ptbl); - if (local_state[i].both != NULL) BU_PUT(local_state[i].both, struct bu_ptbl); + if (local_state[i].left != NULL) { + bu_ptbl_free(local_state[i].left); + BU_PUT(local_state[i].left, struct bu_ptbl); + } + if (local_state[i].right != NULL) { + bu_ptbl_free(local_state[i].right); + BU_PUT(local_state[i].right, struct bu_ptbl); + } + if (local_state[i].both != NULL) { + bu_ptbl_free(local_state[i].both); + BU_PUT(local_state[i].both, struct bu_ptbl); + } if (local_state[i].left_name) bu_free((void *)local_state[i].left_name, "left name"); if (local_state[i].right_name) bu_free((void *)local_state[i].right_name, "right name"); /*BU_PUT(state[i].resp, struct resource);*/ } + + if (rays) { + bu_free(rays, "rays"); + } + + if (rtip) { + rt_free_rti(rtip); + } + bu_free(state, "free state containers"); bu_free(local_state, "free state containers"); bu_free(resp, "free resources"); diff --git a/src/libanalyze/surf_area.c b/src/libanalyze/surf_area.c index 7f34abe3390..75d4b4ce593 100644 --- a/src/libanalyze/surf_area.c +++ b/src/libanalyze/surf_area.c @@ -1,7 +1,7 @@ /* S U R F _ A R E A . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/tests/CMakeLists.txt b/src/libanalyze/tests/CMakeLists.txt index c5f980c03f3..f4c5075d37d 100644 --- a/src/libanalyze/tests/CMakeLists.txt +++ b/src/libanalyze/tests/CMakeLists.txt @@ -7,8 +7,8 @@ BRLCAD_ADDEXEC(analyze_nhit nhit.cpp "libanalyze;libbu" TEST_USESDATA) ##################################### BRLCAD_ADDEXEC(analyze_densities density.cpp "libanalyze;libbu" TEST) -add_test(NAME analyze_densities_null COMMAND analyze_densities) -add_test(NAME analyze_densities_std COMMAND analyze_densities std) +BRLCAD_ADD_TEST(NAME analyze_densities_null COMMAND analyze_densities) +BRLCAD_ADD_TEST(NAME analyze_densities_std COMMAND analyze_densities std) CMAKEFILES(raydiff.g) diff --git a/src/libanalyze/tests/density.cpp b/src/libanalyze/tests/density.cpp index dc7c5d18320..73004b28c26 100644 --- a/src/libanalyze/tests/density.cpp +++ b/src/libanalyze/tests/density.cpp @@ -1,7 +1,7 @@ /* D E N S I T Y . C P P * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/tests/nhit.cpp b/src/libanalyze/tests/nhit.cpp index 88e9a315195..44eabcb59f9 100644 --- a/src/libanalyze/tests/nhit.cpp +++ b/src/libanalyze/tests/nhit.cpp @@ -1,7 +1,7 @@ /* N H I T . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -103,7 +103,7 @@ main(int argc, const char **argv) if (argc == 0 || !argv) return -1; - /* Let bu_brlcad_root and friends know where we are */ + /* Let libbu know where we are */ bu_setprogname(argv[0]); argv++; argc--; diff --git a/src/libanalyze/tests/raydiff.c b/src/libanalyze/tests/raydiff.c index 1284c3981c3..73500eeabd3 100644 --- a/src/libanalyze/tests/raydiff.c +++ b/src/libanalyze/tests/raydiff.c @@ -1,7 +1,7 @@ /* R A Y D I F F . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/tests/solid_partitions.c b/src/libanalyze/tests/solid_partitions.c index e5a4316ba81..511a5169ca8 100644 --- a/src/libanalyze/tests/solid_partitions.c +++ b/src/libanalyze/tests/solid_partitions.c @@ -1,7 +1,7 @@ /* R A Y D I F F . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/util.cpp b/src/libanalyze/util.cpp index ba0aee0dba8..29be9efa198 100644 --- a/src/libanalyze/util.cpp +++ b/src/libanalyze/util.cpp @@ -1,7 +1,7 @@ /* U T I L . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -81,7 +81,8 @@ analyze_gen_worker(int cpu, void *ptr) extern "C" int analyze_get_bbox_rays(fastf_t **rays, point_t min, point_t max, struct bn_tol *tol) { - int ret, count; + int ret = 0; + int count = 0; point_t mid; struct rt_pattern_data *xdata = NULL; struct rt_pattern_data *ydata = NULL; @@ -109,7 +110,7 @@ analyze_get_bbox_rays(fastf_t **rays, point_t min, point_t max, struct bn_tol *t bu_free(xdata->n_vec, "x vec inputs"); bu_free(xdata->n_p, "x p inputs"); if (ret < 0) { - ret = 0; + count = ret; goto memfree; } @@ -179,7 +180,6 @@ analyze_get_bbox_rays(fastf_t **rays, point_t min, point_t max, struct bn_tol *t /* bu_log("ray cnt: %d\n", count); */ - return count; memfree: /* Free memory not stored in tables */ @@ -189,7 +189,7 @@ analyze_get_bbox_rays(fastf_t **rays, point_t min, point_t max, struct bn_tol *t if (xdata) BU_PUT(xdata, struct rt_pattern_data); if (ydata) BU_PUT(ydata, struct rt_pattern_data); if (zdata) BU_PUT(zdata, struct rt_pattern_data); - return ret; + return count; } /* TODO - consolidate with above */ @@ -488,6 +488,7 @@ analyze_seg_filter(struct bu_ptbl *segs, getray_t gray, getflag_t gflag, struct bu_parallel(segfilter_gen_worker, ncpus, (void *)state); + bu_free(local_state, "local state"); bu_free(state, "state"); return; diff --git a/src/libanalyze/volume.c b/src/libanalyze/volume.c index ca76dcd2824..d84d79075ea 100644 --- a/src/libanalyze/volume.c +++ b/src/libanalyze/volume.c @@ -1,7 +1,7 @@ /* V O L U M E . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/voxels.c b/src/libanalyze/voxels.c index b3e283f2751..60d79248d7e 100644 --- a/src/libanalyze/voxels.c +++ b/src/libanalyze/voxels.c @@ -1,7 +1,7 @@ /* V O X E L S . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libanalyze/wnsurface.cpp b/src/libanalyze/wnsurface.cpp index cef029008af..ed17b37db88 100644 --- a/src/libanalyze/wnsurface.cpp +++ b/src/libanalyze/wnsurface.cpp @@ -1,7 +1,7 @@ /* W N S U R F A C E . C P P * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/CMakeLists.txt b/src/libbg/CMakeLists.txt index bc3c27c4894..18455616392 100644 --- a/src/libbg/CMakeLists.txt +++ b/src/libbg/CMakeLists.txt @@ -4,10 +4,51 @@ set(BG_INCLUDE_DIRS ${BRLCAD_SOURCE_DIR}/include ${BN_INCLUDE_DIRS} ${BU_INCLUDE_DIRS} - ${P2T_INCLUDE_DIR} + ${POLY2TRI_INCLUDE_DIRS} + ${SPSR_INCLUDE_DIR} ) BRLCAD_LIB_INCLUDE_DIRS(bg BG_INCLUDE_DIRS "") +set(SPSR_srcs + spsr/Allocator.h + spsr/Array.h + spsr/Array.inl + spsr/BinaryNode.h + spsr/BSplineData.h + spsr/BSplineData.inl + spsr/cvertex.h + spsr/Factor.cpp + spsr/Factor.h + spsr/FunctionData.h + spsr/FunctionData.inl + spsr/Geometry.cpp + spsr/Geometry.h + spsr/Geometry.inl + spsr/MarchingCubes.cpp + spsr/MarchingCubes.h + spsr/MAT.h + spsr/MAT.inl + spsr/MultiGridOctreeData.h + spsr/MultiGridOctreeData.inl + spsr/MultiGridOctreeData.IsoSurface.inl + spsr/MultiGridOctreeData.SortedTreeNodes.inl + spsr/Octree.h + spsr/Octree.inl + spsr/PlyVertexMini.h + spsr/PointStream.h + spsr/PointStream.inl + spsr/Polynomial.h + spsr/Polynomial.inl + spsr/PPolynomial.h + spsr/PPolynomial.inl + spsr/SparseMatrix.h + spsr/SparseMatrix.inl + spsr/SPSR.cpp + spsr/SPSR.h + spsr/Vector.h + spsr/Vector.inl + ) + set(LIBBG_SOURCES aabb_ray.c chull.c @@ -23,6 +64,7 @@ set(LIBBG_SOURCES polygon_triangulate.cpp polygon_point_in.c spsr.c + ${SPSR_srcs} tri_pt.c tri_ray.c tri_tri.c @@ -31,15 +73,13 @@ set(LIBBG_SOURCES util.c ) -BRLCAD_ADDLIB(libbg "${LIBBG_SOURCES}" "libbn;libbu;SPSR;${P2T_LIBRARY}") +BRLCAD_ADDLIB(libbg "${LIBBG_SOURCES}" "libbn;libbu;${POLY2TRI_LIBRARIES}") set_target_properties(libbg PROPERTIES VERSION 20.0.1 SOVERSION 20) if (HIDE_INTERNAL_SYMBOLS) - set_property(TARGET libbg APPEND PROPERTY COMPILE_DEFINITIONS "SPSR_DLL_IMPORTS") if (TARGET poly2tri OR HIDE_INTERNAL_SYMBOLS_EXT) set_property(TARGET libbg APPEND PROPERTY COMPILE_DEFINITIONS "P2T_DLL_IMPORTS") endif (TARGET poly2tri OR HIDE_INTERNAL_SYMBOLS_EXT) if (TARGET libbg-obj) - set_property(TARGET libbg-obj APPEND PROPERTY COMPILE_DEFINITIONS "SPSR_DLL_IMPORTS") if (TARGET poly2tri OR HIDE_INTERNAL_SYMBOLS_EXT) set_property(TARGET libbg-obj APPEND PROPERTY COMPILE_DEFINITIONS "P2T_DLL_IMPORTS") endif (TARGET poly2tri OR HIDE_INTERNAL_SYMBOLS_EXT) @@ -55,6 +95,7 @@ set(bg_ignore delaunator.hpp earcut.hpp pointgen.c + spsr/LICENSE ) CMAKEFILES(${bg_ignore}) @@ -66,3 +107,4 @@ CMAKEFILES(CMakeLists.txt) # indent-tabs-mode: t # End: # ex: shiftwidth=2 tabstop=8 + diff --git a/src/libbg/aabb_ray.c b/src/libbg/aabb_ray.c index f90c240cfa5..0425e405193 100644 --- a/src/libbg/aabb_ray.c +++ b/src/libbg/aabb_ray.c @@ -1,7 +1,7 @@ /* A A B B _ R A Y . C * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/bg_private.h b/src/libbg/bg_private.h index d88072b853b..cc237bf5191 100644 --- a/src/libbg/bg_private.h +++ b/src/libbg/bg_private.h @@ -1,7 +1,7 @@ /* G M _ P R I V A T E . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/chull.c b/src/libbg/chull.c index 804a890bb63..dd82e1ced3c 100644 --- a/src/libbg/chull.c +++ b/src/libbg/chull.c @@ -1,7 +1,7 @@ /* C H U L L . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Copyright 2001 softSurfer, 2012 Dan Sunday diff --git a/src/libbg/chull2.cpp b/src/libbg/chull2.cpp index 1994d350576..f11e0488c7e 100644 --- a/src/libbg/chull2.cpp +++ b/src/libbg/chull2.cpp @@ -1,7 +1,7 @@ /* C H U L L . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Copyright 2001 softSurfer, 2012 Dan Sunday diff --git a/src/libbg/chull3d.cpp b/src/libbg/chull3d.cpp index 487a4e86d3f..16aa8b6197c 100644 --- a/src/libbg/chull3d.cpp +++ b/src/libbg/chull3d.cpp @@ -1,7 +1,7 @@ /* C H U L L 3 D . C P P * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/obr.c b/src/libbg/obr.c index 03434540f7f..082e1682472 100644 --- a/src/libbg/obr.c +++ b/src/libbg/obr.c @@ -1,7 +1,7 @@ /* O B R . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Geometric Tools, LLC diff --git a/src/libbg/pointgen.c b/src/libbg/pointgen.c index d413f7f2e09..dcd00283d0a 100644 --- a/src/libbg/pointgen.c +++ b/src/libbg/pointgen.c @@ -1,7 +1,7 @@ /* P O I N T G E N . C * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/polygon.c b/src/libbg/polygon.c index ce30582c471..74b6302fb5f 100644 --- a/src/libbg/polygon.c +++ b/src/libbg/polygon.c @@ -1,7 +1,7 @@ /* P O L Y G O N . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/polygon_op.cpp b/src/libbg/polygon_op.cpp index 28f52db43d9..d83ecb744d3 100644 --- a/src/libbg/polygon_op.cpp +++ b/src/libbg/polygon_op.cpp @@ -1,7 +1,7 @@ /* P O L Y G O N _ O P . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/polygon_triangulate.cpp b/src/libbg/polygon_triangulate.cpp index dd274649c22..228409060ac 100644 --- a/src/libbg/polygon_triangulate.cpp +++ b/src/libbg/polygon_triangulate.cpp @@ -1,7 +1,7 @@ /* P O L Y G O N _ T R I A N G U L A T E . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/spsr.c b/src/libbg/spsr.c index 690420b01eb..053351e2275 100644 --- a/src/libbg/spsr.c +++ b/src/libbg/spsr.c @@ -1,7 +1,7 @@ /* S P S R . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -27,7 +27,7 @@ #include "bu/log.h" #include "bu/malloc.h" #include "bg/spsr.h" -#include "../other/libspsr/Src/SPSR.h" +#include "./spsr/SPSR.h" struct c_vert { point_t p; diff --git a/src/other/libspsr/Src/Allocator.h b/src/libbg/spsr/Allocator.h similarity index 100% rename from src/other/libspsr/Src/Allocator.h rename to src/libbg/spsr/Allocator.h diff --git a/src/other/libspsr/Src/Array.h b/src/libbg/spsr/Array.h similarity index 96% rename from src/other/libspsr/Src/Array.h rename to src/libbg/spsr/Array.h index 18e7f9679ea..6abb87de88e 100644 --- a/src/other/libspsr/Src/Array.h +++ b/src/libbg/spsr/Array.h @@ -32,15 +32,6 @@ DAMAGE. #include #define ARRAY_DEBUG 0 -#ifdef _WIN64 -#define ASSERT( x ) { if( !( x ) ) __debugbreak(); } -#else // !_WIN64 -#ifdef _WIN32 -#define ASSERT( x ) { if( !( x ) ) _asm{ int 0x03 } } -#else // !_WIN32 -#define ASSERT( x ) { if( !( x ) ) exit(0); } -#endif // _WIN32 -#endif // _WIN64 // Code from http://stackoverflow.com void* aligned_malloc( size_t size , size_t align ) diff --git a/src/other/libspsr/Src/Array.inl b/src/libbg/spsr/Array.inl similarity index 99% rename from src/other/libspsr/Src/Array.inl rename to src/libbg/spsr/Array.inl index 08fdfbcdce9..26c743e7867 100644 --- a/src/other/libspsr/Src/Array.inl +++ b/src/libbg/spsr/Array.inl @@ -30,9 +30,6 @@ DAMAGE. #include #include #include -#ifdef _WIN32 -#include -#endif // _WIN32 #include inline bool isfinitef( float fp ){ float f=fp; return ((*(unsigned *)&f)&0x7f800000)!=0x7f800000; } diff --git a/src/other/libspsr/Src/BSplineData.h b/src/libbg/spsr/BSplineData.h similarity index 100% rename from src/other/libspsr/Src/BSplineData.h rename to src/libbg/spsr/BSplineData.h diff --git a/src/other/libspsr/Src/BSplineData.inl b/src/libbg/spsr/BSplineData.inl similarity index 98% rename from src/other/libspsr/Src/BSplineData.inl rename to src/libbg/spsr/BSplineData.inl index f4f842cd1dd..ebe3445ab68 100644 --- a/src/other/libspsr/Src/BSplineData.inl +++ b/src/libbg/spsr/BSplineData.inl @@ -670,11 +670,11 @@ void BSplineElements< 1 >::upSample( BSplineElements< 1 >& high ) const template<> void BSplineElements< 2 >::upSample( BSplineElements< 2 >& high ) const { - // /----\ - // / \ - // / \ = 1 /--\ +3 /--\ +3 /--\ +1 /--\ - // / \ / \ / \ / \ / \ - // |----------| |----------| |----------| |----------| |----------| + /* /----\ */ + /* / \ */ + /* / \ = 1 /--\ +3 /--\ +3 /--\ +1 /--\ */ + /* / \ / \ / \ / \ / \ */ + /* |----------| |----------| |----------| |----------| |----------| */ high.resize( size()*2 ); high.assign( high.size() , BSplineElementCoefficients<2>() ); diff --git a/src/other/libspsr/Src/BinaryNode.h b/src/libbg/spsr/BinaryNode.h similarity index 100% rename from src/other/libspsr/Src/BinaryNode.h rename to src/libbg/spsr/BinaryNode.h diff --git a/src/other/libspsr/Src/Factor.cpp b/src/libbg/spsr/Factor.cpp similarity index 93% rename from src/other/libspsr/Src/Factor.cpp rename to src/libbg/spsr/Factor.cpp index 1a7a269e02d..2e42304d765 100644 --- a/src/other/libspsr/Src/Factor.cpp +++ b/src/libbg/spsr/Factor.cpp @@ -26,6 +26,19 @@ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF S DAMAGE. */ +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic ignored "-Wfloat-equal" +#endif +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wfloat-equal" +#endif + ////////////////////// // Polynomial Roots // ////////////////////// @@ -262,3 +275,11 @@ int Solve(const double* eqns,const double* values,double* solutions,int dim){ delete[] set; return 1; } + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop +#endif +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + diff --git a/src/other/libspsr/Src/Factor.h b/src/libbg/spsr/Factor.h similarity index 100% rename from src/other/libspsr/Src/Factor.h rename to src/libbg/spsr/Factor.h diff --git a/src/other/libspsr/Src/FunctionData.h b/src/libbg/spsr/FunctionData.h similarity index 100% rename from src/other/libspsr/Src/FunctionData.h rename to src/libbg/spsr/FunctionData.h diff --git a/src/other/libspsr/Src/FunctionData.inl b/src/libbg/spsr/FunctionData.inl similarity index 100% rename from src/other/libspsr/Src/FunctionData.inl rename to src/libbg/spsr/FunctionData.inl diff --git a/src/other/libspsr/Src/MyTime.h b/src/libbg/spsr/Geometry.cpp similarity index 67% rename from src/other/libspsr/Src/MyTime.h rename to src/libbg/spsr/Geometry.cpp index 4d9d0fe3a82..16ecccbc2ca 100644 --- a/src/other/libspsr/Src/MyTime.h +++ b/src/libbg/spsr/Geometry.cpp @@ -26,28 +26,35 @@ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF S DAMAGE. */ -#ifndef MY_TIME_INCLUDED -#define MY_TIME_INCLUDED +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic ignored "-Wfloat-equal" +#endif +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wfloat-equal" +#endif +#include "Geometry.h" +#include #include -#ifdef HAVE_SYS_TIMEB -# include + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop #endif -#ifndef WIN32 -#include -#endif // WIN32 - -inline double Time( void ) -{ -#ifdef WIN32 - struct _timeb t; - _ftime( &t ); - return double( t.time ) + double( t.millitm ) / 1000.0; -#else // WIN32 - struct timeval t; - gettimeofday( &t , NULL ); - return t.tv_sec + double( t.tv_usec ) / 1000000; -#endif // WIN32 -} - -#endif // MY_TIME_INCLUDED +#if defined(__clang__) +# pragma clang diagnostic pop +#endif + +/////////////////// +// CoredMeshData // +/////////////////// + +TriangulationEdge::TriangulationEdge(void){pIndex[0]=pIndex[1]=tIndex[0]=tIndex[1]=-1;} +TriangulationTriangle::TriangulationTriangle(void){eIndex[0]=eIndex[1]=eIndex[2]=-1;} + + diff --git a/src/other/libspsr/Src/Geometry.h b/src/libbg/spsr/Geometry.h similarity index 90% rename from src/other/libspsr/Src/Geometry.h rename to src/libbg/spsr/Geometry.h index 0e4d7ed1242..21944eefd2c 100644 --- a/src/other/libspsr/Src/Geometry.h +++ b/src/libbg/spsr/Geometry.h @@ -32,7 +32,9 @@ DAMAGE. #include #include #include -#include "Hash.h" +#include +#define hash_map unordered_map +using std::unordered_map; template Real Random(void); @@ -341,44 +343,7 @@ class CoredVectorMeshData : public CoredMeshData< Vertex > int outOfCorePointCount(void); int polygonCount( void ); }; -class BufferedReadWriteFile -{ - bool tempFile; - FILE* _fp; - char *_buffer , _fileName[1024]; - size_t _bufferIndex , _bufferSize; -public: - BufferedReadWriteFile( char* fileName=NULL , int bufferSize=(1<<20) ); - ~BufferedReadWriteFile( void ); - bool write( const void* data , size_t size ); - bool read ( void* data , size_t size ); - void reset( void ); -}; -template< class Vertex > -class CoredFileMeshData : public CoredMeshData< Vertex > -{ - char pointFileName[1024] , polygonFileName[1024]; - BufferedReadWriteFile *oocPointFile , *polygonFile; - int oocPoints , polygons; -public: - CoredFileMeshData( void ); - ~CoredFileMeshData( void ); - - void resetIterator( void ); - int addOutOfCorePoint( const Vertex& p ); - int addPolygon( const std::vector< CoredVertexIndex >& vertices ); - int addPolygon( const std::vector< int >& vertices ); - int addOutOfCorePoint_s( const Vertex& p ); - int addPolygon_s( const std::vector< CoredVertexIndex >& vertices ); - int addPolygon_s( const std::vector< int >& vertices ); - - int nextOutOfCorePoint( Vertex& p ); - int nextPolygon( std::vector< CoredVertexIndex >& vertices ); - - int outOfCorePointCount( void ); - int polygonCount( void ); -}; #include "Geometry.inl" #endif // GEOMETRY_INCLUDED diff --git a/src/other/libspsr/Src/Geometry.inl b/src/libbg/spsr/Geometry.inl similarity index 82% rename from src/other/libspsr/Src/Geometry.inl rename to src/libbg/spsr/Geometry.inl index bc20c6f6a96..355235bbaa8 100644 --- a/src/other/libspsr/Src/Geometry.inl +++ b/src/libbg/spsr/Geometry.inl @@ -454,7 +454,6 @@ template< class Vertex > int CoredVectorMeshData< Vertex >::addOutOfCorePoint_s( const Vertex& p ) { size_t sz; -#pragma omp critical (CoredVectorMeshData_addOutOfCorePoint_s ) { sz = oocPoints.size(); oocPoints.push_back(p); @@ -465,7 +464,6 @@ template< class Vertex > int CoredVectorMeshData< Vertex >::addPolygon_s( const std::vector< int >& polygon ) { size_t sz; -#pragma omp critical (CoredVectorMeshData_addPolygon_s) { sz = polygon.size(); polygons.push_back( polygon ); @@ -510,114 +508,3 @@ int CoredVectorMeshData< Vertex >::outOfCorePointCount(void){return int(oocPoint template< class Vertex > int CoredVectorMeshData< Vertex >::polygonCount( void ) { return int( polygons.size() ); } -/////////////////////// -// CoredFileMeshData // -/////////////////////// -template< class Vertex > -CoredFileMeshData< Vertex >::CoredFileMeshData( void ) -{ - oocPoints = polygons = 0; - - oocPointFile = new BufferedReadWriteFile(); - polygonFile = new BufferedReadWriteFile(); -} -template< class Vertex > -CoredFileMeshData< Vertex >::~CoredFileMeshData( void ) -{ - delete oocPointFile; - delete polygonFile; -} -template< class Vertex > -void CoredFileMeshData< Vertex >::resetIterator ( void ) -{ - oocPointFile->reset(); - polygonFile->reset(); -} -template< class Vertex > -int CoredFileMeshData< Vertex >::addOutOfCorePoint( const Vertex& p ) -{ - oocPointFile->write( &p , sizeof( Vertex ) ); - oocPoints++; - return oocPoints-1; -} -template< class Vertex > -int CoredFileMeshData< Vertex >::addPolygon( const std::vector< int >& vertices ) -{ - int vSize = (int)vertices.size(); - polygonFile->write( &vSize , sizeof(int) ); - polygonFile->write( &vertices[0] , sizeof(int)*vSize ); - polygons++; - return polygons-1; -} -template< class Vertex > -int CoredFileMeshData< Vertex >::addPolygon( const std::vector< CoredVertexIndex >& vertices ) -{ - std::vector< int > polygon( vertices.size() ); - for( int i=0 ; i<(int)vertices.size() ; i++ ) - if( vertices[i].inCore ) polygon[i] = vertices[i].idx; - else polygon[i] = -vertices[i].idx-1; - return addPolygon( polygon ); -} -template< class Vertex > -int CoredFileMeshData< Vertex >::addOutOfCorePoint_s( const Vertex& p ) -{ - int sz; -#pragma omp critical (CoredFileMeshData_addOutOfCorePoint_s) - { - sz = oocPoints; - oocPointFile->write( &p , sizeof( Vertex ) ); - oocPoints++; - } - return sz; -} -template< class Vertex > -int CoredFileMeshData< Vertex >::addPolygon_s( const std::vector< int >& vertices ) -{ - int sz , vSize = (int)vertices.size(); -#pragma omp critical (CoredFileMeshData_addPolygon_s ) - { - sz = polygons; - polygonFile->write( &vSize , sizeof(int) ); - polygonFile->write( &vertices[0] , sizeof(int) * vSize ); - polygons++; - } - return sz; -} -template< class Vertex > -int CoredFileMeshData< Vertex >::addPolygon_s( const std::vector< CoredVertexIndex >& vertices ) -{ - std::vector< int > polygon( vertices.size() ); - for( int i=0 ; i<(int)vertices.size() ; i++ ) - if( vertices[i].inCore ) polygon[i] = vertices[i].idx; - else polygon[i] = -vertices[i].idx-1; - return addPolygon_s( polygon ); -} -template< class Vertex > -int CoredFileMeshData< Vertex >::nextOutOfCorePoint( Vertex& p ) -{ - if( oocPointFile->read( &p , sizeof( Vertex ) ) ) return 1; - else return 0; -} -template< class Vertex > -int CoredFileMeshData< Vertex >::nextPolygon( std::vector< CoredVertexIndex >& vertices ) -{ - int pSize; - if( polygonFile->read( &pSize , sizeof(int) ) ) - { - std::vector< int > polygon( pSize ); - if( polygonFile->read( &polygon[0] , sizeof(int)*pSize ) ) - { - vertices.resize( pSize ); - for( int i=0 ; i -int CoredFileMeshData< Vertex >::outOfCorePointCount( void ){ return oocPoints; } -template< class Vertex > -int CoredFileMeshData< Vertex >::polygonCount( void ) { return polygons; } diff --git a/src/other/libspsr/LICENSE b/src/libbg/spsr/LICENSE similarity index 100% rename from src/other/libspsr/LICENSE rename to src/libbg/spsr/LICENSE diff --git a/src/other/libspsr/Src/MAT.h b/src/libbg/spsr/MAT.h similarity index 100% rename from src/other/libspsr/Src/MAT.h rename to src/libbg/spsr/MAT.h diff --git a/src/other/libspsr/Src/MAT.inl b/src/libbg/spsr/MAT.inl similarity index 99% rename from src/other/libspsr/Src/MAT.inl rename to src/libbg/spsr/MAT.inl index 2adaccac501..ac6ce75c3b2 100644 --- a/src/other/libspsr/Src/MAT.inl +++ b/src/libbg/spsr/MAT.inl @@ -142,7 +142,7 @@ void MinimalAreaTriangulation::GetTriangulation(const size_t& i,const size if(j+1>=ii) return; ii=midPoint[i*eCount+j]; - if(ii>=0) + if((int)ii>=0) { tIndex.idx[0] = int( i ); tIndex.idx[1] = int( j ); diff --git a/src/other/libspsr/Src/MarchingCubes.cpp b/src/libbg/spsr/MarchingCubes.cpp similarity index 98% rename from src/other/libspsr/Src/MarchingCubes.cpp rename to src/libbg/spsr/MarchingCubes.cpp index e426ebae0df..13f07108ca1 100644 --- a/src/other/libspsr/Src/MarchingCubes.cpp +++ b/src/libbg/spsr/MarchingCubes.cpp @@ -26,6 +26,25 @@ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF S DAMAGE. */ #include + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic ignored "-Wfloat-equal" +# if (__GNUC__ >= 7) +# pragma GCC diagnostic ignored "-Wimplicit-fallthrough" +# endif +#endif +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wfloat-equal" +# pragma clang diagnostic ignored "-Wimplicit-fallthrough" +# pragma clang diagnostic ignored "-Wconstant-logical-operand" +#endif + #include "MarchingCubes.h" //////////// @@ -64,7 +83,8 @@ void Square::FactorEdgeIndex(int idx,int& orientation,int& i){ }; } void Square::EdgeCorners(int idx,int& c1,int& c2){ - int orientation,i; + int orientation = 0; + int i = 0; FactorEdgeIndex(idx,orientation,i); switch(orientation){ case 0: @@ -303,7 +323,7 @@ int Cube::EdgeReflectEdgeIndex( int edgeIndex ) // MarchingSquares // ///////////////////// #if NEW_ORDERING -#pragma message ( "[WARNING] Not clear if MarchingSquares::edgeMask and MarchingSquares::edges are set correctly" ) +//#pragma message ( "[WARNING] Not clear if MarchingSquares::edgeMask and MarchingSquares::edges are set correctly" ) const int MarchingSquares::cornerMap[] = { 0 , 1 , 3 , 2 }; bool MarchingSquares::HasEdgeRoots( unsigned char mcIndex , int edgeIndex ) { @@ -927,7 +947,7 @@ unsigned char MarchingCubes::GetFaceIndex( unsigned char mcIndex , int faceIndex { int i,j,x,y,z; unsigned char idx=0; - int v[2][2]; + int v[2][2] = {{0,0},{0,0}}; Cube::FactorFaceIndex(faceIndex,x,y,z); if (x<0){for(i=0;i<2;i++){for(j=0;j<2;j++){v[i][j]=mcIndex&(1<0){for(i=0;i<2;i++){for(j=0;j<2;j++){v[i][j]=mcIndex&(1<::GetMCIsoSurface( ConstPointer( Real ) kernelDensityWeights int maxDepth = tree.maxDepth(); std::vector< Real > coarseSolution( _sNodes.nodeCount[maxDepth] , 0 ); -#pragma omp parallel for num_threads( threads ) for( int i=_sNodes.nodeCount[_minDepth] ; i<_sNodes.nodeCount[maxDepth] ; i++ ) coarseSolution[i] = solution[i]; for( int d=_minDepth ; d::GetMCIsoSurface( ConstPointer( Real ) kernelDensityWeights if( o&1 ) break; } } - MemoryUsage(); } template< class Real > @@ -241,14 +236,12 @@ Real Octree< Real >::GetIsoValue( ConstPointer( Real ) solution , const std::vec } std::vector< Real > metSolution( _sNodes.nodeCount[maxDepth] , 0 ); std::vector< Real > centerValues( _sNodes.nodeCount[maxDepth+1] ); -#pragma omp parallel for num_threads( threads ) for( int i=_sNodes.nodeCount[_minDepth] ; i<_sNodes.nodeCount[maxDepth] ; i++ ) metSolution[i] = solution[i]; for( int d=_minDepth ; d=_minDepth ; d-- ) { std::vector< typename TreeOctNode::ConstNeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetSliceIsoCorners( ConstPointer( Real ) solution , ConstPo typename Octree< Real >::template SliceValues< Vertex >& sValues = slabValues[depth].sliceValues( slice ); std::vector< typename TreeOctNode::ConstNeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetSliceIsoVertices( ConstPointer( Real ) kernelDensityWeig typename Octree< Real >::template SliceValues< Vertex >& sValues = slabValues[depth].sliceValues( slice ); std::vector< typename TreeOctNode::ConstNeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetSliceIsoVertices( ConstPointer( Real ) kernelDensityWeig vertex.point = vertex.point * _scale + _center; bool stillOwner = false; std::pair< int , Vertex > hashed_vertex; -#pragma omp critical (add_point_access) { if( !sValues.edgeSet[vIndex] ) { @@ -406,7 +396,7 @@ void Octree< Real >::SetSliceIsoVertices( ConstPointer( Real ) kernelDensityWeig if( stillOwner ) { // We only need to pass the iso-vertex down if the edge it lies on is adjacent to a coarser leaf - bool isNeeded; + bool isNeeded = false; switch( o ) { case 0: isNeeded = ( neighborKey.neighbors[depth].neighbors[1][2*y][1]==NULL || neighborKey.neighbors[depth].neighbors[1][2*y][2*z]==NULL || neighborKey.neighbors[depth].neighbors[1][1][2*z]==NULL ) ; break; @@ -425,7 +415,6 @@ void Octree< Real >::SetSliceIsoVertices( ConstPointer( Real ) kernelDensityWeig { node = node->parent , _depth-- , _slice >>= 1; typename Octree< Real >::template SliceValues< Vertex >& _sValues = slabValues[_depth].sliceValues( _slice ); -#pragma omp critical (add_coarser_point_access) _sValues.edgeVertexMap[key] = hashed_vertex; switch( o ) { @@ -452,7 +441,6 @@ void Octree< Real >::SetXSliceIsoVertices( ConstPointer( Real ) kernelDensityWei std::vector< typename TreeOctNode::ConstNeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetXSliceIsoVertices( ConstPointer( Real ) kernelDensityWei vertex.point = vertex.point * _scale + _center; bool stillOwner = false; std::pair< int , Vertex > hashed_vertex; -#pragma omp critical (add_x_point_access) { if( !xValues.edgeSet[vIndex] ) { @@ -508,7 +495,6 @@ void Octree< Real >::SetXSliceIsoVertices( ConstPointer( Real ) kernelDensityWei { node = node->parent , _depth-- , _slab >>= 1; typename Octree< Real >::template XSliceValues< Vertex >& _xValues = slabValues[_depth].xSliceValues( _slab ); -#pragma omp critical (add_x_coarser_point_access) _xValues.edgeVertexMap[key] = hashed_vertex; _isNeeded = ( neighborKey.neighbors[_depth].neighbors[2*x][1][1]==NULL || neighborKey.neighbors[_depth].neighbors[2*x][2*y][1]==NULL || neighborKey.neighbors[_depth].neighbors[1][2*y][1]==NULL ); } @@ -537,7 +523,6 @@ void Octree< Real >::CopyFinerSliceIsoEdgeKeys( int depth , int slice , int z , SliceValues< Vertex >& cSliceValues = slabValues[depth+1].sliceValues(slice<<1); typename SortedTreeNodes::SliceTableData& pSliceData = pSliceValues.sliceData; typename SortedTreeNodes::SliceTableData& cSliceData = cSliceValues.sliceData; -#pragma omp parallel for num_threads( threads ) for( int i=_sNodes.nodeCount[depth] + _sNodes.sliceOffsets[depth][slice-z] ; i<_sNodes.nodeCount[depth] + _sNodes.sliceOffsets[depth][slice-z+1] ; i++ ) if( _sNodes.treeNodes[i]->children ) { @@ -564,7 +549,6 @@ void Octree< Real >::CopyFinerSliceIsoEdgeKeys( int depth , int slice , int z , if( cSliceValues.edgeSet[cIndex1] ) key = cSliceValues.edgeKeys[cIndex1]; else key = cSliceValues.edgeKeys[cIndex2]; std::pair< int , Vertex > vPair = cSliceValues.edgeVertexMap.find( key )->second; -#pragma omp critical ( copy_finer_edge_keys ) pSliceValues.edgeVertexMap[key] = vPair; pSliceValues.edgeKeys[pIndex] = key; pSliceValues.edgeSet[pIndex] = 1; @@ -572,7 +556,6 @@ void Octree< Real >::CopyFinerSliceIsoEdgeKeys( int depth , int slice , int z , else if( cSliceValues.edgeSet[cIndex1] && cSliceValues.edgeSet[cIndex2] ) { long long key1 = cSliceValues.edgeKeys[cIndex1] , key2 = cSliceValues.edgeKeys[cIndex2]; -#pragma omp critical ( set_edge_pairs ) pSliceValues.vertexPairMap[ key1 ] = key2 , pSliceValues.vertexPairMap[ key2 ] = key1; const TreeOctNode* node = _sNodes.treeNodes[i]; @@ -581,7 +564,6 @@ void Octree< Real >::CopyFinerSliceIsoEdgeKeys( int depth , int slice , int z , { node = node->parent , _depth-- , _slice >>= 1; SliceValues< Vertex >& _pSliceValues = slabValues[_depth].sliceValues(_slice); -#pragma omp critical ( set_edge_pairs ) _pSliceValues.vertexPairMap[ key1 ] = key2 , _pSliceValues.vertexPairMap[ key2 ] = key1; } } @@ -599,7 +581,6 @@ void Octree< Real >::CopyFinerXSliceIsoEdgeKeys( int depth , int slab , std::vec typename SortedTreeNodes::XSliceTableData& pSliceData = pSliceValues.xSliceData; typename SortedTreeNodes::XSliceTableData& cSliceData0 = cSliceValues0.xSliceData; typename SortedTreeNodes::XSliceTableData& cSliceData1 = cSliceValues1.xSliceData; -#pragma omp parallel for num_threads( threads ) for( int i=_sNodes.nodeCount[depth] + _sNodes.sliceOffsets[depth][slab] ; i<_sNodes.nodeCount[depth] + _sNodes.sliceOffsets[depth][slab+1] ; i++ ) if( _sNodes.treeNodes[i]->children ) { @@ -619,7 +600,6 @@ void Octree< Real >::CopyFinerXSliceIsoEdgeKeys( int depth , int slab , std::vec std::pair< int , Vertex > vPair; if( cSliceValues0.edgeSet[cIndex0] ) key = cSliceValues0.edgeKeys[cIndex0] , vPair = cSliceValues0.edgeVertexMap.find( key )->second; else key = cSliceValues1.edgeKeys[cIndex1] , vPair = cSliceValues1.edgeVertexMap.find( key )->second; -#pragma omp critical ( copy_finer_x_edge_keys ) pSliceValues.edgeVertexMap[key] = vPair; pSliceValues.edgeKeys[ pIndex ] = key; pSliceValues.edgeSet[ pIndex ] = 1; @@ -627,7 +607,6 @@ void Octree< Real >::CopyFinerXSliceIsoEdgeKeys( int depth , int slab , std::vec else if( cSliceValues0.edgeSet[cIndex0] && cSliceValues1.edgeSet[cIndex1] ) { long long key0 = cSliceValues0.edgeKeys[cIndex0] , key1 = cSliceValues1.edgeKeys[cIndex1]; -#pragma omp critical ( set_x_edge_pairs ) pSliceValues.vertexPairMap[ key0 ] = key1 , pSliceValues.vertexPairMap[ key1 ] = key0; const TreeOctNode* node = _sNodes.treeNodes[i]; int _depth = depth , _slab = slab , ce = Cube::CornerIndex( 2 , x , y ); @@ -635,7 +614,6 @@ void Octree< Real >::CopyFinerXSliceIsoEdgeKeys( int depth , int slab , std::vec { node = node->parent , _depth-- , _slab>>= 1; SliceValues< Vertex >& _pSliceValues = slabValues[_depth].sliceValues(_slab); -#pragma omp critical ( set_x_edge_pairs ) _pSliceValues.vertexPairMap[ key0 ] = key1 , _pSliceValues.vertexPairMap[ key1 ] = key0; } } @@ -657,7 +635,6 @@ void Octree< Real >::SetSliceIsoEdges( int depth , int slice , int z , std::vect typename Octree< Real >::template SliceValues< Vertex >& sValues = slabValues[depth].sliceValues( slice ); std::vector< typename TreeOctNode::ConstNeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetSliceIsoEdges( int depth , int slice , int z , std::vect node = node->parent , _depth-- , _slice >>= 1; if( neighborKey.neighbors[_depth].neighbors[1][1][2*z] && neighborKey.neighbors[_depth].neighbors[1][1][2*z]->children ) break; long long key = VertexData::FaceIndex( node , f , _sNodes.maxDepth ); -#pragma omp critical( add_iso_edge_access ) { typename Octree< Real >::template SliceValues< Vertex >& _sValues = slabValues[_depth].sliceValues( _slice ); typename hash_map< long long , std::vector< IsoEdge > >::iterator iter = _sValues.faceEdgeMap.find(key); @@ -717,7 +693,6 @@ void Octree< Real >::SetXSliceIsoEdges( int depth , int slab , std::vector< Slab std::vector< typename TreeOctNode::ConstNeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetXSliceIsoEdges( int depth , int slab , std::vector< Slab fe.count = MarchingSquares::AddEdgeIndices( _mcIndex , isoEdges ); for( int j=0 ; j::SetXSliceIsoEdges( int depth , int slab , std::vector< Slab node = node->parent , _depth-- , _slab >>= 1; if( neighborKey.neighbors[_depth].neighbors[xx][yy][zz] && neighborKey.neighbors[_depth].neighbors[xx][yy][zz]->children ) break; long long key = VertexData::FaceIndex( node , f , _sNodes.maxDepth ); -#pragma omp critical( add_x_iso_edge_access ) { typename Octree< Real >::template XSliceValues< Vertex >& _xValues = slabValues[_depth].xSliceValues( _slab ); typename hash_map< long long , std::vector< IsoEdge > >::iterator iter = _xValues.faceEdgeMap.find(key); @@ -793,7 +768,6 @@ int Octree< Real >::SetIsoSurface( int depth , int offset , const SliceValues< V std::vector< typename TreeOctNode::ConstNeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); std::vector< std::vector< IsoEdge > > edgess( std::max< int >( 1 , threads ) ); for( int i=0 ; i::GetIsoVertex( ConstPointer( Real ) kernelDensityWeights , R x0 = sValues.cornerValues[idx[c0]] , x1 = sValues.cornerValues[idx[c1]]; if( sValues.cornerNormals ) n0 = sValues.cornerNormals[idx[c0]] , n1 = sValues.cornerNormals[idx[c1]]; - int o , y; + int o = 0; + int y = 0; Square::FactorEdgeIndex( edgeIndex , o , y ); Point3D< Real > c; @@ -1081,7 +1056,6 @@ int Octree< Real >::AddIsoPolygons( CoredMeshData< Vertex >& mesh , std::vector< for( int i=0 ; i<(int)polygon.size() ; i++ ) c += polygon[i].second; c /= Real( polygon.size() ); int cIdx; -#pragma omp critical (add_barycenter_point_access) { cIdx = mesh.addOutOfCorePoint( c ); vOffset++; diff --git a/src/other/libspsr/Src/MultiGridOctreeData.SortedTreeNodes.inl b/src/libbg/spsr/MultiGridOctreeData.SortedTreeNodes.inl similarity index 98% rename from src/other/libspsr/Src/MultiGridOctreeData.SortedTreeNodes.inl rename to src/libbg/spsr/MultiGridOctreeData.SortedTreeNodes.inl index 14ee5b522f1..c63773f4fb2 100644 --- a/src/other/libspsr/Src/MultiGridOctreeData.SortedTreeNodes.inl +++ b/src/libbg/spsr/MultiGridOctreeData.SortedTreeNodes.inl @@ -152,7 +152,6 @@ void SortedTreeNodes::setSliceTableData( SliceTableData& sData , int depth , int sData.cTable.resize( sData.nodeCount ) , sData.eTable.resize( sData.nodeCount ) , sData.fTable.resize( sData.nodeCount ); std::vector< TreeOctNode::ConstNeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i +#define hash_map unordered_map +using std::unordered_map; + #define NEW_CODE 1 //#define MAX_MEMORY_GB 15 @@ -76,7 +80,6 @@ DAMAGE. #pragma message( "[WARNING] Not zeroing out normal component on boundary" ) #endif // !FORCE_NEUMANN_FIELD -#include "Hash.h" #include "BSplineData.h" #include "PointStream.h" @@ -414,10 +417,8 @@ class Octree void refineBoundary( std::vector< int >* map ); public: int threads; - static double maxMemoryUsage; TreeOctNode tree; - static double MemoryUsage( void ); Octree( void ); void MakeComplete( std::vector< int >* map=NULL ); @@ -442,7 +443,6 @@ template< class Real > void Reset( void ) { TreeNodeData::NodeCount=0; - Octree< Real >::maxMemoryUsage = 0; } #include "MultiGridOctreeData.inl" diff --git a/src/other/libspsr/Src/MultiGridOctreeData.inl b/src/libbg/spsr/MultiGridOctreeData.inl similarity index 97% rename from src/other/libspsr/Src/MultiGridOctreeData.inl rename to src/libbg/spsr/MultiGridOctreeData.inl index 61332e62397..719b03c2bc3 100644 --- a/src/other/libspsr/Src/MultiGridOctreeData.inl +++ b/src/libbg/spsr/MultiGridOctreeData.inl @@ -27,8 +27,6 @@ DAMAGE. */ #include "Octree.h" -#include "MyTime.h" -#include "MemoryUsage.h" #include "PointStream.h" #include "MAT.h" @@ -53,15 +51,6 @@ TreeNodeData::~TreeNodeData( void ) { } //////////// // Octree // //////////// -template< class Real > double Octree< Real >::maxMemoryUsage=0; - -template< class Real > -double Octree< Real >::MemoryUsage(void) -{ - double mem = double( MemoryInfo::Usage() ) / (1<<20); - if( mem>maxMemoryUsage ) maxMemoryUsage=mem; - return mem; -} template< class Real > Octree< Real >::Octree( void ) @@ -449,7 +438,6 @@ int Octree< Real >::SetTree( PointStream< PointReal >* pointStream , int minDept // Read through once to get the center and scale { - double t = Time(); Point3D< Real > p; Point3D< PointReal > _p , _n; while( pointStream->nextPoint( _p , _n ) ) @@ -472,7 +460,6 @@ int Octree< Real >::SetTree( PointStream< PointReal >* pointStream , int minDept for( i=0 ; i0 ) { - double t = Time(); cnt = 0; pointStream->reset(); Point3D< Real > p , n; @@ -612,7 +599,6 @@ int Octree< Real >::SetTree( PointStream< PointReal >* pointStream , int minDept constraintWeight *= Real( pointWeightSum ); constraintWeight /= cnt; - MemoryUsage( ); if( _constrainValues ) // Set the average position and scale the weights for( TreeOctNode* node=tree.nextNode() ; node ; node=tree.nextNode(node) ) @@ -647,7 +633,6 @@ int Octree< Real >::SetTree( PointStream< PointReal >* pointStream , int minDept if( idx<0 ) centerWeights[ node->nodeData.nodeIndex ] = 0; else centerWeights[ node->nodeData.nodeIndex ] = Real( Length( normalInfo.normals[ idx ] ) ); } - MemoryUsage(); { std::vector< int > indexMap; if( makeComplete ) MakeComplete( &indexMap ); @@ -689,7 +674,6 @@ void Octree< Real >::MakeComplete( std::vector< int >* map ) { tree.setFullDepth( tree.maxDepth() ); refineBoundary( map ); - MemoryUsage(); } template< class Real > void Octree< Real >::ClipTree( const NormalInfo& normalInfo ) @@ -702,7 +686,6 @@ void Octree< Real >::ClipTree( const NormalInfo& normalInfo ) for( int i=0 ; ichildren[i] , normalInfo ); if( !hasNormals ) temp->children=NULL; } - MemoryUsage(); } template< class Real > @@ -1186,7 +1169,6 @@ void Octree< Real >::UpdateConstraintsFromFiner( const typename BSplineData< 2 > // Iterate over the nodes @( depth ) std::vector< typename TreeOctNode::NeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::UpdateConstraintsFromFiner( const typename BSplineData< 2 > { const TreeOctNode* _node = pNeighbors5.neighbors[x][y][z]; if( isInterior ) -#pragma omp atomic __coarseConstraints[ _node->nodeData.nodeIndex ] += Real( lapStencil.values[x][y][z] * solution ); else { int _d , _off[3]; _node->depthAndOffset( _d , _off ); -#pragma omp atomic __coarseConstraints[ _node->nodeData.nodeIndex ] += Real( GetLaplacian( integrator , d , off , _off , true ) * solution ); } } @@ -1309,7 +1289,6 @@ void Octree< Real >::DownSample( int depth , const SortedTreeNodes& sNodes , Con else cornerValue = 0.75; std::vector< typename TreeOctNode::NeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::DownSample( int depth , const SortedTreeNodes& sNodes , Con int _kk = kk + usData[2].start; TreeOctNode* pNode = neighbors.neighbors[_ii][_jj][_kk]; if( pNode ) -#pragma omp atomic coarseConstraints[ pNode->nodeData.nodeIndex-sNodes.nodeCount[depth-1] ] += C( cxy*usData[2].v[kk] ); } } @@ -1357,7 +1335,6 @@ void Octree< Real >::UpSample( int depth , const SortedTreeNodes& sNodes , Const std::vector< typename TreeOctNode::NeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetPointValuesFromCoarser( PointInfo& pointInfo , int depth // For every node at the current depth std::vector< typename TreeOctNode::NeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetPointConstraintsFromFiner( const PointInfo& pointInfo , memset( coarserConstraints , 0 , sizeof( Real ) * ( sNodes.nodeCount[depth]-sNodes.nodeCount[depth-1] ) ); std::vector< typename TreeOctNode::NeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetPointConstraintsFromFiner( const PointInfo& pointInfo , for( int x=0 ; x<3 ; x++ ) for( int y=0 ; y<3 ; y++ ) for( int z=0 ; z<3 ; z++ ) if( neighbors.neighbors[x][y][z] ) { -#pragma omp atomic coarserConstraints[ neighbors.neighbors[x][y][z]->nodeData.nodeIndex - sNodes.nodeCount[depth-1] ] += Real( _fData.baseBSplines[idx[0]+x][2-x]( p[0] ) * @@ -1574,7 +1548,6 @@ int Octree< Real >::GetSliceMatrixAndUpdateConstraints( const PointInfo& pointIn matrix.Resize( (int)range ); std::vector< typename TreeOctNode::NeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::GetSliceMatrixAndUpdateConstraints( const PointInfo& pointIn int count = insetSupported ? GetMatrixRowSize( neighbors5 , false ) : 1; // Allocate memory for the row -#pragma omp critical (matrix_set_row_size) { matrix.SetRowSize( i , count ); } @@ -1629,7 +1601,6 @@ int Octree< Real >::GetMatrixAndUpdateConstraints( const PointInfo& pointInfo , matrix.Resize( (int)range ); std::vector< typename TreeOctNode::NeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::GetMatrixAndUpdateConstraints( const PointInfo& pointInfo , int count = insetSupported ? GetMatrixRowSize( neighbors5 , true ) : 1; // Allocate memory for the row -#pragma omp critical (matrix_set_row_size) matrix.SetRowSize( i , count ); // Set the row entries @@ -1689,7 +1659,6 @@ Pointer( Real ) Octree< Real >::SolveSystem( PointInfo& pointInfo , Pointer( Rea std::vector< Real > metSolution( _sNodes.nodeCount[ _sNodes.maxDepth-1 ] , 0 ); for( int d=_minDepth ; d<_sNodes.maxDepth ; d++ ) { - DumpOutput( "Depth[%d/%d]: %d\n" , _boundaryType==0 ? d-1 : d , _boundaryType==0 ? _sNodes.maxDepth-2 : _sNodes.maxDepth-1 , _sNodes.nodeCount[d+1]-_sNodes.nodeCount[d] ); if( d==_minDepth ) _SolveSystemCG( pointInfo , d , integrator , _sNodes , solution , constraints , GetPointer( metSolution ) , _sNodes.nodeCount[_minDepth+1]-_sNodes.nodeCount[_minDepth] , true , showResidual, NULL , NULL , NULL ); else @@ -1708,13 +1677,11 @@ void Octree< Real >::_setMultiColorIndices( int start , int end , std::vector< s indices.resize( modulus*modulus*modulus ); int count[modulus*modulus*modulus]; memset( count , 0 , sizeof(int)*modulus*modulus*modulus ); -#pragma omp parallel for num_threads( threads ) for( int i=start ; idepthAndOffset( d , off ); int idx = (modulus*modulus) * ( off[2]%modulus ) + modulus * ( off[1]%modulus ) + ( off[0]%modulus ); -#pragma omp atomic count[idx]++; } @@ -1736,11 +1703,8 @@ int Octree< Real >::_SolveSystemGS( PointInfo& pointInfo , int depth , const typ if( coarseToFine ) metSolution = metSolutionConstraints; // This stores the up-sampled solution up to depth-2 else metConstraints = metSolutionConstraints; // This stores the down-sampled constraints up to depth - double _maxMemoryUsage = maxMemoryUsage; - maxMemoryUsage = 0; Vector< Real > X , B; int slices = 1< offsets( slices+1 , 0 ); for( int i=sNodes.nodeCount[depth] ; i::_SolveSystemGS( PointInfo& pointInfo , int depth , const typ // Up-sample the cumulative change in solution @(depth-2) into the cumulative change in solution @(depth-1) if( depth-2>=_minDepth ) UpSample( depth-1 , sNodes , ( ConstPointer( Real ) )metSolution+_sNodes.nodeCount[depth-2] , metSolution+_sNodes.nodeCount[depth-1] ); // Add in the change in solution @(depth-1) -#pragma omp parallel for num_threads( threads ) for( int i=_sNodes.nodeCount[depth-1] ; i<_sNodes.nodeCount[depth] ; i++ ) metSolution[i] += solution[i]; // Evaluate the points @(depth) using the cumulative change in solution @(depth-1) if( _constrainValues ) { - evaluateTime = Time(); SetPointValuesFromCoarser( pointInfo , depth , sNodes , metSolution+_sNodes.nodeCount[depth-1] ); - evaluateTime = Time() - evaluateTime; } } } else if( depth<_sNodes.maxDepth-1 ) for( int i=_sNodes.nodeCount[depth] ; i<_sNodes.nodeCount[depth+1] ; i++ ) constraints[i] -= metConstraints[i]; // Initialize with the previously computed solution -#pragma omp parallel for num_threads( threads ) for( int i=_sNodes.nodeCount[depth] ; i<_sNodes.nodeCount[depth+1] ; i++ ) X[ i-_sNodes.nodeCount[depth] ] = solution[i]; double bNorm=0 , inRNorm=0 , outRNorm=0; if( depth>=_minDepth ) @@ -1793,9 +1753,7 @@ int Octree< Real >::_SolveSystemGS( PointInfo& pointInfo , int depth , const typ if( frontSlice+frontOffset*dir>=0 && frontSlice+frontOffset*dir::_SolveSystemGS( PointInfo& pointInfo , int depth , const typ else B[i] = Real(0); } if( showResidual || inRNorm2 ) -#pragma omp parallel for num_threads( threads ) reduction( + : bNorm , inRNorm ) for( int j=0 ; j<_M[_s].rows ; j++ ) { Real temp = Real(0); @@ -1816,14 +1773,12 @@ int Octree< Real >::_SolveSystemGS( PointInfo& pointInfo , int depth , const typ inRNorm += (temp-b) * (temp-b); } else if( bNorm2 ) -#pragma omp parallel for num_threads( threads ) reduction( + : bNorm ) for( int j=0 ; j<_M[_s].rows ; j++ ) { Real b = B[ j + offsets[s] ] ; bNorm += b*b; } } - t = Time(); if( iters && frontSlice>=0 && frontSlice::_SolveSystemGS( PointInfo& pointInfo , int depth , const typ int s = slice , _s = s % matrixSlices , __s = s % solveSlices; SparseMatrix< Real >::SolveGS( __mcIndices[__s] , _M[_s] , B , X , !coarseToFine , threads , offsets[s] ); } - solveTime += Time() - t; if( (showResidual || outRNorm2) && backSlice-backOffset*dir>=0 && backSlice-backOffset*dir::_SolveSystemGS( PointInfo& pointInfo , int depth , const typ } // Copy the old solution into the buffer, write in the new solution, compute the change, and update the met constraints -#pragma omp parallel for num_threads( threads ) for( int i=sNodes.nodeCount[depth] ; i_minDepth ) { @@ -1878,10 +1830,6 @@ int Octree< Real >::_SolveSystemGS( PointInfo& pointInfo , int depth , const typ } } - MemoryUsage(); - if( !forceSilent ) DumpOutput( "\tEvaluated / Got / Solved in: %6.3f / %6.3f / %6.3f\t(%.3f MB)\n" , evaluateTime , systemTime , solveTime , float( maxMemoryUsage ) ); - maxMemoryUsage = std::max< double >( maxMemoryUsage , _maxMemoryUsage ); - return iters; } template< class Real > @@ -1891,12 +1839,9 @@ int Octree< Real >::_SolveSystemCG( PointInfo& pointInfo , int depth , const typ Pointer( Real ) metConstraints = NullPointer< Real >(); if( coarseToFine ) metSolution = metSolutionConstraints; // This stores the up-sampled solution up to depth-2 else metConstraints = metSolutionConstraints; // This stores the down-sampled constraints up to depth - double _maxMemoryUsage = maxMemoryUsage; - maxMemoryUsage = 0; int iter = 0; Vector< Real > X , B; SparseSymmetricMatrix< Real > M; - double systemTime=0. , solveTime=0. , updateTime=0. , evaluateTime = 0.; X.Resize( sNodes.nodeCount[depth+1]-sNodes.nodeCount[depth] ); if( coarseToFine ) { @@ -1905,23 +1850,18 @@ int Octree< Real >::_SolveSystemCG( PointInfo& pointInfo , int depth , const typ // Up-sample the cumulative change in solution @(depth-2) into the cumulative change in solution @(depth-1) if( depth-2>=_minDepth ) UpSample( depth-1 , sNodes , ( ConstPointer( Real ) )metSolution+_sNodes.nodeCount[depth-2] , metSolution+_sNodes.nodeCount[depth-1] ); // Add in the change in solution @(depth-1) -#pragma omp parallel for num_threads( threads ) for( int i=_sNodes.nodeCount[depth-1] ; i<_sNodes.nodeCount[depth] ; i++ ) metSolution[i] += solution[i]; // Evaluate the points @(depth) using the cumulative change in solution @(depth-1) if( _constrainValues ) { - evaluateTime = Time(); SetPointValuesFromCoarser( pointInfo , depth , sNodes , metSolution+_sNodes.nodeCount[depth-1] ); - evaluateTime = Time() - evaluateTime; } } } else if( depth<_sNodes.maxDepth-1 ) for( int i=_sNodes.nodeCount[depth] ; i<_sNodes.nodeCount[depth+1] ; i++ ) constraints[i] -= metConstraints[i]; // Initialize with the previously computed solution -#pragma omp parallel for num_threads( threads ) for( int i=_sNodes.nodeCount[depth] ; i<_sNodes.nodeCount[depth+1] ; i++ ) X[ i-_sNodes.nodeCount[depth] ] = solution[i]; - systemTime = Time(); { // Get the system matrix (and adjust the right-hand-side based on the coarser solution if prolonging) if( coarseToFine ) GetMatrixAndUpdateConstraints( pointInfo , M , constraints , integrator , depth , sNodes , metSolution , true ); @@ -1932,9 +1872,7 @@ int Octree< Real >::_SolveSystemCG( PointInfo& pointInfo , int depth , const typ if( _boundaryType!=0 || _IsInsetSupported( sNodes.treeNodes[i] ) ) B[i-sNodes.nodeCount[depth]] = constraints[i]; else B[i-sNodes.nodeCount[depth]] = Real(0); } - systemTime = Time()-systemTime; - solveTime = Time(); // Solve the linear system accuracy = Real( accuracy / 100000 ) * M.rows; int res = 1<::_SolveSystemCG( PointInfo& pointInfo , int depth , const typ if( _boundaryType==0 && depth>3 ) res -= 1<<(depth-2); if( iters ) iter += SparseSymmetricMatrix< Real >::SolveCG( M , B , iters , X , mrVector , Real( accuracy ) , 0 , addDCTerm ); - solveTime = Time()-solveTime; if( showResidual || outRNorm2 ) outRNorm = ( addDCTerm ? ( B - M * X - X.Average() ) : ( B - M * X ) ).Norm( 2 ); if( bNorm2 ) bNorm2[depth] = bNorm * bNorm; if( inRNorm2 ) inRNorm2[depth] = inRNorm * inRNorm; @@ -1961,7 +1898,6 @@ int Octree< Real >::_SolveSystemCG( PointInfo& pointInfo , int depth , const typ // Copy the old solution into the buffer, write in the new solution, compute the change, and update the met solution { -#pragma omp parallel for num_threads( threads ) for( int i=sNodes.nodeCount[depth] ; i_minDepth ) { @@ -1975,9 +1911,6 @@ int Octree< Real >::_SolveSystemCG( PointInfo& pointInfo , int depth , const typ } } - MemoryUsage(); - DumpOutput( "\tEvaluated / Got / Solved in: %6.3f / %6.3f / %6.3f\t(%.3f MB)\n" , evaluateTime , systemTime , solveTime , float( maxMemoryUsage ) ); - maxMemoryUsage = std::max< double >( maxMemoryUsage , _maxMemoryUsage ); return iter; } template< class Real > @@ -2011,7 +1944,6 @@ Pointer( Real ) Octree< Real >::SetLaplacianConstraints( const NormalInfo& norma Pointer( Real ) _constraints = AllocPointer< Real >( _sNodes.nodeCount[maxDepth] ); if( !_constraints ) fprintf( stderr , "[ERROR] Failed to allocate _constraints: %d * %zu\n" , _sNodes.nodeCount[maxDepth] , sizeof( Real ) ) , exit( 0 ); memset( _constraints , 0 , sizeof(Real)*_sNodes.nodeCount[maxDepth] ); - MemoryUsage(); for( int d=maxDepth ; d>=(_boundaryType==0?2:0) ; d-- ) { @@ -2022,7 +1954,6 @@ Pointer( Real ) Octree< Real >::SetLaplacianConstraints( const NormalInfo& norma std::vector< typename TreeOctNode::NeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetLaplacianConstraints( const NormalInfo& norma // Gather the constraints from the vector-field at _node into the constraint stored with node { - if( isInterior ) + if( isInterior ) { for( int x=startX ; x::SetLaplacianConstraints( const NormalInfo& norma if( _idx>=0 ) constraints[ node->nodeData.nodeIndex ] += Point3D< Real >::Dot( stencil.values[x][y][z] , normalInfo.normals[ _idx ] ); } } - else + } else { for( int x=startX ; x::SetLaplacianConstraints( const NormalInfo& norma } } } + } UpdateCoarserSupportBounds( neighbors5.neighbors[2][2][2] , startX , endX , startY , endY , startZ , endZ ); } int idx = normalInfo.normalIndex( node ); @@ -2109,19 +2041,16 @@ Pointer( Real ) Octree< Real >::SetLaplacianConstraints( const NormalInfo& norma _node->depthAndOffset( _d , _off ); c = Real( GetDivergence1( integrator , d , off , _off , true , normal ) ); } -#pragma omp atomic _constraints[ _node->nodeData.nodeIndex ] += c; } } } - MemoryUsage(); } // Fine-to-coarse down-sampling of constraints for( int d=maxDepth-1 ; d>=(_boundaryType==0?2:0) ; d-- ) DownSample( d , _sNodes , ( ConstPointer( Real ) )_constraints + _sNodes.nodeCount[d] , _constraints+_sNodes.nodeCount[d-1] ); // Add the accumulated constraints from all finer depths -#pragma omp parallel for num_threads( threads ) for( int i=0 ; i<_sNodes.nodeCount[maxDepth] ; i++ ) constraints[i] += _constraints[i]; FreePointer( _constraints ); @@ -2130,7 +2059,6 @@ Pointer( Real ) Octree< Real >::SetLaplacianConstraints( const NormalInfo& norma std::vector< Point3D< Real > > coefficients( _sNodes.nodeCount[maxDepth] , zeroPoint ); for( int d=maxDepth-1 ; d>=0 ; d-- ) { -#pragma omp parallel for num_threads( threads ) for( int i=_sNodes.nodeCount[d] ; i<_sNodes.nodeCount[d+1] ; i++ ) { int idx = normalInfo.normalIndex( _sNodes.treeNodes[i] ); @@ -2150,7 +2078,6 @@ Pointer( Real ) Octree< Real >::SetLaplacianConstraints( const NormalInfo& norma SetDivergenceStencils( d , integrator , stencils , false ); std::vector< typename TreeOctNode::NeighborKey3 > neighborKeys( std::max< int >( 1 , threads ) ); for( int i=0 ; i::SetLaplacianConstraints( const NormalInfo& norma constraints[ node->nodeData.nodeIndex ] += constraint; } } - MemoryUsage(); return constraints; } template< class Real > diff --git a/src/other/libspsr/Src/Octree.h b/src/libbg/spsr/Octree.h similarity index 100% rename from src/other/libspsr/Src/Octree.h rename to src/libbg/spsr/Octree.h diff --git a/src/other/libspsr/Src/Octree.inl b/src/libbg/spsr/Octree.inl similarity index 98% rename from src/other/libspsr/Src/Octree.inl rename to src/libbg/spsr/Octree.inl index 41dafe6c0c2..715fde8b15c 100644 --- a/src/other/libspsr/Src/Octree.inl +++ b/src/libbg/spsr/Octree.inl @@ -188,7 +188,8 @@ template< class NodeData > int OctNode< NodeData >::maxDepth(void) const{ if(!children){return 0;} else{ - int c,d; + int c = 0; + int d = 0; for(int i=0;ic){c=d;} @@ -1756,69 +1757,69 @@ void OctNode< NodeData >::NeighborKey3::getNeighbors( OctNode< NodeData >* node const OctNode< NodeData >* const * _node; const OctNode< NodeData >* __node; int iS , iE , jS , jE , kS , kE; -#define _S( i ) ( (i==0) ? 1 : 0 ) -#define _E( i ) ( (i==2) ? 1 : 2 ) +#define Oct_S( i ) ( (i==0) ? 1 : 0 ) +#define Oct_E( i ) ( (i==2) ? 1 : 2 ) switch( c ) { case 0: _node = _nodes; - for( int i=0 ; i<3 ; i++ ){ iE=_E(i) ; for( int j=0 ; j<3 ; j++ ){ jE=_E(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kE=_E(k) , __node = *_node; + for( int i=0 ; i<3 ; i++ ){ iE=Oct_E(i) ; for( int j=0 ; j<3 ; j++ ){ jE=Oct_E(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kE=Oct_E(k) , __node = *_node; if( __node && __node->children ) for( int ii=0 , iii=2*i ; iichildren + Cube::CornerIndex( ii , jj , kk ); } } } break; case 1: _node = _nodes; - for( int i=0 ; i<3 ; i++ ){ iS=_S(i) ; for( int j=0 ; j<3 ; j++ ){ jE=_E(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kE=_E(k) , __node = *_node; + for( int i=0 ; i<3 ; i++ ){ iS=Oct_S(i) ; for( int j=0 ; j<3 ; j++ ){ jE=Oct_E(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kE=Oct_E(k) , __node = *_node; if( __node && __node->children ) for( int ii=iS , iii=2*i+iS-1 ; ii<2 ; ii++ , iii++ ) for( int jj=0 , jjj=2*j ; jjchildren + Cube::CornerIndex( ii , jj , kk ); } } } break; case 2: _node = _nodes; - for( int i=0 ; i<3 ; i++ ){ iE=_E(i) ; for( int j=0 ; j<3 ; j++ ){ jS=_S(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kE=_E(k) , __node = *_node; + for( int i=0 ; i<3 ; i++ ){ iE=Oct_E(i) ; for( int j=0 ; j<3 ; j++ ){ jS=Oct_S(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kE=Oct_E(k) , __node = *_node; if( __node && __node->children ) for( int ii=0 , iii=2*i ; iichildren + Cube::CornerIndex( ii , jj , kk ); } } } break; case 3: _node = _nodes; - for( int i=0 ; i<3 ; i++ ){ iS=_S(i) ; for( int j=0 ; j<3 ; j++ ){ jS=_S(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kE=_E(k) , __node = *_node; + for( int i=0 ; i<3 ; i++ ){ iS=Oct_S(i) ; for( int j=0 ; j<3 ; j++ ){ jS=Oct_S(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kE=Oct_E(k) , __node = *_node; if( __node && __node->children ) for( int ii=iS , iii=2*i+iS-1 ; ii<2 ; ii++ , iii++ ) for( int jj=jS , jjj=2*j+jS-1 ; jj<2 ; jj++ , jjj++ ) for( int kk=0 , kkk=2*k ; kkchildren + Cube::CornerIndex( ii , jj , kk ); } } } break; case 4: _node = _nodes; - for( int i=0 ; i<3 ; i++ ){ iE=_E(i) ; for( int j=0 ; j<3 ; j++ ){ jE=_E(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kS=_S(k) , __node = *_node; + for( int i=0 ; i<3 ; i++ ){ iE=Oct_E(i) ; for( int j=0 ; j<3 ; j++ ){ jE=Oct_E(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kS=Oct_S(k) , __node = *_node; if( __node && __node->children ) for( int ii=0 , iii=2*i ; iichildren + Cube::CornerIndex( ii , jj , kk ); } } } break; case 5: _node = _nodes; - for( int i=0 ; i<3 ; i++ ){ iS=_S(i) ; for( int j=0 ; j<3 ; j++ ){ jE=_E(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kS=_S(k) , __node = *_node; + for( int i=0 ; i<3 ; i++ ){ iS=Oct_S(i) ; for( int j=0 ; j<3 ; j++ ){ jE=Oct_E(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kS=Oct_S(k) , __node = *_node; if( __node && __node->children ) for( int ii=iS , iii=2*i+iS-1 ; ii<2 ; ii++ , iii++ ) for( int jj=0 , jjj=2*j ; jjchildren + Cube::CornerIndex( ii , jj , kk ); } } } break; case 6: _node = _nodes; - for( int i=0 ; i<3 ; i++ ){ iE=_E(i) ; for( int j=0 ; j<3 ; j++ ){ jS=_S(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kS=_S(k) , __node = *_node; + for( int i=0 ; i<3 ; i++ ){ iE=Oct_E(i) ; for( int j=0 ; j<3 ; j++ ){ jS=Oct_S(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kS=Oct_S(k) , __node = *_node; if( __node && __node->children ) for( int ii=0 , iii=2*i ; iichildren + Cube::CornerIndex( ii , jj , kk ); } } } break; case 7: _node = _nodes; - for( int i=0 ; i<3 ; i++ ){ iS=_S(i) ; for( int j=0 ; j<3 ; j++ ){ jS=_S(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kS=_S(k) , __node = *_node; + for( int i=0 ; i<3 ; i++ ){ iS=Oct_S(i) ; for( int j=0 ; j<3 ; j++ ){ jS=Oct_S(j) ; for( int k=0 ; k<3 ; k++ , _node++ ){ kS=Oct_S(k) , __node = *_node; if( __node && __node->children ) for( int ii=iS , iii=2*i+iS-1 ; ii<2 ; ii++ , iii++ ) for( int jj=jS , jjj=2*j+jS-1 ; jj<2 ; jj++ , jjj++ ) for( int kk=kS , kkk=2*k+kS-1 ; kk<2 ; kk++ , kkk++ ) neighbors.neighbors[iii][jjj][kkk] = __node->children + Cube::CornerIndex( ii , jj , kk ); } } } break; } -#undef _S -#undef _E +#undef Oct_S +#undef Oct_E } } template< class NodeData > diff --git a/src/other/libspsr/Src/PPolynomial.h b/src/libbg/spsr/PPolynomial.h similarity index 100% rename from src/other/libspsr/Src/PPolynomial.h rename to src/libbg/spsr/PPolynomial.h diff --git a/src/other/libspsr/Src/PPolynomial.inl b/src/libbg/spsr/PPolynomial.inl similarity index 100% rename from src/other/libspsr/Src/PPolynomial.inl rename to src/libbg/spsr/PPolynomial.inl diff --git a/src/libbg/spsr/PlyVertexMini.h b/src/libbg/spsr/PlyVertexMini.h new file mode 100644 index 00000000000..40b6b666a88 --- /dev/null +++ b/src/libbg/spsr/PlyVertexMini.h @@ -0,0 +1,206 @@ +// Geogram is licensed under the 3-clauses BSD License (also called "Revised +// BSD License", "New BSD License", or "Modified BSD License"): +// +// Copyright (c) 2012-2014, Bruno Levy All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// Redistributions of source code must retain the above copyright notice, this +// list of conditions and the following disclaimer. Redistributions in binary +// form must reproduce the above copyright notice, this list of conditions and +// the following disclaimer in the documentation and/or other materials +// provided with the distribution. Neither the name of the ALICE Project-Team +// nor the names of its contributors may be used to endorse or promote products +// derived from this software without specific prior written permission. + +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. + +// If you modify this software, you should include a notice giving the name of +// the person performing the modification, the date of modification, and the +// reason for such modification. + +// [Bruno Levy 2016]: replacement class for Ply vertices, so that we +// do not need importing all the Ply I/O code. +// Adapted from Ply.h +// +// https://github.com/alicevision/geogram/blob/master/src/lib/geogram/third_party/PoissonRecon/PlyVertexMini.h +// +// See https://github.com/mkazhdan/PoissonRecon/issues/143 + +// The "Wrapper" class indicates the class to cast to/from in order to support linear operations. +template< class Real > +class PlyVertex +{ +public: + typedef PlyVertex Wrapper; + + const static int ReadComponents=3; + const static int WriteComponents=3; + Point3D< Real > point; + + PlyVertex( void ) { ; } + PlyVertex( Point3D< Real > p ) { point=p; } + PlyVertex operator + ( PlyVertex p ) const { return PlyVertex( point+p.point ); } + PlyVertex operator - ( PlyVertex p ) const { return PlyVertex( point-p.point ); } + template< class _Real > PlyVertex operator * ( _Real s ) const { return PlyVertex( point*s ); } + template< class _Real > PlyVertex operator / ( _Real s ) const { return PlyVertex( point/s ); } + PlyVertex& operator += ( PlyVertex p ) { point += p.point ; return *this; } + PlyVertex& operator -= ( PlyVertex p ) { point -= p.point ; return *this; } + template< class _Real > PlyVertex& operator *= ( _Real s ) { point *= s ; return *this; } + template< class _Real > PlyVertex& operator /= ( _Real s ) { point /= s ; return *this; } +}; + +template< class Real , class _Real > PlyVertex< Real > operator * ( XForm4x4< _Real > xForm , PlyVertex< Real > v ) { return PlyVertex< Real >( xForm * v.point ); } + +template< class Real > +class PlyValueVertex +{ +public: + typedef PlyValueVertex Wrapper; + + const static int ReadComponents=4; + const static int WriteComponents=4; + + Point3D point; + Real value; + + PlyValueVertex( void ) : value( Real(0) ) { ; } + PlyValueVertex( Point3D< Real > p , Real v ) : point(p) , value(v) { ; } + PlyValueVertex operator + ( PlyValueVertex p ) const { return PlyValueVertex( point+p.point , value+p.value ); } + PlyValueVertex operator - ( PlyValueVertex p ) const { return PlyValueVertex( point-p.value , value-p.value ); } + template< class _Real > PlyValueVertex operator * ( _Real s ) const { return PlyValueVertex( point*s , Real(value*s) ); } + template< class _Real > PlyValueVertex operator / ( _Real s ) const { return PlyValueVertex( point/s , Real(value/s) ); } + PlyValueVertex& operator += ( PlyValueVertex p ) { point += p.point , value += p.value ; return *this; } + PlyValueVertex& operator -= ( PlyValueVertex p ) { point -= p.point , value -= p.value ; return *this; } + template< class _Real > PlyValueVertex& operator *= ( _Real s ) { point *= s , value *= Real(s) ; return *this; } + template< class _Real > PlyValueVertex& operator /= ( _Real s ) { point /= s , value /= Real(s) ; return *this; } +}; +template< class Real , class _Real > PlyValueVertex< Real > operator * ( XForm4x4< _Real > xForm , PlyValueVertex< Real > v ) { return PlyValueVertex< Real >( xForm * v.point , v.value ); } + +template< class Real > +class PlyOrientedVertex +{ +public: + typedef PlyOrientedVertex Wrapper; + + const static int ReadComponents=6; + const static int WriteComponents=6; + + Point3D point , normal; + + PlyOrientedVertex( void ) { ; } + PlyOrientedVertex( Point3D< Real > p , Point3D< Real > n ) : point(p) , normal(n) { ; } + PlyOrientedVertex operator + ( PlyOrientedVertex p ) const { return PlyOrientedVertex( point+p.point , normal+p.normal ); } + PlyOrientedVertex operator - ( PlyOrientedVertex p ) const { return PlyOrientedVertex( point-p.value , normal-p.normal ); } + template< class _Real > PlyOrientedVertex operator * ( _Real s ) const { return PlyOrientedVertex( point*s , normal*s ); } + template< class _Real > PlyOrientedVertex operator / ( _Real s ) const { return PlyOrientedVertex( point/s , normal/s ); } + PlyOrientedVertex& operator += ( PlyOrientedVertex p ) { point += p.point , normal += p.normal ; return *this; } + PlyOrientedVertex& operator -= ( PlyOrientedVertex p ) { point -= p.point , normal -= p.normal ; return *this; } + template< class _Real > PlyOrientedVertex& operator *= ( _Real s ) { point *= s , normal *= s ; return *this; } + template< class _Real > PlyOrientedVertex& operator /= ( _Real s ) { point /= s , normal /= s ; return *this; } +}; +template< class Real , class _Real > PlyOrientedVertex< Real > operator * ( XForm4x4< _Real > xForm , PlyOrientedVertex< Real > v ) { return PlyOrientedVertex< Real >( xForm * v.point , xForm.inverse().transpose() * v.normal ); } + +template< class Real > +class PlyColorVertex +{ +public: + struct _PlyColorVertex + { + Point3D< Real > point , color; + _PlyColorVertex( void ) { ; } + _PlyColorVertex( Point3D< Real > p , Point3D< Real > c ) : point(p) , color(c) { ; } + _PlyColorVertex( PlyColorVertex< Real > p ){ point = p.point ; for( int c=0 ; c<3 ; c++ ) color[c] = (Real) p.color[c]; } + operator PlyColorVertex< Real > () + { + PlyColorVertex< Real > p; + p.point = point; + for( int c=0 ; c<3 ; c++ ) p.color[c] = (unsigned char)std::max< int >( 0 , std::min< int >( 255 , (int)( color[c]+0.5 ) ) ); + return p; + } + + _PlyColorVertex operator + ( _PlyColorVertex p ) const { return _PlyColorVertex( point+p.point , color+p.color ); } + _PlyColorVertex operator - ( _PlyColorVertex p ) const { return _PlyColorVertex( point-p.value , color-p.color ); } + template< class _Real > _PlyColorVertex operator * ( _Real s ) const { return _PlyColorVertex( point*s , color*s ); } + template< class _Real > _PlyColorVertex operator / ( _Real s ) const { return _PlyColorVertex( point/s , color/s ); } + _PlyColorVertex& operator += ( _PlyColorVertex p ) { point += p.point , color += p.color ; return *this; } + _PlyColorVertex& operator -= ( _PlyColorVertex p ) { point -= p.point , color -= p.color ; return *this; } + template< class _Real > _PlyColorVertex& operator *= ( _Real s ) { point *= s , color *= s ; return *this; } + template< class _Real > _PlyColorVertex& operator /= ( _Real s ) { point /= s , color /= s ; return *this; } + }; + + typedef _PlyColorVertex Wrapper; + + const static int ReadComponents=9; + const static int WriteComponents=6; + + Point3D< Real > point; + unsigned char color[3]; + + operator Point3D< Real >& (){ return point; } + operator const Point3D< Real >& () const { return point; } + PlyColorVertex( void ) { point.coords[0] = point.coords[1] = point.coords[2] = 0 , color[0] = color[1] = color[2] = 0; } + PlyColorVertex( const Point3D& p ) { point=p; } + PlyColorVertex( const Point3D< Real >& p , const unsigned char c[3] ) { point = p , color[0] = c[0] , color[1] = c[1] , color[2] = c[2]; } +}; +template< class Real , class _Real > PlyColorVertex< Real > operator * ( XForm4x4< _Real > xForm , PlyColorVertex< Real > v ) { return PlyColorVertex< Real >( xForm * v.point , v.color ); } + +template< class Real > +class PlyColorAndValueVertex +{ +public: + struct _PlyColorAndValueVertex + { + Point3D< Real > point , color; + Real value; + _PlyColorAndValueVertex( void ) : value(0) { ; } + _PlyColorAndValueVertex( Point3D< Real > p , Point3D< Real > c , Real v ) : point(p) , color(c) , value(v) { ; } + _PlyColorAndValueVertex( PlyColorAndValueVertex< Real > p ){ point = p.point ; for( int c=0 ; c<3 ; c++ ) color[c] = (Real) p.color[c] ; value = p.value; } + operator PlyColorAndValueVertex< Real > () + { + PlyColorAndValueVertex< Real > p; + p.point = point; + for( int c=0 ; c<3 ; c++ ) p.color[c] = (unsigned char)std::max< int >( 0 , std::min< int >( 255 , (int)( color[c]+0.5 ) ) ); + p.value = value; + return p; + } + + _PlyColorAndValueVertex operator + ( _PlyColorAndValueVertex p ) const { return _PlyColorAndValueVertex( point+p.point , color+p.color , value+p.value ); } + _PlyColorAndValueVertex operator - ( _PlyColorAndValueVertex p ) const { return _PlyColorAndValueVertex( point-p.value , color-p.color , value+p.value ); } + template< class _Real > _PlyColorAndValueVertex operator * ( _Real s ) const { return _PlyColorAndValueVertex( point*s , color*s , value*s ); } + template< class _Real > _PlyColorAndValueVertex operator / ( _Real s ) const { return _PlyColorAndValueVertex( point/s , color/s , value/s ); } + _PlyColorAndValueVertex& operator += ( _PlyColorAndValueVertex p ) { point += p.point , color += p.color , value += p.value ; return *this; } + _PlyColorAndValueVertex& operator -= ( _PlyColorAndValueVertex p ) { point -= p.point , color -= p.color , value -= p.value ; return *this; } + template< class _Real > _PlyColorAndValueVertex& operator *= ( _Real s ) { point *= s , color *= s , value *= (Real)s ; return *this; } + template< class _Real > _PlyColorAndValueVertex& operator /= ( _Real s ) { point /= s , color /= s , value /= (Real)s ; return *this; } + }; + + typedef _PlyColorAndValueVertex Wrapper; + + const static int ReadComponents=10; + const static int WriteComponents=7; + + Point3D< Real > point; + unsigned char color[3]; + Real value; + + operator Point3D< Real >& (){ return point; } + operator const Point3D< Real >& () const { return point; } + PlyColorAndValueVertex( void ) { point.coords[0] = point.coords[1] = point.coords[2] = (Real)0 , color[0] = color[1] = color[2] = 0 , value = (Real)0; } + PlyColorAndValueVertex( const Point3D< Real >& p ) { point=p; } + PlyColorAndValueVertex( const Point3D< Real >& p , const unsigned char c[3] , Real v) { point = p , color[0] = c[0] , color[1] = c[1] , color[2] = c[2] , value = v; } +}; +template< class Real , class _Real > PlyColorAndValueVertex< Real > operator * ( XForm4x4< _Real > xForm , PlyColorAndValueVertex< Real > v ) { return PlyColorAndValueVertex< Real >( xForm * v.point , v.color , v.value ); } + + diff --git a/src/other/libspsr/Src/PointStream.h b/src/libbg/spsr/PointStream.h similarity index 89% rename from src/other/libspsr/Src/PointStream.h rename to src/libbg/spsr/PointStream.h index a0b89f7719d..1a04e3d6fdc 100644 --- a/src/other/libspsr/Src/PointStream.h +++ b/src/libbg/spsr/PointStream.h @@ -28,7 +28,6 @@ DAMAGE. #ifndef POINT_STREAM_INCLUDED #define POINT_STREAM_INCLUDED -#include "Ply.h" #include "cvertex.h" template< class Real > @@ -90,22 +89,5 @@ class BinaryPointStream : public PointStream< Real > void reset( void ); bool nextPoint( Point3D< Real >& p , Point3D< Real >& n ); }; - -template< class Real > -class PLYPointStream : public PointStream< Real > -{ - char* _fileName; - PlyFile* _ply; - int _nr_elems; - char **_elist; - - int _pCount , _pIdx; - void _free( void ); -public: - PLYPointStream( const char* fileName ); - ~PLYPointStream( void ); - void reset( void ); - bool nextPoint( Point3D< Real >& p , Point3D< Real >& n ); -}; #include "PointStream.inl" #endif // POINT_STREAM_INCLUDED diff --git a/src/other/libspsr/Src/PointStream.inl b/src/libbg/spsr/PointStream.inl similarity index 69% rename from src/other/libspsr/Src/PointStream.inl rename to src/libbg/spsr/PointStream.inl index d28a0a80827..ac3d838822e 100644 --- a/src/other/libspsr/Src/PointStream.inl +++ b/src/libbg/spsr/PointStream.inl @@ -123,92 +123,3 @@ bool BinaryPointStream< Real >::nextPoint( Point3D< Real >& p , Point3D< Real >& } } -template< class Real > -PLYPointStream< Real >::PLYPointStream( const char* fileName ) -{ - _fileName = new char[ strlen( fileName )+1 ]; - strcpy( _fileName , fileName ); - _ply = NULL; - reset(); -} -template< class Real > -void PLYPointStream< Real >::reset( void ) -{ - int fileType; - float version; - PlyProperty** plist; - if( _ply ) _free(); - _ply = ply_open_for_reading( _fileName, &_nr_elems, &_elist, &fileType, &version ); - if( !_ply ) - { - fprintf( stderr, "[ERROR] Failed to open ply file for reading: %s\n" , _fileName ); - exit( 0 ); - } - bool foundVertices = false; - for( int i=0 ; i<_nr_elems ; i++ ) - { - int num_elems; - int nr_props; - char* elem_name = _elist[i]; - plist = ply_get_element_description( _ply , elem_name , &num_elems , &nr_props ); - if( !plist ) - { - fprintf( stderr , "[ERROR] Failed to get element description: %s\n" , elem_name ); - exit( 0 ); - } - - if( equal_strings( "vertex" , elem_name ) ) - { - foundVertices = true; - _pCount = num_elems , _pIdx = 0; - for( int i=0 ; i::Components ; i++ ) - if( !ply_get_property( _ply , elem_name , &(PlyOrientedVertex< Real >::Properties[i]) ) ) - { - fprintf( stderr , "[ERROR] Failed to find property in ply file: %s\n" , PlyOrientedVertex< Real >::Properties[i].name ); - exit( 0 ); - } - } - for( int j=0 ; jname ); - free( plist[j] ); - } - free( plist ); - if( foundVertices ) break; - } - if( !foundVertices ) - { - fprintf( stderr , "[ERROR] Could not find vertices in ply file\n" ); - exit( 0 ); - } -} -template< class Real > -void PLYPointStream< Real >::_free( void ) -{ - if( _ply ) ply_close( _ply ) , _ply = NULL; - if( _elist ) - { - for( int i=0 ; i<_nr_elems ; i++ ) free( _elist[i] ); - free( _elist ); - } -} -template< class Real > -PLYPointStream< Real >::~PLYPointStream( void ) -{ - _free(); - if( _fileName ) delete[] _fileName , _fileName = NULL; -} -template< class Real > -bool PLYPointStream< Real >::nextPoint( Point3D< Real >& p , Point3D< Real >& n ) -{ - if( _pIdx<_pCount ) - { - PlyOrientedVertex< Real > op; - ply_get_element( _ply, (void *)&op ); - p = op.point; - n = op.normal; - _pIdx++; - return true; - } - else return false; -} diff --git a/src/other/libspsr/Src/Polynomial.h b/src/libbg/spsr/Polynomial.h similarity index 100% rename from src/other/libspsr/Src/Polynomial.h rename to src/libbg/spsr/Polynomial.h diff --git a/src/other/libspsr/Src/Polynomial.inl b/src/libbg/spsr/Polynomial.inl similarity index 100% rename from src/other/libspsr/Src/Polynomial.inl rename to src/libbg/spsr/Polynomial.inl diff --git a/src/other/libspsr/Src/SPSR.cpp b/src/libbg/spsr/SPSR.cpp similarity index 74% rename from src/other/libspsr/Src/SPSR.cpp rename to src/libbg/spsr/SPSR.cpp index 553f9bdf560..a5403a78ccb 100644 --- a/src/other/libspsr/Src/SPSR.cpp +++ b/src/libbg/spsr/SPSR.cpp @@ -26,29 +26,57 @@ ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF S DAMAGE. */ -#include -#include -#include -#include +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push +#endif +#if defined(__clang__) +# pragma clang diagnostic push +#endif +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic ignored "-Wfloat-equal" +# pragma GCC diagnostic ignored "-Wshadow" +# pragma GCC diagnostic ignored "-Wunused-parameter" +# pragma GCC diagnostic ignored "-Wunused-variable" +# pragma GCC diagnostic ignored "-Wsign-compare" +# pragma GCC diagnostic ignored "-Wunused-value" +# pragma GCC diagnostic ignored "-Wmisleading-indentation" +# pragma GCC diagnostic ignored "-Wunused-but-set-variable" +# pragma GCC diagnostic ignored "-Wparentheses" +# pragma GCC diagnostic ignored "-Wreturn-type" +# if (__GNUC__ >= 8) +# pragma GCC diagnostic ignored "-Wclass-memaccess" +# endif +#endif +#if defined(__clang__) +# pragma clang diagnostic ignored "-Wunknown-warning-option" +# pragma clang diagnostic ignored "-Wfloat-equal" +# pragma clang diagnostic ignored "-Wshadow" +# pragma clang diagnostic ignored "-Wunused-parameter" +# pragma clang diagnostic ignored "-Wunused-variable" +# pragma clang diagnostic ignored "-Wsign-compare" +# pragma clang diagnostic ignored "-Wunused-value" +# pragma clang diagnostic ignored "-Wparentheses" +# pragma clang diagnostic ignored "-Wreturn-type" +# if (__clang_major__ >= 10) +# pragma clang diagnostic ignored "-Wmisleading-indentation" +# endif +#endif + #include "SPSR.h" #include -#ifdef _WIN32 -#include -#include -#endif // _WIN32 #include "MarchingCubes.h" #include "Octree.h" #include "SparseMatrix.h" +#include "PlyVertexMini.h" #include "PPolynomial.h" -#include "Ply.h" -#include "MemoryUsage.h" -#ifdef _OPENMP -#include "omp.h" -#endif // _OPENMP -void DumpOutput( const char* format , ... ) {}; -void DumpOutput2( char* str , const char* format , ... ) {}; #include "MultiGridOctreeData.h" +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop +#endif +#if defined(__clang__) +# pragma clang diagnostic pop +#endif extern "C" int spsr_surface_build(int **faces, int *num_faces, double **points, int *num_pnts, @@ -62,13 +90,12 @@ spsr_surface_build(int **faces, int *num_faces, double **points, int *num_pnts, Octree< double > tree; tree.threads = opts->thread_cnt; OctNode< TreeNodeData >::SetAllocator( MEMORY_ALLOCATOR_BLOCK_SIZE ); - double maxMemoryUsage; Octree< double >::PointInfo* pointInfo = new Octree< double >::PointInfo(); Octree< double >::NormalInfo* normalInfo = new Octree< double >::NormalInfo(); std::vector< double >* kernelDensityWeights = new std::vector< double >(); std::vector< double >* centerWeights = new std::vector< double >(); PointStream< float >* pointStream = new CVertexPointStream< float >( cnt, verts ); - int pointCount = tree.SetTree< float >(pointStream , opts->mindepth, opts->depth, opts->fulldepth, opts->kerneldepth, + tree.SetTree< float >(pointStream , opts->mindepth, opts->depth, opts->fulldepth, opts->kerneldepth, opts->samples_per_node, opts->scale, 0, 0, opts->pointweight, opts->adaptiveexponent, *pointInfo, *normalInfo , *kernelDensityWeights , *centerWeights , opts->boundarytype, xForm , 0); kernelDensityWeights->clear(); @@ -79,7 +106,7 @@ spsr_surface_build(int **faces, int *num_faces, double **points, int *num_pnts, Pointer( double ) solution = tree.SolveSystem( *pointInfo , constraints , 0 , opts->iters , opts->maxsolvedepth , opts->cgdepth , float(opts->cssolveraccuracy) ); delete pointInfo; FreePointer(constraints); - CoredFileMeshData< PlyVertex > mesh; + CoredVectorMeshData< PlyVertex > mesh; double isoValue = tree.GetIsoValue( solution , *centerWeights ); centerWeights->clear(); delete centerWeights; diff --git a/src/other/libspsr/Src/SPSR.h b/src/libbg/spsr/SPSR.h similarity index 74% rename from src/other/libspsr/Src/SPSR.h rename to src/libbg/spsr/SPSR.h index ace10104e42..f8955c7a3be 100644 --- a/src/other/libspsr/Src/SPSR.h +++ b/src/libbg/spsr/SPSR.h @@ -29,38 +29,9 @@ DAMAGE. #ifndef SPSR_INCLUDED #define SPSR_INCLUDED +#include "common.h" #include "cvertex.h" -#if defined(_WIN32) -# define COMPILER_DLLEXPORT __declspec(dllexport) -# define COMPILER_DLLIMPORT __declspec(dllimport) -#else -# define COMPILER_DLLEXPORT __attribute__ ((visibility ("default"))) -# define COMPILER_DLLIMPORT __attribute__ ((visibility ("default"))) -#endif - -#ifndef SPSR_EXPORT -# if defined(SPSR_DLL_EXPORTS) && defined(SPSR_DLL_IMPORTS) -# error "Only SPSR_DLL_EXPORTS or SPSR_DLL_IMPORTS can be defined, not both." -# elif defined(SPSR_DLL_EXPORTS) -# define SPSR_EXPORT COMPILER_DLLEXPORT -# elif defined(SPSR_DLL_IMPORTS) -# define SPSR_EXPORT COMPILER_DLLIMPORT -# else -# define SPSR_EXPORT -# endif -#endif - -#ifndef __BEGIN_DECLS -# ifdef __cplusplus -# define __BEGIN_DECLS extern "C" { -# define __END_DECLS } -# else -# define __BEGIN_DECLS -# define __END_DECLS -# endif -#endif - __BEGIN_DECLS struct spsr_options { @@ -92,7 +63,7 @@ struct spsr_options { #define SPSR_OPTIONS_DEFAULT_INIT { NULL, NULL, NULL, NULL, 0, 0, 8, 0, 6, 1, 8, -1, 5, 0, 8, 1, 1, 1.0, 1.1, 0.001, 4.0 } -SPSR_EXPORT extern int +extern int spsr_surface_build(int **faces, int *num_faces, double **points, int *num_pnts, const struct cvertex **verts, int cnt, struct spsr_options *opts); diff --git a/src/other/libspsr/Src/SparseMatrix.h b/src/libbg/spsr/SparseMatrix.h similarity index 100% rename from src/other/libspsr/Src/SparseMatrix.h rename to src/libbg/spsr/SparseMatrix.h diff --git a/src/other/libspsr/Src/SparseMatrix.inl b/src/libbg/spsr/SparseMatrix.inl similarity index 93% rename from src/other/libspsr/Src/SparseMatrix.inl rename to src/libbg/spsr/SparseMatrix.inl index 9d272d80b49..323810c50ee 100644 --- a/src/other/libspsr/Src/SparseMatrix.inl +++ b/src/libbg/spsr/SparseMatrix.inl @@ -226,7 +226,6 @@ template template void SparseMatrix::Multiply( const Vector& In , Vector& Out , int threads ) const { -#pragma omp parallel for num_threads( threads ) schedule( static ) for( int i=0 ; i::SolveSymmetric( const SparseMatrix& M , const Vector double dDotQ = 0 , alpha = 0; for( int i=0 ; i::SolveSymmetric( const SparseMatrix& M , const Vector r = b - r; } else -#pragma omp parallel for num_threads( threads ) schedule( static ) for( int i=0 ; i::Multiply( const Vector& In , Vector& Out if( addDCTerm ) { T2 dcTerm = 0; -#pragma omp parallel for num_threads( threads ) reduction ( + : dcTerm ) for( int t=0 ; t::Multiply( const Vector& In , Vector& Out dcTerm /= dim; dim = int( Out.Dimensions() ); T2* out = &Out[0]; -#pragma omp parallel for num_threads( threads ) schedule( static ) for( int i=0 ; i::Multiply( const Vector& In , Vector& Out } else { -#pragma omp parallel for num_threads( threads ) for( int t=0 ; t::Multiply( const Vector& In , Vector& Out } dim = int( Out.Dimensions() ); T2* out = &Out[0]; -#pragma omp parallel for num_threads( threads ) schedule( static ) for( int i=0 ; i::Multiply( const Vector& In , Vector& Out int dim = In.Dimensions(); const T2* in = &In[0]; int threads = OutScratch.size(); -#pragma omp parallel for num_threads( threads ) for( int t=0 ; t::Multiply( const Vector& In , Vector& Out } } T2* out = &Out[0]; -#pragma omp parallel for num_threads( threads ) schedule( static ) for( int i=0 ; i::Multiply( const Vector& In , Vector& Out #ifdef WIN32 #ifndef _AtomicIncrement_ #define _AtomicIncrement_ -#include +#define WIN32_LEAN_AND_MEAN +#include inline void AtomicIncrement( volatile float* ptr , float addend ) { float newValue = *ptr; @@ -537,7 +527,6 @@ void MultiplyAtomic( const SparseSymmetricMatrix< T >& A , const Vector< float > const float* in = &In[0]; float* out = &Out[0]; if( partition ) -#pragma omp parallel for num_threads( threads ) for( int t=0 ; t& A , const Vector< float > AtomicIncrement( out+i , out_i ); } else -#pragma omp parallel for num_threads( threads ) for( int i=0 ; i* temp = A[i]; @@ -580,7 +568,6 @@ void MultiplyAtomic( const SparseSymmetricMatrix< T >& A , const Vector< double double* out = &Out[0]; if( partition ) -#pragma omp parallel for num_threads( threads ) for( int t=0 ; t& A , const Vector< double AtomicIncrement( out+i , out_i ); } else -#pragma omp parallel for num_threads( threads ) for( int i=0 ; i* temp = A[i]; @@ -638,7 +624,6 @@ int SparseSymmetricMatrix< T >::SolveCGAtomic( const SparseSymmetricMatrix< T >& int eCount = 0; for( int i=0 ; i::SolveCGAtomic( const SparseSymmetricMatrix< T >& MultiplyAtomic( A , x , temp , threads , &partition[0] ); MultiplyAtomic( A , temp , r , threads , &partition[0] ); MultiplyAtomic( A , b , temp , threads , &partition[0] ); -#pragma omp parallel for num_threads( threads ) schedule( static ) for( int i=0 ; i::SolveCGAtomic( const SparseSymmetricMatrix< T >& double dDotQ = 0; for( int i=0 ; i::SolveCG( const SparseSymmetricMatrix& A , con if( solveNormal ) { A.Multiply( x , temp , scratch , addDCTerm ) , A.Multiply( temp , r , scratch , addDCTerm ) , A.Multiply( b , temp , scratch , addDCTerm ); -#pragma omp parallel for num_threads( threads ) reduction( + : delta_new ) for( int i=0 ; i::SolveCG( const SparseSymmetricMatrix& A , con if( solveNormal ) A.Multiply( d , temp , scratch , addDCTerm ) , A.Multiply( temp , q , scratch , addDCTerm ); else A.Multiply( d , q , scratch , addDCTerm ); double dDotQ = 0; -#pragma omp parallel for num_threads( threads ) reduction( + : dDotQ ) for( int i=0 ; i::SolveCG( const SparseSymmetricMatrix& A , const { if( threads>1 ) A.Multiply( x , temp , outScratch , addDCTerm ) , A.Multiply( temp , r , outScratch , addDCTerm ) , A.Multiply( b , temp , outScratch , addDCTerm ); else A.Multiply( x , temp , addDCTerm ) , A.Multiply( temp , r , addDCTerm ) , A.Multiply( b , temp , addDCTerm ); -#pragma omp parallel for num_threads( threads ) reduction( + : delta_new ) for( int i=0 ; i1 ) A.Multiply( x , r , outScratch , addDCTerm ); else A.Multiply( x , r , addDCTerm ); -#pragma omp parallel for num_threads( threads ) reduction( + : delta_new ) for( int i=0 ; i::SolveCG( const SparseSymmetricMatrix& A , const else A.Multiply( d , q , addDCTerm ); } double dDotQ = 0; -#pragma omp parallel for num_threads( threads ) reduction( + : dDotQ ) for( int i=0 ; i::SolveCG( const SparseSymmetricMatrix& A , const if( (ii%50)==(50-1) ) { -#pragma omp parallel for num_threads( threads ) for( int i=0 ; i::SolveCG( const SparseSymmetricMatrix& A , const if( threads>1 ) A.Multiply( x , r , outScratch , addDCTerm ); else A.Multiply( x , r , addDCTerm ); } -#pragma omp parallel for num_threads( threads ) reduction ( + : delta_new ) for( int i=0 ; i::SolveJacobi( const SparseSymmetricMatrix& M , c // solution_new[j] = ( b[j] - Md[j] ) / diagonal[j] + solution_old[j] // for( int j=0 ; j int SparseMatrix::SolveGS( const std::vector< std::vector< int > >& mcIndices , const SparseMatrix& M , const Vector& diagonal , const Vector& b , Vector& x , bool forward , int threads , int offset ) { int sum=0; -#ifdef _WIN32 -#define SetOMPParallel __pragma( omp parallel for num_threads( threads ) ) -#else // !_WIN32 -#define SetOMPParallel _Pragma( "omp parallel for num_threads( threads )" ) -#endif // _WIN32 #if ZERO_TESTING_JACOBI #define ITERATE( indices ) \ { \ -SetOMPParallel \ for( int k=0 ; k=0 ; j-- ){ sum += int( mcIndices[j].size() ) ; ITERATE( mcIndices[j] ); } #undef ITERATE -#undef SetOMPParallel return sum; } template @@ -1135,7 +1090,6 @@ int SparseMatrix::SolveGS( const std::vector< std::vector< int > >& mcIndices const std::vector< int >& _mcIndices = mcIndices[j]; sum += int( _mcIndices.size() ); { -#pragma omp parallel for num_threads( threads ) for( int k=0 ; k::SolveGS( const std::vector< std::vector< int > >& if( reset ) x.Resize( b.Dimensions() ) , x.SetZero(); M.Multiply( x , Mx , scratch ); dx.SetZero(); -#ifdef _WIN32 -#define SetOMPParallel __pragma( omp parallel for num_threads( scratch.threads() ) ) -#else // !_WIN32 -#define SetOMPParallel _Pragma( "omp parallel for num_threads( scratch.threads() )" ) -#endif // _WIN32 #if ZERO_TESTING_JACOBI #define ITERATE( indices ) \ { \ -SetOMPParallel \ for( int k=0 ; k=0 ; j-- ){ sum += int(mcIndices[j].size()) ; ITERATE( mcIndices[j] ); } #undef ITERATE -#undef SetOMPParallel return sum; } template @@ -1313,7 +1259,6 @@ template< class T2 > void SparseMatrix< T >::getDiagonal( Vector< T2 >& diagonal , int threads , int offset ) const { diagonal.Resize( SparseMatrix< T >::rows ); -#pragma omp parallel for num_threads( threads ) for( int i=0 ; i void SparseSymmetricMatrix< T >::getDiagonal( Vector< T2 >& diagonal , int threads ) const { diagonal.Resize( SparseMatrix< T >::rows ); -#pragma omp parallel for num_threads( threads ) for( int i=0 ; i::rows ; i++ ) { T2 d = 0.; diff --git a/src/other/libspsr/Src/Vector.h b/src/libbg/spsr/Vector.h similarity index 100% rename from src/other/libspsr/Src/Vector.h rename to src/libbg/spsr/Vector.h diff --git a/src/other/libspsr/Src/Vector.inl b/src/libbg/spsr/Vector.inl similarity index 100% rename from src/other/libspsr/Src/Vector.inl rename to src/libbg/spsr/Vector.inl diff --git a/src/other/libspsr/Src/cvertex.h b/src/libbg/spsr/cvertex.h similarity index 100% rename from src/other/libspsr/Src/cvertex.h rename to src/libbg/spsr/cvertex.h diff --git a/src/libbg/tests/CMakeLists.txt b/src/libbg/tests/CMakeLists.txt index 417c691d56c..50fe3ba905a 100644 --- a/src/libbg/tests/CMakeLists.txt +++ b/src/libbg/tests/CMakeLists.txt @@ -1,7 +1,7 @@ # C M A K E L I S T S . T X T # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -37,13 +37,13 @@ BRLCAD_ADDEXEC(bg_obr obr.c "libbg;libbn;libbu" TEST) -#add_test(NAME bg_obr_simple COMMAND bg_obr) # Default points +#BRLCAD_ADD_TEST(NAME bg_obr_simple COMMAND bg_obr) # Default points # ************ polygon.c tests *********** BRLCAD_ADDEXEC(bg_polygon_triangulate polygon_triangulate.c "libbg;libbn;libbu" TEST) -add_test(NAME bg_polygon_triangulate COMMAND bg_polygon_triangulate) +BRLCAD_ADD_TEST(NAME bg_polygon_triangulate COMMAND bg_polygon_triangulate) # ************ chull.c tests *********** @@ -61,17 +61,17 @@ BRLCAD_ADDEXEC(bg_chull3d chull3d.c "libbg;libbn;libbu" TEST) BRLCAD_ADDEXEC(bg_lseg_lseg_dist lseg_lseg.c "libbg;libbn;libbu" TEST) -add_test(NAME bg_lseg_lseg_1 COMMAND bg_lseg_lseg_dist 1) +BRLCAD_ADD_TEST(NAME bg_lseg_lseg_1 COMMAND bg_lseg_lseg_dist 1) # ************ lseg_lseg.c tests *********** BRLCAD_ADDEXEC(bg_lseg_pt_dist lseg_pt.c "libbg;libbn;libbu" TEST) -add_test(NAME bg_lseg_pt_dist_case0 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 0,0,0 0,0,0 0) -add_test(NAME bg_lseg_pt_dist_case1 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 -5,-5,-5 -5,-5,-5, 0) -add_test(NAME bg_lseg_pt_dist_case2 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 5,5,5 5,5,5, 0) -add_test(NAME bg_lseg_pt_dist_case3 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 -10,-5,-10 -5,-5,-5 7.07107 ) -add_test(NAME bg_lseg_pt_dist_case4 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 5,10,10 5,5,5 7.07107) -add_test(NAME bg_lseg_pt_dist_case5 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 0,-5,-5 -3.33333,-3.33333,-3.33333 4.08248) +BRLCAD_ADD_TEST(NAME bg_lseg_pt_dist_case0 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 0,0,0 0,0,0 0) +BRLCAD_ADD_TEST(NAME bg_lseg_pt_dist_case1 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 -5,-5,-5 -5,-5,-5, 0) +BRLCAD_ADD_TEST(NAME bg_lseg_pt_dist_case2 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 5,5,5 5,5,5, 0) +BRLCAD_ADD_TEST(NAME bg_lseg_pt_dist_case3 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 -10,-5,-10 -5,-5,-5 7.07107 ) +BRLCAD_ADD_TEST(NAME bg_lseg_pt_dist_case4 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 5,10,10 5,5,5 7.07107) +BRLCAD_ADD_TEST(NAME bg_lseg_pt_dist_case5 COMMAND bg_lseg_pt_dist -5,-5,-5 5,5,5 0,-5,-5 -3.33333,-3.33333,-3.33333 4.08248) # ************ tri_ray.c tests *********** @@ -94,17 +94,17 @@ BRLCAD_ADDEXEC(bg_tri_tri_isect_coplanar tri_tri_isect_coplanar.cpp "libbg;libbn # TODO - need some tests with floating point vertices that are down around the EPSILON threshold - that's # where the NEAR_ZERO components of the bg_tri_tri_isect_coplanar logic become important. -add_test(NAME bg_tri_tri_isect_coplanar_null_noarea COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1.00001,1,0 0 0) -add_test(NAME bg_tri_tri_isect_coplanar_vertex_noarea COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1,1,0 0 1) -add_test(NAME bg_tri_tri_isect_coplanar_edge_noarea COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 1,1,0 0 1) -add_test(NAME bg_tri_tri_isect_coplanar_full_noarea COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 0.7,0.8,0 0 1) -add_test(NAME bg_tri_tri_isect_coplanar_null_area COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1.00001,1,0 1 0) -add_test(NAME bg_tri_tri_isect_coplanar_vertex_area COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1,1,0 1 0) -add_test(NAME bg_tri_tri_isect_coplanar_edge_area COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 1,1,0 1 0) -add_test(NAME bg_tri_tri_isect_coplanar_full_area COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 0.7,0.8,0 1 1) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_coplanar_null_noarea COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1.00001,1,0 0 0) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_coplanar_vertex_noarea COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1,1,0 0 1) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_coplanar_edge_noarea COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 1,1,0 0 1) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_coplanar_full_noarea COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 0.7,0.8,0 0 1) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_coplanar_null_area COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1.00001,1,0 1 0) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_coplanar_vertex_area COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1,1,0 1 0) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_coplanar_edge_area COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 1,1,0 1 0) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_coplanar_full_area COMMAND bg_tri_tri_isect_coplanar 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 0.7,0.8,0 1 1) # TODO - in the debugger this is looking like it shouldn't return intersecting - it's very nearly an edge only intersect - but the final point-in-triangle test is doing something I don't quite understand: it seems to be checking only one point per triangle for inside/outside instead of all three points against each triangle... -#add_test(NAME bg_tri_tri_isect_coplanar_f1 COMMAND bg_tri_tri_isect_coplanar -0.17062162871133435,0.02417062256398481,0.00000000000000000 -0.20768111931464361,-0.34362144340377737,0.00000000000000000 0.17876567813733310,-0.05826268893839849,0.00000000000000000 0.17876567813748631,-0.05826268893840295,0.00000000000000000 -0.17062162871171396,0.02417062256397554,0.00000000000000000 0.19139302046287024,0.41180557615261132,0.00000000000000000 1 0) +#BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_coplanar_f1 COMMAND bg_tri_tri_isect_coplanar -0.17062162871133435,0.02417062256398481,0.00000000000000000 -0.20768111931464361,-0.34362144340377737,0.00000000000000000 0.17876567813733310,-0.05826268893839849,0.00000000000000000 0.17876567813748631,-0.05826268893840295,0.00000000000000000 -0.17062162871171396,0.02417062256397554,0.00000000000000000 0.19139302046287024,0.41180557615261132,0.00000000000000000 1 0) # For COMMAND bg_tri_tri_isect, the input format is as follows: # @@ -116,28 +116,28 @@ add_test(NAME bg_tri_tri_isect_coplanar_full_area COMMAND bg_tri_tri_isect_cop BRLCAD_ADDEXEC(bg_tri_tri_isect tri_tri_isect.c "libbg;libbn;libbu" TEST) # Test coplanar triangles -add_test(NAME bg_tri_tri_isect_cp_null COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1.00001,1,0 0) -add_test(NAME bg_tri_tri_isect_cp_vertex COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1,1,0 1) -add_test(NAME bg_tri_tri_isect_cp_edge COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 1,1,0 1) -add_test(NAME bg_tri_tri_isect_cp_full COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 0.7,0.8,0 1) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_cp_null COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1.00001,1,0 0) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_cp_vertex COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1.00001,0,0 2,0,0 1,1,0 1) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_cp_edge COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 1,1,0 1) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_cp_full COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1,0,0 2,0,0 0.7,0.8,0 1) # Test more general triangles -add_test(NAME bg_tri_tri_isect_null COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1,0,1 1,0,1 1,1,1 0) +BRLCAD_ADD_TEST(NAME bg_tri_tri_isect_null COMMAND bg_tri_tri_isect 0,0,0 1,0,0 1,1,0 1,0,1 1,0,1 1,1,1 0) # ************ tri_closest_pt.c tests *********** BRLCAD_ADDEXEC(bg_tri_closest_pt tri_closest_pt.c "libbg;libbn;libbu" TEST) -add_test(NAME bg_tri_pt_dist_coplanar_center COMMAND bg_tri_closest_pt 0,0,0 -1,-1,0 1,-1,0 0,1,0 0) -add_test(NAME bg_tri_pt_dist_coplanar_vert_closest COMMAND bg_tri_closest_pt -2,-1,0 -1,-1,0 1,-1,0 0,1,0 1) +BRLCAD_ADD_TEST(NAME bg_tri_pt_dist_coplanar_center COMMAND bg_tri_closest_pt 0,0,0 -1,-1,0 1,-1,0 0,1,0 0) +BRLCAD_ADD_TEST(NAME bg_tri_pt_dist_coplanar_vert_closest COMMAND bg_tri_closest_pt -2,-1,0 -1,-1,0 1,-1,0 0,1,0 1) # ************ polygon_op.cpp tests *********** BRLCAD_ADDEXEC(bg_polygon_op polygon_op.c "libbg;libbn;libbu" TEST) -add_test(NAME bg_polygon_op_basic COMMAND bg_polygon_op) +BRLCAD_ADD_TEST(NAME bg_polygon_op_basic COMMAND bg_polygon_op) diff --git a/src/libbg/tests/chull.c b/src/libbg/tests/chull.c index 08fcdd8e23c..021509feacb 100644 --- a/src/libbg/tests/chull.c +++ b/src/libbg/tests/chull.c @@ -1,7 +1,7 @@ /* B N _ C H U L L . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/chull3d.c b/src/libbg/tests/chull3d.c index f4a8e489ddd..6865ffd7fd6 100644 --- a/src/libbg/tests/chull3d.c +++ b/src/libbg/tests/chull3d.c @@ -1,7 +1,7 @@ /* B N _ C H U L L . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/lseg_lseg.c b/src/libbg/tests/lseg_lseg.c index 3641d74466b..f170b8070c5 100644 --- a/src/libbg/tests/lseg_lseg.c +++ b/src/libbg/tests/lseg_lseg.c @@ -1,7 +1,7 @@ /* L S E G _ L S E G . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/lseg_pt.c b/src/libbg/tests/lseg_pt.c index c5e4c7987db..d3ab6bcb5e1 100644 --- a/src/libbg/tests/lseg_pt.c +++ b/src/libbg/tests/lseg_pt.c @@ -1,7 +1,7 @@ /* L S E G _ P T . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/obr.c b/src/libbg/tests/obr.c index 4b41b2a99d4..eac92c7ff34 100644 --- a/src/libbg/tests/obr.c +++ b/src/libbg/tests/obr.c @@ -1,7 +1,7 @@ /* O B R . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/polygon_op.c b/src/libbg/tests/polygon_op.c index cf14505dac7..32e47f60eeb 100644 --- a/src/libbg/tests/polygon_op.c +++ b/src/libbg/tests/polygon_op.c @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/polygon_triangulate.c b/src/libbg/tests/polygon_triangulate.c index 316eeda75b5..484c53e162e 100644 --- a/src/libbg/tests/polygon_triangulate.c +++ b/src/libbg/tests/polygon_triangulate.c @@ -2,7 +2,7 @@ * * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/tri_closest_pt.c b/src/libbg/tests/tri_closest_pt.c index 0075c6a4500..c246c6771cb 100644 --- a/src/libbg/tests/tri_closest_pt.c +++ b/src/libbg/tests/tri_closest_pt.c @@ -1,7 +1,7 @@ /* T R I _ C L O S E S T _ P T . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/tri_ray_isect.cpp b/src/libbg/tests/tri_ray_isect.cpp index 5d020821350..acfbfa44237 100644 --- a/src/libbg/tests/tri_ray_isect.cpp +++ b/src/libbg/tests/tri_ray_isect.cpp @@ -1,7 +1,7 @@ /* T R I _ R A Y _ I S E C T . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/tri_tri_isect.c b/src/libbg/tests/tri_tri_isect.c index 4f6307a9dab..ad326d7129d 100644 --- a/src/libbg/tests/tri_tri_isect.c +++ b/src/libbg/tests/tri_tri_isect.c @@ -1,7 +1,7 @@ /* B N _ T R I _ T R I _ I S E C T . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/tests/tri_tri_isect_coplanar.cpp b/src/libbg/tests/tri_tri_isect_coplanar.cpp index e58a20ff527..4ad86e697d8 100644 --- a/src/libbg/tests/tri_tri_isect_coplanar.cpp +++ b/src/libbg/tests/tri_tri_isect_coplanar.cpp @@ -1,7 +1,7 @@ /* T R I _ T R I _ I S E C T _ C O _ P L A N A R . C P P * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/trimesh.cpp b/src/libbg/trimesh.cpp index d35fc14107a..5726da8d0b4 100644 --- a/src/libbg/trimesh.cpp +++ b/src/libbg/trimesh.cpp @@ -1,7 +1,7 @@ /* T R I M E S H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/trimesh_isect.cpp b/src/libbg/trimesh_isect.cpp index 29f3dde3ae4..802a9c8e418 100644 --- a/src/libbg/trimesh_isect.cpp +++ b/src/libbg/trimesh_isect.cpp @@ -1,7 +1,7 @@ /* T R I M E S H _ I S E C T . C P P * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbg/util.c b/src/libbg/util.c index 450446f7db9..8d44ebd4944 100644 --- a/src/libbg/util.c +++ b/src/libbg/util.c @@ -1,7 +1,7 @@ /* U T I L . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Copyright 2001 softSurfer, 2012 Dan Sunday diff --git a/src/libbn/CMakeLists.txt b/src/libbn/CMakeLists.txt index 5830e84958f..75bf64286cd 100644 --- a/src/libbn/CMakeLists.txt +++ b/src/libbn/CMakeLists.txt @@ -32,7 +32,7 @@ set(LIBBN_SOURCES rand.c randsph.c scale.c - sobolseq.c + sobol.c sphmap.c str.c symbol.c diff --git a/src/libbn/anim.c b/src/libbn/anim.c index c7f4c300700..6ce82bdb2e5 100644 --- a/src/libbn/anim.c +++ b/src/libbn/anim.c @@ -1,7 +1,7 @@ /* A N I M . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/axis.c b/src/libbn/axis.c index 935928912e6..2dad317db84 100644 --- a/src/libbn/axis.c +++ b/src/libbn/axis.c @@ -1,7 +1,7 @@ /* A X I S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -39,8 +39,8 @@ void tp_3axis(FILE *fp, /**< output file */ char *string, /**< label for axis */ - fastf_t *origin, /**< simple 3d point */ - fastf_t *rot, /**< rotation angle */ + point_t origin, /**< simple 3d point */ + mat_t rot, /**< rotation angle */ double length, /**< length of axis */ int ccw, /**< 0=clockwise, !0=counter clockwise (ccw) */ int ndigits, /**< # digits wide */ diff --git a/src/libbn/clip.c b/src/libbn/clip.c index e5f7198ac24..4b884f88ff0 100644 --- a/src/libbn/clip.c +++ b/src/libbn/clip.c @@ -1,7 +1,7 @@ /* C L I P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/complex.c b/src/libbn/complex.c index b1cead8c57b..d5357dd284c 100644 --- a/src/libbn/complex.c +++ b/src/libbn/complex.c @@ -1,7 +1,7 @@ /* C O M P L E X . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/font.c b/src/libbn/font.c index 9866d57cfe9..83fa2124926 100644 --- a/src/libbn/font.c +++ b/src/libbn/font.c @@ -1,7 +1,7 @@ /* F O N T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/globals.c b/src/libbn/globals.c index e347555a8cb..e5e09708e19 100644 --- a/src/libbn/globals.c +++ b/src/libbn/globals.c @@ -1,7 +1,7 @@ /* G L O B A L S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/list.c b/src/libbn/list.c index 1e72a0509d3..b6cbe817b33 100644 --- a/src/libbn/list.c +++ b/src/libbn/list.c @@ -1,7 +1,7 @@ /* L I S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/marker.c b/src/libbn/marker.c index 467838ba7b5..84ce48357c8 100644 --- a/src/libbn/marker.c +++ b/src/libbn/marker.c @@ -1,7 +1,7 @@ /* M A R K E R . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/mat.c b/src/libbn/mat.c index ef5743e386e..71495ad7f9f 100644 --- a/src/libbn/mat.c +++ b/src/libbn/mat.c @@ -1,7 +1,7 @@ /* M A T . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -121,7 +121,7 @@ bn_atan2(double y, double x) void -bn_mat_mul(register mat_t o, register const mat_t a, register const mat_t b) +bn_mat_mul(mat_t o, const mat_t a, const mat_t b) { o[ 0] = a[ 0] * b[ 0] + a[ 1] * b[ 4] + a[ 2] * b[ 8] + a[ 3] * b[12]; o[ 1] = a[ 0] * b[ 1] + a[ 1] * b[ 5] + a[ 2] * b[ 9] + a[ 3] * b[13]; @@ -146,7 +146,7 @@ bn_mat_mul(register mat_t o, register const mat_t a, register const mat_t b) void -bn_mat_mul2(register const mat_t i, register mat_t o) +bn_mat_mul2(const mat_t i, mat_t o) { mat_t temp; @@ -182,10 +182,7 @@ bn_mat_mul4( void -bn_matXvec( - register vect_t ov, - register const mat_t im, - register const vect_t iv) +bn_matXvec(hvect_t ov, const mat_t im, const hvect_t iv) { register int eo = 0; /* Position in output vector */ register int em = 0; /* Position in input matrix */ @@ -204,7 +201,7 @@ bn_matXvec( void -bn_mat_inv(register mat_t output, const mat_t input) +bn_mat_inv(mat_t output, const mat_t input) { if (bn_mat_inverse(output, input) == 0) { @@ -219,7 +216,7 @@ bn_mat_inv(register mat_t output, const mat_t input) int -bn_mat_inverse(register mat_t output, const mat_t input) +bn_mat_inverse(mat_t output, const mat_t input) { register int i, j; /* Indices */ int k; /* Indices */ @@ -307,7 +304,7 @@ bn_mat_inverse(register mat_t output, const mat_t input) void -bn_vtoh_move(register vect_t h, register const vect_t v) +bn_vtoh_move(vect_t h, const vect_t v) { VMOVE(h, v); h[W] = 1.0; @@ -315,7 +312,7 @@ bn_vtoh_move(register vect_t h, register const vect_t v) void -bn_htov_move(register vect_t v, register const vect_t h) +bn_htov_move(vect_t v, const vect_t h) { register fastf_t inv; @@ -333,14 +330,14 @@ bn_htov_move(register vect_t v, register const vect_t h) void -bn_mat_trn(mat_t om, register const mat_t im) +bn_mat_trn(mat_t om, const mat_t im) { MAT_TRANSPOSE(om, im); } void -bn_mat_ae(register fastf_t *m, double azimuth, double elev) +bn_mat_ae(mat_t m, double azimuth, double elev) { double sin_az, sin_el; double cos_az, cos_el; @@ -394,8 +391,8 @@ bn_aet_vec( fastf_t *az, fastf_t *el, fastf_t *twist, - fastf_t *vec_ae, - fastf_t *vec_twist, + vect_t vec_ae, + vect_t vec_twist, fastf_t accuracy) { vect_t zero_twist, ninety_twist; @@ -458,11 +455,7 @@ bn_vec_aed(vect_t vect, fastf_t az, fastf_t el, fastf_t distance) void -bn_mat_angles( - register fastf_t *mat, - double alpha_in, - double beta_in, - double ggamma_in) +bn_mat_angles(mat_t mat, double alpha_in, double beta_in, double ggamma_in) { double alpha, beta, ggamma; double calpha, cbeta, cgamma; @@ -568,8 +561,8 @@ void bn_eigen2x2( fastf_t *val1, fastf_t *val2, - fastf_t *vec1, - fastf_t *vec2, + vect_t vec1, + vect_t vec2, fastf_t a, fastf_t b, fastf_t c) @@ -723,7 +716,7 @@ bn_mat_fromto( void -bn_mat_xrot(fastf_t *m, double sinx, double cosx) +bn_mat_xrot(mat_t m, double sinx, double cosx) { m[0] = 1.0; m[1] = 0.0; @@ -746,7 +739,7 @@ bn_mat_xrot(fastf_t *m, double sinx, double cosx) void -bn_mat_yrot(fastf_t *m, double siny, double cosy) +bn_mat_yrot(mat_t m, double siny, double cosy) { m[0] = cosy; m[1] = 0.0; @@ -769,7 +762,7 @@ bn_mat_yrot(fastf_t *m, double siny, double cosy) void -bn_mat_zrot(fastf_t *m, double sinz, double cosz) +bn_mat_zrot(mat_t m, double sinz, double cosz) { m[0] = cosz; m[1] = -sinz; @@ -847,7 +840,7 @@ bn_mat_lookat(mat_t rot, const vect_t dir, int yflip) void -bn_vec_ortho(register vect_t out, register const vect_t in) +bn_vec_ortho(vect_t out, const vect_t in) { register int j, k; register fastf_t f; diff --git a/src/libbn/msr.c b/src/libbn/msr.c index 29ef48b8b31..085c5b9ed5c 100644 --- a/src/libbn/msr.c +++ b/src/libbn/msr.c @@ -1,7 +1,7 @@ /* M S R . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/multipoly.c b/src/libbn/multipoly.c index c38ddbe65bb..ce11cdd5251 100644 --- a/src/libbn/multipoly.c +++ b/src/libbn/multipoly.c @@ -1,7 +1,7 @@ /* M U L T I P O L Y . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/noise.c b/src/libbn/noise.c index 1ebb7a2c578..b68d7784946 100644 --- a/src/libbn/noise.c +++ b/src/libbn/noise.c @@ -1,7 +1,7 @@ /* N O I S E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/numgen.c b/src/libbn/numgen.c index cd9fd8899ef..f386ff567be 100644 --- a/src/libbn/numgen.c +++ b/src/libbn/numgen.c @@ -1,7 +1,7 @@ /* N U M G E N . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/plane.cpp b/src/libbn/plane.cpp index a9f44dcd568..d55a1ac6917 100644 --- a/src/libbn/plane.cpp +++ b/src/libbn/plane.cpp @@ -1,7 +1,7 @@ /* P L A N E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/plot3.c b/src/libbn/plot3.c index 8b90270f983..8b8153d08c0 100644 --- a/src/libbn/plot3.c +++ b/src/libbn/plot3.c @@ -1,7 +1,7 @@ /* P L O T 3 . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -759,6 +759,266 @@ pdv_3ray(FILE *fp, const fastf_t *pt, const fastf_t *dir, double t) pdv_3cont(fp, tip); } + +/* + * Routines to validate a plot file + */ + +static int +read_short(FILE *fp, int cnt, int mode) +{ + if (mode == PL_OUTPUT_MODE_BINARY) { + for (int i = 0; i < cnt * 2; i++) { + if (getc(fp) == EOF) + return 1; + } + return 0; + } + if (mode == PL_OUTPUT_MODE_TEXT) { + int ret; + double val; + for (int i = 0; i < cnt; i++) { + ret = fscanf(fp, "%lf", &val); + if (ret != 1) + return 1; + } + return 0; + } + + return 1; +} + +static int +read_ieee(FILE *fp, int cnt, int mode) +{ + size_t ret; + if (mode == PL_OUTPUT_MODE_BINARY) { + for (int i = 0; i < cnt; i++) { + char inbuf[SIZEOF_NETWORK_DOUBLE]; + ret = fread(inbuf, SIZEOF_NETWORK_DOUBLE, 1, fp); + if (ret != 1) + return 1; + } + return 0; + } + if (mode == PL_OUTPUT_MODE_TEXT) { + double val; + for (int i = 0; i < cnt; i++) { + ret = (size_t)fscanf(fp, "%lf", &val); + if (ret != 1) + return 1; + } + return 0; + } + return 1; +} + +static int +read_tstring(FILE *fp, int mode) +{ + int ret; + if (mode == PL_OUTPUT_MODE_BINARY) { + int str_done = 0; + int cc; + while (!feof(fp) && !str_done) { + cc = getc(fp); + if (cc == '\n') + str_done = 1; + } + return 0; + } + if (mode == PL_OUTPUT_MODE_TEXT) { + char carg[256]; + ret = fscanf(fp, "%256s\n", &carg[0]); + if (ret != 1) + return 1; + return 0; + } + return 1; +} + +int +plot3_invalid(FILE *fp, int mode) +{ + + /* Only two valid modes */ + if (mode != PL_OUTPUT_MODE_BINARY && mode != PL_OUTPUT_MODE_TEXT) { + return 1; + } + + /* A non-readable file isn't a valid file */ + if (!fp) { + return 1; + } + + int i = 0; + int c; + unsigned int tchar = 0; + + while (!feof(fp) && (c=getc(fp)) != EOF) { + if (c < 'A' || c > 'z') { + return 1; + } + switch (c) { + case 'C': + // TCHAR, 3, "color" + if (mode == PL_OUTPUT_MODE_BINARY) { + for (i = 0; i < 3; i++) { + if (getc(fp) == EOF) + return 1; + } + } + if (mode == PL_OUTPUT_MODE_TEXT) { + i = fscanf(fp, "%u", &tchar); + if (i != 1) + return 1; + } + break; + case 'F': + // TNONE, 0, "flush" + break; + case 'L': + // TSHORT, 6, "3line" + if (read_short(fp, 6, mode)) + return 1; + break; + case 'M': + // TSHORT, 3, "3move" + if (read_short(fp, 3, mode)) + return 1; + break; + case 'N': + // TSHORT, 3, "3cont" + if (read_short(fp, 3, mode)) + return 1; + break; + case 'O': + // TIEEE, 3, "d_3move" + if (read_ieee(fp, 3, mode)) + return 1; + break; + case 'P': + // TSHORT, 3, "3point" + if (read_short(fp, 3, mode)) + return 1; + break; + case 'Q': + // TIEEE, 3, "d_3cont" + if (read_ieee(fp, 3, mode)) + return 1; + break; + case 'S': + // TSHORT, 6, "3space" + if (read_short(fp, 6, mode)) + return 1; + break; + case 'V': + // TIEEE, 6, "d_3line" + if (read_ieee(fp, 6, mode)) + return 1; + break; + case 'W': + // TIEEE, 6, "d_3space" + if (read_ieee(fp, 6, mode)) + return 1; + break; + case 'X': + // TIEEE, 3, "d_3point" + if (read_ieee(fp, 3, mode)) + return 1; + break; + case 'a': + // TSHORT, 6, "arc" + if (read_short(fp, 6, mode)) + return 1; + break; + case 'c': + // TSHORT, 3, "circle" + if (read_short(fp, 3, mode)) + return 1; + break; + case 'e': + // TNONE, 0, "erase" + break; + case 'f': + // TSTRING, 1, "linmod" + if (read_tstring(fp, mode)) + return 1; + break; + case 'i': + // TIEEE, 3, "d_circle" + if (read_ieee(fp, 3, mode)) + return 1; + break; + case 'l': + // TSHORT, 4, "line" + if (read_short(fp, 4, mode)) + return 1; + break; + case 'm': + // TSHORT, 2, "move" + if (read_short(fp, 2, mode)) + return 1; + break; + case 'n': + // TSHORT, 2, "cont" + if (read_short(fp, 2, mode)) + return 1; + break; + case 'o': + // TIEEE, 2, "d_move" + if (read_ieee(fp, 2, mode)) + return 1; + break; + case 'p': + // TSHORT, 2, "point" + if (read_short(fp, 2, mode)) + return 1; + break; + case 'q': + // TIEEE, 2, "d_cont" + if (read_ieee(fp, 2, mode)) + return 1; + break; + case 'r': + // TIEEE, 6, "d_arc" + if (read_ieee(fp, 6, mode)) + return 1; + break; + case 's': + // TSHORT, 4, "space" + if (read_short(fp, 4, mode)) + return 1; + break; + case 't': + // TSTRING, 1, "label" + if (read_tstring(fp, mode)) + return 1; + break; + case 'v': + // TIEEE, 4, "d_line" + if (read_ieee(fp, 4, mode)) + return 1; + break; + case 'w': + // TIEEE, 4, "d_space" + if (read_ieee(fp, 4, mode)) + return 1; + break; + case 'x': + // TIEEE, 2, "d_point" + if (read_ieee(fp, 2, mode)) + return 1; + break; + default: + return 1; + break; + }; + } + + return 0; +} + /** @} */ /* * Local Variables: diff --git a/src/libbn/poly.c b/src/libbn/poly.c index 6d6a615a181..9d348a9311b 100644 --- a/src/libbn/poly.c +++ b/src/libbn/poly.c @@ -1,7 +1,7 @@ /* P O L Y . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/qmath.c b/src/libbn/qmath.c index a50bb9705e2..4d38ea346d0 100644 --- a/src/libbn/qmath.c +++ b/src/libbn/qmath.c @@ -1,7 +1,7 @@ /* Q M A T H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/rand.c b/src/libbn/rand.c index 001d3f65231..330aa144ffd 100644 --- a/src/libbn/rand.c +++ b/src/libbn/rand.c @@ -1,7 +1,7 @@ /* R A N D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/randsph.c b/src/libbn/randsph.c index 666478d8fdc..5651e1ae4eb 100644 --- a/src/libbn/randsph.c +++ b/src/libbn/randsph.c @@ -1,7 +1,7 @@ /* R A N D S P H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/scale.c b/src/libbn/scale.c index e8f182b8e57..a67b6c8add7 100644 --- a/src/libbn/scale.c +++ b/src/libbn/scale.c @@ -1,7 +1,7 @@ /* S C A L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/sobolseq.c b/src/libbn/sobol.c similarity index 73% rename from src/libbn/sobolseq.c rename to src/libbn/sobol.c index 0cf3e26e203..ea2ad62d2a9 100644 --- a/src/libbn/sobolseq.c +++ b/src/libbn/sobol.c @@ -20,11 +20,9 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -/* Generation of Sobol sequences in up to 1111 dimensions, based on the - algorithms described in: - P. Bratley and B. L. Fox, Algorithm 659, ACM Trans. - Math. Soft. 14 (1), 88-100 (1988), - as modified by: +/* Generation of Sobol sequences in up to 1111 dimensions, based on + the algorithms described in: P. Bratley and B. L. Fox, Algorithm + 659, ACM Trans. Math. Soft. 14 (1), 88-100 (1988), as modified by: S. Joe and F. Y. Kuo, ACM Trans. Math. Soft 29 (1), 49-57 (2003). Note that the code below was written without even looking at the @@ -41,19 +39,23 @@ dimensions compared to the table of published numbers (to the 5 published significant digits). - This is not to say that the authors above should not be credited for - their clear description of the algorithm (and their tabulation of - the critical numbers). Please cite them. Just that I needed - a free/open-source implementation. */ + This is not to say that the authors above should not be credited + for their clear description of the algorithm (and their tabulation + of the critical numbers). Please cite them. Just that I needed a + free/open-source implementation. */ #include "common.h" + #include #include + +#include "bu/assert.h" #include "bu/malloc.h" #include "bn/rand.h" #include "bn/sobol.h" #include "soboldata.h" + /* Period parameters */ #define NL_N 624 #define NL_M 397 @@ -64,6 +66,7 @@ /* Maximum supported dimension of Sobol output array */ #define SOBOL_MAXDIM 1111 + struct bn_soboldata { unsigned sdim; /* dimension of sequence being generated */ uint32_t *mdata; /* array of length 32 * sdim */ @@ -76,6 +79,7 @@ struct bn_soboldata { double *cvec; /* The current sequence vector */ }; + /* initializes NLmt[N] with a seed */ static void nlopt_init_genrand(struct bn_soboldata *sd, unsigned long s) { @@ -91,7 +95,8 @@ static void nlopt_init_genrand(struct bn_soboldata *sd, unsigned long s) } } -/* generates a random number on [0,0xffffffff]-interval */ + +/* generates a random number on [0, 0xffffffff]-interval */ static uint32_t nlopt_genrand_int32(struct bn_soboldata *sd) { uint32_t y; @@ -128,29 +133,31 @@ static uint32_t nlopt_genrand_int32(struct bn_soboldata *sd) return y; } -/* generates a random number on [0,1) with 53-bit resolution*/ + +/* generates a random number on [0, 1) with 53-bit resolution*/ static double nlopt_genrand_res53(struct bn_soboldata *sd) { - uint32_t a=nlopt_genrand_int32(sd)>>5, b=nlopt_genrand_int32(sd)>>6; + uint32_t a=nlopt_genrand_int32(sd)>>5; + uint32_t b=nlopt_genrand_int32(sd)>>6; return(a*67108864.0+b)*(1.0/9007199254740992.0); } /* These real versions are due to Isaku Wada, 2002/01/09 added */ -/* generate uniform random number in [a,b) with 53-bit resolution, - * added by SGJ. Not static because we use this in libbn testing, - * but it is not public API. */ +/* generate uniform random number in [a, b) with 53-bit resolution, + * added by SGJ. Not static because we use this in libbn testing, but + * it is not public API. */ BN_EXPORT double _sobol_urand(struct bn_soboldata *sd, double a, double b) { return(a + (b - a) * nlopt_genrand_res53(sd)); } + /* Return position (0, 1, ...) of rightmost (least-significant) zero bit in n. * * This code uses a 32-bit version of algorithm to find the rightmost * one bit in Knuth, _The Art of Computer Programming_, volume 4A - * (draft fascicle), section 7.1.3, "Bitwise tricks and - * techniques." + * (draft fascicle), section 7.1.3, "Bitwise tricks and techniques." * * Assumes n has a zero bit, i.e. n < 2^32 - 1. * @@ -162,23 +169,25 @@ static unsigned rightzero32(uint32_t n) return __builtin_ctz(~n); /* gcc builtin for version >= 3.4 */ #else const uint32_t a = 0x05f66a47; /* magic number, found by brute force */ - static const unsigned decode[32] = {0,1,2,26,23,3,15,27,24,21,19,4,12,16,28,6,31,25,22,14,20,18,11,5,30,13,17,10,29,9,8,7}; + static const unsigned decode[32] = {0, 1, 2, 26, 23, 3, 15, 27, 24, 21, 19, 4, 12, 16, 28, 6, 31, 25, 22, 14, 20, 18, 11, 5, 30, 13, 17, 10, 29, 9, 8, 7}; n = ~n; /* change to rightmost-one problem */ - n = a * (n & (-n)); /* store in n to make sure mult. is 32 bits */ + n = a * (n & (~n + 1u)); /* store in n to make sure mult. is 32 bits */ return decode[n >> 27]; #endif } + /* generate the next term x_{n+1} in the Sobol sequence, as an array - x[sdim] of numbers in (0,1). Returns 1 on success, 0 on failure + x[sdim] of numbers in (0, 1). Returns 1 on success, 0 on failure (if too many #'s generated) */ static int sobol_gen(struct bn_soboldata *sd, double *x) { unsigned c, b, i, sdim; - if (sd->n == 4294967295U) return 0; /* n == 2^32 - 1 ... we would - need to switch to a 64-bit version - to generate more terms. */ + if (sd->n == 4294967295U) + return 0; /* n == 2^32 - 1 ... we would need to switch to a + 64-bit version to generate more terms. */ + c = rightzero32(sd->n++); sdim = sd->sdim; for (i = 0; i < sdim; ++i) { @@ -196,26 +205,28 @@ static int sobol_gen(struct bn_soboldata *sd, double *x) return 1; } -/* next vector x[sdim] in Sobol sequence, with each x[i] in (0,1) */ -static void bn_sobol_next_01(struct bn_soboldata *s) + +/* next vector x[sdim] in Sobol sequence, with each x[i] in (0, 1) */ +static void sobol_next_01(struct bn_soboldata *s) { if (!sobol_gen(s, s->cvec)) { /* fall back on pseudo random numbers in the unlikely event that we exceed 2^32-1 points */ unsigned int i; for (i = 0; i < s->sdim; ++i) - s->cvec[i] = _sobol_urand(s, 0.0,1.0); + s->cvec[i] = _sobol_urand(s, 0.0, 1.0); } } + static int sobol_init(struct bn_soboldata *sd, unsigned sdim, unsigned long seed) { - unsigned i,j; + unsigned i, j; - if (!sdim || sdim > MAXDIM) return 0; + if (!sdim || sdim > MAXDIM) + return 0; - sd->mdata = (uint32_t *) bu_malloc(sizeof(uint32_t) * (sdim * 32), "sobol mdata"); - if (!sd->mdata) return 0; + sd->mdata = (uint32_t *)bu_calloc(sdim * 32, sizeof(uint32_t), "sobol mdata"); /* mti==N+1 means mt[N] is not initialized */ sd->NL_mti=NL_N+1; @@ -249,11 +260,8 @@ static int sobol_init(struct bn_soboldata *sd, unsigned sdim, unsigned long seed } } - sd->x = (uint32_t *) bu_malloc(sizeof(uint32_t) * sdim, "sobol x"); - if (!sd->x) { bu_free(sd->mdata, "sobol x"); return 0; } - - sd->b = (unsigned *) bu_malloc(sizeof(unsigned) * sdim, "sobol b"); - if (!sd->b) { bu_free(sd->x, "sobol x"); bu_free(sd->mdata, "sobol mdata"); return 0; } + sd->x = (uint32_t *)bu_calloc(sdim, sizeof(uint32_t), "sobol x"); + sd->b = (unsigned *)bu_calloc(sdim, sizeof(unsigned), "sobol b"); for (i = 0; i < sdim; ++i) { sd->x[i] = 0; @@ -263,61 +271,77 @@ static int sobol_init(struct bn_soboldata *sd, unsigned sdim, unsigned long seed sd->n = 0; sd->sdim = sdim; - if (seed) nlopt_init_genrand(sd, seed); + if (seed) + nlopt_init_genrand(sd, seed); return 1; } +/********************************************************************/ +/* BN API for Sobol sequences */ -/************************************************************************/ -/* API to Sobol sequence creation */ -struct bn_soboldata *bn_sobol_create(unsigned int sdim, unsigned long seed) +struct bn_soboldata * +bn_sobol_create(unsigned int sdim, unsigned long seed) { struct bn_soboldata *s = NULL; - if (sdim > BN_SOBOL_MAXDIM) return NULL; - s = (struct bn_soboldata *) bu_malloc(sizeof(struct bn_soboldata), "sobol data"); - if (!s) return NULL; - s->cvec = (double *)bu_malloc(sizeof(double) * SOBOL_MAXDIM, "results array"); - if (!sobol_init(s, sdim, seed)) { bu_free(s, "sobol data"); return NULL; } + BU_ASSERT(sdim <= BN_SOBOL_MAXDIM); + + s = (struct bn_soboldata *)bu_calloc(1, sizeof(struct bn_soboldata), "sobol data"); + s->cvec = (double *)bu_calloc(SOBOL_MAXDIM, sizeof(double), "results array"); + + sobol_init(s, sdim, seed); + return s; } -void bn_sobol_destroy(struct bn_soboldata *sd) + +void +bn_sobol_destroy(struct bn_soboldata *sd) { - if (sd) { - bu_free(sd->mdata, "sobol mdata"); - bu_free(sd->x, "sobol x"); - bu_free(sd->b, "sobol b"); - bu_free(sd->cvec, "sobol cvec"); - bu_free(sd, "sobol"); - } + if (!sd) + return; + + bu_free(sd->mdata, "sobol mdata"); + bu_free(sd->x, "sobol x"); + bu_free(sd->b, "sobol b"); + bu_free(sd->cvec, "sobol cvec"); + bu_free(sd, "sobol"); } -/* return next vector in Sobol sequence, scaled to (lb[i], ub[i]) interval */ -double *bn_sobol_next(struct bn_soboldata *s, const double *lb, const double *ub) + +double * +bn_sobol_next(struct bn_soboldata *s, const double *lb, const double *ub) { unsigned int i; - bn_sobol_next_01(s); + + sobol_next_01(s); + if (lb && ub) { for (i = 0; i < s->sdim; ++i) { s->cvec[i] = lb[i] + (ub[i] - lb[i]) * s->cvec[i]; } } + return s->cvec; } -/* Joe and Kuo (2003), per Acworth et al (1998) */ -void bn_sobol_skip(struct bn_soboldata *s, unsigned n) + +void +bn_sobol_skip(struct bn_soboldata *s, unsigned n) { - if (s) { - unsigned int k = 1; - while (k*2 < n) k *= 2; - while (k-- > 0) sobol_gen(s, s->cvec); - } + if (!s) + return; + + unsigned int k = 1; + while (k*2 < n) + k *= 2; + while (k-- > 0) + sobol_gen(s, s->cvec); } + /* * Local Variables: * mode: C diff --git a/src/libbn/soboldata.h b/src/libbn/soboldata.h index e16b27020d6..218fa0f68a6 100644 --- a/src/libbn/soboldata.h +++ b/src/libbn/soboldata.h @@ -20,8 +20,8 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ -#ifndef SOBOLSEQ_H -#define SOBOLSEQ_H +#ifndef SOBOLDATA_H +#define SOBOLDATA_H #include "common.h" @@ -879,4 +879,4 @@ static const uint32_t sobol_minit[MAXDEG+1][MAXDIM-1] = { 6737,2995,7235,7713,973,4821,2377,1673,1,6541} }; -#endif +#endif /* SOBOLDATA_H */ diff --git a/src/libbn/sphmap.c b/src/libbn/sphmap.c index 8d9e0f02205..3f92e062bbc 100644 --- a/src/libbn/sphmap.c +++ b/src/libbn/sphmap.c @@ -1,7 +1,7 @@ /* S P H M A P . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/str.c b/src/libbn/str.c index 8da742c0850..05db5c2427a 100644 --- a/src/libbn/str.c +++ b/src/libbn/str.c @@ -1,7 +1,7 @@ /* S T R . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/symbol.c b/src/libbn/symbol.c index c2ace00e215..c3191b3b160 100644 --- a/src/libbn/symbol.c +++ b/src/libbn/symbol.c @@ -1,7 +1,7 @@ /* S Y M B O L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tabdata.c b/src/libbn/tabdata.c index b39eb589e97..593f98f8209 100644 --- a/src/libbn/tabdata.c +++ b/src/libbn/tabdata.c @@ -1,7 +1,7 @@ /* T A B D A T A . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -25,6 +25,7 @@ #include "bio.h" #include "bu/debug.h" +#include "bu/assert.h" #include "bu/log.h" #include "bu/malloc.h" #include "bu/parallel.h" @@ -915,7 +916,7 @@ bn_tabdata_binary_read(const char *filename, size_t num, const struct bn_table * char *cp; size_t nbytes; size_t len; - int got; + ssize_t got; int fd; size_t i; @@ -947,7 +948,7 @@ bn_tabdata_binary_read(const char *filename, size_t num, const struct bn_table * perror(filename); bu_log("bn_tabdata_binary_read read error on \"%s\"\n", filename); } else { - bu_log("bn_tabdata_binary_read(%s) expected %zu got %d\n", filename, len, got); + bu_log("bn_tabdata_binary_read(%s) expected %zu got %zd\n", filename, len, got); } bu_free(data, "bn_tabdata[]"); bu_semaphore_acquire(BU_SEM_SYSCALL); diff --git a/src/libbn/tests/CMakeLists.txt b/src/libbn/tests/CMakeLists.txt index 0fa6dd90519..3d10fa0a538 100644 --- a/src/libbn/tests/CMakeLists.txt +++ b/src/libbn/tests/CMakeLists.txt @@ -34,6 +34,7 @@ endforeach(srcfile ${bn_test_srcs}) # Generate bn_test.c file and bnild it include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../..) configure_file(bn_test.c.in "${CMAKE_CURRENT_BINARY_DIR}/bn_test.c" @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/bn_test.c") BRLCAD_ADDEXEC(bn_test "${CMAKE_CURRENT_BINARY_DIR}/bn_test.c" libbn TEST) # Housekeeping for included source files @@ -47,23 +48,28 @@ BRLCAD_ADDEXEC(bntester bntester.c "libbu;libbn" TEST) # WIP - needs to become real test BRLCAD_ADDEXEC(bn_randsph randsph.c "libbu;libbn" TEST) +# This test program is being kept separate because the plot3 logic really +# should move, and when it does it will be easier to move the test if it +# is not tied into the bn_test target +BRLCAD_ADDEXEC(bn_plot3 plot3.c "libbu;libbn" TEST) + # # ************ list.c tests ************* # # Format is: # COMMAND bn_test list <2 or 3 (the dimension)> X0,Y0[,Z0] X1,Y1[,Z1] Xn,Yn[,Zn] -add_test(NAME bn_list_2d_null COMMAND bn_test list 2) # NULL list of points -add_test(NAME bn_list_2d_1 COMMAND bn_test list 2 0,0) -add_test(NAME bn_list_2d_2 COMMAND bn_test list 2 0,0 1.64,1) -add_test(NAME bn_list_2d_3 COMMAND bn_test list 2 3,7 1,-5) -add_test(NAME bn_list_2d_4 COMMAND bn_test list 2 3,7 1,-5.321 67,0 0,100) +BRLCAD_ADD_TEST(NAME bn_list_2d_null COMMAND bn_test list 2) # NULL list of points +BRLCAD_ADD_TEST(NAME bn_list_2d_1 COMMAND bn_test list 2 0,0) +BRLCAD_ADD_TEST(NAME bn_list_2d_2 COMMAND bn_test list 2 0,0 1.64,1) +BRLCAD_ADD_TEST(NAME bn_list_2d_3 COMMAND bn_test list 2 3,7 1,-5) +BRLCAD_ADD_TEST(NAME bn_list_2d_4 COMMAND bn_test list 2 3,7 1,-5.321 67,0 0,100) -add_test(NAME bn_list_3d_null COMMAND bn_test list 3) # NULL list of points -add_test(NAME bn_list_3d_1 COMMAND bn_test list 3 0,0,0) -add_test(NAME bn_list_3d_2 COMMAND bn_test list 3 0,0,3 1.64,1,4) -add_test(NAME bn_list_3d_3 COMMAND bn_test list 3 3,7,8 1,-5,8) -add_test(NAME bn_list_3d_4 COMMAND bn_test list 3 3,7,8 1,-5.321,3 67,0,67 0,100,23) +BRLCAD_ADD_TEST(NAME bn_list_3d_null COMMAND bn_test list 3) # NULL list of points +BRLCAD_ADD_TEST(NAME bn_list_3d_1 COMMAND bn_test list 3 0,0,0) +BRLCAD_ADD_TEST(NAME bn_list_3d_2 COMMAND bn_test list 3 0,0,3 1.64,1,4) +BRLCAD_ADD_TEST(NAME bn_list_3d_3 COMMAND bn_test list 3 3,7,8 1,-5,8) +BRLCAD_ADD_TEST(NAME bn_list_3d_4 COMMAND bn_test list 3 3,7,8 1,-5.321,3 67,0,67 0,100,23) # @@ -71,14 +77,14 @@ add_test(NAME bn_list_3d_4 COMMAND bn_test list 3 3,7,8 1,-5 # #Format is: # COMMAND bn_test poly < void > void -add_test(NAME bn_poly_multiply COMMAND bn_test poly_multiply) -add_test(NAME bn_poly_scale COMMAND bn_test poly_scale) -add_test(NAME bn_poly_add COMMAND bn_test poly_add) +BRLCAD_ADD_TEST(NAME bn_poly_multiply COMMAND bn_test poly_multiply) +BRLCAD_ADD_TEST(NAME bn_poly_scale COMMAND bn_test poly_scale) +BRLCAD_ADD_TEST(NAME bn_poly_add COMMAND bn_test poly_add) # failure encountered, no output to indicate why (disabled in prep for release) -# add_test(NAME bn_poly_sub COMMAND bn_test poly_sub) +# BRLCAD_ADD_TEST(NAME bn_poly_sub COMMAND bn_test poly_sub) -add_test(NAME bn_poly_synthetic_div COMMAND bn_test poly_synthetic_div) +BRLCAD_ADD_TEST(NAME bn_poly_synthetic_div COMMAND bn_test poly_synthetic_div) # @@ -95,22 +101,22 @@ add_test(NAME bn_poly_synthetic_div COMMAND bn_test poly_synthetic # where P0-P2 are the points in question. An individual point is three # integer or floating point numbers separated by commas. -add_test(NAME bn_plane_3pts_collinear_false_1 COMMAND bn_test plane_pt 1 0,0,0 1,1,1 6,3,8 0) -add_test(NAME bn_plane_3pts_collinear_false_2 COMMAND bn_test plane_pt 1 0,0,0 6,3,8 1,1,1 0) -add_test(NAME bn_plane_3pts_collinear_false_3 COMMAND bn_test plane_pt 1 1,1,1 0,0,0 6,3,8 0) -add_test(NAME bn_plane_3pts_collinear_false_4 COMMAND bn_test plane_pt 1 1,1,1 6,3,8 0,0,0 0) -add_test(NAME bn_plane_3pts_collinear_false_5 COMMAND bn_test plane_pt 1 6,3,8 1,1,1 0,0,0 0) -add_test(NAME bn_plane_3pts_collinear_false_6 COMMAND bn_test plane_pt 1 6,3,8 0,0,0 1,1,1 0) -add_test(NAME bn_plane_3pts_collinear_same COMMAND bn_test plane_pt 1 5.3,8.1,9.6 5.3,8.1,9.6 5.3,8.1,9.6 1) -add_test(NAME bn_plane_3pts_collinear_partial_same_1 COMMAND bn_test plane_pt 1 6,2,4 6,2,4 9.3,8.1,4.6 1) -add_test(NAME bn_plane_3pts_collinear_partial_same_2 COMMAND bn_test plane_pt 1 9.3,8.1,4.6 6,2,4 6,2,4 1) -add_test(NAME bn_plane_3pts_collinear_partial_same_3 COMMAND bn_test plane_pt 1 6,2,4 9.3,8.1,4.6 6,2,4 1) -add_test(NAME bn_plane_3pts_collinear_true_1 COMMAND bn_test plane_pt 1 1.8,4.6,2.2 5.4,13.8,6.6 16.2,41.4,19.8 1) -add_test(NAME bn_plane_3pts_collinear_true_2 COMMAND bn_test plane_pt 1 1.8,4.6,2.2 16.2,41.4,19.8 5.4,13.8,6.6 1) -add_test(NAME bn_plane_3pts_collinear_true_3 COMMAND bn_test plane_pt 1 5.4,13.8,6.6 1.8,4.6,2.2 16.2,41.4,19.8 1) -add_test(NAME bn_plane_3pts_collinear_true_4 COMMAND bn_test plane_pt 1 5.4,13.8,6.6 16.2,41.4,19.8 1.8,4.6,2.2 1) -add_test(NAME bn_plane_3pts_collinear_true_5 COMMAND bn_test plane_pt 1 16.2,41.4,19.8 1.8,4.6,2.2 5.4,13.8,6.6 1) -add_test(NAME bn_plane_3pts_collinear_true_6 COMMAND bn_test plane_pt 1 16.2,41.4,19.8 5.4,13.8,6.6 1.8,4.6,2.2 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_false_1 COMMAND bn_test plane_pt 1 0,0,0 1,1,1 6,3,8 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_false_2 COMMAND bn_test plane_pt 1 0,0,0 6,3,8 1,1,1 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_false_3 COMMAND bn_test plane_pt 1 1,1,1 0,0,0 6,3,8 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_false_4 COMMAND bn_test plane_pt 1 1,1,1 6,3,8 0,0,0 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_false_5 COMMAND bn_test plane_pt 1 6,3,8 1,1,1 0,0,0 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_false_6 COMMAND bn_test plane_pt 1 6,3,8 0,0,0 1,1,1 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_same COMMAND bn_test plane_pt 1 5.3,8.1,9.6 5.3,8.1,9.6 5.3,8.1,9.6 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_partial_same_1 COMMAND bn_test plane_pt 1 6,2,4 6,2,4 9.3,8.1,4.6 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_partial_same_2 COMMAND bn_test plane_pt 1 9.3,8.1,4.6 6,2,4 6,2,4 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_partial_same_3 COMMAND bn_test plane_pt 1 6,2,4 9.3,8.1,4.6 6,2,4 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_true_1 COMMAND bn_test plane_pt 1 1.8,4.6,2.2 5.4,13.8,6.6 16.2,41.4,19.8 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_true_2 COMMAND bn_test plane_pt 1 1.8,4.6,2.2 16.2,41.4,19.8 5.4,13.8,6.6 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_true_3 COMMAND bn_test plane_pt 1 5.4,13.8,6.6 1.8,4.6,2.2 16.2,41.4,19.8 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_true_4 COMMAND bn_test plane_pt 1 5.4,13.8,6.6 16.2,41.4,19.8 1.8,4.6,2.2 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_true_5 COMMAND bn_test plane_pt 1 16.2,41.4,19.8 1.8,4.6,2.2 5.4,13.8,6.6 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_collinear_true_6 COMMAND bn_test plane_pt 1 16.2,41.4,19.8 5.4,13.8,6.6 1.8,4.6,2.2 1) # For function #2 (bn_3pts_distinct), the format is as follows: # @@ -119,16 +125,16 @@ add_test(NAME bn_plane_3pts_collinear_true_6 COMMAND bn_test plane_pt 1 # where P0-P2 are the points in question. An individual point # is three integer or floating point numbers separated by commas. -add_test(NAME bn_plane_3pts_distinct_false_all COMMAND bn_test plane_pt 2 5.3,8.6,9.1 5.3,8.6,9.1 5.3,8.6,9.1 0) -add_test(NAME bn_plane_3pts_distinct_false_1 COMMAND bn_test plane_pt 2 5.3,8.6,9.1 5.3,8.6,9.1 8.7,4.1,9.3 0) -add_test(NAME bn_plane_3pts_distinct_false_2 COMMAND bn_test plane_pt 2 5.3,8.6,9.1 8.7,4.1,9.3 5.3,8.6,9.1 0) -add_test(NAME bn_plane_3pts_distinct_false_3 COMMAND bn_test plane_pt 2 8.7,4.1,9.3 5.3,8.6,9.1 5.3,8.6,9.1 0) -add_test(NAME bn_plane_3pts_distinct_true_1 COMMAND bn_test plane_pt 2 8.7,4.1,9.3 7.5,9.2,4.1 5.3,8.6,9.1 1) -add_test(NAME bn_plane_3pts_distinct_true_2 COMMAND bn_test plane_pt 2 8.7,4.1,9.3 5.3,8.6,9.1 7.5,9.2,4.1 1) -add_test(NAME bn_plane_3pts_distinct_true_3 COMMAND bn_test plane_pt 2 5.3,8.6,9.1 8.7,4.1,9.3 7.5,9.2,4.1 1) -add_test(NAME bn_plane_3pts_distinct_true_4 COMMAND bn_test plane_pt 2 5.3,8.6,9.1 7.5,9.2,4.1 8.7,4.1,9.3 1) -add_test(NAME bn_plane_3pts_distinct_true_5 COMMAND bn_test plane_pt 2 7.5,9.2,4.1 8.7,4.1,9.3 5.3,8.6,9.1 1) -add_test(NAME bn_plane_3pts_distinct_true_6 COMMAND bn_test plane_pt 2 7.5,9.2,4.1 5.3,8.6,9.1 8.7,4.1,9.3 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_false_all COMMAND bn_test plane_pt 2 5.3,8.6,9.1 5.3,8.6,9.1 5.3,8.6,9.1 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_false_1 COMMAND bn_test plane_pt 2 5.3,8.6,9.1 5.3,8.6,9.1 8.7,4.1,9.3 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_false_2 COMMAND bn_test plane_pt 2 5.3,8.6,9.1 8.7,4.1,9.3 5.3,8.6,9.1 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_false_3 COMMAND bn_test plane_pt 2 8.7,4.1,9.3 5.3,8.6,9.1 5.3,8.6,9.1 0) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_true_1 COMMAND bn_test plane_pt 2 8.7,4.1,9.3 7.5,9.2,4.1 5.3,8.6,9.1 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_true_2 COMMAND bn_test plane_pt 2 8.7,4.1,9.3 5.3,8.6,9.1 7.5,9.2,4.1 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_true_3 COMMAND bn_test plane_pt 2 5.3,8.6,9.1 8.7,4.1,9.3 7.5,9.2,4.1 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_true_4 COMMAND bn_test plane_pt 2 5.3,8.6,9.1 7.5,9.2,4.1 8.7,4.1,9.3 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_true_5 COMMAND bn_test plane_pt 2 7.5,9.2,4.1 8.7,4.1,9.3 5.3,8.6,9.1 1) +BRLCAD_ADD_TEST(NAME bn_plane_3pts_distinct_true_6 COMMAND bn_test plane_pt 2 7.5,9.2,4.1 5.3,8.6,9.1 8.7,4.1,9.3 1) # For function #3 (bn_distsq_line3_pt3), the format is as follows: # @@ -137,10 +143,10 @@ add_test(NAME bn_plane_3pts_distinct_true_6 COMMAND bn_test plane_pt 2 # Where PT and DIR define the parametric line in question and A is the # point in question. -add_test(NAME bn_plane_distsq_line3_pt3_1 COMMAND bn_test plane_pt 3 0,0,0 1,1,1 0,0,0 0) -add_test(NAME bn_plane_distsq_line3_pt3_2 COMMAND bn_test plane_pt 3 -1,-1,-1 1,1,1 0,0,0 0) -add_test(NAME bn_plane_distsq_line3_pt3_3 COMMAND bn_test plane_pt 3 0,0,0 1,1,1 0,5,0 16.666666) -add_test(NAME bn_plane_distsq_line3_pt3_4 COMMAND bn_test plane_pt 3 5,6,4 9,3,8 -5,2,4 48.441558) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_line3_pt3_1 COMMAND bn_test plane_pt 3 0,0,0 1,1,1 0,0,0 0) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_line3_pt3_2 COMMAND bn_test plane_pt 3 -1,-1,-1 1,1,1 0,0,0 0) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_line3_pt3_3 COMMAND bn_test plane_pt 3 0,0,0 1,1,1 0,5,0 16.666666) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_line3_pt3_4 COMMAND bn_test plane_pt 3 5,6,4 9,3,8 -5,2,4 48.441558) # For function #4 (bn_distsq_pt3_lseg3_v2), the format is as follows: # @@ -149,12 +155,12 @@ add_test(NAME bn_plane_distsq_line3_pt3_4 COMMAND bn_test plane_pt 3 # Where A and B are the endpoints of the line segment, and P is the # point in question. -add_test(NAME bn_plane_distsq_pt3_lseg3_v2_case0_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 0,0,0 0 0) -add_test(NAME bn_plane_distsq_pt3_lseg3_v2_case1_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 -5,-5,-5 1 0) -add_test(NAME bn_plane_distsq_pt3_lseg3_v2_case2_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 5,5,5 2 0) -add_test(NAME bn_plane_distsq_pt3_lseg3_v2_case3_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 -10,-5,-10 3 50) -add_test(NAME bn_plane_distsq_pt3_lseg3_v2_case4_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 5,10,10 4 50) -add_test(NAME bn_plane_distsq_pt3_lseg3_v2_case5_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 0,-5,-5 5 16.666666) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_pt3_lseg3_v2_case0_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 0,0,0 0 0) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_pt3_lseg3_v2_case1_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 -5,-5,-5 1 0) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_pt3_lseg3_v2_case2_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 5,5,5 2 0) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_pt3_lseg3_v2_case3_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 -10,-5,-10 3 50) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_pt3_lseg3_v2_case4_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 5,10,10 4 50) +BRLCAD_ADD_TEST(NAME bn_plane_distsq_pt3_lseg3_v2_case5_1 COMMAND bn_test plane_pt 4 -5,-5,-5 5,5,5 0,-5,-5 5 16.666666) # For function #5 (bn_mk_plane_3pts), the format is as follows: # @@ -163,11 +169,11 @@ add_test(NAME bn_plane_distsq_pt3_lseg3_v2_case5_1 COMMAND bn_test plane_pt 4 # Where A, B, and C are the points in question. This test function # does not currently support checking the resultant plane. -add_test(NAME bn_plane_mk_plane_3pts_fail_same COMMAND bn_test plane_pt 5 0,0,0 0,0,0 0,0,0 -1) -add_test(NAME bn_plane_mk_plane_3pts_fail_collinear_1 COMMAND bn_test plane_pt 5 0,0,0 5,8,2 0,0,0 -1) -add_test(NAME bn_plane_mk_plane_3pts_fail_collinear_2 COMMAND bn_test plane_pt 5 5,8,2 0,0,0 0,0,0 -1) -add_test(NAME bn_plane_mk_plane_3pts_fail_collinear_3 COMMAND bn_test plane_pt 5 -10,-10,-10 0,0,0 5,5,5 -1) -add_test(NAME bn_plane_mk_plane_3pts_succeed COMMAND bn_test plane_pt 5 -10,-10,-10 7,3,8 19,4,2 0) +BRLCAD_ADD_TEST(NAME bn_plane_mk_plane_3pts_fail_same COMMAND bn_test plane_pt 5 0,0,0 0,0,0 0,0,0 -1) +BRLCAD_ADD_TEST(NAME bn_plane_mk_plane_3pts_fail_collinear_1 COMMAND bn_test plane_pt 5 0,0,0 5,8,2 0,0,0 -1) +BRLCAD_ADD_TEST(NAME bn_plane_mk_plane_3pts_fail_collinear_2 COMMAND bn_test plane_pt 5 5,8,2 0,0,0 0,0,0 -1) +BRLCAD_ADD_TEST(NAME bn_plane_mk_plane_3pts_fail_collinear_3 COMMAND bn_test plane_pt 5 -10,-10,-10 0,0,0 5,5,5 -1) +BRLCAD_ADD_TEST(NAME bn_plane_mk_plane_3pts_succeed COMMAND bn_test plane_pt 5 -10,-10,-10 7,3,8 19,4,2 0) # For COMMAND bn_test plane_dist, the input format is as follows: @@ -182,9 +188,9 @@ add_test(NAME bn_plane_mk_plane_3pts_succeed COMMAND bn_test plane_pt 5 # question. An individual point is three integer or floating point # numbers separated by commas. -add_test(NAME bn_plane_dist_pt3_line3_case0_1 COMMAND bn_test plane_dist 2 -5,-5,-5 1,1,1 -5,-5,-5 0 0 -5,-5,-5) -add_test(NAME bn_plane_dist_pt3_line3_case1_1 COMMAND bn_test plane_dist 2 -5,-5,-5 1,1,1 0,0,0 1 0.5 0,0,0) -add_test(NAME bn_plane_dist_pt3_line3_case2_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 0,-5,-5 2 4.08248 -3.33333,-3.33333,-3.33333) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_line3_case0_1 COMMAND bn_test plane_dist 2 -5,-5,-5 1,1,1 -5,-5,-5 0 0 -5,-5,-5) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_line3_case1_1 COMMAND bn_test plane_dist 2 -5,-5,-5 1,1,1 0,0,0 1 0.5 0,0,0) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_line3_case2_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 0,-5,-5 2 4.08248 -3.33333,-3.33333,-3.33333) # For function #2 (bn_dist_pt3_lseg3), the format is as follows: # @@ -194,12 +200,12 @@ add_test(NAME bn_plane_dist_pt3_line3_case2_1 COMMAND bn_test plane_dist 2 -5, # question. An individual point is three integer or floating point # numbers separated by commas. -add_test(NAME bn_plane_dist_pt3_lseg3_case0_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 0,0,0 0 0.5 0,0,0) -add_test(NAME bn_plane_dist_pt3_lseg3_case1_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 -5,-5,-5 1 0 -5,-5,-5) -add_test(NAME bn_plane_dist_pt3_lseg3_case2_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 5,5,5 2 0 5,5,5) -add_test(NAME bn_plane_dist_pt3_lseg3_case3_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 -10,-5,-10 3 7.07107 -5,-5,-5) -add_test(NAME bn_plane_dist_pt3_lseg3_case4_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 5,10,10 4 7.07107 5,5,5) -add_test(NAME bn_plane_dist_pt3_lseg3_case5_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 0,-5,-5 5 4.08248 -3.33333,-3.33333,-3.33333) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_lseg3_case0_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 0,0,0 0 0.5 0,0,0) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_lseg3_case1_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 -5,-5,-5 1 0 -5,-5,-5) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_lseg3_case2_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 5,5,5 2 0 5,5,5) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_lseg3_case3_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 -10,-5,-10 3 7.07107 -5,-5,-5) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_lseg3_case4_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 5,10,10 4 7.07107 5,5,5) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_lseg3_case5_1 COMMAND bn_test plane_dist 2 -5,-5,-5 5,5,5 0,-5,-5 5 4.08248 -3.33333,-3.33333,-3.33333) # For function #3 (bn_dist_pt3_pt3), the format is as follows: # @@ -208,8 +214,8 @@ add_test(NAME bn_plane_dist_pt3_lseg3_case5_1 COMMAND bn_test plane_dist 2 -5, # where A and B are the points in question. An individual point is # three integer or floating point numbers separated by commas. -add_test(NAME bn_plane_dist_pt3_pt3_same COMMAND bn_test plane_dist 3 0,0,0 0,0,0 0) -add_test(NAME bn_plane_dist_pt3_pt3_1 COMMAND bn_test plane_dist 3 0,0,0 1,1,1 1.732051) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_pt3_same COMMAND bn_test plane_dist 3 0,0,0 0,0,0 0) +BRLCAD_ADD_TEST(NAME bn_plane_dist_pt3_pt3_1 COMMAND bn_test plane_dist 3 0,0,0 1,1,1 1.732051) # For COMMAND bn_test plane_isect, the input format is as follows: # @@ -223,14 +229,14 @@ add_test(NAME bn_plane_dist_pt3_pt3_1 COMMAND bn_test plane_dist 3 0,0,0 1, # line segment. An individual point is three integer or floating point # numbers separated by commas. -add_test(NAME bn_plane_isect_line_lseg_case-4_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,0 0,0,0 -4 0) -add_test(NAME bn_plane_isect_line_lseg_case-3_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,1 0,0,5 -3 8.660) -add_test(NAME bn_plane_isect_line_lseg_case-2_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,-5 0,0,-1 -2 8.660) -add_test(NAME bn_plane_isect_line_lseg_case-1_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 -5,-5,-6 0,0,-1 -1 0) -add_test(NAME bn_plane_isect_line_lseg_case0_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 1,1,1 5,5,5 0 10.392) -add_test(NAME bn_plane_isect_line_lseg_case1_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,0 0,0,5 1 8.660) -add_test(NAME bn_plane_isect_line_lseg_case2_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,-5 0,0,0 2 8.660) -add_test(NAME bn_plane_isect_line_lseg_case3_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,-5 0,0,5 3 8.660) +BRLCAD_ADD_TEST(NAME bn_plane_isect_line_lseg_case-4_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,0 0,0,0 -4 0) +BRLCAD_ADD_TEST(NAME bn_plane_isect_line_lseg_case-3_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,1 0,0,5 -3 8.660) +BRLCAD_ADD_TEST(NAME bn_plane_isect_line_lseg_case-2_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,-5 0,0,-1 -2 8.660) +BRLCAD_ADD_TEST(NAME bn_plane_isect_line_lseg_case-1_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 -5,-5,-6 0,0,-1 -1 0) +BRLCAD_ADD_TEST(NAME bn_plane_isect_line_lseg_case0_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 1,1,1 5,5,5 0 10.392) +BRLCAD_ADD_TEST(NAME bn_plane_isect_line_lseg_case1_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,0 0,0,5 1 8.660) +BRLCAD_ADD_TEST(NAME bn_plane_isect_line_lseg_case2_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,-5 0,0,0 2 8.660) +BRLCAD_ADD_TEST(NAME bn_plane_isect_line_lseg_case3_1 COMMAND bn_test plane_isect 1 -5,-5,-5 1,1,1 0,0,-5 0,0,5 3 8.660) # For function #2 (bn_isect_lseg3_lseg3), the format is as follows: # @@ -242,14 +248,14 @@ add_test(NAME bn_plane_isect_line_lseg_case3_1 COMMAND bn_test plane_isect 1 # individual point is three integer or floating point numbers # separated by commas. -add_test(NAME bn_plane_isect_lseg3_lseg3_case-3_1 COMMAND bn_test plane_isect 2 0,0,0 0,1,1 0,0,1 0,-1,1 -3 0.5 -0.5) -add_test(NAME bn_plane_isect_lseg3_lseg3_case-3_2 COMMAND bn_test plane_isect 2 0,0,0 0,1,1 0,1,0 0,-0.25,0.25 -3 0.5 2) -add_test(NAME bn_plane_isect_lseg3_lseg3_case-2_1 COMMAND bn_test plane_isect 2 0,0,0 0,1,1 1,1,1 0,1,1 -2 0 0) -add_test(NAME bn_plane_isect_lseg3_lseg3_case-1_1 COMMAND bn_test plane_isect 2 -5,-5,-5 3,3,3 0,0,0 -1,-1,-1 -1 1.666667 1.333333) -add_test(NAME bn_plane_isect_lseg3_lseg3_case0_1 COMMAND bn_test plane_isect 2 -5,-5,-5 3,3,3 0,0,0 -2,-2,-2 0 1.666667 1) -add_test(NAME bn_plane_isect_lseg3_lseg3_case0_2 COMMAND bn_test plane_isect 2 -5,-5,-5 3,3,3 0,0,0 -3,-3,-3 0 1.666667 0.666667) -add_test(NAME bn_plane_isect_lseg3_lseg3_case0_3 COMMAND bn_test plane_isect 2 -5,-5,-5 5,5,5 -4,-4,-4 2,2,2 0 0.2 0.6) -add_test(NAME bn_plane_isect_lseg3_lseg3_case1_1 COMMAND bn_test plane_isect 2 0,0,0 0,1,1 0,1,0 0,-1,1 1 0.5 0.5) +BRLCAD_ADD_TEST(NAME bn_plane_isect_lseg3_lseg3_case-3_1 COMMAND bn_test plane_isect 2 0,0,0 0,1,1 0,0,1 0,-1,1 -3 0.5 -0.5) +BRLCAD_ADD_TEST(NAME bn_plane_isect_lseg3_lseg3_case-3_2 COMMAND bn_test plane_isect 2 0,0,0 0,1,1 0,1,0 0,-0.25,0.25 -3 0.5 2) +BRLCAD_ADD_TEST(NAME bn_plane_isect_lseg3_lseg3_case-2_1 COMMAND bn_test plane_isect 2 0,0,0 0,1,1 1,1,1 0,1,1 -2 0 0) +BRLCAD_ADD_TEST(NAME bn_plane_isect_lseg3_lseg3_case-1_1 COMMAND bn_test plane_isect 2 -5,-5,-5 3,3,3 0,0,0 -1,-1,-1 -1 1.666667 1.333333) +BRLCAD_ADD_TEST(NAME bn_plane_isect_lseg3_lseg3_case0_1 COMMAND bn_test plane_isect 2 -5,-5,-5 3,3,3 0,0,0 -2,-2,-2 0 1.666667 1) +BRLCAD_ADD_TEST(NAME bn_plane_isect_lseg3_lseg3_case0_2 COMMAND bn_test plane_isect 2 -5,-5,-5 3,3,3 0,0,0 -3,-3,-3 0 1.666667 0.666667) +BRLCAD_ADD_TEST(NAME bn_plane_isect_lseg3_lseg3_case0_3 COMMAND bn_test plane_isect 2 -5,-5,-5 5,5,5 -4,-4,-4 2,2,2 0 0.2 0.6) +BRLCAD_ADD_TEST(NAME bn_plane_isect_lseg3_lseg3_case1_1 COMMAND bn_test plane_isect 2 0,0,0 0,1,1 0,1,0 0,-1,1 1 0.5 0.5) # # ************ complex.c tests ************* @@ -265,11 +271,11 @@ add_test(NAME bn_plane_isect_lseg3_lseg3_case1_1 COMMAND bn_test plane_isect # where AP and BP are the numbers in question. An individual complex # number is two integer or floating point numbers separated by commas. -add_test(NAME bn_cx_div_same_1 COMMAND bn_test complex 1 1,3 1,3 1,0) -add_test(NAME bn_cx_div_same_2 COMMAND bn_test complex 1 3,1 3,1 1,0) -add_test(NAME bn_cx_div_dif_1 COMMAND bn_test complex 1 6.3,4.2 9.8,7.7 0.605678,-0.0473186) -add_test(NAME bn_cx_div_dif_2 COMMAND bn_test complex 1 0,0 1,1 0,0) -add_test(NAME bn_cx_div_by_0_1 COMMAND bn_test complex 1 1,1 0,0 1.0e20,1.0e20) +BRLCAD_ADD_TEST(NAME bn_cx_div_same_1 COMMAND bn_test complex 1 1,3 1,3 1,0) +BRLCAD_ADD_TEST(NAME bn_cx_div_same_2 COMMAND bn_test complex 1 3,1 3,1 1,0) +BRLCAD_ADD_TEST(NAME bn_cx_div_dif_1 COMMAND bn_test complex 1 6.3,4.2 9.8,7.7 0.605678,-0.0473186) +BRLCAD_ADD_TEST(NAME bn_cx_div_dif_2 COMMAND bn_test complex 1 0,0 1,1 0,0) +BRLCAD_ADD_TEST(NAME bn_cx_div_by_0_1 COMMAND bn_test complex 1 1,1 0,0 1.0e20,1.0e20) # For function #2 (bn_cx_mul/bn_cx_mul2), the format is as follows: # @@ -278,10 +284,10 @@ add_test(NAME bn_cx_div_by_0_1 COMMAND bn_test complex 1 1,1 0,0 1.0e20, # where AP and BP are the numbers in question. An individual complex # number is two integer or floating point numbers separated by commas. -add_test(NAME bn_cx_mul_0_1 COMMAND bn_test complex 2 5.2,3.8 0,0 0,0) -add_test(NAME bn_cx_mul_0_2 COMMAND bn_test complex 2 0,0 5.2,3.8 0,0) -add_test(NAME bn_cx_mul_inv_1 COMMAND bn_test complex 2 7.4,2.3 0.123231,-0.0383014 1,0) -add_test(NAME bn_cx_mul_inv_2 COMMAND bn_test complex 2 0.123231,-0.0383014 7.4,2.3 1,0) +BRLCAD_ADD_TEST(NAME bn_cx_mul_0_1 COMMAND bn_test complex 2 5.2,3.8 0,0 0,0) +BRLCAD_ADD_TEST(NAME bn_cx_mul_0_2 COMMAND bn_test complex 2 0,0 5.2,3.8 0,0) +BRLCAD_ADD_TEST(NAME bn_cx_mul_inv_1 COMMAND bn_test complex 2 7.4,2.3 0.123231,-0.0383014 1,0) +BRLCAD_ADD_TEST(NAME bn_cx_mul_inv_2 COMMAND bn_test complex 2 0.123231,-0.0383014 7.4,2.3 1,0) # For function #3 (bn_cx_sub), the format is as follows: # @@ -290,11 +296,11 @@ add_test(NAME bn_cx_mul_inv_2 COMMAND bn_test complex 2 0.123231,-0.0383 # where AP and BP are the numbers in question. An individual complex # number is two integer or floating point numbers separated by commas. -add_test(NAME bn_cx_sub_0_1 COMMAND bn_test complex 3 5.2,3.8 0,0 5.2,3.8) -add_test(NAME bn_cx_sub_0_2 COMMAND bn_test complex 3 0,0 5.2,3.8 -5.2,-3.8) -add_test(NAME bn_cx_sub_same_1 COMMAND bn_test complex 3 1.4,2.9 1.4,2.9 0,0) -add_test(NAME bn_cx_sub_dif_1 COMMAND bn_test complex 3 7.4,-2.3 8.9,6.4 -1.5,-8.7) -add_test(NAME bn_cx_sub_dif_2 COMMAND bn_test complex 3 8.9,6.4 7.4,-2.3 1.5,8.7) +BRLCAD_ADD_TEST(NAME bn_cx_sub_0_1 COMMAND bn_test complex 3 5.2,3.8 0,0 5.2,3.8) +BRLCAD_ADD_TEST(NAME bn_cx_sub_0_2 COMMAND bn_test complex 3 0,0 5.2,3.8 -5.2,-3.8) +BRLCAD_ADD_TEST(NAME bn_cx_sub_same_1 COMMAND bn_test complex 3 1.4,2.9 1.4,2.9 0,0) +BRLCAD_ADD_TEST(NAME bn_cx_sub_dif_1 COMMAND bn_test complex 3 7.4,-2.3 8.9,6.4 -1.5,-8.7) +BRLCAD_ADD_TEST(NAME bn_cx_sub_dif_2 COMMAND bn_test complex 3 8.9,6.4 7.4,-2.3 1.5,8.7) # For function #4 (bn_cx_add), the format is as follows: # @@ -303,11 +309,11 @@ add_test(NAME bn_cx_sub_dif_2 COMMAND bn_test complex 3 8.9,6.4 7.4,-2.3 # where AP and BP are the numbers in question. An individual complex # number is two integer or floating point numbers separated by commas. -add_test(NAME bn_cx_add_0_1 COMMAND bn_test complex 4 5.2,3.8 0,0 5.2,3.8) -add_test(NAME bn_cx_add_0_2 COMMAND bn_test complex 4 0,0 5.2,3.8 5.2,3.8) -add_test(NAME bn_cx_add_inv_1 COMMAND bn_test complex 4 1.4,2.9 -1.4,-2.9 0,0) -add_test(NAME bn_cx_add_dif_1 COMMAND bn_test complex 4 7.4,-2.3 8.9,6.4 16.3,4.1) -add_test(NAME bn_cx_add_dif_2 COMMAND bn_test complex 4 8.9,6.4 7.4,-2.3 16.3,4.1) +BRLCAD_ADD_TEST(NAME bn_cx_add_0_1 COMMAND bn_test complex 4 5.2,3.8 0,0 5.2,3.8) +BRLCAD_ADD_TEST(NAME bn_cx_add_0_2 COMMAND bn_test complex 4 0,0 5.2,3.8 5.2,3.8) +BRLCAD_ADD_TEST(NAME bn_cx_add_inv_1 COMMAND bn_test complex 4 1.4,2.9 -1.4,-2.9 0,0) +BRLCAD_ADD_TEST(NAME bn_cx_add_dif_1 COMMAND bn_test complex 4 7.4,-2.3 8.9,6.4 16.3,4.1) +BRLCAD_ADD_TEST(NAME bn_cx_add_dif_2 COMMAND bn_test complex 4 8.9,6.4 7.4,-2.3 16.3,4.1) # For function #5 (bn_cx_sqrt), the format is as follows: # @@ -316,11 +322,11 @@ add_test(NAME bn_cx_add_dif_2 COMMAND bn_test complex 4 8.9,6.4 7.4,-2.3 # where IP is the number in question. An individual complex number is # two integer or floating point numbers separated by commas. -add_test(NAME bn_cx_sqrt_1 COMMAND bn_test complex 5 0,2 1,1) -add_test(NAME bn_cx_sqrt_2 COMMAND bn_test complex 5 2,0 1.414214,0) -add_test(NAME bn_cx_sqrt_3 COMMAND bn_test complex 5 0,0 0,0) -add_test(NAME bn_cx_sqrt_4 COMMAND bn_test complex 5 6.3,4.2 2.63360,0.797389) -add_test(NAME bn_cx_sqrt_5 COMMAND bn_test complex 5 9.8,7.7 3.33640,1.15394) +BRLCAD_ADD_TEST(NAME bn_cx_sqrt_1 COMMAND bn_test complex 5 0,2 1,1) +BRLCAD_ADD_TEST(NAME bn_cx_sqrt_2 COMMAND bn_test complex 5 2,0 1.414214,0) +BRLCAD_ADD_TEST(NAME bn_cx_sqrt_3 COMMAND bn_test complex 5 0,0 0,0) +BRLCAD_ADD_TEST(NAME bn_cx_sqrt_4 COMMAND bn_test complex 5 6.3,4.2 2.63360,0.797389) +BRLCAD_ADD_TEST(NAME bn_cx_sqrt_5 COMMAND bn_test complex 5 9.8,7.7 3.33640,1.15394) # For function #6 (bn_cx_neg), the format is as follows: # @@ -329,10 +335,10 @@ add_test(NAME bn_cx_sqrt_5 COMMAND bn_test complex 5 9.8,7.7 3.33640, # where IP is the number in question. An individual complex number is # two integer or floating point numbers separated by commas. -add_test(NAME bn_cx_neg_0_1 COMMAND bn_test complex 6 0,0 0,0) -add_test(NAME bn_cx_neg_0_2 COMMAND bn_test complex 6 2,0 -2,0) -add_test(NAME bn_cx_neg_0_3 COMMAND bn_test complex 6 0,2 0,-2) -add_test(NAME bn_cx_neg_dif_1 COMMAND bn_test complex 6 6.3,4.2 -6.3,-4.2) +BRLCAD_ADD_TEST(NAME bn_cx_neg_0_1 COMMAND bn_test complex 6 0,0 0,0) +BRLCAD_ADD_TEST(NAME bn_cx_neg_0_2 COMMAND bn_test complex 6 2,0 -2,0) +BRLCAD_ADD_TEST(NAME bn_cx_neg_0_3 COMMAND bn_test complex 6 0,2 0,-2) +BRLCAD_ADD_TEST(NAME bn_cx_neg_dif_1 COMMAND bn_test complex 6 6.3,4.2 -6.3,-4.2) # For function #7 (bn_cx_conj), the format is as follows: # @@ -341,10 +347,10 @@ add_test(NAME bn_cx_neg_dif_1 COMMAND bn_test complex 6 6.3,4.2 -6.3,-4. # where IP is the number in question. An individual complex number is # two integer or floating point numbers separated by commas. -add_test(NAME bn_cx_conj_0_1 COMMAND bn_test complex 7 0,0 0,0) -add_test(NAME bn_cx_conj_0_2 COMMAND bn_test complex 7 2,0 2,0) -add_test(NAME bn_cx_conj_0_3 COMMAND bn_test complex 7 0,2 0,-2) -add_test(NAME bn_cx_conj_dif_1 COMMAND bn_test complex 7 6.3,4.2 6.3,-4.2) +BRLCAD_ADD_TEST(NAME bn_cx_conj_0_1 COMMAND bn_test complex 7 0,0 0,0) +BRLCAD_ADD_TEST(NAME bn_cx_conj_0_2 COMMAND bn_test complex 7 2,0 2,0) +BRLCAD_ADD_TEST(NAME bn_cx_conj_0_3 COMMAND bn_test complex 7 0,2 0,-2) +BRLCAD_ADD_TEST(NAME bn_cx_conj_dif_1 COMMAND bn_test complex 7 6.3,4.2 6.3,-4.2) # For function #8 (bn_cx_real/bn_cx_imag), the format is as follows: # @@ -353,9 +359,9 @@ add_test(NAME bn_cx_conj_dif_1 COMMAND bn_test complex 7 6.3,4.2 6.3,-4.2 # where IP is the number in question. An individual complex number is # two integer or floating point numbers separated by commas. -add_test(NAME bn_cx_parts_1 COMMAND bn_test complex 8 0,0 0,0) -add_test(NAME bn_cx_parts_2 COMMAND bn_test complex 8 1,2 1,2) -add_test(NAME bn_cx_parts_3 COMMAND bn_test complex 8 2,1 2,1) +BRLCAD_ADD_TEST(NAME bn_cx_parts_1 COMMAND bn_test complex 8 0,0 0,0) +BRLCAD_ADD_TEST(NAME bn_cx_parts_2 COMMAND bn_test complex 8 1,2 1,2) +BRLCAD_ADD_TEST(NAME bn_cx_parts_3 COMMAND bn_test complex 8 2,1 2,1) # @@ -375,13 +381,13 @@ add_test(NAME bn_cx_parts_3 COMMAND bn_test complex 8 2,1 2,1) # where M1 is the first matrix, M2 is the second matrix. # A matrix is 16 floating point numbers separated by commas. -add_test(NAME bn_mat_mul_0_1 COMMAND bn_test mat 1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1.0,2.1,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,11.11,12.12,13.13,14.14,15.15,16.16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -add_test(NAME bn_mat_mul_0_2 COMMAND bn_test mat 1 2.8,1.7,3205.555,87.76,55.0,66.0,77.0,0.0,0.0,10.1,46.8,537.999,13.0,14.0,15.0,24382.5373 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -add_test(NAME bn_mat_mul_id_1 COMMAND bn_test mat 1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 33.34,28.7135672,44.84,55.85,1,1,0,0,0,7843.4444,11,12,473.232,83.17,75.0,8.417 33.34,28.7135672,44.84,55.85,1,1,0,0,0,7843.4444,11,12,473.232,83.17,75.0,8.417) -add_test(NAME bn_mat_mul_id_2 COMMAND bn_test mat 1 3688.701794246889,5712.945961512324,8172.282142910184,5109.8260742578495,2697.196099611537,2586.742536023153,5067.2882336104285,1149.9923643570387,6827.968448547921,9548.849169087358,5418.682604729545,9117.6798488191,5478.474626204755,7525.19019682893,3172.945417883698,8609.907811093646 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 3688.701794246889,5712.945961512324,8172.282142910184,5109.8260742578495,2697.196099611537,2586.742536023153,5067.2882336104285,1149.9923643570387,6827.968448547921,9548.849169087358,5418.682604729545,9117.6798488191,5478.474626204755,7525.19019682893,3172.945417883698,8609.907811093646) -add_test(NAME bn_mat_mul_id_id COMMAND bn_test mat 1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) -add_test(NAME bn_mat_mul_dif_1 COMMAND bn_test mat 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 80,70,60,50,240,214,188,162,400,358,316,274,560,502,444,386) -add_test(NAME bn_mat_mul_dif_2 COMMAND bn_test mat 1 3.2,62.9,53.0,71.5,98.6,75.4,9.6,89.9,37.7,49.0,60.2,55.2,27.8,40.2,0.5,78.1 37.1,73.1,4.9,72.1,68.2,64.7,75.7,87.4,85.8,45.0,94.5,30.8,95.9,45.9,45.4,49.1 15812.75,9970.4,13031.81,10871.23,18245.43,16644.45,11179.58,18408.79,15199.31,11168.85,12089.01,11565.25,11305.71,8240.41,6772.35,9367.97) +BRLCAD_ADD_TEST(NAME bn_mat_mul_0_1 COMMAND bn_test mat 1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1.0,2.1,3.3,4.4,5.5,6.6,7.7,8.8,9.9,10.1,11.11,12.12,13.13,14.14,15.15,16.16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_mat_mul_0_2 COMMAND bn_test mat 1 2.8,1.7,3205.555,87.76,55.0,66.0,77.0,0.0,0.0,10.1,46.8,537.999,13.0,14.0,15.0,24382.5373 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_mat_mul_id_1 COMMAND bn_test mat 1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 33.34,28.7135672,44.84,55.85,1,1,0,0,0,7843.4444,11,12,473.232,83.17,75.0,8.417 33.34,28.7135672,44.84,55.85,1,1,0,0,0,7843.4444,11,12,473.232,83.17,75.0,8.417) +BRLCAD_ADD_TEST(NAME bn_mat_mul_id_2 COMMAND bn_test mat 1 3688.701794246889,5712.945961512324,8172.282142910184,5109.8260742578495,2697.196099611537,2586.742536023153,5067.2882336104285,1149.9923643570387,6827.968448547921,9548.849169087358,5418.682604729545,9117.6798488191,5478.474626204755,7525.19019682893,3172.945417883698,8609.907811093646 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 3688.701794246889,5712.945961512324,8172.282142910184,5109.8260742578495,2697.196099611537,2586.742536023153,5067.2882336104285,1149.9923643570387,6827.968448547921,9548.849169087358,5418.682604729545,9117.6798488191,5478.474626204755,7525.19019682893,3172.945417883698,8609.907811093646) +BRLCAD_ADD_TEST(NAME bn_mat_mul_id_id COMMAND bn_test mat 1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_mul_dif_1 COMMAND bn_test mat 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 80,70,60,50,240,214,188,162,400,358,316,274,560,502,444,386) +BRLCAD_ADD_TEST(NAME bn_mat_mul_dif_2 COMMAND bn_test mat 1 3.2,62.9,53.0,71.5,98.6,75.4,9.6,89.9,37.7,49.0,60.2,55.2,27.8,40.2,0.5,78.1 37.1,73.1,4.9,72.1,68.2,64.7,75.7,87.4,85.8,45.0,94.5,30.8,95.9,45.9,45.4,49.1 15812.75,9970.4,13031.81,10871.23,18245.43,16644.45,11179.58,18408.79,15199.31,11168.85,12089.01,11565.25,11305.71,8240.41,6772.35,9367.97) # For function #2 (bn_mat_mul3), the format is as follows: # @@ -390,10 +396,10 @@ add_test(NAME bn_mat_mul_dif_2 COMMAND bn_test mat 1 3.2,62.9,53.0,71.5,9 # where M1 M2 M3 are the three matrices to be multiplied. # A matrix is 16 floating point numbers separated by commas. -add_test(NAME bn_mat_mul3_0_1 COMMAND bn_test mat 2 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -add_test(NAME bn_mat_mul3_0_id COMMAND bn_test mat 2 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -add_test(NAME bn_mat_mul3_id_1 COMMAND bn_test mat 2 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 80,70,60,50,240,214,188,162,400,358,316,274,560,502,444,386) -add_test(NAME bn_mat_mul3_dif COMMAND bn_test mat 2 3.1,4.2,1.9,1.8,2.9,0.3,4.1,4.5,2.9,2.7,0.7,1.7,1.6,0.8,4.5,5.0 1.1,2.1,2.3,3.5,2.7,1.8,2.6,3.8,1.5,0.7,3.0,4.4,2.3,0.3,4.5,4.3 3.2,2.0,2.6,0.0,2.1,4.0,0.5,1.6,4.3,3.1,2.7,4.7,0.9,3.3,2.4,4.7 278.616,347.578,253.473,376.876,304.197,369.044,283.557,434.156,203.015,252.984,183.327,274.048,315.303,376.398,294.975,446.11) +BRLCAD_ADD_TEST(NAME bn_mat_mul3_0_1 COMMAND bn_test mat 2 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_mat_mul3_0_id COMMAND bn_test mat 2 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_mat_mul3_id_1 COMMAND bn_test mat 2 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1 80,70,60,50,240,214,188,162,400,358,316,274,560,502,444,386) +BRLCAD_ADD_TEST(NAME bn_mat_mul3_dif COMMAND bn_test mat 2 3.1,4.2,1.9,1.8,2.9,0.3,4.1,4.5,2.9,2.7,0.7,1.7,1.6,0.8,4.5,5.0 1.1,2.1,2.3,3.5,2.7,1.8,2.6,3.8,1.5,0.7,3.0,4.4,2.3,0.3,4.5,4.3 3.2,2.0,2.6,0.0,2.1,4.0,0.5,1.6,4.3,3.1,2.7,4.7,0.9,3.3,2.4,4.7 278.616,347.578,253.473,376.876,304.197,369.044,283.557,434.156,203.015,252.984,183.327,274.048,315.303,376.398,294.975,446.11) # For function #3 (bn_mat_mul4), the format is as follows: # @@ -402,10 +408,10 @@ add_test(NAME bn_mat_mul3_dif COMMAND bn_test mat 2 3.1,4.2,1.9,1.8,2.9, # where M1 M2 M3 M4 are the four matrices to be multiplied. # A matrix is 16 floating point numbers separated by commas. -add_test(NAME bn_mat_mul4_id_4 COMMAND bn_test mat 3 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) -add_test(NAME bn_mat_mul4_0_4 COMMAND bn_test mat 3 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -add_test(NAME bn_mat_mul4_id_0 COMMAND bn_test mat 3 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -add_test(NAME bn_mat_mul4_same COMMAND bn_test mat 3 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 113960,129040,144120,159200,263272,298128,332984,367840,412584,467216,521848,576480,561896,636304,710712,785120) +BRLCAD_ADD_TEST(NAME bn_mat_mul4_id_4 COMMAND bn_test mat 3 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_mul4_0_4 COMMAND bn_test mat 3 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_mat_mul4_id_0 COMMAND bn_test mat 3 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_mat_mul4_same COMMAND bn_test mat 3 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 113960,129040,144120,159200,263272,298128,332984,367840,412584,467216,521848,576480,561896,636304,710712,785120) # For function #4 (bn_matXvec), the format is as follows: # @@ -416,12 +422,12 @@ add_test(NAME bn_mat_mul4_same COMMAND bn_test mat 3 1,2,3,4,5,6,7,8,9,10 # A matrix is 16 floating point numbers separated by commas. # A vector is 4 floating point numbers separated by commas. -add_test(NAME bn_matXvec_id COMMAND bn_test mat 4 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 2.78,3.45,16.7,38.22 2.78,3.45,16.7,38.22) -add_test(NAME bn_matXvec_0_1 COMMAND bn_test mat 4 18.59,25.82,46.39,16.56,46.13,22.16,29.66,92.89,67.58,79.96,59.47,51.4,55.83,48.5,82.51,73.52 0,0,0,0 0,0,0,0) -add_test(NAME bn_matXvec_0_2 COMMAND bn_test mat 4 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1.1,2.2,3.3,4.4 0,0,0,0) -add_test(NAME bn_matXvec_dif_1 COMMAND bn_test mat 4 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4 30,70,110,150) -add_test(NAME bn_matXvec_dif_2 COMMAND bn_test mat 4 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 0,1,2,3 14,38,62,86) -add_test(NAME bn_matXvec_dif_3 COMMAND bn_test mat 4 18.59,25.82,46.39,16.56,46.13,22.16,29.66,92.89,67.58,79.96,59.47,51.4,55.83,48.5,82.51,73.52 7.31,68.38,65.97,3.26 5015.7984,4112.0027,10052.4745,9407.4072) +BRLCAD_ADD_TEST(NAME bn_matXvec_id COMMAND bn_test mat 4 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 2.78,3.45,16.7,38.22 2.78,3.45,16.7,38.22) +BRLCAD_ADD_TEST(NAME bn_matXvec_0_1 COMMAND bn_test mat 4 18.59,25.82,46.39,16.56,46.13,22.16,29.66,92.89,67.58,79.96,59.47,51.4,55.83,48.5,82.51,73.52 0,0,0,0 0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_matXvec_0_2 COMMAND bn_test mat 4 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 1.1,2.2,3.3,4.4 0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_matXvec_dif_1 COMMAND bn_test mat 4 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4 30,70,110,150) +BRLCAD_ADD_TEST(NAME bn_matXvec_dif_2 COMMAND bn_test mat 4 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 0,1,2,3 14,38,62,86) +BRLCAD_ADD_TEST(NAME bn_matXvec_dif_3 COMMAND bn_test mat 4 18.59,25.82,46.39,16.56,46.13,22.16,29.66,92.89,67.58,79.96,59.47,51.4,55.83,48.5,82.51,73.52 7.31,68.38,65.97,3.26 5015.7984,4112.0027,10052.4745,9407.4072) # For function #5 (bn_mat_inverse), the format is as follows: # @@ -431,11 +437,11 @@ add_test(NAME bn_matXvec_dif_3 COMMAND bn_test mat 4 18.59,25.82,46.39,16 # M is the matrix to be inverted. # A matrix is 16 floating point numbers separated by commas. -add_test(NAME bn_mat_inverse_0 COMMAND bn_test mat 5 1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -add_test(NAME bn_mat_inverse_id COMMAND bn_test mat 5 0 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) -add_test(NAME bn_mat_inverse_sing_1 COMMAND bn_test mat 5 1 1,2,2,0,1,1,3,4,2,2,1,0,0,0,0,0) -add_test(NAME bn_mat_inverse_sing_2 COMMAND bn_test mat 5 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) -add_test(NAME bn_mat_inverse_1 COMMAND bn_test mat 5 0 14.16,71.27,95.53,77.27,91.51,26.83,17.56,6.94,30.11,40.47,38.1,39.27,56.52,90.12,87.96,84.3 0.00836179,0.0114599,0.0844829,-0.0479631,-0.0600379,-0.0107874,-0.349984,0.218954,0.0425546,0.0207413,-0.0527631,-0.0161344,0.0141745,-0.0177931,0.372557,-0.173216) +BRLCAD_ADD_TEST(NAME bn_mat_inverse_0 COMMAND bn_test mat 5 1 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_mat_inverse_id COMMAND bn_test mat 5 0 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_inverse_sing_1 COMMAND bn_test mat 5 1 1,2,2,0,1,1,3,4,2,2,1,0,0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_mat_inverse_sing_2 COMMAND bn_test mat 5 1 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16) +BRLCAD_ADD_TEST(NAME bn_mat_inverse_1 COMMAND bn_test mat 5 0 14.16,71.27,95.53,77.27,91.51,26.83,17.56,6.94,30.11,40.47,38.1,39.27,56.52,90.12,87.96,84.3 0.00836179,0.0114599,0.0844829,-0.0479631,-0.0600379,-0.0107874,-0.349984,0.218954,0.0425546,0.0207413,-0.0527631,-0.0161344,0.0141745,-0.0177931,0.372557,-0.173216) # For function #6 (bn_mat_trn), the format is as follows: # @@ -444,10 +450,10 @@ add_test(NAME bn_mat_inverse_1 COMMAND bn_test mat 5 0 14.16,71.27,95.53, # where M is the matrix to transpose. # A matrix is 16 floating point numbers separated by commas. -add_test(NAME bn_mat_trn_id COMMAND bn_test mat 6 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) -add_test(NAME bn_mat_trn_same COMMAND bn_test mat 6 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) -add_test(NAME bn_mat_trn_1 COMMAND bn_test mat 6 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,5,9,13,2,6,10,14,3,7,11,15,4,8,12,16) -add_test(NAME bn_mat_trn_2 COMMAND bn_test mat 6 99.01,41.88,17.07,37.47,38.8,42.89,34.48,82.84,59.97,23.74,6.98,27.81,1.64,86.35,43.57,13.87 99.01,38.8,59.97,1.64,41.88,42.89,23.74,86.35,17.07,34.48,6.98,43.57,37.47,82.84,27.81,13.87) +BRLCAD_ADD_TEST(NAME bn_mat_trn_id COMMAND bn_test mat 6 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_trn_same COMMAND bn_test mat 6 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) +BRLCAD_ADD_TEST(NAME bn_mat_trn_1 COMMAND bn_test mat 6 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,5,9,13,2,6,10,14,3,7,11,15,4,8,12,16) +BRLCAD_ADD_TEST(NAME bn_mat_trn_2 COMMAND bn_test mat 6 99.01,41.88,17.07,37.47,38.8,42.89,34.48,82.84,59.97,23.74,6.98,27.81,1.64,86.35,43.57,13.87 99.01,38.8,59.97,1.64,41.88,42.89,23.74,86.35,17.07,34.48,6.98,43.57,37.47,82.84,27.81,13.87) # For function #7 (bn_mat_is_identity), the format is as follows: # @@ -456,10 +462,10 @@ add_test(NAME bn_mat_trn_2 COMMAND bn_test mat 6 99.01,41.88,17.07,37 # where M is the matrix to test. # A matrix is 16 floating point numbers separated by commas. -add_test(NAME bn_mat_is_identity_id COMMAND bn_test mat 7 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1) -add_test(NAME bn_mat_is_identity_0 COMMAND bn_test mat 7 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0) -add_test(NAME bn_mat_is_identity_1 COMMAND bn_test mat 7 15.58,76.15,18.45,80.55,52.36,28.49,85.75,56.75,76.44,66.57,32.39,52.18,39.21,96.09,98.66,30.95 0) -add_test(NAME bn_mat_is_identity_2 COMMAND bn_test mat 7 1.001,0,0,0,0,1.001,0,0,0,0,1.001,0,0,0,0,1.001 0) +BRLCAD_ADD_TEST(NAME bn_mat_is_identity_id COMMAND bn_test mat 7 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1) +BRLCAD_ADD_TEST(NAME bn_mat_is_identity_0 COMMAND bn_test mat 7 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0) +BRLCAD_ADD_TEST(NAME bn_mat_is_identity_1 COMMAND bn_test mat 7 15.58,76.15,18.45,80.55,52.36,28.49,85.75,56.75,76.44,66.57,32.39,52.18,39.21,96.09,98.66,30.95 0) +BRLCAD_ADD_TEST(NAME bn_mat_is_identity_2 COMMAND bn_test mat 7 1.001,0,0,0,0,1.001,0,0,0,0,1.001,0,0,0,0,1.001 0) # For function #8 (bn_mat_det3), the format is as follows: # @@ -468,10 +474,10 @@ add_test(NAME bn_mat_is_identity_2 COMMAND bn_test mat 7 1.001,0,0,0,0,1.001, # where M is the matrix to find the upper-left 3x3 determinant of. # A matrix is 16 floating point numbers separated by commas. -add_test(NAME bn_mat_det3_id COMMAND bn_test mat 8 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1) -add_test(NAME bn_mat_det3_0 COMMAND bn_test mat 8 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0) -add_test(NAME bn_mat_det3_1 COMMAND bn_test mat 8 77.64,50.22,46.68,16.35,41.25,71.79,24.01,23.88,37.37,94.83,34.25,4.43,95.01,81.8,1.45,45.57 45601.558488) -add_test(NAME bn_mat_det3_2 COMMAND bn_test mat 8 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 0) +BRLCAD_ADD_TEST(NAME bn_mat_det3_id COMMAND bn_test mat 8 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1) +BRLCAD_ADD_TEST(NAME bn_mat_det3_0 COMMAND bn_test mat 8 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0) +BRLCAD_ADD_TEST(NAME bn_mat_det3_1 COMMAND bn_test mat 8 77.64,50.22,46.68,16.35,41.25,71.79,24.01,23.88,37.37,94.83,34.25,4.43,95.01,81.8,1.45,45.57 45601.558488) +BRLCAD_ADD_TEST(NAME bn_mat_det3_2 COMMAND bn_test mat 8 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 0) # For function #9 (bn_mat_determinant), the format is as follows: # @@ -480,10 +486,10 @@ add_test(NAME bn_mat_det3_2 COMMAND bn_test mat 8 1,2,3,4,5,6,7,8,9,10 # where M is the matrix to find the determinant of. # A matrix is 16 floating point numbers separated by commas. -add_test(NAME bn_mat_determinant_id COMMAND bn_test mat 9 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1) -add_test(NAME bn_mat_determinant_0 COMMAND bn_test mat 9 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0) -add_test(NAME bn_mat_determinant_1 COMMAND bn_test mat 9 80.22,28.45,95.46,74.05,53.38,74.98,71.55,24.86,65.01,46.42,64.24,49.13,75.74,79.22,64.61,17.33 2.1004520202541295e6) -add_test(NAME bn_mat_determinant_2 COMMAND bn_test mat 9 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 0) +BRLCAD_ADD_TEST(NAME bn_mat_determinant_id COMMAND bn_test mat 9 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 1) +BRLCAD_ADD_TEST(NAME bn_mat_determinant_0 COMMAND bn_test mat 9 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0) +BRLCAD_ADD_TEST(NAME bn_mat_determinant_1 COMMAND bn_test mat 9 80.22,28.45,95.46,74.05,53.38,74.98,71.55,24.86,65.01,46.42,64.24,49.13,75.74,79.22,64.61,17.33 2.1004520202541295e6) +BRLCAD_ADD_TEST(NAME bn_mat_determinant_2 COMMAND bn_test mat 9 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 0) # For function #10 (bn_mat_is_equal), the format is as follows: # @@ -492,10 +498,10 @@ add_test(NAME bn_mat_determinant_2 COMMAND bn_test mat 9 1,2,3,4,5,6,7,8,9,10 # where M1 and M2 are the two matrices to be compared. # A matrix is 16 floating point numbers separated by commas. -add_test(NAME bn_mat_is_equal_1 COMMAND bn_test mat 10 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1) -add_test(NAME bn_mat_is_equal_2 COMMAND bn_test mat 10 70.46,38.7,1.57,84.19,38.53,52.52,89.28,8.58,89.96,61.36,5.45,63.62,99.98,82.15,65.44,67.46 70.46,38.7,1.57,84.19,38.53,52.52,89.28,8.58,89.96,61.36,5.45,63.62,99.98,82.15,65.44,67.46 1) -add_test(NAME bn_mat_is_equal_3 COMMAND bn_test mat 10 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0) -add_test(NAME bn_mat_is_equal_4 COMMAND bn_test mat 10 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 71.53,18.85,47.48,24.56,42.34,98.18,42.1,74.61,30.47,49.18,63.06,2.11,58.31,60.61,0.62,34.23 0) +BRLCAD_ADD_TEST(NAME bn_mat_is_equal_1 COMMAND bn_test mat 10 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 1) +BRLCAD_ADD_TEST(NAME bn_mat_is_equal_2 COMMAND bn_test mat 10 70.46,38.7,1.57,84.19,38.53,52.52,89.28,8.58,89.96,61.36,5.45,63.62,99.98,82.15,65.44,67.46 70.46,38.7,1.57,84.19,38.53,52.52,89.28,8.58,89.96,61.36,5.45,63.62,99.98,82.15,65.44,67.46 1) +BRLCAD_ADD_TEST(NAME bn_mat_is_equal_3 COMMAND bn_test mat 10 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 0) +BRLCAD_ADD_TEST(NAME bn_mat_is_equal_4 COMMAND bn_test mat 10 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 71.53,18.85,47.48,24.56,42.34,98.18,42.1,74.61,30.47,49.18,63.06,2.11,58.31,60.61,0.62,34.23 0) # For function #11 (bn_mat_atan2), the format is as follows: # @@ -503,11 +509,11 @@ add_test(NAME bn_mat_is_equal_4 COMMAND bn_test mat 10 1,0,0,0,0,1,0,0,0,0 # # where x and y are the floating point arguments to the atan2 function -add_test(NAME bn_atan2_0_0 COMMAND bn_test mat 11 0 0 0) -add_test(NAME bn_atan2_0_1 COMMAND bn_test mat 11 2.8 0 1.570796326794896) -add_test(NAME bn_atan2_0_2 COMMAND bn_test mat 11 -2.8 0 -1.570796326794896) -add_test(NAME bn_atan2_1 COMMAND bn_test mat 11 2.55 8.76 0.283268001141651) -add_test(NAME bn_atan2_2 COMMAND bn_test mat 11 -2.8 -7.2 -2.770701364777130) +BRLCAD_ADD_TEST(NAME bn_atan2_0_0 COMMAND bn_test mat 11 0 0 0) +BRLCAD_ADD_TEST(NAME bn_atan2_0_1 COMMAND bn_test mat 11 2.8 0 1.570796326794896) +BRLCAD_ADD_TEST(NAME bn_atan2_0_2 COMMAND bn_test mat 11 -2.8 0 -1.570796326794896) +BRLCAD_ADD_TEST(NAME bn_atan2_1 COMMAND bn_test mat 11 2.55 8.76 0.283268001141651) +BRLCAD_ADD_TEST(NAME bn_atan2_2 COMMAND bn_test mat 11 -2.8 -7.2 -2.770701364777130) # For function #12 (bn_vtoh_move), the format is as follows: # @@ -516,7 +522,7 @@ add_test(NAME bn_atan2_2 COMMAND bn_test mat 11 -2.8 -7.2 -2.770701 # where V is the 3-vector to move to a homogeneous vector. # A vector is three floating point numbers separated by commas. -add_test(NAME bn_vtoh_move COMMAND bn_test mat 12 2.6,-5.5,8.12 2.6,-5.5,8.12,1) +BRLCAD_ADD_TEST(NAME bn_vtoh_move COMMAND bn_test mat 12 2.6,-5.5,8.12 2.6,-5.5,8.12,1) # For function #13 (bn_vtoh_move), the format is as follows: # @@ -525,7 +531,7 @@ add_test(NAME bn_vtoh_move COMMAND bn_test mat 12 2.6,-5.5,8.12 2.6,- # where H is the homogeneous vector to move to a 3-vector. # A homogeneous vector is four floating point numbers separated by commas. -add_test(NAME bn_htov_move COMMAND bn_test mat 13 1.1,2.2,3.3,7.4 0.14864864864864866,0.2972972972972973,0.4459459459459459) +BRLCAD_ADD_TEST(NAME bn_htov_move COMMAND bn_test mat 13 1.1,2.2,3.3,7.4 0.14864864864864866,0.2972972972972973,0.4459459459459459) # For function #14 (bn_mat_ae), the format is as follows: # @@ -535,7 +541,7 @@ add_test(NAME bn_htov_move COMMAND bn_test mat 13 1.1,2.2,3.3,7.4 0.1 # transform matrix. # az and el are floating point numbers and are in degrees. -add_test(NAME bn_mat_ae COMMAND bn_test mat 14 0 90 0,0,-1,0,0,1,0,0,1,0,0,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_ae COMMAND bn_test mat 14 0 90 0,0,-1,0,0,1,0,0,1,0,0,0,0,0,0,1) # For function #15 (bn_ae_vec), the format is as follows: # @@ -546,9 +552,9 @@ add_test(NAME bn_mat_ae COMMAND bn_test mat 14 0 90 0,0,-1,0,0,1,0 # Functions 15-17 were verified using the website below. # http://www.random-science-tools.com/maths/coordinate-converter.htm -add_test(NAME bn_ae_vec_0 COMMAND bn_test mat 15 0,1,0 90 0) -add_test(NAME bn_ae_vec_1 COMMAND bn_test mat 15 5.7,-2.34,19.61 337.68055960702 72.556852698595) -add_test(NAME bn_ae_vec_2 COMMAND bn_test mat 15 -23.78,42,3.141 119.518125952119 3.7234738236524) +BRLCAD_ADD_TEST(NAME bn_ae_vec_0 COMMAND bn_test mat 15 0,1,0 90 0) +BRLCAD_ADD_TEST(NAME bn_ae_vec_1 COMMAND bn_test mat 15 5.7,-2.34,19.61 337.68055960702 72.556852698595) +BRLCAD_ADD_TEST(NAME bn_ae_vec_2 COMMAND bn_test mat 15 -23.78,42,3.141 119.518125952119 3.7234738236524) # For function #16 (bn_vec_ae), the format is as follows: # @@ -561,8 +567,8 @@ add_test(NAME bn_ae_vec_2 COMMAND bn_test mat 15 -23.78,42,3.141 119 # The value of the returned vector seems to always have the same z value # irrespective of the input. -add_test(NAME bn_vec_ae_1 COMMAND bn_test mat 16 1 1 0.291926581820,0.454648713558,0.841470984697) -add_test(NAME bn_vec_ae_2 COMMAND bn_test mat 16 0.5 1.2 0.317998846662,0.173723561699,0.932039085893) +BRLCAD_ADD_TEST(NAME bn_vec_ae_1 COMMAND bn_test mat 16 1 1 0.291926581820,0.454648713558,0.841470984697) +BRLCAD_ADD_TEST(NAME bn_vec_ae_2 COMMAND bn_test mat 16 0.5 1.2 0.317998846662,0.173723561699,0.932039085893) # For function #17 (bn_vec_aed), the format is as follows: # @@ -573,8 +579,8 @@ add_test(NAME bn_vec_ae_2 COMMAND bn_test mat 16 0.5 1.2 0.317998846 # az and el are floating point numbers and are in radians. # d is a floating point number. -add_test(NAME bn_vec_aed_1 COMMAND bn_test mat 17 1 1 5 1.45963290910,2.27324356779,4.20735492349) -add_test(NAME bn_vec_aed_2 COMMAND bn_test mat 17 0.3845 0.286 18.3354 16.3062567701,6.59816438267,5.17272752864) +BRLCAD_ADD_TEST(NAME bn_vec_aed_1 COMMAND bn_test mat 17 1 1 5 1.45963290910,2.27324356779,4.20735492349) +BRLCAD_ADD_TEST(NAME bn_vec_aed_2 COMMAND bn_test mat 17 0.3845 0.286 18.3354 16.3062567701,6.59816438267,5.17272752864) # For function #18 (bn_mat_angles), the format is as follows: # @@ -586,8 +592,8 @@ add_test(NAME bn_vec_aed_2 COMMAND bn_test mat 17 0.3845 0.286 18.335 # Functions 18 and 19 were verified using the website below # http://toolserver.org/~dschwen/tools/rotationmatrix.html -add_test(NAME bn_mat_angles_1 COMMAND bn_test mat 18 30 40 50 0.4924038765,-0.5868240888,0.6427876097,0,0.8700019038,0.310468461,-0.3830222216,0,0.0252013863,0.7478280708,0.6634139482,0,0,0,0,1) -add_test(NAME bn_mat_angles_2 COMMAND bn_test mat 18 84.23 19.5 38.9 0.733604282,-0.591944033,0.3338068592,0,0.3215992025,-0.1303153824,-0.9378655842,0,0.5986641049,0.7953742282,0.0947688064,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_angles_1 COMMAND bn_test mat 18 30 40 50 0.4924038765,-0.5868240888,0.6427876097,0,0.8700019038,0.310468461,-0.3830222216,0,0.0252013863,0.7478280708,0.6634139482,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_angles_2 COMMAND bn_test mat 18 84.23 19.5 38.9 0.733604282,-0.591944033,0.3338068592,0,0.3215992025,-0.1303153824,-0.9378655842,0,0.5986641049,0.7953742282,0.0947688064,0,0,0,0,1) # For function #19 (bn_mat_angles_rad), the format is as follows: # @@ -596,8 +602,8 @@ add_test(NAME bn_mat_angles_2 COMMAND bn_test mat 18 84.23 19.5 38.9 0.7 # where x, y, z are the angles to rotate about their respective axes # x, y, z are floating point numbers and are in radians. -add_test(NAME bn_mat_angles_rad_1 COMMAND bn_test mat 19 1.14 0.856 0.321 0.6219827767,-0.2068090198,0.7552267572,0,0.7829298453,0.1797494268,-0.5955761923,0,-0.0125810482,0.9617277021,0.2737180014,0,0,0,0,1) -add_test(NAME bn_mat_angles_rad_2 COMMAND bn_test mat 19 0.6 1 0.92 0.3273260276,-0.4298653899,0.8414709848,0,0.9444818397,0.1219905484,-0.3050776304,0,0.0284908076,0.8946139126,0.4459307359,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_angles_rad_1 COMMAND bn_test mat 19 1.14 0.856 0.321 0.6219827767,-0.2068090198,0.7552267572,0,0.7829298453,0.1797494268,-0.5955761923,0,-0.0125810482,0.9617277021,0.2737180014,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_angles_rad_2 COMMAND bn_test mat 19 0.6 1 0.92 0.3273260276,-0.4298653899,0.8414709848,0,0.9444818397,0.1219905484,-0.3050776304,0,0.0284908076,0.8946139126,0.4459307359,0,0,0,0,1) # For function #20 (bn_eigen2x2), the format is as follows: # @@ -608,8 +614,8 @@ add_test(NAME bn_mat_angles_rad_2 COMMAND bn_test mat 19 0.6 1 0.92 0.327326 # eigenvector will be in vec1. # An eigen vector is two floating point numbers separated by commas. -add_test(NAME bn_eigen2x2_1 COMMAND bn_test mat 20 2.18 13.9 6.6 -9.68459058019096 18.464590580191 0.760598630446286,-0.649222398999938,0 0.649222398999938,0.760598630446286,0) -add_test(NAME bn_eigen2x2_2 COMMAND bn_test mat 20 1 2 3 -0.23606797749979 4.23606797749979 0.85065080835204,-0.525731112119133,0 0.525731112119133,0.85065080835204,0) +BRLCAD_ADD_TEST(NAME bn_eigen2x2_1 COMMAND bn_test mat 20 2.18 13.9 6.6 -9.68459058019096 18.464590580191 0.760598630446286,-0.649222398999938,0 0.649222398999938,0.760598630446286,0) +BRLCAD_ADD_TEST(NAME bn_eigen2x2_2 COMMAND bn_test mat 20 1 2 3 -0.23606797749979 4.23606797749979 0.85065080835204,-0.525731112119133,0 0.525731112119133,0.85065080835204,0) # For function #21 (bn_mat_xrot), the format is as follows: # @@ -619,8 +625,8 @@ add_test(NAME bn_eigen2x2_2 COMMAND bn_test mat 20 1 2 3 -0.2360679774 # about the x-axis. # sinx and cosx are floating point values. -add_test(NAME bn_mat_xrot_1 COMMAND bn_test mat 21 0.342020143325668 0.939692620785908 1,0,0,0,0,0.9396926208,-0.3420201433,0,0,0.3420201433,0.9396926208,0,0,0,0,1) -add_test(NAME bn_mat_xrot_2 COMMAND bn_test mat 21 -0.78260815685241 0.622514636637619 1,0,0,0,0,0.6225146366,0.7826081569,0,0,-0.7826081569,0.6225146366,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_xrot_1 COMMAND bn_test mat 21 0.342020143325668 0.939692620785908 1,0,0,0,0,0.9396926208,-0.3420201433,0,0,0.3420201433,0.9396926208,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_xrot_2 COMMAND bn_test mat 21 -0.78260815685241 0.622514636637619 1,0,0,0,0,0.6225146366,0.7826081569,0,0,-0.7826081569,0.6225146366,0,0,0,0,1) # For function #22 (bn_mat_yrot), the format is as follows: # @@ -630,8 +636,8 @@ add_test(NAME bn_mat_xrot_2 COMMAND bn_test mat 21 -0.78260815685241 0 # about the y-axis. # siny and cosy are floating point values. -add_test(NAME bn_mat_yrot_1 COMMAND bn_test mat 22 0.30901699437494 0.951056516295153 0.9510565163,0,-0.3090169944,0,0,1,0,0,0.3090169944,0,0.9510565163,0,0,0,0,1) -add_test(NAME bn_mat_yrot_2 COMMAND bn_test mat 22 0.17364817766693 0.984807753012208 0.9848077530122,0,-0.1736481777,0,0,1,0,0,0.1736481777,0,0.984807753,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_yrot_1 COMMAND bn_test mat 22 0.30901699437494 0.951056516295153 0.9510565163,0,-0.3090169944,0,0,1,0,0,0.3090169944,0,0.9510565163,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_yrot_2 COMMAND bn_test mat 22 0.17364817766693 0.984807753012208 0.9848077530122,0,-0.1736481777,0,0,1,0,0,0.1736481777,0,0.984807753,0,0,0,0,1) # For function #23 (bn_mat_zrot), the format is as follows: # @@ -641,8 +647,8 @@ add_test(NAME bn_mat_yrot_2 COMMAND bn_test mat 22 0.17364817766693 0. # about the z-axis. # sinz and cosz are floating point values. -add_test(NAME bn_mat_zrot_1 COMMAND bn_test mat 23 0.669130606358858 0.743144825477394 0.743144825477394,-0.669130606358858,0,0,0.669130606358858,0.743144825477394,0,0,0,0,1,0,0,0,0,1) -add_test(NAME bn_mat_zrot_2 COMMAND bn_test mat 23 -0.99619469809174 -0.087155742747658 -0.087155742747658,0.996194698091745,0,0,-0.996194698091746,-0.087155742747658,0,0,0,0,1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_zrot_1 COMMAND bn_test mat 23 0.669130606358858 0.743144825477394 0.743144825477394,-0.669130606358858,0,0,0.669130606358858,0.743144825477394,0,0,0,0,1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_mat_zrot_2 COMMAND bn_test mat 23 -0.99619469809174 -0.087155742747658 -0.087155742747658,0.996194698091745,0,0,-0.996194698091746,-0.087155742747658,0,0,0,0,1,0,0,0,0,1) # For function #24 (bn_mat_scale_about_pt), the format is as follows: # @@ -653,8 +659,8 @@ add_test(NAME bn_mat_zrot_2 COMMAND bn_test mat 23 -0.99619469809174 - # A point is three floating point numbers separated by commas. # Scale is a floating point number. -add_test(NAME bn_mat_scale_about_pt_1 COMMAND bn_test mat 24 3,4,5 1.5 0 1,0,0,-1,0,1,0,-1.333333333333333,0,0,1,-1.666666666666667,0,0,0,0.666666666666667) -add_test(NAME bn_mat_scale_about_pt_2 COMMAND bn_test mat 24 2.18,-4.55,-17.4 0.31 0 1,0,0,4.852258064516120,0,1,0,-10.127419354838700,0,0,1,-38.729032258064500,0,0,0,3.225806451612900) +BRLCAD_ADD_TEST(NAME bn_mat_scale_about_pt_1 COMMAND bn_test mat 24 3,4,5 1.5 0 1,0,0,-1,0,1,0,-1.333333333333333,0,0,1,-1.666666666666667,0,0,0,0.666666666666667) +BRLCAD_ADD_TEST(NAME bn_mat_scale_about_pt_2 COMMAND bn_test mat 24 2.18,-4.55,-17.4 0.31 0 1,0,0,4.852258064516120,0,1,0,-10.127419354838700,0,0,1,-38.729032258064500,0,0,0,3.225806451612900) # For function #25 (bn_mat_xform_about_pt), the format is as follows: # @@ -664,7 +670,7 @@ add_test(NAME bn_mat_scale_about_pt_2 COMMAND bn_test mat 24 2.18,-4.55,-17.4 0. # A matrix is 16 floating point values separated by commas. # A point is three floating point values separated by commas. -add_test(NAME bn_mat_xform_about_pt_1 COMMAND bn_test mat 25 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 -2,4.5,6.7 -25,-26,-27,219.9,63.5,69,74.5,-602.65,96.1,103.8,111.5,-902.75,13,14,15,-121.5) +BRLCAD_ADD_TEST(NAME bn_mat_xform_about_pt_1 COMMAND bn_test mat 25 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16 -2,4.5,6.7 -25,-26,-27,219.9,63.5,69,74.5,-602.65,96.1,103.8,111.5,-902.75,13,14,15,-121.5) # For function #26 (bn_mat_ck), the format is as follows: # @@ -673,19 +679,19 @@ add_test(NAME bn_mat_xform_about_pt_1 COMMAND bn_test mat 25 1,2,3,4,5,6,7,8,9,1 # where M is the matrix to check for axis perpendicularity # A matrix is 16 floating point values separated by commas. -add_test(NAME bn_mat_ck_1 COMMAND bn_test mat 26 -0.064769339233561,-0.740316935054896,-0.669130606358858,0,-0.920939044198179,-0.213876288688268,0.325773249374894,0,-0.384286624235859,0.637328619165857,-0.667934144677115,0,0,0,0,1 0) -add_test(NAME bn_mat_ck_2 COMMAND bn_test mat 26 -0.384795044679446,-0.906520316365329,0.17364817766693,23.835,-0.772197474581702,0.419235049422787,0.477444272753497,-1.23,-0.505612335529687,0.049627506006009,-0.861332268528144,-46.321,0,0,0,1 0) -add_test(NAME bn_mat_ck_3 COMMAND bn_test mat 26 -0.38457345,-0.944,0.46483,23.835,0.27474,0.4192787,0.4272753497,-1.23,-0.87,0.06009,0.999144,-46.321,0,0,0,1 -1) +BRLCAD_ADD_TEST(NAME bn_mat_ck_1 COMMAND bn_test mat 26 -0.064769339233561,-0.740316935054896,-0.669130606358858,0,-0.920939044198179,-0.213876288688268,0.325773249374894,0,-0.384286624235859,0.637328619165857,-0.667934144677115,0,0,0,0,1 0) +BRLCAD_ADD_TEST(NAME bn_mat_ck_2 COMMAND bn_test mat 26 -0.384795044679446,-0.906520316365329,0.17364817766693,23.835,-0.772197474581702,0.419235049422787,0.477444272753497,-1.23,-0.505612335529687,0.049627506006009,-0.861332268528144,-46.321,0,0,0,1 0) +BRLCAD_ADD_TEST(NAME bn_mat_ck_3 COMMAND bn_test mat 26 -0.38457345,-0.944,0.46483,23.835,0.27474,0.4192787,0.4272753497,-1.23,-0.87,0.06009,0.999144,-46.321,0,0,0,1 -1) # For function #27 (bn_mat_dup), there is one argument to keep main() # happy, which is ignored. # A matrix is initiated, copied and the dereferenced pointer compared in the function. -add_test(NAME bn_mat_dup COMMAND bn_test mat 27 0) +BRLCAD_ADD_TEST(NAME bn_mat_dup COMMAND bn_test mat 27 0) # ***************** sobolseq.c tests *************** -add_test(NAME bn_sobol_3_1000 COMMAND bn_test sobolseq 3 1000) +BRLCAD_ADD_TEST(NAME bn_sobol_3_1000 COMMAND bn_test sobolseq 3 1000) # # *************** tabdata.c tests *************** @@ -702,7 +708,7 @@ add_test(NAME bn_sobol_3_1000 COMMAND bn_test sobolseq 3 1000) # comma-separated numbers, where the first one is the number of # entries: nx,x0,x1,...,x(nx). -add_test(NAME bn_table_make_uniform COMMAND bn_test tabdata 1 0 100 10 10,0,10,20,30,40,50,60,70,80,90,100) +BRLCAD_ADD_TEST(NAME bn_table_make_uniform COMMAND bn_test tabdata 1 0 100 10 10,0,10,20,30,40,50,60,70,80,90,100) # For function #2 (bn_tabdata_add), the format is as follows: # @@ -716,7 +722,7 @@ add_test(NAME bn_table_make_uniform COMMAND bn_test tabdata 1 0 100 10 10,0,10,2 # entry is nx,x0,x1,...,x(nx), then the tabdata entry is # y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_add COMMAND bn_test tabdata 2 5,0,20,40,60,80,100 1,2,3,4,5 8,3,6,2,9 9,5,9,6,14) +BRLCAD_ADD_TEST(NAME bn_tabdata_add COMMAND bn_test tabdata 2 5,0,20,40,60,80,100 1,2,3,4,5 8,3,6,2,9 9,5,9,6,14) # For function #3 (bn_tabdata_mul), the format is as follows: # @@ -730,7 +736,7 @@ add_test(NAME bn_tabdata_add COMMAND bn_test tabdata 2 5,0,20,40,60,80,100 1,2,3 # table entry is nx,x0,x1,...,x(nx), then the tabdata entry is # y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_mul COMMAND bn_test tabdata 3 5,0,20,40,60,80,100 1,2,3,4,5 8,3,6,2,9 8,6,18,8,45) +BRLCAD_ADD_TEST(NAME bn_tabdata_mul COMMAND bn_test tabdata 3 5,0,20,40,60,80,100 1,2,3,4,5 8,3,6,2,9 8,6,18,8,45) # For function #4 (bn_tabdata_mul3), the format is as follows: # @@ -744,7 +750,7 @@ add_test(NAME bn_tabdata_mul COMMAND bn_test tabdata 3 5,0,20,40,60,80,100 1,2,3 # it refers; if the table entry is nx,x0,x1,...,x(nx), then the # tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_mul3 COMMAND bn_test tabdata 4 5,0,20,40,60,80,100 1,2,3,4,5 8,3,6,2,9 8,6,18,8,45 64,36,324,64,2025) +BRLCAD_ADD_TEST(NAME bn_tabdata_mul3 COMMAND bn_test tabdata 4 5,0,20,40,60,80,100 1,2,3,4,5 8,3,6,2,9 8,6,18,8,45 64,36,324,64,2025) # For function #5 (bn_tabdata_incr_mul3_scale), the format is as follows: @@ -760,7 +766,7 @@ add_test(NAME bn_tabdata_mul3 COMMAND bn_test tabdata 4 5,0,20,40,60,80,100 1,2, # it refers; if the table entry is nx,x0,x1,...,x(nx), then the # tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_incr_mul3_scale COMMAND bn_test tabdata 5 5,0,20,40,60,80,100 5,4,3,2,1 1,2,3,4,5 8,3,6,2,9 8,6,18,8,45 2 133,76,651,130,4051) +BRLCAD_ADD_TEST(NAME bn_tabdata_incr_mul3_scale COMMAND bn_test tabdata 5 5,0,20,40,60,80,100 5,4,3,2,1 1,2,3,4,5 8,3,6,2,9 8,6,18,8,45 2 133,76,651,130,4051) # For function #6 (bn_tabdata_incr_mul2_scale), the format is as follows: @@ -776,7 +782,7 @@ add_test(NAME bn_tabdata_incr_mul3_scale COMMAND bn_test tabdata 5 5,0,20,40,60, # entry is nx,x0,x1,...,x(nx), then the tabdata entry is # y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_incr_mul2_scale COMMAND bn_test tabdata 6 5,0,20,40,60,80,100 5,4,3,2,1 1,2,3,4,5 8,3,6,2,9 2 21,16,39,18,91) +BRLCAD_ADD_TEST(NAME bn_tabdata_incr_mul2_scale COMMAND bn_test tabdata 6 5,0,20,40,60,80,100 5,4,3,2,1 1,2,3,4,5 8,3,6,2,9 2 21,16,39,18,91) # For function #7 (bn_tabdata_scale), the format is as follows: @@ -790,7 +796,7 @@ add_test(NAME bn_tabdata_incr_mul2_scale COMMAND bn_test tabdata 6 5,0,20,40,60, # table entry is nx,x0,x1,...,x(nx), then the tabdata entry is # y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_scale COMMAND bn_test tabdata 7 5,0,20,40,60,80,100 1,2,3,4,5 2 2,4,6,8,10) +BRLCAD_ADD_TEST(NAME bn_tabdata_scale COMMAND bn_test tabdata 7 5,0,20,40,60,80,100 1,2,3,4,5 2 2,4,6,8,10) # For function #8 (bn_table_scale), the format is as follows: @@ -801,7 +807,7 @@ add_test(NAME bn_tabdata_scale COMMAND bn_test tabdata 7 5,0,20,40,60,80,100 1,2 # comma-separated numbers, where the first one is the number of # entries: nx,x0,x1,...,x(nx). -add_test(NAME bn_table_scale COMMAND bn_test tabdata 8 5,0,20,40,60,80,100 2 5,0,40,80,120,160,200) +BRLCAD_ADD_TEST(NAME bn_table_scale COMMAND bn_test tabdata 8 5,0,20,40,60,80,100 2 5,0,40,80,120,160,200) # For function #9 (bn_tabdata_join1), the format is as follows: @@ -816,7 +822,7 @@ add_test(NAME bn_table_scale COMMAND bn_test tabdata 8 5,0,20,40,60,80,100 2 5,0 # the table to which it refers; if the table entry is # nx,x0,x1,...,x(nx), then the tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_join1 COMMAND bn_test tabdata 9 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 2 11,10,9,8,7) +BRLCAD_ADD_TEST(NAME bn_tabdata_join1 COMMAND bn_test tabdata 9 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 2 11,10,9,8,7) # For function #10 (bn_tabdata_join2), the format is as follows: @@ -831,7 +837,7 @@ add_test(NAME bn_tabdata_join1 COMMAND bn_test tabdata 9 5,0,20,40,60,80,100 1,2 # the table to which it refers; if the table entry is # nx,x0,x1,...,x(nx), then the tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_join2 COMMAND bn_test tabdata 10 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 2,4,6,8,10 2 3 17,22,27,32,37) +BRLCAD_ADD_TEST(NAME bn_tabdata_join2 COMMAND bn_test tabdata 10 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 2,4,6,8,10 2 3 17,22,27,32,37) # For function #11 (bn_tabdata_blend2), the format is as follows: @@ -846,7 +852,7 @@ add_test(NAME bn_tabdata_join2 COMMAND bn_test tabdata 10 5,0,20,40,60,80,100 1, # the table to which it refers; if the table entry is # nx,x0,x1,...,x(nx), then the tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_blend2 COMMAND bn_test tabdata 11 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 2 0.5 4.5,6,7.5,9,10.5) +BRLCAD_ADD_TEST(NAME bn_tabdata_blend2 COMMAND bn_test tabdata 11 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 2 0.5 4.5,6,7.5,9,10.5) # For function #12 (bn_tabdata_blend3), the format is as follows: @@ -862,7 +868,7 @@ add_test(NAME bn_tabdata_blend2 COMMAND bn_test tabdata 11 5,0,20,40,60,80,100 1 # entry is nx,x0,x1,...,x(nx), then the tabdata entry is # y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_blend3 COMMAND bn_test tabdata 12 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 3,2,4,1,5 2 0.5 3 13.5,12,19.5,12,25.5) +BRLCAD_ADD_TEST(NAME bn_tabdata_blend3 COMMAND bn_test tabdata 12 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 3,2,4,1,5 2 0.5 3 13.5,12,19.5,12,25.5) # For function #13 (bn_tabdata_area1), the format is as follows: @@ -877,7 +883,7 @@ add_test(NAME bn_tabdata_blend3 COMMAND bn_test tabdata 12 5,0,20,40,60,80,100 1 # to which it refers; if the table entry is nx,x0,x1,...,x(nx), then # the tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_area1 COMMAND bn_test tabdata 13 5,0,20,40,60,80,100 1,2,3,4,5 15) +BRLCAD_ADD_TEST(NAME bn_tabdata_area1 COMMAND bn_test tabdata 13 5,0,20,40,60,80,100 1,2,3,4,5 15) # For function #14 (bn_tabdata_area2), the format is as follows: @@ -892,7 +898,7 @@ add_test(NAME bn_tabdata_area1 COMMAND bn_test tabdata 13 5,0,20,40,60,80,100 1, # to which it refers; if the table entry is nx,x0,x1,...,x(nx), then # the tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_area2 COMMAND bn_test tabdata 14 5,0,20,40,60,80,100 1,2,3,4,5 300) +BRLCAD_ADD_TEST(NAME bn_tabdata_area2 COMMAND bn_test tabdata 14 5,0,20,40,60,80,100 1,2,3,4,5 300) @@ -908,7 +914,7 @@ add_test(NAME bn_tabdata_area2 COMMAND bn_test tabdata 14 5,0,20,40,60,80,100 1, # the table to which it refers; if the table entry is # nx,x0,x1,...,x(nx), then the tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_mul_area1 COMMAND bn_test tabdata 15 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 35) +BRLCAD_ADD_TEST(NAME bn_tabdata_mul_area1 COMMAND bn_test tabdata 15 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 35) # For function #16 (bn_tabdata_mul_area2), the format is as follows: @@ -923,7 +929,7 @@ add_test(NAME bn_tabdata_mul_area1 COMMAND bn_test tabdata 15 5,0,20,40,60,80,10 # the table to which it refers; if the table entry is # nx,x0,x1,...,x(nx), then the tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_mul_area2 COMMAND bn_test tabdata 16 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 700) +BRLCAD_ADD_TEST(NAME bn_tabdata_mul_area2 COMMAND bn_test tabdata 16 5,0,20,40,60,80,100 1,2,3,4,5 5,4,3,2,1 700) # For function #17 (bn_table_lin_interp), the format is as follows: @@ -937,11 +943,11 @@ add_test(NAME bn_tabdata_mul_area2 COMMAND bn_test tabdata 16 5,0,20,40,60,80,10 # the table to which it refers; if the table entry is # nx,x0,x1,...,x(nx), then the tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_table_lin_interp_1 COMMAND bn_test tabdata 17 5,0,20,40,60,80,100 1,2,3,4,5 30 2.5) -add_test(NAME bn_table_lin_interp_2 COMMAND bn_test tabdata 17 5,0,20,30,60,80,100 1,2,3,4,5 30 3) -add_test(NAME bn_table_lin_interp_3 COMMAND bn_test tabdata 17 5,0,20,30,60,80,100 1,2,3,4,5 45 3.5) -add_test(NAME bn_table_lin_interp_4 COMMAND bn_test tabdata 17 5,0,20,30,60,80,100 1,2,3,4,5 25 2.5) -add_test(NAME bn_table_lin_interp_5 COMMAND bn_test tabdata 17 5,0,20,40,60,80,100 1,2,3,4,5 800 0) +BRLCAD_ADD_TEST(NAME bn_table_lin_interp_1 COMMAND bn_test tabdata 17 5,0,20,40,60,80,100 1,2,3,4,5 30 2.5) +BRLCAD_ADD_TEST(NAME bn_table_lin_interp_2 COMMAND bn_test tabdata 17 5,0,20,30,60,80,100 1,2,3,4,5 30 3) +BRLCAD_ADD_TEST(NAME bn_table_lin_interp_3 COMMAND bn_test tabdata 17 5,0,20,30,60,80,100 1,2,3,4,5 45 3.5) +BRLCAD_ADD_TEST(NAME bn_table_lin_interp_4 COMMAND bn_test tabdata 17 5,0,20,30,60,80,100 1,2,3,4,5 25 2.5) +BRLCAD_ADD_TEST(NAME bn_table_lin_interp_5 COMMAND bn_test tabdata 17 5,0,20,40,60,80,100 1,2,3,4,5 800 0) # For function #18 (bn_tabdata_copy), the format is as follows: @@ -955,7 +961,7 @@ add_test(NAME bn_table_lin_interp_5 COMMAND bn_test tabdata 17 5,0,20,40,60,80,1 # table entry is nx,x0,x1,...,x(nx), then the tabdata entry is # y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_copy COMMAND bn_test tabdata 18 5,0,20,40,60,80,100 1,2,3,4,5) +BRLCAD_ADD_TEST(NAME bn_tabdata_copy COMMAND bn_test tabdata 18 5,0,20,40,60,80,100 1,2,3,4,5) # For function #19 (bn_tabdata_dup), the format is as follows: @@ -969,7 +975,7 @@ add_test(NAME bn_tabdata_copy COMMAND bn_test tabdata 18 5,0,20,40,60,80,100 1,2 # table entry is nx,x0,x1,...,x(nx), then the tabdata entry is # y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_dup COMMAND bn_test tabdata 19 5,0,20,40,60,80,100 1,2,3,4,5) +BRLCAD_ADD_TEST(NAME bn_tabdata_dup COMMAND bn_test tabdata 19 5,0,20,40,60,80,100 1,2,3,4,5) # For function #20 (bn_tabdata_get_constval), the format is as follows: @@ -984,7 +990,7 @@ add_test(NAME bn_tabdata_dup COMMAND bn_test tabdata 19 5,0,20,40,60,80,100 1,2, # the table to which it refers; if the table entry is # nx,x0,x1,...,x(nx), then the tabdata entry is y0,y1,...y(nx-1) -add_test(NAME bn_tabdata_get_constval COMMAND bn_test tabdata 20 5,0,20,40,60,80,100 3 3,3,3,3,3) +BRLCAD_ADD_TEST(NAME bn_tabdata_get_constval COMMAND bn_test tabdata 20 5,0,20,40,60,80,100 3 3,3,3,3,3) # # *************** qmath.c tests *************** @@ -1000,10 +1006,10 @@ add_test(NAME bn_tabdata_get_constval COMMAND bn_test tabdata 20 5,0,20,40,60,80 # mat_t matrix, and expected_quat is a sequence of 4 comma-separated # numbers representing a quaternion (X, Y, Z, W). -add_test(NAME bn_quat_mat2quat_identity COMMAND bn_test qmath 1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 0,0,0,1) -add_test(NAME bn_quat_mat2quat_trace_0_1 COMMAND bn_test qmath 1 1,0,0,0,0,-1,0,0,0,0,-1,0,0,0,0,-1 1,0,0,0) -add_test(NAME bn_quat_mat2quat_trace_0_2 COMMAND bn_test qmath 1 -1,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,-1 0,1,0,0) -add_test(NAME bn_quat_mat2quat_trace_0_3 COMMAND bn_test qmath 1 -1,0,0,0,0,-1,0,0,0,0,1,0,0,0,0,-1 0,0,1,0) +BRLCAD_ADD_TEST(NAME bn_quat_mat2quat_identity COMMAND bn_test qmath 1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1 0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_quat_mat2quat_trace_0_1 COMMAND bn_test qmath 1 1,0,0,0,0,-1,0,0,0,0,-1,0,0,0,0,-1 1,0,0,0) +BRLCAD_ADD_TEST(NAME bn_quat_mat2quat_trace_0_2 COMMAND bn_test qmath 1 -1,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,-1 0,1,0,0) +BRLCAD_ADD_TEST(NAME bn_quat_mat2quat_trace_0_3 COMMAND bn_test qmath 1 -1,0,0,0,0,-1,0,0,0,0,1,0,0,0,0,-1 0,0,1,0) # For function #2 (quat_quat2mat), the format is as follows: # @@ -1013,10 +1019,10 @@ add_test(NAME bn_quat_mat2quat_trace_0_3 COMMAND bn_test qmath 1 -1,0,0,0,0,-1,0 # quaternion (X, Y, Z, W), and expected_mat is a sequence of 16 # comma-separated numbers representing a mat_t matrix. -add_test(NAME bn_quat_quat2mat_identity COMMAND bn_test qmath 2 0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) -add_test(NAME bn_quat_quat2mat_trace_0_1 COMMAND bn_test qmath 2 1,0,0,0 1,0,0,0,0,-1,0,0,0,0,-1,0,0,0,0,1) -add_test(NAME bn_quat_quat2mat_trace_0_2 COMMAND bn_test qmath 2 0,1,0,0 -1,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,1) -add_test(NAME bn_quat_quat2mat_trace_0_3 COMMAND bn_test qmath 2 0,0,1,0 -1,0,0,0,0,-1,0,0,0,0,1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_quat_quat2mat_identity COMMAND bn_test qmath 2 0,0,0,1 1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_quat_quat2mat_trace_0_1 COMMAND bn_test qmath 2 1,0,0,0 1,0,0,0,0,-1,0,0,0,0,-1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_quat_quat2mat_trace_0_2 COMMAND bn_test qmath 2 0,1,0,0 -1,0,0,0,0,1,0,0,0,0,-1,0,0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_quat_quat2mat_trace_0_3 COMMAND bn_test qmath 2 0,0,1,0 -1,0,0,0,0,-1,0,0,0,0,1,0,0,0,0,1) # For function #3 (quat_distance), the format is as follows: # @@ -1026,9 +1032,9 @@ add_test(NAME bn_quat_quat2mat_trace_0_3 COMMAND bn_test qmath 2 0,0,1,0 -1,0,0, # representing a quaternion (X, Y, Z, W), and expected_distance is the # correct distance between q1 and q2. -add_test(NAME bn_quat_distance_0 COMMAND bn_test qmath 3 1,2,0,3 1,2,0,3 0) -add_test(NAME bn_quat_distance_1 COMMAND bn_test qmath 3 1,2,0,3 -1,-2,0,-3 7.483) -add_test(NAME bn_quat_distance_2 COMMAND bn_test qmath 3 4,2,3,1 0,0,2,3 5) +BRLCAD_ADD_TEST(NAME bn_quat_distance_0 COMMAND bn_test qmath 3 1,2,0,3 1,2,0,3 0) +BRLCAD_ADD_TEST(NAME bn_quat_distance_1 COMMAND bn_test qmath 3 1,2,0,3 -1,-2,0,-3 7.483) +BRLCAD_ADD_TEST(NAME bn_quat_distance_2 COMMAND bn_test qmath 3 4,2,3,1 0,0,2,3 5) # For function #4 (quat_double), the format is as follows: # @@ -1037,8 +1043,8 @@ add_test(NAME bn_quat_distance_2 COMMAND bn_test qmath 3 4,2,3,1 0,0,2,3 5) # where q1, q2, and expected_quat are sequences of 4 comma-separated # numbers each representing a quaternion (X, Y, Z, W). -add_test(NAME bn_quat_double_0 COMMAND bn_test qmath 4 0,2,0,1 0,2,0,1 0,0.894,0,0.447) -add_test(NAME bn_quat_double_1 COMMAND bn_test qmath 4 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.900,0.177,0.355,0.179) +BRLCAD_ADD_TEST(NAME bn_quat_double_0 COMMAND bn_test qmath 4 0,2,0,1 0,2,0,1 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_double_1 COMMAND bn_test qmath 4 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.900,0.177,0.355,0.179) # For function #5 (quat_bisect), the format is as follows: # @@ -1047,8 +1053,8 @@ add_test(NAME bn_quat_double_1 COMMAND bn_test qmath 4 0.548,0.365,0.730,0.183 0 # where q1, q2, and expected_quat are sequences of 4 comma-separated # numbers each representing a quaternion (X, Y, Z, W). -add_test(NAME bn_quat_bisect_0 COMMAND bn_test qmath 5 0,0.894,0,0.447 0,0.894,0,0.447 0,0.894,0,0.447) -add_test(NAME bn_quat_bisect_1 COMMAND bn_test qmath 5 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.657,0.327,0.653,0.187) +BRLCAD_ADD_TEST(NAME bn_quat_bisect_0 COMMAND bn_test qmath 5 0,0.894,0,0.447 0,0.894,0,0.447 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_bisect_1 COMMAND bn_test qmath 5 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.657,0.327,0.653,0.187) # For function #6 (quat_slerp), the format is as follows: # @@ -1059,14 +1065,14 @@ add_test(NAME bn_quat_bisect_1 COMMAND bn_test qmath 5 0.548,0.365,0.730,0.183 0 # single number which is the fraction between q1 and q2 to interpolate # for. -add_test(NAME bn_quat_slerp_same_0 COMMAND bn_test qmath 6 0,0.894,0,0.447 0,0.894,0,0.447 0 0,0.894,0,0.447) -add_test(NAME bn_quat_slerp_same_0.5 COMMAND bn_test qmath 6 0,0.894,0,0.447 0,0.894,0,0.447 0.5 0,0.894,0,0.447) -add_test(NAME bn_quat_slerp_same_0.783 COMMAND bn_test qmath 6 0,0.894,0,0.447 0,0.894,0,0.447 0.783 0,0.894,0,0.447) -add_test(NAME bn_quat_slerp_same_1 COMMAND bn_test qmath 6 0,0.894,0,0.447 0,0.894,0,0.447 1 0,0.894,0,0.447) -add_test(NAME bn_quat_slerp_diff_0 COMMAND bn_test qmath 6 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0 0.548,0.365,0.730,0.183) -add_test(NAME bn_quat_slerp_diff_0.5 COMMAND bn_test qmath 6 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.5 0.657,0.327,0.653,0.187) -add_test(NAME bn_quat_slerp_diff_0.783 COMMAND bn_test qmath 6 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.783 0.713,0.302,0.604,0.188) -add_test(NAME bn_quat_slerp_diff_1 COMMAND bn_test qmath 6 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 1 0.753,0.282,0.564,0.188) +BRLCAD_ADD_TEST(NAME bn_quat_slerp_same_0 COMMAND bn_test qmath 6 0,0.894,0,0.447 0,0.894,0,0.447 0 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_slerp_same_0.5 COMMAND bn_test qmath 6 0,0.894,0,0.447 0,0.894,0,0.447 0.5 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_slerp_same_0.783 COMMAND bn_test qmath 6 0,0.894,0,0.447 0,0.894,0,0.447 0.783 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_slerp_same_1 COMMAND bn_test qmath 6 0,0.894,0,0.447 0,0.894,0,0.447 1 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_slerp_diff_0 COMMAND bn_test qmath 6 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0 0.548,0.365,0.730,0.183) +BRLCAD_ADD_TEST(NAME bn_quat_slerp_diff_0.5 COMMAND bn_test qmath 6 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.5 0.657,0.327,0.653,0.187) +BRLCAD_ADD_TEST(NAME bn_quat_slerp_diff_0.783 COMMAND bn_test qmath 6 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.783 0.713,0.302,0.604,0.188) +BRLCAD_ADD_TEST(NAME bn_quat_slerp_diff_1 COMMAND bn_test qmath 6 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 1 0.753,0.282,0.564,0.188) # For function #7 (quat_sberp), the format is as follows: # @@ -1077,14 +1083,14 @@ add_test(NAME bn_quat_slerp_diff_1 COMMAND bn_test qmath 6 0.548,0.365,0.730,0.1 # f is a single number which is the fraction between q1 and q2 to # interpolate for. -add_test(NAME bn_quat_sberp_same_0 COMMAND bn_test qmath 7 0,0.894,0,0.447 1,0,0,0 0.5,0.5,0.5,0.5 0,0.894,0,0.447 0 0,0.894,0,0.447) -add_test(NAME bn_quat_sberp_same_0.5 COMMAND bn_test qmath 7 0,0.894,0,0.447 1,0,0,0 0.5,0.5,0.5,0.5 0,0.894,0,0.447 0.5 0.723,0.529,0.230,0.380) -add_test(NAME bn_quat_sberp_same_0.783 COMMAND bn_test qmath 7 0,0.894,0,0.447 1,0,0,0 0.5,0.5,0.5,0.5 0,0.894,0,0.447 0.783 0.391,0.740,0.241,0.491) -add_test(NAME bn_quat_sberp_same_1 COMMAND bn_test qmath 7 0,0.894,0,0.447 1,0,0,0 0.5,0.5,0.5,0.5 0,0.894,0,0.447 1 0,0.894,0,0.447) -add_test(NAME bn_quat_sberp_diff_0 COMMAND bn_test qmath 7 0.548,0.365,0.730,0.183 1,0,0,0 0.5,0.5,0.5,0.5 0.753,0.282,0.564,0.188 0 0.548,0.365,0.730,0.183) -add_test(NAME bn_quat_sberp_diff_0.5 COMMAND bn_test qmath 7 0.548,0.365,0.730,0.183 1,0,0,0 0.5,0.5,0.5,0.5 0.753,0.282,0.564,0.188 0.5 0.828,0.302,0.392,0.264) -add_test(NAME bn_quat_sberp_diff_0.783 COMMAND bn_test qmath 7 0.548,0.365,0.730,0.183 1,0,0,0 0.5,0.5,0.5,0.5 0.753,0.282,0.564,0.188 0.783 0.724,0.358,0.501,0.310) -add_test(NAME bn_quat_sberp_diff_1 COMMAND bn_test qmath 7 0.548,0.365,0.730,0.183 1,0,0,0 0.5,0.5,0.5,0.5 0.753,0.282,0.564,0.188 1 0.753,0.282,0.564,0.188) +BRLCAD_ADD_TEST(NAME bn_quat_sberp_same_0 COMMAND bn_test qmath 7 0,0.894,0,0.447 1,0,0,0 0.5,0.5,0.5,0.5 0,0.894,0,0.447 0 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_sberp_same_0.5 COMMAND bn_test qmath 7 0,0.894,0,0.447 1,0,0,0 0.5,0.5,0.5,0.5 0,0.894,0,0.447 0.5 0.723,0.529,0.230,0.380) +BRLCAD_ADD_TEST(NAME bn_quat_sberp_same_0.783 COMMAND bn_test qmath 7 0,0.894,0,0.447 1,0,0,0 0.5,0.5,0.5,0.5 0,0.894,0,0.447 0.783 0.391,0.740,0.241,0.491) +BRLCAD_ADD_TEST(NAME bn_quat_sberp_same_1 COMMAND bn_test qmath 7 0,0.894,0,0.447 1,0,0,0 0.5,0.5,0.5,0.5 0,0.894,0,0.447 1 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_sberp_diff_0 COMMAND bn_test qmath 7 0.548,0.365,0.730,0.183 1,0,0,0 0.5,0.5,0.5,0.5 0.753,0.282,0.564,0.188 0 0.548,0.365,0.730,0.183) +BRLCAD_ADD_TEST(NAME bn_quat_sberp_diff_0.5 COMMAND bn_test qmath 7 0.548,0.365,0.730,0.183 1,0,0,0 0.5,0.5,0.5,0.5 0.753,0.282,0.564,0.188 0.5 0.828,0.302,0.392,0.264) +BRLCAD_ADD_TEST(NAME bn_quat_sberp_diff_0.783 COMMAND bn_test qmath 7 0.548,0.365,0.730,0.183 1,0,0,0 0.5,0.5,0.5,0.5 0.753,0.282,0.564,0.188 0.783 0.724,0.358,0.501,0.310) +BRLCAD_ADD_TEST(NAME bn_quat_sberp_diff_1 COMMAND bn_test qmath 7 0.548,0.365,0.730,0.183 1,0,0,0 0.5,0.5,0.5,0.5 0.753,0.282,0.564,0.188 1 0.753,0.282,0.564,0.188) # For function #8 (quat_make_nearest), the format is as follows: # @@ -1093,10 +1099,10 @@ add_test(NAME bn_quat_sberp_diff_1 COMMAND bn_test qmath 7 0.548,0.365,0.730,0.1 # where q1, q2, and expected_result are sequences of 4 comma-separated # numbers, each representing a quaternion (X, Y, Z, W). -add_test(NAME bn_quat_make_nearest_same_0 COMMAND bn_test qmath 8 0,0.894,0,0.447 0,0.894,0,0.447 0,0.894,0,0.447) -add_test(NAME bn_quat_make_nearest_same_1 COMMAND bn_test qmath 8 0,-0.894,0,-0.447 0,0.894,0,0.447 0,0.894,0,0.447) -add_test(NAME bn_quat_make_nearest_diff_0 COMMAND bn_test qmath 8 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.548,0.365,0.730,0.183) -add_test(NAME bn_quat_make_nearest_diff_1 COMMAND bn_test qmath 8 -0.548,-0.365,-0.730,-0.183 0.753,0.282,0.564,0.188 0.548,0.365,0.730,0.183) +BRLCAD_ADD_TEST(NAME bn_quat_make_nearest_same_0 COMMAND bn_test qmath 8 0,0.894,0,0.447 0,0.894,0,0.447 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_make_nearest_same_1 COMMAND bn_test qmath 8 0,-0.894,0,-0.447 0,0.894,0,0.447 0,0.894,0,0.447) +BRLCAD_ADD_TEST(NAME bn_quat_make_nearest_diff_0 COMMAND bn_test qmath 8 0.548,0.365,0.730,0.183 0.753,0.282,0.564,0.188 0.548,0.365,0.730,0.183) +BRLCAD_ADD_TEST(NAME bn_quat_make_nearest_diff_1 COMMAND bn_test qmath 8 -0.548,-0.365,-0.730,-0.183 0.753,0.282,0.564,0.188 0.548,0.365,0.730,0.183) # For function #9 (quat_exp), the format is as follows: # @@ -1105,9 +1111,9 @@ add_test(NAME bn_quat_make_nearest_diff_1 COMMAND bn_test qmath 8 -0.548,-0.365, # where in and expected_out are sequences of 4 comma-separated # numbers, each representing a quaternion (X, Y, Z, W). -add_test(NAME bn_quat_exp_0 COMMAND bn_test qmath 9 0,0,0,0 0,0,0,1) -add_test(NAME bn_quat_exp_1 COMMAND bn_test qmath 9 0.577,0.577,0.577,0 0.486,0.486,0.486,0.541) -add_test(NAME bn_quat_exp_2 COMMAND bn_test qmath 9 0.365,0.730,0.183,0 0.324,0.648,0.162,0.670) +BRLCAD_ADD_TEST(NAME bn_quat_exp_0 COMMAND bn_test qmath 9 0,0,0,0 0,0,0,1) +BRLCAD_ADD_TEST(NAME bn_quat_exp_1 COMMAND bn_test qmath 9 0.577,0.577,0.577,0 0.486,0.486,0.486,0.541) +BRLCAD_ADD_TEST(NAME bn_quat_exp_2 COMMAND bn_test qmath 9 0.365,0.730,0.183,0 0.324,0.648,0.162,0.670) # For function #10 (quat_exp), the format is as follows: # @@ -1116,9 +1122,9 @@ add_test(NAME bn_quat_exp_2 COMMAND bn_test qmath 9 0.365,0.730,0.183,0 0.324,0. # where in and expected_out are sequences of 4 comma-separated # numbers, each representing a quaternion (X, Y, Z, W). -add_test(NAME bn_quat_log_0 COMMAND bn_test qmath 10 1,0,0,0 1.571,0,0,0) -add_test(NAME bn_quat_log_1 COMMAND bn_test qmath 10 0.5,0.5,0.5,0.5 0.605,0.605,0.605,0) -add_test(NAME bn_quat_log_2 COMMAND bn_test qmath 10 0.548,0.365,0.730,0.183 0.773,0.515,1.030,0) +BRLCAD_ADD_TEST(NAME bn_quat_log_0 COMMAND bn_test qmath 10 1,0,0,0 1.571,0,0,0) +BRLCAD_ADD_TEST(NAME bn_quat_log_1 COMMAND bn_test qmath 10 0.5,0.5,0.5,0.5 0.605,0.605,0.605,0) +BRLCAD_ADD_TEST(NAME bn_quat_log_2 COMMAND bn_test qmath 10 0.548,0.365,0.730,0.183 0.773,0.515,1.030,0) # @@ -1130,17 +1136,30 @@ add_test(NAME bn_quat_log_2 COMMAND bn_test qmath 10 0.548,0.365,0.730,0.183 0.7 # the format is as follows: # expected_result # -add_test(NAME bn_vlist_cmd_cnt_NULL COMMAND bn_test vlist -1) -add_test(NAME bn_vlist_cmd_cnt_0 COMMAND bn_test vlist 0) -add_test(NAME bn_vlist_cmd_cnt_1 COMMAND bn_test vlist 5) -add_test(NAME bn_vlist_cmd_cnt_15 COMMAND bn_test vlist 15) -add_test(NAME bn_vlist_cmd_cnt_45 COMMAND bn_test vlist 45) -add_test(NAME bn_vlist_cmd_cnt_500 COMMAND bn_test vlist 500) +BRLCAD_ADD_TEST(NAME bn_vlist_cmd_cnt_NULL COMMAND bn_test vlist -1) +BRLCAD_ADD_TEST(NAME bn_vlist_cmd_cnt_0 COMMAND bn_test vlist 0) +BRLCAD_ADD_TEST(NAME bn_vlist_cmd_cnt_1 COMMAND bn_test vlist 5) +BRLCAD_ADD_TEST(NAME bn_vlist_cmd_cnt_15 COMMAND bn_test vlist 15) +BRLCAD_ADD_TEST(NAME bn_vlist_cmd_cnt_45 COMMAND bn_test vlist 45) +BRLCAD_ADD_TEST(NAME bn_vlist_cmd_cnt_500 COMMAND bn_test vlist 500) +# +# *************** plot3.c *************** +# +# Tests to detect validity/invalidity of plot3 files +# +BRLCAD_ADD_TEST(NAME bn_plot3_valid COMMAND bn_plot3 -b "${CMAKE_CURRENT_SOURCE_DIR}/valid.plot3") +BRLCAD_ADD_TEST(NAME bn_plot3_invalid COMMAND bn_plot3 -i -b "${CMAKE_CURRENT_SOURCE_DIR}/invalid.plot3") -CMAKEFILES(poly_cubic_roots.c poly_quartic_roots.c) -CMAKEFILES(bntester.dat) -CMAKEFILES(CMakeLists.txt) +CMAKEFILES( + CMakeLists.txt + bntester.dat + bn_test.c.in + poly_cubic_roots.c + poly_quartic_roots.c + valid.plot3 + invalid.plot3 + ) # Local Variables: # tab-width: 8 diff --git a/src/libbn/tests/bn_test.c.in b/src/libbn/tests/bn_test.c.in index 8a961b16a63..ed1ad7d11b8 100644 --- a/src/libbn/tests/bn_test.c.in +++ b/src/libbn/tests/bn_test.c.in @@ -1,7 +1,7 @@ /* B N _ T E S T . C . I N * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/bntester.c b/src/libbn/tests/bntester.c index 3dd27bf6627..6bd2ea5a628 100644 --- a/src/libbn/tests/bntester.c +++ b/src/libbn/tests/bntester.c @@ -1,7 +1,7 @@ /* B N T E S T E R . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/complex.c b/src/libbn/tests/complex.c index f5a6bd1e2a6..981bd3a41dc 100644 --- a/src/libbn/tests/complex.c +++ b/src/libbn/tests/complex.c @@ -1,7 +1,7 @@ /* C O M P L E X . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/invalid.plot3 b/src/libbn/tests/invalid.plot3 new file mode 100644 index 0000000000000000000000000000000000000000..d8e79280f63dfcd58c86cb467005050ff980cab1 GIT binary patch literal 7950 zcmbuDJ&qJH6okD2KWE_z1l`i4#3N3?6_7}FZb5*Ah|nT(()Iy>fGdz7A_9bvKs2*< zeV%=_J2O3=NxWUp_3HiDZuhR{&AiSRU!T8v`SU8L_!}$!*6~#rsj}|BdHwA2@u%rW zl$!p0c=7G&llP9#o7KD)ctISDgPicpcpctQ9bUP^u?Fzb@eCPX~xUrCi zx%~dRaePqle~yRZkvEelp5s+Xg>WNm>zpyef5(l#{qA z>ko2rJmloY!z9h7w3%l$-SLo<8!3e2g*4TwU5rv_N~)&g{UkgyN;wgp;~^(E9wd7XUoulrgbt=xj?-Tg> zq^Xwr=nXC?b&;}i6S=+R$qhUx^^xpM$BCcmQK^fhoCYmel*kD@D)o?5opz=-CANy3 z2BlL-yW4#03>tEC>qfEt0@&W?u`-(xoLYd->!e>+$+3XbC-5SJv5&Oy<0dFA{ZNTj zup^5qa8~dfNK4;{A-ufs>n4zB2GwNrubU8Fwv(0|{G<&es)qt3KWPhTu>F(80w-+n z)oKn)&kks`C^~L7^J>lCxMBpqC3RDXMlpF}_gMhf9Ho$`9vpD02Og?NRHJ4iM0DW& zBsos>i7>$F6L?X=$R;EVaCR}zNgXIk7-&y<FnURw=G#8`4J-~T;+)47c2PEDeg*0eqVk9TW zLr!iaC&xohbiOI2`g1(=$&I;k+OdqYKw^^SCbov-VL!QX5efOGbmU7QtO!W-$(@Bh zF`4n${k+~`H|s3Ipg!}=2u=ZaH%k%QcNx!&T + +#include "bu/app.h" +#include "bu/malloc.h" +#include "bu/log.h" +#include "vmath.h" +#include "bu/file.h" +#include "bu/opt.h" +#include "bn/plot3.h" + +int +main(int argc, const char *argv[]) +{ + int ret = 0; + int print_help = 0; + int binary_mode = 0; + int text_mode = 0; + int expect_invalid = 0; + int mode = -1; + struct bu_opt_desc d[5]; + BU_OPT(d[0], "h", "help", "", NULL, &print_help, "Print help and exit"); + BU_OPT(d[1], "b", "binary", "", NULL, &binary_mode, "Process plot file as binary plot data (default)"); + BU_OPT(d[2], "t", "text", "", NULL, &text_mode, "Process plot file as text plot data"); + BU_OPT(d[3], "i", "invalid", "", NULL, &expect_invalid, "Expect to detect an invalid file"); + BU_OPT_NULL(d[4]); + + bu_setprogname(argv[0]); + + argc-=(argc>0); argv+=(argc>0); /* done with command name argv[0] */ + + int opt_ret = bu_opt_parse(NULL, argc, argv, d); + + if (!opt_ret) + bu_exit(1, "Usage: %s [opts] file\n", argv[0]); + + if (binary_mode && text_mode) + bu_exit(1, "Error - specify either binary mode or text mode\n"); + + + if (binary_mode) + mode = PL_OUTPUT_MODE_BINARY; + + if (text_mode) + mode = PL_OUTPUT_MODE_BINARY; + + if (!bu_file_exists(argv[0], NULL)) { + bu_exit(1, "file %s not found\n", argv[0]); + } + + FILE *fp = fopen(argv[0], "rb"); + + /* A non-readable file isn't a valid file */ + if (!fp) + bu_exit(1, "Error - could not open file %s\n", argv[0]); + + ret = plot3_invalid(fp, mode); + + if (expect_invalid) { + if (ret) { + bu_log("INVALID (expected): %s\n", argv[0]); + } else { + bu_log("VALID (unexpected): %s\n", argv[0]); + } + ret = (ret) ? 0 : 1; + } else { + if (ret) { + bu_log("INVALID: %s\n", argv[0]); + } else { + bu_log("VALID: %s\n", argv[0]); + } + } + + return ret; +} + + +/** @} */ +/* + * Local Variables: + * mode: C + * tab-width: 8 + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libbn/tests/poly_add.c b/src/libbn/tests/poly_add.c index 31a23436e2d..f5686b6fe69 100644 --- a/src/libbn/tests/poly_add.c +++ b/src/libbn/tests/poly_add.c @@ -1,7 +1,7 @@ /* P O L Y _ A D D . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/poly_cubic_roots.c b/src/libbn/tests/poly_cubic_roots.c index fe0a664a282..92996c8f67e 100644 --- a/src/libbn/tests/poly_cubic_roots.c +++ b/src/libbn/tests/poly_cubic_roots.c @@ -1,7 +1,7 @@ /* P O L Y _ C U B I C _ R O O T S. C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/poly_multiply.c b/src/libbn/tests/poly_multiply.c index dbe3d2151af..7c29d8e663c 100644 --- a/src/libbn/tests/poly_multiply.c +++ b/src/libbn/tests/poly_multiply.c @@ -1,7 +1,7 @@ /* P O L Y _ M U L T I P L Y . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/poly_quartic_roots.c b/src/libbn/tests/poly_quartic_roots.c index a01720f0dcc..c52b3c959ac 100644 --- a/src/libbn/tests/poly_quartic_roots.c +++ b/src/libbn/tests/poly_quartic_roots.c @@ -1,7 +1,7 @@ /* P O L Y _ Q U A R T I C _ R O O T S. C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/poly_scale.c b/src/libbn/tests/poly_scale.c index fc09bbbae02..bffb0f1e336 100644 --- a/src/libbn/tests/poly_scale.c +++ b/src/libbn/tests/poly_scale.c @@ -1,7 +1,7 @@ /* P O L Y _ S C A L E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/poly_sub.c b/src/libbn/tests/poly_sub.c index fef92a064bf..5588220a336 100644 --- a/src/libbn/tests/poly_sub.c +++ b/src/libbn/tests/poly_sub.c @@ -1,7 +1,7 @@ /* P O L Y _ S U B . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/poly_synthetic_div.c b/src/libbn/tests/poly_synthetic_div.c index ac2aac7ddab..56461c8e2bd 100644 --- a/src/libbn/tests/poly_synthetic_div.c +++ b/src/libbn/tests/poly_synthetic_div.c @@ -1,7 +1,7 @@ /* P O L Y _ S Y N T H E T I C _ D I V . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/qmath.c b/src/libbn/tests/qmath.c index 010b0025631..f6921d8b356 100644 --- a/src/libbn/tests/qmath.c +++ b/src/libbn/tests/qmath.c @@ -1,7 +1,7 @@ /* Q M A T H . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/randsph.c b/src/libbn/tests/randsph.c index 47992e35f01..9dc0f5e693b 100644 --- a/src/libbn/tests/randsph.c +++ b/src/libbn/tests/randsph.c @@ -1,7 +1,7 @@ /* R A N D S P H . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/tabdata.c b/src/libbn/tests/tabdata.c index 6b48a6f65cb..bc28f45103b 100644 --- a/src/libbn/tests/tabdata.c +++ b/src/libbn/tests/tabdata.c @@ -1,7 +1,7 @@ /* T A B D A T A . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/tests/valid.plot3 b/src/libbn/tests/valid.plot3 new file mode 100644 index 0000000000000000000000000000000000000000..643529ec948842704bdfb7b370739615f279746d GIT binary patch literal 7950 zcmb`LJ&sf{5QMz}KWE_z1kci@#E27c1tgN?76eF$XayoCeLlc00aqYFL<9&Sv0{+y z`i#2tX2$DTC%vwAb#?pidG>twYWK9H*09Tu)?aqD-8grsiQzRmY zoaj@N$9$kF+^833K6NA@Z@7_MYc>LM%N?Mxp%AI*nu%>jsM!ZgHUFpxKm*1W} z`RI64YRrC8Ou7+ z$2KLc)2g&2oK~%qDoei^brgK6tCi zPOgF^c7!+y{B$MKAu>vihuK4(+_{z=KY?VQ8kD$=db;|fDNT`do+y|aI8Tm;nsAaH z6XAFz`Ne_~hY%8Ys0oE$c&qi&@sJ))B9fltrz?>=kx_DdK0VdYzwTX0w-SA9RhlA| z)EZ>^SZbmlYMLSuN#wonzMwQmvLiweKUYy{ij-RO+47wcm1amxc^0`?5b&UME0V7Z z3gFZPUX^eHV!;oS2EXz_i3Y341NfL z(&!T|D6vk9t}Z5sbpj7cW$1D_`;aAHSLFt|UgsuHqF z=jg*~osB5p+@4X!Ye_x@iZ)WmJ% zByJ<{K;q=8#Q#eAy$c>loF|;5&3OV3Bx+(XcGdq{=m!!t;lxrC{Xi*9Dw&zCkBS?=!m;q$N9pTO)5&=n%*>gP1UXeG;s+PUK1nS~yY=5CJ z<&K9bFY;#DAth?TvQG4|o9l#9iHiMw&PJ{^5vg1Kd%yR!W5VLDfKnJz${I{$NREf} u+&M%_YLMARj)%SH&LI-DbR|V`Jk;dQGD1QDyS63R`%9oME`zbhNdEu=_ZZp$ literal 0 HcmV?d00001 diff --git a/src/libbn/tests/vlist.c b/src/libbn/tests/vlist.c index ad2ae818d7a..e35fc0772fa 100644 --- a/src/libbn/tests/vlist.c +++ b/src/libbn/tests/vlist.c @@ -1,7 +1,7 @@ /* V L I S T . C * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -38,7 +38,7 @@ vlist_main(int argc, char* argv[]) point_t ptzero = VINIT_ZERO; struct bu_list head; struct bu_list vlfree; - int cmd_cnt_length = 0; + size_t cmd_cnt_length = 0; int expected_length = 0; sscanf(argv[1], "%d", &expected_length); @@ -50,7 +50,7 @@ vlist_main(int argc, char* argv[]) BU_LIST_INIT(&head); BU_LIST_INIT(&vlfree); if (expected_length < 0) { - return bn_vlist_cmd_cnt(NULL); + return (int)bn_vlist_cmd_cnt(NULL); } for (int i = 0; i < expected_length; i++) { @@ -59,7 +59,7 @@ vlist_main(int argc, char* argv[]) cmd_cnt_length = bn_vlist_cmd_cnt((struct bn_vlist*) & head); - return !(expected_length == cmd_cnt_length); + return !((size_t)expected_length == cmd_cnt_length); } diff --git a/src/libbn/tplot.c b/src/libbn/tplot.c index 42d834117ab..01534a4c31d 100644 --- a/src/libbn/tplot.c +++ b/src/libbn/tplot.c @@ -1,7 +1,7 @@ /* T P L O T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/ulp.c b/src/libbn/ulp.c index faf4e07ff38..d3b10039797 100644 --- a/src/libbn/ulp.c +++ b/src/libbn/ulp.c @@ -1,7 +1,7 @@ /* U L P . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/vectfont.c b/src/libbn/vectfont.c index 1bcec24baaa..15fab5385cd 100644 --- a/src/libbn/vectfont.c +++ b/src/libbn/vectfont.c @@ -1,7 +1,7 @@ /* V E C T F O N T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/vector.c b/src/libbn/vector.c index a8341f9425b..6c405d5ceff 100644 --- a/src/libbn/vector.c +++ b/src/libbn/vector.c @@ -1,7 +1,7 @@ /* V E C T O R . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/vers.c b/src/libbn/vers.c index d18c2ff1483..a6db2d19f7c 100644 --- a/src/libbn/vers.c +++ b/src/libbn/vers.c @@ -1,7 +1,7 @@ /* V E R S . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/vert_tree.c b/src/libbn/vert_tree.c index 732a9a0c4e2..e9236e871a8 100644 --- a/src/libbn/vert_tree.c +++ b/src/libbn/vert_tree.c @@ -1,7 +1,7 @@ /* V E R T _ T R E E . C * BRL-CAD * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbn/vlist.c b/src/libbn/vlist.c index 6627652d836..0d0d9e76de4 100644 --- a/src/libbn/vlist.c +++ b/src/libbn/vlist.c @@ -1,7 +1,7 @@ /* V L I S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -109,12 +109,12 @@ bn_vlist_bbox_internal(struct bn_vlist *vp, point_t *bmin, point_t *bmax, int *d } int -bn_vlist_bbox(struct bu_list *vlistp, point_t *bmin, point_t *bmax, int *length) +bn_vlist_bbox(struct bu_list *vlistp, point_t *bmin, point_t *bmax, size_t *length) { struct bn_vlist* vp; int cmd = 0; int disp_mode = 0; - int len = 0; + size_t len = 0; for (BU_LIST_FOR(vp, bn_vlist, vlistp)) { cmd = bn_vlist_bbox_internal(vp, bmin, bmax, &disp_mode); if (cmd) { diff --git a/src/libbn/wavelet.c b/src/libbn/wavelet.c index 9c6ed9bd743..f47b249b7eb 100644 --- a/src/libbn/wavelet.c +++ b/src/libbn/wavelet.c @@ -1,7 +1,7 @@ /* W A V E L E T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/BBNode.cpp b/src/libbrep/BBNode.cpp index 7ab7554b014..50ff6113043 100644 --- a/src/libbrep/BBNode.cpp +++ b/src/libbrep/BBNode.cpp @@ -1,7 +1,7 @@ /* B B N O D E . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/BRNode.cpp b/src/libbrep/BRNode.cpp index e6880cc7cd4..08893776d2d 100644 --- a/src/libbrep/BRNode.cpp +++ b/src/libbrep/BRNode.cpp @@ -1,7 +1,7 @@ /* B R N O D E . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/CMakeLists.txt b/src/libbrep/CMakeLists.txt index d71f0060984..c32a7056c35 100644 --- a/src/libbrep/CMakeLists.txt +++ b/src/libbrep/CMakeLists.txt @@ -4,14 +4,14 @@ set(BREP_INCLUDE_DIRS ${BRLCAD_SOURCE_DIR}/include ${BU_INCLUDE_DIRS} ${BN_INCLUDE_DIRS} - ${P2T_INCLUDE_DIR} + ${POLY2TRI_INCLUDE_DIRS} ${OPENNURBS_INCLUDE_DIRS} ) # locally used but not needed by users of the library set(BREP_LOCAL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} - ${REGEX_INCLUDE_DIR} + ${REGEX_INCLUDE_DIRS} ${BRLCAD_SOURCE_DIR}/src/other/Eigen ) @@ -33,6 +33,7 @@ set(LIBBREP_SOURCES cdt/mesh.cpp cdt/ovlps_simple.cpp cdt/tri_isect.cpp + debug_plot.cpp intersect.cpp tools/tools.cpp opennurbs_ext.cpp @@ -48,19 +49,7 @@ set(LIBBREP_SOURCES tools/util.cpp ) -set(libbrep_ignored_files - tools/tools.h - brep_except.h - cdt/cdt.h - cdt/mesh.h - cdt/RTree.h - PullbackCurve.h - shape_recognition/shape_recognition.h - shape_recognition/torus.cpp - ) -CMAKEFILES(${libbrep_ignored_files}) - -BRLCAD_ADDLIB(libbrep "${LIBBREP_SOURCES}" "libbg;libbn;libbu;${OPENNURBS_LIBRARIES};${P2T_LIBRARY};${WINSOCK_LIB};${RPCRT_LIB};${STDCXX_LIBRARIES}") +BRLCAD_ADDLIB(libbrep "${LIBBREP_SOURCES}" "libbg;libbn;libbu;${OPENNURBS_LIBRARIES};${POLY2TRI_LIBRARIES};${WINSOCK_LIB};${RPCRT_LIB};${STDCXX_LIBRARIES}") set_target_properties(libbrep PROPERTIES VERSION 20.0.1 SOVERSION 20) if(HIDE_INTERNAL_SYMBOLS) @@ -71,7 +60,19 @@ endif(HIDE_INTERNAL_SYMBOLS) add_subdirectory(tests) -CMAKEFILES(CMakeLists.txt) +CMAKEFILES( + CMakeLists.txt + PullbackCurve.h + brep_defines.h + brep_except.h + cdt/RTree.h + cdt/cdt.h + cdt/mesh.h + debug_plot.h + shape_recognition/shape_recognition.h + shape_recognition/torus.cpp + tools/tools.h + ) # Local Variables: # tab-width: 8 diff --git a/src/libbrep/PullbackCurve.cpp b/src/libbrep/PullbackCurve.cpp index 0f4bbee0d9e..aec2bfde4a9 100644 --- a/src/libbrep/PullbackCurve.cpp +++ b/src/libbrep/PullbackCurve.cpp @@ -1,7 +1,7 @@ /* P U L L B A C K C U R V E . C P P * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/PullbackCurve.h b/src/libbrep/PullbackCurve.h index 6618c76a3ae..435a9c283bd 100644 --- a/src/libbrep/PullbackCurve.h +++ b/src/libbrep/PullbackCurve.h @@ -1,7 +1,7 @@ /* P U L L B A C K C U R V E . H * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/Subcurve.cpp b/src/libbrep/Subcurve.cpp index 46f4e51324b..eb9dd26f2f2 100644 --- a/src/libbrep/Subcurve.cpp +++ b/src/libbrep/Subcurve.cpp @@ -1,7 +1,7 @@ /* S U B C U R V E . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/Subsurface.cpp b/src/libbrep/Subsurface.cpp index 76f506bf96c..431639e03fc 100644 --- a/src/libbrep/Subsurface.cpp +++ b/src/libbrep/Subsurface.cpp @@ -1,7 +1,7 @@ /* S U B S U R F A C E . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/boolean.cpp b/src/libbrep/boolean.cpp index 0031271f8da..62aa8e6b22a 100644 --- a/src/libbrep/boolean.cpp +++ b/src/libbrep/boolean.cpp @@ -1,7 +1,7 @@ /* B O O L E A N . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -21,6 +21,8 @@ * * Evaluate NURBS booleans (union, intersection and difference). * + * Additional documentation can be found in the "NURBS Boolean Evaluation + * Development Guide" docbook article (bool_eval_development.html). */ #include "common.h" @@ -31,6 +33,7 @@ #include #include #include +#include #include "bio.h" @@ -43,20 +46,15 @@ #include "brep/ray.h" #include "brep/util.h" +#include "debug_plot.h" #include "brep_except.h" +#include "brep_defines.h" +DebugPlot *dplot = NULL; // Whether to output the debug messages about b-rep booleans. #define DEBUG_BREP_BOOLEAN 0 -// tol value used in ON_Intersect()s. We use a smaller tolerance than the -// default one 0.001. -#define INTERSECTION_TOL 1e-4 - -// tol value used in ON_3dVector::IsParallelTo(). We use a smaller tolerance -// than the default one ON_PI/180. -#define ANGLE_TOL ON_PI/1800.0 - struct IntersectPoint { ON_3dPoint m_pt; // 3D intersection point @@ -104,7 +102,7 @@ struct SSICurve { }; -HIDDEN void +void append_to_polycurve(ON_Curve *curve, ON_PolyCurve &polycurve); // We link the SSICurves that share an endpoint, and form this new structure, // which has many similar behaviors as ON_Curve, e.g. PointAt(), Reverse(). @@ -344,7 +342,7 @@ curve_t_compare(const IntersectPoint *p1, const IntersectPoint *p2) } -HIDDEN void +void append_to_polycurve(ON_Curve *curve, ON_PolyCurve &polycurve) { // use this function rather than ON_PolyCurve::Append() to avoid @@ -3445,7 +3443,7 @@ get_face_intersection_curves( std::set *unused = i < face_count1 ? &unused1 : &unused2; std::set *intact = i < face_count1 ? &finalform1 : &finalform2; int curr_index = i < face_count1 ? i : i - face_count1; - if (face.BoundingBox().MinimumDistanceTo(brep->BoundingBox()) > ON_ZERO_TOLERANCE) { + if (face.BoundingBox().MinimumDistanceTo(brep->BoundingBox()) > INTERSECTION_TOL) { switch (operation) { case BOOLEAN_UNION: intact->insert(curr_index); @@ -3483,8 +3481,8 @@ get_face_intersection_curves( if (unused2.find(j) == unused2.end() && finalform2.find(j) == finalform2.end()) { // If the two faces don't interact according to their bounding boxes, // they won't be a source of events - otherwise, they must be checked. - fastf_t disjoint = brep1->m_F[i].BoundingBox().MinimumDistanceTo(brep2->m_F[j].BoundingBox()); - if (!(disjoint > ON_ZERO_TOLERANCE)) { + fastf_t face_dist = brep1->m_F[i].BoundingBox().MinimumDistanceTo(brep2->m_F[j].BoundingBox()); + if (face_dist <= INTERSECTION_TOL) { intersection_candidates.insert(std::pair(i, j)); } } @@ -3563,6 +3561,10 @@ get_face_intersection_curves( if (results <= 0) { continue; } + + dplot->SSX(events, brep1, brep1->m_F[i].m_si, brep2, brep2->m_F[j].m_si); + dplot->WriteLog(); + ON_SimpleArray face1_curves, face2_curves; for (int k = 0; k < events.Count(); k++) { if (events[k].m_type == ON_SSX_EVENT::ssx_tangent || @@ -3590,6 +3592,8 @@ get_face_intersection_curves( } } } + dplot->ClippedFaceCurves(surf1, surf2, face1_curves, face2_curves); + dplot->WriteLog(); if (DEBUG_BREP_BOOLEAN) { // Look for coplanar faces @@ -3603,7 +3607,6 @@ get_face_intersection_curves( } } - } } @@ -3694,6 +3697,7 @@ categorize_trimmed_faces( } splitted[j]->m_rev = false; + splitted[j]->m_belong_to_final = TrimmedFace::NOT_BELONG; switch (face_location) { case INSIDE_BREP: if (operation == BOOLEAN_INTERSECT || @@ -3798,6 +3802,8 @@ get_evaluated_faces(const ON_Brep *brep1, const ON_Brep *brep2, op_type operatio for (int i = 0; i < original_faces.Count(); i++) { TrimmedFace *first = original_faces[i]; ON_ClassArray linked_curves = link_curves(curves_array[i]); + dplot->LinkedCurves(first->m_face->SurfaceOf(), linked_curves); + dplot->WriteLog(); ON_SimpleArray splitted = split_trimmed_face(first, linked_curves); trimmed_faces.Append(splitted); @@ -3826,6 +3832,9 @@ get_evaluated_faces(const ON_Brep *brep1, const ON_Brep *brep2, op_type operatio categorize_trimmed_faces(trimmed_faces, brep1, brep2, surf_tree1, surf_tree2, operation); + dplot->SplitFaces(trimmed_faces); + dplot->WriteLog(); + for (int i = 0; i < surf_tree1.Count(); i++) { delete surf_tree1[i]; } @@ -3914,6 +3923,14 @@ standardize_loop_orientations(ON_Brep *brep) int ON_Boolean(ON_Brep *evaluated_brep, const ON_Brep *brep1, const ON_Brep *brep2, op_type operation) { + static int calls = 0; + ++calls; + std::ostringstream prefix; + prefix << "bool" << calls; + dplot = new DebugPlot(prefix.str().c_str()); + dplot->Surfaces(brep1, brep2); + dplot->WriteLog(); + ON_ClassArray > trimmed_faces; try { /* Deal with the trivial cases up front */ @@ -3934,14 +3951,17 @@ ON_Boolean(ON_Brep *evaluated_brep, const ON_Brep *brep1, const ON_Brep *brep2, } evaluated_brep->ShrinkSurfaces(); evaluated_brep->Compact(); + dplot->WriteLog(); return 0; } trimmed_faces = get_evaluated_faces(brep1, brep2, operation); } catch (InvalidBooleanOperation &e) { bu_log("%s", e.what()); + dplot->WriteLog(); return -1; } catch (GeometryGenerationError &e) { bu_log("%s", e.what()); + dplot->WriteLog(); return -1; } @@ -3999,6 +4019,10 @@ ON_Boolean(ON_Brep *evaluated_brep, const ON_Brep *brep1, const ON_Brep *brep2, bu_log("%s", ON_String(ws).Array()); } + dplot->WriteLog(); + delete dplot; + dplot = NULL; + return 0; } diff --git a/src/libbrep/brep_defines.h b/src/libbrep/brep_defines.h new file mode 100644 index 00000000000..80885c9aba9 --- /dev/null +++ b/src/libbrep/brep_defines.h @@ -0,0 +1,71 @@ +/* B R E P _ D E F I N E S . H + * BRL-CAD + * + * Copyright (c) 2014-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file brep_defines.h + * + * Private defines. + * + */ + +// The maximal depth for subdivision - trade-off between accuracy and +// performance. +#define NR_MAX_DEPTH 8 +#define MAX_PCI_DEPTH NR_MAX_DEPTH +#define MAX_PSI_DEPTH NR_MAX_DEPTH +#define MAX_CCI_DEPTH NR_MAX_DEPTH +#define MAX_CSI_DEPTH NR_MAX_DEPTH +#define MAX_SSI_DEPTH NR_MAX_DEPTH + +// Used to prevent an infinite loop in the unlikely event that we +// can't provide a good starting point for the Newton-Raphson +// Iteration. +#define NR_MAX_ITERATIONS 100 +#define PCI_MAX_ITERATIONS NR_MAX_ITERATIONS +#define PSI_MAX_ITERATIONS NR_MAX_ITERATIONS +#define CCI_MAX_ITERATIONS NR_MAX_ITERATIONS +#define CSI_MAX_ITERATIONS NR_MAX_ITERATIONS +#define SSI_MAX_ITERATIONS NR_MAX_ITERATIONS + +// We make the default tolerance for PSI the same as that of curve and +// surface intersections defined by openNURBS (see opennurbs_curve.h +// and opennurbs_surface.h). +#define NR_DEFAULT_TOLERANCE 0.001 +#define PCI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE +#define PSI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE +#define CCI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE +#define CSI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE +#define SSI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE + +// tol value used in ON_Intersect()s. We use a smaller tolerance than the +// default one 0.001. +#define INTERSECTION_TOL 1e-4 + +// tol value used in ON_3dVector::IsParallelTo(). We use a smaller tolerance +// than the default one ON_PI/180. +#define ANGLE_TOL ON_PI/1800.0 + +/* + * Local Variables: + * tab-width: 8 + * mode: C + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libbrep/brep_except.h b/src/libbrep/brep_except.h index e7cbaec281d..014c8572624 100644 --- a/src/libbrep/brep_except.h +++ b/src/libbrep/brep_except.h @@ -1,7 +1,7 @@ /* B R E P _ E X C E P T . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/cdt.cpp b/src/libbrep/cdt/cdt.cpp index dffc4cdf0c2..ae7fb8b6fda 100644 --- a/src/libbrep/cdt/cdt.cpp +++ b/src/libbrep/cdt/cdt.cpp @@ -1,7 +1,7 @@ /* C D T . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/cdt.h b/src/libbrep/cdt/cdt.h index 5e056b5d98e..aaba5a96fb2 100644 --- a/src/libbrep/cdt/cdt.h +++ b/src/libbrep/cdt/cdt.h @@ -1,7 +1,7 @@ /* C D T . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/edge.cpp b/src/libbrep/cdt/edge.cpp index 0e6b161a4fd..a7abea6cf29 100644 --- a/src/libbrep/cdt/edge.cpp +++ b/src/libbrep/cdt/edge.cpp @@ -1,7 +1,7 @@ /* C D T . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/fast.cpp b/src/libbrep/cdt/fast.cpp index d9a9c63f0ff..bdb4cab2c95 100644 --- a/src/libbrep/cdt/fast.cpp +++ b/src/libbrep/cdt/fast.cpp @@ -1,7 +1,7 @@ /* B R E P _ C D T . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -1944,17 +1944,19 @@ brep_facecdt_plot(struct bu_vls *vls, const char *solid_name, if (!brep->IsValid(&tl)) { //for now try to draw even if it's invalid, but report if the //user is listening - if (vls && wstr.Length() > 0) { - ON_String onstr = ON_String(wstr); - const char *isvalidinfo = onstr.Array(); - bu_vls_strcat(vls, "brep ("); - bu_vls_strcat(vls, solid_name); - bu_vls_strcat(vls, ") is NOT valid:"); - bu_vls_strcat(vls, isvalidinfo); - } else { - bu_vls_strcat(vls, "brep ("); - bu_vls_strcat(vls, solid_name); - bu_vls_strcat(vls, ") is NOT valid."); + if (vls) { + if (wstr.Length() > 0) { + ON_String onstr = ON_String(wstr); + const char *isvalidinfo = onstr.Array(); + bu_vls_strcat(vls, "brep ("); + bu_vls_strcat(vls, solid_name); + bu_vls_strcat(vls, ") is NOT valid:"); + bu_vls_strcat(vls, isvalidinfo); + } else { + bu_vls_strcat(vls, "brep ("); + bu_vls_strcat(vls, solid_name); + bu_vls_strcat(vls, ") is NOT valid."); + } } } diff --git a/src/libbrep/cdt/mesh.cpp b/src/libbrep/cdt/mesh.cpp index 8e52d7a96ac..f57cfd5b297 100644 --- a/src/libbrep/cdt/mesh.cpp +++ b/src/libbrep/cdt/mesh.cpp @@ -1,7 +1,7 @@ /* C D T _ M E S H . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/mesh.h b/src/libbrep/cdt/mesh.h index 18cfb4d9f78..95c49e8fa1c 100644 --- a/src/libbrep/cdt/mesh.h +++ b/src/libbrep/cdt/mesh.h @@ -1,7 +1,7 @@ /* C D T _ M E S H . H * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/ovlps_simple.cpp b/src/libbrep/cdt/ovlps_simple.cpp index 6d642ae5fd9..9d4ea55e7da 100644 --- a/src/libbrep/cdt/ovlps_simple.cpp +++ b/src/libbrep/cdt/ovlps_simple.cpp @@ -1,7 +1,7 @@ /* C D T _ O V L P S . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/surf.cpp b/src/libbrep/cdt/surf.cpp index 4a5ad581dfc..eb320900cea 100644 --- a/src/libbrep/cdt/surf.cpp +++ b/src/libbrep/cdt/surf.cpp @@ -1,7 +1,7 @@ /* C D T _ S U R F . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/tri_isect.cpp b/src/libbrep/cdt/tri_isect.cpp index 87f57ae2707..154dd224aed 100644 --- a/src/libbrep/cdt/tri_isect.cpp +++ b/src/libbrep/cdt/tri_isect.cpp @@ -1,7 +1,7 @@ /* C D T _ T R I _ I S E C T . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/util.cpp b/src/libbrep/cdt/util.cpp index e057c6c3319..700e1bec29e 100644 --- a/src/libbrep/cdt/util.cpp +++ b/src/libbrep/cdt/util.cpp @@ -1,7 +1,7 @@ /* C D T _ U T I L . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/cdt/validate.cpp b/src/libbrep/cdt/validate.cpp index 6b3030121d1..cf023e03d01 100644 --- a/src/libbrep/cdt/validate.cpp +++ b/src/libbrep/cdt/validate.cpp @@ -1,7 +1,7 @@ /* C D T _ V A L I D A T E . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/debug_plot.cpp b/src/libbrep/debug_plot.cpp new file mode 100644 index 00000000000..619a008cd25 --- /dev/null +++ b/src/libbrep/debug_plot.cpp @@ -0,0 +1,990 @@ +/* D E B U G _ P L O T . C P P + * BRL-CAD + * + * Copyright (c) 2014-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file debug_plot.cpp + * + * DebugPlot implementation. Currently borrows code from librt to + * handle the creation of vlists for brep geometry and conversion of + * those vlists to unix plot files. + */ + +#include +#include +#include +#include "bu/log.h" +#include "bn.h" +#include "raytrace.h" +#include "vmath.h" +#include "debug_plot.h" +#include "brep_except.h" + +static unsigned char surface1_color[] = {0, 0, 62}; +static unsigned char surface2_color[] = {62, 0, 0}; +static unsigned char surface1_highlight_color[] = {56, 56, 255}; +static unsigned char surface2_highlight_color[] = {255, 56, 56}; + +static unsigned char tangent_color[] = {255, 255, 255}; +static unsigned char transverse_color[] = {255, 255, 0}; +static unsigned char overlap_color[] = {0, 255, 0}; + +static unsigned char accepted_outerloop_color[] = {0, 255, 0}; +static unsigned char accepted_innerloop_color[] = {255, 0, 0}; +static unsigned char unknown_outerloop_color[] = {158, 158, 0}; +static unsigned char unknown_innerloop_color[] = {158, 158, 0}; +static unsigned char rejected_outerloop_color[] = {0, 62, 0}; +static unsigned char rejected_innerloop_color[] = {62, 0, 0}; + +DebugPlot::DebugPlot(const char *basename) : + prefix(basename), + have_surfaces(false), + brep1_surf_count(0), + brep2_surf_count(0), + linked_curve_count(0) +{ + BU_LIST_INIT(&vlist_free_list); +} + +DebugPlot::~DebugPlot() +{ + struct bn_vlist *vp; + while (BU_LIST_WHILE(vp, bn_vlist, &vlist_free_list)) { + BU_LIST_DEQUEUE(&(vp->l)); + bu_free((char *)vp, "bn_vlist"); + } +} + +int +DebugPlot::SurfacePairs(void) +{ + return (int)intersecting_surfaces.size(); +} + +int +DebugPlot::IntersectingIsocurves(int ssx_idx) +{ + int max_isocsx_idx = (int)ssx_isocsx_events.size() - 1; + if (ssx_idx < 0 || ssx_idx > max_isocsx_idx) { + std::cerr << "DebugPlot::IntersectingIsocurves passed invalid ssx index.\n"; + return 0; + } + return (int)ssx_isocsx_events[ssx_idx].size(); +} + +int +DebugPlot::LinkedCurves(void) +{ + return linked_curve_count; +} + +HIDDEN void +rt_vlist_to_uplot(FILE *fp, const struct bu_list *vhead) +{ + struct bn_vlist *vp; + + for (BU_LIST_FOR(vp, bn_vlist, vhead)) { + int i; + int nused = vp->nused; + const int *cmd = vp->cmd; + point_t *pt = vp->pt; + + for (i = 0; i < nused; i++, cmd++, pt++) { + switch (*cmd) { + case BN_VLIST_POLY_START: + case BN_VLIST_TRI_START: + break; + case BN_VLIST_POLY_MOVE: + case BN_VLIST_LINE_MOVE: + case BN_VLIST_TRI_MOVE: + pdv_3move(fp, *pt); + break; + case BN_VLIST_POLY_DRAW: + case BN_VLIST_POLY_END: + case BN_VLIST_LINE_DRAW: + case BN_VLIST_TRI_DRAW: + case BN_VLIST_TRI_END: + pdv_3cont(fp, *pt); + break; + default: + bu_log("rt_vlist_to_uplot: unknown vlist cmd x%x\n", + *cmd); + } + } + } +} + +HIDDEN void +write_plot_to_file( + const char *filename, + const struct bu_list *vhead, + const unsigned char *color) +{ + FILE *fp = fopen(filename, "w"); + + if (!color) { + unsigned char clr[] = {255, 0, 0}; + color = clr; + } + + pl_linmod(fp, "solid"); + pl_color(fp, color[0], color[1], color[2]); + rt_vlist_to_uplot(fp, vhead); + + fclose(fp); +} + +void +DebugPlot::WriteLog() +{ + std::ostringstream filename; + + // First write out empty plots of different colors, we use this to + // "erase" unwanted overlays when running the dplot command. + struct bu_list vhead; + BU_LIST_INIT(&vhead); + point_t origin = {0.0, 0.0, 0.0}; + BN_ADD_VLIST(&vlist_free_list, &vhead, origin, BN_VLIST_LINE_MOVE); + + filename << prefix << "_empty0.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, tangent_color); + filename.str(""); + filename << prefix << "_empty1.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, transverse_color); + filename.str(""); + filename << prefix << "_empty2.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, overlap_color); + filename.str(""); + filename << prefix << "_empty3.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, surface1_color); + filename.str(""); + filename << prefix << "_empty4.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, surface2_color); + filename.str(""); + filename << prefix << "_empty5.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, surface1_highlight_color); + filename.str(""); + filename << prefix << "_empty6.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, surface2_highlight_color); + filename.str(""); + filename << prefix << "_empty7.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, accepted_outerloop_color); + filename.str(""); + filename << prefix << "_empty8.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, accepted_innerloop_color); + filename.str(""); + filename << prefix << "_empty9.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, unknown_outerloop_color); + filename.str(""); + filename << prefix << "_empty10.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, unknown_innerloop_color); + filename.str(""); + filename << prefix << "_empty11.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, rejected_outerloop_color); + filename.str(""); + filename << prefix << "_empty12.plot3"; + write_plot_to_file(filename.str().c_str(), &vhead, rejected_innerloop_color); + + // create dplot log file + filename.str(""); + filename << prefix << ".dplot"; + FILE *fp = fopen(filename.str().c_str(), "w"); + + // write out surface-surface intersections + fprintf(fp, "surfaces %d %d\n", brep1_surf_count, brep2_surf_count); + for (size_t i = 0; i < intersecting_surfaces.size(); ++i) { + std::pair intersecting = intersecting_surfaces[i]; + + int events, b1_isocurves, intersecting_isocurves, b1_clipped, b2_clipped; + + try { + events = ssx_events.at(i); + } catch (std::out_of_range &e) { + events = 0; + } + try { + std::pair ccount = ssx_clipped_curves.at(i); + b1_clipped = ccount.first; + b2_clipped = ccount.second; + } catch (std::out_of_range &e) { + b1_clipped = b2_clipped = 0; + } + try { + b1_isocurves = ssx_isocsx_brep1_curves.at(i); + } catch (std::out_of_range &e) { + b1_isocurves = 0; + } + try { + intersecting_isocurves = (int)ssx_isocsx_events.at(i).size(); + } catch (std::out_of_range &e) { + intersecting_isocurves = 0; + } + + // b1si b2si finalevents b1ccurves b2ccurves b1_isocurve_xs total_isocurve_xs isocsx0_event0 ... + fprintf(fp, "ssx %d %d %d %d %d %d %d", intersecting.first, + intersecting.second, events, b1_clipped, b2_clipped, + b1_isocurves, intersecting_isocurves); + + if (ssx_isocsx_events.size() > i) { + for (size_t j = 0; j < ssx_isocsx_events[i].size(); ++j) { + fprintf(fp, " %d", ssx_isocsx_events[i][j]); + } + } + fprintf(fp, "\n"); + } + + // write out linked curve count + if (linked_curve_count > 0) { + fprintf(fp, "linkedcurves %d\n", linked_curve_count); + } + + // write out split faces + size_t split_faces = split_face_outerloop_curves.size(); + if (split_faces > 0) { + fprintf(fp, "splitfaces %d\n", (int)split_faces); + } + for (size_t i = 0; i < split_faces; ++i) { + fprintf(fp, "splitface %d %d %d\n", (int)i, + split_face_outerloop_curves[i], + split_face_innerloop_curves[i]); + } + fclose(fp); + BN_FREE_VLIST(&vlist_free_list, &vhead); +} + +HIDDEN double +find_next_t(const ON_Curve* crv, double start_t, double step, double max_dist) +{ + ON_Interval dom = crv->Domain(); + ON_3dPoint prev_pt = crv->PointAt(dom.ParameterAt(start_t)); + ON_3dPoint next_pt; + + // ensure that (start + step) < 1.0 + if (start_t + step > 1.0) { + step = 1.0 - start_t - BN_TOL_DIST; + } + + // reduce step until next point is within tolerance + while (step > BN_TOL_DIST) { + next_pt = crv->PointAt(dom.ParameterAt(start_t + step)); + + if (prev_pt.DistanceTo(next_pt) <= max_dist) { + return start_t + step; + } + step /= 2.0; + } + // if we couldn't find a point within tolerance, give up and jump + // to end of domain + return 1.0; +} + +void +DebugPlot::Plot3DCurve( + const ON_Curve *crv, + const char *filename, + unsigned char *color, + struct bu_list *vlist /* = NULL */) +{ + struct bu_list vhead_tmp; + BU_LIST_INIT(&vhead_tmp); + + struct bu_list *vhead = &vhead_tmp; + if (vlist) { + vhead = vlist; + } + + ON_Interval crv_dom = crv->Domain(); + + // Insert first point. + point_t pt1; + ON_3dPoint p; + p = crv->PointAt(crv_dom.ParameterAt(0.0)); + VMOVE(pt1, p); + BN_ADD_VLIST(&vlist_free_list, vhead, pt1, BN_VLIST_LINE_MOVE); + + /* Dynamic sampling approach - start with an initial guess + * for the next point of one tenth of the domain length + * further down the domain from the previous value. Set a + * maximum physical distance between points of 100 times + * the model tolerance. Reduce the increment until the + * tolerance is satisfied, then add the point and use it + * as the starting point for the next calculation until + * the whole domain is finished. Perhaps it would be more + * ideal to base the tolerance on some fraction of the + * curve bounding box dimensions? + */ + double t = 0.0; + while (t < 1.0) { + t = find_next_t(crv, t, 0.1, BN_TOL_DIST * 100); + p = crv->PointAt(crv_dom.ParameterAt(t)); + VMOVE(pt1, p); + + BN_ADD_VLIST(&vlist_free_list, vhead, pt1, BN_VLIST_LINE_DRAW); + } + + if (!vlist) { + write_plot_to_file(filename, vhead, color); + BN_FREE_VLIST(&vlist_free_list, vhead); + } +} + +void +DebugPlot::Plot3DCurveFrom2D( + const ON_Surface *surf, + const ON_Curve *crv, + const char *filename, + unsigned char *color, + bool decorate /* = false */) +{ + struct bu_list vhead; + BU_LIST_INIT(&vhead); + + ON_Interval crv_dom = crv->Domain(); + + ON_3dPoint p, uv; + + // Insert first point. + point_t pt1, first_pt, last_pt, prev_pt; + ON_3dVector normal; + uv = crv->PointAt(crv_dom.ParameterAt(0.0)); + surf->EvNormal(uv.x, uv.y, p, normal); + VMOVE(first_pt, p); + + uv = crv->PointAt(crv_dom.ParameterAt(1.0)); + surf->EvNormal(uv.x, uv.y, p, normal); + VMOVE(last_pt, p); + + bool closed = false; + if (VNEAR_EQUAL(first_pt, last_pt, BN_TOL_DIST)) { + closed = true; + } + + VMOVE(pt1, first_pt); + BN_ADD_VLIST(&vlist_free_list, &vhead, pt1, BN_VLIST_LINE_MOVE); + + /* Dynamic sampling approach - start with an initial guess + * for the next point of one tenth of the domain length + * further down the domain from the previous value. Set a + * maximum physical distance between points of 100 times + * the model tolerance. Reduce the increment until the + * tolerance is satisfied, then add the point and use it + * as the starting point for the next calculation until + * the whole domain is finished. Perhaps it would be more + * ideal to base the tolerance on some fraction of the + * curve bounding box dimensions? + */ + double t = 0.0; + bool first = true; + double min_mag = BN_TOL_DIST * 10.0; + double mag_tan = min_mag; + vect_t tangent = {0.0, 0.0, min_mag}; + vect_t perp, barb; + while (t < 1.0) { + t = find_next_t(crv, t, 0.1, BN_TOL_DIST * 100); + + uv = crv->PointAt(crv_dom.ParameterAt(t)); + surf->EvNormal(uv.x, uv.y, p, normal); + VMOVE(prev_pt, pt1); + VMOVE(pt1, p); + + if (first || !VNEAR_EQUAL(pt1, prev_pt, BN_TOL_DIST)) { + VSUB2(tangent, pt1, prev_pt); + } + + if (decorate && first) { + first = false; + + mag_tan = DIST_PNT_PNT(prev_pt, pt1); + mag_tan = FMAX(mag_tan, min_mag); + + VUNITIZE(tangent); + VCROSS(perp, tangent, normal); + + if (!closed) { + VSCALE(tangent, tangent, mag_tan); + VUNITIZE(perp); + VSCALE(perp, perp, mag_tan); + + VADD3(barb, prev_pt, tangent, perp); + BN_ADD_VLIST(&vlist_free_list, &vhead, barb, BN_VLIST_LINE_DRAW); + BN_ADD_VLIST(&vlist_free_list, &vhead, prev_pt, BN_VLIST_LINE_MOVE); + + VSCALE(perp, perp, -1.0); + VADD3(barb, prev_pt, tangent, perp); + BN_ADD_VLIST(&vlist_free_list, &vhead, barb, BN_VLIST_LINE_DRAW); + BN_ADD_VLIST(&vlist_free_list, &vhead, prev_pt, BN_VLIST_LINE_MOVE); + } + } + BN_ADD_VLIST(&vlist_free_list, &vhead, pt1, BN_VLIST_LINE_DRAW); + } + if (decorate) { + VUNITIZE(tangent); + VSCALE(tangent, tangent, -mag_tan); + + VCROSS(perp, tangent, normal); + VUNITIZE(perp); + VSCALE(perp, perp, mag_tan); + + VADD2(barb, pt1, perp); + if (!closed) { + VADD2(barb, barb, tangent); + } + BN_ADD_VLIST(&vlist_free_list, &vhead, barb, BN_VLIST_LINE_DRAW); + BN_ADD_VLIST(&vlist_free_list, &vhead, pt1, BN_VLIST_LINE_MOVE); + + VSCALE(perp, perp, -1.0); + VADD2(barb, pt1, perp); + if (!closed) { + VADD2(barb, barb, tangent); + } + BN_ADD_VLIST(&vlist_free_list, &vhead, barb, BN_VLIST_LINE_DRAW); + } + + write_plot_to_file(filename, &vhead, color); + BN_FREE_VLIST(&vlist_free_list, &vhead); +} + +void +DebugPlot::PlotBoundaryIsocurves( + struct bu_list *vlist, + const ON_Surface &surf, + int knot_dir) +{ + int surf_dir = 1 - knot_dir; + int knot_count = surf.SpanCount(surf_dir) + 1; + + double *surf_knots = new double[knot_count]; + surf.GetSpanVector(surf_dir, surf_knots); + + // knots that can be boundaries of Bezier patches + ON_SimpleArray surf_bknots; + surf_bknots.Append(surf_knots[0]); + for (int i = 1; i < knot_count; i++) { + if (surf_knots[i] > *(surf_bknots.Last())) { + surf_bknots.Append(surf_knots[i]); + } + } + delete[] surf_knots; + + if (surf.IsClosed(surf_dir)) { + surf_bknots.Remove(); + } + + for (int i = 0; i < surf_bknots.Count(); i++) { + ON_Curve *surf_boundary_iso = surf.IsoCurve(knot_dir, surf_bknots[i]); + Plot3DCurve(surf_boundary_iso, NULL, NULL, vlist); + delete surf_boundary_iso; + } +} + +void +DebugPlot::PlotSurface( + const ON_Surface &surf, + const char *filename, + unsigned char *color) +{ + struct bu_list vhead; + BU_LIST_INIT(&vhead); + + PlotBoundaryIsocurves(&vhead, surf, 0); + PlotBoundaryIsocurves(&vhead, surf, 1); + + write_plot_to_file(filename, &vhead, color); + + BN_FREE_VLIST(&vlist_free_list, &vhead); +} + + +void +DebugPlot::Surfaces(const ON_Brep *brep1, const ON_Brep *brep2) +{ + if (!brep1 || !brep2) { + std::cerr << "error: dplot_surfaces: NULL args\n"; + return; + } + + brep1_surf_count = brep1->m_S.Count(); + for (int i = 0; i < brep1->m_S.Count(); i++) { + ON_Surface *surf = brep1->m_S[i]; + std::ostringstream filename; + filename << prefix << "_brep1_surface" << i << ".plot3"; + PlotSurface(*surf, filename.str().c_str(), surface1_color); + } + + brep2_surf_count = brep2->m_S.Count(); + for (int i = 0; i < brep2->m_S.Count(); i++) { + ON_Surface *surf = brep2->m_S[i]; + std::ostringstream filename; + filename << prefix << "_brep2_surface" << i << ".plot3"; + PlotSurface(*surf, filename.str().c_str(), surface2_color); + } + have_surfaces = true; +} + +int get_subcurve_inside_faces(const ON_Brep *brep1, const ON_Brep *brep2, int face_i1, int face_i2, ON_SSX_EVENT *event); + +void +DebugPlot::SSX( + const ON_ClassArray &events, + const ON_Brep *brep1, int brep1_surf, + const ON_Brep *brep2, int brep2_surf) +{ + ON_Surface *surf; + std::ostringstream filename; + + // create highlighted plot of brep1 surface if it doesn't exist + filename << prefix << "_highlight_brep1_surface" << brep1_surf << ".plot3"; + if (!bu_file_exists(filename.str().c_str(), NULL)) { + surf = brep1->m_S[brep1_surf]; + PlotSurface(*surf, filename.str().c_str(), surface1_highlight_color); + } + + // create highlighted plot of brep2 surface if it doesn't exist + filename.str(""); + filename << prefix << "_highlight_brep2_surface" << brep2_surf << ".plot3"; + if (!bu_file_exists(filename.str().c_str(), NULL)) { + surf = brep2->m_S[brep2_surf]; + PlotSurface(*surf, filename.str().c_str(), surface2_highlight_color); + } + + // create plot of the intersections between these surfaces + surf = brep1->m_S[brep1_surf]; + size_t ssx_idx = intersecting_surfaces.size(); + int plot_count = 0; + for (int i = 0; i < events.Count(); ++i) { + filename.str(""); + filename << prefix << "_ssx" << ssx_idx << "_event" << plot_count << + ".plot3"; + + if (events[i].m_type == ON_SSX_EVENT::ssx_tangent) { + Plot3DCurveFrom2D(surf, events[i].m_curveA, + filename.str().c_str(), tangent_color, true); + ++plot_count; + } else if (events[i].m_type == ON_SSX_EVENT::ssx_transverse) { + Plot3DCurveFrom2D(surf, events[i].m_curveA, + filename.str().c_str(), transverse_color, true); + ++plot_count; + } else if (events[i].m_type == ON_SSX_EVENT::ssx_overlap) { + Plot3DCurveFrom2D(surf, events[i].m_curveA, + filename.str().c_str(), overlap_color, true); + ++plot_count; + } + } + // stash surface indices and event count + std::pair ssx_pair(brep1_surf, brep2_surf); + intersecting_surfaces.push_back(ssx_pair); + ssx_events.push_back(plot_count); +} + +void +DebugPlot::IsoCSX( + const ON_SimpleArray &events, + const ON_Curve *isocurve, + bool is_brep1_iso) // is the isocurve from brep1? +{ + size_t ssx_idx = intersecting_surfaces.size(); + + // create plot of the intersections between the curve and surface + while (ssx_isocsx_events.size() < (ssx_idx + 1)) { + ssx_isocsx_events.push_back(std::vector()); + } + size_t isocsx_idx = ssx_isocsx_events[ssx_idx].size(); + int plot_count = 0; + for (int i = 0; i < events.Count(); ++i) { + if (events[i].m_type == ON_X_EVENT::csx_overlap) { + std::ostringstream filename; + filename << prefix << "_ssx" << ssx_idx << "_isocsx" << isocsx_idx + << "_event" << plot_count++ << ".plot3"; + + try { + ON_Curve *event_curve = sub_curve(isocurve, events[i].m_a[0], + events[i].m_a[1]); + Plot3DCurve(event_curve, filename.str().c_str(), overlap_color); + } catch (InvalidInterval &e) { + std::cerr << "error: IsoCSX event contains degenerate interval\n"; + } + } + } + if (plot_count) { + // create highlighted plot of isocurve if it doesn't already exist + std::ostringstream filename; + filename << prefix << "_highlight_ssx" << ssx_idx << "_isocurve" << + isocsx_idx << ".plot3"; + if (!bu_file_exists(filename.str().c_str(), NULL)) { + if (is_brep1_iso) { + Plot3DCurve(isocurve, filename.str().c_str(), + surface1_highlight_color); + } else { + Plot3DCurve(isocurve, filename.str().c_str(), + surface2_highlight_color); + } + } + + // remember event count for this isocsx + ssx_isocsx_events[ssx_idx].push_back(plot_count); + + // remember how many events are for brep1 isocurve and brep2 surface, + if (is_brep1_iso) { + while (ssx_isocsx_brep1_curves.size() < (ssx_idx + 1)) { + ssx_isocsx_brep1_curves.push_back(0); + } + ++ssx_isocsx_brep1_curves[ssx_idx]; + } + } +} + +void +DebugPlot::ClippedFaceCurves( + const ON_Surface *surf1, + const ON_Surface *surf2, + const ON_SimpleArray &face1_curves, + const ON_SimpleArray &face2_curves) +{ + // plot clipped tangent/transverse/overlap curves + size_t ssx_idx = intersecting_surfaces.size() - 1; + for (int i = 0; i < face1_curves.Count(); ++i) { + std::ostringstream filename; + filename << prefix << "_ssx" << ssx_idx << "_brep1face_clipped_curve" << i << ".plot3"; + Plot3DCurveFrom2D(surf1, face1_curves[i], filename.str().c_str(), + surface1_highlight_color, true); + } + for (int i = 0; i < face2_curves.Count(); ++i) { + std::ostringstream filename; + filename << prefix << "_ssx" << ssx_idx << "_brep2face_clipped_curve" << i << ".plot3"; + Plot3DCurveFrom2D(surf2, face2_curves[i], filename.str().c_str(), + surface2_highlight_color, true); + } + + while (ssx_clipped_curves.size() < (ssx_idx + 1)) { + ssx_clipped_curves.push_back(std::pair(0, 0)); + } + std::pair counts(face1_curves.Count(), face2_curves.Count()); + ssx_clipped_curves[ssx_idx] = counts; +} + +struct TrimmedFace { + // curve segments in the face's outer loop + ON_SimpleArray m_outerloop; + // several inner loops, each has some curves + std::vector > m_innerloop; + const ON_BrepFace *m_face; + enum { + UNKNOWN = -1, + NOT_BELONG = 0, + BELONG = 1 + } m_belong_to_final; + bool m_rev; + + // Default constructor + TrimmedFace() + { + m_face = NULL; + m_belong_to_final = UNKNOWN; + m_rev = false; + } + + // Destructor + ~TrimmedFace() + { + // Delete the curve segments if it's not belong to the result. + if (m_belong_to_final != BELONG) { + for (int i = 0; i < m_outerloop.Count(); i++) { + if (m_outerloop[i]) { + delete m_outerloop[i]; + m_outerloop[i] = NULL; + } + } + for (unsigned int i = 0; i < m_innerloop.size(); i++) { + for (int j = 0; j < m_innerloop[i].Count(); j++) { + if (m_innerloop[i][j]) { + delete m_innerloop[i][j]; + m_innerloop[i][j] = NULL; + } + } + } + } + } + + TrimmedFace *Duplicate() const + { + TrimmedFace *out = new TrimmedFace(); + out->m_face = m_face; + for (int i = 0; i < m_outerloop.Count(); i++) { + if (m_outerloop[i]) { + out->m_outerloop.Append(m_outerloop[i]->Duplicate()); + } + } + out->m_innerloop = m_innerloop; + for (unsigned int i = 0; i < m_innerloop.size(); i++) { + for (int j = 0; j < m_innerloop[i].Count(); j++) { + if (m_innerloop[i][j]) { + out->m_innerloop[i][j] = m_innerloop[i][j]->Duplicate(); + } + } + } + return out; + } +}; + +void +DebugPlot::SplitFaces( + const ON_ClassArray > &split_faces) +{ + for (int i = 0; i < split_faces.Count(); ++i) { + for (int j = 0; j < split_faces[i].Count(); ++j) { + TrimmedFace *face = split_faces[i][j]; + + unsigned char *outerloop_color = unknown_outerloop_color; + unsigned char *innerloop_color = unknown_innerloop_color; + switch (face->m_belong_to_final) { + case TrimmedFace::NOT_BELONG: + outerloop_color = rejected_outerloop_color; + innerloop_color = rejected_innerloop_color; + break; + case TrimmedFace::BELONG: + outerloop_color = accepted_outerloop_color; + innerloop_color = accepted_innerloop_color; + break; + default: + outerloop_color = unknown_outerloop_color; + innerloop_color = unknown_innerloop_color; + } + + int split_face_count = split_face_outerloop_curves.size(); + for (int k = 0; k < face->m_outerloop.Count(); ++k) { + std::ostringstream filename; + filename << prefix << "_split_face" << split_face_count << + "_outerloop_curve" << k << ".plot3"; + + Plot3DCurveFrom2D(face->m_face->SurfaceOf(), + face->m_outerloop[k], filename.str().c_str(), + outerloop_color); + } + split_face_outerloop_curves.push_back(face->m_outerloop.Count()); + + int innerloop_count = 0; + for (size_t k = 0; k < face->m_innerloop.size(); ++k) { + for (int l = 0; l < face->m_innerloop[k].Count(); ++l) { + std::ostringstream filename; + filename << prefix << "_split_face" << split_face_count << + "_innerloop_curve" << innerloop_count++ << ".plot3"; + + Plot3DCurveFrom2D(face->m_face->SurfaceOf(), + face->m_innerloop[k][l], filename.str().c_str(), + innerloop_color); + } + } + split_face_innerloop_curves.push_back(innerloop_count); + } + } +} + +void append_to_polycurve(ON_Curve *curve, ON_PolyCurve &polycurve); + +struct SSICurve { + ON_Curve *m_curve; + + SSICurve() + { + m_curve = NULL; + } + + SSICurve(ON_Curve *curve) + { + m_curve = curve; + } + + SSICurve *Duplicate() const + { + SSICurve *out = new SSICurve(); + if (out != NULL) { + *out = *this; + out->m_curve = m_curve->Duplicate(); + } + return out; + } +}; + +struct LinkedCurve { +private: + ON_Curve *m_curve; // an explicit storage of the whole curve +public: + // The curves contained in this LinkedCurve, including + // the information needed by the connectivity graph + ON_SimpleArray m_ssi_curves; + + // Default constructor + LinkedCurve() + { + m_curve = NULL; + } + + ~LinkedCurve() + { + if (m_curve) { + delete m_curve; + } + m_curve = NULL; + } + + LinkedCurve &operator= (const LinkedCurve &_lc) + { + m_curve = _lc.m_curve ? _lc.m_curve->Duplicate() : NULL; + m_ssi_curves = _lc.m_ssi_curves; + return *this; + } + + ON_3dPoint PointAtStart() const + { + if (m_ssi_curves.Count()) { + return m_ssi_curves[0].m_curve->PointAtStart(); + } else { + return ON_3dPoint::UnsetPoint; + } + } + + ON_3dPoint PointAtEnd() const + { + if (m_ssi_curves.Count()) { + return m_ssi_curves.Last()->m_curve->PointAtEnd(); + } else { + return ON_3dPoint::UnsetPoint; + } + } + + bool IsClosed() const + { + if (m_ssi_curves.Count() == 0) { + return false; + } + return PointAtStart().DistanceTo(PointAtEnd()) < ON_ZERO_TOLERANCE; + } + + bool IsValid() const + { + // Check whether the curve has "gaps". + for (int i = 1; i < m_ssi_curves.Count(); i++) { + if (m_ssi_curves[i].m_curve->PointAtStart().DistanceTo(m_ssi_curves[i - 1].m_curve->PointAtEnd()) >= ON_ZERO_TOLERANCE) { + bu_log("The LinkedCurve is not valid.\n"); + return false; + } + } + return true; + } + + bool Reverse() + { + ON_SimpleArray new_array; + for (int i = m_ssi_curves.Count() - 1; i >= 0; i--) { + if (!m_ssi_curves[i].m_curve->Reverse()) { + return false; + } + new_array.Append(m_ssi_curves[i]); + } + m_ssi_curves = new_array; + return true; + } + + void Append(const LinkedCurve &lc) + { + m_ssi_curves.Append(lc.m_ssi_curves.Count(), lc.m_ssi_curves.Array()); + } + + void Append(const SSICurve &sc) + { + m_ssi_curves.Append(sc); + } + + void AppendCurvesToArray(ON_SimpleArray &arr) const + { + for (int i = 0; i < m_ssi_curves.Count(); i++) { + arr.Append(m_ssi_curves[i].m_curve->Duplicate()); + } + } + + const ON_Curve *Curve() + { + if (m_curve != NULL) { + return m_curve; + } + if (m_ssi_curves.Count() == 0 || !IsValid()) { + return NULL; + } + ON_PolyCurve *polycurve = new ON_PolyCurve; + for (int i = 0; i < m_ssi_curves.Count(); i++) { + append_to_polycurve(m_ssi_curves[i].m_curve->Duplicate(), *polycurve); + } + m_curve = polycurve; + return m_curve; + } + + const ON_3dPoint PointAt(double t) + { + const ON_Curve *c = Curve(); + if (c == NULL) { + return ON_3dPoint::UnsetPoint; + } + return c->PointAt(t); + } + + const ON_Interval Domain() + { + const ON_Curve *c = Curve(); + if (c == NULL) { + return ON_Interval::EmptyInterval; + } + return c->Domain(); + } + + ON_Curve *SubCurve(double t1, double t2) + { + const ON_Curve *c = Curve(); + if (c == NULL) { + return NULL; + } + try { + return sub_curve(c, t1, t2); + } catch (InvalidInterval &e) { + bu_log("%s", e.what()); + return NULL; + } + } +}; + +void +DebugPlot::LinkedCurves( + const ON_Surface *surf, + ON_ClassArray &linked_curves) +{ + for (int i = 0; i < linked_curves.Count(); ++i) { + const ON_Curve *linked_curve = linked_curves[i].Curve(); + + std::ostringstream filename; + filename << prefix << "_linked_curve" << linked_curve_count++ << ".plot3"; + + Plot3DCurveFrom2D(surf, linked_curve, filename.str().c_str(), transverse_color); + } +} + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/libbrep/debug_plot.h b/src/libbrep/debug_plot.h new file mode 100644 index 00000000000..63ea2bfd7f2 --- /dev/null +++ b/src/libbrep/debug_plot.h @@ -0,0 +1,141 @@ +/* D E B U G _ P L O T . H + * BRL-CAD + * + * Copyright (c) 2014-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file debug_plot.h + * + * Class used to write out unix plot files representing brep geometry + * and intersection events from various stages of brep boolean + * evaluation. + * + * Also outputs a parsable log file with implicit information about + * the output plot files. + */ + +#ifndef DEBUG_PLOT_H +#define DEBUG_PLOT_H +#include "bu/list.h" +#include "raytrace.h" + +struct TrimmedFace; +struct LinkedCurve; + +class DebugPlot { +public: + // prefix all dplot output files with 'basename' + DebugPlot(const char *basename); + + ~DebugPlot(); + + // write plot files for all surfaces of two breps + void Surfaces(const ON_Brep *brep1, const ON_Brep *brep2); + + // record a surface surface intersection + void SSX( + const ON_ClassArray &events, + const ON_Brep *brep1, int brep1_surf, + const ON_Brep *brep2, int brep2_surf); + + // record surface surface isocurve intersections + void IsoCSX( + const ON_SimpleArray &events, + const ON_Curve *isocurve, + bool is_brep1_iso); + + // record clipped surface-surface intersection curves + void ClippedFaceCurves( + const ON_Surface *surf1, + const ON_Surface *surf2, + const ON_SimpleArray &face1_curves, + const ON_SimpleArray &face2_curves); + + // write out the log file that the dplot command references to + // navigate the generated plot files + void WriteLog(); + + // get the number of intersecting surface pairs recorded + int SurfacePairs(); + + // get the number of isocurves that intersect either surface in + // given surface pair + int IntersectingIsocurves(int ssx_idx); + + // get the number of linked curves recorded + int LinkedCurves(); + + void SplitFaces( + const ON_ClassArray > &split_faces); + + void LinkedCurves( + const ON_Surface *surf, + ON_ClassArray &linked_curves); + + void + Plot3DCurveFrom2D( + const ON_Surface *surf, + const ON_Curve *crv, + const char *filename, + unsigned char *color, + bool decorate = false + ); + + void + Plot3DCurve( + const ON_Curve *crv, + const char *filename, + unsigned char *color, + struct bu_list *vlist = NULL); + +private: + struct bu_list vlist_free_list; + std::string prefix; + bool have_surfaces; + int brep1_surf_count; + int brep2_surf_count; + int linked_curve_count; + std::vector< std::pair > intersecting_surfaces; // ssx surface index pairs + std::vector ssx_events; // num final events of each ssx + std::vector< std::vector > ssx_isocsx_events; // num events for each isocsx of each ssx + std::vector ssx_isocsx_brep1_curves; // num ssx isocsx events using brep1 isocurves + std::vector< std::pair > ssx_clipped_curves; // num clipped intersection curves + std::vector split_face_outerloop_curves; + std::vector split_face_innerloop_curves; + + void PlotSurface( + const ON_Surface &surf, + const char *filename, + unsigned char *color); + + void + PlotBoundaryIsocurves( + struct bu_list *vlist, + const ON_Surface &surf, + int knot_dir); +}; + +#endif + +/* + * Local Variables: + * tab-width: 8 + * mode: C + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libbrep/intersect.cpp b/src/libbrep/intersect.cpp index a21583f9ff2..514a953a5da 100644 --- a/src/libbrep/intersect.cpp +++ b/src/libbrep/intersect.cpp @@ -1,7 +1,7 @@ /* I N T E R S E C T . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -21,6 +21,8 @@ * * Implementation of intersection routines openNURBS left out. * + * Additional documentation can be found in the "NURBS Boolean Evaluation + * Development Guide" docbook article (bool_eval_development.html). */ #include "common.h" @@ -38,42 +40,15 @@ #include "brep/defines.h" #include "brep/intersect.h" #include "brep/util.h" +#include "debug_plot.h" #include "brep_except.h" +#include "brep_defines.h" +extern DebugPlot *dplot; // Whether to output the debug messages about b-rep intersections. static int DEBUG_BREP_INTERSECT = 0; -// The maximal depth for subdivision - trade-off between accuracy and -// performance. -#define NR_MAX_DEPTH 8 -#define MAX_PCI_DEPTH NR_MAX_DEPTH -#define MAX_PSI_DEPTH NR_MAX_DEPTH -#define MAX_CCI_DEPTH NR_MAX_DEPTH -#define MAX_CSI_DEPTH NR_MAX_DEPTH -#define MAX_SSI_DEPTH NR_MAX_DEPTH - - -// We make the default tolerance for PSI the same as that of curve and -// surface intersections defined by openNURBS (see opennurbs_curve.h -// and opennurbs_surface.h). -#define NR_DEFAULT_TOLERANCE 0.001 -#define PCI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE -#define PSI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE -#define CCI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE -#define CSI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE -#define SSI_DEFAULT_TOLERANCE NR_DEFAULT_TOLERANCE - -// Used to prevent an infinite loop in the unlikely event that we -// can't provide a good starting point for the Newton-Raphson -// Iteration. -#define NR_MAX_ITERATIONS 100 -#define PCI_MAX_ITERATIONS NR_MAX_ITERATIONS -#define PSI_MAX_ITERATIONS NR_MAX_ITERATIONS -#define CCI_MAX_ITERATIONS NR_MAX_ITERATIONS -#define CSI_MAX_ITERATIONS NR_MAX_ITERATIONS -#define SSI_MAX_ITERATIONS NR_MAX_ITERATIONS - class XEventProxy { public: XEventProxy(ON_X_EVENT::TYPE type); @@ -2556,10 +2531,29 @@ newton_ssi(double &uA, double &vA, double &uB, double &vB, const ON_Surface *sur return (pointA.DistanceTo(pointB) < isect_tol) && !std::isnan(uA) && !std::isnan(vA) && !std::isnan(uB) & !std::isnan(vB); } +// if curve end is greater than tol distance from pt, append a linear +// segment to the curve so it extends to the pt +HIDDEN void +extend_curve_end_to_pt(ON_Curve *&curve, ON_3dPoint pt, double tol) +{ + ON_NurbsCurve *nc = curve->NurbsCurve(); + if (nc->PointAtEnd().DistanceTo(pt) > tol) { + ON_LineCurve line_bridge(nc->PointAtEnd(), pt); + + ON_NurbsCurve bridge; + if (line_bridge.GetNurbForm(bridge)) { + nc->Append(bridge); + } + delete curve; + curve = nc; + } +} HIDDEN ON_Curve * link_curves(ON_Curve *&c1, ON_Curve *&c2) { + extend_curve_end_to_pt(c1, c2->PointAtStart(), ON_ZERO_TOLERANCE); + ON_NurbsCurve *nc1 = c1->NurbsCurve(); ON_NurbsCurve *nc2 = c2->NurbsCurve(); if (nc1 && nc2) { @@ -2578,6 +2572,16 @@ link_curves(ON_Curve *&c1, ON_Curve *&c2) return NULL; } +// if curve start and end are within tolerance, append a linear +// segment to the curve to close it completely so it passes +// IsClosed() tests +HIDDEN void +fill_gap_if_closed(ON_Curve *&curve, double tol) +{ + if (curve->PointAtStart().DistanceTo(curve->PointAtEnd()) <= tol) { + extend_curve_end_to_pt(curve, curve->PointAtStart(), ON_ZERO_TOLERANCE); + } +} struct OverlapSegment { ON_Curve *m_curve3d, *m_curveA, *m_curveB; @@ -2969,17 +2973,10 @@ is_curve_on_overlap_boundary( bool ret = false; if (iso.overlap_t[0] < iso.overlap_t[1]) { - bool at_first_knot = iso.src.knot.IsFirst(); - bool at_last_knot = iso.src.knot.IsLast(); - bool closed_at_iso = surf1->IsClosed(1 - iso.src.knot.dir) != 0; - - ret = true; - if (closed_at_iso || (!at_first_knot && !at_last_knot)) { - int location = isocurve_surface_overlap_location(iso, surf1, - surf2, surf2_tree, isect_tol, isect_tol1); + int location = isocurve_surface_overlap_location(iso, surf1, surf2, + surf2_tree, isect_tol, isect_tol1); - ret = (location == ON_OVERLAP_BOUNDARY); - } + ret = (location == ON_OVERLAP_BOUNDARY); } return ret; } @@ -3513,6 +3510,7 @@ set_ssx_event_from_curves( HIDDEN void find_overlap_boundary_curves( ON_SimpleArray &overlaps, + ON_ClassArray &csx_events, ON_3dPointArray &isocurve_3d, ON_2dPointArray &isocurveA_2d, ON_2dPointArray &isocurveB_2d, @@ -3554,6 +3552,9 @@ find_overlap_boundary_curves( ON_Intersect(surf1_isocurve, surf2, events, isect_tol, overlap_tol, 0, 0, 0, &overlap2d); + dplot->IsoCSX(events, surf1_isocurve, is_surfA_iso); + dplot->WriteLog(); + append_csx_event_points(isocurve_3d, isocurve2_2d, events); for (int k = 0; k < events.Count(); k++) { @@ -3575,6 +3576,36 @@ find_overlap_boundary_curves( if (curve_on_overlap_boundary) { append_overlap_segments(overlaps, iso, overlap2d[k], surf1); + } else { + // the intersection isn't part of a + // surface-surface overlap, but we want it all + // the same + ON_SimpleArray tmp_overlaps; + + append_overlap_segments(tmp_overlaps, iso, overlap2d[k], surf1); + + for (int l = 0; l < tmp_overlaps.Count(); ++l) { + ON_SSX_EVENT ssx_event; + + int ret = set_ssx_event_from_curves(ssx_event, + tmp_overlaps[l]->m_curve3d, + tmp_overlaps[l]->m_curveA, + tmp_overlaps[l]->m_curveB, surfA, surfB); + if (ret != 0) { + bu_log("warning: reverse failed."); + } + csx_events.Append(ssx_event); + + // set the curves to NULL so they aren't + // deleted by destructors + tmp_overlaps[l]->m_curve3d = NULL; + tmp_overlaps[l]->m_curveA = NULL; + tmp_overlaps[l]->m_curveB = NULL; + + ssx_event.m_curve3d = NULL; + ssx_event.m_curveA = NULL; + ssx_event.m_curveB = NULL; + } } } } @@ -3735,12 +3766,25 @@ ON_Intersect(const ON_Surface *surfA, ON_2dPointArray curve_uvA, curve_uvB, tmp_curve_uvA, tmp_curve_uvB; ON_SimpleArray overlaps; - find_overlap_boundary_curves(overlaps, tmp_curvept, tmp_curve_uvA, + ON_ClassArray csx_events; + + find_overlap_boundary_curves(overlaps, csx_events, tmp_curvept, tmp_curve_uvA, tmp_curve_uvB, surfA, surfB, treeA, treeB, isect_tol, isect_tolA, isect_tolB, overlap_tol); + split_overlaps_at_intersections(overlaps, surfA, surfB, treeA, treeB, isect_tol, isect_tolA, isect_tolB); + // add csx_events + for (int i = 0; i < csx_events.Count(); ++i) { + x.Append(csx_events[i]); + + // set the curves to NULL so they aren't deleted by destructor + csx_events[i].m_curve3d = NULL; + csx_events[i].m_curveA = NULL; + csx_events[i].m_curveB = NULL; + } + // find the neighbors for every overlap segment ON_SimpleArray start_linked(overlaps.Count()), end_linked(overlaps.Count()); for (int i = 0; i < overlaps.Count(); i++) { @@ -3875,6 +3919,9 @@ ON_Intersect(const ON_Surface *surfA, delete overlaps[j]; overlaps[j] = NULL; } + fill_gap_if_closed(overlaps[i]->m_curve3d, isect_tol); + fill_gap_if_closed(overlaps[i]->m_curveA, isect_tolA); + fill_gap_if_closed(overlaps[i]->m_curveB, isect_tolB); } } diff --git a/src/libbrep/opennurbs_ext.cpp b/src/libbrep/opennurbs_ext.cpp index a2fd37aa3b5..5a24a79b100 100644 --- a/src/libbrep/opennurbs_ext.cpp +++ b/src/libbrep/opennurbs_ext.cpp @@ -1,7 +1,7 @@ /* O P E N N U R B S _ E X T . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/px_event.cpp b/src/libbrep/px_event.cpp index 5d436abef2d..e752dd3d95a 100644 --- a/src/libbrep/px_event.cpp +++ b/src/libbrep/px_event.cpp @@ -1,7 +1,7 @@ /* P X _ E V E N T . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/shape_recognition/cone.cpp b/src/libbrep/shape_recognition/cone.cpp index 34b4d72402e..22757512b2e 100644 --- a/src/libbrep/shape_recognition/cone.cpp +++ b/src/libbrep/shape_recognition/cone.cpp @@ -1,7 +1,7 @@ /* S H A P E _ R E C O G N I T I O N _ C O N E . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/shape_recognition/cylinder.cpp b/src/libbrep/shape_recognition/cylinder.cpp index 74432585731..b63817470a9 100644 --- a/src/libbrep/shape_recognition/cylinder.cpp +++ b/src/libbrep/shape_recognition/cylinder.cpp @@ -1,7 +1,7 @@ /* S H A P E _ R E C O G N I T I O N _ C Y L I N D E R . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/shape_recognition/pipeline.cpp b/src/libbrep/shape_recognition/pipeline.cpp index a3d7becfa8d..768f4d86f3b 100644 --- a/src/libbrep/shape_recognition/pipeline.cpp +++ b/src/libbrep/shape_recognition/pipeline.cpp @@ -1,7 +1,7 @@ /* P I P E L I N E . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/shape_recognition/planar.cpp b/src/libbrep/shape_recognition/planar.cpp index f6f1c7e34fe..3c6f62c8083 100644 --- a/src/libbrep/shape_recognition/planar.cpp +++ b/src/libbrep/shape_recognition/planar.cpp @@ -1,7 +1,7 @@ /* P L A N A R . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/shape_recognition/shape_recognition.cpp b/src/libbrep/shape_recognition/shape_recognition.cpp index 34967dff0c2..6433b2c5dab 100644 --- a/src/libbrep/shape_recognition/shape_recognition.cpp +++ b/src/libbrep/shape_recognition/shape_recognition.cpp @@ -1,7 +1,7 @@ /* S H A P E _ R E C O G N I T I O N . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/shape_recognition/shape_recognition.h b/src/libbrep/shape_recognition/shape_recognition.h index 23ca9d7e018..e09a301e598 100644 --- a/src/libbrep/shape_recognition/shape_recognition.h +++ b/src/libbrep/shape_recognition/shape_recognition.h @@ -1,7 +1,7 @@ /* S H A P E _ R E C O G N I T I O N . H * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/shape_recognition/sphere.cpp b/src/libbrep/shape_recognition/sphere.cpp index c7379ecf272..00d37899d20 100644 --- a/src/libbrep/shape_recognition/sphere.cpp +++ b/src/libbrep/shape_recognition/sphere.cpp @@ -1,7 +1,7 @@ /* S P H E R E . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/shape_recognition/torus.cpp b/src/libbrep/shape_recognition/torus.cpp index a1dfa7cd328..927df77d366 100644 --- a/src/libbrep/shape_recognition/torus.cpp +++ b/src/libbrep/shape_recognition/torus.cpp @@ -1,7 +1,7 @@ /* T O R U S . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/shape_recognition/util.cpp b/src/libbrep/shape_recognition/util.cpp index 2f7271ce15b..33bf1d48a1c 100644 --- a/src/libbrep/shape_recognition/util.cpp +++ b/src/libbrep/shape_recognition/util.cpp @@ -1,7 +1,7 @@ /* U T I L . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/ssx_event.cpp b/src/libbrep/ssx_event.cpp index b4d55f8276e..60412ab9ed0 100644 --- a/src/libbrep/ssx_event.cpp +++ b/src/libbrep/ssx_event.cpp @@ -1,7 +1,7 @@ /* S S X _ E V E N T . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/tests/CMakeLists.txt b/src/libbrep/tests/CMakeLists.txt index e349fe8bc7b..b5694572345 100644 --- a/src/libbrep/tests/CMakeLists.txt +++ b/src/libbrep/tests/CMakeLists.txt @@ -1,28 +1,26 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/..) -set(distcheck_files +BRLCAD_ADDEXEC(test_brep_ppx ppx.cpp "libbrep" NO_INSTALL) +BRLCAD_ADD_TEST(NAME brep_ppx COMMAND test_brep_ppx) + +CMAKEFILES( + CMakeLists.txt ayam_hyperbolid.3dm - single_bad_edge.cdtmesh - plate_mode_samples.g - plate_mode_samples_rhino.stp - plate_mode_samples_creo.stp + brep_cdt_mesh.cpp cyl_hole.g cyls_holes.g freecad_surface.stp nurbs_csg.g + plate_mode_samples.g + plate_mode_samples_creo.stp + plate_mode_samples_rhino.stp + single_bad_edge.cdtmesh + test_curve_intersect.cpp + test_point_intersect.cpp vsp.stp ) -BRLCAD_ADDEXEC(brep_cdt_mesh brep_cdt_mesh.cpp "libbrep;libbg;libbn;libbu" TEST) - -BRLCAD_ADDEXEC(test_point_intersect test_point_intersect.cpp "libbrep" NO_STRICT NO_INSTALL) - -BRLCAD_ADDEXEC(test_curve_intersect test_curve_intersect.cpp "libbrep" NO_STRICT NO_INSTALL) - -CMAKEFILES(${distcheck_files}) -CMAKEFILES(CMakeLists.txt) - # Local Variables: # tab-width: 8 # mode: cmake diff --git a/src/libbrep/tests/brep_cdt_mesh.cpp b/src/libbrep/tests/brep_cdt_mesh.cpp index b681779429f..58fc553214d 100644 --- a/src/libbrep/tests/brep_cdt_mesh.cpp +++ b/src/libbrep/tests/brep_cdt_mesh.cpp @@ -1,7 +1,7 @@ /* B R E P _ C D T _ M E S H . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/tests/ppx.cpp b/src/libbrep/tests/ppx.cpp new file mode 100644 index 00000000000..fa8ea77f149 --- /dev/null +++ b/src/libbrep/tests/ppx.cpp @@ -0,0 +1,235 @@ +/* P P X . C P P + * BRL-CAD + * + * Copyright (c) 2014-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file ppx.cpp + * + * Point-point intersection tests. + * + */ + +#define NOMINMAX + +#include "common.h" +#include "bu.h" +#include "brep.h" +#include +#include +#include +#include "../brep_defines.h" + +// Here we determine an upper limit on the magnitude of coordinate +// values for test points. +// +// We need to be able to calculate point to point distance as: +// sqrt((x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2) +// +// To prevent overflow, we must restrict the coordinate values such +// that: +// (x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2 <= DBL_MAX +// +// If we want to choose an upper limit M on the magnitude of a +// coordinate value to enforce this constraint, the restriction +// simplifies to: +// coord1, coord2 in [-M, M] s.t. +// (coord2 - coord1)^2 <= DBL_MAX / 3.0 +// => (coord2 - coord1) <= sqrt(DBL_MAX / 3.0) +// +// Knowing that the maximum value of (coord2 - coord1) is 2M, we can +// solve for M: +// 2M <= sqrt(DBL_MAX / 3.0) +// => M <= sqrt(DBL_MAX / 3.0) / 2.0 +// +// We choose to use a value slightly less than the true DBL_MAX for +// the calculation to avoid the possibility that floating point error +// causes [3.0 * sqrt(DBL_MAX / 3.0)^2 <= DBL_MAX] to be false. +static const double NEAR_DBL_MAX = + std::numeric_limits::max() - + std::numeric_limits::round_error(); + +static const double COORD_MAG_MAX = sqrt(NEAR_DBL_MAX / 3.0) / 2.0; + +class PPX_Input { +public: + PPX_Input() + : tol(0.0) + { + } + ON_3dPoint ptA; + ON_3dPoint ptB; + ON_ClassArray events; + bool default_tol; + double tol; +}; + +class PPX_Output { +public: + bool status; + ON_ClassArray events; + + bool Equals(std::string &log, const PPX_Output &other); +}; + +static const double EVENT_EQUAL_TOL = + std::numeric_limits::round_error(); + +static bool +point_events_equal(ON_PX_EVENT a, ON_PX_EVENT b) +{ + if (a.m_type != b.m_type) { + return false; + } + if (a.m_A.DistanceTo(b.m_A) >= EVENT_EQUAL_TOL) { + return false; + } + if (a.m_B.DistanceTo(b.m_B) >= EVENT_EQUAL_TOL) { + return false; + } + if (a.m_b.DistanceTo(b.m_b) >= EVENT_EQUAL_TOL) { + return false; + } + if (a.m_Mid.DistanceTo(b.m_Mid) >= EVENT_EQUAL_TOL) { + return false; + } + if (!ON_NearZero(a.m_radius - b.m_radius, EVENT_EQUAL_TOL)) { + return false; + } + return true; +} + +bool +PPX_Output::Equals(std::string &log, const PPX_Output &other) +{ + bool ret = true; + std::stringstream out; + + if (status != other.status) { + out << "return status: " << std::boolalpha << status << " vs " << + other.status << "\n"; + ret = false; + } + + if (events.Count() != other.events.Count()) { + out << "event count: " << events.Count() << " vs " << + other.events.Count() << "\n"; + ret = false; + } else { + for (int i = 0; i < events.Count(); ++i) { + if (!point_events_equal(other.events[i], events[i])) { + out << "event arrays don't match\n"; + ret = false; + break; + } + } + } + + log = out.str(); + + return ret; +} + +void +test_intersection(PPX_Input in, PPX_Output expected_out) +{ + PPX_Output out; + + out.events = in.events; + + if (in.default_tol) { + out.status = ON_Intersect(in.ptA, in.ptB, out.events); + } else { + out.status = ON_Intersect(in.ptA, in.ptB, out.events, in.tol); + } + + std::string err_msg; + if (!expected_out.Equals(err_msg, out)) { + bu_exit(1, "Unexpected intersection result. Expected vs actual:\n%s", + err_msg.c_str()); + } +} + +static ON_PX_EVENT +ppx_point_event(ON_3dPoint ptA, ON_3dPoint ptB) +{ + ON_PX_EVENT event; + event.m_type = ON_PX_EVENT::ppx_point; + event.m_A = ptA; + event.m_B = ptB; + event.m_b = ON_2dPoint(0.0, 0.0); + event.m_Mid = (ptA + ptB) * 0.5; + event.m_radius = ptA.DistanceTo(ptB) * 0.5; + return event; +} + +static void +test_equal_points(ON_3dPoint pt) +{ + ON_ClassArray events; + events.Append(ppx_point_event(pt, pt)); + + PPX_Output expected_output; + expected_output.status = true; + expected_output.events = events; + + PPX_Input input; + input.ptA = input.ptB = pt; + input.default_tol = true; + + test_intersection(input, expected_output); +} + +static void +do_equal_point_tests(void) +{ + std::vector coord_vals; + coord_vals.push_back(-COORD_MAG_MAX); + coord_vals.push_back(-INTERSECTION_TOL); + coord_vals.push_back(0.0); + coord_vals.push_back(INTERSECTION_TOL); + coord_vals.push_back(COORD_MAG_MAX); + + for (size_t i = 0; i < coord_vals.size(); ++i) { + for (size_t j = 0; j < coord_vals.size(); ++j) { + for (size_t k = 0; k < coord_vals.size(); ++k) { + ON_3dPoint test_pt(coord_vals[i], coord_vals[j], + coord_vals[k]); + + test_equal_points(test_pt); + } + } + } +} + +int +main(int UNUSED(argc), const char *argv[]) +{ + bu_setprogname(argv[0]); + + do_equal_point_tests(); + + return 0; +} + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/libbrep/tests/test_curve_intersect.cpp b/src/libbrep/tests/test_curve_intersect.cpp index 37d636b3493..57a9e60dcd8 100644 --- a/src/libbrep/tests/test_curve_intersect.cpp +++ b/src/libbrep/tests/test_curve_intersect.cpp @@ -1,7 +1,7 @@ /* T E S T _ C U R V E _ I N T E R S E C T . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/tests/test_point_intersect.cpp b/src/libbrep/tests/test_point_intersect.cpp index 9cf4417ddcd..6d2255d13e6 100644 --- a/src/libbrep/tests/test_point_intersect.cpp +++ b/src/libbrep/tests/test_point_intersect.cpp @@ -1,7 +1,7 @@ /* T E S T _ P O I N T _ I N T E R S E C T . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/tools/tools.cpp b/src/libbrep/tools/tools.cpp index 2b01b4b7545..200cce94695 100644 --- a/src/libbrep/tools/tools.cpp +++ b/src/libbrep/tools/tools.cpp @@ -1,7 +1,7 @@ /* L I B B R E P _ B R E P _ T O O L S . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/tools/tools.h b/src/libbrep/tools/tools.h index cb10b43dff7..11017b0b5f6 100644 --- a/src/libbrep/tools/tools.h +++ b/src/libbrep/tools/tools.h @@ -1,7 +1,7 @@ /* L I B B R E P _ B R E P _ T O O L S . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbrep/tools/util.cpp b/src/libbrep/tools/util.cpp index 3e09e20425c..c88b5642dfe 100644 --- a/src/libbrep/tools/util.cpp +++ b/src/libbrep/tools/util.cpp @@ -1,7 +1,7 @@ /* U T I L . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/CMakeLists.txt b/src/libbu/CMakeLists.txt index 49d55fe4ac9..e6372ebaf35 100644 --- a/src/libbu/CMakeLists.txt +++ b/src/libbu/CMakeLists.txt @@ -11,7 +11,6 @@ endif(BRLCAD_ENABLE_BINARY_ATTRIBUTES) # locally used but not needed by users of the library set(BU_LOCAL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/y2038 - ${REGEX_INCLUDE_DIRS} ) if (UUID_INCLUDE_DIR) set(BU_LOCAL_INCLUDE_DIRS ${BU_LOCAL_INCLUDE_DIRS} ${UUID_INCLUDE_DIR}) @@ -42,6 +41,8 @@ if(HAVE_FPIC) set_property(SOURCE y2038/time64.c APPEND PROPERTY COMPILE_FLAGS "-fPIC") endif(HAVE_FPIC) +set_property(SOURCE fort.c APPEND PROPERTY COMPILE_FLAGS "-g -ggdb -O0") + set(LIBBU_SOURCES y2038/time64.c affinity.c @@ -62,6 +63,7 @@ set(LIBBU_SOURCES ctype.c dir.c dirent.c + damlevlim.cpp datetime.c dylib.c encode.c @@ -71,6 +73,7 @@ set(LIBBU_SOURCES fchmod.c fgets.c file.c + fort.c fnmatch.c getcwd.c gethostname.c @@ -117,6 +120,7 @@ set(LIBBU_SOURCES str.c tc.c tcllist.c + tbl.c temp.c thread.cpp units.c @@ -141,7 +145,7 @@ else(NOT CMAKE_CXX_STANDARD EQUAL 98) CMAKEFILES(parallel_cpp11thread.cpp) endif(NOT CMAKE_CXX_STANDARD EQUAL 98) -BRLCAD_ADDLIB(libbu "${LIBBU_SOURCES}" "${Foundation_LIBRARIES};${CMAKE_THREAD_LIBS_INIT};${DL_LIBRARY};${WINSOCK_LIB};${PSAPI_LIB};${BSON_LIBRARIES};${UUID_LIBRARIES};${REGEX_LIBRARIES};${M_LIBRARY}") +BRLCAD_ADDLIB(libbu "${LIBBU_SOURCES}" "${Foundation_LIBRARIES};Threads::Threads;${DL_LIBRARY};${WINSOCK_LIB};${PSAPI_LIB};${BSON_LIBRARIES};${UUID_LIBRARIES};${M_LIBRARY}") set_target_properties(libbu PROPERTIES VERSION 20.0.1 SOVERSION 20) # Define a pre-build test for libbu to check the semaphores in BRL-CAD's headers for @@ -172,6 +176,7 @@ set(bu_ignore_files CMakeLists.txt bitv.h charclass.h + fort.h mime.cmake parallel.h process.h diff --git a/src/libbu/affinity.c b/src/libbu/affinity.c index 36a6381d92c..93afbf4f806 100644 --- a/src/libbu/affinity.c +++ b/src/libbu/affinity.c @@ -1,7 +1,7 @@ /* A F F I N I T Y . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/argv.c b/src/libbu/argv.c index 9b5bec3a44b..3e3d0038cf8 100644 --- a/src/libbu/argv.c +++ b/src/libbu/argv.c @@ -1,7 +1,7 @@ /* A R G V . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -167,7 +167,7 @@ bu_argv_free(size_t argc, char *argv[]) { register size_t i; - if (UNLIKELY(!argv || argc <= 0)) { + if (UNLIKELY(!argv || (ssize_t)argc < 1)) { return; } @@ -188,7 +188,7 @@ bu_free_args(size_t argc, char *argv[], const char *str) { size_t count = 0; - if (UNLIKELY(!argv || argc <= 0)) { + if (UNLIKELY(!argv || (ssize_t)argc < 1)) { return; } @@ -210,7 +210,7 @@ bu_argv_dup(size_t argc, const char *argv[]) register size_t i; char **av; - if (UNLIKELY(argc < 1)) + if (UNLIKELY((ssize_t)argc < 1)) return (char **)0; av = (char **)bu_calloc(argc+1, sizeof(char *), "bu_copy_argv"); @@ -230,7 +230,7 @@ bu_argv_dupinsert(int insert, size_t insertArgc, const char *insertArgv[], size_ char **av; /* Nothing to insert */ - if (insertArgc < 1) + if ((ssize_t)insertArgc < 1) return bu_argv_dup(argc, argv); av = (char **)bu_calloc(ac, sizeof(char *), "bu_insert_argv"); diff --git a/src/libbu/avs.c b/src/libbu/avs.c index be3fe20f784..9e6f4809c08 100644 --- a/src/libbu/avs.c +++ b/src/libbu/avs.c @@ -1,7 +1,7 @@ /* A V S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/backtrace.c b/src/libbu/backtrace.c index 00c8aac0ba9..16480fec22d 100644 --- a/src/libbu/backtrace.c +++ b/src/libbu/backtrace.c @@ -1,7 +1,7 @@ /* B A C K T R A C E . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -395,7 +395,7 @@ backtrace(int processid, char args[][MAXPATHLEN], int fd) int -bu_backtrace(FILE *fp) +bu_backtrace_app(FILE *fp, const char *argv0) { if (!fp) { fp = stdout; @@ -440,11 +440,17 @@ bu_backtrace(FILE *fp) #endif if (have_gdb) { + const char *gdb_path = NULL; bu_strlcpy(debugger_args[0], path_gdb, MAXPATHLEN); /* MUST give gdb path to binary, otherwise attach bug causes * process kill on some platforms (e.g., FreeBSD9+AMD64) */ - bu_strlcpy(debugger_args[1], bu_argv0_full_path(), MAXPATHLEN); + if (argv0) { + gdb_path = argv0; + } else { + gdb_path = bu_dir(NULL, 0, BU_DIR_BIN, bu_getprogname(), BU_DIR_EXT, NULL); + } + bu_strlcpy(debugger_args[1], gdb_path, MAXPATHLEN); } else if (have_lldb) { bu_strlcpy(debugger_args[0], path_lldb, MAXPATHLEN); } @@ -535,6 +541,11 @@ bu_backtrace(FILE *fp) return 1; } +int +bu_backtrace(FILE *fp) +{ + return bu_backtrace_app(fp, NULL); +} /* * Local Variables: diff --git a/src/libbu/badmagic.c b/src/libbu/badmagic.c index d88d5efa089..f85b165fefc 100644 --- a/src/libbu/badmagic.c +++ b/src/libbu/badmagic.c @@ -1,7 +1,7 @@ /* B A D M A G I C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/bitv.c b/src/libbu/bitv.c index c88f39a16c1..8b76f1edd5f 100644 --- a/src/libbu/bitv.c +++ b/src/libbu/bitv.c @@ -1,7 +1,7 @@ /* B I T V . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/bitv.h b/src/libbu/bitv.h index ab7a8d520ad..85227bcd815 100644 --- a/src/libbu/bitv.h +++ b/src/libbu/bitv.h @@ -1,7 +1,7 @@ /* B I T V . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by the + * Copyright (c) 2014-2021 United States Government as represented by the * U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/bomb.c b/src/libbu/bomb.c index 48a2b3b95a3..ea01dd841d5 100644 --- a/src/libbu/bomb.c +++ b/src/libbu/bomb.c @@ -1,7 +1,7 @@ /* B O M B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/booleanize.c b/src/libbu/booleanize.c index 3557292f9ca..47bf9f29ee2 100644 --- a/src/libbu/booleanize.c +++ b/src/libbu/booleanize.c @@ -1,7 +1,7 @@ /* B O O L E A N I Z E . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/brlcad_path.c b/src/libbu/brlcad_path.c index c19f9dbcdfb..935f987316d 100644 --- a/src/libbu/brlcad_path.c +++ b/src/libbu/brlcad_path.c @@ -1,7 +1,7 @@ /* B R L C A D _ P A T H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -28,6 +28,8 @@ #include #include "bio.h" +#include "whereami.h" + #include "bu/app.h" #include "bu/debug.h" #include "bu/file.h" @@ -200,11 +202,14 @@ bu_brlcad_dir(const char *dirkey, int fail_quietly) return NULL; } +extern int _bu_dir_join_path(char result[MAXPATHLEN], const char *lhs, const char *rhs, struct bu_vls *searched, const char *where); + const char * bu_brlcad_root(const char *rhs, int fail_quietly) { static char result[MAXPATHLEN] = {0}; const char *lhs; + int length, dirname_length; struct bu_vls searched = BU_VLS_INIT_ZERO; char where[MAX_WHERE_SIZE] = {0}; @@ -229,28 +234,35 @@ bu_brlcad_root(const char *rhs, int fail_quietly) } /* run-time path identification */ - lhs = bu_argv0_full_path(); - snprintf(where, MAX_WHERE_SIZE, "\trun-time path identification [UNKNOWN]\n"); - if (lhs) { - char *dirpath; - char *real_path = bu_file_realpath(lhs, NULL); - dirpath = bu_path_dirname(real_path); - snprintf(real_path, MAXPATHLEN, "%s", dirpath); - bu_free(dirpath, "free bu_path_dirname"); - dirpath = bu_path_dirname(real_path); - snprintf(real_path, MAXPATHLEN, "%s", dirpath); - bu_free(dirpath, "free bu_path_dirname"); - if (join_path(result, real_path, rhs, &searched, where)) { - if (UNLIKELY(bu_debug & BU_DEBUG_PATHS)) { - bu_log("Found: Run-time path identification [%s]\n", result); + length = wai_getExecutablePath(NULL, 0, &dirname_length); + if (length > 0) { + char *plhs = (char *)bu_calloc(length+1, sizeof(char), "program path"); + wai_getExecutablePath(plhs, length, &dirname_length); + plhs[length] = '\0'; + snprintf(where, MAX_WHERE_SIZE, "\trun-time path identification [UNKNOWN]\n"); + if (strlen(plhs)) { + char *dirpath; + char *real_path = bu_file_realpath(plhs, NULL); + dirpath = bu_path_dirname(real_path); + snprintf(real_path, MAXPATHLEN, "%s", dirpath); + bu_free(dirpath, "free bu_path_dirname"); + dirpath = bu_path_dirname(real_path); + snprintf(real_path, MAXPATHLEN, "%s", dirpath); + bu_free(dirpath, "free bu_path_dirname"); + if (_bu_dir_join_path(result, real_path, rhs, &searched, where)) { + if (UNLIKELY(bu_debug & BU_DEBUG_PATHS)) { + bu_log("Found: Run-time path identification [%s]\n", result); + } + bu_vls_free(&searched); + bu_free(real_path, "free real_path"); + bu_free(plhs, "free plhs"); + return result; } - bu_vls_free(&searched); bu_free(real_path, "free real_path"); - return result; + } else { + bu_vls_strcat(&searched, where); } - bu_free(real_path, "free real_path"); - } else { - bu_vls_strcat(&searched, where); + bu_free(plhs, "free plhs"); } /* BRLCAD_ROOT compile-time path */ diff --git a/src/libbu/bu_init.cpp b/src/libbu/bu_init.cpp index 44f162fe0df..790fd095870 100644 --- a/src/libbu/bu_init.cpp +++ b/src/libbu/bu_init.cpp @@ -1,7 +1,7 @@ /* B U _ I N I T . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/cmd.c b/src/libbu/cmd.c index 82a078b3898..9c384c38add 100644 --- a/src/libbu/cmd.c +++ b/src/libbu/cmd.c @@ -1,7 +1,7 @@ /* C M D . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/color.cpp b/src/libbu/color.cpp index 5a93d02dc95..4b1cf22761a 100644 --- a/src/libbu/color.cpp +++ b/src/libbu/color.cpp @@ -1,7 +1,7 @@ /* C O L O R . C P P * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -26,13 +26,13 @@ #include #include #include -#include "bio.h" - #include +#include "bio.h" #include "bu/color.h" #include "bu/log.h" #include "bu/malloc.h" +#include "bu/assert.h" #define COMMA ',' diff --git a/src/libbu/convert.c b/src/libbu/convert.c index ee2b21bd7ee..cd600880edf 100644 --- a/src/libbu/convert.c +++ b/src/libbu/convert.c @@ -1,7 +1,7 @@ /* C O N V E R T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/crashreport.c b/src/libbu/crashreport.c index 6b1d045a49a..173209c0161 100644 --- a/src/libbu/crashreport.c +++ b/src/libbu/crashreport.c @@ -1,7 +1,7 @@ /* C R A S H R E P O R T . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -50,7 +50,7 @@ static const char *path = NULL; int -bu_crashreport(const char *filename) +bu_crashreport_app(const char *filename, const char *argv0) { if (UNLIKELY(!filename || strlen(filename) == 0)) { return 0; @@ -59,7 +59,11 @@ bu_crashreport(const char *filename) /* vat time ist? */ (void)time(&now); - path = bu_argv0_full_path(); + if (argv0) { + path = argv0; + } else { + path = bu_dir(NULL, 0, BU_DIR_BIN, bu_getprogname(), BU_DIR_EXT, NULL); + } /* do our own expansion to avoid heap allocation */ snprintf(buffer, CR_BUFSIZE, "******************************************\n\n" @@ -181,6 +185,12 @@ bu_crashreport(const char *filename) return 1; } +int +bu_crashreport(const char *filename) +{ + return bu_crashreport_app(filename, NULL); +} + /* * Local Variables: * tab-width: 8 diff --git a/src/libbu/ctype.c b/src/libbu/ctype.c index a2ae1bac91e..45319272972 100644 --- a/src/libbu/ctype.c +++ b/src/libbu/ctype.c @@ -1,7 +1,7 @@ /* C T Y P E . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/damlevlim.cpp b/src/libbu/damlevlim.cpp new file mode 100644 index 00000000000..53fb701444a --- /dev/null +++ b/src/libbu/damlevlim.cpp @@ -0,0 +1,187 @@ +// Copyright (C) 2019 Robert Jacobson. Released under the MIT license. +// +// Based on "Iosifovich", Copyright (C) 2019 Frederik Hertzum, which is +// licensed under the MIT license: https://bitbucket.org/clearer/iosifovich. +// +// The MIT License +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to +// deal in the Software without restriction, including without limitation the +// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or +// sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +// IN THE SOFTWARE. + +/* + * Compute the Damarau Levenshtein edit distance between two strings when the + * edit distance is less than a given number. + * + * https://github.com/rljacobson/Levenshtein + */ + +#include "common.h" + +#include + +#include +#include +#include +#include + +#include "bu/str.h" + +// Limits +#define DAMLEVLIM_MAX_EDIT_DIST 16384 + +unsigned long +bu_editdist(const char *s1, const char *s2, unsigned long max_dist) +{ + // Cap at the defined maximum edit distance. + unsigned long max = (max_dist < DAMLEVLIM_MAX_EDIT_DIST) ? max_dist : DAMLEVLIM_MAX_EDIT_DIST; + + // If we don't have both strings, trivial equality + if (!s1 || !s2) { + return 0; + } + + // If we have equal strings, trivial equality + if (BU_STR_EQUAL(s1, s2)) { + return 0; + } + + // If max == 0, go the limit + if (max == 0) { + max = DAMLEVLIM_MAX_EDIT_DIST; + } + + // If one of either of the strings doesn't exist, the length of the other + // string is our edit distance + if (!s1 || !s2) { + if (!s1) + return strlen(s2); + if (!s2) + return strlen(s1); + } + + // Set up buffer + char *ptr = (char *)new(std::nothrow) std::vector(DAMLEVLIM_MAX_EDIT_DIST); + std::vector &buffer = *(std::vector *)ptr; + + // Let's make some string views so we can use the STL. + std::string subject(s1); + std::string query(s2); + + // Skip any common prefix. + auto mb = std::mismatch(subject.begin(), subject.end(), query.begin()); + auto start_offset = (size_t)std::distance(subject.begin(), mb.first); + + // If one of the strings is a prefix of the other, done. + if (subject.length() == start_offset) { + delete ptr; + return (size_t)(query.length() - start_offset); + } else if (query.length() == start_offset) { + delete ptr; + return (size_t)(subject.length() - start_offset); + } + + // Skip any common suffix. + auto me = std::mismatch( + subject.rbegin(), static_cast(mb.first - 1), + query.rbegin()); + auto end_offset = std::min((size_t)std::distance(subject.rbegin(), me.first), + (size_t)(subject.size() - start_offset)); + + // Take the different part. + subject = subject.substr(start_offset, subject.size() - end_offset - start_offset + 1); + query = query.substr(start_offset, query.size() - end_offset - start_offset + 1); + + // Make "subject" the smaller one. + if (query.length() < subject.length()) { + std::swap(subject, query); + } + // If one of the strings is a suffix of the other. + if (subject.length() == 0) { + delete ptr; + return query.length(); + } + + // Init buffer. + std::iota(buffer.begin(), buffer.begin() + query.length() + 1, 0); + + size_t end_j = 0; + for (size_t i = 1; i < subject.length() + 1; ++i) { + // temp = i - 1; + size_t temp = buffer[0]++; + size_t prior_temp = 0; + + // Setup for max distance, which only needs to look in the window + // between i-max <= j <= i+max. + // The result of the max is positive, but we need the second argument + // to be allowed to be negative. + const size_t start_j = static_cast(std::max(1ll, static_cast(i) - + DAMLEVLIM_MAX_EDIT_DIST/2)); + end_j = std::min(static_cast(query.length() + 1), + static_cast(i + DAMLEVLIM_MAX_EDIT_DIST/2)); + size_t column_min = DAMLEVLIM_MAX_EDIT_DIST; // Sentinels + for (size_t j = start_j; j < end_j; ++j) { + const size_t p = temp; // p = buffer[j - 1]; + const size_t r = buffer[j]; + /* + auto min = r; + if (p < min) min = p; + if (prior_temp < min) min = prior_temp; + min++; + temp = temp + (subject[i - 1] == query[j - 1] ? 0 : 1); + if (min < temp) temp = min; + */ + temp = std::min(std::min(r, // Insertion. + p // Deletion. + ) + 1, + + std::min( + // Transposition. + prior_temp + 1, + // Substitution. + temp + (subject[i - 1] == query[j - 1] ? 0 : 1) + ) + ); + // Keep track of column minimum. + if (temp < column_min) { + column_min = temp; + } + // Record matrix value mat[i-2][j-2]. + prior_temp = temp; + std::swap(buffer[j], temp); + } + if (column_min >= DAMLEVLIM_MAX_EDIT_DIST) { + // There is no way to get an edit distance > column_min. + // We can bail out early. + delete ptr; + return DAMLEVLIM_MAX_EDIT_DIST; + } + } + + unsigned long ret = buffer[end_j-1]; + delete ptr; + return ret; +} + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/libbu/datetime.c b/src/libbu/datetime.c index c9992fa6e90..3d0992f146e 100644 --- a/src/libbu/datetime.c +++ b/src/libbu/datetime.c @@ -1,7 +1,7 @@ /* D A T E T I M E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/dir.c b/src/libbu/dir.c index 8a7d0238749..7b47e8c1ef0 100644 --- a/src/libbu/dir.c +++ b/src/libbu/dir.c @@ -1,7 +1,7 @@ /* D I R . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -303,7 +303,8 @@ path_append(struct bu_vls *vp, const char *buf) * * @return boolean on whether a match was found. */ -static int +// TODO - this can be static once bu_brlcad_root is removed +int _bu_dir_join_path(char result[MAXPATHLEN], const char *lhs, const char *rhs, struct bu_vls *searched, const char *where) { size_t llen, rlen; @@ -420,7 +421,7 @@ _bu_dir_brlcad_root(const char *rhs, int fail_quietly) char where[MAX_WHERE_SIZE] = {0}; if (UNLIKELY(bu_debug & BU_DEBUG_PATHS)) { - bu_log("bu_brlcad_root: searching for [%s]\n", rhs?rhs:""); + bu_log("_bu_dir_brlcad_root: searching for [%s]\n", rhs?rhs:""); } /* BRLCAD_ROOT environment variable if set */ diff --git a/src/libbu/dirent.c b/src/libbu/dirent.c index 5f406daaadb..af75ec9c430 100644 --- a/src/libbu/dirent.c +++ b/src/libbu/dirent.c @@ -1,7 +1,7 @@ /* D I R E N T . C * BRL-CAD * - * Copyright (c) 2001-2020 United States Government as represented by + * Copyright (c) 2001-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/dylib.c b/src/libbu/dylib.c index 1c9650fa2cc..2b19595d878 100644 --- a/src/libbu/dylib.c +++ b/src/libbu/dylib.c @@ -1,7 +1,7 @@ /* D Y L I B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/encode.c b/src/libbu/encode.c index 1a608f23d91..ca849a29ce9 100644 --- a/src/libbu/encode.c +++ b/src/libbu/encode.c @@ -1,7 +1,7 @@ /* E N C O D E . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/endian.c b/src/libbu/endian.c index 5aa7a2099cb..1a3e473aa80 100644 --- a/src/libbu/endian.c +++ b/src/libbu/endian.c @@ -1,7 +1,7 @@ /* E N D I A N . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/env.c b/src/libbu/env.c index 382d45afced..5dd91a661e6 100644 --- a/src/libbu/env.c +++ b/src/libbu/env.c @@ -1,7 +1,7 @@ /* E N V . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/src/libbu/escape.c b/src/libbu/escape.c index 96017131a96..ec3461f5eb9 100644 --- a/src/libbu/escape.c +++ b/src/libbu/escape.c @@ -1,7 +1,7 @@ /* E S C A P E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/fchmod.c b/src/libbu/fchmod.c index f5332568623..7a43aa1d788 100644 --- a/src/libbu/fchmod.c +++ b/src/libbu/fchmod.c @@ -1,7 +1,7 @@ /* F C H M O D . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/fgets.c b/src/libbu/fgets.c index 32e1d56ff83..aa38163434d 100644 --- a/src/libbu/fgets.c +++ b/src/libbu/fgets.c @@ -1,7 +1,7 @@ /* F G E T S . C * BRL-CAD * - * Copyright (c) 2006-2020 United States Government as represented by + * Copyright (c) 2006-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/file.c b/src/libbu/file.c index ec95515c125..150d8e446b0 100644 --- a/src/libbu/file.c +++ b/src/libbu/file.c @@ -1,7 +1,7 @@ /* F I L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -73,6 +73,17 @@ bu_file_exists(const char *path, int *fd) return 0; } + /* stdin is special case */ + if (BU_STR_EQUAL(path, "-")) { + if (fd) { + *fd = fileno(stdin); + } + if (UNLIKELY(bu_debug & BU_DEBUG_PATHS)) { + bu_log("YES\n"); + } + return 1; + } + /* capture file descriptor if requested */ if (fd) { *fd = open(path, O_RDONLY); @@ -180,7 +191,8 @@ int bu_file_same(const char *fn1, const char *fn2) { int ret = 0; - char *rp1, *rp2; + char *rp1 = NULL; + char *rp2 = NULL; if (UNLIKELY(!fn1 || !fn2)) { return 0; @@ -190,6 +202,11 @@ bu_file_same(const char *fn1, const char *fn2) return 0; } + /* stdin is a special case */ + if (BU_STR_EQUAL(fn1, fn2) && BU_STR_EQUAL(fn1, "-")) { + return 1; + } + if (!bu_file_exists(fn1, NULL) || !bu_file_exists(fn2, NULL)) { return 0; } diff --git a/src/libbu/fort.c b/src/libbu/fort.c new file mode 100644 index 00000000000..aa95fb55397 --- /dev/null +++ b/src/libbu/fort.c @@ -0,0 +1,7754 @@ +/* +libfort + +MIT License + +Copyright (c) 2017 - 2020 Seleznev Anton + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +/* The file was GENERATED by an amalgamation script.*/ +/* DO NOT EDIT BY HAND!!! */ + + +#define FT_AMALGAMED_SOURCE /* Macros to make internal libfort functions static */ + + +/******************************************************** + Begin of file "fort_utils.h" + ********************************************************/ + +#ifndef FORT_IMPL_H +#define FORT_IMPL_H + +#if defined(_MSC_VER) +#define _CRT_SECURE_NO_WARNINGS /* To disable warnings for unsafe functions */ +#endif + +#include +#include +#include +#include +#include +#include "fort.h" + +#include "bu/str.h" + +/* Define FT_INTERNAL to make internal libfort functions static + * in the result amalgamed source file. + */ +#ifdef FT_AMALGAMED_SOURCE +#define FT_INTERNAL static +#else +#define FT_INTERNAL +#endif /* FT_AMALGAMED_SORCE */ + + +#define FORT_DEFAULT_COL_SEPARATOR '|' +extern char g_col_separator; + +#define FORT_COL_SEPARATOR_LENGTH 1 + +#define FORT_UNUSED __attribute__((unused)) + +#define F_MALLOC fort_malloc +#define F_FREE fort_free +#define F_CALLOC fort_calloc +#define F_REALLOC fort_realloc +#define F_STRDUP fort_strdup +#define F_WCSDUP fort_wcsdup +/* @todo: replace with custom impl !!!*/ +#define F_UTF8DUP utf8dup + +#define F_CREATE(type) ((type *)F_CALLOC(sizeof(type), 1)) + +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + +#define FT_NEWLINE "\n" +#define FT_SPACE " " + +/***************************************************************************** + * DEFAULT_SIZES + * ***************************************************************************/ +#define DEFAULT_STR_BUF_SIZE 1024 +#define DEFAULT_VECTOR_CAPACITY 10 + +/***************************************************************************** + * DATA TYPES + * ***************************************************************************/ + +enum f_get_policy { + CREATE_ON_NULL, + DONT_CREATE_ON_NULL +}; + +enum f_bool { + F_FALSE = 0, + F_TRUE = 1 +}; + +enum f_cell_type { + COMMON_CELL, + GROUP_MASTER_CELL, + GROUP_SLAVE_CELL +}; + +enum f_geometry_type { + VISIBLE_GEOMETRY, + INTERN_REPR_GEOMETRY +}; + +enum f_string_type { + CHAR_BUF, +#ifdef FT_HAVE_WCHAR + W_CHAR_BUF, +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + UTF8_BUF, +#endif /* FT_HAVE_WCHAR */ +}; + +struct f_string_view { + union { + const char *cstr; +#ifdef FT_HAVE_WCHAR + const wchar_t *wstr; +#endif +#ifdef FT_HAVE_UTF8 + const void *u8str; +#endif + const void *data; + } u; + enum f_string_type type; +}; +typedef struct f_string_view f_string_view_t; + + +#define FT_STR_2_CAT_(arg1, arg2) \ + arg1##arg2 +#define FT_STR_2_CAT(arg1, arg2) \ + FT_STR_2_CAT_(arg1, arg2) + +#define UNIQUE_NAME_(prefix) \ + FT_STR_2_CAT(prefix,__COUNTER__) +#define UNIQUE_NAME(prefix) \ + UNIQUE_NAME_(prefix) + +typedef int f_status; + + + + +struct f_table_properties; +struct f_row; +struct f_vector; +struct f_cell; +struct f_string_buffer; +struct f_separator { + int enabled; +}; + +typedef struct f_table_properties f_table_properties_t; +typedef struct f_vector f_vector_t; +typedef struct f_cell f_cell_t; +typedef struct f_string_buffer f_string_buffer_t; +typedef struct f_row f_row_t; +typedef struct f_separator f_separator_t; + +struct f_context { + f_table_properties_t *table_properties; + size_t row; + size_t column; +}; +typedef struct f_context f_context_t; + +struct f_conv_context { + union { + char *buf; +#ifdef FT_HAVE_WCHAR + wchar_t *wbuf; +#endif +#ifdef FT_HAVE_UTF8 + const void *u8str; +#endif + } u; + size_t raw_avail; + struct f_context *cntx; + enum f_string_type b_type; +}; +typedef struct f_conv_context f_conv_context_t; + + +/***************************************************************************** + * LIBFORT helpers + *****************************************************************************/ + +extern void *(*fort_malloc)(size_t size); +extern void (*fort_free)(void *ptr); +extern void *(*fort_calloc)(size_t nmemb, size_t size); +extern void *(*fort_realloc)(void *ptr, size_t size); + +FT_INTERNAL +void set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr)); + +FT_INTERNAL +char *fort_strdup(const char *str); + + + +FT_INTERNAL +size_t number_of_columns_in_format_string(const f_string_view_t *fmt); + +FT_INTERNAL +size_t number_of_columns_in_format_buffer(const f_string_buffer_t *fmt); + +#if defined(FT_HAVE_WCHAR) +FT_INTERNAL +wchar_t *fort_wcsdup(const wchar_t *str); +#endif + + + +FT_INTERNAL +int print_n_strings(f_conv_context_t *cntx, size_t n, const char *str); + + +FT_INTERNAL +int ft_nprint(f_conv_context_t *cntx, const char *str, size_t strlen); +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +int ft_nwprint(f_conv_context_t *cntx, const wchar_t *str, size_t strlen); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +int ft_nu8print(f_conv_context_t *cntx, const void *beg, const void *end); +#endif /* FT_HAVE_UTF8 */ + + +/*#define PRINT_DEBUG_INFO fprintf(stderr, "error in %s(%s:%d)\n", __FUNCTION__, __FILE__, __LINE__);*/ +#define PRINT_DEBUG_INFO + +#define FT_CHECK(statement) \ + do { \ + tmp = statement; \ + if (tmp < 0) {\ + PRINT_DEBUG_INFO \ + goto clear; \ + } \ + } while(0) + +#define CHCK_RSLT_ADD_TO_WRITTEN(statement) \ + do { \ + tmp = statement; \ + if (tmp < 0) {\ + PRINT_DEBUG_INFO \ + goto clear; \ + } \ + written += (size_t)tmp; \ + } while(0) + +#define CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(statement) \ + do { \ + tmp = statement; \ + if (tmp < 0) {\ + PRINT_DEBUG_INFO \ + goto clear; \ + } \ + invisible_written += (size_t)tmp; \ + } while(0) + + +#define CHECK_NOT_NEGATIVE(x) \ + do { if ((x) < 0) goto fort_fail; } while (0) + +#endif /* FORT_IMPL_H */ + +/******************************************************** + End of file "fort_utils.h" + ********************************************************/ + + +/******************************************************** + Begin of file "vector.h" + ********************************************************/ + +#ifndef VECTOR_H +#define VECTOR_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + + +#define INVALID_VEC_INDEX ((size_t) -1) + +FT_INTERNAL +f_vector_t *create_vector(size_t item_size, size_t capacity); + +FT_INTERNAL +void destroy_vector(f_vector_t *); + +FT_INTERNAL +size_t vector_size(const f_vector_t *); + +FT_INTERNAL +size_t vector_capacity(const f_vector_t *); + +FT_INTERNAL +int vector_push(f_vector_t *, const void *item); + +FT_INTERNAL +int vector_insert(f_vector_t *, const void *item, size_t pos); + +FT_INTERNAL +f_vector_t *vector_split(f_vector_t *, size_t pos); + +FT_INTERNAL +const void *vector_at_c(const f_vector_t *vector, size_t index); + +FT_INTERNAL +void *vector_at(f_vector_t *, size_t index); + +FT_INTERNAL +f_status vector_swap(f_vector_t *cur_vec, f_vector_t *mv_vec, size_t pos); + +FT_INTERNAL +void vector_clear(f_vector_t *); + +FT_INTERNAL +int vector_erase(f_vector_t *, size_t index); + +#ifdef FT_TEST_BUILD +f_vector_t *copy_vector(f_vector_t *); +size_t vector_index_of(const f_vector_t *, const void *item); +#endif + +#define VECTOR_AT(vector, pos, data_type) \ + *(data_type *)vector_at((vector), (pos)) + +#define VECTOR_AT_C(vector, pos, const_data_type) \ + *(const_data_type *)vector_at_c((vector), (pos)) + +#endif /* VECTOR_H */ + +/******************************************************** + End of file "vector.h" + ********************************************************/ + + +/******************************************************** + Begin of file "wcwidth.h" + ********************************************************/ + +#ifndef WCWIDTH_H +#define WCWIDTH_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + +#ifdef FT_HAVE_WCHAR +#include + +FT_INTERNAL +int mk_wcswidth(const wchar_t *pwcs, size_t n); + +#endif /* FT_HAVE_WCHAR */ + +#endif /* WCWIDTH_H */ + +/******************************************************** + End of file "wcwidth.h" + ********************************************************/ + + +/******************************************************** + Begin of file "utf8.h" + ********************************************************/ + +// The latest version of this library is available on GitHub; +// https://github.com/sheredom/utf8.h + +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. +// +// In jurisdictions that recognize copyright laws, the author or authors +// of this software dedicate any and all copyright interest in the +// software to the public domain. We make this dedication for the benefit +// of the public at large and to the detriment of our heirs and +// successors. We intend this dedication to be an overt act of +// relinquishment in perpetuity of all present and future rights to this +// software under copyright law. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// For more information, please refer to + +#ifndef SHEREDOM_UTF8_H_INCLUDED +#define SHEREDOM_UTF8_H_INCLUDED + +#if defined(_MSC_VER) +#pragma warning(push) + +// disable 'bytes padding added after construct' warning +#pragma warning(disable : 4820) +#endif + +#include +#include + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(_MSC_VER) +typedef __int32 utf8_int32_t; +#else +#include +typedef int32_t utf8_int32_t; +#endif + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wcast-qual" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(__clang__) || defined(__GNUC__) +#define utf8_nonnull __attribute__((nonnull)) +#define utf8_pure __attribute__((pure)) +#define utf8_restrict __restrict__ +#define utf8_weak __attribute__((weak)) +#elif defined(_MSC_VER) +#define utf8_nonnull +#define utf8_pure +#define utf8_restrict __restrict +#define utf8_weak __inline +#else +#define utf8_nonnull +#define utf8_pure +#define utf8_restrict +#define utf8_weak inline +#endif + +#ifdef __cplusplus +#define utf8_null NULL +#else +#define utf8_null 0 +#endif + +// Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > +// src2 respectively, case insensitive. +utf8_nonnull utf8_pure utf8_weak int utf8casecmp(const void *src1, + const void *src2); + +// Append the utf8 string src onto the utf8 string dst. +utf8_nonnull utf8_weak void *utf8cat(void *utf8_restrict dst, + const void *utf8_restrict src); + +// Find the first match of the utf8 codepoint chr in the utf8 string src. +utf8_nonnull utf8_pure utf8_weak void *utf8chr(const void *src, + utf8_int32_t chr); + +// Return less than 0, 0, greater than 0 if src1 < src2, +// src1 == src2, src1 > src2 respectively. +utf8_nonnull utf8_pure utf8_weak int utf8cmp(const void *src1, + const void *src2); + +// Copy the utf8 string src onto the memory allocated in dst. +utf8_nonnull utf8_weak void *utf8cpy(void *utf8_restrict dst, + const void *utf8_restrict src); + +// Number of utf8 codepoints in the utf8 string src that consists entirely +// of utf8 codepoints not from the utf8 string reject. +utf8_nonnull utf8_pure utf8_weak size_t utf8cspn(const void *src, + const void *reject); + +// Duplicate the utf8 string src by getting its size, malloc'ing a new buffer +// copying over the data, and returning that. Or 0 if malloc failed. +utf8_nonnull utf8_weak void *utf8dup(const void *src); + +// Number of utf8 codepoints in the utf8 string str, +// excluding the null terminating byte. +utf8_nonnull utf8_pure utf8_weak size_t utf8len(const void *str); + +// Visible width of utf8string. +utf8_nonnull utf8_pure utf8_weak size_t utf8width(const void *str); + +// Visible width of codepoint. +utf8_nonnull utf8_pure utf8_weak int utf8cwidth(utf8_int32_t c); + +// Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > +// src2 respectively, case insensitive. Checking at most n bytes of each utf8 +// string. +utf8_nonnull utf8_pure utf8_weak int utf8ncasecmp(const void *src1, + const void *src2, size_t n); + +// Append the utf8 string src onto the utf8 string dst, +// writing at most n+1 bytes. Can produce an invalid utf8 +// string if n falls partway through a utf8 codepoint. +utf8_nonnull utf8_weak void *utf8ncat(void *utf8_restrict dst, + const void *utf8_restrict src, size_t n); + +// Return less than 0, 0, greater than 0 if src1 < src2, +// src1 == src2, src1 > src2 respectively. Checking at most n +// bytes of each utf8 string. +utf8_nonnull utf8_pure utf8_weak int utf8ncmp(const void *src1, + const void *src2, size_t n); + +// Copy the utf8 string src onto the memory allocated in dst. +// Copies at most n bytes. If there is no terminating null byte in +// the first n bytes of src, the string placed into dst will not be +// null-terminated. If the size (in bytes) of src is less than n, +// extra null terminating bytes are appended to dst such that at +// total of n bytes are written. Can produce an invalid utf8 +// string if n falls partway through a utf8 codepoint. +utf8_nonnull utf8_weak void *utf8ncpy(void *utf8_restrict dst, + const void *utf8_restrict src, size_t n); + +// Similar to utf8dup, except that at most n bytes of src are copied. If src is +// longer than n, only n bytes are copied and a null byte is added. +// +// Returns a new string if successful, 0 otherwise +utf8_nonnull utf8_weak void *utf8ndup(const void *src, size_t n); + +// Locates the first occurence in the utf8 string str of any byte in the +// utf8 string accept, or 0 if no match was found. +utf8_nonnull utf8_pure utf8_weak void *utf8pbrk(const void *str, + const void *accept); + +// Find the last match of the utf8 codepoint chr in the utf8 string src. +utf8_nonnull utf8_pure utf8_weak void *utf8rchr(const void *src, int chr); + +// Number of bytes in the utf8 string str, +// including the null terminating byte. +utf8_nonnull utf8_pure utf8_weak size_t utf8size(const void *str); + +// Number of utf8 codepoints in the utf8 string src that consists entirely +// of utf8 codepoints from the utf8 string accept. +utf8_nonnull utf8_pure utf8_weak size_t utf8spn(const void *src, + const void *accept); + +// The position of the utf8 string needle in the utf8 string haystack. +utf8_nonnull utf8_pure utf8_weak void *utf8str(const void *haystack, + const void *needle); + +// The position of the utf8 string needle in the utf8 string haystack, case +// insensitive. +utf8_nonnull utf8_pure utf8_weak void *utf8casestr(const void *haystack, + const void *needle); + +// Return 0 on success, or the position of the invalid +// utf8 codepoint on failure. +utf8_nonnull utf8_pure utf8_weak void *utf8valid(const void *str); + +// Sets out_codepoint to the next utf8 codepoint in str, and returns the address +// of the utf8 codepoint after the current one in str. +utf8_nonnull utf8_weak void * +utf8codepoint(const void *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint); + +// Returns the size of the given codepoint in bytes. +utf8_weak size_t utf8codepointsize(utf8_int32_t chr); + +// Write a codepoint to the given string, and return the address to the next +// place after the written codepoint. Pass how many bytes left in the buffer to +// n. If there is not enough space for the codepoint, this function returns +// null. +utf8_nonnull utf8_weak void *utf8catcodepoint(void *utf8_restrict str, + utf8_int32_t chr, size_t n); + +// Returns 1 if the given character is lowercase, or 0 if it is not. +utf8_weak int utf8islower(utf8_int32_t chr); + +// Returns 1 if the given character is uppercase, or 0 if it is not. +utf8_weak int utf8isupper(utf8_int32_t chr); + +// Transform the given string into all lowercase codepoints. +utf8_nonnull utf8_weak void utf8lwr(void *utf8_restrict str); + +// Transform the given string into all uppercase codepoints. +utf8_nonnull utf8_weak void utf8upr(void *utf8_restrict str); + +// Make a codepoint lower case if possible. +utf8_weak utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp); + +// Make a codepoint upper case if possible. +utf8_weak utf8_int32_t utf8uprcodepoint(utf8_int32_t cp); + +#undef utf8_weak +#undef utf8_pure +#undef utf8_nonnull + +int utf8casecmp(const void *src1, const void *src2) +{ + utf8_int32_t src1_cp, src2_cp, src1_orig_cp, src2_orig_cp; + + for (;;) { + src1 = utf8codepoint(src1, &src1_cp); + src2 = utf8codepoint(src2, &src2_cp); + + // Take a copy of src1 & src2 + src1_orig_cp = src1_cp; + src2_orig_cp = src2_cp; + + // Lower the srcs if required + src1_cp = utf8lwrcodepoint(src1_cp); + src2_cp = utf8lwrcodepoint(src2_cp); + + // Check if the lowered codepoints match + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if (src1_cp == src2_cp) { + continue; + } + + // If they don't match, then we return which of the original's are less + if (src1_orig_cp < src2_orig_cp) { + return -1; + } else if (src1_orig_cp > src2_orig_cp) { + return 1; + } + } +} + +void *utf8cat(void *utf8_restrict dst, const void *utf8_restrict src) +{ + char *d = (char *)dst; + const char *s = (const char *)src; + + // find the null terminating byte in dst + while ('\0' != *d) { + d++; + } + + // overwriting the null terminating byte in dst, append src byte-by-byte + while ('\0' != *s) { + *d++ = *s++; + } + + // write out a new null terminating byte into dst + *d = '\0'; + + return dst; +} + +void *utf8chr(const void *src, utf8_int32_t chr) +{ + char c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + // being asked to return position of null terminating byte, so + // just run s to the end, and return! + const char *s = (const char *)src; + while ('\0' != *s) { + s++; + } + return (void *)s; + } else if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + // 1-byte/7-bit ascii + // (0b0xxxxxxx) + c[0] = (char)chr; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + // 2-byte/11-bit utf8 code point + // (0b110xxxxx 0b10xxxxxx) + c[0] = 0xc0 | (char)(chr >> 6); + c[1] = 0x80 | (char)(chr & 0x3f); + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + // 3-byte/16-bit utf8 code point + // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) + c[0] = 0xe0 | (char)(chr >> 12); + c[1] = 0x80 | (char)((chr >> 6) & 0x3f); + c[2] = 0x80 | (char)(chr & 0x3f); + } else { // if (0 == ((int)0xffe00000 & chr)) { + // 4-byte/21-bit utf8 code point + // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) + c[0] = 0xf0 | (char)(chr >> 18); + c[1] = 0x80 | (char)((chr >> 12) & 0x3f); + c[2] = 0x80 | (char)((chr >> 6) & 0x3f); + c[3] = 0x80 | (char)(chr & 0x3f); + } + + // we've made c into a 2 utf8 codepoint string, one for the chr we are + // seeking, another for the null terminating byte. Now use utf8str to + // search + return utf8str(src, c); +} + +int utf8cmp(const void *src1, const void *src2) +{ + const unsigned char *s1 = (const unsigned char *)src1; + const unsigned char *s2 = (const unsigned char *)src2; + + while (('\0' != *s1) || ('\0' != *s2)) { + if (*s1 < *s2) { + return -1; + } else if (*s1 > *s2) { + return 1; + } + + s1++; + s2++; + } + + // both utf8 strings matched + return 0; +} + +int utf8coll(const void *src1, const void *src2); + +void *utf8cpy(void *utf8_restrict dst, const void *utf8_restrict src) +{ + char *d = (char *)dst; + const char *s = (const char *)src; + + // overwriting anything previously in dst, write byte-by-byte + // from src + while ('\0' != *s) { + *d++ = *s++; + } + + // append null terminating byte + *d = '\0'; + + return dst; +} + +size_t utf8cspn(const void *src, const void *reject) +{ + const char *s = (const char *)src; + size_t chars = 0; + + while ('\0' != *s) { + const char *r = (const char *)reject; + size_t offset = 0; + + while ('\0' != *r) { + // checking that if *r is the start of a utf8 codepoint + // (it is not 0b10xxxxxx) and we have successfully matched + // a previous character (0 < offset) - we found a match + if ((0x80 != (0xc0 & *r)) && (0 < offset)) { + return chars; + } else { + if (*r == s[offset]) { + // part of a utf8 codepoint matched, so move our checking + // onwards to the next byte + offset++; + r++; + } else { + // r could be in the middle of an unmatching utf8 code point, + // so we need to march it on to the next character beginning, + + do { + r++; + } while (0x80 == (0xc0 & *r)); + + // reset offset too as we found a mismatch + offset = 0; + } + } + } + + // the current utf8 codepoint in src did not match reject, but src + // could have been partway through a utf8 codepoint, so we need to + // march it onto the next utf8 codepoint starting byte + do { + s++; + } while ((0x80 == (0xc0 & *s))); + chars++; + } + + return chars; +} + +size_t utf8size(const void *str); + +void *utf8dup(const void *src) +{ + const char *s = (const char *)src; + char *n = utf8_null; + + // figure out how many bytes (including the terminator) we need to copy first + size_t bytes = utf8size(src); + + n = (char *)malloc(bytes); + + if (utf8_null == n) { + // out of memory so we bail + return utf8_null; + } else { + bytes = 0; + + // copy src byte-by-byte into our new utf8 string + while ('\0' != s[bytes]) { + n[bytes] = s[bytes]; + bytes++; + } + + // append null terminating byte + n[bytes] = '\0'; + return n; + } +} + +void *utf8fry(const void *str); + +size_t utf8len(const void *str) +{ + const unsigned char *s = (const unsigned char *)str; + size_t length = 0; + + while ('\0' != *s) { + if (0xf0 == (0xf8 & *s)) { + // 4-byte utf8 code point (began with 0b11110xxx) + s += 4; + } else if (0xe0 == (0xf0 & *s)) { + // 3-byte utf8 code point (began with 0b1110xxxx) + s += 3; + } else if (0xc0 == (0xe0 & *s)) { + // 2-byte utf8 code point (began with 0b110xxxxx) + s += 2; + } else { // if (0x00 == (0x80 & *s)) { + // 1-byte ascii (began with 0b0xxxxxxx) + s += 1; + } + + // no matter the bytes we marched s forward by, it was + // only 1 utf8 codepoint + length++; + } + + return length; +} + +// See +// https://unicode.org/Public/UNIDATA/EastAsianWidth.txt +// http://www.unicode.org/reports/tr11/tr11-33.html +int utf8cwidth(utf8_int32_t c) +{ + // TODO: add non printable characters check + if (c == 0) + return 0; + + if (c < 0x1100) + return 1; + + // Fullwidth + if ((0x3000 == c) || + (0xFF01 <= c && c <= 0xFF60) || + (0xFFE0 <= c && c <= 0xFFE6)) { + return 2; + } + + // Wide + if ((0x1100 <= c && c <= 0x115F) || + (0x11A3 <= c && c <= 0x11A7) || + (0x11FA <= c && c <= 0x11FF) || + (0x2329 <= c && c <= 0x232A) || + (0x2E80 <= c && c <= 0x2E99) || + (0x2E9B <= c && c <= 0x2EF3) || + (0x2F00 <= c && c <= 0x2FD5) || + (0x2FF0 <= c && c <= 0x2FFB) || + (0x3001 <= c && c <= 0x303E) || + (0x3041 <= c && c <= 0x3096) || + (0x3099 <= c && c <= 0x30FF) || + (0x3105 <= c && c <= 0x312D) || + (0x3131 <= c && c <= 0x318E) || + (0x3190 <= c && c <= 0x31BA) || + (0x31C0 <= c && c <= 0x31E3) || + (0x31F0 <= c && c <= 0x321E) || + (0x3220 <= c && c <= 0x3247) || + (0x3250 <= c && c <= 0x32FE) || + (0x3300 <= c && c <= 0x4DBF) || + (0x4E00 <= c && c <= 0xA48C) || + (0xA490 <= c && c <= 0xA4C6) || + (0xA960 <= c && c <= 0xA97C) || + (0xAC00 <= c && c <= 0xD7A3) || + (0xD7B0 <= c && c <= 0xD7C6) || + (0xD7CB <= c && c <= 0xD7FB) || + (0xF900 <= c && c <= 0xFAFF) || + (0xFE10 <= c && c <= 0xFE19) || + (0xFE30 <= c && c <= 0xFE52) || + (0xFE54 <= c && c <= 0xFE66) || + (0xFE68 <= c && c <= 0xFE6B) || + (0x1B000 <= c && c <= 0x1B001) || + (0x1F200 <= c && c <= 0x1F202) || + (0x1F210 <= c && c <= 0x1F23A) || + (0x1F240 <= c && c <= 0x1F248) || + (0x1F250 <= c && c <= 0x1F251) || + (0x20000 <= c && c <= 0x2F73F) || + (0x2B740 <= c && c <= 0x2FFFD) || + (0x30000 <= c && c <= 0x3FFFD)) { + return 2; + } + + return 1; +} + +size_t utf8width(const void *str) +{ + size_t length = 0; + utf8_int32_t c = 0; + + str = utf8codepoint(str, &c); + while (c != 0) { + length += utf8cwidth(c); + str = utf8codepoint(str, &c); + } + return length; +} + +int utf8ncasecmp(const void *src1, const void *src2, size_t n) +{ + utf8_int32_t src1_cp, src2_cp, src1_orig_cp, src2_orig_cp; + + do { + const unsigned char *const s1 = (const unsigned char *)src1; + const unsigned char *const s2 = (const unsigned char *)src2; + + // first check that we have enough bytes left in n to contain an entire + // codepoint + if (0 == n) { + return 0; + } + + if ((1 == n) && ((0xc0 == (0xe0 & *s1)) || (0xc0 == (0xe0 & *s2)))) { + const utf8_int32_t c1 = (0xe0 & *s1); + const utf8_int32_t c2 = (0xe0 & *s2); + + if (c1 < c2) { + return -1; + } else if (c1 > c2) { + return 1; + } else { + return 0; + } + } + + if ((2 >= n) && ((0xe0 == (0xf0 & *s1)) || (0xe0 == (0xf0 & *s2)))) { + const utf8_int32_t c1 = (0xf0 & *s1); + const utf8_int32_t c2 = (0xf0 & *s2); + + if (c1 < c2) { + return -1; + } else if (c1 > c2) { + return 1; + } else { + return 0; + } + } + + if ((3 >= n) && ((0xf0 == (0xf8 & *s1)) || (0xf0 == (0xf8 & *s2)))) { + const utf8_int32_t c1 = (0xf8 & *s1); + const utf8_int32_t c2 = (0xf8 & *s2); + + if (c1 < c2) { + return -1; + } else if (c1 > c2) { + return 1; + } else { + return 0; + } + } + + src1 = utf8codepoint(src1, &src1_cp); + src2 = utf8codepoint(src2, &src2_cp); + n -= utf8codepointsize(src1_cp); + + // Take a copy of src1 & src2 + src1_orig_cp = src1_cp; + src2_orig_cp = src2_cp; + + // Lower srcs if required + src1_cp = utf8lwrcodepoint(src1_cp); + src2_cp = utf8lwrcodepoint(src2_cp); + + // Check if the lowered codepoints match + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if (src1_cp == src2_cp) { + continue; + } + + // If they don't match, then we return which of the original's are less + if (src1_orig_cp < src2_orig_cp) { + return -1; + } else if (src1_orig_cp > src2_orig_cp) { + return 1; + } + } while (0 < n); + + // both utf8 strings matched + return 0; +} + +void *utf8ncat(void *utf8_restrict dst, const void *utf8_restrict src, + size_t n) +{ + char *d = (char *)dst; + const char *s = (const char *)src; + + // find the null terminating byte in dst + while ('\0' != *d) { + d++; + } + + // overwriting the null terminating byte in dst, append src byte-by-byte + // stopping if we run out of space + do { + *d++ = *s++; + } while (('\0' != *s) && (0 != --n)); + + // write out a new null terminating byte into dst + *d = '\0'; + + return dst; +} + +int utf8ncmp(const void *src1, const void *src2, size_t n) +{ + const unsigned char *s1 = (const unsigned char *)src1; + const unsigned char *s2 = (const unsigned char *)src2; + + while ((0 != n--) && (('\0' != *s1) || ('\0' != *s2))) { + if (*s1 < *s2) { + return -1; + } else if (*s1 > *s2) { + return 1; + } + + s1++; + s2++; + } + + // both utf8 strings matched + return 0; +} + +void *utf8ncpy(void *utf8_restrict dst, const void *utf8_restrict src, + size_t n) +{ + char *d = (char *)dst; + const char *s = (const char *)src; + size_t index; + + // overwriting anything previously in dst, write byte-by-byte + // from src + for (index = 0; index < n; index++) { + d[index] = s[index]; + if ('\0' == s[index]) { + break; + } + } + + // append null terminating byte + for (; index < n; index++) { + d[index] = 0; + } + + return dst; +} + +void *utf8ndup(const void *src, size_t n) +{ + const char *s = (const char *)src; + char *c = utf8_null; + size_t bytes = 0; + + // Find the end of the string or stop when n is reached + while ('\0' != s[bytes] && bytes < n) { + bytes++; + } + + // In case bytes is actually less than n, we need to set it + // to be used later in the copy byte by byte. + n = bytes; + + c = (char *)malloc(bytes + 1); + if (utf8_null == c) { + // out of memory so we bail + return utf8_null; + } + + bytes = 0; + + // copy src byte-by-byte into our new utf8 string + while ('\0' != s[bytes] && bytes < n) { + c[bytes] = s[bytes]; + bytes++; + } + + // append null terminating byte + c[bytes] = '\0'; + return c; +} + +void *utf8rchr(const void *src, int chr) +{ + const char *s = (const char *)src; + const char *match = utf8_null; + char c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + // being asked to return position of null terminating byte, so + // just run s to the end, and return! + while ('\0' != *s) { + s++; + } + return (void *)s; + } else if (0 == ((int)0xffffff80 & chr)) { + // 1-byte/7-bit ascii + // (0b0xxxxxxx) + c[0] = (char)chr; + } else if (0 == ((int)0xfffff800 & chr)) { + // 2-byte/11-bit utf8 code point + // (0b110xxxxx 0b10xxxxxx) + c[0] = 0xc0 | (char)(chr >> 6); + c[1] = 0x80 | (char)(chr & 0x3f); + } else if (0 == ((int)0xffff0000 & chr)) { + // 3-byte/16-bit utf8 code point + // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) + c[0] = 0xe0 | (char)(chr >> 12); + c[1] = 0x80 | (char)((chr >> 6) & 0x3f); + c[2] = 0x80 | (char)(chr & 0x3f); + } else { // if (0 == ((int)0xffe00000 & chr)) { + // 4-byte/21-bit utf8 code point + // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) + c[0] = 0xf0 | (char)(chr >> 18); + c[1] = 0x80 | (char)((chr >> 12) & 0x3f); + c[2] = 0x80 | (char)((chr >> 6) & 0x3f); + c[3] = 0x80 | (char)(chr & 0x3f); + } + + // we've created a 2 utf8 codepoint string in c that is + // the utf8 character asked for by chr, and a null + // terminating byte + + while ('\0' != *s) { + size_t offset = 0; + + while (s[offset] == c[offset]) { + offset++; + } + + if ('\0' == c[offset]) { + // we found a matching utf8 code point + match = s; + s += offset; + } else { + s += offset; + + // need to march s along to next utf8 codepoint start + // (the next byte that doesn't match 0b10xxxxxx) + if ('\0' != *s) { + do { + s++; + } while (0x80 == (0xc0 & *s)); + } + } + } + + // return the last match we found (or 0 if no match was found) + return (void *)match; +} + +void *utf8pbrk(const void *str, const void *accept) +{ + const char *s = (const char *)str; + + while ('\0' != *s) { + const char *a = (const char *)accept; + size_t offset = 0; + + while ('\0' != *a) { + // checking that if *a is the start of a utf8 codepoint + // (it is not 0b10xxxxxx) and we have successfully matched + // a previous character (0 < offset) - we found a match + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + return (void *)s; + } else { + if (*a == s[offset]) { + // part of a utf8 codepoint matched, so move our checking + // onwards to the next byte + offset++; + a++; + } else { + // r could be in the middle of an unmatching utf8 code point, + // so we need to march it on to the next character beginning, + + do { + a++; + } while (0x80 == (0xc0 & *a)); + + // reset offset too as we found a mismatch + offset = 0; + } + } + } + + // we found a match on the last utf8 codepoint + if (0 < offset) { + return (void *)s; + } + + // the current utf8 codepoint in src did not match accept, but src + // could have been partway through a utf8 codepoint, so we need to + // march it onto the next utf8 codepoint starting byte + do { + s++; + } while ((0x80 == (0xc0 & *s))); + } + + return utf8_null; +} + +size_t utf8size(const void *str) +{ + const char *s = (const char *)str; + size_t size = 0; + while ('\0' != s[size]) { + size++; + } + + // we are including the null terminating byte in the size calculation + size++; + return size; +} + +size_t utf8spn(const void *src, const void *accept) +{ + const char *s = (const char *)src; + size_t chars = 0; + + while ('\0' != *s) { + const char *a = (const char *)accept; + size_t offset = 0; + + while ('\0' != *a) { + // checking that if *r is the start of a utf8 codepoint + // (it is not 0b10xxxxxx) and we have successfully matched + // a previous character (0 < offset) - we found a match + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + // found a match, so increment the number of utf8 codepoints + // that have matched and stop checking whether any other utf8 + // codepoints in a match + chars++; + s += offset; + break; + } else { + if (*a == s[offset]) { + offset++; + a++; + } else { + // a could be in the middle of an unmatching utf8 codepoint, + // so we need to march it on to the next character beginning, + do { + a++; + } while (0x80 == (0xc0 & *a)); + + // reset offset too as we found a mismatch + offset = 0; + } + } + } + + // if a got to its terminating null byte, then we didn't find a match. + // Return the current number of matched utf8 codepoints + if ('\0' == *a) { + return chars; + } + } + + return chars; +} + +void *utf8str(const void *haystack, const void *needle) +{ + const char *h = (const char *)haystack; + utf8_int32_t throwaway_codepoint; + + // if needle has no utf8 codepoints before the null terminating + // byte then return haystack + if ('\0' == *((const char *)needle)) { + return (void *)haystack; + } + + while ('\0' != *h) { + const char *maybeMatch = h; + const char *n = (const char *)needle; + + while (*h == *n && (*h != '\0' && *n != '\0')) { + n++; + h++; + } + + if ('\0' == *n) { + // we found the whole utf8 string for needle in haystack at + // maybeMatch, so return it + return (void *)maybeMatch; + } else { + // h could be in the middle of an unmatching utf8 codepoint, + // so we need to march it on to the next character beginning + // starting from the current character + h = (const char *)utf8codepoint(maybeMatch, &throwaway_codepoint); + } + } + + // no match + return utf8_null; +} + +void *utf8casestr(const void *haystack, const void *needle) +{ + const void *h = haystack; + + // if needle has no utf8 codepoints before the null terminating + // byte then return haystack + if ('\0' == *((const char *)needle)) { + return (void *)haystack; + } + + for (;;) { + const void *maybeMatch = h; + const void *n = needle; + utf8_int32_t h_cp, n_cp; + + // Get the next code point and track it + const void *nextH = h = utf8codepoint(h, &h_cp); + n = utf8codepoint(n, &n_cp); + + while ((0 != h_cp) && (0 != n_cp)) { + h_cp = utf8lwrcodepoint(h_cp); + n_cp = utf8lwrcodepoint(n_cp); + + // if we find a mismatch, bail out! + if (h_cp != n_cp) { + break; + } + + h = utf8codepoint(h, &h_cp); + n = utf8codepoint(n, &n_cp); + } + + if (0 == n_cp) { + // we found the whole utf8 string for needle in haystack at + // maybeMatch, so return it + return (void *)maybeMatch; + } + + if (0 == h_cp) { + // no match + return utf8_null; + } + + // Roll back to the next code point in the haystack to test + h = nextH; + } +} + +void *utf8valid(const void *str) +{ + const char *s = (const char *)str; + + while ('\0' != *s) { + if (0xf0 == (0xf8 & *s)) { + // ensure each of the 3 following bytes in this 4-byte + // utf8 codepoint began with 0b10xxxxxx + if ((0x80 != (0xc0 & s[1])) || (0x80 != (0xc0 & s[2])) || + (0x80 != (0xc0 & s[3]))) { + return (void *)s; + } + + // ensure that our utf8 codepoint ended after 4 bytes + if (0x80 == (0xc0 & s[4])) { + return (void *)s; + } + + // ensure that the top 5 bits of this 4-byte utf8 + // codepoint were not 0, as then we could have used + // one of the smaller encodings + if ((0 == (0x07 & s[0])) && (0 == (0x30 & s[1]))) { + return (void *)s; + } + + // 4-byte utf8 code point (began with 0b11110xxx) + s += 4; + } else if (0xe0 == (0xf0 & *s)) { + // ensure each of the 2 following bytes in this 3-byte + // utf8 codepoint began with 0b10xxxxxx + if ((0x80 != (0xc0 & s[1])) || (0x80 != (0xc0 & s[2]))) { + return (void *)s; + } + + // ensure that our utf8 codepoint ended after 3 bytes + if (0x80 == (0xc0 & s[3])) { + return (void *)s; + } + + // ensure that the top 5 bits of this 3-byte utf8 + // codepoint were not 0, as then we could have used + // one of the smaller encodings + if ((0 == (0x0f & s[0])) && (0 == (0x20 & s[1]))) { + return (void *)s; + } + + // 3-byte utf8 code point (began with 0b1110xxxx) + s += 3; + } else if (0xc0 == (0xe0 & *s)) { + // ensure the 1 following byte in this 2-byte + // utf8 codepoint began with 0b10xxxxxx + if (0x80 != (0xc0 & s[1])) { + return (void *)s; + } + + // ensure that our utf8 codepoint ended after 2 bytes + if (0x80 == (0xc0 & s[2])) { + return (void *)s; + } + + // ensure that the top 4 bits of this 2-byte utf8 + // codepoint were not 0, as then we could have used + // one of the smaller encodings + if (0 == (0x1e & s[0])) { + return (void *)s; + } + + // 2-byte utf8 code point (began with 0b110xxxxx) + s += 2; + } else if (0x00 == (0x80 & *s)) { + // 1-byte ascii (began with 0b0xxxxxxx) + s += 1; + } else { + // we have an invalid 0b1xxxxxxx utf8 code point entry + return (void *)s; + } + } + + return utf8_null; +} + +void *utf8codepoint(const void *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint) +{ + const char *s = (const char *)str; + + if (0xf0 == (0xf8 & s[0])) { + // 4 byte utf8 codepoint + *out_codepoint = ((0x07 & s[0]) << 18) | ((0x3f & s[1]) << 12) | + ((0x3f & s[2]) << 6) | (0x3f & s[3]); + s += 4; + } else if (0xe0 == (0xf0 & s[0])) { + // 3 byte utf8 codepoint + *out_codepoint = + ((0x0f & s[0]) << 12) | ((0x3f & s[1]) << 6) | (0x3f & s[2]); + s += 3; + } else if (0xc0 == (0xe0 & s[0])) { + // 2 byte utf8 codepoint + *out_codepoint = ((0x1f & s[0]) << 6) | (0x3f & s[1]); + s += 2; + } else { + // 1 byte utf8 codepoint otherwise + *out_codepoint = s[0]; + s += 1; + } + + return (void *)s; +} + +size_t utf8codepointsize(utf8_int32_t chr) +{ + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + return 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + return 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + return 3; + } else { // if (0 == ((int)0xffe00000 & chr)) { + return 4; + } +} + +void *utf8catcodepoint(void *utf8_restrict str, utf8_int32_t chr, size_t n) +{ + char *s = (char *)str; + + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + // 1-byte/7-bit ascii + // (0b0xxxxxxx) + if (n < 1) { + return utf8_null; + } + s[0] = (char)chr; + s += 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + // 2-byte/11-bit utf8 code point + // (0b110xxxxx 0b10xxxxxx) + if (n < 2) { + return utf8_null; + } + s[0] = 0xc0 | (char)(chr >> 6); + s[1] = 0x80 | (char)(chr & 0x3f); + s += 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + // 3-byte/16-bit utf8 code point + // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) + if (n < 3) { + return utf8_null; + } + s[0] = 0xe0 | (char)(chr >> 12); + s[1] = 0x80 | (char)((chr >> 6) & 0x3f); + s[2] = 0x80 | (char)(chr & 0x3f); + s += 3; + } else { // if (0 == ((int)0xffe00000 & chr)) { + // 4-byte/21-bit utf8 code point + // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) + if (n < 4) { + return utf8_null; + } + s[0] = 0xf0 | (char)(chr >> 18); + s[1] = 0x80 | (char)((chr >> 12) & 0x3f); + s[2] = 0x80 | (char)((chr >> 6) & 0x3f); + s[3] = 0x80 | (char)(chr & 0x3f); + s += 4; + } + + return s; +} + +int utf8islower(utf8_int32_t chr) { return chr != utf8uprcodepoint(chr); } + +int utf8isupper(utf8_int32_t chr) { return chr != utf8lwrcodepoint(chr); } + +void utf8lwr(void *utf8_restrict str) +{ + void *p, *pn; + utf8_int32_t cp; + + p = (char *)str; + pn = utf8codepoint(p, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8lwrcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(p, lwr_cp, size); + } + + p = pn; + pn = utf8codepoint(p, &cp); + } +} + +void utf8upr(void *utf8_restrict str) +{ + void *p, *pn; + utf8_int32_t cp; + + p = (char *)str; + pn = utf8codepoint(p, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8uprcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(p, lwr_cp, size); + } + + p = pn; + pn = utf8codepoint(p, &cp); + } +} + +utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp) +{ + if (((0x0041 <= cp) && (0x005a >= cp)) || + ((0x00c0 <= cp) && (0x00d6 >= cp)) || + ((0x00d8 <= cp) && (0x00de >= cp)) || + ((0x0391 <= cp) && (0x03a1 >= cp)) || + ((0x03a3 <= cp) && (0x03ab >= cp))) { + cp += 32; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp))) { + cp |= 0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp += 1; + cp &= ~0x1; + } else { + switch (cp) { + default: break; + case 0x0178: cp = 0x00ff; break; + case 0x0243: cp = 0x0180; break; + case 0x018e: cp = 0x01dd; break; + case 0x023d: cp = 0x019a; break; + case 0x0220: cp = 0x019e; break; + case 0x01b7: cp = 0x0292; break; + case 0x01c4: cp = 0x01c6; break; + case 0x01c7: cp = 0x01c9; break; + case 0x01ca: cp = 0x01cc; break; + case 0x01f1: cp = 0x01f3; break; + case 0x01f7: cp = 0x01bf; break; + case 0x0187: cp = 0x0188; break; + case 0x018b: cp = 0x018c; break; + case 0x0191: cp = 0x0192; break; + case 0x0198: cp = 0x0199; break; + case 0x01a7: cp = 0x01a8; break; + case 0x01ac: cp = 0x01ad; break; + case 0x01af: cp = 0x01b0; break; + case 0x01b8: cp = 0x01b9; break; + case 0x01bc: cp = 0x01bd; break; + case 0x01f4: cp = 0x01f5; break; + case 0x023b: cp = 0x023c; break; + case 0x0241: cp = 0x0242; break; + case 0x03fd: cp = 0x037b; break; + case 0x03fe: cp = 0x037c; break; + case 0x03ff: cp = 0x037d; break; + case 0x037f: cp = 0x03f3; break; + case 0x0386: cp = 0x03ac; break; + case 0x0388: cp = 0x03ad; break; + case 0x0389: cp = 0x03ae; break; + case 0x038a: cp = 0x03af; break; + case 0x038c: cp = 0x03cc; break; + case 0x038e: cp = 0x03cd; break; + case 0x038f: cp = 0x03ce; break; + case 0x0370: cp = 0x0371; break; + case 0x0372: cp = 0x0373; break; + case 0x0376: cp = 0x0377; break; + case 0x03f4: cp = 0x03d1; break; + case 0x03cf: cp = 0x03d7; break; + case 0x03f9: cp = 0x03f2; break; + case 0x03f7: cp = 0x03f8; break; + case 0x03fa: cp = 0x03fb; break; + }; + } + + return cp; +} + +utf8_int32_t utf8uprcodepoint(utf8_int32_t cp) +{ + if (((0x0061 <= cp) && (0x007a >= cp)) || + ((0x00e0 <= cp) && (0x00f6 >= cp)) || + ((0x00f8 <= cp) && (0x00fe >= cp)) || + ((0x03b1 <= cp) && (0x03c1 >= cp)) || + ((0x03c3 <= cp) && (0x03cb >= cp))) { + cp -= 32; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp))) { + cp &= ~0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp -= 1; + cp |= 0x1; + } else { + switch (cp) { + default: break; + case 0x00ff: cp = 0x0178; break; + case 0x0180: cp = 0x0243; break; + case 0x01dd: cp = 0x018e; break; + case 0x019a: cp = 0x023d; break; + case 0x019e: cp = 0x0220; break; + case 0x0292: cp = 0x01b7; break; + case 0x01c6: cp = 0x01c4; break; + case 0x01c9: cp = 0x01c7; break; + case 0x01cc: cp = 0x01ca; break; + case 0x01f3: cp = 0x01f1; break; + case 0x01bf: cp = 0x01f7; break; + case 0x0188: cp = 0x0187; break; + case 0x018c: cp = 0x018b; break; + case 0x0192: cp = 0x0191; break; + case 0x0199: cp = 0x0198; break; + case 0x01a8: cp = 0x01a7; break; + case 0x01ad: cp = 0x01ac; break; + case 0x01b0: cp = 0x01af; break; + case 0x01b9: cp = 0x01b8; break; + case 0x01bd: cp = 0x01bc; break; + case 0x01f5: cp = 0x01f4; break; + case 0x023c: cp = 0x023b; break; + case 0x0242: cp = 0x0241; break; + case 0x037b: cp = 0x03fd; break; + case 0x037c: cp = 0x03fe; break; + case 0x037d: cp = 0x03ff; break; + case 0x03f3: cp = 0x037f; break; + case 0x03ac: cp = 0x0386; break; + case 0x03ad: cp = 0x0388; break; + case 0x03ae: cp = 0x0389; break; + case 0x03af: cp = 0x038a; break; + case 0x03cc: cp = 0x038c; break; + case 0x03cd: cp = 0x038e; break; + case 0x03ce: cp = 0x038f; break; + case 0x0371: cp = 0x0370; break; + case 0x0373: cp = 0x0372; break; + case 0x0377: cp = 0x0376; break; + case 0x03d1: cp = 0x03f4; break; + case 0x03d7: cp = 0x03cf; break; + case 0x03f2: cp = 0x03f9; break; + case 0x03f8: cp = 0x03f7; break; + case 0x03fb: cp = 0x03fa; break; + }; + } + + return cp; +} + +#undef utf8_restrict +#undef utf8_null + +#ifdef __cplusplus +} // extern "C" +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +#endif // SHEREDOM_UTF8_H_INCLUDED + + +/******************************************************** + End of file "utf8.h" + ********************************************************/ + + +/******************************************************** + Begin of file "string_buffer.h" + ********************************************************/ + +#ifndef STRING_BUFFER_H +#define STRING_BUFFER_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + + +/***************************************************************************** + * STRING BUFFER + * ***************************************************************************/ + +struct f_string_buffer { + union { + char *cstr; +#ifdef FT_HAVE_WCHAR + wchar_t *wstr; +#endif +#ifdef FT_HAVE_UTF8 + void *u8str; +#endif + void *data; + } str; + size_t data_sz; + enum f_string_type type; +}; + +FT_INTERNAL +f_string_buffer_t *create_string_buffer(size_t number_of_chars, enum f_string_type type); + +FT_INTERNAL +void destroy_string_buffer(f_string_buffer_t *buffer); + +FT_INTERNAL +f_string_buffer_t *copy_string_buffer(const f_string_buffer_t *buffer); + +FT_INTERNAL +f_status realloc_string_buffer_without_copy(f_string_buffer_t *buffer); + +FT_INTERNAL +f_status fill_buffer_from_string(f_string_buffer_t *buffer, const char *str); + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_status fill_buffer_from_wstring(f_string_buffer_t *buffer, const wchar_t *str); +#endif /* FT_HAVE_WCHAR */ + +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +f_status fill_buffer_from_u8string(f_string_buffer_t *buffer, const void *str); +#endif /* FT_HAVE_UTF8 */ + +FT_INTERNAL +size_t buffer_text_visible_width(const f_string_buffer_t *buffer); + +FT_INTERNAL +size_t buffer_text_visible_height(const f_string_buffer_t *buffer); + +FT_INTERNAL +size_t string_buffer_cod_width_capacity(const f_string_buffer_t *buffer); + +FT_INTERNAL +size_t string_buffer_raw_capacity(const f_string_buffer_t *buffer); + +FT_INTERNAL +size_t string_buffer_width_capacity(const f_string_buffer_t *buffer); + +FT_INTERNAL +void *buffer_get_data(f_string_buffer_t *buffer); + +FT_INTERNAL +int buffer_check_align(f_string_buffer_t *buffer); + +FT_INTERNAL +int buffer_printf(f_string_buffer_t *buffer, size_t buffer_row, f_conv_context_t *cntx, size_t cod_width, + const char *content_style_tag, const char *reset_content_style_tag); + +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +void buffer_set_u8strwid_func(int (*u8strwid)(const void *beg, const void *end, size_t *width)); +#endif /* FT_HAVE_UTF8 */ + + +#endif /* STRING_BUFFER_H */ + +/******************************************************** + End of file "string_buffer.h" + ********************************************************/ + + +/******************************************************** + Begin of file "properties.h" + ********************************************************/ + +#ifndef PROPERTIES_H +#define PROPERTIES_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +#include +#include + +#define PROP_IS_SET(ft_props, property) ((ft_props) & (property)) +#define PROP_SET(ft_props, property) ((ft_props) |=(property)) +#define PROP_UNSET(ft_props, property) ((ft_props) &= ~((uint32_t)(property))) + +#define TEXT_STYLE_TAG_MAX_SIZE (64 * 2) + +FT_INTERNAL +void get_style_tag_for_cell(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz); + +FT_INTERNAL +void get_reset_style_tag_for_cell(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz); + +FT_INTERNAL +void get_style_tag_for_content(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz); + +FT_INTERNAL +void get_reset_style_tag_for_content(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz); + + +struct f_cell_props { + size_t cell_row; + size_t cell_col; + uint32_t properties_flags; + + unsigned int col_min_width; + enum ft_text_alignment align; + unsigned int cell_padding_top; + unsigned int cell_padding_bottom; + unsigned int cell_padding_left; + unsigned int cell_padding_right; + unsigned int cell_empty_string_height; + enum ft_row_type row_type; + unsigned int content_fg_color_number; + unsigned int content_bg_color_number; + unsigned int cell_bg_color_number; + enum ft_text_style cell_text_style; + enum ft_text_style content_text_style; +}; + +typedef struct f_cell_props f_cell_props_t; +typedef f_vector_t f_cell_prop_container_t; + +FT_INTERNAL +f_cell_prop_container_t *create_cell_prop_container(void); + +FT_INTERNAL +void destroy_cell_prop_container(f_cell_prop_container_t *cont); + +FT_INTERNAL +const f_cell_props_t *cget_cell_prop(const f_cell_prop_container_t *cont, size_t row, size_t col); + +FT_INTERNAL +f_cell_props_t *get_cell_prop_and_create_if_not_exists(f_cell_prop_container_t *cont, size_t row, size_t col); + +FT_INTERNAL +f_status set_cell_property(f_cell_prop_container_t *cont, size_t row, size_t col, uint32_t property, int value); + +FT_INTERNAL +int get_cell_property_hierarchically(const f_table_properties_t *properties, size_t row, size_t column, uint32_t property); + +FT_INTERNAL +f_status set_default_cell_property(uint32_t property, int value); + + +/* TABLE BORDER DESСRIPTION + * + * + * TL TT TT TT TV TT TT TT TT TT TT TT TR + * LL IV RR + * LL IV RR + * LH IH IH IH II IH IH IH TI IH IH IH RH + * LL IV IV RR + * LL IV IV RR + * LL LI IH IH IH RI RH + * LL IV IV RR + * LL IV IV RR + * LH IH IH IH BI IH IH IH II IH IH IH RH + * LL IV RR + * LL IV RR + * BL BB BB BB BV BB BB BB BV BB BB BB BR + */ + + +/* HORIZONTAL SEPARATOR DESCRIPTION + * + * + * TL TT TT TT TV TT TT TT TV TT TT TT TR <----- TOP_SEPARATOR + * LL IV IV RR + * LH IH IH IH II IH IH IH II IH IH IH RH <----- INSIDE_SEPARATOR + * LL IV IV RR + * BL BB BB BB BV BB BB BB BV BB BB BB BR <----- BOTTOM_SEPARATOR + */ + +enum f_hor_separator_pos { + TOP_SEPARATOR, + INSIDE_SEPARATOR, + BOTTOM_SEPARATOR +}; + +enum f_border_item_pos { + TL_bip = 0, + TT_bip = 1, + TV_bip = 2, + TR_bip = 3, + + LL_bip = 4, + IV_bip = 5, + RR_bip = 6, + + LH_bip = 7, + IH_bip = 8, + II_bip = 9, + RH_bip = 10, + + BL_bip = 11, + BB_bip = 12, + BV_bip = 13, + BR_bip = 14, + + LI_bip = 15, + TI_bip = 16, + RI_bip = 17, + BI_bip = 18, + + BORDER_ITEM_POS_SIZE +}; + + +enum f_separator_item_pos { + LH_sip = 0, + IH_sip = 1, + II_sip = 2, + RH_sip = 3, + + TI_sip = 4, + BI_sip = 5, + + SEPARATOR_ITEM_POS_SIZE +}; + + +struct fort_border_style { + const char *border_chars[BORDER_ITEM_POS_SIZE]; + const char *header_border_chars[BORDER_ITEM_POS_SIZE]; + const char *separator_chars[SEPARATOR_ITEM_POS_SIZE]; +}; +extern struct fort_border_style FORT_BASIC_STYLE; +extern struct fort_border_style FORT_BASIC2_STYLE; +extern struct fort_border_style FORT_SIMPLE_STYLE; +extern struct fort_border_style FORT_PLAIN_STYLE; +extern struct fort_border_style FORT_DOT_STYLE; +extern struct fort_border_style FORT_EMPTY_STYLE; +extern struct fort_border_style FORT_EMPTY2_STYLE; +extern struct fort_border_style FORT_SOLID_STYLE; +extern struct fort_border_style FORT_SOLID_ROUND_STYLE; +extern struct fort_border_style FORT_NICE_STYLE; +extern struct fort_border_style FORT_DOUBLE_STYLE; +extern struct fort_border_style FORT_DOUBLE2_STYLE; +extern struct fort_border_style FORT_BOLD_STYLE; +extern struct fort_border_style FORT_BOLD2_STYLE; +extern struct fort_border_style FORT_FRAME_STYLE; + + +struct fort_entire_table_properties { + unsigned int left_margin; + unsigned int top_margin; + unsigned int right_margin; + unsigned int bottom_margin; + enum ft_adding_strategy add_strategy; +}; +typedef struct fort_entire_table_properties fort_entire_table_properties_t; +extern fort_entire_table_properties_t g_entire_table_properties; + +FT_INTERNAL +f_status set_entire_table_property(f_table_properties_t *table_properties, uint32_t property, int value); + +FT_INTERNAL +f_status set_default_entire_table_property(uint32_t property, int value); + +struct f_table_properties { + struct fort_border_style border_style; + f_cell_prop_container_t *cell_properties; + fort_entire_table_properties_t entire_table_properties; +}; +extern f_table_properties_t g_table_properties; + +FT_INTERNAL +size_t max_border_elem_strlen(struct f_table_properties *); + +FT_INTERNAL +f_table_properties_t *create_table_properties(void); + +FT_INTERNAL +void destroy_table_properties(f_table_properties_t *properties); + +FT_INTERNAL +f_table_properties_t *copy_table_properties(const f_table_properties_t *property); + +#endif /* PROPERTIES_H */ + +/******************************************************** + End of file "properties.h" + ********************************************************/ + + +/******************************************************** + Begin of file "cell.h" + ********************************************************/ + +#ifndef CELL_H +#define CELL_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + +FT_INTERNAL +f_cell_t *create_cell(void); + +FT_INTERNAL +void destroy_cell(f_cell_t *cell); + +FT_INTERNAL +f_cell_t *copy_cell(f_cell_t *cell); + +FT_INTERNAL +size_t cell_vis_width(const f_cell_t *cell, const f_context_t *context); + +FT_INTERNAL +size_t cell_invis_codes_width(const f_cell_t *cell, const f_context_t *context); + +FT_INTERNAL +size_t hint_height_cell(const f_cell_t *cell, const f_context_t *context); + +FT_INTERNAL +void set_cell_type(f_cell_t *cell, enum f_cell_type type); + +FT_INTERNAL +enum f_cell_type get_cell_type(const f_cell_t *cell); + +FT_INTERNAL +int cell_printf(f_cell_t *cell, size_t row, f_conv_context_t *cntx, size_t cod_width); + +FT_INTERNAL +f_status fill_cell_from_string(f_cell_t *cell, const char *str); + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_status fill_cell_from_wstring(f_cell_t *cell, const wchar_t *str); +#endif + +FT_INTERNAL +f_status fill_cell_from_buffer(f_cell_t *cell, const f_string_buffer_t *buf); + +FT_INTERNAL +f_string_buffer_t *cell_get_string_buffer(f_cell_t *cell); + +#endif /* CELL_H */ + +/******************************************************** + End of file "cell.h" + ********************************************************/ + + +/******************************************************** + Begin of file "row.h" + ********************************************************/ + +#ifndef ROW_H +#define ROW_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +#include "fort.h" +#include +/* #include "properties.h" */ /* Commented by amalgamation script */ +#ifdef FT_HAVE_WCHAR +#include +#endif + +FT_INTERNAL +f_row_t *create_row(void); + +FT_INTERNAL +void destroy_row(f_row_t *row); + +FT_INTERNAL +f_row_t *copy_row(f_row_t *row); + +FT_INTERNAL +f_row_t *split_row(f_row_t *row, size_t pos); + +// Delete range [left; right] of cells (both ends included) +FT_INTERNAL +int ft_row_erase_range(f_row_t *row, size_t left, size_t right); + +FT_INTERNAL +f_row_t *create_row_from_string(const char *str); + +FT_INTERNAL +f_row_t *create_row_from_fmt_string(const struct f_string_view *fmt, va_list *va_args); + +FT_INTERNAL +size_t columns_in_row(const f_row_t *row); + +FT_INTERNAL +f_cell_t *get_cell(f_row_t *row, size_t col); + +FT_INTERNAL +const f_cell_t *get_cell_c(const f_row_t *row, size_t col); + +FT_INTERNAL +f_cell_t *get_cell_and_create_if_not_exists(f_row_t *row, size_t col); + +FT_INTERNAL +f_cell_t *create_cell_in_position(f_row_t *row, size_t col); + +FT_INTERNAL +f_status swap_row(f_row_t *cur_row, f_row_t *ins_row, size_t pos); + +FT_INTERNAL +f_status insert_row(f_row_t *cur_row, f_row_t *ins_row, size_t pos); + +FT_INTERNAL +size_t group_cell_number(const f_row_t *row, size_t master_cell_col); + +FT_INTERNAL +int get_row_cell_types(const f_row_t *row, enum f_cell_type *types, size_t types_sz); + +FT_INTERNAL +f_status row_set_cell_span(f_row_t *row, size_t cell_column, size_t hor_span); + +FT_INTERNAL +int print_row_separator(f_conv_context_t *cntx, + const size_t *col_width_arr, size_t cols, + const f_row_t *upper_row, const f_row_t *lower_row, + enum f_hor_separator_pos separatorPos, const f_separator_t *sep); + +FT_INTERNAL +int snprintf_row(const f_row_t *row, f_conv_context_t *cntx, size_t *col_width_arr, size_t col_width_arr_sz, + size_t row_height); + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_row_t *create_row_from_wstring(const wchar_t *str); +#endif + + +#endif /* ROW_H */ + +/******************************************************** + End of file "row.h" + ********************************************************/ + + +/******************************************************** + Begin of file "table.h" + ********************************************************/ + +#ifndef TABLE_H +#define TABLE_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + +struct ft_table { + f_vector_t *rows; + f_table_properties_t *properties; + f_string_buffer_t *conv_buffer; + size_t cur_row; + size_t cur_col; + f_vector_t *separators; +}; + +FT_INTERNAL +f_separator_t *create_separator(int enabled); + +FT_INTERNAL +void destroy_separator(f_separator_t *sep); + +FT_INTERNAL +f_separator_t *copy_separator(f_separator_t *sep); + +FT_INTERNAL +f_status get_table_sizes(const ft_table_t *table, size_t *rows, size_t *cols); + +FT_INTERNAL +f_row_t *get_row(ft_table_t *table, size_t row); + +FT_INTERNAL +const f_row_t *get_row_c(const ft_table_t *table, size_t row); + +FT_INTERNAL +f_row_t *get_row_and_create_if_not_exists(ft_table_t *table, size_t row); + +FT_INTERNAL +f_string_buffer_t *get_cur_str_buffer_and_create_if_not_exists(ft_table_t *table); + + +FT_INTERNAL +f_status table_rows_and_cols_geometry(const ft_table_t *table, + size_t **col_width_arr_p, size_t *col_width_arr_sz, + size_t **row_height_arr_p, size_t *row_height_arr_sz, + enum f_geometry_type geom); + +FT_INTERNAL +f_status table_geometry(const ft_table_t *table, size_t *height, size_t *width); + +/* + * Returns geometry in codepoints(characters) (include codepoints of invisible + * elements: e.g. styles tags). + */ +FT_INTERNAL +f_status table_internal_codepoints_geometry(const ft_table_t *table, size_t *height, size_t *width); + +#endif /* TABLE_H */ + +/******************************************************** + End of file "table.h" + ********************************************************/ + + +/******************************************************** + Begin of file "cell.c" + ********************************************************/ + +/* #include "cell.h" */ /* Commented by amalgamation script */ +/* #include "properties.h" */ /* Commented by amalgamation script */ +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +#include + +struct f_cell { + f_string_buffer_t *str_buffer; + enum f_cell_type cell_type; +}; + +FT_INTERNAL +f_cell_t *create_cell(void) +{ + f_cell_t *cell = (f_cell_t *)F_CALLOC(sizeof(f_cell_t), 1); + if (cell == NULL) + return NULL; + cell->str_buffer = create_string_buffer(DEFAULT_STR_BUF_SIZE, CHAR_BUF); + if (cell->str_buffer == NULL) { + F_FREE(cell); + return NULL; + } + cell->cell_type = COMMON_CELL; + return cell; +} + +FT_INTERNAL +void destroy_cell(f_cell_t *cell) +{ + if (cell == NULL) + return; + destroy_string_buffer(cell->str_buffer); + F_FREE(cell); +} + +FT_INTERNAL +f_cell_t *copy_cell(f_cell_t *cell) +{ + assert(cell); + + f_cell_t *result = create_cell(); + if (result == NULL) + return NULL; + destroy_string_buffer(result->str_buffer); + result->str_buffer = copy_string_buffer(cell->str_buffer); + if (result->str_buffer == NULL) { + destroy_cell(result); + return NULL; + } + result->cell_type = cell->cell_type; + return result; +} + +FT_INTERNAL +void set_cell_type(f_cell_t *cell, enum f_cell_type type) +{ + assert(cell); + cell->cell_type = type; +} + +FT_INTERNAL +enum f_cell_type get_cell_type(const f_cell_t *cell) +{ + assert(cell); + return cell->cell_type; +} + +FT_INTERNAL +size_t cell_vis_width(const f_cell_t *cell, const f_context_t *context) +{ + /* todo: + * At the moment min width includes paddings. Maybe it is better that min width weren't include + * paddings but be min width of the cell content without padding + */ + + assert(cell); + assert(context); + + f_table_properties_t *properties = context->table_properties; + size_t row = context->row; + size_t column = context->column; + + size_t padding_left = get_cell_property_hierarchically(properties, row, column, FT_CPROP_LEFT_PADDING); + size_t padding_right = get_cell_property_hierarchically(properties, row, column, FT_CPROP_RIGHT_PADDING); + size_t result = padding_left + padding_right; + if (cell->str_buffer && cell->str_buffer->str.data) { + result += buffer_text_visible_width(cell->str_buffer); + } + result = MAX(result, (size_t)get_cell_property_hierarchically(properties, row, column, FT_CPROP_MIN_WIDTH)); + return result; +} + +FT_INTERNAL +size_t cell_invis_codes_width(const f_cell_t *UNUSED(cell), const f_context_t *context) +{ + assert(context); + + f_table_properties_t *properties = context->table_properties; + size_t row = context->row; + size_t column = context->column; + + size_t result = 0; + char cell_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_style_tag_for_cell(properties, row, column, cell_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + result += strlen(cell_style_tag); + + char reset_cell_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_reset_style_tag_for_cell(properties, row, column, reset_cell_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + result += strlen(reset_cell_style_tag); + + char content_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_style_tag_for_content(properties, row, column, content_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + result += strlen(content_style_tag); + + char reset_content_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_reset_style_tag_for_content(properties, row, column, reset_content_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + result += strlen(reset_content_style_tag); + return result; +} + +FT_INTERNAL +size_t hint_height_cell(const f_cell_t *cell, const f_context_t *context) +{ + assert(cell); + assert(context); + f_table_properties_t *properties = context->table_properties; + size_t row = context->row; + size_t column = context->column; + + size_t padding_top = get_cell_property_hierarchically(properties, row, column, FT_CPROP_TOP_PADDING); + size_t padding_bottom = get_cell_property_hierarchically(properties, row, column, FT_CPROP_BOTTOM_PADDING); + size_t empty_string_height = get_cell_property_hierarchically(properties, row, column, FT_CPROP_EMPTY_STR_HEIGHT); + + size_t result = padding_top + padding_bottom; + if (cell->str_buffer && cell->str_buffer->str.data) { + size_t text_height = buffer_text_visible_height(cell->str_buffer); + result += text_height == 0 ? empty_string_height : text_height; + } + return result; +} + + +FT_INTERNAL +int cell_printf(f_cell_t *cell, size_t row, f_conv_context_t *cntx, size_t vis_width) +{ + const f_context_t *context = cntx->cntx; + size_t buf_len = vis_width; + + if (cell == NULL || (vis_width < cell_vis_width(cell, context))) { + return -1; + } + + f_table_properties_t *properties = context->table_properties; + unsigned int padding_top = get_cell_property_hierarchically(properties, context->row, context->column, FT_CPROP_TOP_PADDING); + unsigned int padding_left = get_cell_property_hierarchically(properties, context->row, context->column, FT_CPROP_LEFT_PADDING); + unsigned int padding_right = get_cell_property_hierarchically(properties, context->row, context->column, FT_CPROP_RIGHT_PADDING); + + size_t written = 0; + size_t invisible_written = 0; + int tmp = 0; + + /* todo: Dirty hack with changing buf_len! need refactoring. */ + /* Also maybe it is better to move all struff with colors to buffers? */ + char cell_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_style_tag_for_cell(properties, context->row, context->column, cell_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + buf_len += strlen(cell_style_tag); + + char reset_cell_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_reset_style_tag_for_cell(properties, context->row, context->column, reset_cell_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + buf_len += strlen(reset_cell_style_tag); + + char content_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_style_tag_for_content(properties, context->row, context->column, content_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + buf_len += strlen(content_style_tag); + + char reset_content_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_reset_style_tag_for_content(properties, context->row, context->column, reset_content_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + buf_len += strlen(reset_content_style_tag); + + /* CELL_STYLE_T LEFT_PADDING CONTENT_STYLE_T CONTENT RESET_CONTENT_STYLE_T RIGHT_PADDING RESET_CELL_STYLE_T + * | | | | | | | | + * L1 R1 + * L2 R2 + * L3 R3 + */ + + size_t L2 = padding_left; + + size_t R2 = padding_right; + size_t R3 = strlen(reset_cell_style_tag); + +#define TOTAL_WRITTEN (written + invisible_written) +#define RIGHT (padding_right + extra_right) + +#define WRITE_CELL_STYLE_TAG CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(print_n_strings(cntx, 1, cell_style_tag)) +#define WRITE_RESET_CELL_STYLE_TAG CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(print_n_strings(cntx, 1, reset_cell_style_tag)) +#define WRITE_CONTENT_STYLE_TAG CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(print_n_strings(cntx, 1, content_style_tag)) +#define WRITE_RESET_CONTENT_STYLE_TAG CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(print_n_strings(cntx, 1, reset_content_style_tag)) + + if (row >= hint_height_cell(cell, context) + || row < padding_top + || row >= (padding_top + buffer_text_visible_height(cell->str_buffer))) { + WRITE_CELL_STYLE_TAG; + WRITE_CONTENT_STYLE_TAG; + WRITE_RESET_CONTENT_STYLE_TAG; + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, buf_len - TOTAL_WRITTEN - R3, FT_SPACE)); + WRITE_RESET_CELL_STYLE_TAG; + + return (int)TOTAL_WRITTEN; + } + + WRITE_CELL_STYLE_TAG; + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, L2, FT_SPACE)); + if (cell->str_buffer) { + CHCK_RSLT_ADD_TO_WRITTEN(buffer_printf(cell->str_buffer, row - padding_top, cntx, vis_width - L2 - R2, content_style_tag, reset_content_style_tag)); + } else { + WRITE_CONTENT_STYLE_TAG; + WRITE_RESET_CONTENT_STYLE_TAG; + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, vis_width - L2 - R2, FT_SPACE)); + } + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, R2, FT_SPACE)); + WRITE_RESET_CELL_STYLE_TAG; + + return (int)TOTAL_WRITTEN; + +clear: + return -1; +#undef WRITE_CELL_STYLE_TAG +#undef WRITE_RESET_CELL_STYLE_TAG +#undef WRITE_CONTENT_STYLE_TAG +#undef WRITE_RESET_CONTENT_STYLE_TAG +#undef TOTAL_WRITTEN +#undef RIGHT +} + +FT_INTERNAL +f_status fill_cell_from_string(f_cell_t *cell, const char *str) +{ + assert(str); + assert(cell); + + return fill_buffer_from_string(cell->str_buffer, str); +} + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_status fill_cell_from_wstring(f_cell_t *cell, const wchar_t *str) +{ + assert(str); + assert(cell); + + return fill_buffer_from_wstring(cell->str_buffer, str); +} +#endif + +#ifdef FT_HAVE_UTF8 +static +f_status fill_cell_from_u8string(f_cell_t *cell, const void *str) +{ + assert(str); + assert(cell); + return fill_buffer_from_u8string(cell->str_buffer, str); +} +#endif /* FT_HAVE_UTF8 */ + +FT_INTERNAL +f_string_buffer_t *cell_get_string_buffer(f_cell_t *cell) +{ + assert(cell); + assert(cell->str_buffer); + return cell->str_buffer; +} + +FT_INTERNAL +f_status fill_cell_from_buffer(f_cell_t *cell, const f_string_buffer_t *buffer) +{ + assert(cell); + assert(buffer); + switch (buffer->type) { + case CHAR_BUF: + return fill_cell_from_string(cell, buffer->str.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return fill_cell_from_wstring(cell, buffer->str.wstr); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return fill_cell_from_u8string(cell, buffer->str.u8str); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + return FT_GEN_ERROR; + } + +} + +/******************************************************** + End of file "cell.c" + ********************************************************/ + + +/******************************************************** + Begin of file "fort_impl.c" + ********************************************************/ + +/* +libfort + +MIT License + +Copyright (c) 2017 - 2018 Seleznev Anton + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include +#include +#include +#include "fort.h" +#include +#include +#include + +/* #include "vector.h" */ /* Commented by amalgamation script */ +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +/* #include "table.h" */ /* Commented by amalgamation script */ +/* #include "row.h" */ /* Commented by amalgamation script */ +/* #include "properties.h" */ /* Commented by amalgamation script */ + + +ft_table_t *ft_create_table(void) +{ + ft_table_t *result = (ft_table_t *)F_CALLOC(1, sizeof(ft_table_t)); + if (result == NULL) + return NULL; + + result->rows = create_vector(sizeof(f_row_t *), DEFAULT_VECTOR_CAPACITY); + if (result->rows == NULL) { + F_FREE(result); + return NULL; + } + result->separators = create_vector(sizeof(f_separator_t *), DEFAULT_VECTOR_CAPACITY); + if (result->separators == NULL) { + destroy_vector(result->rows); + F_FREE(result); + return NULL; + } + + result->properties = create_table_properties(); + if (result->properties == NULL) { + destroy_vector(result->separators); + destroy_vector(result->rows); + F_FREE(result); + return NULL; + } + result->conv_buffer = NULL; + result->cur_row = 0; + result->cur_col = 0; + return result; +} + + +void ft_destroy_table(ft_table_t *table) +{ + size_t i = 0; + + if (table == NULL) + return; + + if (table->rows) { + size_t row_n = vector_size(table->rows); + for (i = 0; i < row_n; ++i) { + destroy_row(VECTOR_AT(table->rows, i, f_row_t *)); + } + destroy_vector(table->rows); + } + if (table->separators) { + size_t row_n = vector_size(table->separators); + for (i = 0; i < row_n; ++i) { + destroy_separator(VECTOR_AT(table->separators, i, f_separator_t *)); + } + destroy_vector(table->separators); + } + destroy_table_properties(table->properties); + destroy_string_buffer(table->conv_buffer); + F_FREE(table); +} + +ft_table_t *ft_copy_table(ft_table_t *table) +{ + if (table == NULL) + return NULL; + + ft_table_t *result = ft_create_table(); + if (result == NULL) + return NULL; + + size_t i = 0; + size_t rows_n = vector_size(table->rows); + for (i = 0; i < rows_n; ++i) { + f_row_t *row = VECTOR_AT(table->rows, i, f_row_t *); + f_row_t *new_row = copy_row(row); + if (new_row == NULL) { + ft_destroy_table(result); + return NULL; + } + vector_push(result->rows, &new_row); + } + + size_t sep_sz = vector_size(table->separators); + for (i = 0; i < sep_sz; ++i) { + f_separator_t *sep = VECTOR_AT(table->separators, i, f_separator_t *); + f_separator_t *new_sep = copy_separator(sep); + if (new_sep == NULL) { + ft_destroy_table(result); + return NULL; + } + vector_push(result->separators, &new_sep); + } + + /* note: by default new table has allocated default properties, so we + * have to destroy them first. + */ + if (result->properties) { + destroy_table_properties(result->properties); + } + result->properties = copy_table_properties(table->properties); + if (result->properties == NULL) { + ft_destroy_table(result); + return NULL; + } + + /* todo: copy conv_buffer ?? */ + + result->cur_row = table->cur_row; + result->cur_col = table->cur_col; + return result; +} + +static int split_cur_row(ft_table_t *table, f_row_t **tail_of_cur_row) +{ + if (table->cur_row >= vector_size(table->rows)) { + tail_of_cur_row = NULL; + return 0; + } + + f_row_t *row = VECTOR_AT(table->rows, table->cur_row, f_row_t *); + if (table->cur_col >= columns_in_row(row)) { + tail_of_cur_row = NULL; + return 0; + } + + f_row_t *tail = split_row(row, table->cur_col); + if (!tail) { + tail_of_cur_row = NULL; + return FT_GEN_ERROR; + } + + *tail_of_cur_row = tail; + return 0; +} + +int ft_ln(ft_table_t *table) +{ + assert(table); + fort_entire_table_properties_t *table_props = &table->properties->entire_table_properties; + switch (table_props->add_strategy) { + case FT_STRATEGY_INSERT: { + f_row_t *new_row = NULL; + if (FT_IS_ERROR(split_cur_row(table, &new_row))) { + return FT_GEN_ERROR; + } + if (new_row) { + if (FT_IS_ERROR(vector_insert(table->rows, &new_row, table->cur_row + 1))) { + destroy_row(new_row); + return FT_GEN_ERROR; + } + } + break; + } + case FT_STRATEGY_REPLACE: + // do nothing + break; + default: + assert(0 && "Unexpected situation inside libfort"); + break; + } + table->cur_col = 0; + table->cur_row++; + return FT_SUCCESS; +} + +size_t ft_cur_row(const ft_table_t *table) +{ + assert(table); + return table->cur_row; +} + +size_t ft_cur_col(const ft_table_t *table) +{ + assert(table); + return table->cur_col; +} + +void ft_set_cur_cell(ft_table_t *table, size_t row, size_t col) +{ + assert(table); + table->cur_row = row; + table->cur_col = col; +} + +int ft_is_empty(const ft_table_t *table) +{ + assert(table); + return ft_row_count(table) == 0; +} + +size_t ft_row_count(const ft_table_t *table) +{ + assert(table && table->rows); + return vector_size(table->rows); +} + +size_t ft_col_count(const ft_table_t *table) +{ + assert(table && table->rows); + size_t cols_n = 0; + size_t rows_n = vector_size(table->rows); + for (size_t i = 0; i < rows_n; ++i) { + f_row_t *row = VECTOR_AT(table->rows, i, f_row_t *); + size_t ncols = columns_in_row(row); + cols_n = MAX(cols_n, ncols); + } + return cols_n; +} + +int ft_erase_range(ft_table_t *table, + size_t top_left_row, size_t top_left_col, + size_t bottom_right_row, size_t bottom_right_col) +{ + assert(table && table->rows); + int status = FT_SUCCESS; + + size_t rows_n = vector_size(table->rows); + + if (top_left_row == FT_CUR_ROW) + top_left_row = table->cur_row; + if (bottom_right_row == FT_CUR_ROW) + bottom_right_row = table->cur_row; + + if (top_left_col == FT_CUR_COLUMN) + top_left_col = table->cur_row; + if (bottom_right_col == FT_CUR_COLUMN) + bottom_right_col = table->cur_row; + + if (top_left_row > bottom_right_row || top_left_col > bottom_right_col) + return FT_EINVAL; + + f_row_t *row = NULL; + size_t i = top_left_row; + while (i < rows_n && i <= bottom_right_row) { + row = VECTOR_AT(table->rows, i, f_row_t *); + status = ft_row_erase_range(row, top_left_col, bottom_right_col); + if (FT_IS_ERROR(status)) + return status; + ++i; + } + + f_separator_t *separator = NULL; + + size_t n_iterations = MIN(rows_n - 1, bottom_right_row) - top_left_row + 1; + size_t j = 0; + i = top_left_row; + for (j = 0; j < n_iterations; ++j) { + row = VECTOR_AT(table->rows, i, f_row_t *); + if (columns_in_row(row)) { + ++i; + } else { + destroy_row(row); + status = vector_erase(table->rows, i); + if (FT_IS_ERROR(status)) + return status; + if (i < vector_size(table->separators)) { + separator = VECTOR_AT(table->separators, i, f_separator_t *); + destroy_separator(separator); + vector_erase(table->separators, i); + } + } + } + + return FT_SUCCESS; +} + + +static int ft_row_printf_impl_(ft_table_t *table, size_t row, const struct f_string_view *fmt, va_list *va) +{ + size_t i = 0; + size_t new_cols = 0; + + if (table == NULL) + return -1; + + f_row_t *new_row = create_row_from_fmt_string(fmt, va); + + if (new_row == NULL) { + return -1; + } + + f_row_t **cur_row_p = NULL; + size_t sz = vector_size(table->rows); + if (row >= sz) { + size_t push_n = row - sz + 1; + for (i = 0; i < push_n; ++i) { + f_row_t *padding_row = create_row(); + if (padding_row == NULL) + goto clear; + + if (FT_IS_ERROR(vector_push(table->rows, &padding_row))) { + destroy_row(padding_row); + goto clear; + } + } + } + /* todo: clearing pushed items in case of error ?? */ + + new_cols = columns_in_row(new_row); + cur_row_p = &VECTOR_AT(table->rows, row, f_row_t *); + + switch (table->properties->entire_table_properties.add_strategy) { + case FT_STRATEGY_INSERT: { + if (FT_IS_ERROR(insert_row(*cur_row_p, new_row, table->cur_col))) + goto clear; + break; + } + case FT_STRATEGY_REPLACE: { + if (FT_IS_ERROR(swap_row(*cur_row_p, new_row, table->cur_col))) + goto clear; + break; + } + default: + assert(0 && "Unexpected situation inside libfort"); + break; + } + + table->cur_col += new_cols; + destroy_row(new_row); + return (int)new_cols; + +clear: + destroy_row(new_row); + return -1; +} + +#if defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) +#define FT_PRINTF ft_printf +#define FT_PRINTF_LN ft_printf_ln +#else +#define FT_PRINTF ft_printf_impl +#define FT_PRINTF_LN ft_printf_ln_impl +#endif + + + +int FT_PRINTF(ft_table_t *table, const char *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = CHAR_BUF; + fmt_str.u.cstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + va_end(va); + return result; +} + +int FT_PRINTF_LN(ft_table_t *table, const char *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = CHAR_BUF; + fmt_str.u.cstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + if (result >= 0) { + ft_ln(table); + } + va_end(va); + return result; +} + +#undef FT_PRINTF +#undef FT_PRINTF_LN + +#ifdef FT_HAVE_WCHAR +int ft_wprintf(ft_table_t *table, const wchar_t *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = W_CHAR_BUF; + fmt_str.u.wstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + va_end(va); + return result; +} + +int ft_wprintf_ln(ft_table_t *table, const wchar_t *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = W_CHAR_BUF; + fmt_str.u.wstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + if (result >= 0) { + ft_ln(table); + } + va_end(va); + return result; +} + +#endif + +void ft_set_default_printf_field_separator(char separator) +{ + g_col_separator = separator; +} + +static int ft_write_impl_(ft_table_t *table, const f_string_view_t *cell_content) +{ + assert(table); + f_string_buffer_t *buf = get_cur_str_buffer_and_create_if_not_exists(table); + if (buf == NULL) + return FT_GEN_ERROR; + + int status = FT_SUCCESS; + switch (cell_content->type) { + case CHAR_BUF: + status = fill_buffer_from_string(buf, cell_content->u.cstr); + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + status = fill_buffer_from_wstring(buf, cell_content->u.wstr); + break; +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + status = fill_buffer_from_u8string(buf, cell_content->u.u8str); + break; +#endif + default: + status = FT_GEN_ERROR; + } + if (FT_IS_SUCCESS(status)) { + table->cur_col++; + } + return status; +} + +static int ft_write_impl(ft_table_t *table, const char *cell_content) +{ + f_string_view_t content; + content.type = CHAR_BUF; + content.u.cstr = cell_content; + return ft_write_impl_(table, &content); +} + +#ifdef FT_HAVE_UTF8 +static int ft_u8write_impl(ft_table_t *table, const void *cell_content) +{ + f_string_view_t content; + content.type = UTF8_BUF; + content.u.u8str = cell_content; + return ft_write_impl_(table, &content); +} +#endif /* FT_HAVE_UTF8 */ + +#ifdef FT_HAVE_WCHAR +static int ft_wwrite_impl(ft_table_t *table, const wchar_t *cell_content) +{ + f_string_view_t content; + content.type = W_CHAR_BUF; + content.u.wstr = cell_content; + return ft_write_impl_(table, &content); +} +#endif + + +int ft_nwrite(ft_table_t *table, size_t count, const char *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_write_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --count; + for (i = 0; i < count; ++i) { + const char *cell = va_arg(va, const char *); + status = ft_write_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + return status; +} + +int ft_nwrite_ln(ft_table_t *table, size_t count, const char *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_write_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --count; + for (i = 0; i < count; ++i) { + const char *cell = va_arg(va, const char *); + status = ft_write_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + + ft_ln(table); + return status; +} + + + + +#ifdef FT_HAVE_WCHAR + +int ft_nwwrite(ft_table_t *table, size_t n, const wchar_t *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_wwrite_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --n; + for (i = 0; i < n; ++i) { + const wchar_t *cell = va_arg(va, const wchar_t *); + status = ft_wwrite_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + return status; +} + +int ft_nwwrite_ln(ft_table_t *table, size_t n, const wchar_t *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_wwrite_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --n; + for (i = 0; i < n; ++i) { + const wchar_t *cell = va_arg(va, const wchar_t *); + status = ft_wwrite_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + + ft_ln(table); + return status; +} +#endif + + +int ft_row_write(ft_table_t *table, size_t cols, const char *cells[]) +{ + size_t i = 0; + assert(table); + for (i = 0; i < cols; ++i) { + int status = ft_write_impl(table, cells[i]); + if (FT_IS_ERROR(status)) { + /* todo: maybe current pos in case of error should be equal to the one before function call? */ + return status; + } + } + return FT_SUCCESS; +} + +int ft_row_write_ln(ft_table_t *table, size_t cols, const char *cells[]) +{ + assert(table); + int status = ft_row_write(table, cols, cells); + if (FT_IS_SUCCESS(status)) { + ft_ln(table); + } + return status; +} + +#ifdef FT_HAVE_WCHAR +int ft_row_wwrite(ft_table_t *table, size_t cols, const wchar_t *cells[]) +{ + size_t i = 0; + assert(table); + for (i = 0; i < cols; ++i) { + int status = ft_wwrite_impl(table, cells[i]); + if (FT_IS_ERROR(status)) { + /* todo: maybe current pos in case of error should be equal + * to the one before function call? + */ + return status; + } + } + return FT_SUCCESS; +} + +int ft_row_wwrite_ln(ft_table_t *table, size_t cols, const wchar_t *cells[]) +{ + assert(table); + int status = ft_row_wwrite(table, cols, cells); + if (FT_IS_SUCCESS(status)) { + ft_ln(table); + } + return status; +} +#endif + + + +int ft_table_write(ft_table_t *table, size_t rows, size_t cols, const char *table_cells[]) +{ + size_t i = 0; + assert(table); + for (i = 0; i < rows; ++i) { + int status = ft_row_write(table, cols, (const char **)&table_cells[i * cols]); + if (FT_IS_ERROR(status)) { + /* todo: maybe current pos in case of error should be equal + * to the one before function call? + */ + return status; + } + if (i != rows - 1) + ft_ln(table); + } + return FT_SUCCESS; +} + +int ft_table_write_ln(ft_table_t *table, size_t rows, size_t cols, const char *table_cells[]) +{ + assert(table); + int status = ft_table_write(table, rows, cols, table_cells); + if (FT_IS_SUCCESS(status)) { + ft_ln(table); + } + return status; +} + + +#ifdef FT_HAVE_WCHAR +int ft_table_wwrite(ft_table_t *table, size_t rows, size_t cols, const wchar_t *table_cells[]) +{ + size_t i = 0; + assert(table); + for (i = 0; i < rows; ++i) { + int status = ft_row_wwrite(table, cols, (const wchar_t **)&table_cells[i * cols]); + if (FT_IS_ERROR(status)) { + /* todo: maybe current pos in case of error should be equal + * to the one before function call? + */ + return status; + } + if (i != rows - 1) + ft_ln(table); + } + return FT_SUCCESS; +} + +int ft_table_wwrite_ln(ft_table_t *table, size_t rows, size_t cols, const wchar_t *table_cells[]) +{ + assert(table); + int status = ft_table_wwrite(table, rows, cols, table_cells); + if (FT_IS_SUCCESS(status)) { + ft_ln(table); + } + return status; +} +#endif + +static +const char *empty_str_arr[] = {"", (const char *)L"", ""}; + +static +const void *ft_to_string_impl(const ft_table_t *table, enum f_string_type b_type) +{ + assert(table); + + const char *result = NULL; + + /* Determine size of table string representation */ + size_t cod_height = 0; + size_t cod_width = 0; + int status = table_internal_codepoints_geometry(table, &cod_height, &cod_width); + if (FT_IS_ERROR(status)) { + return NULL; + } + size_t n_codepoints = cod_height * cod_width + 1; + + /* Allocate string buffer for string representation */ + if (table->conv_buffer == NULL) { + ((ft_table_t *)table)->conv_buffer = create_string_buffer(n_codepoints, b_type); + if (table->conv_buffer == NULL) + return NULL; + } + while (string_buffer_cod_width_capacity(table->conv_buffer) < n_codepoints) { + if (FT_IS_ERROR(realloc_string_buffer_without_copy(table->conv_buffer))) { + return NULL; + } + } + if (!buffer_check_align(table->conv_buffer)) + return NULL; + char *buffer = (char *)buffer_get_data(table->conv_buffer); + + size_t cols = 0; + size_t rows = 0; + size_t *col_vis_width_arr = NULL; + size_t *row_vis_height_arr = NULL; + status = table_rows_and_cols_geometry(table, &col_vis_width_arr, &cols, &row_vis_height_arr, &rows, VISIBLE_GEOMETRY); + if (FT_IS_ERROR(status)) + return NULL; + + if (rows == 0) { + F_FREE(col_vis_width_arr); + F_FREE(row_vis_height_arr); + return empty_str_arr[b_type]; + } + + int tmp = 0; + size_t i = 0; + f_context_t context; + context.table_properties = (table->properties ? table->properties : &g_table_properties); + f_row_t *prev_row = NULL; + f_row_t *cur_row = NULL; + f_separator_t *cur_sep = NULL; + size_t sep_size = vector_size(table->separators); + + f_conv_context_t cntx; + cntx.u.buf = buffer; + cntx.raw_avail = string_buffer_raw_capacity(table->conv_buffer); + cntx.cntx = &context; + cntx.b_type = b_type; + + /* Print top margin */ + for (i = 0; i < context.table_properties->entire_table_properties.top_margin; ++i) { + FT_CHECK(print_n_strings(&cntx, cod_width - 1/* minus new_line*/, FT_SPACE)); + FT_CHECK(print_n_strings(&cntx, 1, FT_NEWLINE)); + } + + for (i = 0; i < rows; ++i) { + cur_sep = (i < sep_size) ? VECTOR_AT(table->separators, i, f_separator_t *) : NULL; + cur_row = VECTOR_AT(table->rows, i, f_row_t *); + enum f_hor_separator_pos separatorPos = (i == 0) ? TOP_SEPARATOR : INSIDE_SEPARATOR; + context.row = i; + FT_CHECK(print_row_separator(&cntx, col_vis_width_arr, cols, prev_row, cur_row, separatorPos, cur_sep)); + FT_CHECK(snprintf_row(cur_row, &cntx, col_vis_width_arr, cols, row_vis_height_arr[i])); + prev_row = cur_row; + } + cur_row = NULL; + cur_sep = (i < sep_size) ? VECTOR_AT(table->separators, i, f_separator_t *) : NULL; + context.row = i; + FT_CHECK(print_row_separator(&cntx, col_vis_width_arr, cols, prev_row, cur_row, BOTTOM_SEPARATOR, cur_sep)); + + /* Print bottom margin */ + for (i = 0; i < context.table_properties->entire_table_properties.bottom_margin; ++i) { + FT_CHECK(print_n_strings(&cntx, cod_width - 1/* minus new_line*/, FT_SPACE)); + FT_CHECK(print_n_strings(&cntx, 1, FT_NEWLINE)); + } + + result = buffer; + +clear: + F_FREE(col_vis_width_arr); + F_FREE(row_vis_height_arr); + return result; +} + +const char *ft_to_string(const ft_table_t *table) +{ + return (const char *)ft_to_string_impl(table, CHAR_BUF); +} + +#ifdef FT_HAVE_WCHAR +const wchar_t *ft_to_wstring(const ft_table_t *table) +{ + return (const wchar_t *)ft_to_string_impl(table, W_CHAR_BUF); +} +#endif + + +int ft_add_separator(ft_table_t *table) +{ + assert(table); + assert(table->separators); + + while (vector_size(table->separators) <= table->cur_row) { + f_separator_t *sep_p = create_separator(F_FALSE); + if (sep_p == NULL) + return FT_MEMORY_ERROR; + int status = vector_push(table->separators, &sep_p); + if (FT_IS_ERROR(status)) + return status; + } + + f_separator_t **sep_p = &VECTOR_AT(table->separators, table->cur_row, f_separator_t *); + if (*sep_p == NULL) + *sep_p = create_separator(F_TRUE); + else + (*sep_p)->enabled = F_TRUE; + + if (*sep_p == NULL) + return FT_GEN_ERROR; + return FT_SUCCESS; +} + +static const struct fort_border_style *built_in_styles[] = { + &FORT_BASIC_STYLE, + &FORT_BASIC2_STYLE, + &FORT_SIMPLE_STYLE, + &FORT_PLAIN_STYLE, + &FORT_DOT_STYLE, + &FORT_EMPTY_STYLE, + &FORT_EMPTY2_STYLE, + &FORT_SOLID_STYLE, + &FORT_SOLID_ROUND_STYLE, + &FORT_NICE_STYLE, + &FORT_DOUBLE_STYLE, + &FORT_DOUBLE2_STYLE, + &FORT_BOLD_STYLE, + &FORT_BOLD2_STYLE, + &FORT_FRAME_STYLE, +}; +#define BUILT_IN_STYLES_SZ (sizeof(built_in_styles) / sizeof(built_in_styles[0])) + +/* todo: remove this stupid and dangerous code */ +static const struct ft_border_style built_in_external_styles[BUILT_IN_STYLES_SZ] = { + { + {"", "", "", "", "", ""}, + {"", "", "", "", "", ""}, + "" + } +}; + +const struct ft_border_style *const FT_BASIC_STYLE = &built_in_external_styles[0]; +const struct ft_border_style *const FT_BASIC2_STYLE = &built_in_external_styles[1]; +const struct ft_border_style *const FT_SIMPLE_STYLE = &built_in_external_styles[2]; +const struct ft_border_style *const FT_PLAIN_STYLE = &built_in_external_styles[3]; +const struct ft_border_style *const FT_DOT_STYLE = &built_in_external_styles[4]; +const struct ft_border_style *const FT_EMPTY_STYLE = &built_in_external_styles[5]; +const struct ft_border_style *const FT_EMPTY2_STYLE = &built_in_external_styles[6]; +const struct ft_border_style *const FT_SOLID_STYLE = &built_in_external_styles[7]; +const struct ft_border_style *const FT_SOLID_ROUND_STYLE = &built_in_external_styles[8]; +const struct ft_border_style *const FT_NICE_STYLE = &built_in_external_styles[9]; +const struct ft_border_style *const FT_DOUBLE_STYLE = &built_in_external_styles[10]; +const struct ft_border_style *const FT_DOUBLE2_STYLE = &built_in_external_styles[11]; +const struct ft_border_style *const FT_BOLD_STYLE = &built_in_external_styles[12]; +const struct ft_border_style *const FT_BOLD2_STYLE = &built_in_external_styles[13]; +const struct ft_border_style *const FT_FRAME_STYLE = &built_in_external_styles[14]; + +static void set_border_props_for_props(f_table_properties_t *properties, const struct ft_border_style *style) +{ + if (style >= built_in_external_styles && style < (built_in_external_styles + BUILT_IN_STYLES_SZ)) { + size_t pos = (size_t)(style - built_in_external_styles); + memcpy(&(properties->border_style), built_in_styles[pos], sizeof(struct fort_border_style)); + return; + } + + const struct ft_border_chars *border_chs = &(style->border_chs); + const struct ft_border_chars *header_border_chs = &(style->header_border_chs); + +#define BOR_CHARS properties->border_style.border_chars +#define H_BOR_CHARS properties->border_style.header_border_chars +#define SEP_CHARS properties->border_style.separator_chars + + BOR_CHARS[TT_bip] = border_chs->top_border_ch; + BOR_CHARS[IH_bip] = border_chs->separator_ch; + BOR_CHARS[BB_bip] = border_chs->bottom_border_ch; + BOR_CHARS[LL_bip] = BOR_CHARS[IV_bip] = BOR_CHARS[RR_bip] = border_chs->side_border_ch; + + BOR_CHARS[TL_bip] = BOR_CHARS[TV_bip] = BOR_CHARS[TR_bip] = border_chs->out_intersect_ch; + BOR_CHARS[LH_bip] = BOR_CHARS[RH_bip] = border_chs->out_intersect_ch; + BOR_CHARS[BL_bip] = BOR_CHARS[BV_bip] = BOR_CHARS[BR_bip] = border_chs->out_intersect_ch; + BOR_CHARS[II_bip] = border_chs->in_intersect_ch; + + BOR_CHARS[LI_bip] = BOR_CHARS[TI_bip] = BOR_CHARS[RI_bip] = BOR_CHARS[BI_bip] = border_chs->in_intersect_ch; + + if (strlen(border_chs->separator_ch) == 0 && strlen(border_chs->in_intersect_ch) == 0) { + BOR_CHARS[LH_bip] = BOR_CHARS[RH_bip] = "\0"; + } + + H_BOR_CHARS[TT_bip] = header_border_chs->top_border_ch; + H_BOR_CHARS[IH_bip] = header_border_chs->separator_ch; + H_BOR_CHARS[BB_bip] = header_border_chs->bottom_border_ch; + H_BOR_CHARS[LL_bip] = H_BOR_CHARS[IV_bip] = H_BOR_CHARS[RR_bip] = header_border_chs->side_border_ch; + + H_BOR_CHARS[TL_bip] = H_BOR_CHARS[TV_bip] = H_BOR_CHARS[TR_bip] = header_border_chs->out_intersect_ch; + H_BOR_CHARS[LH_bip] = H_BOR_CHARS[RH_bip] = header_border_chs->out_intersect_ch; + H_BOR_CHARS[BL_bip] = H_BOR_CHARS[BV_bip] = H_BOR_CHARS[BR_bip] = header_border_chs->out_intersect_ch; + H_BOR_CHARS[II_bip] = header_border_chs->in_intersect_ch; + + H_BOR_CHARS[LI_bip] = H_BOR_CHARS[TI_bip] = H_BOR_CHARS[RI_bip] = H_BOR_CHARS[BI_bip] = header_border_chs->in_intersect_ch; + + if (strlen(header_border_chs->separator_ch) == 0 && strlen(header_border_chs->in_intersect_ch) == 0) { + BOR_CHARS[LH_bip] = BOR_CHARS[RH_bip] = "\0"; + } + + SEP_CHARS[LH_sip] = SEP_CHARS[RH_sip] = SEP_CHARS[II_sip] = header_border_chs->out_intersect_ch; + SEP_CHARS[TI_sip] = SEP_CHARS[BI_sip] = header_border_chs->out_intersect_ch; + SEP_CHARS[IH_sip] = style->hor_separator_char; + + +#undef BOR_CHARS +#undef H_BOR_CHARS +#undef SEP_CHARS +} + + +int ft_set_default_border_style(const struct ft_border_style *style) +{ + set_border_props_for_props(&g_table_properties, style); + return FT_SUCCESS; +} + +int ft_set_border_style(ft_table_t *table, const struct ft_border_style *style) +{ + assert(table); + if (table->properties == NULL) { + table->properties = create_table_properties(); + if (table->properties == NULL) + return FT_MEMORY_ERROR; + } + set_border_props_for_props(table->properties, style); + return FT_SUCCESS; +} + + + +int ft_set_cell_prop(ft_table_t *table, size_t row, size_t col, uint32_t property, int value) +{ + assert(table); + + if (table->properties == NULL) { + table->properties = create_table_properties(); + if (table->properties == NULL) + return FT_MEMORY_ERROR; + } + if (table->properties->cell_properties == NULL) { + table->properties->cell_properties = create_cell_prop_container(); + if (table->properties->cell_properties == NULL) { + return FT_GEN_ERROR; + } + } + + if (row == FT_CUR_ROW) + row = table->cur_row; + if (col == FT_CUR_COLUMN) + col = table->cur_col; + + return set_cell_property(table->properties->cell_properties, row, col, property, value); +} + +int ft_set_default_cell_prop(uint32_t property, int value) +{ + return set_default_cell_property(property, value); +} + + +int ft_set_default_tbl_prop(uint32_t property, int value) +{ + return set_default_entire_table_property(property, value); +} + +int ft_set_tbl_prop(ft_table_t *table, uint32_t property, int value) +{ + assert(table); + + if (table->properties == NULL) { + table->properties = create_table_properties(); + if (table->properties == NULL) + return FT_MEMORY_ERROR; + } + return set_entire_table_property(table->properties, property, value); +} + +void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr)) +{ + set_memory_funcs(f_malloc, f_free); +} + +const char *ft_strerror(int error_code) +{ + switch (error_code) { + case FT_MEMORY_ERROR: + return "Out of memory"; + case FT_GEN_ERROR: + return "General error"; + case FT_EINVAL: + return "Invalid argument"; + case FT_INTERN_ERROR: + return "Internal libfort error"; + default: + if (error_code < 0) + return "Unknown error code"; + else + return "Success"; + } +} + +int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span) +{ + assert(table); + if (hor_span < 2) + return FT_EINVAL; + + if (row == FT_CUR_ROW) + row = table->cur_row; + if (row == FT_CUR_COLUMN) + col = table->cur_col; + + f_row_t *row_p = get_row_and_create_if_not_exists(table, row); + if (row_p == NULL) + return FT_GEN_ERROR; + + return row_set_cell_span(row_p, col, hor_span); +} + +#ifdef FT_HAVE_UTF8 + +int ft_u8nwrite(ft_table_t *table, size_t n, const void *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_u8write_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --n; + for (i = 0; i < n; ++i) { + const void *cell = va_arg(va, const void *); + status = ft_u8write_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + + return status; +} + +int ft_u8nwrite_ln(ft_table_t *table, size_t n, const void *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_u8write_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --n; + for (i = 0; i < n; ++i) { + const void *cell = va_arg(va, const void *); + status = ft_u8write_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + + ft_ln(table); + return status; +} + +FT_PRINTF_ATTRIBUTE_FORMAT(2, 3) +int ft_u8printf(ft_table_t *table, const char *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = UTF8_BUF; + fmt_str.u.cstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + va_end(va); + return result; +} + +FT_PRINTF_ATTRIBUTE_FORMAT(2, 3) +int ft_u8printf_ln(ft_table_t *table, const char *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = UTF8_BUF; + fmt_str.u.cstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + if (result >= 0) { + ft_ln(table); + } + va_end(va); + return result; +} + +const void *ft_to_u8string(const ft_table_t *table) +{ + return (const void *)ft_to_string_impl(table, UTF8_BUF); +} + +void ft_set_u8strwid_func(int (*u8strwid)(const void *beg, const void *end, size_t *width)) +{ + buffer_set_u8strwid_func(u8strwid); +} + +#endif /* FT_HAVE_UTF8 */ + +/******************************************************** + End of file "fort_impl.c" + ********************************************************/ + + +/******************************************************** + Begin of file "fort_utils.c" + ********************************************************/ + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +#ifdef FT_HAVE_WCHAR +#include +#endif +#if defined(FT_HAVE_UTF8) +/* #include "utf8.h" */ /* Commented by amalgamation script */ +#endif +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ + + +char g_col_separator = FORT_DEFAULT_COL_SEPARATOR; + +/***************************************************************************** + * LIBFORT helpers + *****************************************************************************/ + +#if defined(FT_GCC_COMPILER) || defined(FT_CLANG_COMPILER) +void *(*fort_malloc)(size_t size) = &malloc; +void (*fort_free)(void *ptr) = &free; +void *(*fort_calloc)(size_t nmemb, size_t size) = &calloc; +void *(*fort_realloc)(void *ptr, size_t size) = &realloc; +#else +static void *local_malloc(size_t size) +{ + return malloc(size); +} + +static void local_free(void *ptr) +{ + free(ptr); +} + +static void *local_calloc(size_t nmemb, size_t size) +{ + return calloc(nmemb, size); +} + +static void *local_realloc(void *ptr, size_t size) +{ + return realloc(ptr, size); +} + +void *(*fort_malloc)(size_t size) = &local_malloc; +void (*fort_free)(void *ptr) = &local_free; +void *(*fort_calloc)(size_t nmemb, size_t size) = &local_calloc; +void *(*fort_realloc)(void *ptr, size_t size) = &local_realloc; +#endif + +static void *custom_fort_calloc(size_t nmemb, size_t size) +{ + size_t total_size = nmemb * size; + void *result = F_MALLOC(total_size); + if (result != NULL) + memset(result, 0, total_size); + return result; +} + +static void *custom_fort_realloc(void *ptr, size_t size) +{ + if (ptr == NULL) + return F_MALLOC(size); + if (size == 0) { + F_FREE(ptr); + return NULL; + } + + void *new_chunk = F_MALLOC(size); + if (new_chunk == NULL) + return NULL; + + /* + * In theory we should copy MIN(size, size allocated for ptr) bytes, + * but this is rather dummy implementation so we don't care about it + */ + memcpy(new_chunk, ptr, size); + F_FREE(ptr); + return new_chunk; +} + + +FT_INTERNAL +void set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr)) +{ + assert((f_malloc == NULL && f_free == NULL) /* Use std functions */ + || (f_malloc != NULL && f_free != NULL) /* Use custom functions */); + + if (f_malloc == NULL && f_free == NULL) { +#if defined(FT_GCC_COMPILER) || defined(FT_CLANG_COMPILER) + fort_malloc = &malloc; + fort_free = &free; + fort_calloc = &calloc; + fort_realloc = &realloc; +#else + fort_malloc = &local_malloc; + fort_free = &local_free; + fort_calloc = &local_calloc; + fort_realloc = &local_realloc; +#endif + } else { + fort_malloc = f_malloc; + fort_free = f_free; + fort_calloc = &custom_fort_calloc; + fort_realloc = &custom_fort_realloc; + } + +} + +FT_INTERNAL +char *fort_strdup(const char *str) +{ + if (str == NULL) + return NULL; + + return bu_strdup(str); +} + +#if defined(FT_HAVE_WCHAR) +FT_INTERNAL +wchar_t *fort_wcsdup(const wchar_t *str) +{ + if (str == NULL) + return NULL; + + size_t sz = wcslen(str); + wchar_t *str_copy = (wchar_t *)F_MALLOC((sz + 1) * sizeof(wchar_t)); + if (str_copy == NULL) + return NULL; + + wcscpy(str_copy, str); + return str_copy; +} +#endif + + +static +size_t columns_number_in_fmt_string(const char *fmt) +{ + size_t separator_counter = 0; + const char *pos = fmt; + while (1) { + pos = strchr(pos, g_col_separator); + if (pos == NULL) + break; + + separator_counter++; + ++pos; + } + return separator_counter + 1; +} + +#if defined(FT_HAVE_WCHAR) +static +size_t columns_number_in_fmt_wstring(const wchar_t *fmt) +{ + size_t separator_counter = 0; + const wchar_t *pos = fmt; + while (1) { + pos = wcschr(pos, g_col_separator); + if (pos == NULL) + break; + + separator_counter++; + ++pos; + } + return separator_counter + 1; +} +#endif + +#if defined(FT_HAVE_UTF8) +static +size_t columns_number_in_fmt_u8string(const void *fmt) +{ + size_t separator_counter = 0; + const char *pos = (const char *)fmt; + while (1) { + pos = (const char *)utf8chr(pos, g_col_separator); + if (pos == NULL) + break; + + separator_counter++; + ++pos; + } + return separator_counter + 1; +} +#endif + +FT_INTERNAL +size_t number_of_columns_in_format_string(const f_string_view_t *fmt) +{ + switch (fmt->type) { + case CHAR_BUF: + return columns_number_in_fmt_string(fmt->u.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return columns_number_in_fmt_wstring(fmt->u.wstr); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return columns_number_in_fmt_u8string(fmt->u.u8str); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + } + return 0; +} + +FT_INTERNAL +size_t number_of_columns_in_format_buffer(const f_string_buffer_t *fmt) +{ + switch (fmt->type) { + case CHAR_BUF: + return columns_number_in_fmt_string(fmt->str.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return columns_number_in_fmt_wstring(fmt->str.wstr); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return columns_number_in_fmt_u8string(fmt->str.u8str); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + } + return 0; +} + +static +int snprint_n_strings_impl(char *buf, size_t length, size_t n, const char *str) +{ + size_t str_len = strlen(str); + if (length <= n * str_len) + return -1; + + if (n == 0) + return 0; + + /* To ensure valid return value it is safely not print such big strings */ + if (n * str_len > INT_MAX) + return -1; + + if (str_len == 0) + return 0; + + int status = snprintf(buf, length, "%0*d", (int)(n * str_len), 0); + if (status < 0) + return status; + + size_t i = 0; + for (i = 0; i < n; ++i) { + const char *str_p = str; + while (*str_p) + *(buf++) = *(str_p++); + } + return (int)(n * str_len); +} + +static +int snprint_n_strings(f_conv_context_t *cntx, size_t n, const char *str) +{ + int w = snprint_n_strings_impl(cntx->u.buf, cntx->raw_avail, n, str); + if (w >= 0) { + cntx->u.buf += w; + cntx->raw_avail -= w; + } + return w; +} + +#if defined(FT_HAVE_WCHAR) +static +int wsnprint_n_string(wchar_t *buf, size_t length, size_t n, const char *str); +#endif + +#if defined(FT_HAVE_UTF8) +static +int u8nprint_n_strings(void *buf, size_t length, size_t n, const void *str); +#endif + + +FT_INTERNAL +int print_n_strings(f_conv_context_t *cntx, size_t n, const char *str) +{ + int cod_w; + int raw_written; + + switch (cntx->b_type) { + case CHAR_BUF: + raw_written = snprint_n_strings(cntx, n, str); + cod_w = raw_written; + return cod_w; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + cod_w = wsnprint_n_string(cntx->u.wbuf, cntx->raw_avail, n, str); + if (cod_w < 0) + return cod_w; + raw_written = sizeof(wchar_t) * cod_w; + + cntx->u.buf += raw_written; + cntx->raw_avail -= raw_written; + return cod_w; +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + /* Everying is very strange and differs with W_CHAR_BUF */ + raw_written = u8nprint_n_strings(cntx->u.buf, cntx->raw_avail, n, str); + if (raw_written < 0) { + fprintf(stderr, " raw_written = %d\n", raw_written); + return raw_written; + } + + cntx->u.buf += raw_written; + cntx->raw_avail -= raw_written; + return utf8len(str) * n; +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + return -1; + } +} + +FT_INTERNAL +int ft_nprint(f_conv_context_t *cntx, const char *str, size_t strlen) +{ + if (cntx->raw_avail + 1/* for 0 */ < strlen) + return -1; + + memcpy(cntx->u.buf, str, strlen); + cntx->u.buf += strlen; + cntx->raw_avail -= strlen; + *cntx->u.buf = '\0'; /* Do we need this ? */ + return strlen; +} + +#ifdef FT_HAVE_WCHAR +int ft_nwprint(f_conv_context_t *cntx, const wchar_t *str, size_t strlen) +{ + if (cntx->raw_avail + 1/* for 0 */ < strlen) + return -1; + + size_t raw_len = strlen * sizeof(wchar_t); + + memcpy(cntx->u.buf, str, raw_len); + cntx->u.buf += raw_len; + cntx->raw_avail -= raw_len; + + /* Do we need this ? */ + wchar_t end_of_string = L'\0'; + memcpy(cntx->u.buf, &end_of_string, sizeof(wchar_t)); + return strlen; +} +#endif /* FT_HAVE_WCHAR */ + +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +int ft_nu8print(f_conv_context_t *cntx, const void *beg, const void *end) +{ + const char *bc = (const char *)beg; + const char *ec = (const char *)end; + size_t raw_len = ec - bc; + if (cntx->raw_avail + 1 < raw_len) + return -1; + + memcpy(cntx->u.buf, beg, raw_len); + cntx->u.buf += raw_len; + cntx->raw_avail -= raw_len; + *(cntx->u.buf) = '\0'; /* Do we need this ? */ + return raw_len; /* what return here ? */ +} +#endif /* FT_HAVE_UTF8 */ + +#if defined(FT_HAVE_WCHAR) +#define WCS_SIZE 64 + +static +int wsnprint_n_string(wchar_t *buf, size_t length, size_t n, const char *str) +{ + size_t str_len = strlen(str); + + /* note: maybe it's, better to return -1 in case of multibyte character + * strings (not sure this case is done correctly). + */ + if (str_len > 1) { + const unsigned char *p = (const unsigned char *)str; + while (*p) { + if (*p <= 127) + p++; + else { + wchar_t wcs[WCS_SIZE]; + const char *ptr = str; + size_t wcs_len; + mbstate_t mbst; + memset(&mbst, 0, sizeof(mbst)); + wcs_len = mbsrtowcs(wcs, (const char **)&ptr, WCS_SIZE, &mbst); + /* for simplicity */ + if ((wcs_len == (size_t) - 1) || wcs_len > 1) { + return -1; + } else { + wcs[wcs_len] = L'\0'; + size_t k = n; + while (k) { + *buf = *wcs; + ++buf; + --k; + } + buf[n] = L'\0'; + return (int)n; + } + } + } + } + + if (length <= n * str_len) + return -1; + + if (n == 0) + return 0; + + /* To ensure valid return value it is safely not print such big strings */ + if (n * str_len > INT_MAX) + return -1; + + if (str_len == 0) + return 0; + + int status = swprintf(buf, length, L"%0*d", (int)(n * str_len), 0); + if (status < 0) + return status; + + size_t i = 0; + for (i = 0; i < n; ++i) { + const char *str_p = str; + while (*str_p) + *(buf++) = (wchar_t) * (str_p++); + } + return (int)(n * str_len); +} +#endif + + +#if defined(FT_HAVE_UTF8) +static +int u8nprint_n_strings(void *buf, size_t length, size_t n, const void *str) +{ + size_t str_size = utf8size(str) - 1; /* str_size - raw size in bytes, excluding \0 */ + if (length <= n * str_size) + return -1; + + if (n == 0) + return 0; + + /* To ensure valid return value it is safely not print such big strings */ + if (n * str_size > INT_MAX) + return -1; + + if (str_size == 0) + return 0; + + size_t i = n; + while (i) { + memcpy(buf, str, str_size); + buf = (char *)buf + str_size; + --i; + } + *(char *)buf = '\0'; + return (int)(n * str_size); +} +#endif + +/******************************************************** + End of file "fort_utils.c" + ********************************************************/ + + +/******************************************************** + Begin of file "properties.c" + ********************************************************/ + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +#include +/* #include "properties.h" */ /* Commented by amalgamation script */ +/* #include "vector.h" */ /* Commented by amalgamation script */ + +#define FT_RESET_COLOR "\033[0m" + +static const char *fg_colors[] = { + "", + "\033[30m", + "\033[31m", + "\033[32m", + "\033[33m", + "\033[34m", + "\033[35m", + "\033[36m", + "\033[37m", + "\033[90m", + "\033[91m", + "\033[92m", + "\033[93m", + "\033[94m", + "\033[95m", + "\033[96m", + "\033[97m", +}; + +static const char *bg_colors[] = { + "", + "\033[40m", + "\033[41m", + "\033[42m", + "\033[43m", + "\033[44m", + "\033[45m", + "\033[46m", + "\033[47m", + "\033[100m", + "\033[101m", + "\033[102m", + "\033[103m", + "\033[104m", + "\033[105m", + "\033[106m", + "\033[107m", +}; + +static const char *text_styles[] = { + "", + "\033[1m", + "\033[2m", + "\033[3m", + "\033[4m", + "\033[5m", + "\033[7m", + "\033[8m", +}; + +#define UNIVERSAL_RESET_TAG "\033[0m" + +static const size_t n_fg_colors = sizeof(fg_colors) / sizeof(fg_colors[0]); +static const size_t n_bg_colors = sizeof(bg_colors) / sizeof(bg_colors[0]); +static const size_t n_styles = sizeof(text_styles) / sizeof(text_styles[0]); + +void get_style_tag_for_cell(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz) +{ + (void)sz; + size_t i = 0; + + unsigned bg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CELL_BG_COLOR); + unsigned text_style = get_cell_property_hierarchically(props, row, col, FT_CPROP_CELL_TEXT_STYLE); + + style_tag[0] = '\0'; + + if (text_style < (1U << n_styles)) { + for (i = 0; i < n_styles; ++i) { + if (text_style & (1 << i)) { + bu_strlcat(style_tag, text_styles[i], sz); + } + } + } else { + goto error; + } + + if (bg_color_number < n_bg_colors) { + bu_strlcat(style_tag, bg_colors[bg_color_number], sz); + } else { + goto error; + } + + return; + +error: + /* shouldn't be here */ + assert(0); + style_tag[0] = '\0'; + return; +} + +void get_reset_style_tag_for_cell(const f_table_properties_t *props, + size_t row, size_t col, char *reset_style_tag, size_t sz) +{ + (void)sz; + size_t i = 0; + + unsigned bg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CELL_BG_COLOR); + unsigned text_style = get_cell_property_hierarchically(props, row, col, FT_CPROP_CELL_TEXT_STYLE); + + reset_style_tag[0] = '\0'; + + if (text_style < (1U << n_styles)) { + for (i = 0; i < n_styles; ++i) { + if (text_style & (1 << i)) { + if (i != 0) // FT_TSTYLE_DEFAULT + goto reset_style; + } + } + } else { + goto error; + } + + if (bg_color_number < n_bg_colors) { + if (bg_color_number) + goto reset_style; + } else { + goto error; + } + + return; + + +reset_style: + bu_strlcat(reset_style_tag, UNIVERSAL_RESET_TAG, sz); + return; + +error: + /* shouldn't be here */ + assert(0); + reset_style_tag[0] = '\0'; + return; +} + + +void get_style_tag_for_content(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz) +{ + (void)sz; + size_t i = 0; + + unsigned text_style = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_TEXT_STYLE); + unsigned fg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_FG_COLOR); + unsigned bg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_BG_COLOR); + + style_tag[0] = '\0'; + + if (text_style < (1U << n_styles)) { + for (i = 0; i < n_styles; ++i) { + if (text_style & (1 << i)) { + bu_strlcat(style_tag, text_styles[i], sz); + } + } + } else { + goto error; + } + + if (fg_color_number < n_fg_colors) { + if (fg_color_number) + bu_strlcat(style_tag, fg_colors[fg_color_number], sz); + } else { + goto error; + } + + if (bg_color_number < n_bg_colors) { + bu_strlcat(style_tag, bg_colors[bg_color_number], sz); + } else { + goto error; + } + + return; + +error: + /* shouldn't be here */ + assert(0); + style_tag[0] = '\0'; + return; +} + +void get_reset_style_tag_for_content(const f_table_properties_t *props, + size_t row, size_t col, char *reset_style_tag, size_t sz) +{ + (void)sz; + size_t i = 0; + size_t len = 0; + + unsigned text_style = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_TEXT_STYLE); + unsigned fg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_FG_COLOR); + unsigned bg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_BG_COLOR); + + reset_style_tag[0] = '\0'; + + if (text_style < (1U << n_styles)) { + for (i = 0; i < n_styles; ++i) { + if (text_style & (1 << i)) { + if (i != 0) // FT_TSTYLE_DEFAULT + goto reset_style; + } + } + } else { + goto error; + } + + if (fg_color_number < n_fg_colors) { + if (fg_color_number) + goto reset_style; + } else { + goto error; + } + + if (bg_color_number < n_bg_colors) { + if (bg_color_number) + goto reset_style; + } else { + goto error; + } + + return; + + +reset_style: + bu_strlcat(reset_style_tag, UNIVERSAL_RESET_TAG, sz); + len = strlen(reset_style_tag); + get_style_tag_for_cell(props, row, col, reset_style_tag + len, sz - len); + return; + +error: + /* shouldn't be here */ + assert(0); + reset_style_tag[0] = '\0'; + return; +} + + +static struct f_cell_props g_default_cell_properties = { + FT_ANY_ROW, /* cell_row */ + FT_ANY_COLUMN, /* cell_col */ + + /* properties_flags */ + FT_CPROP_MIN_WIDTH | FT_CPROP_TEXT_ALIGN | FT_CPROP_TOP_PADDING + | FT_CPROP_BOTTOM_PADDING | FT_CPROP_LEFT_PADDING | FT_CPROP_RIGHT_PADDING + | FT_CPROP_EMPTY_STR_HEIGHT | FT_CPROP_CONT_FG_COLOR | FT_CPROP_CELL_BG_COLOR + | FT_CPROP_CONT_BG_COLOR | FT_CPROP_CELL_TEXT_STYLE | FT_CPROP_CONT_TEXT_STYLE, + + 0, /* col_min_width */ + FT_ALIGNED_LEFT, /* align */ + 0, /* cell_padding_top */ + 0, /* cell_padding_bottom */ + 1, /* cell_padding_left */ + 1, /* cell_padding_right */ + 1, /* cell_empty_string_height */ + + FT_ROW_COMMON, /* row_type */ + FT_COLOR_DEFAULT, /* content_fg_color_number */ + FT_COLOR_DEFAULT, /* content_bg_color_number */ + FT_COLOR_DEFAULT, /* cell_bg_color_number */ + FT_TSTYLE_DEFAULT, /* cell_text_style */ + FT_TSTYLE_DEFAULT, /* content_text_style */ +}; + +static int get_prop_value_if_exists_otherwise_default(const struct f_cell_props *cell_opts, uint32_t property) +{ + if (cell_opts == NULL || !PROP_IS_SET(cell_opts->properties_flags, property)) { + cell_opts = &g_default_cell_properties; + } + + switch (property) { + case FT_CPROP_MIN_WIDTH: + return cell_opts->col_min_width; + case FT_CPROP_TEXT_ALIGN: + return cell_opts->align; + case FT_CPROP_TOP_PADDING: + return cell_opts->cell_padding_top; + case FT_CPROP_BOTTOM_PADDING: + return cell_opts->cell_padding_bottom; + case FT_CPROP_LEFT_PADDING: + return cell_opts->cell_padding_left; + case FT_CPROP_RIGHT_PADDING: + return cell_opts->cell_padding_right; + case FT_CPROP_EMPTY_STR_HEIGHT: + return cell_opts->cell_empty_string_height; + case FT_CPROP_ROW_TYPE: + return cell_opts->row_type; + case FT_CPROP_CONT_FG_COLOR: + return cell_opts->content_fg_color_number; + case FT_CPROP_CONT_BG_COLOR: + return cell_opts->content_bg_color_number; + case FT_CPROP_CELL_BG_COLOR: + return cell_opts->cell_bg_color_number; + case FT_CPROP_CELL_TEXT_STYLE: + return cell_opts->cell_text_style; + case FT_CPROP_CONT_TEXT_STYLE: + return cell_opts->content_text_style; + default: + /* todo: implement later */ + exit(333); + } +} + + +FT_INTERNAL +f_cell_prop_container_t *create_cell_prop_container(void) +{ + f_cell_prop_container_t *ret = create_vector(sizeof(f_cell_props_t), DEFAULT_VECTOR_CAPACITY); + return ret; +} + + +FT_INTERNAL +void destroy_cell_prop_container(f_cell_prop_container_t *cont) +{ + if (cont) + destroy_vector(cont); +} + + +FT_INTERNAL +const f_cell_props_t *cget_cell_prop(const f_cell_prop_container_t *cont, size_t row, size_t col) +{ + assert(cont); + size_t sz = vector_size(cont); + size_t i = 0; + for (i = 0; i < sz; ++i) { + const f_cell_props_t *opt = &VECTOR_AT_C(cont, i, const f_cell_props_t); + if (opt->cell_row == row && opt->cell_col == col) + return opt; + } + return NULL; +} + + +FT_INTERNAL +f_cell_props_t *get_cell_prop_and_create_if_not_exists(f_cell_prop_container_t *cont, size_t row, size_t col) +{ + assert(cont); + size_t sz = vector_size(cont); + size_t i = 0; + for (i = 0; i < sz; ++i) { + f_cell_props_t *opt = &VECTOR_AT(cont, i, f_cell_props_t); + if (opt->cell_row == row && opt->cell_col == col) + return opt; + } + + f_cell_props_t opt; + if (row == FT_ANY_ROW && col == FT_ANY_COLUMN) + memcpy(&opt, &g_default_cell_properties, sizeof(f_cell_props_t)); + else + memset(&opt, 0, sizeof(f_cell_props_t)); + + opt.cell_row = row; + opt.cell_col = col; + if (FT_IS_SUCCESS(vector_push(cont, &opt))) { + return &VECTOR_AT(cont, sz, f_cell_props_t); + } + + return NULL; +} + + +FT_INTERNAL +int get_cell_property_hierarchically(const f_table_properties_t *propertiess, size_t row, size_t column, uint32_t property) +{ + assert(propertiess); + size_t row_origin = row; + + const f_cell_props_t *opt = NULL; + if (propertiess->cell_properties != NULL) { + while (1) { + opt = cget_cell_prop(propertiess->cell_properties, row, column); + if (opt != NULL && PROP_IS_SET(opt->properties_flags, property)) + break; + + if (row != FT_ANY_ROW && column != FT_ANY_COLUMN) { + row = FT_ANY_ROW; + continue; + } else if (row == FT_ANY_ROW && column != FT_ANY_COLUMN) { + row = row_origin; + column = FT_ANY_COLUMN; + continue; + } else if (row != FT_ANY_ROW && column == FT_ANY_COLUMN) { + row = FT_ANY_ROW; + column = FT_ANY_COLUMN; + continue; + } + + opt = NULL; + break; + } + } + + return get_prop_value_if_exists_otherwise_default(opt, property); +} + + +static f_status set_cell_property_impl(f_cell_props_t *opt, uint32_t property, int value) +{ + assert(opt); + + PROP_SET(opt->properties_flags, property); + if (PROP_IS_SET(property, FT_CPROP_MIN_WIDTH)) { + CHECK_NOT_NEGATIVE(value); + opt->col_min_width = value; + } else if (PROP_IS_SET(property, FT_CPROP_TEXT_ALIGN)) { + opt->align = (enum ft_text_alignment)value; + } else if (PROP_IS_SET(property, FT_CPROP_TOP_PADDING)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_padding_top = value; + } else if (PROP_IS_SET(property, FT_CPROP_BOTTOM_PADDING)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_padding_bottom = value; + } else if (PROP_IS_SET(property, FT_CPROP_LEFT_PADDING)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_padding_left = value; + } else if (PROP_IS_SET(property, FT_CPROP_RIGHT_PADDING)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_padding_right = value; + } else if (PROP_IS_SET(property, FT_CPROP_EMPTY_STR_HEIGHT)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_empty_string_height = value; + } else if (PROP_IS_SET(property, FT_CPROP_ROW_TYPE)) { + opt->row_type = (enum ft_row_type)value; + } else if (PROP_IS_SET(property, FT_CPROP_CONT_FG_COLOR)) { + opt->content_fg_color_number = value; + } else if (PROP_IS_SET(property, FT_CPROP_CONT_BG_COLOR)) { + opt->content_bg_color_number = value; + } else if (PROP_IS_SET(property, FT_CPROP_CELL_BG_COLOR)) { + opt->cell_bg_color_number = value; + } else if (PROP_IS_SET(property, FT_CPROP_CELL_TEXT_STYLE)) { + enum ft_text_style v = (enum ft_text_style)value; + if (v == FT_TSTYLE_DEFAULT) { + opt->cell_text_style = FT_TSTYLE_DEFAULT; + } else { + opt->cell_text_style = (enum ft_text_style)(opt->cell_text_style | v); + } + } else if (PROP_IS_SET(property, FT_CPROP_CONT_TEXT_STYLE)) { + enum ft_text_style v = (enum ft_text_style)value; + if (v == FT_TSTYLE_DEFAULT) { + opt->content_text_style = v; + } else { + opt->content_text_style = (enum ft_text_style)(opt->content_text_style | v); + } + } + + return FT_SUCCESS; + +fort_fail: + return FT_EINVAL; +} + + +FT_INTERNAL +f_status set_cell_property(f_cell_prop_container_t *cont, size_t row, size_t col, uint32_t property, int value) +{ + f_cell_props_t *opt = get_cell_prop_and_create_if_not_exists(cont, row, col); + if (opt == NULL) + return FT_GEN_ERROR; + + return set_cell_property_impl(opt, property, value); + /* + PROP_SET(opt->propertiess, property); + if (PROP_IS_SET(property, FT_CPROP_MIN_WIDTH)) { + opt->col_min_width = value; + } else if (PROP_IS_SET(property, FT_CPROP_TEXT_ALIGN)) { + opt->align = value; + } + + return FT_SUCCESS; + */ +} + + +FT_INTERNAL +f_status set_default_cell_property(uint32_t property, int value) +{ + return set_cell_property_impl(&g_default_cell_properties, property, value); +} + + +#define BASIC_STYLE { \ + /* border_chars */ \ + { \ + "+", "-", "+", "+", \ + "|", "|", "|", \ + "\0", "\0", "\0", "\0", \ + "+", "-", "+", "+", \ + "+", "+", "+", "+", \ + }, \ + /* header_border_chars */ \ + { \ + "+", "-", "+", "+", \ + "|", "|", "|", \ + "+", "-", "+", "+", \ + "+", "-", "+", "+", \ + "+", "+", "+", "+", \ + }, \ + /* separator_chars */ \ + { \ + "+", "-", "+", "+", \ + "+", "+", \ + }, \ +} + +#define BASIC2_STYLE { \ + /* border_chars */ \ + { \ + "+", "-", "+", "+", \ + "|", "|", "|", \ + "+", "-", "+", "+", \ + "+", "-", "+", "+", \ + "+", "+", "+", "+", \ + }, \ + /* header_border_chars */ \ + { \ + "+", "-", "+", "+", \ + "|", "|", "|", \ + "+", "-", "+", "+", \ + "+", "-", "+", "+", \ + "+", "+", "+", "+", \ + }, \ + /* separator_chars */ \ + { \ + "+", "-", "+", "+", \ + "+", "+", \ + }, \ +} + +#define SIMPLE_STYLE { \ + /* border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", " ", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + }, \ + /* header_border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", " ", "\0", \ + "\0", "-", " ", "\0", \ + "\0", " ", " ", "\0", \ + " ", "-", " ", "-", \ + }, \ + /* separator_chars */ \ + { \ + "\0", "-", " ", "\0", \ + " ", " ", \ + }, \ +} + +#define PLAIN_STYLE { \ + /* border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", " ", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + }, \ + /* header_border_chars */ \ + { \ + "\0", "-", "-", "\0", \ + "\0", " ", "\0", \ + "\0", "-", "-", "\0", \ + "\0", "-", "-", "\0", \ + " ", "-", " ", "-", \ + }, \ + /* separator_chars */ \ + { \ + "\0", "-", "-", "\0", \ + "-", "-", \ + }, \ +} + +#define DOT_STYLE { \ + /* border_chars */ \ + { \ + ".", ".", ".", ".", \ + ":", ":", ":", \ + "\0", "\0", "\0", "\0", \ + ":", ".", ":", ":", \ + "+", ":", "+", ":", \ + }, \ + /* header_border_chars */ \ + { \ + ".", ".", ".", ".", \ + ":", ":", ":", \ + ":", ".", ":", ":", \ + ":", ".", ":", ":", \ + "+", ".", "+", ".", \ + }, \ + /* separator_chars */ \ + { \ + ":", ".", ":", ":", \ + ":", ":", \ + }, \ +} + +#define EMPTY_STYLE { \ + /* border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + }, \ + /* header_border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + }, \ + /* separator_chars */ \ + { \ + "\0", " ", "\0 ", "\0", \ + "\0", "\0", \ + }, \ +} + + +#define EMPTY2_STYLE { \ + /* border_chars */ \ + { \ + " ", " ", " ", " ", \ + " ", " ", " ", \ + "\0", "\0", "\0", "\0", \ + " ", " ", " ", " ", \ + " ", " ", " ", " ", \ + }, \ + /* header_border_chars */ \ + { \ + " ", " ", " ", " ", \ + " ", " ", " ", \ + "\0", "\0", "\0", "\0", \ + " ", " ", " ", " ", \ + " ", " ", " ", " ", \ + }, \ + /* separator_chars */ \ + { \ + " ", " ", " ", " ", \ + " ", " ", \ + }, \ +} + +#define SOLID_STYLE { \ + /* border_chars */ \ + { \ + "┌", "─", "┬", "┐", \ + "│", "│", "│", \ + "", "", "", "", \ + "└", "─", "┴", "┘", \ + "│", "─", "│", "─", \ + }, \ + /* header_border_chars */ \ + { \ + "┌", "─", "┬", "┐", \ + "│", "│", "│", \ + "├", "─", "┼", "┤", \ + "└", "─", "┴", "┘", \ + "┼", "┬", "┼", "┴", \ + }, \ + /* separator_chars */ \ + { \ + "├", "─", "┼", "┤", \ + "┬", "┴", \ + }, \ +} + +#define SOLID_ROUND_STYLE { \ + /* border_chars */ \ + { \ + "╭", "─", "┬", "╮", \ + "│", "│", "│", \ + "", "", "", "", \ + "╰", "─", "┴", "╯", \ + "│", "─", "│", "─", \ + }, \ + /* header_border_chars */ \ + { \ + "╭", "─", "┬", "╮", \ + "│", "│", "│", \ + "├", "─", "┼", "┤", \ + "╰", "─", "┴", "╯", \ + "┼", "┬", "┼", "┴", \ + }, \ + /* separator_chars */ \ + { \ + "├", "─", "┼", "┤", \ + "┬", "┴", \ + }, \ +} + +#define NICE_STYLE { \ + /* border_chars */ \ + { \ + "╔", "═", "╦", "╗", \ + "║", "║", "║", \ + "", "", "", "", \ + "╚", "═", "╩", "╝", \ + "┣", "┻", "┣", "┳", \ + }, \ + /* header_border_chars */ \ + { \ + "╔", "═", "╦", "╗", \ + "║", "║", "║", \ + "╠", "═", "╬", "╣", \ + "╚", "═", "╩", "╝", \ + "┣", "╦", "┣", "╩", \ + }, \ + /* separator_chars */ \ + { \ + "╟", "─", "╫", "╢", \ + "╥", "╨", \ + }, \ +} + +#define DOUBLE_STYLE { \ + /* border_chars */ \ + { \ + "╔", "═", "╦", "╗", \ + "║", "║", "║", \ + "", "", "", "", \ + "╚", "═", "╩", "╝", \ + "┣", "┻", "┣", "┳", \ + }, \ + /* header_border_chars */ \ + { \ + "╔", "═", "╦", "╗", \ + "║", "║", "║", \ + "╠", "═", "╬", "╣", \ + "╚", "═", "╩", "╝", \ + "┣", "╦", "┣", "╩", \ + }, \ + /* separator_chars */ \ + { \ + "╠", "═", "╬", "╣", \ + "╦", "╩", \ + }, \ +} + + + + +#define DOUBLE2_STYLE { \ + /* border_chars */ \ + { \ + "╔", "═", "╤", "╗", \ + "║", "│", "║", \ + "╟", "─", "┼", "╢", \ + "╚", "═", "╧", "╝", \ + "├", "┬", "┤", "┴", \ + }, \ + /* header_border_chars */ \ + { \ + "╔", "═", "╤", "╗", \ + "║", "│", "║", \ + "╠", "═", "╪", "╣", \ + "╚", "═", "╧", "╝", \ + "├", "╤", "┤", "╧", \ + }, \ + /* separator_chars */ \ + { \ + "╠", "═", "╪", "╣", \ + "╤", "╧", \ + }, \ +} + + +#define BOLD_STYLE { \ + /* border_chars */ \ + { \ + "┏", "━", "┳", "┓", \ + "┃", "┃", "┃", \ + "", "", "", "", \ + "┗", "━", "┻", "┛", \ + "┣", "┻", "┣", "┳", \ + }, \ + /* header_border_chars */ \ + { \ + "┏", "━", "┳", "┓", \ + "┃", "┃", "┃", \ + "┣", "━", "╋", "┫", \ + "┗", "━", "┻", "┛", \ + "┣", "┳", "┣", "┻", \ + }, \ + /* separator_chars */ \ + { \ + "┣", "━", "╋", "┫", \ + "┳", "┻", \ + }, \ +} + +#define BOLD2_STYLE { \ + /* border_chars */ \ + { \ + "┏", "━", "┯", "┓", \ + "┃", "│", "┃", \ + "┠", "─", "┼", "┨", \ + "┗", "━", "┷", "┛", \ + "┣", "┬", "┣", "┴", \ + }, \ + /* header_border_chars */ \ + { \ + "┏", "━", "┯", "┓", \ + "┃", "│", "┃", \ + "┣", "━", "┿", "┫", \ + "┗", "━", "┷", "┛", \ + "┣", "┯", "┣", "┷", \ + }, \ + /* separator_chars */ \ + { \ + "┣", "━", "┿", "┫", \ + "┯", "┷", \ + }, \ +} + +#define FRAME_STYLE { \ + /* border_chars */ \ + { \ + "▛", "▀", "▀", "▜", \ + "▌", "┃", "▐", \ + "", "", "", "", \ + "▙", "▄", "▄", "▟", \ + "┣", "━", "┣", "━" \ + }, \ + /* header_border_chars */ \ + { \ + "▛", "▀", "▀", "▜", \ + "▌", "┃", "▐", \ + "▌", "━", "╋", "▐", \ + "▙", "▄", "▄", "▟", \ + "┣", "━", "┣", "━", \ + }, \ + /* separator_chars */ \ + { \ + "▌", "━", "╋", "▐", \ + "╋", "╋", \ + }, \ +} + + +struct fort_border_style FORT_BASIC_STYLE = BASIC_STYLE; +struct fort_border_style FORT_BASIC2_STYLE = BASIC2_STYLE; +struct fort_border_style FORT_SIMPLE_STYLE = SIMPLE_STYLE; +struct fort_border_style FORT_PLAIN_STYLE = PLAIN_STYLE; +struct fort_border_style FORT_DOT_STYLE = DOT_STYLE; +struct fort_border_style FORT_EMPTY_STYLE = EMPTY_STYLE; +struct fort_border_style FORT_EMPTY2_STYLE = EMPTY2_STYLE; +struct fort_border_style FORT_SOLID_STYLE = SOLID_STYLE; +struct fort_border_style FORT_SOLID_ROUND_STYLE = SOLID_ROUND_STYLE; +struct fort_border_style FORT_NICE_STYLE = NICE_STYLE; +struct fort_border_style FORT_DOUBLE_STYLE = DOUBLE_STYLE; +struct fort_border_style FORT_DOUBLE2_STYLE = DOUBLE2_STYLE; +struct fort_border_style FORT_BOLD_STYLE = BOLD_STYLE; +struct fort_border_style FORT_BOLD2_STYLE = BOLD2_STYLE; +struct fort_border_style FORT_FRAME_STYLE = FRAME_STYLE; + + + +fort_entire_table_properties_t g_entire_table_properties = { + 0, /* left_margin */ + 0, /* top_margin */ + 0, /* right_margin */ + 0, /* bottom_margin */ + FT_STRATEGY_REPLACE, /* add_strategy */ +}; + +static f_status set_entire_table_property_internal(fort_entire_table_properties_t *properties, uint32_t property, int value) +{ + assert(properties); + CHECK_NOT_NEGATIVE(value); + if (PROP_IS_SET(property, FT_TPROP_LEFT_MARGIN)) { + properties->left_margin = value; + } else if (PROP_IS_SET(property, FT_TPROP_TOP_MARGIN)) { + properties->top_margin = value; + } else if (PROP_IS_SET(property, FT_TPROP_RIGHT_MARGIN)) { + properties->right_margin = value; + } else if (PROP_IS_SET(property, FT_TPROP_BOTTOM_MARGIN)) { + properties->bottom_margin = value; + } else if (PROP_IS_SET(property, FT_TPROP_ADDING_STRATEGY)) { + properties->add_strategy = (enum ft_adding_strategy)value; + } else { + return FT_EINVAL; + } + return FT_SUCCESS; + +fort_fail: + return FT_EINVAL; +} + + +FT_INTERNAL +f_status set_entire_table_property(f_table_properties_t *table_properties, uint32_t property, int value) +{ + assert(table_properties); + return set_entire_table_property_internal(&table_properties->entire_table_properties, property, value); +} + + +FT_INTERNAL +f_status set_default_entire_table_property(uint32_t property, int value) +{ + return set_entire_table_property_internal(&g_entire_table_properties, property, value); +} + + +FT_INTERNAL +size_t max_border_elem_strlen(struct f_table_properties *properties) +{ + assert(properties); + size_t result = 1; + int i = 0; + for (i = 0; i < BORDER_ITEM_POS_SIZE; ++i) { + result = MAX(result, strlen(properties->border_style.border_chars[i])); + } + + for (i = 0; i < BORDER_ITEM_POS_SIZE; ++i) { + result = MAX(result, strlen(properties->border_style.header_border_chars[i])); + } + + for (i = 0; i < SEPARATOR_ITEM_POS_SIZE; ++i) { + result = MAX(result, strlen(properties->border_style.separator_chars[i])); + } + return result; +} + + +f_table_properties_t g_table_properties = { + /* border_style */ + BASIC_STYLE, + NULL, /* cell_properties */ + /* entire_table_properties */ + { + 0, /* left_margin */ + 0, /* top_margin */ + 0, /* right_margin */ + 0, /* bottom_margin */ + FT_STRATEGY_REPLACE, /* add_strategy */ + } +}; + + +FT_INTERNAL +f_table_properties_t *create_table_properties(void) +{ + f_table_properties_t *properties = (f_table_properties_t *)F_CALLOC(sizeof(f_table_properties_t), 1); + if (properties == NULL) { + return NULL; + } + memcpy(properties, &g_table_properties, sizeof(f_table_properties_t)); + properties->cell_properties = create_cell_prop_container(); + if (properties->cell_properties == NULL) { + destroy_table_properties(properties); + return NULL; + } + memcpy(&properties->entire_table_properties, &g_entire_table_properties, sizeof(fort_entire_table_properties_t)); + return properties; +} + +FT_INTERNAL +void destroy_table_properties(f_table_properties_t *properties) +{ + if (properties == NULL) + return; + + if (properties->cell_properties != NULL) { + destroy_cell_prop_container(properties->cell_properties); + } + F_FREE(properties); +} + +static +f_cell_prop_container_t *copy_cell_properties(f_cell_prop_container_t *cont) +{ + f_cell_prop_container_t *result = create_cell_prop_container(); + if (result == NULL) + return NULL; + + size_t i = 0; + size_t sz = vector_size(cont); + for (i = 0; i < sz; ++i) { + f_cell_props_t *opt = (f_cell_props_t *)vector_at(cont, i); + if (FT_IS_ERROR(vector_push(result, opt))) { + destroy_cell_prop_container(result); + return NULL; + } + } + return result; +} + +FT_INTERNAL +f_table_properties_t *copy_table_properties(const f_table_properties_t *properties) +{ + f_table_properties_t *new_opt = create_table_properties(); + if (new_opt == NULL) + return NULL; + + destroy_vector(new_opt->cell_properties); + new_opt->cell_properties = copy_cell_properties(properties->cell_properties); + if (new_opt->cell_properties == NULL) { + destroy_table_properties(new_opt); + return NULL; + } + + memcpy(&new_opt->border_style, &properties->border_style, sizeof(struct fort_border_style)); + memcpy(&new_opt->entire_table_properties, + &properties->entire_table_properties, sizeof(fort_entire_table_properties_t)); + + return new_opt; +} + +/******************************************************** + End of file "properties.c" + ********************************************************/ + + +/******************************************************** + Begin of file "row.c" + ********************************************************/ + +#include +#include +/* #include "row.h" */ /* Commented by amalgamation script */ +/* #include "cell.h" */ /* Commented by amalgamation script */ +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +/* #include "vector.h" */ /* Commented by amalgamation script */ + + +struct f_row { + f_vector_t *cells; +}; + +static +f_row_t *create_row_impl(f_vector_t *cells) +{ + f_row_t *row = (f_row_t *)F_CALLOC(1, sizeof(f_row_t)); + if (row == NULL) + return NULL; + if (cells) { + row->cells = cells; + } else { + row->cells = create_vector(sizeof(f_cell_t *), DEFAULT_VECTOR_CAPACITY); + if (row->cells == NULL) { + F_FREE(row); + return NULL; + } + } + return row; +} + +FT_INTERNAL +f_row_t *create_row(void) +{ + return create_row_impl(NULL); +} + +static +void destroy_each_cell(f_vector_t *cells) +{ + size_t i = 0; + size_t cells_n = vector_size(cells); + for (i = 0; i < cells_n; ++i) { + f_cell_t *cell = VECTOR_AT(cells, i, f_cell_t *); + destroy_cell(cell); + } +} + +FT_INTERNAL +void destroy_row(f_row_t *row) +{ + if (row == NULL) + return; + + if (row->cells) { + destroy_each_cell(row->cells); + destroy_vector(row->cells); + } + + F_FREE(row); +} + +FT_INTERNAL +f_row_t *copy_row(f_row_t *row) +{ + assert(row); + f_row_t *result = create_row(); + if (result == NULL) + return NULL; + + size_t i = 0; + size_t cols_n = vector_size(row->cells); + for (i = 0; i < cols_n; ++i) { + f_cell_t *cell = VECTOR_AT(row->cells, i, f_cell_t *); + f_cell_t *new_cell = copy_cell(cell); + if (new_cell == NULL) { + destroy_row(result); + return NULL; + } + vector_push(result->cells, &new_cell); + } + + return result; +} + +FT_INTERNAL +f_row_t *split_row(f_row_t *row, size_t pos) +{ + assert(row); + + f_vector_t *cells = vector_split(row->cells, pos); + if (!cells) + return NULL; + f_row_t *tail = create_row_impl(cells); + if (!tail) { + destroy_each_cell(cells); + destroy_vector(cells); + } + return tail; +} + +FT_INTERNAL +int ft_row_erase_range(f_row_t *row, size_t left, size_t right) +{ + assert(row); + size_t cols_n = vector_size(row->cells); + if (cols_n == 0 || (right < left)) + return FT_SUCCESS; + + f_cell_t *cell = NULL; + size_t i = left; + while (i < cols_n && i <= right) { + cell = VECTOR_AT(row->cells, i, f_cell_t *); + destroy_cell(cell); + ++i; + } + size_t n_destroy = MIN(cols_n - 1, right) - left + 1; + while (n_destroy--) { + vector_erase(row->cells, left); + } + return FT_SUCCESS; +} + +FT_INTERNAL +size_t columns_in_row(const f_row_t *row) +{ + if (row == NULL || row->cells == NULL) + return 0; + + return vector_size(row->cells); +} + + +static +f_cell_t *get_cell_impl(f_row_t *row, size_t col, enum f_get_policy policy) +{ + if (row == NULL || row->cells == NULL) { + return NULL; + } + + switch (policy) { + case DONT_CREATE_ON_NULL: + if (col < columns_in_row(row)) { + return VECTOR_AT(row->cells, col, f_cell_t *); + } + return NULL; + case CREATE_ON_NULL: + while (col >= columns_in_row(row)) { + f_cell_t *new_cell = create_cell(); + if (new_cell == NULL) + return NULL; + if (FT_IS_ERROR(vector_push(row->cells, &new_cell))) { + destroy_cell(new_cell); + return NULL; + } + } + return VECTOR_AT(row->cells, col, f_cell_t *); + } + + assert(0 && "Shouldn't be here!"); + return NULL; +} + + +FT_INTERNAL +f_cell_t *get_cell(f_row_t *row, size_t col) +{ + return get_cell_impl(row, col, DONT_CREATE_ON_NULL); +} + + +FT_INTERNAL +const f_cell_t *get_cell_c(const f_row_t *row, size_t col) +{ + return get_cell((f_row_t *)row, col); +} + + +FT_INTERNAL +f_cell_t *get_cell_and_create_if_not_exists(f_row_t *row, size_t col) +{ + return get_cell_impl(row, col, CREATE_ON_NULL); +} + +FT_INTERNAL +f_cell_t *create_cell_in_position(f_row_t *row, size_t col) +{ + if (row == NULL || row->cells == NULL) { + return NULL; + } + + f_cell_t *new_cell = create_cell(); + if (new_cell == NULL) + return NULL; + if (FT_IS_ERROR(vector_insert(row->cells, &new_cell, col))) { + destroy_cell(new_cell); + return NULL; + } + return VECTOR_AT(row->cells, col, f_cell_t *); +} + + +FT_INTERNAL +f_status swap_row(f_row_t *cur_row, f_row_t *ins_row, size_t pos) +{ + assert(cur_row); + assert(ins_row); + size_t cur_sz = vector_size(cur_row->cells); + if (cur_sz == 0 && pos == 0) { + f_row_t tmp; + memcpy(&tmp, cur_row, sizeof(f_row_t)); + memcpy(cur_row, ins_row, sizeof(f_row_t)); + memcpy(ins_row, &tmp, sizeof(f_row_t)); + return FT_SUCCESS; + } + + return vector_swap(cur_row->cells, ins_row->cells, pos); +} + +/* Ownership of cells of `ins_row` is passed to `cur_row`. */ +FT_INTERNAL +f_status insert_row(f_row_t *cur_row, f_row_t *ins_row, size_t pos) +{ + assert(cur_row); + assert(ins_row); + + while (vector_size(cur_row->cells) < pos) { + f_cell_t *new_cell = create_cell(); + if (!new_cell) + return FT_GEN_ERROR; + vector_push(cur_row->cells, &new_cell); + } + + size_t sz = vector_size(ins_row->cells); + size_t i = 0; + for (i = 0; i < sz; ++i) { + f_cell_t *cell = VECTOR_AT(ins_row->cells, i, f_cell_t *); + if (FT_IS_ERROR(vector_insert(cur_row->cells, &cell, pos + i))) { + /* clean up what we have inserted */ + while (i--) { + vector_erase(cur_row->cells, pos); + } + return FT_GEN_ERROR; + } + } + /* Clear cells so that it will be safe to destroy this row */ + vector_clear(ins_row->cells); + return FT_SUCCESS; +} + + +FT_INTERNAL +size_t group_cell_number(const f_row_t *row, size_t master_cell_col) +{ + assert(row); + const f_cell_t *master_cell = get_cell_c(row, master_cell_col); + if (master_cell == NULL) + return 0; + + if (get_cell_type(master_cell) != GROUP_MASTER_CELL) + return 1; + + size_t total_cols = vector_size(row->cells); + size_t slave_col = master_cell_col + 1; + while (slave_col < total_cols) { + const f_cell_t *cell = get_cell_c(row, slave_col); + if (cell && get_cell_type(cell) == GROUP_SLAVE_CELL) { + ++slave_col; + } else { + break; + } + } + return slave_col - master_cell_col; +} + + +FT_INTERNAL +int get_row_cell_types(const f_row_t *row, enum f_cell_type *types, size_t types_sz) +{ + assert(row); + assert(types); + size_t i = 0; + for (i = 0; i < types_sz; ++i) { + const f_cell_t *cell = get_cell_c(row, i); + if (cell) { + types[i] = get_cell_type(cell); + } else { + types[i] = COMMON_CELL; + } + } + return FT_SUCCESS; +} + + +FT_INTERNAL +f_status row_set_cell_span(f_row_t *row, size_t cell_column, size_t hor_span) +{ + assert(row); + + if (hor_span < 2) + return FT_EINVAL; + + f_cell_t *main_cell = get_cell_and_create_if_not_exists(row, cell_column); + if (main_cell == NULL) { + return FT_GEN_ERROR; + } + set_cell_type(main_cell, GROUP_MASTER_CELL); + --hor_span; + ++cell_column; + + while (hor_span) { + f_cell_t *slave_cell = get_cell_and_create_if_not_exists(row, cell_column); + if (slave_cell == NULL) { + return FT_GEN_ERROR; + } + set_cell_type(slave_cell, GROUP_SLAVE_CELL); + --hor_span; + ++cell_column; + } + + return FT_SUCCESS; +} + +static +int print_row_separator_impl(f_conv_context_t *cntx, + const size_t *col_width_arr, size_t cols, + const f_row_t *upper_row, const f_row_t *lower_row, + enum f_hor_separator_pos separatorPos, + const f_separator_t *sep) +{ + assert(cntx); + + int status = FT_GEN_ERROR; + + const f_context_t *context = cntx->cntx; + + /* Get cell types + * + * Regions above top row and below bottom row areconsidered full of virtual + * GROUP_SLAVE_CELL cells + */ + enum f_cell_type *top_row_types = (enum f_cell_type *)F_MALLOC(sizeof(enum f_cell_type) * cols * 2); + if (top_row_types == NULL) { + return FT_MEMORY_ERROR; + } + enum f_cell_type *bottom_row_types = top_row_types + cols; + if (upper_row) { + get_row_cell_types(upper_row, top_row_types, cols); + } else { + size_t i = 0; + for (i = 0; i < cols; ++i) + top_row_types[i] = GROUP_SLAVE_CELL; + } + if (lower_row) { + get_row_cell_types(lower_row, bottom_row_types, cols); + } else { + size_t i = 0; + for (i = 0; i < cols; ++i) + bottom_row_types[i] = GROUP_SLAVE_CELL; + } + + + f_table_properties_t *properties = context->table_properties; + fort_entire_table_properties_t *entire_tprops = &properties->entire_table_properties; + + size_t written = 0; + int tmp = 0; + + enum ft_row_type lower_row_type = FT_ROW_COMMON; + if (lower_row != NULL) { + int lrt = get_cell_property_hierarchically(properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); + lower_row_type = (enum ft_row_type)lrt; + } + enum ft_row_type upper_row_type = FT_ROW_COMMON; + if (upper_row != NULL) { + int urt = get_cell_property_hierarchically(properties, context->row - 1, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); + upper_row_type = (enum ft_row_type)urt; + } + + /* Row separator anatomy + * + * | C11 | C12 C13 | C14 C15 | + * L I I I IV I I IT I I I IB I I II I I R + * | C21 | C22 | C23 C24 C25 | + */ + const char **L = NULL; + const char **I = NULL; + const char **IV = NULL; + const char **R = NULL; + const char **IT = NULL; + const char **IB = NULL; + const char **II = NULL; + + struct fort_border_style *border_style = &properties->border_style; + + typedef const char *(*border_chars_point_t)[BORDER_ITEM_POS_SIZE]; + const char *(*border_chars)[BORDER_ITEM_POS_SIZE] = NULL; + border_chars = (border_chars_point_t)&border_style->border_chars; + if (upper_row_type == FT_ROW_HEADER || lower_row_type == FT_ROW_HEADER) { + border_chars = (border_chars_point_t)&border_style->header_border_chars; + } + + if (sep && sep->enabled) { + L = &(border_style->separator_chars[LH_sip]); + I = &(border_style->separator_chars[IH_sip]); + IV = &(border_style->separator_chars[II_sip]); + R = &(border_style->separator_chars[RH_sip]); + + IT = &(border_style->separator_chars[TI_sip]); + IB = &(border_style->separator_chars[BI_sip]); + II = &(border_style->separator_chars[IH_sip]); + + if (lower_row == NULL) { + L = &(*border_chars)[BL_bip]; + R = &(*border_chars)[BR_bip]; + } else if (upper_row == NULL) { + L = &(*border_chars)[TL_bip]; + R = &(*border_chars)[TR_bip]; + } + } else { + switch (separatorPos) { + case TOP_SEPARATOR: + L = &(*border_chars)[TL_bip]; + I = &(*border_chars)[TT_bip]; + IV = &(*border_chars)[TV_bip]; + R = &(*border_chars)[TR_bip]; + + IT = &(*border_chars)[TV_bip]; + IB = &(*border_chars)[TV_bip]; + II = &(*border_chars)[TT_bip]; + break; + case INSIDE_SEPARATOR: + L = &(*border_chars)[LH_bip]; + I = &(*border_chars)[IH_bip]; + IV = &(*border_chars)[II_bip]; + R = &(*border_chars)[RH_bip]; + + IT = &(*border_chars)[TI_bip]; + IB = &(*border_chars)[BI_bip]; + II = &(*border_chars)[IH_bip]; + break; + case BOTTOM_SEPARATOR: + L = &(*border_chars)[BL_bip]; + I = &(*border_chars)[BB_bip]; + IV = &(*border_chars)[BV_bip]; + R = &(*border_chars)[BR_bip]; + + IT = &(*border_chars)[BV_bip]; + IB = &(*border_chars)[BV_bip]; + II = &(*border_chars)[BB_bip]; + break; + default: + break; + } + } + + size_t i = 0; + + /* If all chars are not printable, skip line separator */ + /* NOTE: argument of `isprint` should be explicitly converted to + * unsigned char according to + * https://en.cppreference.com/w/c/string/byte/isprint + */ + if ((strlen(*L) == 0 || (strlen(*L) == 1 && !isprint((unsigned char) **L))) + && (strlen(*I) == 0 || (strlen(*I) == 1 && !isprint((unsigned char) **I))) + && (strlen(*IV) == 0 || (strlen(*IV) == 1 && !isprint((unsigned char) **IV))) + && (strlen(*R) == 0 || (strlen(*R) == 1 && !isprint((unsigned char) **R)))) { + status = 0; + goto clear; + } + + /* Print left margin */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, FT_SPACE)); + + for (i = 0; i < cols; ++i) { + if (i == 0) { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *L)); + } else { + if ((top_row_types[i] == COMMON_CELL || top_row_types[i] == GROUP_MASTER_CELL) + && (bottom_row_types[i] == COMMON_CELL || bottom_row_types[i] == GROUP_MASTER_CELL)) { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *IV)); + } else if (top_row_types[i] == GROUP_SLAVE_CELL && bottom_row_types[i] == GROUP_SLAVE_CELL) { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *II)); + } else if (top_row_types[i] == GROUP_SLAVE_CELL) { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *IT)); + } else { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *IB)); + } + } + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, col_width_arr[i], *I)); + } + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R)); + + /* Print right margin */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, FT_SPACE)); + + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE)); + + status = (int)written; + +clear: + F_FREE(top_row_types); + return status; +} + +FT_INTERNAL +int print_row_separator(f_conv_context_t *cntx, + const size_t *col_width_arr, size_t cols, + const f_row_t *upper_row, const f_row_t *lower_row, + enum f_hor_separator_pos separatorPos, const f_separator_t *sep) +{ + return print_row_separator_impl(cntx, col_width_arr, cols, upper_row, lower_row, + separatorPos, sep); +} + +FT_INTERNAL +f_row_t *create_row_from_string(const char *str) +{ + typedef char char_type; + char_type *(*strdup_)(const char_type * str) = F_STRDUP; + const char_type zero_char = '\0'; + f_status(*fill_cell_from_string_)(f_cell_t *cell, const char *str) = fill_cell_from_string; + const char_type *const zero_string = ""; +#define STRCHR strchr + + char_type *pos = NULL; + char_type *base_pos = NULL; + size_t number_of_separators = 0; + + f_row_t *row = create_row(); + if (row == NULL) + return NULL; + + if (str == NULL) + return row; + + char_type *str_copy = strdup_(str); + if (str_copy == NULL) + goto clear; + + pos = str_copy; + base_pos = str_copy; + number_of_separators = 0; + while (*pos) { + pos = STRCHR(pos, g_col_separator); + if (pos != NULL) { + *(pos) = zero_char; + ++pos; + number_of_separators++; + } + + f_cell_t *cell = create_cell(); + if (cell == NULL) + goto clear; + + int status = fill_cell_from_string_(cell, base_pos); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + status = vector_push(row->cells, &cell); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + if (pos == NULL) + break; + base_pos = pos; + } + + /* special case if in format string last cell is empty */ + while (vector_size(row->cells) < (number_of_separators + 1)) { + f_cell_t *cell = create_cell(); + if (cell == NULL) + goto clear; + + int status = fill_cell_from_string_(cell, zero_string); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + status = vector_push(row->cells, &cell); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + } + + F_FREE(str_copy); + return row; + +clear: + destroy_row(row); + F_FREE(str_copy); + return NULL; + +#undef STRCHR +} + + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_row_t *create_row_from_wstring(const wchar_t *str) +{ + typedef wchar_t char_type; + char_type *(*strdup_)(const char_type * str) = F_WCSDUP; + const char_type zero_char = L'\0'; + f_status(*fill_cell_from_string_)(f_cell_t *cell, const wchar_t *str) = fill_cell_from_wstring; + const char_type *const zero_string = L""; +#define STRCHR wcschr + + char_type *pos = NULL; + char_type *base_pos = NULL; + size_t number_of_separators = 0; + + f_row_t *row = create_row(); + if (row == NULL) + return NULL; + + if (str == NULL) + return row; + + char_type *str_copy = strdup_(str); + if (str_copy == NULL) + goto clear; + + pos = str_copy; + base_pos = str_copy; + number_of_separators = 0; + while (*pos) { + pos = STRCHR(pos, g_col_separator); + if (pos != NULL) { + *(pos) = zero_char; + ++pos; + number_of_separators++; + } + + f_cell_t *cell = create_cell(); + if (cell == NULL) + goto clear; + + int status = fill_cell_from_string_(cell, base_pos); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + status = vector_push(row->cells, &cell); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + if (pos == NULL) + break; + base_pos = pos; + } + + /* special case if in format string last cell is empty */ + while (vector_size(row->cells) < (number_of_separators + 1)) { + f_cell_t *cell = create_cell(); + if (cell == NULL) + goto clear; + + int status = fill_cell_from_string_(cell, zero_string); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + status = vector_push(row->cells, &cell); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + } + + F_FREE(str_copy); + return row; + +clear: + destroy_row(row); + F_FREE(str_copy); + return NULL; +#undef STRCHR +} +#endif + +FT_INTERNAL +f_row_t *create_row_from_buffer(const f_string_buffer_t *buffer) +{ + switch (buffer->type) { + case CHAR_BUF: + return create_row_from_string(buffer->str.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return create_row_from_wstring(buffer->str.wstr); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return create_row_from_string((const char *)buffer->str.u8str); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + return NULL; + } +} + +static int +vsnprintf_buffer(f_string_buffer_t *buffer, const struct f_string_view *fmt, + va_list *va) +{ + /* Disable compiler diagnostic (format string is not a string literal) */ +#if defined(FT_CLANG_COMPILER) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wformat-nonliteral" +#endif +#if defined(FT_GCC_COMPILER) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif + size_t width_capacity = string_buffer_width_capacity(buffer); + switch (buffer->type) { + case CHAR_BUF: + return vsnprintf(buffer->str.cstr, width_capacity, fmt->u.cstr, *va); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return vswprintf(buffer->str.wstr, width_capacity, fmt->u.wstr, *va); +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return vsnprintf(buffer->str.cstr, width_capacity, fmt->u.cstr, *va); +#endif + default: + assert(0); + return 0; + } +#if defined(FT_CLANG_COMPILER) +#pragma clang diagnostic pop +#endif +#if defined(FT_GCC_COMPILER) +#pragma GCC diagnostic pop +#endif +} + +FT_INTERNAL +f_row_t *create_row_from_fmt_string(const struct f_string_view *fmt, va_list *va_args) +{ + f_string_buffer_t *buffer = create_string_buffer(DEFAULT_STR_BUF_SIZE, fmt->type); + if (buffer == NULL) + return NULL; + + size_t cols_origin = number_of_columns_in_format_string(fmt); + size_t cols = 0; + + while (1) { + va_list va; + va_copy(va, *va_args); + int virtual_sz = vsnprintf_buffer(buffer, fmt, &va); + va_end(va); + /* If error encountered */ + if (virtual_sz < 0) + goto clear; + + /* Successful write */ + if ((size_t)virtual_sz < string_buffer_width_capacity(buffer)) + break; + + /* Otherwise buffer was too small, so incr. buffer size ant try again. */ + if (!FT_IS_SUCCESS(realloc_string_buffer_without_copy(buffer))) + goto clear; + } + + cols = number_of_columns_in_format_buffer(buffer); + if (cols == cols_origin) { + f_row_t *row = create_row_from_buffer(buffer); + if (row == NULL) { + goto clear; + } + + destroy_string_buffer(buffer); + return row; + } + + if (cols_origin == 1) { + f_row_t *row = create_row(); + if (row == NULL) { + goto clear; + } + + f_cell_t *cell = get_cell_and_create_if_not_exists(row, 0); + if (cell == NULL) { + destroy_row(row); + goto clear; + } + + f_status result = fill_cell_from_buffer(cell, buffer); + if (FT_IS_ERROR(result)) { + destroy_row(row); + goto clear; + } + + destroy_string_buffer(buffer); + return row; + } + + /* + * todo: add processing of cols != cols_origin in a general way + * (when cols_origin != 1). + */ + +clear: + destroy_string_buffer(buffer); + return NULL; +} + + +FT_INTERNAL +int snprintf_row(const f_row_t *row, f_conv_context_t *cntx, size_t *col_width_arr, size_t col_width_arr_sz, + size_t row_height) +{ + const f_context_t *context = cntx->cntx; + assert(context); + + if (row == NULL) + return -1; + + size_t cols_in_row = columns_in_row(row); + if (cols_in_row > col_width_arr_sz) + return -1; + + /* Row separator anatomy + * + * L data IV data IV data R + */ + f_table_properties_t *properties = context->table_properties; + + typedef const char *(*border_chars_point_t)[BORDER_ITEM_POS_SIZE]; + int rtype = get_cell_property_hierarchically(properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); + enum ft_row_type row_type = (enum ft_row_type)rtype; + const char *(*bord_chars)[BORDER_ITEM_POS_SIZE] = (row_type == FT_ROW_HEADER) + ? (border_chars_point_t)(&properties->border_style.header_border_chars) + : (border_chars_point_t)(&properties->border_style.border_chars); + const char **L = &(*bord_chars)[LL_bip]; + const char **IV = &(*bord_chars)[IV_bip]; + const char **R = &(*bord_chars)[RR_bip]; + + + size_t written = 0; + int tmp = 0; + size_t i = 0; + fort_entire_table_properties_t *entire_tprops = &context->table_properties->entire_table_properties; + for (i = 0; i < row_height; ++i) { + /* Print left margin */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, FT_SPACE)); + + /* Print left table boundary */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *L)); + size_t j = 0; + while (j < col_width_arr_sz) { + if (j < cols_in_row) { + ((f_context_t *)context)->column = j; + f_cell_t *cell = VECTOR_AT(row->cells, j, f_cell_t *); + size_t cell_vis_width = 0; + + size_t group_slave_sz = group_cell_number(row, j); + cell_vis_width = col_width_arr[j]; + size_t slave_j = 0; + size_t master_j = j; + for (slave_j = master_j + 1; slave_j < (master_j + group_slave_sz); ++slave_j) { + cell_vis_width += col_width_arr[slave_j] + FORT_COL_SEPARATOR_LENGTH; + ++j; + } + + CHCK_RSLT_ADD_TO_WRITTEN(cell_printf(cell, i, cntx, cell_vis_width)); + } else { + /* Print empty cell */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, col_width_arr[j], FT_SPACE)); + } + + /* Print boundary between cells */ + if (j < col_width_arr_sz - 1) + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *IV)); + + ++j; + } + + /* Print right table boundary */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R)); + + /* Print right margin */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, FT_SPACE)); + + /* Print new line character */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE)); + } + return (int)written; + +clear: + return -1; +} + +/******************************************************** + End of file "row.c" + ********************************************************/ + + +/******************************************************** + Begin of file "string_buffer.c" + ********************************************************/ + +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +/* #include "properties.h" */ /* Commented by amalgamation script */ +/* #include "wcwidth.h" */ /* Commented by amalgamation script */ +#include +#include +#ifdef FT_HAVE_WCHAR +#include +#endif +#if defined(FT_HAVE_UTF8) +/* #include "utf8.h" */ /* Commented by amalgamation script */ +#endif + +static ptrdiff_t str_iter_width(const char *beg, const char *end) +{ + assert(end >= beg); + return (end - beg); +} + + +#ifdef FT_HAVE_WCHAR +static ptrdiff_t wcs_iter_width(const wchar_t *beg, const wchar_t *end) +{ + assert(end >= beg); + return mk_wcswidth(beg, (size_t)(end - beg)); +} +#endif /* FT_HAVE_WCHAR */ + + +static size_t buf_str_len(const f_string_buffer_t *buf) +{ + assert(buf); + + switch (buf->type) { + case CHAR_BUF: + return strlen(buf->str.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return wcslen(buf->str.wstr); +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return utf8len(buf->str.u8str); +#endif + } + + assert(0); + return 0; +} + + +FT_INTERNAL +size_t strchr_count(const char *str, char ch) +{ + if (str == NULL) + return 0; + + size_t count = 0; + str = strchr(str, ch); + while (str) { + count++; + str++; + str = strchr(str, ch); + } + return count; +} + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +size_t wstrchr_count(const wchar_t *str, wchar_t ch) +{ + if (str == NULL) + return 0; + + size_t count = 0; + str = wcschr(str, ch); + while (str) { + count++; + str++; + str = wcschr(str, ch); + } + return count; +} +#endif + + +#if defined(FT_HAVE_UTF8) +/* todo: do something with code below!!! */ +FT_INTERNAL +void *ut8next(const void *str) +{ + utf8_int32_t out_codepoint; + return utf8codepoint(str, &out_codepoint); +} + +FT_INTERNAL +size_t utf8chr_count(const void *str, utf8_int32_t ch) +{ + if (str == NULL) + return 0; + + size_t count = 0; + str = utf8chr(str, ch); + while (str) { + count++; + str = ut8next(str); + str = utf8chr(str, ch); + } + return count; +} +#endif /* FT_HAVE_UTF8 */ + + +FT_INTERNAL +const char *str_n_substring_beg(const char *str, char ch_separator, size_t n) +{ + if (str == NULL) + return NULL; + + if (n == 0) + return str; + + str = strchr(str, ch_separator); + --n; + while (n > 0) { + if (str == NULL) + return NULL; + --n; + str++; + str = strchr(str, ch_separator); + } + return str ? (str + 1) : NULL; +} + + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +const wchar_t *wstr_n_substring_beg(const wchar_t *str, wchar_t ch_separator, size_t n) +{ + if (str == NULL) + return NULL; + + if (n == 0) + return str; + + str = wcschr(str, ch_separator); + --n; + while (n > 0) { + if (str == NULL) + return NULL; + --n; + str++; + str = wcschr(str, ch_separator); + } + return str ? (str + 1) : NULL; +} +#endif /* FT_HAVE_WCHAR */ + +#if defined(FT_HAVE_UTF8) +FT_INTERNAL +const void *utf8_n_substring_beg(const void *str, utf8_int32_t ch_separator, size_t n) +{ + if (str == NULL) + return NULL; + + if (n == 0) + return str; + + str = utf8chr(str, ch_separator); + --n; + while (n > 0) { + if (str == NULL) + return NULL; + --n; + str = ut8next(str); + str = utf8chr(str, ch_separator); + } + return str ? (ut8next(str)) : NULL; +} +#endif + + +FT_INTERNAL +void str_n_substring(const char *str, char ch_separator, size_t n, const char **begin, const char **end) +{ + const char *beg = str_n_substring_beg(str, ch_separator, n); + if (beg == NULL) { + *begin = NULL; + *end = NULL; + return; + } + + const char *en = strchr(beg, ch_separator); + if (en == NULL) { + en = str + strlen(str); + } + + *begin = beg; + *end = en; + return; +} + + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +void wstr_n_substring(const wchar_t *str, wchar_t ch_separator, size_t n, const wchar_t **begin, const wchar_t **end) +{ + const wchar_t *beg = wstr_n_substring_beg(str, ch_separator, n); + if (beg == NULL) { + *begin = NULL; + *end = NULL; + return; + } + + const wchar_t *en = wcschr(beg, ch_separator); + if (en == NULL) { + en = str + wcslen(str); + } + + *begin = beg; + *end = en; + return; +} +#endif /* FT_HAVE_WCHAR */ + +#if defined(FT_HAVE_UTF8) +FT_INTERNAL +void utf8_n_substring(const void *str, utf8_int32_t ch_separator, size_t n, const void **begin, const void **end) +{ + const char *beg = (const char *)utf8_n_substring_beg(str, ch_separator, n); + if (beg == NULL) { + *begin = NULL; + *end = NULL; + return; + } + + const char *en = (const char *)utf8chr(beg, ch_separator); + if (en == NULL) { + en = (const char *)str + strlen((const char *)str); + } + + *begin = beg; + *end = en; + return; +} +#endif /* FT_HAVE_UTF8 */ + + + +FT_INTERNAL +f_string_buffer_t *create_string_buffer(size_t n_chars, enum f_string_type type) +{ + size_t char_sz = 0; + switch (type) { + case CHAR_BUF: + char_sz = 1; + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + char_sz = sizeof(wchar_t); + break; +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + char_sz = 4; + break; +#endif + } + + size_t sz = n_chars * char_sz; + f_string_buffer_t *result = (f_string_buffer_t *)F_MALLOC(sizeof(f_string_buffer_t)); + if (result == NULL) + return NULL; + result->str.data = F_MALLOC(sz); + if (result->str.data == NULL) { + F_FREE(result); + return NULL; + } + result->data_sz = sz; + result->type = type; + + if (sz) { + switch (type) { + case CHAR_BUF: + result->str.cstr[0] = '\0'; + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + result->str.wstr[0] = L'\0'; + break; +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + result->str.cstr[0] = '\0'; + break; +#endif + } + } + + return result; +} + + +FT_INTERNAL +void destroy_string_buffer(f_string_buffer_t *buffer) +{ + if (buffer == NULL) + return; + F_FREE(buffer->str.data); + buffer->str.data = NULL; + F_FREE(buffer); +} + +FT_INTERNAL +f_string_buffer_t *copy_string_buffer(const f_string_buffer_t *buffer) +{ + assert(buffer); + f_string_buffer_t *result = create_string_buffer(buffer->data_sz, buffer->type); + if (result == NULL) + return NULL; + switch (buffer->type) { + case CHAR_BUF: + if (FT_IS_ERROR(fill_buffer_from_string(result, buffer->str.cstr))) { + destroy_string_buffer(result); + return NULL; + } + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + if (FT_IS_ERROR(fill_buffer_from_wstring(result, buffer->str.wstr))) { + destroy_string_buffer(result); + return NULL; + } + break; +#endif /* FT_HAVE_WCHAR */ + default: + destroy_string_buffer(result); + return NULL; + } + return result; +} + +FT_INTERNAL +f_status realloc_string_buffer_without_copy(f_string_buffer_t *buffer) +{ + assert(buffer); + char *new_str = (char *)F_MALLOC(buffer->data_sz * 2); + if (new_str == NULL) { + return FT_MEMORY_ERROR; + } + F_FREE(buffer->str.data); + buffer->str.data = new_str; + buffer->data_sz *= 2; + return FT_SUCCESS; +} + + +FT_INTERNAL +f_status fill_buffer_from_string(f_string_buffer_t *buffer, const char *str) +{ + assert(buffer); + assert(str); + + char *copy = F_STRDUP(str); + if (copy == NULL) + return FT_MEMORY_ERROR; + + F_FREE(buffer->str.data); + buffer->str.cstr = copy; + buffer->type = CHAR_BUF; + + return FT_SUCCESS; +} + + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_status fill_buffer_from_wstring(f_string_buffer_t *buffer, const wchar_t *str) +{ + assert(buffer); + assert(str); + + wchar_t *copy = F_WCSDUP(str); + if (copy == NULL) + return FT_MEMORY_ERROR; + + F_FREE(buffer->str.data); + buffer->str.wstr = copy; + buffer->type = W_CHAR_BUF; + + return FT_SUCCESS; +} +#endif /* FT_HAVE_WCHAR */ + +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +f_status fill_buffer_from_u8string(f_string_buffer_t *buffer, const void *str) +{ + assert(buffer); + assert(str); + + void *copy = F_UTF8DUP(str); + if (copy == NULL) + return FT_MEMORY_ERROR; + + F_FREE(buffer->str.u8str); + buffer->str.u8str = copy; + buffer->type = UTF8_BUF; + + return FT_SUCCESS; +} +#endif /* FT_HAVE_UTF8 */ + +FT_INTERNAL +size_t buffer_text_visible_height(const f_string_buffer_t *buffer) +{ + if (buffer == NULL || buffer->str.data == NULL || buf_str_len(buffer) == 0) { + return 0; + } + if (buffer->type == CHAR_BUF) + return 1 + strchr_count(buffer->str.cstr, '\n'); +#ifdef FT_HAVE_WCHAR + else if (buffer->type == W_CHAR_BUF) + return 1 + wstrchr_count(buffer->str.wstr, L'\n'); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + else if (buffer->type == UTF8_BUF) + return 1 + utf8chr_count(buffer->str.u8str, '\n'); +#endif /* FT_HAVE_WCHAR */ + + assert(0); + return 0; +} + +FT_INTERNAL +size_t string_buffer_cod_width_capacity(const f_string_buffer_t *buffer) +{ + return string_buffer_width_capacity(buffer); +} + +FT_INTERNAL +size_t string_buffer_raw_capacity(const f_string_buffer_t *buffer) +{ + return buffer->data_sz; +} + +#ifdef FT_HAVE_UTF8 +/* User provided function to compute utf8 string visible width */ +static int (*_custom_u8strwid)(const void *beg, const void *end, size_t *width) = NULL; + +FT_INTERNAL +void buffer_set_u8strwid_func(int (*u8strwid)(const void *beg, const void *end, size_t *width)) +{ + _custom_u8strwid = u8strwid; +} + +static +size_t utf8_width(const void *beg, const void *end) +{ + if (_custom_u8strwid) { + size_t width = 0; + if (!_custom_u8strwid(beg, end, &width)) + return width; + } + + size_t sz = (size_t)((const char *)end - (const char *)beg); + char *tmp = (char *)F_MALLOC(sizeof(char) * (sz + 1)); + // @todo: add check to tmp + assert(tmp); + + memcpy(tmp, beg, sz); + tmp[sz] = '\0'; + size_t result = utf8width(tmp); + F_FREE(tmp); + return result; +} +#endif /* FT_HAVE_WCHAR */ + +FT_INTERNAL +size_t buffer_text_visible_width(const f_string_buffer_t *buffer) +{ + size_t max_length = 0; + if (buffer->type == CHAR_BUF) { + size_t n = 0; + while (1) { + const char *beg = NULL; + const char *end = NULL; + str_n_substring(buffer->str.cstr, '\n', n, &beg, &end); + if (beg == NULL || end == NULL) + return max_length; + + max_length = MAX(max_length, (size_t)(end - beg)); + ++n; + } +#ifdef FT_HAVE_WCHAR + } else if (buffer->type == W_CHAR_BUF) { + size_t n = 0; + while (1) { + const wchar_t *beg = NULL; + const wchar_t *end = NULL; + wstr_n_substring(buffer->str.wstr, L'\n', n, &beg, &end); + if (beg == NULL || end == NULL) + return max_length; + + int line_width = mk_wcswidth(beg, (size_t)(end - beg)); + if (line_width < 0) /* For safety */ + line_width = 0; + max_length = MAX(max_length, (size_t)line_width); + + ++n; + } +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + } else if (buffer->type == UTF8_BUF) { + size_t n = 0; + while (1) { + const void *beg = NULL; + const void *end = NULL; + utf8_n_substring(buffer->str.u8str, '\n', n, &beg, &end); + if (beg == NULL || end == NULL) + return max_length; + + max_length = MAX(max_length, (size_t)utf8_width(beg, end)); + ++n; + } +#endif /* FT_HAVE_WCHAR */ + } + + return max_length; /* shouldn't be here */ +} + + +static void +buffer_substring(const f_string_buffer_t *buffer, size_t buffer_row, const void **begin, const void **end, ptrdiff_t *str_it_width) +{ + switch (buffer->type) { + case CHAR_BUF: + str_n_substring(buffer->str.cstr, '\n', buffer_row, (const char **)begin, (const char **)end); + if ((*(const char **)begin) && (*(const char **)end)) + *str_it_width = str_iter_width(*(const char **)begin, *(const char **)end); + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + wstr_n_substring(buffer->str.wstr, L'\n', buffer_row, (const wchar_t **)begin, (const wchar_t **)end); + if ((*(const wchar_t **)begin) && (*(const wchar_t **)end)) + *str_it_width = wcs_iter_width(*(const wchar_t **)begin, *(const wchar_t **)end); + break; +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + utf8_n_substring(buffer->str.u8str, '\n', buffer_row, begin, end); + if ((*(const char **)begin) && (*(const char **)end)) + *str_it_width = utf8_width(*begin, *end); + break; +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + } +} + + +static int +buffer_print_range(f_conv_context_t *cntx, const void *beg, const void *end) +{ + size_t len; + switch (cntx->b_type) { + case CHAR_BUF: + len = (size_t)((const char *)end - (const char *)beg); + return ft_nprint(cntx, (const char *)beg, len); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + len = (size_t)((const wchar_t *)end - (const wchar_t *)beg); + return ft_nwprint(cntx, (const wchar_t *)beg, len); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return ft_nu8print(cntx, beg, end); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + return -1; + } +} + + +FT_INTERNAL +int buffer_printf(f_string_buffer_t *buffer, size_t buffer_row, f_conv_context_t *cntx, size_t vis_width, + const char *content_style_tag, const char *reset_content_style_tag) +{ + const f_context_t *context = cntx->cntx; + f_table_properties_t *props = context->table_properties; + size_t row = context->row; + size_t column = context->column; + + if (buffer == NULL || buffer->str.data == NULL + || buffer_row >= buffer_text_visible_height(buffer)) { + return -1; + } + + size_t content_width = buffer_text_visible_width(buffer); + if (vis_width < content_width) + return -1; + + size_t left = 0; + size_t right = 0; + switch (get_cell_property_hierarchically(props, row, column, FT_CPROP_TEXT_ALIGN)) { + case FT_ALIGNED_LEFT: + left = 0; + right = (vis_width) - content_width; + break; + case FT_ALIGNED_CENTER: + left = ((vis_width) - content_width) / 2; + right = ((vis_width) - content_width) - left; + break; + case FT_ALIGNED_RIGHT: + left = (vis_width) - content_width; + right = 0; + break; + default: + assert(0); + break; + } + + size_t written = 0; + int tmp = 0; + ptrdiff_t str_it_width = 0; + const void *beg = NULL; + const void *end = NULL; + buffer_substring(buffer, buffer_row, &beg, &end, &str_it_width); + if (beg == NULL || end == NULL) + return -1; + if (str_it_width < 0 || content_width < (size_t)str_it_width) + return -1; + + size_t padding = content_width - (size_t)str_it_width; + + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, left, FT_SPACE)); + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, content_style_tag)); + CHCK_RSLT_ADD_TO_WRITTEN(buffer_print_range(cntx, beg, end)); + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, reset_content_style_tag)); + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, padding, FT_SPACE)); + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, right, FT_SPACE)); + return (int)written; + +clear: + return -1; +} + +FT_INTERNAL +size_t string_buffer_width_capacity(const f_string_buffer_t *buffer) +{ + assert(buffer); + switch (buffer->type) { + case CHAR_BUF: + return buffer->data_sz; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return buffer->data_sz / sizeof(wchar_t); +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return buffer->data_sz / 4; +#endif + default: + assert(0); + return 0; + } +} + + +FT_INTERNAL +void *buffer_get_data(f_string_buffer_t *buffer) +{ + assert(buffer); + return buffer->str.data; +} + +FT_INTERNAL +int buffer_check_align(f_string_buffer_t *buffer) +{ + assert(buffer); + assert(buffer->str.data); + + switch (buffer->type) { + case CHAR_BUF: + return 1; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return (((unsigned long)buffer->str.data) & (sizeof(wchar_t) - 1)) == 0; +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return 1; +#endif + default: + assert(0); + return 0; + } +} + +/******************************************************** + End of file "string_buffer.c" + ********************************************************/ + + +/******************************************************** + Begin of file "table.c" + ********************************************************/ + +/* #include "table.h" */ /* Commented by amalgamation script */ +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +/* #include "cell.h" */ /* Commented by amalgamation script */ +/* #include "vector.h" */ /* Commented by amalgamation script */ +/* #include "row.h" */ /* Commented by amalgamation script */ + +FT_INTERNAL +f_separator_t *create_separator(int enabled) +{ + f_separator_t *res = (f_separator_t *)F_CALLOC(1, sizeof(f_separator_t)); + if (res == NULL) + return NULL; + res->enabled = enabled; + return res; +} + + +FT_INTERNAL +void destroy_separator(f_separator_t *sep) +{ + F_FREE(sep); +} + + +FT_INTERNAL +f_separator_t *copy_separator(f_separator_t *sep) +{ + assert(sep); + return create_separator(sep->enabled); +} + + +static +f_row_t *get_row_impl(ft_table_t *table, size_t row, enum f_get_policy policy) +{ + if (table == NULL || table->rows == NULL) { + return NULL; + } + + switch (policy) { + case DONT_CREATE_ON_NULL: + if (row < vector_size(table->rows)) { + return VECTOR_AT(table->rows, row, f_row_t *); + } + return NULL; + case CREATE_ON_NULL: + while (row >= vector_size(table->rows)) { + f_row_t *new_row = create_row(); + if (new_row == NULL) + return NULL; + if (FT_IS_ERROR(vector_push(table->rows, &new_row))) { + destroy_row(new_row); + return NULL; + } + } + return VECTOR_AT(table->rows, row, f_row_t *); + } + + assert(0 && "Shouldn't be here!"); + return NULL; +} + + +FT_INTERNAL +f_row_t *get_row(ft_table_t *table, size_t row) +{ + return get_row_impl(table, row, DONT_CREATE_ON_NULL); +} + + +FT_INTERNAL +const f_row_t *get_row_c(const ft_table_t *table, size_t row) +{ + return get_row((ft_table_t *)table, row); +} + + +FT_INTERNAL +f_row_t *get_row_and_create_if_not_exists(ft_table_t *table, size_t row) +{ + return get_row_impl(table, row, CREATE_ON_NULL); +} + +FT_INTERNAL +f_string_buffer_t *get_cur_str_buffer_and_create_if_not_exists(ft_table_t *table) +{ + assert(table); + + f_row_t *row = get_row_and_create_if_not_exists(table, table->cur_row); + if (row == NULL) + return NULL; + + f_cell_t *cell = NULL; + fort_entire_table_properties_t *table_props = &table->properties->entire_table_properties; + switch (table_props->add_strategy) { + case FT_STRATEGY_INSERT: + cell = create_cell_in_position(row, table->cur_col); + break; + case FT_STRATEGY_REPLACE: + cell = get_cell_and_create_if_not_exists(row, table->cur_col); + break; + default: + assert(0 && "Unexpected situation inside libfort"); + break; + } + + if (cell == NULL) + return NULL; + + return cell_get_string_buffer(cell); +} + + +/* + * Returns number of cells (rows * cols) + */ +FT_INTERNAL +f_status get_table_sizes(const ft_table_t *table, size_t *rows, size_t *cols) +{ + *rows = 0; + *cols = 0; + if (table && table->rows) { + *rows = vector_size(table->rows); + size_t row_index = 0; + for (row_index = 0; row_index < vector_size(table->rows); ++row_index) { + f_row_t *row = VECTOR_AT(table->rows, row_index, f_row_t *); + size_t cols_in_row = columns_in_row(row); + if (cols_in_row > *cols) + *cols = cols_in_row; + } + } + return FT_SUCCESS; +} + + +FT_INTERNAL +f_status table_rows_and_cols_geometry(const ft_table_t *table, + size_t **col_width_arr_p, size_t *col_width_arr_sz, + size_t **row_height_arr_p, size_t *row_height_arr_sz, + enum f_geometry_type geom) +{ + if (table == NULL) { + return FT_GEN_ERROR; + } + + size_t max_invis_codepoints = 0; + size_t cols = 0; + size_t rows = 0; + int status = get_table_sizes(table, &rows, &cols); + if (FT_IS_ERROR(status)) + return status; + + size_t *col_width_arr = (size_t *)F_CALLOC(cols, sizeof(size_t)); + size_t *row_height_arr = (size_t *)F_CALLOC(rows, sizeof(size_t)); + if (col_width_arr == NULL || row_height_arr == NULL) { + F_FREE(col_width_arr); + F_FREE(row_height_arr); + return FT_GEN_ERROR; + } + + int combined_cells_found = 0; + f_context_t context; + context.table_properties = (table->properties ? table->properties : &g_table_properties); + size_t col = 0; + for (col = 0; col < cols; ++col) { + col_width_arr[col] = 0; + size_t row = 0; + for (row = 0; row < rows; ++row) { + const f_row_t *row_p = get_row_c(table, row); + const f_cell_t *cell = get_cell_c(row_p, col); + context.column = col; + context.row = row; + if (cell) { + switch (get_cell_type(cell)) { + case COMMON_CELL: + col_width_arr[col] = MAX(col_width_arr[col], cell_vis_width(cell, &context)); + break; + case GROUP_MASTER_CELL: + combined_cells_found = 1; + break; + case GROUP_SLAVE_CELL: + ; /* Do nothing */ + break; + } + row_height_arr[row] = MAX(row_height_arr[row], hint_height_cell(cell, &context)); + } else { + size_t cell_empty_string_height = get_cell_property_hierarchically(context.table_properties, context.row, context.column, FT_CPROP_EMPTY_STR_HEIGHT); + if (cell_empty_string_height) { + size_t cell_top_padding = get_cell_property_hierarchically(context.table_properties, context.row, context.column, FT_CPROP_TOP_PADDING); + size_t cell_bottom_padding = get_cell_property_hierarchically(context.table_properties, context.row, context.column, FT_CPROP_BOTTOM_PADDING); + row_height_arr[row] = MAX(row_height_arr[row], cell_empty_string_height + cell_top_padding + cell_bottom_padding); + } + } + } + + if (geom == INTERN_REPR_GEOMETRY) { + max_invis_codepoints = 0; + for (row = 0; row < rows; ++row) { + const f_row_t *row_p = get_row_c(table, row); + const f_cell_t *cell = get_cell_c(row_p, col); + if (!cell) + continue; + context.column = col; + context.row = row; + size_t inv_codepoints = cell_invis_codes_width(cell, &context); + max_invis_codepoints = MAX(max_invis_codepoints, inv_codepoints); + } + col_width_arr[col] += max_invis_codepoints; + } + } + + if (combined_cells_found) { + for (col = 0; col < cols; ++col) { + size_t row = 0; + for (row = 0; row < rows; ++row) { + const f_row_t *row_p = get_row_c(table, row); + const f_cell_t *cell = get_cell_c(row_p, col); + context.column = col; + context.row = row; + if (cell) { + if (get_cell_type(cell) == GROUP_MASTER_CELL) { + size_t hint_width = cell_vis_width(cell, &context); + if (geom == INTERN_REPR_GEOMETRY) { + hint_width += cell_invis_codes_width(cell, &context); + } + size_t slave_col = col + group_cell_number(row_p, col); + size_t cur_adj_col = col; + size_t group_width = col_width_arr[col]; + size_t i; + for (i = col + 1; i < slave_col; ++i) + group_width += col_width_arr[i] + FORT_COL_SEPARATOR_LENGTH; + /* adjust col. widths */ + while (1) { + if (group_width >= hint_width) + break; + col_width_arr[cur_adj_col] += 1; + group_width++; + cur_adj_col++; + if (cur_adj_col == slave_col) + cur_adj_col = col; + } + } + } + } + } + } + + /* todo: Maybe it is better to move min width checking to a particular cell + * width checking. At the moment min width includes paddings. Maybe it is + * better that min width weren't include paddings but be min width of the + * cell content without padding + */ + /* + if (table->properties) { + for (size_t i = 0; i < cols; ++i) { + col_width_arr[i] = MAX((int)col_width_arr[i], fort_props_column_width(table->properties, i)); + } + } + */ + + *col_width_arr_p = col_width_arr; + *col_width_arr_sz = cols; + *row_height_arr_p = row_height_arr; + *row_height_arr_sz = rows; + return FT_SUCCESS; +} + + +/* + * Returns geometry in characters + */ +FT_INTERNAL +f_status table_geometry(const ft_table_t *table, size_t *height, size_t *width) +{ + if (table == NULL) + return FT_GEN_ERROR; + + *height = 0; + *width = 0; + size_t cols = 0; + size_t rows = 0; + size_t *col_width_arr = NULL; + size_t *row_height_arr = NULL; + + int status = table_rows_and_cols_geometry(table, &col_width_arr, &cols, &row_height_arr, &rows, INTERN_REPR_GEOMETRY); + if (FT_IS_ERROR(status)) + return status; + + *width = 1 + (cols == 0 ? 1 : cols) + 1; /* for boundaries (that take 1 symbol) + newline */ + size_t i = 0; + for (i = 0; i < cols; ++i) { + *width += col_width_arr[i]; + } + + /* todo: add check for non printable horizontal row separators */ + *height = 1 + (rows == 0 ? 1 : rows); /* for boundaries (that take 1 symbol) */ + for (i = 0; i < rows; ++i) { + *height += row_height_arr[i]; + } + F_FREE(col_width_arr); + F_FREE(row_height_arr); + + f_table_properties_t *properties = table->properties; + if (properties) { + *height += properties->entire_table_properties.top_margin; + *height += properties->entire_table_properties.bottom_margin; + *width += properties->entire_table_properties.left_margin; + *width += properties->entire_table_properties.right_margin; + } + + /* Take into account that border elements can be more than one byte long */ + f_table_properties_t *table_properties = properties ? properties : &g_table_properties; + size_t max_border_elem_len = max_border_elem_strlen(table_properties); + *width *= max_border_elem_len; + + return FT_SUCCESS; +} + +FT_INTERNAL +f_status table_internal_codepoints_geometry(const ft_table_t *table, size_t *height, size_t *width) +{ + return table_geometry(table, height, width); +} + +/******************************************************** + End of file "table.c" + ********************************************************/ + + +/******************************************************** + Begin of file "vector.c" + ********************************************************/ + +/* #include "vector.h" */ /* Commented by amalgamation script */ +#include +#include + +struct f_vector { + size_t m_size; + void *m_data; + size_t m_capacity; + size_t m_item_size; +}; + + +static int vector_reallocate_(f_vector_t *vector, size_t new_capacity) +{ + assert(vector); + assert(new_capacity > vector->m_capacity); + + size_t new_size = new_capacity * vector->m_item_size; + vector->m_data = F_REALLOC(vector->m_data, new_size); + if (vector->m_data == NULL) + return -1; + return 0; +} + + +FT_INTERNAL +f_vector_t *create_vector(size_t item_size, size_t capacity) +{ + f_vector_t *vector = (f_vector_t *)F_MALLOC(sizeof(f_vector_t)); + if (vector == NULL) { + return NULL; + } + + size_t init_size = MAX(item_size * capacity, 1); + vector->m_data = F_MALLOC(init_size); + if (vector->m_data == NULL) { + F_FREE(vector); + return NULL; + } + + vector->m_size = 0; + vector->m_capacity = capacity; + vector->m_item_size = item_size; + + return vector; +} + + +FT_INTERNAL +void destroy_vector(f_vector_t *vector) +{ + assert(vector); + F_FREE(vector->m_data); + F_FREE(vector); +} + + +FT_INTERNAL +size_t vector_size(const f_vector_t *vector) +{ + assert(vector); + return vector->m_size; +} + + +FT_INTERNAL +size_t vector_capacity(const f_vector_t *vector) +{ + assert(vector); + return vector->m_capacity; +} + + +FT_INTERNAL +int vector_push(f_vector_t *vector, const void *item) +{ + assert(vector); + assert(item); + + if (vector->m_size == vector->m_capacity) { + if (vector_reallocate_(vector, vector->m_capacity * 2) == -1) + return FT_GEN_ERROR; + vector->m_capacity = vector->m_capacity * 2; + } + + size_t offset = vector->m_size * vector->m_item_size; + memcpy((char *)vector->m_data + offset, item, vector->m_item_size); + + ++(vector->m_size); + + return FT_SUCCESS; +} + +FT_INTERNAL +int vector_insert(f_vector_t *vector, const void *item, size_t pos) +{ + assert(vector); + assert(item); + size_t needed_capacity = MAX(pos + 1, vector->m_size + 1); + if (vector->m_capacity < needed_capacity) { + if (vector_reallocate_(vector, needed_capacity) == -1) + return FT_GEN_ERROR; + vector->m_capacity = needed_capacity; + } + size_t offset = pos * vector->m_item_size; + if (pos >= vector->m_size) { + /* Data in the middle are not initialized */ + memcpy((char *)vector->m_data + offset, item, vector->m_item_size); + vector->m_size = pos + 1; + return FT_SUCCESS; + } else { + /* Shift following data by one position */ + memmove((char *)vector->m_data + offset + vector->m_item_size, + (char *)vector->m_data + offset, + vector->m_item_size * (vector->m_size - pos)); + memcpy((char *)vector->m_data + offset, item, vector->m_item_size); + ++(vector->m_size); + return FT_SUCCESS; + } +} + +FT_INTERNAL +f_vector_t *vector_split(f_vector_t *vector, size_t pos) +{ + size_t trailing_sz = vector->m_size > pos ? vector->m_size - pos : 0; + f_vector_t *new_vector = create_vector(vector->m_item_size, trailing_sz); + if (!new_vector) + return new_vector; + if (new_vector->m_capacity < trailing_sz) { + destroy_vector(new_vector); + return NULL; + } + + if (trailing_sz == 0) + return new_vector; + + size_t offset = vector->m_item_size * pos; + memcpy(new_vector->m_data, (char *)vector->m_data + offset, + trailing_sz * vector->m_item_size); + new_vector->m_size = trailing_sz; + vector->m_size = pos; + return new_vector; +} + +FT_INTERNAL +const void *vector_at_c(const f_vector_t *vector, size_t index) +{ + if (index >= vector->m_size) + return NULL; + + return (char *)vector->m_data + index * vector->m_item_size; +} + + +FT_INTERNAL +void *vector_at(f_vector_t *vector, size_t index) +{ + if (index >= vector->m_size) + return NULL; + + return (char *)vector->m_data + index * vector->m_item_size; +} + + +FT_INTERNAL +f_status vector_swap(f_vector_t *cur_vec, f_vector_t *mv_vec, size_t pos) +{ + assert(cur_vec); + assert(mv_vec); + assert(cur_vec != mv_vec); + assert(cur_vec->m_item_size == mv_vec->m_item_size); + + size_t cur_sz = vector_size(cur_vec); + size_t mv_sz = vector_size(mv_vec); + if (mv_sz == 0) { + return FT_SUCCESS; + } + + size_t min_targ_size = pos + mv_sz; + if (vector_capacity(cur_vec) < min_targ_size) { + if (vector_reallocate_(cur_vec, min_targ_size) == -1) + return FT_GEN_ERROR; + cur_vec->m_capacity = min_targ_size; + } + + size_t offset = pos * cur_vec->m_item_size; + void *tmp = NULL; + size_t new_mv_sz = 0; + if (cur_sz > pos) { + new_mv_sz = MIN(cur_sz - pos, mv_sz); + tmp = F_MALLOC(cur_vec->m_item_size * new_mv_sz); + if (tmp == NULL) { + return FT_MEMORY_ERROR; + } + } + + if (tmp) { + memcpy(tmp, + (char *)cur_vec->m_data + offset, + cur_vec->m_item_size * new_mv_sz); + } + + memcpy((char *)cur_vec->m_data + offset, + mv_vec->m_data, + cur_vec->m_item_size * mv_sz); + + if (tmp) { + memcpy(mv_vec->m_data, + tmp, + cur_vec->m_item_size * new_mv_sz); + } + + cur_vec->m_size = MAX(cur_vec->m_size, min_targ_size); + mv_vec->m_size = new_mv_sz; + F_FREE(tmp); + return FT_SUCCESS; +} + +FT_INTERNAL +void vector_clear(f_vector_t *vector) +{ + vector->m_size = 0; +} + +FT_INTERNAL +int vector_erase(f_vector_t *vector, size_t index) +{ + assert(vector); + + if (vector->m_size == 0 || index >= vector->m_size) + return FT_GEN_ERROR; + + memmove((char *)vector->m_data + vector->m_item_size * index, + (char *)vector->m_data + vector->m_item_size * (index + 1), + (vector->m_size - 1 - index) * vector->m_item_size); + vector->m_size--; + return FT_SUCCESS; +} + +#ifdef FT_TEST_BUILD + +f_vector_t *copy_vector(f_vector_t *v) +{ + if (v == NULL) + return NULL; + + f_vector_t *new_vector = create_vector(v->m_item_size, v->m_capacity); + if (new_vector == NULL) + return NULL; + + memcpy(new_vector->m_data, v->m_data, v->m_item_size * v->m_size); + new_vector->m_size = v->m_size ; + new_vector->m_item_size = v->m_item_size ; + return new_vector; +} + +size_t vector_index_of(const f_vector_t *vector, const void *item) +{ + assert(vector); + assert(item); + + size_t i = 0; + for (i = 0; i < vector->m_size; ++i) { + void *data_pos = (char *)vector->m_data + i * vector->m_item_size; + if (memcmp(data_pos, item, vector->m_item_size) == 0) { + return i; + } + } + return INVALID_VEC_INDEX; +} + +#endif + +/******************************************************** + End of file "vector.c" + ********************************************************/ + + +/******************************************************** + Begin of file "wcwidth.c" + ********************************************************/ + +/* + * This is an implementation of wcwidth() and wcswidth() (defined in + * IEEE Std 1002.1-2001) for Unicode. + * + * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html + * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html + * + * In fixed-width output devices, Latin characters all occupy a single + * "cell" position of equal width, whereas ideographic CJK characters + * occupy two such cells. Interoperability between terminal-line + * applications and (teletype-style) character terminals using the + * UTF-8 encoding requires agreement on which character should advance + * the cursor by how many cell positions. No established formal + * standards exist at present on which Unicode character shall occupy + * how many cell positions on character terminals. These routines are + * a first attempt of defining such behavior based on simple rules + * applied to data provided by the Unicode Consortium. + * + * For some graphical characters, the Unicode standard explicitly + * defines a character-cell width via the definition of the East Asian + * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes. + * In all these cases, there is no ambiguity about which width a + * terminal shall use. For characters in the East Asian Ambiguous (A) + * class, the width choice depends purely on a preference of backward + * compatibility with either historic CJK or Western practice. + * Choosing single-width for these characters is easy to justify as + * the appropriate long-term solution, as the CJK practice of + * displaying these characters as double-width comes from historic + * implementation simplicity (8-bit encoded characters were displayed + * single-width and 16-bit ones double-width, even for Greek, + * Cyrillic, etc.) and not any typographic considerations. + * + * Much less clear is the choice of width for the Not East Asian + * (Neutral) class. Existing practice does not dictate a width for any + * of these characters. It would nevertheless make sense + * typographically to allocate two character cells to characters such + * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be + * represented adequately with a single-width glyph. The following + * routines at present merely assign a single-cell width to all + * neutral characters, in the interest of simplicity. This is not + * entirely satisfactory and should be reconsidered before + * establishing a formal standard in this area. At the moment, the + * decision which Not East Asian (Neutral) characters should be + * represented by double-width glyphs cannot yet be answered by + * applying a simple rule from the Unicode database content. Setting + * up a proper standard for the behavior of UTF-8 character terminals + * will require a careful analysis not only of each Unicode character, + * but also of each presentation form, something the author of these + * routines has avoided to do so far. + * + * http://www.unicode.org/unicode/reports/tr11/ + * + * Markus Kuhn -- 2007-05-26 (Unicode 5.0) + * + * Permission to use, copy, modify, and distribute this software + * for any purpose and without fee is hereby granted. The author + * disclaims all warranties with regard to this software. + * + * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c + */ + +/* #include "wcwidth.h" */ /* Commented by amalgamation script */ + +#ifdef FT_HAVE_WCHAR + + +struct interval { + int32_t first; + int32_t last; +}; + +/* auxiliary function for binary search in interval table */ +static int bisearch(int32_t ucs, const struct interval *table, int max) +{ + int min = 0; + + if (ucs < table[0].first || ucs > table[max].last) + return 0; + while (max >= min) { + int mid = (min + max) / 2; + if (ucs > table[mid].last) + min = mid + 1; + else if (ucs < table[mid].first) + max = mid - 1; + else + return 1; + } + + return 0; +} + + +/* The following two functions define the column width of an ISO 10646 + * character as follows: + * + * - The null character (U+0000) has a column width of 0. + * + * - Other C0/C1 control characters and DEL will lead to a return + * value of -1. + * + * - Non-spacing and enclosing combining characters (general + * category code Mn or Me in the Unicode database) have a + * column width of 0. + * + * - SOFT HYPHEN (U+00AD) has a column width of 1. + * + * - Other format characters (general category code Cf in the Unicode + * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. + * + * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) + * have a column width of 0. + * + * - Spacing characters in the East Asian Wide (W) or East Asian + * Full-width (F) category as defined in Unicode Technical + * Report #11 have a column width of 2. + * + * - All remaining characters (including all printable + * ISO 8859-1 and WGL4 characters, Unicode control characters, + * etc.) have a column width of 1. + * + * This implementation assumes that wchar_t characters are encoded + * in ISO 10646. + */ + +static int mk_wcwidth(wchar_t wcs) +{ + /* sorted list of non-overlapping intervals of non-spacing characters */ + /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ + static const struct interval combining[] = { + { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, + { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 }, + { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 }, + { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, + { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 }, + { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, + { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, + { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, + { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, + { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, + { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, + { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, + { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, + { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, + { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, + { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, + { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, + { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, + { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, + { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, + { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, + { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, + { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, + { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, + { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, + { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, + { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, + { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, + { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, + { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, + { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 }, + { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, + { 0xE0100, 0xE01EF } + }; + + /* We convert wchar_t to int32_t to avoid compiler warnings + * about implicit integer conversions + * https://github.com/seleznevae/libfort/issues/20 + * + * note: didn't test if we can do it + */ + int32_t ucs = (int32_t)wcs; + + /* test for 8-bit control characters */ + if (ucs == 0) + return 0; + if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) + return -1; + + /* binary search in table of non-spacing characters */ + if (bisearch(ucs, combining, + sizeof(combining) / sizeof(struct interval) - 1)) + return 0; + + /* if we arrive here, ucs is not a combining or C0/C1 control character */ + + return 1 + + (ucs >= 0x1100 && + (ucs <= 0x115f || /* Hangul Jamo init. consonants */ + ucs == 0x2329 || ucs == 0x232a || + (ucs >= 0x2e80 && ucs <= 0xa4cf && + ucs != 0x303f) || /* CJK ... Yi */ + (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ + (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ + (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ + (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ + (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ + (ucs >= 0xffe0 && ucs <= 0xffe6) || + (ucs >= 0x20000 && ucs <= 0x2fffd) || + (ucs >= 0x30000 && ucs <= 0x3fffd))); +} + + +FT_INTERNAL +int mk_wcswidth(const wchar_t *pwcs, size_t n) +{ + int width = 0; + + for (; *pwcs && n-- > 0; pwcs++) { + int w; + if ((w = mk_wcwidth(*pwcs)) < 0) + return -1; + else + width += w; + } + + return width; +} +#endif /* FT_HAVE_WCHAR */ + +/******************************************************** + End of file "wcwidth.c" + ********************************************************/ + diff --git a/src/libbu/fort.h b/src/libbu/fort.h new file mode 100644 index 00000000000..23073cd0601 --- /dev/null +++ b/src/libbu/fort.h @@ -0,0 +1,1056 @@ +/* +libfort + +MIT License + +Copyright (c) 2017 - 2020 Seleznev Anton + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +/** + * @file fort.h + * @brief Main header file describing libfort API. + * + * This file contains declarations of all libfort functions and macro + * definitions. + */ + +#ifndef LIBFORT_H +#define LIBFORT_H + +#include +#include +#include +#include + +/***************************************************************************** + * VERSION + *****************************************************************************/ + +#define LIBFORT_MAJOR_VERSION 0 +#define LIBFORT_MINOR_VERSION 4 +#define LIBFORT_REVISION 2 +#define LIBFORT_VERSION_STR "0.4.2" + + +/***************************************************************************** + * Configuration + *****************************************************************************/ + +/** + * libfort configuration macros + * (to disable wchar_t/UTF-8 support this macros should be defined) + */ +/** #define FT_CONGIG_DISABLE_WCHAR */ +/** #define FT_CONGIG_DISABLE_UTF8 */ + +#if !defined(FT_CONGIG_DISABLE_WCHAR) +#define FT_HAVE_WCHAR +#endif + +#if !defined(FT_CONGIG_DISABLE_UTF8) +#define FT_HAVE_UTF8 +#endif + + +/***************************************************************************** + * RETURN CODES + *****************************************************************************/ + +/** + * Operation successfully ended. + */ +#define FT_SUCCESS 0 + +/** + * Memory allocation failed. + */ +#define FT_MEMORY_ERROR -1 + +/** + * Invalid argument. + */ +#define FT_EINVAL -2 + +/** + * Libfort internal logic error. + * + * Usually such errors mean that something is wrong in + * libfort internal logic and in most of cases cause of + * these errors is a library bug. + */ +#define FT_INTERN_ERROR -3 + +/** + * General error. + * + * Different errors that do not belong to the group of errors + * mentioned above. + */ +#define FT_GEN_ERROR -4 + + +#define FT_IS_SUCCESS(arg) ((arg) >= 0) +#define FT_IS_ERROR(arg) ((arg) < 0) + + + + +/** + * @cond HELPER_MACROS + */ + +/***************************************************************************** + * Determine compiler + *****************************************************************************/ + +#if defined(__clang__) +#define FT_CLANG_COMPILER +#elif defined(__GNUC__) +#define FT_GCC_COMPILER +#elif defined(_MSC_VER) +#define FT_MICROSOFT_COMPILER +#else +#define FT_UNDEFINED_COMPILER +#endif + + +/***************************************************************************** + * Declare inline + *****************************************************************************/ + +#if defined(__cplusplus) +#define FT_INLINE inline +#else +#define FT_INLINE __inline +#endif /* if defined(__cplusplus) */ + + +/***************************************************************************** + * C++ needs to know that types and declarations are C, not C++. + *****************************************************************************/ + +#ifdef __cplusplus +# define FT_BEGIN_DECLS extern "C" { +# define FT_END_DECLS } +#else +# define FT_BEGIN_DECLS +# define FT_END_DECLS +#endif + + +/***************************************************************************** + * Helper macros + *****************************************************************************/ + +#define FT_STR_2_CAT_(arg1, arg2) \ + arg1##arg2 +#define FT_STR_2_CAT(arg1, arg2) \ + FT_STR_2_CAT_(arg1, arg2) + +/** + * @interanl + */ +static FT_INLINE int ft_check_if_string_helper(const char *str) +{ + (void)str; + return 0; +} + +/** + * @interanl + */ +static FT_INLINE int ft_check_if_wstring_helper(const wchar_t *str) +{ + (void)str; + return 0; +} + +#define FT_NARGS_IMPL_(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,N,...) N +#define FT_EXPAND_(x) x +#define FT_PP_NARG_(...) \ + FT_EXPAND_(FT_NARGS_IMPL_(__VA_ARGS__,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)) + +#define FT_CHECK_IF_STR_32(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_31(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_31(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_30(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_30(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_29(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_29(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_28(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_28(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_27(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_27(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_26(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_26(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_25(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_25(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_24(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_24(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_23(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_23(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_22(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_22(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_21(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_21(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_20(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_20(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_19(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_19(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_18(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_18(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_17(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_17(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_16(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_16(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_15(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_15(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_14(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_14(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_13(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_13(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_12(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_12(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_11(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_11(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_10(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_10(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_9(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_9(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_8(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_8(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_7(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_7(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_6(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_6(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_5(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_5(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_4(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_4(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_3(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_3(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_2(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_2(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_1(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_1(checker,arg) (checker(arg)) + +#define FT_CHECK_IF_ARGS_ARE_STRINGS__(checker,func, ...) \ + FT_EXPAND_(func(checker,__VA_ARGS__)) +#define FT_CHECK_IF_ARGS_ARE_STRINGS_(checker,basis, n, ...) \ + FT_CHECK_IF_ARGS_ARE_STRINGS__(checker,FT_STR_2_CAT_(basis, n), __VA_ARGS__) +#define FT_CHECK_IF_ARGS_ARE_STRINGS(...) \ + FT_CHECK_IF_ARGS_ARE_STRINGS_(ft_check_if_string_helper,FT_CHECK_IF_STR_,FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__) + +#ifdef FT_HAVE_WCHAR +#define CHECK_IF_ARGS_ARE_WSTRINGS(...) \ + FT_CHECK_IF_ARGS_ARE_STRINGS_(ft_check_if_wstring_helper,FT_CHECK_IF_STR_,FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__) +#endif + +/** + * @endcond + */ + + +/***************************************************************************** + * Attribute format for argument checking + *****************************************************************************/ + +#if defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) +#define FT_PRINTF_ATTRIBUTE_FORMAT(string_index, first_to_check) \ + __attribute__ ((format (printf, string_index, first_to_check))) +#else +#define FT_PRINTF_ATTRIBUTE_FORMAT(string_index, first_to_check) +#endif /* defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) */ + + +/***************************************************************************** + * libfort API + *****************************************************************************/ + +FT_BEGIN_DECLS + +/** + * The main structure of libfort containing information about formatted table. + */ +struct ft_table; + +/** + * The main structure of libfort containing information about formatted table. + * + * ft_table_t objects should be created by a call to ft_create_table and + * destroyed with ft_destroy_table. + */ +typedef struct ft_table ft_table_t; + +/** + * Create formatted table. + * + * @return + * The pointer to the new allocated ft_table_t, on success. NULL on error. + */ +ft_table_t *ft_create_table(void); + +/** + * Destroy formatted table. + * + * Destroy formatted table and free all resources allocated during table creation + * and work with it. + * + * @param table + * Pointer to formatted table previousley created with ft_create_table. If + * table is a null pointer, the function does nothing. + */ +void ft_destroy_table(ft_table_t *table); + +/** + * Copy formatted table. + * + * @param table + * Pointer to formatted table previousley created with ft_create_table. If + * table is a null pointer, the function returns null. + * @return + * The pointer to the new allocated ft_table_t, on success. NULL on error. + */ +ft_table_t *ft_copy_table(ft_table_t *table); + +/** + * Move current position to the first cell of the next line(row). + * + * @param table + * Pointer to formatted table. + * @return + * - 0: Success; data were written + * - (<0): In case of error. + * @note + * This function can fail only in case FT_STRATEGY_INSERT adding strategy + * was set for the table. + */ +int ft_ln(ft_table_t *table); + +/** + * Get row number of the current cell. + * + * @param table + * Pointer to formatted table. + * @return + * Row number of the current cell. + */ +size_t ft_cur_row(const ft_table_t *table); + +/** + * Get column number of the current cell. + * + * @param table + * Pointer to formatted table. + * @return + * Column number of the current cell. + */ +size_t ft_cur_col(const ft_table_t *table); + +/** + * Set current cell position. + * + * Current cell - cell that will be edited with all modifiing functions + * (ft_printf, ft_write ...). + * + * @param table + * Pointer to formatted table. + * @param row + * New row number for the current cell. + * @param col + * New row number for the current cell. + */ +void ft_set_cur_cell(ft_table_t *table, size_t row, size_t col); + +/** + * Check if table is empty. + * + * @param table + * Pointer to the table. + * @return + * 1 - table is empty + * 0 - some data has been inserted + */ +int ft_is_empty(const ft_table_t *table); + +/** + * Get number of rows in the table. + * + * @param table + * Pointer to formatted table. + * @return + * Number of rows in the table. + */ +size_t ft_row_count(const ft_table_t *table); + +/** + * Get number of columns in the table. + * + * @param table + * Pointer to formatted table. + * @return + * Number of columns in the table. + */ +size_t ft_col_count(const ft_table_t *table); + +/** + * Erase range of cells. + * + * Range of cells is determined by 2 points (top-left and bottom-right) (both + * ends are included). + * + * @param table + * Pointer to formatted table. + * @param top_left_row + * Row number of the top left cell in the range. + * @param top_left_col + * Column number of the top left cell in the range. + * @param bottom_right_row + * Row number of the bottom right cell in the range. + * @param bottom_right_col + * Column number of the bottom right cell in the range. + * @return + * - 0 - Operation was successfully implemented + * - (<0): In case of error + */ +int ft_erase_range(ft_table_t *table, + size_t top_left_row, size_t top_left_col, + size_t bottom_right_row, size_t bottom_right_col); + +#if defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) + +/** + * Write data formatted acording to the format string to a variety of table + * cells. + * + * @param table + * Pointer to formatted table. + * @param fmt + * Pointer to a null-terminated multibyte string specifying how to interpret + * the data. The format string consists of ordinary characters (except % and |), + * which are copied unchanged into the output stream, and conversion + * specifications. Conversion specifications are the same as for standard + * printf function. Character '|' (wich can be changed with + * {@link ft_set_default_printf_field_separator}) in the format string is treated as + * a cell separator. + * @param ... + * Arguments specifying data to print. Similarly to standard printf-like + * functions if any argument after default conversions is not the type + * expected by the corresponding conversion specifier, or if there are fewer + * arguments than required by format, the behavior is undefined. If there are + * more arguments than required by format, the extraneous arguments are + * evaluated and ignored. + * @return + * - Number of printed cells + * - (<0): In case of error + */ +int ft_printf(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); + +/** + * Write data formatted acording to the format string to a variety of table + * cells and move current position to the first cell of the next line(row). + * + * @param table + * Pointer to formatted table. + * @param fmt + * Pointer to a null-terminated multibyte string specifying how to interpret + * the data. The format string consists of ordinary characters (except % and |), + * which are copied unchanged into the output stream, and conversion + * specifications. Conversion specifications are the same as for standard + * printf function. Character '|' (wich can be changed with + * {@link ft_set_default_printf_field_separator}) in the format string is treated as + * a cell separator. + * @param ... + * Arguments specifying data to print. Similarly to standard printf-like + * functions if any argument after default conversions is not the type + * expected by the corresponding conversion specifier, or if there are fewer + * arguments than required by format, the behavior is undefined. If there are + * more arguments than required by format, the extraneous arguments are + * evaluated and ignored. + * @return + * - Number of printed cells. + * - (<0): In case of error. + */ +int ft_printf_ln(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); + +#else + +/** + * @cond IGNORE_DOC + */ + +int ft_printf_impl(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); +int ft_printf_ln_impl(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); + +#define ft_printf(table, ...) \ + (( 0 ? fprintf(stderr, __VA_ARGS__) : 1), ft_printf_impl(table, __VA_ARGS__)) +#define ft_printf_ln(table, ...) \ + (( 0 ? fprintf(stderr, __VA_ARGS__) : 1), ft_printf_ln_impl(table, __VA_ARGS__)) + +/** + * @endcond + */ +#endif + +/** + * Set field separator for {@link ft_printf}, {@link ft_printf_ln} + * (default separator is '|'). + * + * @param separator + * New separator. + */ +void ft_set_default_printf_field_separator(char separator); + + +/** + * Write strings to the table. + * + * Write specified strings to the same number of consecutive cells in the + * current row. + * + * @param table + * Pointer to formatted table. + * @param ... + * Strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +#define ft_write(table, ...)\ + (0 ? FT_CHECK_IF_ARGS_ARE_STRINGS(__VA_ARGS__) : ft_nwrite(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) + +/** + * Write strings to the table and go to the next line. + * + * Write specified strings to the same number of consecutive cells in the + * current row and move current position to the first cell of the next + * line(row). + * + * @param table + * Pointer to formatted table. + * @param ... + * Strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +#define ft_write_ln(table, ...)\ + (0 ? FT_CHECK_IF_ARGS_ARE_STRINGS(__VA_ARGS__) : ft_nwrite_ln(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) + +/** + * Write specified number of strings to the table. + * + * Write specified number of strings to the same number of consecutive cells in + * the current row. + * + * @note In most cases it is more preferable to use MACRO @ref ft_write instead + * of @ref ft_nwrite, which is more safe (@ref ft_write automatically counts the + * number of string arguments and at compile check that all passed arguments are + * strings). + * + * @param table + * Pointer to formatted table. + * @param count + * Number of strings to write. + * @param cell_content + * First string to write. + * @param ... + * Other strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_nwrite(ft_table_t *table, size_t count, const char *cell_content, ...); + +/** + * Write specified number of strings to the table and go to the next line. + * + * Write specified number of strings to the same number of consecutive cells + * in the current row and move current position to the first cell of the next + * line(row). + * + * @note In most cases it is more preferable to use MACRO @ref ft_write instead + * of @ref ft_nwrite, which is more safe (@ref ft_write automatically counts the + * number of string arguments and at compile check that all passed arguments are + * strings). + * + * @param table + * Pointer to formatted table. + * @param count + * Number of strings to write. + * @param cell_content + * First string to write. + * @param ... + * Other strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_nwrite_ln(ft_table_t *table, size_t count, const char *cell_content, ...); + + + +/** + * Write strings from the array to the table. + * + * Write specified number of strings from the array to the same number of + * consecutive cells in the current row. + * + * @param table + * Pointer to formatted table. + * @param cols + * Number of elements in row_cells. + * @param row_cells + * Array of strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_row_write(ft_table_t *table, size_t cols, const char *row_cells[]); + +/** + * Write strings from the array to the table and go to the next line. + * + * Write specified number of strings from the array to the same number of + * consecutive cells in the current row and move current position to the first + * cell of the next line(row). + * + * @param table + * Pointer to formatted table. + * @param cols + * Number of elements in row_cells. + * @param row_cells + * Array of strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_row_write_ln(ft_table_t *table, size_t cols, const char *row_cells[]); + + +/** + * Write strings from the 2D array to the table. + * + * Write specified number of strings from the 2D array to the formatted table. + * + * @param table + * Pointer to formatted table. + * @param rows + * Number of rows in the 2D array. + * @param cols + * Number of columns in the 2D array. + * @param table_cells + * 2D array of strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_table_write(ft_table_t *table, size_t rows, size_t cols, const char *table_cells[]); + +/** + * Write strings from the 2D array to the table and go to the next line. + * + * Write specified number of strings from the 2D array to the formatted table + * and move current position to the first cell of the next line(row). + * + * @param table + * Pointer to formatted table. + * @param rows + * Number of rows in the 2D array. + * @param cols + * Number of columns in the 2D array. + * @param table_cells + * 2D array of strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_table_write_ln(ft_table_t *table, size_t rows, size_t cols, const char *table_cells[]); + + +/** + * Add separator after the current row. + * + * @param table + * Formatted table. + * @return + * - 0: Success; separator was added. + * - (<0): In case of error + */ +int ft_add_separator(ft_table_t *table); + + +/** + * Convert table to string representation. + * + * ft_table_t has ownership of the returned pointer. So there is no need to + * free it. To take ownership user should explicitly copy the returned + * string with strdup or similar functions. + * + * Returned pointer may be later invalidated by: + * - Calling ft_destroy_table; + * - Other invocations of ft_to_string. + * + * @param table + * Formatted table. + * @return + * - The pointer to the string representation of formatted table, on success. + * - NULL on error. + */ +const char *ft_to_string(const ft_table_t *table); + + + + + + + +/** + * Structure describing border appearance. + */ +struct ft_border_chars { + const char *top_border_ch; + const char *separator_ch; + const char *bottom_border_ch; + const char *side_border_ch; + const char *out_intersect_ch; + const char *in_intersect_ch; +}; + +/** + * Structure describing border style. + */ +struct ft_border_style { + struct ft_border_chars border_chs; + struct ft_border_chars header_border_chs; + const char *hor_separator_char; +}; + +/** + * @defgroup BasicStyles + * @name Built-in table border styles. + * @note Built-in border styles (FT_BASIC_STYLE, FT_BASIC2_STYLE ...) can be + * used as arguments for @ref ft_set_border_style and + * @ref ft_set_default_border_style, but their fields shouldn't be accessed + * directly because implementation doesn't guarantee that these objects are + * properly initialized. + * @{ + */ +extern const struct ft_border_style *const FT_BASIC_STYLE; +extern const struct ft_border_style *const FT_BASIC2_STYLE; +extern const struct ft_border_style *const FT_SIMPLE_STYLE; +extern const struct ft_border_style *const FT_PLAIN_STYLE; +extern const struct ft_border_style *const FT_DOT_STYLE; +extern const struct ft_border_style *const FT_EMPTY_STYLE; +extern const struct ft_border_style *const FT_EMPTY2_STYLE; +extern const struct ft_border_style *const FT_SOLID_STYLE; +extern const struct ft_border_style *const FT_SOLID_ROUND_STYLE; +extern const struct ft_border_style *const FT_NICE_STYLE; +extern const struct ft_border_style *const FT_DOUBLE_STYLE; +extern const struct ft_border_style *const FT_DOUBLE2_STYLE; +extern const struct ft_border_style *const FT_BOLD_STYLE; +extern const struct ft_border_style *const FT_BOLD2_STYLE; +extern const struct ft_border_style *const FT_FRAME_STYLE; +/** @} */ + + + +/** + * Set default border style for all new formatted tables. + * + * @param style + * Pointer to border style. + * @return + * - 0: Success; default border style was changed. + * - (<0): In case of error + */ +int ft_set_default_border_style(const struct ft_border_style *style); + +/** + * Set border style for the table. + * + * @param table + * A pointer to the ft_table_t structure. + * @param style + * Pointer to border style. + * @return + * - 0: Success; table border style was changed. + * - (<0): In case of error + */ +int ft_set_border_style(ft_table_t *table, const struct ft_border_style *style); + + + +/** + * @name Special macros to define cell position (row and column). + * @{ + */ +#define FT_ANY_COLUMN (UINT_MAX) /**< Any column (can be used to refer to all cells in a row)*/ +#define FT_CUR_COLUMN (UINT_MAX - 1) /**< Current column */ +#define FT_ANY_ROW (UINT_MAX) /**< Any row (can be used to refer to all cells in a column)*/ +#define FT_CUR_ROW (UINT_MAX - 1) /**< Current row */ +/** @} */ + +#define FT_MAX_ROW_INDEX (UINT_MAX - 2) +#define FT_MAX_COL_INDEX (UINT_MAX - 2) + + +/** + * @name Cell properties identifiers. + * @{ + */ +#define FT_CPROP_MIN_WIDTH (0x01U << 0) /**< Minimum width */ +#define FT_CPROP_TEXT_ALIGN (0x01U << 1) /**< Text alignment */ +#define FT_CPROP_TOP_PADDING (0x01U << 2) /**< Top padding for cell content */ +#define FT_CPROP_BOTTOM_PADDING (0x01U << 3) /**< Bottom padding for cell content */ +#define FT_CPROP_LEFT_PADDING (0x01U << 4) /**< Left padding for cell content */ +#define FT_CPROP_RIGHT_PADDING (0x01U << 5) /**< Right padding for cell content */ +#define FT_CPROP_EMPTY_STR_HEIGHT (0x01U << 6) /**< Height of empty cell */ +#define FT_CPROP_ROW_TYPE (0x01U << 7) /**< Row type */ +#define FT_CPROP_CONT_FG_COLOR (0x01U << 8) /**< Cell content foreground text color */ +#define FT_CPROP_CELL_BG_COLOR (0x01U << 9) /**< Cell background color */ +#define FT_CPROP_CONT_BG_COLOR (0x01U << 10) /**< Cell content background color */ +#define FT_CPROP_CELL_TEXT_STYLE (0x01U << 11) /**< Cell text style */ +#define FT_CPROP_CONT_TEXT_STYLE (0x01U << 12) /**< Cell content text style */ +/** @} */ + + +/** + * Colors. + */ +enum ft_color { + FT_COLOR_DEFAULT = 0, /**< Default color */ + FT_COLOR_BLACK = 1, /**< Black color*/ + FT_COLOR_RED = 2, /**< Red color */ + FT_COLOR_GREEN = 3, /**< Green color */ + FT_COLOR_YELLOW = 4, /**< Yellow color */ + FT_COLOR_BLUE = 5, /**< Blue color */ + FT_COLOR_MAGENTA = 6, /**< Magenta color */ + FT_COLOR_CYAN = 7, /**< Cyan color */ + FT_COLOR_LIGHT_GRAY = 8, /**< Light gray color */ + FT_COLOR_DARK_GRAY = 9, /**< Dark gray color */ + FT_COLOR_LIGHT_RED = 10, /**< Light red color */ + FT_COLOR_LIGHT_GREEN = 11, /**< Light green color */ + FT_COLOR_LIGHT_YELLOW = 12, /**< Light yellow color */ + FT_COLOR_LIGHT_BLUE = 13, /**< Light blue color */ + FT_COLOR_LIGHT_MAGENTA = 15, /**< Light magenta color */ + FT_COLOR_LIGHT_CYAN = 16, /**< Light cyan color */ + FT_COLOR_LIGHT_WHYTE = 17 /**< Light whyte color */ +}; + +/** + * Text styles. + */ +enum ft_text_style { + FT_TSTYLE_DEFAULT = (1U << 0), /**< Default style */ + FT_TSTYLE_BOLD = (1U << 1), /**< Bold */ + FT_TSTYLE_DIM = (1U << 2), /**< Dim */ + FT_TSTYLE_ITALIC = (1U << 3), /**< Italic */ + FT_TSTYLE_UNDERLINED = (1U << 4), /**< Underlined */ + FT_TSTYLE_BLINK = (1U << 5), /**< Blink */ + FT_TSTYLE_INVERTED = (1U << 6), /**< Reverse (invert the foreground and background colors) */ + FT_TSTYLE_HIDDEN = (1U << 7) /**< Hidden (useful for passwords) */ +}; + + +/** + * Alignment of cell content. + */ +enum ft_text_alignment { + FT_ALIGNED_LEFT = 0, /**< Align left */ + FT_ALIGNED_CENTER, /**< Align center */ + FT_ALIGNED_RIGHT /**< Align right */ +}; + +/** + * Type of table row. Determines appearance of row. + */ +enum ft_row_type { + FT_ROW_COMMON = 0, /**< Common row */ + FT_ROW_HEADER /**< Header row */ +}; + +/** + * Set default cell property for all new formatted tables. + * + * @param property + * Cell property identifier. + * @param value + * Cell property value. + * @return + * - 0: Success; default cell property was changed. + * - (<0): In case of error + */ +int ft_set_default_cell_prop(uint32_t property, int value); + +/** + * Set property for the specified cell of the table. + * + * @param table + * A pointer to the ft_table_t structure. + * @param row + * Cell row. + * @param col + * Cell column. + * @param property + * Cell property identifier. + * @param value + * Cell property value. + * @return + * - 0: Success; cell property was changed. + * - (<0): In case of error + */ +int ft_set_cell_prop(ft_table_t *table, size_t row, size_t col, uint32_t property, int value); + + +/** + * @name Table properties identifiers. + * @{ + */ +#define FT_TPROP_LEFT_MARGIN (0x01U << 0) +#define FT_TPROP_TOP_MARGIN (0x01U << 1) +#define FT_TPROP_RIGHT_MARGIN (0x01U << 2) +#define FT_TPROP_BOTTOM_MARGIN (0x01U << 3) +#define FT_TPROP_ADDING_STRATEGY (0x01U << 4) +/** @} */ + +/** + * Adding strategy. + * + * Determines what happens with old content if current cell is not empty after + * adding data to it. Default strategy is FT_STRATEGY_REPLACE. + */ +enum ft_adding_strategy { + FT_STRATEGY_REPLACE = 0, /**< Replace old content. */ + FT_STRATEGY_INSERT /**< Insert new conten. Old content is shifted. */ +}; + + +/** + * Set default table property. + * + * @param property + * Table property identifier. + * @param value + * Table property value. + * @return + * - 0: Success; default table property was changed. + * - (<0): In case of error + */ +int ft_set_default_tbl_prop(uint32_t property, int value); + +/** + * Set table property. + * + * @param table + * A pointer to the ft_table_t structure. + * @param property + * Table property identifier. + * @param value + * Table property value. + * @return + * - 0: Success; default table property was changed. + * - (<0): In case of error + */ +int ft_set_tbl_prop(ft_table_t *table, uint32_t property, int value); + + +/** + * Set column span for the specified cell of the table. + * + * @param table + * A pointer to the ft_table_t structure. + * @param row + * Cell row. + * @param col + * Cell column. + * @param hor_span + * Column span. + * @return + * - 0: Success; cell span was changed. + * - (<0): In case of error + */ +int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span); + + +/** + * Set functions for memory allocation and deallocation to be used instead of + * standard ones. + * + * @param f_malloc + * Pointer to a function for memory allocation that should be used instead of + * malloc. + * @param f_free + * Pointer to a function for memory deallocation that should be used instead + * of free. + * @note + * To return memory allocation/deallocation functions to their standard values + * set f_malloc and f_free to NULL. + */ +void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr)); + + +/** + * Return string describing the `error_code`. + * + * @param error_code + * Error code returned by the library. + * @return + * String describing the error. + */ +const char *ft_strerror(int error_code); + + + +#ifdef FT_HAVE_WCHAR + + +int ft_wprintf(ft_table_t *table, const wchar_t *fmt, ...); +int ft_wprintf_ln(ft_table_t *table, const wchar_t *fmt, ...); + + +#define ft_wwrite(table, ...)\ + (0 ? CHECK_IF_ARGS_ARE_WSTRINGS(__VA_ARGS__) : ft_nwwrite(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) +#define ft_wwrite_ln(table, ...)\ + (0 ? CHECK_IF_ARGS_ARE_WSTRINGS(__VA_ARGS__) : ft_nwwrite_ln(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) +int ft_nwwrite(ft_table_t *table, size_t n, const wchar_t *cell_content, ...); +int ft_nwwrite_ln(ft_table_t *table, size_t n, const wchar_t *cell_content, ...); + +int ft_row_wwrite(ft_table_t *table, size_t cols, const wchar_t *row_cells[]); +int ft_row_wwrite_ln(ft_table_t *table, size_t cols, const wchar_t *row_cells[]); + +int ft_table_wwrite(ft_table_t *table, size_t rows, size_t cols, const wchar_t *table_cells[]); +int ft_table_wwrite_ln(ft_table_t *table, size_t rows, size_t cols, const wchar_t *table_cells[]); + +const wchar_t *ft_to_wstring(const ft_table_t *table); +#endif + + + +#ifdef FT_HAVE_UTF8 +#define ft_u8write(table, ...)\ + (ft_u8nwrite(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) +#define ft_u8write_ln(table, ...)\ + (ft_u8nwrite_ln(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) +int ft_u8nwrite(ft_table_t *table, size_t n, const void *cell_content, ...); +int ft_u8nwrite_ln(ft_table_t *table, size_t n, const void *cell_content, ...); + +int ft_u8printf(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); +int ft_u8printf_ln(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); + +const void *ft_to_u8string(const ft_table_t *table); + +/** + * Set custom function to compute visible width of UTF-8 string. + * + * libfort internally has a very simple logic to compute visible width of UTF-8 + * strings. It considers that each codepoint will occupy one position on the + * terminal in case of monowidth font (some east asians wide and fullwidth + * characters (see http://www.unicode.org/reports/tr11/tr11-33.html) will occupy + * 2 positions). This logic is very simple and covers wide range of cases. But + * obviously there a lot of cases when it is not sufficient. In such cases user + * should use some external libraries and provide an appropriate function to + * libfort. + * + * @param u8strwid + * User provided function to evaluate width of UTF-8 string ( beg - start of + * UTF-8 string, end - end of UTF-8 string (not included), width - pointer to + * the result). If function succeed it should return 0, otherwise some non- + * zero value. If function returns nonzero value libfort fallbacks to default + * internal algorithm. + */ +void ft_set_u8strwid_func(int (*u8strwid)(const void *beg, const void *end, size_t *width)); + +#endif /* FT_HAVE_UTF8 */ + + +FT_END_DECLS + +#endif /* LIBFORT_H */ diff --git a/src/libbu/getcwd.c b/src/libbu/getcwd.c index 93320e8b746..88e7e6c02a4 100644 --- a/src/libbu/getcwd.c +++ b/src/libbu/getcwd.c @@ -1,7 +1,7 @@ /* G E T C W D . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/gethostname.c b/src/libbu/gethostname.c index 02a9e1b9d2a..a21f6ce6c5f 100644 --- a/src/libbu/gethostname.c +++ b/src/libbu/gethostname.c @@ -1,7 +1,7 @@ /* G E T H O S T N A M E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/getopt.c b/src/libbu/getopt.c index 53355bf00ba..2b867bb7fe3 100644 --- a/src/libbu/getopt.c +++ b/src/libbu/getopt.c @@ -1,7 +1,7 @@ /* G E T O P T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/globals.c b/src/libbu/globals.c index cbad2c9329f..a8085061647 100644 --- a/src/libbu/globals.c +++ b/src/libbu/globals.c @@ -1,7 +1,7 @@ /* G L O B A L S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/hash.c b/src/libbu/hash.c index 650f393b869..6e02c2733cf 100644 --- a/src/libbu/hash.c +++ b/src/libbu/hash.c @@ -1,7 +1,7 @@ /* H A S H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/heap.c b/src/libbu/heap.c index 434650b0e33..26ea1a9e182 100644 --- a/src/libbu/heap.c +++ b/src/libbu/heap.c @@ -1,7 +1,7 @@ /* H E A P . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/hist.c b/src/libbu/hist.c index 4c85476cd09..cae29bb3740 100644 --- a/src/libbu/hist.c +++ b/src/libbu/hist.c @@ -1,7 +1,7 @@ /* H I S T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/hook.c b/src/libbu/hook.c index 2f4044fbc66..ab2850a472a 100644 --- a/src/libbu/hook.c +++ b/src/libbu/hook.c @@ -1,7 +1,7 @@ /* H O O K . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/htond.c b/src/libbu/htond.c index f23d227d0ff..bf69b8465dc 100644 --- a/src/libbu/htond.c +++ b/src/libbu/htond.c @@ -1,7 +1,7 @@ /* H T O N D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/htonf.c b/src/libbu/htonf.c index 1956234880a..c58e2416ee6 100644 --- a/src/libbu/htonf.c +++ b/src/libbu/htonf.c @@ -1,7 +1,7 @@ /* H T O N F . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/interrupt.c b/src/libbu/interrupt.c index 1113ada04c2..d3feff57751 100644 --- a/src/libbu/interrupt.c +++ b/src/libbu/interrupt.c @@ -1,7 +1,7 @@ /* I N T E R R U P T . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -35,7 +35,7 @@ #include "bu/interrupt.h" #include "bu/log.h" #include "bu/exit.h" - +#include "bu/assert.h" /* wrap for hack above */ #if !defined(C99_POSIX_USE_BSD) diff --git a/src/libbu/kill.c b/src/libbu/kill.c index 5fdbaaaf940..179a61df752 100644 --- a/src/libbu/kill.c +++ b/src/libbu/kill.c @@ -1,7 +1,7 @@ /* K I L L . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/lex.c b/src/libbu/lex.c index 2faaf098aa3..af7b9d35276 100644 --- a/src/libbu/lex.c +++ b/src/libbu/lex.c @@ -1,7 +1,7 @@ /* L E X . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/linebuf.c b/src/libbu/linebuf.c index 43cecaa1134..94eefc4b4a8 100644 --- a/src/libbu/linebuf.c +++ b/src/libbu/linebuf.c @@ -1,7 +1,7 @@ /* L I N E B U F . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/list.c b/src/libbu/list.c index 1d5a84e6f1f..2ae477844fb 100644 --- a/src/libbu/list.c +++ b/src/libbu/list.c @@ -1,7 +1,7 @@ /* L I S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/log.c b/src/libbu/log.c index e6bda84208e..53fd8d42e0c 100644 --- a/src/libbu/log.c +++ b/src/libbu/log.c @@ -1,7 +1,7 @@ /* L O G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/magic.c b/src/libbu/magic.c index 4e67fcde951..47d3ddc5815 100644 --- a/src/libbu/magic.c +++ b/src/libbu/magic.c @@ -1,7 +1,7 @@ /* M A G I C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/malloc.c b/src/libbu/malloc.c index 562574d49d3..2a26ec909bc 100644 --- a/src/libbu/malloc.c +++ b/src/libbu/malloc.c @@ -1,7 +1,7 @@ /* M A L L O C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/mappedfile.c b/src/libbu/mappedfile.c index c33512776c4..0aa32dc742a 100644 --- a/src/libbu/mappedfile.c +++ b/src/libbu/mappedfile.c @@ -1,7 +1,7 @@ /* M A P P E D F I L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -203,7 +203,7 @@ mapped_file_invalidate(struct bu_mapped_file *mp) bu_semaphore_acquire(BU_SEM_MAPPEDFILE); if (mp->appl) bu_free(mp->appl, "appl"); - mp->appl = bu_strdup("_INVALID_"); + mp->appl = NULL; bu_semaphore_release(BU_SEM_MAPPEDFILE); return; @@ -365,22 +365,20 @@ bu_open_mapped_file(const char *name, const char *appl) mp->uses = 1; mp->buflen = sb.st_size; mp->modtime = sb.st_mtime; - mp->buf = MAP_FAILED; + mp->buf = NULL; /* Attempt to memory-map the file */ bu_semaphore_acquire(BU_SEM_SYSCALL); -#ifdef HAVE_SYS_MMAN_H +#if defined(HAVE_SYS_MMAN_H) mp->buf = mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0); -#else -# ifdef HAVE_WINDOWS_H +#elif defined(HAVE_WINDOWS_H) /* FIXME: shouldn't need to preserve handle */ mp->buf = win_mmap(NULL, sb.st_size, PROT_READ, MAP_PRIVATE, fd, 0, &(mp->handle)); -# endif #endif /* HAVE_SYS_MMAN_H */ bu_semaphore_release(BU_SEM_SYSCALL); /* If cannot memory-map, read it in manually */ - if (mp->buf != MAP_FAILED) { + if (mp->buf && mp->buf != MAP_FAILED) { mp->is_mapped = 1; } else { ssize_t bytes_to_go = sb.st_size; @@ -401,7 +399,6 @@ bu_open_mapped_file(const char *name, const char *appl) if (UNLIKELY(readval < 0)) { bu_semaphore_release(BU_SEM_SYSCALL); perror("read"); - bu_free(mp->buf, name); goto fail; } else { nbytes += readval; @@ -412,7 +409,6 @@ bu_open_mapped_file(const char *name, const char *appl) if (UNLIKELY(nbytes != sb.st_size)) { perror(name); - bu_free(mp->buf, name); goto fail; } } @@ -436,27 +432,29 @@ bu_open_mapped_file(const char *name, const char *appl) bu_semaphore_release(BU_SEM_SYSCALL); } - if (mp->name) + if (mp->name) { bu_free(mp->name, "mp->name"); - if (mp->appl) + mp->name = NULL; + } + if (mp->appl) { bu_free(mp->appl, "mp->appl"); + mp->appl = NULL; + } if (mp->buf) { - if (mp->is_mapped) -#ifdef HAVE_SYS_MMAN_H + if (mp->is_mapped) { + bu_semaphore_acquire(BU_SEM_SYSCALL); +#if defined(HAVE_SYS_MMAN_H) munmap(mp->buf, (size_t)mp->buflen); -#else -# ifdef HAVE_WINDOWS_H - win_munmap(mp->buf, (size_t)mp->buflen, mp->handle); -# endif +#elif defined(HAVE_WINDOWS_H) + win_munmap(mp->buf, (size_t)mp->buflen, mp->handle); #endif - else + bu_semaphore_release(BU_SEM_SYSCALL); + } else if (mp->buf != MAP_FAILED) { bu_free(mp->buf, name); + } + mp->buf = NULL; } - mp->name = NULL; - mp->appl = NULL; - mp->buf = MAP_FAILED; - if (UNLIKELY(bu_debug&BU_DEBUG_MAPPED_FILE)) bu_log("bu_open_mapped_file(%s, %s) can't open file\n", name, appl ? appl: "(NULL)"); diff --git a/src/libbu/mime.cmake b/src/libbu/mime.cmake index ec9e519dc7b..a35dde78e58 100644 --- a/src/libbu/mime.cmake +++ b/src/libbu/mime.cmake @@ -1,7 +1,7 @@ # M I M E . C M A K E # BRL-CAD # -# Copyright (c) 2015-2020 United States Government as represented by +# Copyright (c) 2015-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/src/libbu/mread.c b/src/libbu/mread.c index 9be0da59606..975e894bca3 100644 --- a/src/libbu/mread.c +++ b/src/libbu/mread.c @@ -1,7 +1,7 @@ /* M R E A D . C * BRL-CAD * - * Copyright (c) 1992-2020 United States Government as represented by + * Copyright (c) 1992-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libbu/num.c b/src/libbu/num.c index 454b67239c6..fdd6a89f6bd 100644 --- a/src/libbu/num.c +++ b/src/libbu/num.c @@ -1,7 +1,7 @@ /* N U M . C * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/observer.c b/src/libbu/observer.c index 1c6f754f4c2..0f8e6cde20a 100644 --- a/src/libbu/observer.c +++ b/src/libbu/observer.c @@ -1,7 +1,7 @@ /* O B S E R V E R . C * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/opt.c b/src/libbu/opt.c index 1165b251e35..57ac50170f2 100644 --- a/src/libbu/opt.c +++ b/src/libbu/opt.c @@ -1,7 +1,7 @@ /* O P T . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/parallel.c b/src/libbu/parallel.c index 1da6be9fb6d..e5de669563f 100644 --- a/src/libbu/parallel.c +++ b/src/libbu/parallel.c @@ -1,7 +1,7 @@ /* P A R A L L E L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/parallel.h b/src/libbu/parallel.h index 23f60b7aaaa..c96d9e553e8 100644 --- a/src/libbu/parallel.h +++ b/src/libbu/parallel.h @@ -1,7 +1,7 @@ /* P A R A L L E L . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/parallel_cpp11thread.cpp b/src/libbu/parallel_cpp11thread.cpp index 3eeb1ae512d..c94af187a89 100644 --- a/src/libbu/parallel_cpp11thread.cpp +++ b/src/libbu/parallel_cpp11thread.cpp @@ -1,7 +1,7 @@ /* P A R A L L E L _ C P P 1 1 T H R E A D . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/parse.c b/src/libbu/parse.c index d3f1e75331f..024eeb66f5c 100644 --- a/src/libbu/parse.c +++ b/src/libbu/parse.c @@ -1,7 +1,7 @@ /* P A R S E . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -31,6 +31,7 @@ #include "bu/cv.h" #include "bu/log.h" +#include "bu/assert.h" #include "bu/malloc.h" #include "bu/parallel.h" #include "bu/parse.h" diff --git a/src/libbu/path.c b/src/libbu/path.c index d2c2b760624..1fa5081885b 100644 --- a/src/libbu/path.c +++ b/src/libbu/path.c @@ -1,7 +1,7 @@ /* P A T H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/printb.c b/src/libbu/printb.c index 057bcd28721..ad501024b14 100644 --- a/src/libbu/printb.c +++ b/src/libbu/printb.c @@ -1,7 +1,7 @@ /* P R I N T B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/process.c b/src/libbu/process.c index f38b1b74a7e..7a429190045 100644 --- a/src/libbu/process.c +++ b/src/libbu/process.c @@ -1,7 +1,7 @@ /* P R O C E S S . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/process.h b/src/libbu/process.h index cb03c53efc7..daa98b8851c 100644 --- a/src/libbu/process.h +++ b/src/libbu/process.h @@ -1,7 +1,7 @@ /* P R O C E S S . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/progname.c b/src/libbu/progname.c index 84f1099f863..fb75ef56aef 100644 --- a/src/libbu/progname.c +++ b/src/libbu/progname.c @@ -1,7 +1,7 @@ /* P R O G N A M E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/ptbl.c b/src/libbu/ptbl.c index 9127c07c341..930736d97f4 100644 --- a/src/libbu/ptbl.c +++ b/src/libbu/ptbl.c @@ -1,7 +1,7 @@ /* P T B L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/realpath.c b/src/libbu/realpath.c index 2fbe697d6cb..122aac65423 100644 --- a/src/libbu/realpath.c +++ b/src/libbu/realpath.c @@ -1,7 +1,7 @@ /* R E A L P A T H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/redblack.c b/src/libbu/redblack.c index 2e805caa40c..bae9a023db0 100644 --- a/src/libbu/redblack.c +++ b/src/libbu/redblack.c @@ -1,7 +1,7 @@ /* R B . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/scan.c b/src/libbu/scan.c index 3001cae0c65..d862b9f190c 100644 --- a/src/libbu/scan.c +++ b/src/libbu/scan.c @@ -1,7 +1,7 @@ /* S C A N . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/semaphore.c b/src/libbu/semaphore.c index 0b87c03f677..2794e6a1b33 100644 --- a/src/libbu/semaphore.c +++ b/src/libbu/semaphore.c @@ -1,7 +1,7 @@ /* S E M A P H O R E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/semaphore_register.cpp b/src/libbu/semaphore_register.cpp index f208ef437f2..9057688aa16 100644 --- a/src/libbu/semaphore_register.cpp +++ b/src/libbu/semaphore_register.cpp @@ -1,7 +1,7 @@ /* S E M A P H O R E _ R E G I S T E R . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/simd.c b/src/libbu/simd.c index 3da2c67ddbb..8ff184b8bbb 100644 --- a/src/libbu/simd.c +++ b/src/libbu/simd.c @@ -1,7 +1,7 @@ /* S I M D . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -18,6 +18,11 @@ * information. */ +// TODO - investigate https://github.com/google/cpu_features and the approach +// suggested by William Tambellini on the eigen mailing list to build multiple +// dynamic math libs to be loaded at run-time based on which features we can +// take advantage of on that platform... + #include "common.h" #include "bu/simd.h" diff --git a/src/libbu/snooze.c b/src/libbu/snooze.c index 3a1e26172b3..322f1935a5f 100644 --- a/src/libbu/snooze.c +++ b/src/libbu/snooze.c @@ -1,7 +1,7 @@ /* S N O O Z E . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/sscanf.c b/src/libbu/sscanf.c index a38a51118c7..38a5f30fb18 100644 --- a/src/libbu/sscanf.c +++ b/src/libbu/sscanf.c @@ -1,7 +1,7 @@ /* S S C A N F . C * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Copyright (c) 1990, 1993 The Regents of the University of California. @@ -48,6 +48,7 @@ #include #include "bu/defines.h" +#include "bu/assert.h" #include "bu/vls.h" #include "bu/log.h" diff --git a/src/libbu/str.c b/src/libbu/str.c index 005b653be99..bf3bea2c039 100644 --- a/src/libbu/str.c +++ b/src/libbu/str.c @@ -1,7 +1,7 @@ /* S T R . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tbl.c b/src/libbu/tbl.c new file mode 100644 index 00000000000..180ba486cbd --- /dev/null +++ b/src/libbu/tbl.c @@ -0,0 +1,282 @@ +/* T B L . C + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ + +#include "common.h" + +/* interface header */ +#include "bu/tbl.h" + +/* private implementation headers */ +#include +#include +#include "bu/malloc.h" +#include "bu/exit.h" +#include "bu/assert.h" +#include "bu/vls.h" +#include "./fort.h" + + +struct bu_tbl { + struct ft_table *t; +}; + + +struct bu_tbl * +bu_tbl_create() +{ + struct bu_tbl *tbl = NULL; + + tbl = (struct bu_tbl *)bu_calloc(1, sizeof(struct bu_tbl), "bu_tbl alloc"); + tbl->t = ft_create_table(); + if (!tbl->t) + bu_bomb("INTERNAL ERROR: unable to create a table\n"); + + return tbl; +} + + +void +bu_tbl_destroy(struct bu_tbl *tbl) +{ + BU_ASSERT(tbl); + BU_ASSERT(tbl->t); + + ft_destroy_table(tbl->t); + tbl->t = NULL; + bu_free(tbl, "bu_tbl free"); + + return; +} + + +int +bu_tbl_clear(struct bu_tbl *tbl) +{ + BU_ASSERT(tbl); + BU_ASSERT(tbl->t); + + return ft_erase_range(tbl->t, 0, 0, ft_row_count(tbl->t), ft_col_count(tbl->t)); +} + + +struct bu_tbl * +bu_tbl_style(struct bu_tbl *tbl, enum bu_tbl_style style) +{ + BU_ASSERT(tbl); + BU_ASSERT(tbl->t); + + switch (style) { + case BU_TBL_STYLE_NONE: + ft_set_border_style(tbl->t, FT_EMPTY_STYLE); + ft_set_cell_prop(tbl->t, FT_ANY_ROW, FT_ANY_COLUMN, FT_CPROP_LEFT_PADDING, 0); + ft_set_cell_prop(tbl->t, FT_ANY_ROW, FT_ANY_COLUMN, FT_CPROP_RIGHT_PADDING, 1); + break; + case BU_TBL_STYLE_LIST: + ft_set_border_style(tbl->t, FT_SIMPLE_STYLE); + ft_set_cell_prop(tbl->t, FT_ANY_ROW, FT_ANY_COLUMN, FT_CPROP_LEFT_PADDING, 0); + ft_set_cell_prop(tbl->t, FT_ANY_ROW, FT_ANY_COLUMN, FT_CPROP_RIGHT_PADDING, 0); + break; + case BU_TBL_STYLE_BASIC: + ft_set_border_style(tbl->t, FT_BASIC_STYLE); + break; + case BU_TBL_STYLE_SINGLE: + ft_set_border_style(tbl->t, FT_SOLID_ROUND_STYLE); + break; + case BU_TBL_STYLE_DOUBLE: + ft_set_border_style(tbl->t, FT_NICE_STYLE); + break; + case BU_TBL_ROW_HEADER: + ft_set_cell_prop(tbl->t, FT_CUR_ROW, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE, FT_ROW_HEADER); + break; + case BU_TBL_ROW_SEPARATOR: + ft_add_separator(tbl->t); + break; + case BU_TBL_ALIGN_LEFT: + ft_set_default_cell_prop(FT_CPROP_TEXT_ALIGN, FT_ALIGNED_LEFT); + break; + case BU_TBL_ALIGN_CENTER: + ft_set_default_cell_prop(FT_CPROP_TEXT_ALIGN, FT_ALIGNED_CENTER); + break; + case BU_TBL_ALIGN_RIGHT: + ft_set_default_cell_prop(FT_CPROP_TEXT_ALIGN, FT_ALIGNED_RIGHT); + break; + + case BU_TBL_ROW_ALIGN_LEFT: + ft_set_cell_prop(tbl->t, FT_CUR_ROW, FT_ANY_COLUMN, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_LEFT); + break; + case BU_TBL_ROW_ALIGN_CENTER: + ft_set_cell_prop(tbl->t, FT_CUR_ROW, FT_ANY_COLUMN, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_CENTER); + break; + case BU_TBL_ROW_ALIGN_RIGHT: + ft_set_cell_prop(tbl->t, FT_CUR_ROW, FT_ANY_COLUMN, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_RIGHT); + break; + + case BU_TBL_COL_ALIGN_LEFT: + ft_set_cell_prop(tbl->t, FT_ANY_ROW, FT_CUR_COLUMN, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_LEFT); + break; + case BU_TBL_COL_ALIGN_CENTER: + ft_set_cell_prop(tbl->t, FT_ANY_ROW, FT_CUR_COLUMN, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_CENTER); + break; + case BU_TBL_COL_ALIGN_RIGHT: + ft_set_cell_prop(tbl->t, FT_ANY_ROW, FT_CUR_COLUMN, FT_CPROP_TEXT_ALIGN, FT_ALIGNED_RIGHT); + break; + + case BU_TBL_ROW_END: + ft_ln(tbl->t); + break; + } + + return tbl; +} + + +struct bu_tbl * +bu_tbl_go_to(struct bu_tbl *tbl, size_t row, size_t col) +{ + BU_ASSERT(tbl); + BU_ASSERT(tbl->t); + + ft_set_cur_cell(tbl->t, row, col); + + return tbl; +} + + +struct bu_tbl * +bu_tbl_is_at(struct bu_tbl *tbl, size_t *row, size_t *col) +{ + BU_ASSERT(tbl); + BU_ASSERT(tbl->t); + + if (row) + *row = ft_cur_row(tbl->t); + if (col) + *col = ft_cur_col(tbl->t); + + return tbl; +} + + +struct bu_tbl * +bu_tbl_printf(struct bu_tbl *tbl, const char *fmt, ...) +{ + char *cstr = NULL; + + va_list ap; +#define BUFSZ 4096 + char buf[BUFSZ]; + char *back = NULL; + char *last = NULL; + size_t zeros = 0; + + if (!fmt) + return tbl; + + BU_ASSERT(tbl); + BU_ASSERT(tbl->t); + + memset(buf, 255, BUFSZ); + + va_start(ap, fmt); + vsnprintf(buf, BUFSZ, fmt, ap); + va_end(ap); + + cstr = strtok(buf, "|"); + if (cstr) { + /* strtok collapses empty tokens, so check */ + back = cstr; + zeros = 0; + back--; + while ((*back == '\0' || *back == '|') && buf <= back) { + zeros++; + back--; + } + while (zeros--) { + ft_printf(tbl->t, "%s", ""); + } + ft_printf(tbl->t, "%s", cstr); + last = cstr; + } + + while (cstr) { + cstr = strtok(NULL, "|"); + + if (cstr) { + /* strtok collapses empty tokens, so check */ + back = cstr; + zeros = 0; + back -= 2; + while ((*back == '\0' || *back == '|') && buf <= back) { + zeros++; + back--; + } + while (zeros--) { + ft_printf(tbl->t, "%s", ""); + } + + ft_printf(tbl->t, "%s", cstr); + last = cstr; + } + } + + if (!last) + return tbl; + + zeros = 0; + last += 2; + + if (!last) + return tbl; + + while ((*last == '\0' || *last == '|')) { + zeros++; + last++; + } + while (zeros--) { + ft_printf(tbl->t, "%s", ""); + } + + return tbl; +} + + +void +bu_tbl_vls(struct bu_vls *str, const struct bu_tbl *tbl) +{ + if (!tbl || !tbl->t) + return; + BU_ASSERT(str); + + const char *tstr = ft_to_string(tbl->t); + if (tstr) { + bu_vls_strcat(str, tstr); + } +} + + +/* + * Local Variables: + * mode: C + * tab-width: 8 + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libbu/temp.c b/src/libbu/temp.c index d90ff3ee643..c5d4a736376 100644 --- a/src/libbu/temp.c +++ b/src/libbu/temp.c @@ -1,7 +1,7 @@ /* T E M P . C * BRL-CAD * - * Copyright (c) 2001-2020 United States Government as represented by + * Copyright (c) 2001-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/CMakeLists.txt b/src/libbu/tests/CMakeLists.txt index 420d35421ef..17d713004ba 100644 --- a/src/libbu/tests/CMakeLists.txt +++ b/src/libbu/tests/CMakeLists.txt @@ -52,6 +52,7 @@ endforeach(srcfile ${bu_test_srcs}) # Generate bu_test.c file and build it include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../..) configure_file(bu_test.c.in "${CMAKE_CURRENT_BINARY_DIR}/bu_test.c" @ONLY) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/bu_test.c") BRLCAD_ADDEXEC(bu_test "${CMAKE_CURRENT_BINARY_DIR}/bu_test.c" libbu TEST) # Housekeeping for included source files @@ -72,57 +73,57 @@ BRLCAD_ADDEXEC(bu_gethostname gethostname.c libbu TEST) #################################### # bu_path_basename testing # #################################### -add_test(NAME bu_path_basename_null COMMAND bu_test basename) # tests NULL -add_test(NAME bu_path_basename_empty COMMAND bu_test basename "") -add_test(NAME bu_path_basename_sl_usr_sl_dir_sl_file COMMAND bu_test basename "/usr/dir/file") -add_test(NAME bu_path_basename_sl_usr_sl_dir_sl_ COMMAND bu_test basename "/usr/dir/") -add_test(NAME bu_path_basename_sl_usr_bsl__sl_dir COMMAND bu_test basename "/usr\\\\/dir") -add_test(NAME bu_path_basename_sl_usr_sl__p_ COMMAND bu_test basename "/usr/.") -add_test(NAME bu_path_basename_sl_usr_sl_ COMMAND bu_test basename "/usr/") -add_test(NAME bu_path_basename_sl_usr COMMAND bu_test basename "/usr") -add_test(NAME bu_path_basename_usr COMMAND bu_test basename "usr") -add_test(NAME bu_path_basename_sl_usr_sl_some_sp_long_sl_file COMMAND bu_test basename "/usr/some long/file") -add_test(NAME bu_path_basename_sl_usr_sl_some_sp_file COMMAND bu_test basename "/usr/some file") -add_test(NAME bu_path_basename_C_c__sl_usr_sl_some_bsl__sp_drivepath COMMAND bu_test basename "C:/usr/some\\\\ drivepath") -add_test(NAME bu_path_basename_sl_a_sp_test_sp_file COMMAND bu_test basename "/a test file") -add_test(NAME bu_path_basename_another_sp_file COMMAND bu_test basename "another file") -add_test(NAME bu_path_basename_C_c__bsl__Temp COMMAND bu_test basename "C:\\\\Temp") -add_test(NAME bu_path_basename_C_c__sl_Temp COMMAND bu_test basename "C:/Temp") -add_test(NAME bu_path_basename_sl_ COMMAND bu_test basename "/") -add_test(NAME bu_path_basename_sl__sl__sl__sl__sl_ COMMAND bu_test basename "/////") -add_test(NAME bu_path_basename_p_ COMMAND bu_test basename ".") -add_test(NAME bu_path_basename_p__p_ COMMAND bu_test basename "..") -add_test(NAME bu_path_basename_p__p__p_ COMMAND bu_test basename "...") -add_test(NAME bu_path_basename_sp__sp__sp_ COMMAND bu_test basename " ") +BRLCAD_ADD_TEST(NAME bu_path_basename_null COMMAND bu_test basename) # tests NULL +BRLCAD_ADD_TEST(NAME bu_path_basename_empty COMMAND bu_test basename "") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_usr_sl_dir_sl_file COMMAND bu_test basename "/usr/dir/file") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_usr_sl_dir_sl_ COMMAND bu_test basename "/usr/dir/") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_usr_bsl__sl_dir COMMAND bu_test basename "/usr\\\\/dir") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_usr_sl__p_ COMMAND bu_test basename "/usr/.") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_usr_sl_ COMMAND bu_test basename "/usr/") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_usr COMMAND bu_test basename "/usr") +BRLCAD_ADD_TEST(NAME bu_path_basename_usr COMMAND bu_test basename "usr") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_usr_sl_some_sp_long_sl_file COMMAND bu_test basename "/usr/some long/file") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_usr_sl_some_sp_file COMMAND bu_test basename "/usr/some file") +BRLCAD_ADD_TEST(NAME bu_path_basename_C_c__sl_usr_sl_some_bsl__sp_drivepath COMMAND bu_test basename "C:/usr/some\\\\ drivepath") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_a_sp_test_sp_file COMMAND bu_test basename "/a test file") +BRLCAD_ADD_TEST(NAME bu_path_basename_another_sp_file COMMAND bu_test basename "another file") +BRLCAD_ADD_TEST(NAME bu_path_basename_C_c__bsl__Temp COMMAND bu_test basename "C:\\\\Temp") +BRLCAD_ADD_TEST(NAME bu_path_basename_C_c__sl_Temp COMMAND bu_test basename "C:/Temp") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl_ COMMAND bu_test basename "/") +BRLCAD_ADD_TEST(NAME bu_path_basename_sl__sl__sl__sl__sl_ COMMAND bu_test basename "/////") +BRLCAD_ADD_TEST(NAME bu_path_basename_p_ COMMAND bu_test basename ".") +BRLCAD_ADD_TEST(NAME bu_path_basename_p__p_ COMMAND bu_test basename "..") +BRLCAD_ADD_TEST(NAME bu_path_basename_p__p__p_ COMMAND bu_test basename "...") +BRLCAD_ADD_TEST(NAME bu_path_basename_sp__sp__sp_ COMMAND bu_test basename " ") ########################################## # bu_file_path_component testing # ########################################## -add_test(NAME bu_path_component_null COMMAND bu_test path_component) # tests NULL -add_test(NAME bu_path_component_empty COMMAND bu_test path_component 0) # tests empty +BRLCAD_ADD_TEST(NAME bu_path_component_null COMMAND bu_test path_component) # tests NULL +BRLCAD_ADD_TEST(NAME bu_path_component_empty COMMAND bu_test path_component 0) # tests empty # NOTE: these test numbers correspond with the bu_path_component_t enum values in include/bu/path.h -add_test(NAME bu_path_component_sl_usr_sl_dir_sl_file_ext COMMAND bu_test path_component "/usr/dir/file.ext" "ext" 4) -add_test(NAME bu_path_component_c_sl_usr_sl_dir_sl_file_ext COMMAND bu_test path_component "C:/usr/dir/file.ext" "ext" 4) -add_test(NAME bu_path_component_sl_usr_sl_dir_sl_file_base COMMAND bu_test path_component "/usr/dir/file.ext" "file.ext" 2) -add_test(NAME bu_path_component_sl_usr_sl_dir_sl_file_base_core COMMAND bu_test path_component "/usr/dir/file.ext" "file" 3) -add_test(NAME bu_path_component_sl_usr_sl_dir_sl_file_dir COMMAND bu_test path_component "/usr/dir/file.ext" "/usr/dir" 0) -add_test(NAME bu_path_component_sl_usr_sl_dir_sl_file_dir_core COMMAND bu_test path_component "/usr/dir/file.ext" "/usr/dir/file" 1) -add_test(NAME bu_path_component_c_sl_usr_sl_dir_sl_file_dir_core COMMAND bu_test path_component "C:/usr/dir/file.ext" "C:/usr/dir/file" 1) +BRLCAD_ADD_TEST(NAME bu_path_component_sl_usr_sl_dir_sl_file_ext COMMAND bu_test path_component "/usr/dir/file.ext" "ext" 4) +BRLCAD_ADD_TEST(NAME bu_path_component_c_sl_usr_sl_dir_sl_file_ext COMMAND bu_test path_component "C:/usr/dir/file.ext" "ext" 4) +BRLCAD_ADD_TEST(NAME bu_path_component_sl_usr_sl_dir_sl_file_base COMMAND bu_test path_component "/usr/dir/file.ext" "file.ext" 2) +BRLCAD_ADD_TEST(NAME bu_path_component_sl_usr_sl_dir_sl_file_base_core COMMAND bu_test path_component "/usr/dir/file.ext" "file" 3) +BRLCAD_ADD_TEST(NAME bu_path_component_sl_usr_sl_dir_sl_file_dir COMMAND bu_test path_component "/usr/dir/file.ext" "/usr/dir" 0) +BRLCAD_ADD_TEST(NAME bu_path_component_sl_usr_sl_dir_sl_file_dir_core COMMAND bu_test path_component "/usr/dir/file.ext" "/usr/dir/file" 1) +BRLCAD_ADD_TEST(NAME bu_path_component_c_sl_usr_sl_dir_sl_file_dir_core COMMAND bu_test path_component "C:/usr/dir/file.ext" "C:/usr/dir/file" 1) ############################# # bu_file_* testing # ############################# -add_test(NAME bu_file COMMAND bu_test file) # tests bu/file.h API +BRLCAD_ADD_TEST(NAME bu_file COMMAND bu_test file) # tests bu/file.h API # NOTE: these test numbers correspond with the bu_mime_t enum values in include/bu/mime.h -add_test(NAME bu_file_mime_dxf COMMAND bu_test file_mime dxf 5 1) # tests dxf extension in model context -add_test(NAME bu_file_mime_stp COMMAND bu_test file_mime stp 5 7) # tests stp extension in model context -add_test(NAME bu_file_mime_png COMMAND bu_test file_mime png 3 13) # tests png extension in image context +BRLCAD_ADD_TEST(NAME bu_file_mime_dxf COMMAND bu_test file_mime dxf 5 1) # tests dxf extension in model context +BRLCAD_ADD_TEST(NAME bu_file_mime_stp COMMAND bu_test file_mime stp 5 7) # tests stp extension in model context +BRLCAD_ADD_TEST(NAME bu_file_mime_png COMMAND bu_test file_mime png 3 13) # tests png extension in image context -#add_test(NAME bu_file_glob COMMAND bu_test file_glob) # runs a series of built-in unit tests +#BRLCAD_ADD_TEST(NAME bu_file_glob COMMAND bu_test file_glob) # runs a series of built-in unit tests # # ************ bitv.c tests ************* @@ -137,27 +138,27 @@ include(tests_bitv.cmake) # bu_booleanize testing # ################################# # expected returns are false:0, strongly true:1, or anything else:>1 -add_test(NAME bu_booleanize_nullptr COMMAND bu_test booleanize) # tests NULL -add_test(NAME bu_booleanize_nullstr COMMAND bu_test booleanize "(null)" 0) -add_test(NAME bu_booleanize_empty COMMAND bu_test booleanize "" 0) -add_test(NAME bu_booleanize_space COMMAND bu_test booleanize " " 0) -add_test(NAME bu_booleanize_n COMMAND bu_test booleanize "n" 0) -add_test(NAME bu_booleanize_nabcd COMMAND bu_test booleanize "nabcd" 2) -add_test(NAME bu_booleanize_N COMMAND bu_test booleanize "N" 0) -add_test(NAME bu_booleanize_Nabcd COMMAND bu_test booleanize "Nabcd" 2) -add_test(NAME bu_booleanize__sp__sp_abcd COMMAND bu_test booleanize " abcd" 2) -add_test(NAME bu_booleanize_y COMMAND bu_test booleanize "y" 1) -add_test(NAME bu_booleanize_yabcd COMMAND bu_test booleanize "yabcd" 2) -add_test(NAME bu_booleanize_Y COMMAND bu_test booleanize "Y" 1) -add_test(NAME bu_booleanize_Yabcd COMMAND bu_test booleanize "Yabcd" 2) -add_test(NAME bu_booleanize_abcd COMMAND bu_test booleanize "abcd" 2) -add_test(NAME bu_booleanize_neg1 COMMAND bu_test booleanize "-1" 2) -add_test(NAME bu_booleanize_1 COMMAND bu_test booleanize "1" 1) -add_test(NAME bu_booleanize_2 COMMAND bu_test booleanize "2" 2) -add_test(NAME bu_booleanize_0 COMMAND bu_test booleanize "0" 0) -add_test(NAME bu_booleanize_neg0 COMMAND bu_test booleanize "-0" 0) -add_test(NAME bu_booleanize_0000 COMMAND bu_test booleanize "0000" 0) -add_test(NAME bu_booleanize_0001 COMMAND bu_test booleanize "0001" 1) +BRLCAD_ADD_TEST(NAME bu_booleanize_nullptr COMMAND bu_test booleanize) # tests NULL +BRLCAD_ADD_TEST(NAME bu_booleanize_nullstr COMMAND bu_test booleanize "(null)" 0) +BRLCAD_ADD_TEST(NAME bu_booleanize_empty COMMAND bu_test booleanize "" 0) +BRLCAD_ADD_TEST(NAME bu_booleanize_space COMMAND bu_test booleanize " " 0) +BRLCAD_ADD_TEST(NAME bu_booleanize_n COMMAND bu_test booleanize "n" 0) +BRLCAD_ADD_TEST(NAME bu_booleanize_nabcd COMMAND bu_test booleanize "nabcd" 2) +BRLCAD_ADD_TEST(NAME bu_booleanize_N COMMAND bu_test booleanize "N" 0) +BRLCAD_ADD_TEST(NAME bu_booleanize_Nabcd COMMAND bu_test booleanize "Nabcd" 2) +BRLCAD_ADD_TEST(NAME bu_booleanize__sp__sp_abcd COMMAND bu_test booleanize " abcd" 2) +BRLCAD_ADD_TEST(NAME bu_booleanize_y COMMAND bu_test booleanize "y" 1) +BRLCAD_ADD_TEST(NAME bu_booleanize_yabcd COMMAND bu_test booleanize "yabcd" 2) +BRLCAD_ADD_TEST(NAME bu_booleanize_Y COMMAND bu_test booleanize "Y" 1) +BRLCAD_ADD_TEST(NAME bu_booleanize_Yabcd COMMAND bu_test booleanize "Yabcd" 2) +BRLCAD_ADD_TEST(NAME bu_booleanize_abcd COMMAND bu_test booleanize "abcd" 2) +BRLCAD_ADD_TEST(NAME bu_booleanize_neg1 COMMAND bu_test booleanize "-1" 2) +BRLCAD_ADD_TEST(NAME bu_booleanize_1 COMMAND bu_test booleanize "1" 1) +BRLCAD_ADD_TEST(NAME bu_booleanize_2 COMMAND bu_test booleanize "2" 2) +BRLCAD_ADD_TEST(NAME bu_booleanize_0 COMMAND bu_test booleanize "0" 0) +BRLCAD_ADD_TEST(NAME bu_booleanize_neg0 COMMAND bu_test booleanize "-0" 0) +BRLCAD_ADD_TEST(NAME bu_booleanize_0000 COMMAND bu_test booleanize "0000" 0) +BRLCAD_ADD_TEST(NAME bu_booleanize_0001 COMMAND bu_test booleanize "0001" 1) # # ************ ctype.c tests ************* @@ -168,13 +169,13 @@ add_test(NAME bu_booleanize_0001 COMMAND bu_test booleanize "0001" 1) ################################## # Note - because of the special characters needed in these tests, the strings # don't work well when fed in from the command line. -add_test(NAME bu_str_isprint_basic COMMAND bu_test str_isprint 1) -add_test(NAME bu_str_isprint_eol COMMAND bu_test str_isprint 2) -add_test(NAME bu_str_isprint_double_slash COMMAND bu_test str_isprint 3) -add_test(NAME bu_str_isprint_horiz_tab COMMAND bu_test str_isprint 4) -add_test(NAME bu_str_isprint_non-alphanumeric COMMAND bu_test str_isprint 5) -add_test(NAME bu_str_isprint_eol_non-alphanumeric COMMAND bu_test str_isprint 6) -add_test(NAME bu_str_isprint_carriage_return COMMAND bu_test str_isprint 7) +BRLCAD_ADD_TEST(NAME bu_str_isprint_basic COMMAND bu_test str_isprint 1) +BRLCAD_ADD_TEST(NAME bu_str_isprint_eol COMMAND bu_test str_isprint 2) +BRLCAD_ADD_TEST(NAME bu_str_isprint_double_slash COMMAND bu_test str_isprint 3) +BRLCAD_ADD_TEST(NAME bu_str_isprint_horiz_tab COMMAND bu_test str_isprint 4) +BRLCAD_ADD_TEST(NAME bu_str_isprint_non-alphanumeric COMMAND bu_test str_isprint 5) +BRLCAD_ADD_TEST(NAME bu_str_isprint_eol_non-alphanumeric COMMAND bu_test str_isprint 6) +BRLCAD_ADD_TEST(NAME bu_str_isprint_carriage_return COMMAND bu_test str_isprint 7) # # ************ dirname.c tests ************* @@ -183,28 +184,28 @@ add_test(NAME bu_str_isprint_carriage_return COMMAND bu_test str_isprint 7) ################################### # bu_path_dirname testing # ################################### -add_test(NAME bu_path_dirname__usr_dir_file COMMAND bu_test dirname "/usr/dir/file") -add_test(NAME bu_path_dirname__usr_dir_ COMMAND bu_test dirname "/usr/dir/") -add_test(NAME bu_path_dirname__usr__bsl__dir COMMAND bu_test dirname "/usr\\\\/dir") -add_test(NAME bu_path_dirname__usr_period COMMAND bu_test dirname "/usr/.") -add_test(NAME bu_path_dirname__usr_ COMMAND bu_test dirname "/usr/") -add_test(NAME bu_path_dirname__usr COMMAND bu_test dirname "/usr") -add_test(NAME bu_path_dirname_usr COMMAND bu_test dirname "usr") -add_test(NAME bu_path_dirname__usr_some_sp_long_file COMMAND bu_test dirname "/usr/some long/file") -add_test(NAME bu_path_dirname__usr_some_sp_file COMMAND bu_test dirname "/usr/some file") -add_test(NAME bu_path_dirname__usr_some__bsl__sp_drivepath COMMAND bu_test dirname "C:/usr/some\\\\ drivepath") -add_test(NAME bu_path_dirname__a_sp_file COMMAND bu_test dirname "/a test file") -add_test(NAME bu_path_dirname_another_file COMMAND bu_test dirname "another file") -add_test(NAME bu_path_dirname_C_colon__bsl_Temp COMMAND bu_test dirname "C:\\\\Temp") -add_test(NAME bu_path_dirname_C_colon__Temp COMMAND bu_test dirname "C:/Temp") -add_test(NAME bu_path_dirname__ COMMAND bu_test dirname "/") -add_test(NAME bu_path_dirname______ COMMAND bu_test dirname "/////") -add_test(NAME bu_path_dirname__period_ COMMAND bu_test dirname ".") -add_test(NAME bu_path_dirname__period__period_ COMMAND bu_test dirname "..") -add_test(NAME bu_path_dirname__period__period__period_ COMMAND bu_test dirname "...") -add_test(NAME bu_path_dirname__sp__sp__sp_ COMMAND bu_test dirname " ") -add_test(NAME bu_path_dirname_empty COMMAND bu_test dirname "") -add_test(NAME bu_path_dirname_null COMMAND bu_test dirname) +BRLCAD_ADD_TEST(NAME bu_path_dirname__usr_dir_file COMMAND bu_test dirname "/usr/dir/file") +BRLCAD_ADD_TEST(NAME bu_path_dirname__usr_dir_ COMMAND bu_test dirname "/usr/dir/") +BRLCAD_ADD_TEST(NAME bu_path_dirname__usr__bsl__dir COMMAND bu_test dirname "/usr\\\\/dir") +BRLCAD_ADD_TEST(NAME bu_path_dirname__usr_period COMMAND bu_test dirname "/usr/.") +BRLCAD_ADD_TEST(NAME bu_path_dirname__usr_ COMMAND bu_test dirname "/usr/") +BRLCAD_ADD_TEST(NAME bu_path_dirname__usr COMMAND bu_test dirname "/usr") +BRLCAD_ADD_TEST(NAME bu_path_dirname_usr COMMAND bu_test dirname "usr") +BRLCAD_ADD_TEST(NAME bu_path_dirname__usr_some_sp_long_file COMMAND bu_test dirname "/usr/some long/file") +BRLCAD_ADD_TEST(NAME bu_path_dirname__usr_some_sp_file COMMAND bu_test dirname "/usr/some file") +BRLCAD_ADD_TEST(NAME bu_path_dirname__usr_some__bsl__sp_drivepath COMMAND bu_test dirname "C:/usr/some\\\\ drivepath") +BRLCAD_ADD_TEST(NAME bu_path_dirname__a_sp_file COMMAND bu_test dirname "/a test file") +BRLCAD_ADD_TEST(NAME bu_path_dirname_another_file COMMAND bu_test dirname "another file") +BRLCAD_ADD_TEST(NAME bu_path_dirname_C_colon__bsl_Temp COMMAND bu_test dirname "C:\\\\Temp") +BRLCAD_ADD_TEST(NAME bu_path_dirname_C_colon__Temp COMMAND bu_test dirname "C:/Temp") +BRLCAD_ADD_TEST(NAME bu_path_dirname__ COMMAND bu_test dirname "/") +BRLCAD_ADD_TEST(NAME bu_path_dirname______ COMMAND bu_test dirname "/////") +BRLCAD_ADD_TEST(NAME bu_path_dirname__period_ COMMAND bu_test dirname ".") +BRLCAD_ADD_TEST(NAME bu_path_dirname__period__period_ COMMAND bu_test dirname "..") +BRLCAD_ADD_TEST(NAME bu_path_dirname__period__period__period_ COMMAND bu_test dirname "...") +BRLCAD_ADD_TEST(NAME bu_path_dirname__sp__sp__sp_ COMMAND bu_test dirname " ") +BRLCAD_ADD_TEST(NAME bu_path_dirname_empty COMMAND bu_test dirname "") +BRLCAD_ADD_TEST(NAME bu_path_dirname_null COMMAND bu_test dirname) # # ************ escape.c tests ************* @@ -217,27 +218,27 @@ add_test(NAME bu_path_dirname_null COMMAND bu_test dirname) # bu_str_unescape testing # ################################### foreach(num RANGE 1 23) - add_test(NAME "bu_str_unescape_${num}" COMMAND bu_test escape 1 "${num}") + BRLCAD_ADD_TEST(NAME "bu_str_unescape_${num}" COMMAND bu_test escape 1 "${num}") endforeach() ################################# # bu_str_escape testing # ################################# foreach(num RANGE 1 31) - add_test(NAME "bu_str_escape_${num}" COMMAND bu_test escape 2 "${num}") + BRLCAD_ADD_TEST(NAME "bu_str_escape_${num}" COMMAND bu_test escape 2 "${num}") endforeach() ############################################## # escape/unescape round trip testing # ############################################## foreach(num RANGE 1 4) - add_test(NAME "bu_escape_roundtrip_${num}" COMMAND bu_test escape 3 "${num}") + BRLCAD_ADD_TEST(NAME "bu_escape_roundtrip_${num}" COMMAND bu_test escape 3 "${num}") endforeach() ### # bu_heap memory allocation testing ### -add_test(NAME bu_heap_1 COMMAND bu_test heap) +BRLCAD_ADD_TEST(NAME bu_heap_1 COMMAND bu_test heap) # # ************ progname.c tests ************* @@ -251,7 +252,7 @@ add_test(NAME bu_heap_1 COMMAND bu_test heap) ############################### BRLCAD_ADDEXEC(bu_progname progname.c libbu TEST) add_dependencies(bu_test bu_progname) -add_test(NAME bu_progname_tests COMMAND bu_progname) +BRLCAD_ADD_TEST(NAME bu_progname_tests COMMAND bu_progname) # # ************ encode.c tests ************* @@ -261,7 +262,7 @@ add_test(NAME bu_progname_tests COMMAND bu_progname) # Like many string functions using escaped characters the input strings are # left in C to minimize pass-through errors. foreach(num RANGE 1 23) - add_test(NAME "bu_encode_${num}" COMMAND bu_test encode "${num}") + BRLCAD_ADD_TEST(NAME "bu_encode_${num}" COMMAND bu_test encode "${num}") endforeach() # @@ -269,20 +270,20 @@ endforeach() # # The testing of encoding and de-coding is tested at once in a "round trip" # approach - the tests below all test both bu_b64_encode and bu_b64_decode. -add_test(NAME "bu_b64_test" COMMAND bu_test b64) +BRLCAD_ADD_TEST(NAME "bu_b64_test" COMMAND bu_test b64) # # ************ bu_semaphore.c tests ************* # -add_test(NAME bu_semaphore_test COMMAND bu_test semaphore) -add_test(NAME bu_semaphore_P1 COMMAND bu_test semaphore -P1) -add_test(NAME bu_semaphore_P2 COMMAND bu_test semaphore -P2) -add_test(NAME bu_semaphore_P3 COMMAND bu_test semaphore -P3) +BRLCAD_ADD_TEST(NAME bu_semaphore_test COMMAND bu_test semaphore) +BRLCAD_ADD_TEST(NAME bu_semaphore_P1 COMMAND bu_test semaphore -P1) +BRLCAD_ADD_TEST(NAME bu_semaphore_P2 COMMAND bu_test semaphore -P2) +BRLCAD_ADD_TEST(NAME bu_semaphore_P3 COMMAND bu_test semaphore -P3) # # ************ bu_parallel.c tests ************* # -add_test(NAME bu_parallel_test COMMAND bu_test parallel) +BRLCAD_ADD_TEST(NAME bu_parallel_test COMMAND bu_test parallel) # TODO - add a parallel test for the static version of the library, # maybe using bu_getiwd @@ -291,7 +292,7 @@ add_test(NAME bu_parallel_test COMMAND bu_test parallel) # ************ vls_vprintf.c tests ************* # foreach(num RANGE 1 67) - add_test(NAME "bu_vls_vprintf_${num}" COMMAND bu_test vls_vprintf "${num}") + BRLCAD_ADD_TEST(NAME "bu_vls_vprintf_${num}" COMMAND bu_test vls_vprintf "${num}") endforeach() # @@ -303,16 +304,16 @@ include(tests_vls.cmake) # # ************ sort.c test ************* # -add_test(NAME bu_sort_unsigned_int_1 COMMAND bu_test sort 1) -add_test(NAME bu_sort_unsigned_int_2 COMMAND bu_test sort 2) -add_test(NAME bu_sort_fastf_t_1 COMMAND bu_test sort 3) -add_test(NAME bu_sort_fastf_t_2 COMMAND bu_test sort 4) -add_test(NAME bu_sort_string_1 COMMAND bu_test sort 5) -add_test(NAME bu_sort_string_2 COMMAND bu_test sort 6) -add_test(NAME bu_sort_dist_to_int_1 COMMAND bu_test sort 7) -add_test(NAME bu_sort_dist_to_int_2 COMMAND bu_test sort 8) -add_test(NAME bu_sort_fastf_empty COMMAND bu_test sort 9) -add_test(NAME bu_sort_fastf_inf COMMAND bu_test sort 10) +BRLCAD_ADD_TEST(NAME bu_sort_unsigned_int_1 COMMAND bu_test sort 1) +BRLCAD_ADD_TEST(NAME bu_sort_unsigned_int_2 COMMAND bu_test sort 2) +BRLCAD_ADD_TEST(NAME bu_sort_fastf_t_1 COMMAND bu_test sort 3) +BRLCAD_ADD_TEST(NAME bu_sort_fastf_t_2 COMMAND bu_test sort 4) +BRLCAD_ADD_TEST(NAME bu_sort_string_1 COMMAND bu_test sort 5) +BRLCAD_ADD_TEST(NAME bu_sort_string_2 COMMAND bu_test sort 6) +BRLCAD_ADD_TEST(NAME bu_sort_dist_to_int_1 COMMAND bu_test sort 7) +BRLCAD_ADD_TEST(NAME bu_sort_dist_to_int_2 COMMAND bu_test sort 8) +BRLCAD_ADD_TEST(NAME bu_sort_fastf_empty COMMAND bu_test sort 9) +BRLCAD_ADD_TEST(NAME bu_sort_fastf_inf COMMAND bu_test sort 10) # # ************ color.c tests ************* @@ -329,13 +330,13 @@ add_test(NAME bu_sort_fastf_inf COMMAND bu_test sort 10) # integers, and hsv colors are represented by comma-separated triples # of floats. -add_test(NAME bu_rgb_to_hsv_1 COMMAND bu_test color 1 192,78,214 290.294,0.636,0.839) -add_test(NAME bu_rgb_to_hsv_2 COMMAND bu_test color 1 0,0,0 0.0,0.0,0.0) -add_test(NAME bu_rgb_to_hsv_3 COMMAND bu_test color 1 255,255,255 0.0,0.0,1.0) -add_test(NAME bu_rgb_to_hsv_4 COMMAND bu_test color 1 255,0,0 0.0,1.0,1.0) -add_test(NAME bu_rgb_to_hsv_5 COMMAND bu_test color 1 0,255,0 120.0,1.0,1.0) -add_test(NAME bu_rgb_to_hsv_6 COMMAND bu_test color 1 0,0,255 240.0,1.0,1.0) -add_test(NAME bu_rgb_to_hsv_7 COMMAND bu_test color 1 128,128,128 0.0,0.0,0.501) +BRLCAD_ADD_TEST(NAME bu_rgb_to_hsv_1 COMMAND bu_test color 1 192,78,214 290.294,0.636,0.839) +BRLCAD_ADD_TEST(NAME bu_rgb_to_hsv_2 COMMAND bu_test color 1 0,0,0 0.0,0.0,0.0) +BRLCAD_ADD_TEST(NAME bu_rgb_to_hsv_3 COMMAND bu_test color 1 255,255,255 0.0,0.0,1.0) +BRLCAD_ADD_TEST(NAME bu_rgb_to_hsv_4 COMMAND bu_test color 1 255,0,0 0.0,1.0,1.0) +BRLCAD_ADD_TEST(NAME bu_rgb_to_hsv_5 COMMAND bu_test color 1 0,255,0 120.0,1.0,1.0) +BRLCAD_ADD_TEST(NAME bu_rgb_to_hsv_6 COMMAND bu_test color 1 0,0,255 240.0,1.0,1.0) +BRLCAD_ADD_TEST(NAME bu_rgb_to_hsv_7 COMMAND bu_test color 1 128,128,128 0.0,0.0,0.501) # For function #2 (bu_hsv_to_rgb) the format is as follows: # @@ -345,13 +346,13 @@ add_test(NAME bu_rgb_to_hsv_7 COMMAND bu_test color 1 128,128,128 0.0,0.0,0.501) # integers, and hsv colors are represented by comma-separated triples # of floats. -add_test(NAME bu_hsv_to_rgb_1 COMMAND bu_test color 2 290.294,0.636,0.839 192,78,214) -add_test(NAME bu_hsv_to_rgb_2 COMMAND bu_test color 2 0.0,0.0,0.0 0,0,0) -add_test(NAME bu_hsv_to_rgb_3 COMMAND bu_test color 2 0.0,0.0,1.0 255,255,255) -add_test(NAME bu_hsv_to_rgb_4 COMMAND bu_test color 2 0.0,1.0,1.0 255,0,0) -add_test(NAME bu_hsv_to_rgb_5 COMMAND bu_test color 2 120.0,1.0,1.0 0,255,0) -add_test(NAME bu_hsv_to_rgb_6 COMMAND bu_test color 2 240.0,1.0,1.0 0,0,255) -add_test(NAME bu_hsv_to_rgb_7 COMMAND bu_test color 2 0.0,0.0,0.501 128,128,128) +BRLCAD_ADD_TEST(NAME bu_hsv_to_rgb_1 COMMAND bu_test color 2 290.294,0.636,0.839 192,78,214) +BRLCAD_ADD_TEST(NAME bu_hsv_to_rgb_2 COMMAND bu_test color 2 0.0,0.0,0.0 0,0,0) +BRLCAD_ADD_TEST(NAME bu_hsv_to_rgb_3 COMMAND bu_test color 2 0.0,0.0,1.0 255,255,255) +BRLCAD_ADD_TEST(NAME bu_hsv_to_rgb_4 COMMAND bu_test color 2 0.0,1.0,1.0 255,0,0) +BRLCAD_ADD_TEST(NAME bu_hsv_to_rgb_5 COMMAND bu_test color 2 120.0,1.0,1.0 0,255,0) +BRLCAD_ADD_TEST(NAME bu_hsv_to_rgb_6 COMMAND bu_test color 2 240.0,1.0,1.0 0,0,255) +BRLCAD_ADD_TEST(NAME bu_hsv_to_rgb_7 COMMAND bu_test color 2 0.0,0.0,0.501 128,128,128) # For function #3 (bu_str_to_rgb) the format is as follows: # @@ -360,18 +361,18 @@ add_test(NAME bu_hsv_to_rgb_7 COMMAND bu_test color 2 0.0,0.0,0.501 128,128,128) # Where rgb colors are represented by comma-separated triples of # integers. -add_test(NAME bu_str_to_rgb_1 COMMAND bu_test color 3 "1 2 3" 1,2,3) -add_test(NAME bu_str_to_rgb_2 COMMAND bu_test color 3 "78/214/192" 78,214,192) -add_test(NAME bu_str_to_rgb_3 COMMAND bu_test color 3 "214 192 78" 214,192,78) -add_test(NAME bu_str_to_rgb_4 COMMAND bu_test color 3 "192,214,78" 192,214,78) -add_test(NAME bu_str_to_rgb_5 COMMAND bu_test color 3 "1234/1234/1234" 11,22,33) # invalid -add_test(NAME bu_str_to_rgb_6 COMMAND bu_test color 3 "-1 -2 -3" 11,22,33) # invalid -add_test(NAME bu_str_to_rgb_7 COMMAND bu_test color 3 "#000000" 0,0,0) -add_test(NAME bu_str_to_rgb_8 COMMAND bu_test color 3 "#ffffff" 255,255,255) -add_test(NAME bu_str_to_rgb_9 COMMAND bu_test color 3 "#FfFFfF" 255,255,255) -add_test(NAME bu_str_to_rgb_10 COMMAND bu_test color 3 "#fff" 255,255,255) -add_test(NAME bu_str_to_rgb_11 COMMAND bu_test color 3 "#C04ED6" 192,78,214) -add_test(NAME bu_str_to_rgb_12 COMMAND bu_test color 3 "#C4D" 204,68,221) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_1 COMMAND bu_test color 3 "1 2 3" 1,2,3) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_2 COMMAND bu_test color 3 "78/214/192" 78,214,192) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_3 COMMAND bu_test color 3 "214 192 78" 214,192,78) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_4 COMMAND bu_test color 3 "192,214,78" 192,214,78) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_5 COMMAND bu_test color 3 "1234/1234/1234" 11,22,33) # invalid +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_6 COMMAND bu_test color 3 "-1 -2 -3" 11,22,33) # invalid +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_7 COMMAND bu_test color 3 "#000000" 0,0,0) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_8 COMMAND bu_test color 3 "#ffffff" 255,255,255) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_9 COMMAND bu_test color 3 "#FfFFfF" 255,255,255) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_10 COMMAND bu_test color 3 "#fff" 255,255,255) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_11 COMMAND bu_test color 3 "#C04ED6" 192,78,214) +BRLCAD_ADD_TEST(NAME bu_str_to_rgb_12 COMMAND bu_test color 3 "#C4D" 204,68,221) # For function #4 (bu_color_to_rgb_floats) the format is as follows: # @@ -380,7 +381,7 @@ add_test(NAME bu_str_to_rgb_12 COMMAND bu_test color 3 "#C4D" 204,68,221) # Where rgb colors are represented by comma-separated triples of # integers or floats. -add_test(NAME bu_color_to_rgb_floats_1 COMMAND bu_test color 4 192,78,214) +BRLCAD_ADD_TEST(NAME bu_color_to_rgb_floats_1 COMMAND bu_test color 4 192,78,214) # # ************ str.c tests ************ @@ -400,10 +401,10 @@ add_test(NAME bu_color_to_rgb_floats_1 COMMAND bu_test color 4 192,78,214) # function, and expected_result is the expected resultant string in # dst. -add_test(NAME bu_strlcatm_valid_1 COMMAND bu_test str 1 "abc" "def" 7 6 "abcdef") -add_test(NAME bu_strlcatm_valid_2 COMMAND bu_test str 1 "abc" "def" 8 6 "abcdef") -add_test(NAME bu_strlcatm_bad_size_1 COMMAND bu_test str 1 "abc" "def" 0 0 "") -add_test(NAME bu_strlcatm_bad_size_2 COMMAND bu_test str 1 "abc" "def" 5 4 "abcd") +BRLCAD_ADD_TEST(NAME bu_strlcatm_valid_1 COMMAND bu_test str 1 "abc" "def" 7 6 "abcdef") +BRLCAD_ADD_TEST(NAME bu_strlcatm_valid_2 COMMAND bu_test str 1 "abc" "def" 8 6 "abcdef") +BRLCAD_ADD_TEST(NAME bu_strlcatm_bad_size_1 COMMAND bu_test str 1 "abc" "def" 0 0 "") +BRLCAD_ADD_TEST(NAME bu_strlcatm_bad_size_2 COMMAND bu_test str 1 "abc" "def" 5 4 "abcd") # For function #2 (bu_strlcpym) the format is as follows: # @@ -414,10 +415,10 @@ add_test(NAME bu_strlcatm_bad_size_2 COMMAND bu_test str 1 "abc" "def" 5 4 "abcd # function, and expected_result is the expected contents of the copied # string. -add_test(NAME bu_strlcpym_valid_1 COMMAND bu_test str 2 "abcdef" 7 6 "abcdef") -add_test(NAME bu_strlcpym_valid_2 COMMAND bu_test str 2 "abcdef" 8 6 "abcdef") -add_test(NAME bu_strlcpym_bad_size_1 COMMAND bu_test str 2 "abcdef" 0 0 "") -add_test(NAME bu_strlcpym_bad_size_2 COMMAND bu_test str 2 "abcdef" 5 4 "abcd") +BRLCAD_ADD_TEST(NAME bu_strlcpym_valid_1 COMMAND bu_test str 2 "abcdef" 7 6 "abcdef") +BRLCAD_ADD_TEST(NAME bu_strlcpym_valid_2 COMMAND bu_test str 2 "abcdef" 8 6 "abcdef") +BRLCAD_ADD_TEST(NAME bu_strlcpym_bad_size_1 COMMAND bu_test str 2 "abcdef" 0 0 "") +BRLCAD_ADD_TEST(NAME bu_strlcpym_bad_size_2 COMMAND bu_test str 2 "abcdef" 5 4 "abcd") # For function #3 (bu_strdupm) the format is as follows: # @@ -425,7 +426,7 @@ add_test(NAME bu_strlcpym_bad_size_2 COMMAND bu_test str 2 "abcdef" 5 4 "abcd") # # Where string is the string to duplicate. -add_test(NAME bu_strdupm_1 COMMAND bu_test str 3 "abcdef") +BRLCAD_ADD_TEST(NAME bu_strdupm_1 COMMAND bu_test str 3 "abcdef") # For function #4 (bu_strcmp) the format is as follows: # @@ -435,11 +436,11 @@ add_test(NAME bu_strdupm_1 COMMAND bu_test str 3 "abcdef") # expected_ret is a number of the same sign as the expected comparison # result. -add_test(NAME bu_strcmp_equal_1 COMMAND bu_test str 4 "abcd" "abcd" 0) -add_test(NAME bu_strcmp_less_1 COMMAND bu_test str 4 "a" "b" -1) -add_test(NAME bu_strcmp_less_2 COMMAND bu_test str 4 "abCD" "abcd" -1) -add_test(NAME bu_strcmp_greater_1 COMMAND bu_test str 4 "b" "a" 1) -add_test(NAME bu_strcmp_greater_2 COMMAND bu_test str 4 "abcd" "abCD" 1) +BRLCAD_ADD_TEST(NAME bu_strcmp_equal_1 COMMAND bu_test str 4 "abcd" "abcd" 0) +BRLCAD_ADD_TEST(NAME bu_strcmp_less_1 COMMAND bu_test str 4 "a" "b" -1) +BRLCAD_ADD_TEST(NAME bu_strcmp_less_2 COMMAND bu_test str 4 "abCD" "abcd" -1) +BRLCAD_ADD_TEST(NAME bu_strcmp_greater_1 COMMAND bu_test str 4 "b" "a" 1) +BRLCAD_ADD_TEST(NAME bu_strcmp_greater_2 COMMAND bu_test str 4 "abcd" "abCD" 1) # For function #5 (bu_strncmp) the format is as follows: # @@ -449,15 +450,15 @@ add_test(NAME bu_strcmp_greater_2 COMMAND bu_test str 4 "abcd" "abCD" 1) # length to give strncmp, and expected_ret is a number of the same # sign as the expected comparison result. -add_test(NAME bu_strncmp_equal_1 COMMAND bu_test str 5 "abcd" "abcd" 4 0) -add_test(NAME bu_strncmp_equal_2 COMMAND bu_test str 5 "abcd" "abcd" 3 0) -add_test(NAME bu_strncmp_equal_3 COMMAND bu_test str 5 "abcd" "abcd" 5 0) -add_test(NAME bu_strncmp_equal_4 COMMAND bu_test str 5 "abcd" "abc" 3 0) -add_test(NAME bu_strncmp_equal_5 COMMAND bu_test str 5 "abcd" "abce" 3 0) -add_test(NAME bu_strncmp_less_1 COMMAND bu_test str 5 "abcd" "abce" 4 -1) -add_test(NAME bu_strncmp_less_2 COMMAND bu_test str 5 "abCD" "abcd" 4 -1) -add_test(NAME bu_strncmp_greater_1 COMMAND bu_test str 5 "abcd" "abc" 4 1) -add_test(NAME bu_strncmp_greater_2 COMMAND bu_test str 5 "abcd" "abCD" 4 1) +BRLCAD_ADD_TEST(NAME bu_strncmp_equal_1 COMMAND bu_test str 5 "abcd" "abcd" 4 0) +BRLCAD_ADD_TEST(NAME bu_strncmp_equal_2 COMMAND bu_test str 5 "abcd" "abcd" 3 0) +BRLCAD_ADD_TEST(NAME bu_strncmp_equal_3 COMMAND bu_test str 5 "abcd" "abcd" 5 0) +BRLCAD_ADD_TEST(NAME bu_strncmp_equal_4 COMMAND bu_test str 5 "abcd" "abc" 3 0) +BRLCAD_ADD_TEST(NAME bu_strncmp_equal_5 COMMAND bu_test str 5 "abcd" "abce" 3 0) +BRLCAD_ADD_TEST(NAME bu_strncmp_less_1 COMMAND bu_test str 5 "abcd" "abce" 4 -1) +BRLCAD_ADD_TEST(NAME bu_strncmp_less_2 COMMAND bu_test str 5 "abCD" "abcd" 4 -1) +BRLCAD_ADD_TEST(NAME bu_strncmp_greater_1 COMMAND bu_test str 5 "abcd" "abc" 4 1) +BRLCAD_ADD_TEST(NAME bu_strncmp_greater_2 COMMAND bu_test str 5 "abcd" "abCD" 4 1) # For function #6 (bu_strcasecmp) the format is as follows: # @@ -467,11 +468,11 @@ add_test(NAME bu_strncmp_greater_2 COMMAND bu_test str 5 "abcd" "abCD" 4 1) # expected_ret is a number of the same sign as the expected comparison # result. -add_test(NAME bu_strcasecmp_equal_1 COMMAND bu_test str 6 "abcd" "abcd" 0) -add_test(NAME bu_strcasecmp_equal_2 COMMAND bu_test str 6 "abCD" "abcd" 0) -add_test(NAME bu_strcasecmp_equal_3 COMMAND bu_test str 6 "abcd" "abCD" 0) -add_test(NAME bu_strcasecmp_less_1 COMMAND bu_test str 4 "a" "b" -1) -add_test(NAME bu_strcasecmp_greater_1 COMMAND bu_test str 4 "b" "a" 1) +BRLCAD_ADD_TEST(NAME bu_strcasecmp_equal_1 COMMAND bu_test str 6 "abcd" "abcd" 0) +BRLCAD_ADD_TEST(NAME bu_strcasecmp_equal_2 COMMAND bu_test str 6 "abCD" "abcd" 0) +BRLCAD_ADD_TEST(NAME bu_strcasecmp_equal_3 COMMAND bu_test str 6 "abcd" "abCD" 0) +BRLCAD_ADD_TEST(NAME bu_strcasecmp_less_1 COMMAND bu_test str 4 "a" "b" -1) +BRLCAD_ADD_TEST(NAME bu_strcasecmp_greater_1 COMMAND bu_test str 4 "b" "a" 1) # For function #7 (bu_strncasecmp) the format is as follows: # @@ -481,167 +482,167 @@ add_test(NAME bu_strcasecmp_greater_1 COMMAND bu_test str 4 "b" "a" 1) # length to give strncmp, and expected_ret is a number of the same # sign as the expected comparison result. -add_test(NAME bu_strncasecmp_equal_1 COMMAND bu_test str 7 "abcd" "abcd" 4 0) -add_test(NAME bu_strncasecmp_equal_2 COMMAND bu_test str 7 "abcd" "abcd" 3 0) -add_test(NAME bu_strncasecmp_equal_3 COMMAND bu_test str 7 "abcd" "abcd" 5 0) -add_test(NAME bu_strncasecmp_equal_4 COMMAND bu_test str 7 "abcd" "abc" 3 0) -add_test(NAME bu_strncasecmp_equal_5 COMMAND bu_test str 7 "abcd" "abce" 3 0) -add_test(NAME bu_strncasecmp_equal_6 COMMAND bu_test str 7 "abCD" "abcd" 4 0) -add_test(NAME bu_strncasecmp_equal_7 COMMAND bu_test str 7 "abcd" "abCD" 4 0) -add_test(NAME bu_strncasecmp_less_1 COMMAND bu_test str 7 "abcd" "abce" 4 -1) -add_test(NAME bu_strncasecmp_greater_1 COMMAND bu_test str 7 "abcd" "abc" 4 1) +BRLCAD_ADD_TEST(NAME bu_strncasecmp_equal_1 COMMAND bu_test str 7 "abcd" "abcd" 4 0) +BRLCAD_ADD_TEST(NAME bu_strncasecmp_equal_2 COMMAND bu_test str 7 "abcd" "abcd" 3 0) +BRLCAD_ADD_TEST(NAME bu_strncasecmp_equal_3 COMMAND bu_test str 7 "abcd" "abcd" 5 0) +BRLCAD_ADD_TEST(NAME bu_strncasecmp_equal_4 COMMAND bu_test str 7 "abcd" "abc" 3 0) +BRLCAD_ADD_TEST(NAME bu_strncasecmp_equal_5 COMMAND bu_test str 7 "abcd" "abce" 3 0) +BRLCAD_ADD_TEST(NAME bu_strncasecmp_equal_6 COMMAND bu_test str 7 "abCD" "abcd" 4 0) +BRLCAD_ADD_TEST(NAME bu_strncasecmp_equal_7 COMMAND bu_test str 7 "abcd" "abCD" 4 0) +BRLCAD_ADD_TEST(NAME bu_strncasecmp_less_1 COMMAND bu_test str 7 "abcd" "abce" 4 -1) +BRLCAD_ADD_TEST(NAME bu_strncasecmp_greater_1 COMMAND bu_test str 7 "abcd" "abc" 4 1) # # *********** badmagic.c tests ************ # -add_test(NAME bu_badmagic_diff_magic COMMAND bu_test badmagic 1) -add_test(NAME bu_badmagic_normal COMMAND bu_test badmagic 2) -add_test(NAME bu_badmagic_null_ptr COMMAND bu_test badmagic 3) -add_test(NAME bu_badmagic_misaligned COMMAND bu_test badmagic 4) +BRLCAD_ADD_TEST(NAME bu_badmagic_diff_magic COMMAND bu_test badmagic 1) +BRLCAD_ADD_TEST(NAME bu_badmagic_normal COMMAND bu_test badmagic 2) +BRLCAD_ADD_TEST(NAME bu_badmagic_null_ptr COMMAND bu_test badmagic 3) +BRLCAD_ADD_TEST(NAME bu_badmagic_misaligned COMMAND bu_test badmagic 4) # # *********** vls_incr.c tests ************ # -add_test(NAME bu_vls_incr_1 COMMAND bu_test vls_incr "test1.r" 0 "NULL" 1 "test2.r") -add_test(NAME bu_vls_incr_2 COMMAND bu_test vls_incr "test1.r" 0 "0:0:0:0" 10 "test11.r") -add_test(NAME bu_vls_incr_3 COMMAND bu_test vls_incr "test1_1.r" 0 "0:0:0:0" 2 "test1_3.r") -add_test(NAME bu_vls_incr_4 COMMAND bu_test vls_incr "test-1.r" 0 "0:0:0:0" 1 "test-2.r") -add_test(NAME bu_vls_incr_5 COMMAND bu_test vls_incr "test1.r" 0 "3:0:0:0" 1 "test002.r") -add_test(NAME bu_vls_incr_6 COMMAND bu_test vls_incr "test1.r" 0 "3:5:0:0" 1 "test005.r") -add_test(NAME bu_vls_incr_7 COMMAND bu_test vls_incr "test5.r" 0 "3:5:0:0" 1 "test006.r") -add_test(NAME bu_vls_incr_8 COMMAND bu_test vls_incr "test8.r" 0 "0:0:9:0" 2 "test0.r") -add_test(NAME bu_vls_incr_9 COMMAND bu_test vls_incr "test1.r" 0 "0:0:0:2" 2 "test5.r") -add_test(NAME bu_vls_incr_10 COMMAND bu_test vls_incr "test90.r" 0 "4:20:99:5" 2 "test0020.r") -add_test(NAME bu_vls_incr_11 COMMAND bu_test vls_incr "test_1_obj.r" 1 "0:0:0:0:-:-" 1 "test-2-obj.r") -add_test(NAME bu_vls_incr_12 COMMAND bu_test vls_incr "test.r" 1 "3:0:0:0:-" 5 "test.r-005") -add_test(NAME bu_vls_incr_13 COMMAND bu_test vls_incr "test1" 0 "NULL" 1 "test2") -add_test(NAME bu_vls_incr_14 COMMAND bu_test vls_incr "test20" 0 "NULL" 100 "test120") -add_test(NAME bu_vls_incr_15 COMMAND bu_test vls_incr "test" 0 "NULL" 1 "test1") -add_test(NAME bu_vls_incr_16 COMMAND bu_test vls_incr "test" 0 "0:0:0:0:-" 1 "test-1") +BRLCAD_ADD_TEST(NAME bu_vls_incr_1 COMMAND bu_test vls_incr "test1.r" 0 "NULL" 1 "test2.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_2 COMMAND bu_test vls_incr "test1.r" 0 "0:0:0:0" 10 "test11.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_3 COMMAND bu_test vls_incr "test1_1.r" 0 "0:0:0:0" 2 "test1_3.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_4 COMMAND bu_test vls_incr "test-1.r" 0 "0:0:0:0" 1 "test-2.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_5 COMMAND bu_test vls_incr "test1.r" 0 "3:0:0:0" 1 "test002.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_6 COMMAND bu_test vls_incr "test1.r" 0 "3:5:0:0" 1 "test005.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_7 COMMAND bu_test vls_incr "test5.r" 0 "3:5:0:0" 1 "test006.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_8 COMMAND bu_test vls_incr "test8.r" 0 "0:0:9:0" 2 "test0.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_9 COMMAND bu_test vls_incr "test1.r" 0 "0:0:0:2" 2 "test5.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_10 COMMAND bu_test vls_incr "test90.r" 0 "4:20:99:5" 2 "test0020.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_11 COMMAND bu_test vls_incr "test_1_obj.r" 1 "0:0:0:0:-:-" 1 "test-2-obj.r") +BRLCAD_ADD_TEST(NAME bu_vls_incr_12 COMMAND bu_test vls_incr "test.r" 1 "3:0:0:0:-" 5 "test.r-005") +BRLCAD_ADD_TEST(NAME bu_vls_incr_13 COMMAND bu_test vls_incr "test1" 0 "NULL" 1 "test2") +BRLCAD_ADD_TEST(NAME bu_vls_incr_14 COMMAND bu_test vls_incr "test20" 0 "NULL" 100 "test120") +BRLCAD_ADD_TEST(NAME bu_vls_incr_15 COMMAND bu_test vls_incr "test" 0 "NULL" 1 "test1") +BRLCAD_ADD_TEST(NAME bu_vls_incr_16 COMMAND bu_test vls_incr "test" 0 "0:0:0:0:-" 1 "test-1") BRLCAD_ADDEXEC(bu_vls_incr_uniq vls_incr_uniq.cpp libbu TEST) add_dependencies(bu_test bu_vls_incr_uniq) -add_test(NAME bu_vls_incr_uniq_1 COMMAND bu_vls_incr_uniq "test.r1" "test.r3") -add_test(NAME bu_vls_incr_uniq_2 COMMAND bu_vls_incr_uniq "test.r2" "test.r3") +BRLCAD_ADD_TEST(NAME bu_vls_incr_uniq_1 COMMAND bu_vls_incr_uniq "test.r1" "test.r3") +BRLCAD_ADD_TEST(NAME bu_vls_incr_uniq_2 COMMAND bu_vls_incr_uniq "test.r2" "test.r3") # # *********** vls_simlify.c tests ************ # -add_test(NAME bu_vls_simplify_1 COMMAND bu_test vls_simplify "^%test1@@%" "__test1___") -add_test(NAME bu_vls_simplify_2 COMMAND bu_test vls_simplify "^%test1@@%" "_test1_" "" "_") -add_test(NAME bu_vls_simplify_3 COMMAND bu_test vls_simplify "^%test1@@%" "_test1@@_" "@" "_") -add_test(NAME bu_vls_simplify_4 COMMAND bu_test vls_simplify "^%test1.s@@%" "_test1_s_" "" "_") -add_test(NAME bu_vls_simplify_5 COMMAND bu_test vls_simplify "^%test1.s@@%" "_test1.s_" "." "_") -add_test(NAME bu_vls_simplify_6 COMMAND bu_test vls_simplify "^%test1.s@@%" "test1.s" "." "_" "_") -add_test(NAME bu_vls_simplify_7 COMMAND bu_test vls_simplify "^%test1.s@@%" "%test1.s_%" ".%" "_" "_") -add_test(NAME bu_vls_simplify_8 COMMAND bu_test vls_simplify "^%test1.s@@%" "test1.s" ".%" "_" "%_") -add_test(NAME bu_vls_simplify_9 COMMAND bu_test vls_simplify "^%test1.s@@%" "test1.s@" ".@" "_@" "_") -add_test(NAME bu_vls_simplify_10 COMMAND bu_test vls_simplify "^%test1.s@@%" "test1.s" ".@" "_@" "@_") -add_test(NAME bu_vls_simplify_11 COMMAND bu_test vls_simplify "^%test@1.s@@%" "test@1.s" ".@" "_@" "@_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_1 COMMAND bu_test vls_simplify "^%test1@@%" "__test1___") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_2 COMMAND bu_test vls_simplify "^%test1@@%" "_test1_" "" "_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_3 COMMAND bu_test vls_simplify "^%test1@@%" "_test1@@_" "@" "_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_4 COMMAND bu_test vls_simplify "^%test1.s@@%" "_test1_s_" "" "_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_5 COMMAND bu_test vls_simplify "^%test1.s@@%" "_test1.s_" "." "_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_6 COMMAND bu_test vls_simplify "^%test1.s@@%" "test1.s" "." "_" "_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_7 COMMAND bu_test vls_simplify "^%test1.s@@%" "%test1.s_%" ".%" "_" "_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_8 COMMAND bu_test vls_simplify "^%test1.s@@%" "test1.s" ".%" "_" "%_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_9 COMMAND bu_test vls_simplify "^%test1.s@@%" "test1.s@" ".@" "_@" "_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_10 COMMAND bu_test vls_simplify "^%test1.s@@%" "test1.s" ".@" "_@" "@_") +BRLCAD_ADD_TEST(NAME bu_vls_simplify_11 COMMAND bu_test vls_simplify "^%test@1.s@@%" "test@1.s" ".@" "_@" "@_") # # *********** opt.c tests ************ # -add_test(NAME bu_opt_null COMMAND bu_test opt 0 0 0) +BRLCAD_ADD_TEST(NAME bu_opt_null COMMAND bu_test opt 0 0 0) # Verbosity (custom handler) testing -add_test(NAME bu_opt_1_v_00 COMMAND bu_test opt 1 v 0) -add_test(NAME bu_opt_1_v_01 COMMAND bu_test opt 1 v 1) -add_test(NAME bu_opt_1_v_02 COMMAND bu_test opt 1 v 2) -add_test(NAME bu_opt_1_v_03 COMMAND bu_test opt 1 v 3) -add_test(NAME bu_opt_1_v_04 COMMAND bu_test opt 1 v 4) -add_test(NAME bu_opt_1_v_05 COMMAND bu_test opt 1 v 5) -add_test(NAME bu_opt_1_v_06 COMMAND bu_test opt 1 v 6) -add_test(NAME bu_opt_1_v_07 COMMAND bu_test opt 1 v 7) -add_test(NAME bu_opt_1_v_08 COMMAND bu_test opt 1 v 8) -add_test(NAME bu_opt_1_v_09 COMMAND bu_test opt 1 v 9) -add_test(NAME bu_opt_1_v_10 COMMAND bu_test opt 1 v 10) -add_test(NAME bu_opt_1_v_11 COMMAND bu_test opt 1 v 11) -add_test(NAME bu_opt_1_v_12 COMMAND bu_test opt 1 v 12) -add_test(NAME bu_opt_1_v_13 COMMAND bu_test opt 1 v 13) -add_test(NAME bu_opt_1_v_14 COMMAND bu_test opt 1 v 14) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_00 COMMAND bu_test opt 1 v 0) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_01 COMMAND bu_test opt 1 v 1) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_02 COMMAND bu_test opt 1 v 2) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_03 COMMAND bu_test opt 1 v 3) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_04 COMMAND bu_test opt 1 v 4) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_05 COMMAND bu_test opt 1 v 5) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_06 COMMAND bu_test opt 1 v 6) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_07 COMMAND bu_test opt 1 v 7) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_08 COMMAND bu_test opt 1 v 8) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_09 COMMAND bu_test opt 1 v 9) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_10 COMMAND bu_test opt 1 v 10) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_11 COMMAND bu_test opt 1 v 11) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_12 COMMAND bu_test opt 1 v 12) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_13 COMMAND bu_test opt 1 v 13) +BRLCAD_ADD_TEST(NAME bu_opt_1_v_14 COMMAND bu_test opt 1 v 14) # Help option testing -add_test(NAME bu_opt_1_h_01 COMMAND bu_test opt 1 h 1) -add_test(NAME bu_opt_1_h_02 COMMAND bu_test opt 1 h 2) -add_test(NAME bu_opt_1_h_03 COMMAND bu_test opt 1 h 3) -add_test(NAME bu_opt_1_h_04 COMMAND bu_test opt 1 h 4) -add_test(NAME bu_opt_1_h_05 COMMAND bu_test opt 1 h 5) -add_test(NAME bu_opt_1_h_06 COMMAND bu_test opt 1 h 6) -add_test(NAME bu_opt_1_h_07 COMMAND bu_test opt 1 h 7) -add_test(NAME bu_opt_1_h_08 COMMAND bu_test opt 1 h 8) -add_test(NAME bu_opt_1_h_09 COMMAND bu_test opt 1 h 9) -add_test(NAME bu_opt_1_h_10 COMMAND bu_test opt 1 h 10) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_01 COMMAND bu_test opt 1 h 1) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_02 COMMAND bu_test opt 1 h 2) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_03 COMMAND bu_test opt 1 h 3) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_04 COMMAND bu_test opt 1 h 4) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_05 COMMAND bu_test opt 1 h 5) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_06 COMMAND bu_test opt 1 h 6) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_07 COMMAND bu_test opt 1 h 7) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_08 COMMAND bu_test opt 1 h 8) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_09 COMMAND bu_test opt 1 h 9) +BRLCAD_ADD_TEST(NAME bu_opt_1_h_10 COMMAND bu_test opt 1 h 10) # Boolean option testing -add_test(NAME bu_opt_1_b_01 COMMAND bu_test opt 1 b 1) -add_test(NAME bu_opt_1_b_02 COMMAND bu_test opt 1 b 2) -add_test(NAME bu_opt_1_b_03 COMMAND bu_test opt 1 b 3) -add_test(NAME bu_opt_1_b_04 COMMAND bu_test opt 1 b 4) +BRLCAD_ADD_TEST(NAME bu_opt_1_b_01 COMMAND bu_test opt 1 b 1) +BRLCAD_ADD_TEST(NAME bu_opt_1_b_02 COMMAND bu_test opt 1 b 2) +BRLCAD_ADD_TEST(NAME bu_opt_1_b_03 COMMAND bu_test opt 1 b 3) +BRLCAD_ADD_TEST(NAME bu_opt_1_b_04 COMMAND bu_test opt 1 b 4) # String option testing -add_test(NAME bu_opt_1_s_01 COMMAND bu_test opt 1 s 1) -add_test(NAME bu_opt_1_s_02 COMMAND bu_test opt 1 s 2) -add_test(NAME bu_opt_1_s_03 COMMAND bu_test opt 1 s 3) -add_test(NAME bu_opt_1_s_04 COMMAND bu_test opt 1 s 4) -add_test(NAME bu_opt_1_s_05 COMMAND bu_test opt 1 s 5) +BRLCAD_ADD_TEST(NAME bu_opt_1_s_01 COMMAND bu_test opt 1 s 1) +BRLCAD_ADD_TEST(NAME bu_opt_1_s_02 COMMAND bu_test opt 1 s 2) +BRLCAD_ADD_TEST(NAME bu_opt_1_s_03 COMMAND bu_test opt 1 s 3) +BRLCAD_ADD_TEST(NAME bu_opt_1_s_04 COMMAND bu_test opt 1 s 4) +BRLCAD_ADD_TEST(NAME bu_opt_1_s_05 COMMAND bu_test opt 1 s 5) # Integer option testing -add_test(NAME bu_opt_1_i_01 COMMAND bu_test opt 1 i 1) -add_test(NAME bu_opt_1_i_02 COMMAND bu_test opt 1 i 2) -add_test(NAME bu_opt_1_i_03 COMMAND bu_test opt 1 i 3) -add_test(NAME bu_opt_1_i_04 COMMAND bu_test opt 1 i 4) +BRLCAD_ADD_TEST(NAME bu_opt_1_i_01 COMMAND bu_test opt 1 i 1) +BRLCAD_ADD_TEST(NAME bu_opt_1_i_02 COMMAND bu_test opt 1 i 2) +BRLCAD_ADD_TEST(NAME bu_opt_1_i_03 COMMAND bu_test opt 1 i 3) +BRLCAD_ADD_TEST(NAME bu_opt_1_i_04 COMMAND bu_test opt 1 i 4) # Long int option testing -add_test(NAME bu_opt_1_l_01 COMMAND bu_test opt 1 l 1) -add_test(NAME bu_opt_1_l_02 COMMAND bu_test opt 1 l 2) +BRLCAD_ADD_TEST(NAME bu_opt_1_l_01 COMMAND bu_test opt 1 l 1) +BRLCAD_ADD_TEST(NAME bu_opt_1_l_02 COMMAND bu_test opt 1 l 2) # fastf_t option testing -add_test(NAME bu_opt_1_f_01 COMMAND bu_test opt 1 f 1) -add_test(NAME bu_opt_1_f_02 COMMAND bu_test opt 1 f 2) -add_test(NAME bu_opt_1_f_03 COMMAND bu_test opt 1 f 3) +BRLCAD_ADD_TEST(NAME bu_opt_1_f_01 COMMAND bu_test opt 1 f 1) +BRLCAD_ADD_TEST(NAME bu_opt_1_f_02 COMMAND bu_test opt 1 f 2) +BRLCAD_ADD_TEST(NAME bu_opt_1_f_03 COMMAND bu_test opt 1 f 3) # Multiple flag option testing -add_test(NAME bu_opt_1_mf_01 COMMAND bu_test opt 1 m 1) -add_test(NAME bu_opt_1_mf_02 COMMAND bu_test opt 1 m 2) +BRLCAD_ADD_TEST(NAME bu_opt_1_mf_01 COMMAND bu_test opt 1 m 1) +BRLCAD_ADD_TEST(NAME bu_opt_1_mf_02 COMMAND bu_test opt 1 m 2) # non-static var assignment option testing (and also complex # custom arg processing testing) -add_test(NAME bu_opt_2_color_00 COMMAND bu_test opt 2 C 0) -add_test(NAME bu_opt_2_color_01 COMMAND bu_test opt 2 C 1) -add_test(NAME bu_opt_2_color_02 COMMAND bu_test opt 2 C 2) -add_test(NAME bu_opt_2_color_03 COMMAND bu_test opt 2 C 3) -add_test(NAME bu_opt_2_color_04 COMMAND bu_test opt 2 C 4) -add_test(NAME bu_opt_2_color_05 COMMAND bu_test opt 2 C 5) -add_test(NAME bu_opt_2_color_06 COMMAND bu_test opt 2 C 6) -add_test(NAME bu_opt_2_color_07 COMMAND bu_test opt 2 C 7) -add_test(NAME bu_opt_2_color_08 COMMAND bu_test opt 2 C 8) -add_test(NAME bu_opt_2_color_09 COMMAND bu_test opt 2 C 9) -add_test(NAME bu_opt_2_color_10 COMMAND bu_test opt 2 C 10) -add_test(NAME bu_opt_2_color_11 COMMAND bu_test opt 2 C 11) -add_test(NAME bu_opt_2_color_12 COMMAND bu_test opt 2 C 12) -add_test(NAME bu_opt_2_color_13 COMMAND bu_test opt 2 C 13) -add_test(NAME bu_opt_2_color_14 COMMAND bu_test opt 2 C 14) -add_test(NAME bu_opt_2_color_15 COMMAND bu_test opt 2 C 15) -add_test(NAME bu_opt_2_color_16 COMMAND bu_test opt 2 C 16) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_00 COMMAND bu_test opt 2 C 0) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_01 COMMAND bu_test opt 2 C 1) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_02 COMMAND bu_test opt 2 C 2) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_03 COMMAND bu_test opt 2 C 3) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_04 COMMAND bu_test opt 2 C 4) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_05 COMMAND bu_test opt 2 C 5) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_06 COMMAND bu_test opt 2 C 6) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_07 COMMAND bu_test opt 2 C 7) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_08 COMMAND bu_test opt 2 C 8) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_09 COMMAND bu_test opt 2 C 9) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_10 COMMAND bu_test opt 2 C 10) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_11 COMMAND bu_test opt 2 C 11) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_12 COMMAND bu_test opt 2 C 12) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_13 COMMAND bu_test opt 2 C 13) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_14 COMMAND bu_test opt 2 C 14) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_15 COMMAND bu_test opt 2 C 15) +BRLCAD_ADD_TEST(NAME bu_opt_2_color_16 COMMAND bu_test opt 2 C 16) # vector tests -add_test(NAME bu_opt_3_vect_00 COMMAND bu_test opt 3 V 0) -add_test(NAME bu_opt_3_vect_01 COMMAND bu_test opt 3 V 1) -add_test(NAME bu_opt_3_vect_02 COMMAND bu_test opt 3 V 2) -add_test(NAME bu_opt_3_vect_03 COMMAND bu_test opt 3 V 3) -add_test(NAME bu_opt_3_vect_04 COMMAND bu_test opt 3 V 4) +BRLCAD_ADD_TEST(NAME bu_opt_3_vect_00 COMMAND bu_test opt 3 V 0) +BRLCAD_ADD_TEST(NAME bu_opt_3_vect_01 COMMAND bu_test opt 3 V 1) +BRLCAD_ADD_TEST(NAME bu_opt_3_vect_02 COMMAND bu_test opt 3 V 2) +BRLCAD_ADD_TEST(NAME bu_opt_3_vect_03 COMMAND bu_test opt 3 V 3) +BRLCAD_ADD_TEST(NAME bu_opt_3_vect_04 COMMAND bu_test opt 3 V 4) # # *********** datetime.c tests ************ # foreach(num RANGE 0 11) - add_test(NAME "bu_datetime${num}" COMMAND bu_test datetime "${num}") + BRLCAD_ADD_TEST(NAME "bu_datetime${num}" COMMAND bu_test datetime "${num}") endforeach() # @@ -649,55 +650,55 @@ endforeach() # BRLCAD_ADDEXEC(bu_hash hash.cpp libbu TEST) add_dependencies(bu_test bu_hash) -add_test(NAME bu_hash_noop COMMAND bu_hash 0) -add_test(NAME bu_hash_one_entry COMMAND bu_hash 1) -add_test(NAME bu_hash_lorem_ipsum COMMAND bu_hash 2) +BRLCAD_ADD_TEST(NAME bu_hash_noop COMMAND bu_hash 0) +BRLCAD_ADD_TEST(NAME bu_hash_one_entry COMMAND bu_hash 1) +BRLCAD_ADD_TEST(NAME bu_hash_lorem_ipsum COMMAND bu_hash 2) # # *********** humanize_number.c tests ************ # -add_test(NAME bu_humanize_number_BSD COMMAND bu_test humanize_number) +BRLCAD_ADD_TEST(NAME bu_humanize_number_BSD COMMAND bu_test humanize_number) # # *********** uuid.c tests ************ # -add_test(NAME bu_uuid_encode COMMAND bu_test uuid) +BRLCAD_ADD_TEST(NAME bu_uuid_encode COMMAND bu_test uuid) -#add_test(NAME bu_uuid_create COMMAND bu_test uuid 0) -#add_test(NAME bu_uuid_compare COMMAND bu_test uuid 1) -#add_test(NAME bu_uuid_encode COMMAND bu_test uuid 2) +#BRLCAD_ADD_TEST(NAME bu_uuid_create COMMAND bu_test uuid 0) +#BRLCAD_ADD_TEST(NAME bu_uuid_compare COMMAND bu_test uuid 1) +#BRLCAD_ADD_TEST(NAME bu_uuid_encode COMMAND bu_test uuid 2) # # *********** ptbl.c tests ************ # -add_test(NAME bu_ptbl_init_default COMMAND bu_test ptbl init) -add_test(NAME bu_ptbl_init_0 COMMAND bu_test ptbl init 0) -add_test(NAME bu_ptbl_init_10000 COMMAND bu_test ptbl init 10000) +BRLCAD_ADD_TEST(NAME bu_ptbl_init_default COMMAND bu_test ptbl init) +BRLCAD_ADD_TEST(NAME bu_ptbl_init_0 COMMAND bu_test ptbl init 0) +BRLCAD_ADD_TEST(NAME bu_ptbl_init_10000 COMMAND bu_test ptbl init 10000) -add_test(NAME bu_ptbl_reset COMMAND bu_test ptbl reset) +BRLCAD_ADD_TEST(NAME bu_ptbl_reset COMMAND bu_test ptbl reset) -add_test(NAME bu_ptbl_ins COMMAND bu_test ptbl ins) -add_test(NAME bu_ptbl_ins_uniq COMMAND bu_test ptbl ins uniq) -add_test(NAME bu_ptbl_locate COMMAND bu_test ptbl locate) +BRLCAD_ADD_TEST(NAME bu_ptbl_ins COMMAND bu_test ptbl ins) +BRLCAD_ADD_TEST(NAME bu_ptbl_ins_uniq COMMAND bu_test ptbl ins uniq) +BRLCAD_ADD_TEST(NAME bu_ptbl_locate COMMAND bu_test ptbl locate) -add_test(NAME bu_ptbl_rm_cons COMMAND bu_test ptbl rm cons) -add_test(NAME bu_ptbl_rm_mix COMMAND bu_test ptbl rm mix) +BRLCAD_ADD_TEST(NAME bu_ptbl_rm_cons COMMAND bu_test ptbl rm cons) +BRLCAD_ADD_TEST(NAME bu_ptbl_rm_mix COMMAND bu_test ptbl rm mix) -add_test(NAME bu_ptbl_cat COMMAND bu_test ptbl cat) -add_test(NAME bu_ptbl_cat_uniq COMMAND bu_test ptbl cat uniq) +BRLCAD_ADD_TEST(NAME bu_ptbl_cat COMMAND bu_test ptbl cat) +BRLCAD_ADD_TEST(NAME bu_ptbl_cat_uniq COMMAND bu_test ptbl cat uniq) -add_test(NAME bu_ptbl_trunc COMMAND bu_test ptbl trunc) +BRLCAD_ADD_TEST(NAME bu_ptbl_trunc COMMAND bu_test ptbl trunc) # # *********** hook.c tests ************ # -add_test(NAME bu_hook_basic COMMAND bu_test hook basic) -add_test(NAME bu_hook_multiadd COMMAND bu_test hook multiadd) -add_test(NAME bu_hook_saverestore COMMAND bu_test hook saverestore) +BRLCAD_ADD_TEST(NAME bu_hook_basic COMMAND bu_test hook basic) +BRLCAD_ADD_TEST(NAME bu_hook_multiadd COMMAND bu_test hook multiadd) +BRLCAD_ADD_TEST(NAME bu_hook_saverestore COMMAND bu_test hook saverestore) # # *********** process.c tests ************ @@ -708,31 +709,31 @@ add_test(NAME bu_hook_saverestore COMMAND bu_test hook saverestore) # bu_test runs its process tests BRLCAD_ADDEXEC(bu_subprocess subprocess.cpp libbu TEST) add_dependencies(bu_test bu_subprocess) -add_test(NAME bu_process_basic COMMAND bu_test process "$" basic) -add_test(NAME bu_process_abort COMMAND bu_test process "$" abort) +BRLCAD_ADD_TEST(NAME bu_process_basic COMMAND bu_test process "$" basic) +BRLCAD_ADD_TEST(NAME bu_process_abort COMMAND bu_test process "$" abort) # *********** mappedfile.c tests ************ -add_test(NAME bu_mappedfile_serial_1 COMMAND bu_test mappedfile 1 1) -add_test(NAME bu_mappedfile_parallel_1 COMMAND bu_test mappedfile 2 1) -add_test(NAME bu_mappedfile_serial_16 COMMAND bu_test mappedfile 1 16) -add_test(NAME bu_mappedfile_parallel_16 COMMAND bu_test mappedfile 2 16) -add_test(NAME bu_mappedfile_serial_128 COMMAND bu_test mappedfile 1 128) -add_test(NAME bu_mappedfile_parallel_128 COMMAND bu_test mappedfile 2 128) -add_test(NAME bu_mappedfile_serial_1024 COMMAND bu_test mappedfile 1 1024) -add_test(NAME bu_mappedfile_parallel_1024 COMMAND bu_test mappedfile 2 1024) -add_test(NAME bu_mappedfile_serial_2048 COMMAND bu_test mappedfile 1 2048) -add_test(NAME bu_mappedfile_parallel_2048 COMMAND bu_test mappedfile 2 2048) -add_test(NAME bu_mappedfile_serial_16384 COMMAND bu_test mappedfile 1 16384) -add_test(NAME bu_mappedfile_parallel_16384 COMMAND bu_test mappedfile 2 16384) -add_test(NAME bu_mappedfile_repeat_serial_10 COMMAND bu_test mappedfile 3 10) -add_test(NAME bu_mappedfile_repeat_parallel_10 COMMAND bu_test mappedfile 4 10) -#add_test(NAME bu_mappedfile_parallel_free COMMAND bu_test mappedfile 5) +BRLCAD_ADD_TEST(NAME bu_mappedfile_serial_1 COMMAND bu_test mappedfile 1 1) +BRLCAD_ADD_TEST(NAME bu_mappedfile_parallel_1 COMMAND bu_test mappedfile 2 1) +BRLCAD_ADD_TEST(NAME bu_mappedfile_serial_16 COMMAND bu_test mappedfile 1 16) +BRLCAD_ADD_TEST(NAME bu_mappedfile_parallel_16 COMMAND bu_test mappedfile 2 16) +BRLCAD_ADD_TEST(NAME bu_mappedfile_serial_128 COMMAND bu_test mappedfile 1 128) +BRLCAD_ADD_TEST(NAME bu_mappedfile_parallel_128 COMMAND bu_test mappedfile 2 128) +BRLCAD_ADD_TEST(NAME bu_mappedfile_serial_1024 COMMAND bu_test mappedfile 1 1024) +BRLCAD_ADD_TEST(NAME bu_mappedfile_parallel_1024 COMMAND bu_test mappedfile 2 1024) +BRLCAD_ADD_TEST(NAME bu_mappedfile_serial_2048 COMMAND bu_test mappedfile 1 2048) +BRLCAD_ADD_TEST(NAME bu_mappedfile_parallel_2048 COMMAND bu_test mappedfile 2 2048) +BRLCAD_ADD_TEST(NAME bu_mappedfile_serial_16384 COMMAND bu_test mappedfile 1 16384) +BRLCAD_ADD_TEST(NAME bu_mappedfile_parallel_16384 COMMAND bu_test mappedfile 2 16384) +BRLCAD_ADD_TEST(NAME bu_mappedfile_repeat_serial_10 COMMAND bu_test mappedfile 3 10) +BRLCAD_ADD_TEST(NAME bu_mappedfile_repeat_parallel_10 COMMAND bu_test mappedfile 4 10) +#BRLCAD_ADD_TEST(NAME bu_mappedfile_parallel_free COMMAND bu_test mappedfile 5) # # *********** realpath.c tests ************ # -add_test(NAME bu_file_realpath_1 COMMAND bu_test realpath 1) -add_test(NAME bu_file_realpath_2 COMMAND bu_test realpath 2) +BRLCAD_ADD_TEST(NAME bu_file_realpath_1 COMMAND bu_test realpath 1) +BRLCAD_ADD_TEST(NAME bu_file_realpath_2 COMMAND bu_test realpath 2) # # *********** bu_dlopen/bu_dlsym test ************ @@ -740,19 +741,19 @@ add_test(NAME bu_file_realpath_2 COMMAND bu_test realpath 2) add_subdirectory(dylib) CMAKEFILES( - tests_bitv.cmake - tests_vls.cmake - dylib/README.txt + CMakeLists.txt + bu_test.c.in dylib/CMakeLists.txt + dylib/README.txt + dylib/dylib.c + dylib/dylib.h dylib/plugin_1.cpp dylib/plugin_2.cpp - dylib/dylib.c dylib/run.c - dylib/dylib.h + tests_bitv.cmake + tests_vls.cmake ) -CMAKEFILES(CMakeLists.txt) - # Local Variables: # tab-width: 8 # mode: cmake diff --git a/src/libbu/tests/b64.c b/src/libbu/tests/b64.c index d9b483f636d..b752473cefc 100644 --- a/src/libbu/tests/b64.c +++ b/src/libbu/tests/b64.c @@ -1,7 +1,7 @@ /* B 6 4 . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/backtrace.c b/src/libbu/tests/backtrace.c index b0cb3766a19..cfadb639a5d 100644 --- a/src/libbu/tests/backtrace.c +++ b/src/libbu/tests/backtrace.c @@ -1,7 +1,7 @@ /* B O O L E A N I Z E . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/badmagic.c b/src/libbu/tests/badmagic.c index 73ad8dffb85..794c81807bd 100644 --- a/src/libbu/tests/badmagic.c +++ b/src/libbu/tests/badmagic.c @@ -1,7 +1,7 @@ /* B A D M A G I C . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/basename.c b/src/libbu/tests/basename.c index fe5084bac85..ce29fe908e7 100644 --- a/src/libbu/tests/basename.c +++ b/src/libbu/tests/basename.c @@ -1,7 +1,7 @@ /* B A S E N A M E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/bitv.c b/src/libbu/tests/bitv.c index 9738621299a..e93f7cda57c 100644 --- a/src/libbu/tests/bitv.c +++ b/src/libbu/tests/bitv.c @@ -1,7 +1,7 @@ /* B I T V . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/booleanize.c b/src/libbu/tests/booleanize.c index 95ebb7c4728..339262859ae 100644 --- a/src/libbu/tests/booleanize.c +++ b/src/libbu/tests/booleanize.c @@ -1,7 +1,7 @@ /* B O O L E A N I Z E . C * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/bu_test.c.in b/src/libbu/tests/bu_test.c.in index 8a58ec3710c..87514e43139 100644 --- a/src/libbu/tests/bu_test.c.in +++ b/src/libbu/tests/bu_test.c.in @@ -1,7 +1,7 @@ /* B U _ T E S T . C . I N * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/color.c b/src/libbu/tests/color.c index 0c563abb5a0..0f4dd47bf97 100644 --- a/src/libbu/tests/color.c +++ b/src/libbu/tests/color.c @@ -1,7 +1,7 @@ /* C O L O R . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/datetime.c b/src/libbu/tests/datetime.c index d20f0183a6e..7ad04bab4cc 100644 --- a/src/libbu/tests/datetime.c +++ b/src/libbu/tests/datetime.c @@ -1,7 +1,7 @@ /* D A T E T I M E . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/dir.c b/src/libbu/tests/dir.c index 5f69b5cccec..b3349c790b6 100644 --- a/src/libbu/tests/dir.c +++ b/src/libbu/tests/dir.c @@ -1,7 +1,7 @@ /* D I R . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/dirname.c b/src/libbu/tests/dirname.c index a9d8bcc042e..f3503ffb559 100644 --- a/src/libbu/tests/dirname.c +++ b/src/libbu/tests/dirname.c @@ -1,7 +1,7 @@ /* D I R N A M E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/dylib/CMakeLists.txt b/src/libbu/tests/dylib/CMakeLists.txt index 23de842078c..c3bb268c11e 100644 --- a/src/libbu/tests/dylib/CMakeLists.txt +++ b/src/libbu/tests/dylib/CMakeLists.txt @@ -32,6 +32,7 @@ foreach (target_name ${plugin_targets}) endforeach (target_name${plugins}) add_library(libdylib SHARED dylib.c) +set_target_properties(libdylib PROPERTIES PREFIX "") if (HIDE_INTERNAL_SYMBOLS) set_property(TARGET plugin_1 APPEND PROPERTY COMPILE_DEFINITIONS BU_DYLIB_DLL_EXPORTS) set_property(TARGET plugin_2 APPEND PROPERTY COMPILE_DEFINITIONS BU_DYLIB_DLL_EXPORTS) @@ -51,7 +52,7 @@ set_target_properties(bu_dylib PROPERTIES FOLDER "BRL-CAD Executables/Test Progr # As a build convenience, make bu_dylib depend on everything add_dependencies(bu_dylib plugin_1 plugin_2) -add_test(NAME bu_dylib COMMAND bu_dylib) +BRLCAD_ADD_TEST(NAME bu_dylib COMMAND bu_dylib) # Local Variables: # tab-width: 8 diff --git a/src/libbu/tests/encode.c b/src/libbu/tests/encode.c index 0da009f37f4..75ef43852da 100644 --- a/src/libbu/tests/encode.c +++ b/src/libbu/tests/encode.c @@ -1,7 +1,7 @@ /* E N C O D E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/escape.c b/src/libbu/tests/escape.c index 6a90249e919..12aefe09449 100644 --- a/src/libbu/tests/escape.c +++ b/src/libbu/tests/escape.c @@ -1,7 +1,7 @@ /* E S C A P E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/file.c b/src/libbu/tests/file.c index 741533e0afe..d20aa947904 100644 --- a/src/libbu/tests/file.c +++ b/src/libbu/tests/file.c @@ -1,7 +1,7 @@ /* F I L E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/file_mime.c b/src/libbu/tests/file_mime.c index cecd2abbd5e..59af46b3557 100644 --- a/src/libbu/tests/file_mime.c +++ b/src/libbu/tests/file_mime.c @@ -1,7 +1,7 @@ /* F I L E _ M I M E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/gethostname.c b/src/libbu/tests/gethostname.c index abd853eeb9e..912d4c5d1b5 100644 --- a/src/libbu/tests/gethostname.c +++ b/src/libbu/tests/gethostname.c @@ -1,7 +1,7 @@ /* T E S T _ G E T H O S T N A M E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/hash.cpp b/src/libbu/tests/hash.cpp index 5950d1a1a31..cb2d89ae901 100644 --- a/src/libbu/tests/hash.cpp +++ b/src/libbu/tests/hash.cpp @@ -1,7 +1,7 @@ /* B U _ H A S H . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/heap.c b/src/libbu/tests/heap.c index 5825b28c787..2dc01c45b0d 100644 --- a/src/libbu/tests/heap.c +++ b/src/libbu/tests/heap.c @@ -1,7 +1,7 @@ /* H E A P . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/hook.c b/src/libbu/tests/hook.c index 462522bf391..0c6dad49e69 100644 --- a/src/libbu/tests/hook.c +++ b/src/libbu/tests/hook.c @@ -1,7 +1,7 @@ /* H O O K . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/mappedfile.c b/src/libbu/tests/mappedfile.c index 927f92f1b38..0c53c761ec9 100644 --- a/src/libbu/tests/mappedfile.c +++ b/src/libbu/tests/mappedfile.c @@ -1,7 +1,7 @@ /* M A P P E D F I L E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/opt.c b/src/libbu/tests/opt.c index 810c882c456..eedfe4d38e8 100644 --- a/src/libbu/tests/opt.c +++ b/src/libbu/tests/opt.c @@ -1,7 +1,7 @@ /* O P T . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/parallel.c b/src/libbu/tests/parallel.c index b90ab9b0fac..f6543defcb5 100644 --- a/src/libbu/tests/parallel.c +++ b/src/libbu/tests/parallel.c @@ -1,7 +1,7 @@ /* P A R A L L E L . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/path_component.c b/src/libbu/tests/path_component.c index e7affa8cecd..703d541e58f 100644 --- a/src/libbu/tests/path_component.c +++ b/src/libbu/tests/path_component.c @@ -1,7 +1,7 @@ /* P A T H _ C O M P O N E N T . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/process.c b/src/libbu/tests/process.c index 01c22792daa..7249fc64da8 100644 --- a/src/libbu/tests/process.c +++ b/src/libbu/tests/process.c @@ -1,7 +1,7 @@ /* P R O C E S S . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/progname.c b/src/libbu/tests/progname.c index 480e9fe3e7f..ef6f6f3f758 100644 --- a/src/libbu/tests/progname.c +++ b/src/libbu/tests/progname.c @@ -1,7 +1,7 @@ /* P R O G N A M E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -24,6 +24,8 @@ #include #include +#include "../whereami.h" + #include "bu.h" @@ -35,6 +37,8 @@ main(int ac, char *av[]) const char *ans; const char *res; char *tbasename; + int length, dirname_length; + char *plhs = NULL; bu_setprogname(av[0]); @@ -42,6 +46,13 @@ main(int ac, char *av[]) fprintf(stderr, "Usage: %s\n", av[0]); return 1; } + length = wai_getExecutablePath(NULL, 0, &dirname_length); + if (length > 0) { + label = "CASE 4"; + plhs = (char *)bu_calloc(length+1, sizeof(char), "program path"); + wai_getExecutablePath(plhs, length, &dirname_length); + plhs[length] = '\0'; + } tbasename = (char *)bu_calloc(strlen(av[0]), sizeof(char), "bu_progname basename"); @@ -103,10 +114,10 @@ main(int ac, char *av[]) /* CASE 4: set full, then get */ label = "CASE 4"; bu_setprogname(av[0]); - bu_setprogname(bu_argv0_full_path()); + bu_setprogname(plhs); res = bu_getprogname(); - ans = bu_argv0_full_path(); - tbasename = (char *)bu_calloc(strlen(bu_argv0_full_path()), sizeof(char), "bu_progname basename"); + ans = plhs; + tbasename = (char *)bu_calloc(strlen(plhs), sizeof(char), "bu_progname basename"); bu_path_basename(ans, tbasename); if (BU_STR_EQUAL(res, ans ? ans : "") || BU_STR_EQUAL(res, tbasename)) { @@ -132,7 +143,7 @@ main(int ac, char *av[]) /* CASE 6: set 2x full path, then get */ label = "CASE 6"; - bu_setprogname(bu_argv0_full_path()); + bu_setprogname(plhs); bu_setprogname("/monkey/see/monkey/do"); res = bu_getprogname(); ans = "do"; @@ -147,7 +158,7 @@ main(int ac, char *av[]) /* CASE 7: get the full path */ label = "CASE 7"; bu_setprogname(av[0]); - res = bu_argv0_full_path(); + res = plhs; bu_path_basename(res, tbasename); if (res[0] == BU_DIR_SEPARATOR || (strlen(res) > 3 && res[1] == ':' && (res[2] == BU_DIR_SEPARATOR || res[2] == '/'))) { @@ -157,19 +168,8 @@ main(int ac, char *av[]) fail++; } - /* CASE 8: make sure bu_getprogname leaves a full path */ - label = "CASE 8"; - bu_setprogname("/monkey/see/monkey/do"); - res = bu_getprogname(); - res = bu_argv0_full_path(); - if (BU_STR_EQUAL(res, "/monkey/see/monkey/do")) { - printf("%s: %24s -> %24s [PASSED]\n", label, res, res); - } else { - printf("%24s -> %24s (should match %s) [FAIL]\n", label, res, "/monkey/see/monkey/do"); - fail++; - } - bu_free(tbasename, "bu_progname basename"); + bu_free(plhs, "wai Executable Path"); return fail; } diff --git a/src/libbu/tests/ptbl.c b/src/libbu/tests/ptbl.c index dba7dc4ca41..1786b8d686a 100644 --- a/src/libbu/tests/ptbl.c +++ b/src/libbu/tests/ptbl.c @@ -1,7 +1,7 @@ /* P T B L . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/realpath.c b/src/libbu/tests/realpath.c index 225368b4253..35f27026c70 100644 --- a/src/libbu/tests/realpath.c +++ b/src/libbu/tests/realpath.c @@ -1,7 +1,7 @@ /* R E A L P A T H . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/semaphore.c b/src/libbu/tests/semaphore.c index 3072100ae32..ebd1bc7b1a2 100644 --- a/src/libbu/tests/semaphore.c +++ b/src/libbu/tests/semaphore.c @@ -1,7 +1,7 @@ /* S E M A P H O R E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/semchk.cpp b/src/libbu/tests/semchk.cpp index b7d3bdbec50..e9d3333a136 100644 --- a/src/libbu/tests/semchk.cpp +++ b/src/libbu/tests/semchk.cpp @@ -1,7 +1,7 @@ /* S E M C H K . C P P * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/src/libbu/tests/sort.c b/src/libbu/tests/sort.c index c28d4441820..81616940c4a 100644 --- a/src/libbu/tests/sort.c +++ b/src/libbu/tests/sort.c @@ -1,7 +1,7 @@ /* S O R T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/sscanf.c b/src/libbu/tests/sscanf.c index 13443f9e0f5..770ece15de1 100644 --- a/src/libbu/tests/sscanf.c +++ b/src/libbu/tests/sscanf.c @@ -1,7 +1,7 @@ /* T E S T _ S S C A N F . C * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/str.c b/src/libbu/tests/str.c index 1f22138f4d0..dadc34dda7e 100644 --- a/src/libbu/tests/str.c +++ b/src/libbu/tests/str.c @@ -1,7 +1,7 @@ /* S T R . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/str_isprint.c b/src/libbu/tests/str_isprint.c index 90c874c08fc..e7cdac29aba 100644 --- a/src/libbu/tests/str_isprint.c +++ b/src/libbu/tests/str_isprint.c @@ -1,7 +1,7 @@ /* S T R _ I S P R I N T . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/subprocess.cpp b/src/libbu/tests/subprocess.cpp index 4ca5040b091..306f3541123 100644 --- a/src/libbu/tests/subprocess.cpp +++ b/src/libbu/tests/subprocess.cpp @@ -1,7 +1,7 @@ /* S U B P R O C E S S . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/uuid.c b/src/libbu/tests/uuid.c index 64dfcc18082..8251e6a5540 100644 --- a/src/libbu/tests/uuid.c +++ b/src/libbu/tests/uuid.c @@ -1,7 +1,7 @@ /* U U I D . C * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/vls.c b/src/libbu/tests/vls.c index 1708e14990b..e0e1faba2f5 100644 --- a/src/libbu/tests/vls.c +++ b/src/libbu/tests/vls.c @@ -1,7 +1,7 @@ /* V L S . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/vls_incr.c b/src/libbu/tests/vls_incr.c index c420e6d9d1a..ebcd875a35e 100644 --- a/src/libbu/tests/vls_incr.c +++ b/src/libbu/tests/vls_incr.c @@ -1,7 +1,7 @@ /* V L S _ I N C R . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/vls_incr_uniq.cpp b/src/libbu/tests/vls_incr_uniq.cpp index 43adc26760d..503475225e4 100644 --- a/src/libbu/tests/vls_incr_uniq.cpp +++ b/src/libbu/tests/vls_incr_uniq.cpp @@ -1,7 +1,7 @@ /* V L S _ I N C R . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/vls_simplify.c b/src/libbu/tests/vls_simplify.c index 3ed24d18b29..599d4f046ad 100644 --- a/src/libbu/tests/vls_simplify.c +++ b/src/libbu/tests/vls_simplify.c @@ -1,7 +1,7 @@ /* V L S _ S I M P L I F Y . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/tests/vls_vprintf.c b/src/libbu/tests/vls_vprintf.c index a185038ee65..d925676b4b3 100644 --- a/src/libbu/tests/vls_vprintf.c +++ b/src/libbu/tests/vls_vprintf.c @@ -1,7 +1,7 @@ /* V L S _ V P R I N T F. C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/thread.cpp b/src/libbu/thread.cpp index 07d4a2c85d4..ba019a1cf16 100644 --- a/src/libbu/thread.cpp +++ b/src/libbu/thread.cpp @@ -1,7 +1,7 @@ /* T H R E A D . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/units.c b/src/libbu/units.c index 41b683a7a67..29fc481fff6 100644 --- a/src/libbu/units.c +++ b/src/libbu/units.c @@ -1,7 +1,7 @@ /* U N I T S . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/uuid.c b/src/libbu/uuid.c index 1d3facf6584..2df3408c4ab 100644 --- a/src/libbu/uuid.c +++ b/src/libbu/uuid.c @@ -1,7 +1,7 @@ /* U U I D . C * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/vers.c b/src/libbu/vers.c index f3f9567a171..2692d5e9030 100644 --- a/src/libbu/vers.c +++ b/src/libbu/vers.c @@ -1,7 +1,7 @@ /* V E R S . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/vfont.c b/src/libbu/vfont.c index f0d6ae96ff5..572f273e654 100644 --- a/src/libbu/vfont.c +++ b/src/libbu/vfont.c @@ -1,7 +1,7 @@ /* V F O N T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -49,7 +49,7 @@ get_font(const char* fontname, void (*vfont_log)(const char *fmt, ...)) if (fontname[0] != '/') { /* absolute path */ - const char *vfont = bu_brlcad_root("share/vfont", 1); + const char *vfont = bu_dir(NULL, 0, BU_DIR_DATA, "vfont", NULL); if (vfont) snprintf(fname, FONTNAMESZ, "%s/%s", vfont, fontname); else @@ -138,7 +138,7 @@ vfont_get(char *font) /* Open the file and read in the header information. */ if ((fp = fopen(const_font, "rb")) == NULL) { - snprintf(fname, FONTNAMESZ, "%s/%s", (char *)bu_brlcad_root("share/vfont", 0), const_font); + snprintf(fname, FONTNAMESZ, "%s/%s", bu_dir(NULL, 0, BU_DIR_DATA, "vfont", NULL), const_font); if ((fp = fopen(fname, "rb")) == NULL) { snprintf(fname, FONTNAMESZ, "%s/%s", FONTDIR2, const_font); if ((fp = fopen(fname, "rb")) == NULL) { diff --git a/src/libbu/vfont.h b/src/libbu/vfont.h index 834c8adae92..ba6795fed5d 100644 --- a/src/libbu/vfont.h +++ b/src/libbu/vfont.h @@ -1,7 +1,7 @@ /* V F O N T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libbu/vlb.c b/src/libbu/vlb.c index 60c3462e108..e58aa2a619a 100644 --- a/src/libbu/vlb.c +++ b/src/libbu/vlb.c @@ -1,7 +1,7 @@ /* V L B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/vls.c b/src/libbu/vls.c index 2b1b3302b74..4a3b067d1f0 100644 --- a/src/libbu/vls.c +++ b/src/libbu/vls.c @@ -1,7 +1,7 @@ /* V L S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/vls_incr.cpp b/src/libbu/vls_incr.cpp index 48c85bfd30a..e95d2ccd243 100644 --- a/src/libbu/vls_incr.cpp +++ b/src/libbu/vls_incr.cpp @@ -1,7 +1,7 @@ /* V L S _ I N C R . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/vls_vprintf.c b/src/libbu/vls_vprintf.c index d1ef50fd3e8..c1892cbc160 100644 --- a/src/libbu/vls_vprintf.c +++ b/src/libbu/vls_vprintf.c @@ -1,7 +1,7 @@ /* V L S _ V P R I N T F . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/vls_vprintf.h b/src/libbu/vls_vprintf.h index 8973efa1bf0..e6333d03eee 100644 --- a/src/libbu/vls_vprintf.h +++ b/src/libbu/vls_vprintf.h @@ -1,7 +1,7 @@ /* V L S _ V P R I N T F . H * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/whereami.h b/src/libbu/whereami.h index 174f223eb90..3c52d54b41c 100644 --- a/src/libbu/whereami.h +++ b/src/libbu/whereami.h @@ -24,6 +24,10 @@ #include "common.h" +/* NOTE - this is only included so we can BU_EXPORT getExecutablePath for + * libbu's testing - whereami should NOT be considered public libbu API */ +#include "bu/defines.h" + #ifdef __cplusplus extern "C" { #endif @@ -54,7 +58,7 @@ extern "C" { * @return the length of the executable path on success (without a terminal NUL * character), otherwise `-1` */ -WAI_FUNCSPEC +BU_EXPORT WAI_FUNCSPEC int WAI_PREFIX(getExecutablePath)(char* out, int capacity, int* dirname_length); /** diff --git a/src/libbu/whereis.c b/src/libbu/whereis.c index d4b91ade5d6..8398653dce4 100644 --- a/src/libbu/whereis.c +++ b/src/libbu/whereis.c @@ -1,7 +1,7 @@ /* W H E R E I S . C * BRL-CAD * - * Copyright (c) 2005-2020 United States Government as represented by + * Copyright (c) 2005-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/which.c b/src/libbu/which.c index 5004aa705d1..90e3218e4d1 100644 --- a/src/libbu/which.c +++ b/src/libbu/which.c @@ -1,7 +1,7 @@ /* W H I C H . C * BRL-CAD * - * Copyright (c) 2005-2020 United States Government as represented by + * Copyright (c) 2005-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/xdr.c b/src/libbu/xdr.c index 09f7a72039a..6f7e4319f70 100644 --- a/src/libbu/xdr.c +++ b/src/libbu/xdr.c @@ -1,7 +1,7 @@ /* X D R . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libbu/y2038/time64.c b/src/libbu/y2038/time64.c index 60f4859a45e..436fc15baf4 100644 --- a/src/libbu/y2038/time64.c +++ b/src/libbu/y2038/time64.c @@ -39,7 +39,6 @@ gmtime64_r() is a 64-bit equivalent of gmtime_r(). #include "common.h" -#include #include #include #include @@ -49,6 +48,7 @@ gmtime64_r() is a 64-bit equivalent of gmtime_r(). #include "time64_limits.h" #include "bu/log.h" +#include "bu/assert.h" #ifndef HAVE_DECL_TZSET extern void tzset (void); diff --git a/src/libdm/X/color.c b/src/libdm/X/color.c index 5af1c22ae94..d4fde848ca1 100644 --- a/src/libdm/X/color.c +++ b/src/libdm/X/color.c @@ -1,7 +1,7 @@ /* C O L O R . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/X/dm-X.c b/src/libdm/X/dm-X.c index d002bcccee1..1f40a0a4e31 100644 --- a/src/libdm/X/dm-X.c +++ b/src/libdm/X/dm-X.c @@ -1,7 +1,7 @@ /* D M - X . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/X/dm-X.h b/src/libdm/X/dm-X.h index 9b5a39adf48..592f4309518 100644 --- a/src/libdm/X/dm-X.h +++ b/src/libdm/X/dm-X.h @@ -1,7 +1,7 @@ /* D M - X . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/X/fb_X.h b/src/libdm/X/fb_X.h index 60d96948659..4f45e28a8e5 100644 --- a/src/libdm/X/fb_X.h +++ b/src/libdm/X/fb_X.h @@ -1,7 +1,7 @@ /* F B _ X . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/adc.c b/src/libdm/adc.c index d585c253f26..9f6cf0acce0 100644 --- a/src/libdm/adc.c +++ b/src/libdm/adc.c @@ -1,7 +1,7 @@ /* A D C . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libdm/asize.c b/src/libdm/asize.c index 1aabdd66a6a..47e46c82581 100644 --- a/src/libdm/asize.c +++ b/src/libdm/asize.c @@ -1,7 +1,7 @@ /* A S I Z E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/axes.c b/src/libdm/axes.c index c0c9771a757..962e0cb886a 100644 --- a/src/libdm/axes.c +++ b/src/libdm/axes.c @@ -1,7 +1,7 @@ /* A X E S . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/bview_util.c b/src/libdm/bview_util.c index 84c5c3cf1cd..56cd3809d3f 100644 --- a/src/libdm/bview_util.c +++ b/src/libdm/bview_util.c @@ -1,7 +1,7 @@ /* B V I E W _ U T I L . C * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/clip.c b/src/libdm/clip.c index df24d018a61..559e44e9dff 100644 --- a/src/libdm/clip.c +++ b/src/libdm/clip.c @@ -1,7 +1,7 @@ /* C L I P . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/dm-generic.c b/src/libdm/dm-generic.c index d51c8421844..740885203bd 100644 --- a/src/libdm/dm-generic.c +++ b/src/libdm/dm-generic.c @@ -1,7 +1,7 @@ /* D M - G E N E R I C . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/dm_init.cpp b/src/libdm/dm_init.cpp index e92eb4e4074..86d26beb2c5 100644 --- a/src/libdm/dm_init.cpp +++ b/src/libdm/dm_init.cpp @@ -1,7 +1,7 @@ /* D M _ I N I T . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -168,6 +168,8 @@ libdm_init(void) } + bu_argv_free(nfiles, filenames); + bu_vls_free(&plugin_pattern); dm_backends = (void *)&dm_map; diff --git a/src/libdm/dm_plugins.cpp b/src/libdm/dm_plugins.cpp index 93b7cae5e0e..264c24a546f 100644 --- a/src/libdm/dm_plugins.cpp +++ b/src/libdm/dm_plugins.cpp @@ -1,7 +1,7 @@ /* D M _ P L U G I N S . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -29,6 +29,7 @@ #include #include #include +#include #include "bu/app.h" #include "bu/dylib.h" @@ -47,6 +48,7 @@ dm_open(void *interp, const char *type, int argc, const char *argv[]) if (BU_STR_EQUIV(type, "nu") || BU_STR_EQUIV(type, "null")) { return dm_null.i->dm_open(interp, argc, argv); } + std::map *dmb = (std::map *)dm_backends; std::string key(type); std::transform(key.begin(), key.end(), key.begin(), [](unsigned char c) { return std::tolower(c); }); @@ -54,6 +56,7 @@ dm_open(void *interp, const char *type, int argc, const char *argv[]) if (d_it == dmb->end()) { return DM_NULL; } + const struct dm *d = d_it->second; struct dm *dmp = d->i->dm_open(interp, argc, argv); return dmp; @@ -64,8 +67,10 @@ extern "C" int dm_have_graphics() { int ret = 0; + std::map *dmb = (std::map *)dm_backends; std::map::iterator d_it; + for (d_it = dmb->begin(); d_it != dmb->end(); d_it++) { std::string key = d_it->first; const struct dm *d = d_it->second; @@ -74,6 +79,7 @@ dm_have_graphics() break; } } + return ret; } @@ -82,8 +88,10 @@ extern "C" const char * dm_graphics_system(const char *dmtype) { const char *ret = NULL; + std::map *dmb = (std::map *)dm_backends; std::map::iterator d_it; + for (d_it = dmb->begin(); d_it != dmb->end(); d_it++) { std::string key = d_it->first; const struct dm *d = d_it->second; @@ -93,10 +101,14 @@ dm_graphics_system(const char *dmtype) break; } } + return ret; } +static const char *priority_list[] = {"osgl", "wgl", "ogl", "X", "tk", NULL}; + + extern "C" void dm_list_types(struct bu_vls *list, const char *separator) { @@ -104,42 +116,14 @@ dm_list_types(struct bu_vls *list, const char *separator) return; } - // We've got something, and may need a separator - struct bu_vls sep = BU_VLS_INIT_ZERO; - if (!separator) { - bu_vls_sprintf(&sep, " "); - } else { - bu_vls_sprintf(&sep, "%s", separator); - } + if (!separator) + separator = " "; - // TODO - the first method below is independent of specific backends, - // and preferable for that reason. Unfortunately, Archer is calling - // dm_list_tcl, which calls this function, and implicitly expects the - // returned list to be in priority order - it takes the first one - // assuming it is the "best". What should happen is that Archer should - // encode it's own preferences at the app level, but for the moment - // respect the priority ordering in the returned list to keep Archer - // working -#if 0 - std::map *dmb = (std::map *)dm_backends; - std::map::iterator d_it; - for (d_it = dmb->begin(); d_it != dmb->end(); d_it++) { - std::string key = d_it->first; - const struct dm *d = d_it->second; - if (strlen(bu_vls_cstr(list)) > 0) bu_vls_printf(list, "%s", bu_vls_cstr(&sep)); - const char *dname = dm_get_name(d); - if (dname) - bu_vls_printf(list, "%s", dname); - } - if (strlen(bu_vls_cstr(list)) > 0) bu_vls_printf(list, "%s", bu_vls_cstr(&sep)); - bu_vls_printf(list, "nu"); -#else - static const char *priority_list[] = {"osgl", "wgl", "ogl", "X", "tk", "nu"}; std::map *dmb = (std::map *)dm_backends; int i = 0; const char *b = priority_list[i]; - while (!BU_STR_EQUAL(b, "nu")) { + while (b) { std::string key(b); std::transform(key.begin(), key.end(), key.begin(), [](unsigned char c) { return std::tolower(c); }); std::map::iterator d_it = dmb->find(key); @@ -149,37 +133,44 @@ dm_list_types(struct bu_vls *list, const char *separator) continue; } const struct dm *d = d_it->second; - if (strlen(bu_vls_cstr(list)) > 0) bu_vls_printf(list, "%s", bu_vls_cstr(&sep)); const char *dname = dm_get_name(d); - if (dname) + if (dname) { + if (strlen(bu_vls_cstr(list)) > 0) + bu_vls_printf(list, "%s", separator); bu_vls_printf(list, "%s", dname); + } i++; b = priority_list[i]; } -#endif + if (strlen(bu_vls_cstr(list)) > 0) + bu_vls_printf(list, "%s", separator); + bu_vls_strcat(list, "nu"); } extern "C" int dm_validXType(const char *dpy_string, const char *name) { - if (BU_STR_EQUIV(name, "nu")) { - return 1; - } - if (BU_STR_EQUIV(name, "null")) { + if (BU_STR_EQUIV(name, "nu") || BU_STR_EQUIV(name, "null")) { return 1; } + std::map *dmb = (std::map *)dm_backends; std::string key(name); std::transform(key.begin(), key.end(), key.begin(), [](unsigned char c) { return std::tolower(c); }); std::map::iterator d_it = dmb->find(key); + if (d_it == dmb->end()) { return 0; } + const struct dm *d = d_it->second; int is_valid = d->i->dm_viable(dpy_string); + return is_valid; } + + extern "C" int dm_valid_type(const char *name, const char *dpy_string) { @@ -200,16 +191,17 @@ dm_valid_type(const char *name, const char *dpy_string) extern "C" const char * dm_bestXType(const char *dpy_string) { - static const char *priority_list[] = {"osgl", "wgl", "ogl", "X", "tk", "nu"}; std::map *dmb = (std::map *)dm_backends; const char *ret = NULL; int i = 0; const char *b = priority_list[i]; - while (!BU_STR_EQUAL(b, "nu")) { + + while (b) { std::string key(b); std::transform(key.begin(), key.end(), key.begin(), [](unsigned char c) { return std::tolower(c); }); std::map::iterator d_it = dmb->find(key); + if (d_it == dmb->end()) { i++; b = priority_list[i]; @@ -223,8 +215,10 @@ dm_bestXType(const char *dpy_string) i++; b = priority_list[i]; } + if (!ret) + ret = "nu"; - return (ret) ? ret : b; + return ret; } @@ -240,16 +234,17 @@ dm_bestXType(const char *dpy_string) extern "C" const char * dm_default_type() { - static const char *priority_list[] = {"osgl", "wgl", "ogl", "X", "tk", "nu"}; std::map *dmb = (std::map *)dm_backends; const char *ret = NULL; int i = 0; const char *b = priority_list[i]; - while (!BU_STR_EQUAL(b, "nu")) { + + while (b) { std::string key(b); std::transform(key.begin(), key.end(), key.begin(), [](unsigned char c) { return std::tolower(c); }); std::map::iterator d_it = dmb->find(key); + if (d_it == dmb->end()) { i++; b = priority_list[i]; @@ -257,17 +252,22 @@ dm_default_type() } ret = b; } + if (!ret) + ret = "nu"; - return (ret) ? ret : b; + return ret; } extern "C" void fb_set_interface(struct fb *ifp, const char *interface_type) { - if (!ifp) return; + if (!ifp) + return; + std::map *fmb = (std::map *)fb_backends; std::map::iterator f_it; + for (f_it = fmb->begin(); f_it != fmb->end(); f_it++) { const struct fb *f = f_it->second; if (bu_strncmp(interface_type, f->i->if_name+5, strlen(interface_type)) == 0) { @@ -284,6 +284,7 @@ fb_get_platform_specific(uint32_t magic) { std::map *fmb = (std::map *)fb_backends; std::map::iterator f_it; + for (f_it = fmb->begin(); f_it != fmb->end(); f_it++) { const struct fb *f = f_it->second; if (magic == f->i->type_magic) { @@ -303,6 +304,7 @@ fb_put_platform_specific(struct fb_platform_specific *fb_p) std::map *fmb = (std::map *)fb_backends; std::map::iterator f_it; + for (f_it = fmb->begin(); f_it != fmb->end(); f_it++) { const struct fb *f = f_it->second; if (fb_p->magic == f->i->type_magic) { @@ -310,6 +312,7 @@ fb_put_platform_specific(struct fb_platform_specific *fb_p) return; } } + return; } @@ -324,7 +327,7 @@ fb_put_platform_specific(struct fb_platform_specific *fb_p) static int fb_totally_numeric(const char *s) { - if (s == (char *)0 || *s == 0) + if (!s || s[0] == '\0') return 0; while (*s) { @@ -340,42 +343,48 @@ fb_totally_numeric(const char *s) struct fb * fb_open(const char *file, int width, int height) { - static const char *priority_list[] = {"/dev/osgl", "/dev/wgl", "/dev/ogl", "/dev/X", "/dev/tk", "nu"}; struct fb *ifp; - int i; + int i = 0; const char *b; + std::map *fmb = (std::map *)fb_backends; std::map::iterator f_it; if (width < 0 || height < 0) return FB_NULL; - ifp = (struct fb *) calloc(sizeof(struct fb), 1); + ifp = (struct fb *)calloc(sizeof(struct fb), 1); if (ifp == FB_NULL) { Malloc_Bomb(sizeof(struct fb)); return FB_NULL; } - ifp->i = (struct fb_impl *) calloc(sizeof(struct fb_impl), 1); + ifp->i = (struct fb_impl *)calloc(sizeof(struct fb_impl), 1); if (file == NULL || *file == '\0') { /* No name given, check environment variable first. */ - if ((file = (const char *)getenv("FB_FILE")) == NULL || *file == '\0') { - /* None set, use first valid device in priority order as default */ + file = (const char *)getenv("FB_FILE"); + + if (!file || file[0] == '\0') { + /* None set, use first valid device as default */ i = 0; - b = priority_list[i]; - while (!BU_STR_EQUAL(b, "nu")) { + char device[1024] = {0}; + snprintf(device, sizeof(device), "/dev/%s", priority_list[i]); + b = device; + + while (priority_list[i]) { f_it = fmb->find(std::string(b)); if (f_it == fmb->end()) { i++; - b = priority_list[i]; + snprintf(device, sizeof(device), "/dev/%s", priority_list[i]); + b = device; continue; } const struct fb *f = f_it->second; - *ifp->i = *(f->i); /* struct copy */ + *ifp->i = *(f->i); /* struct copy */ file = ifp->i->if_name; goto found_interface; } - *ifp->i = *fb_null_interface.i; /* struct copy */ + *ifp->i = *fb_null_interface.i; /* struct copy */ file = ifp->i->if_name; goto found_interface; } @@ -430,7 +439,7 @@ fb_open(const char *file, int width, int height) found_interface: /* Copy over the name it was opened by. */ ifp->i->if_name = (char*)malloc((unsigned) strlen(file) + 1); - if (ifp->i->if_name == (char *)NULL) { + if (!ifp->i->if_name) { Malloc_Bomb(strlen(file) + 1); free((void *) ifp); return FB_NULL; @@ -440,7 +449,7 @@ fb_open(const char *file, int width, int height) /* Mark OK by filling in magic number */ ifp->i->if_magic = FB_MAGIC; - i=(*ifp->i->if_open)(ifp, file, width, height); + i = (*ifp->i->if_open)(ifp, file, width, height); if (i != 0) { ifp->i->if_magic = 0; /* sanity */ free((void *) ifp->i->if_name); @@ -466,6 +475,7 @@ fb_genhelp(void) { std::map *fmb = (std::map *)fb_backends; std::map::iterator f_it; + for (f_it = fmb->begin(); f_it != fmb->end(); f_it++) { const struct fb *f = f_it->second; fb_log("%-12s %s\n", f->i->if_name, f->i->if_type); diff --git a/src/libdm/dm_util.c b/src/libdm/dm_util.c index 08a05ab6331..8a9a9b1a8d3 100644 --- a/src/libdm/dm_util.c +++ b/src/libdm/dm_util.c @@ -1,7 +1,7 @@ /* D M _ U T I L . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/fb_generic.c b/src/libdm/fb_generic.c index 115275f0e9e..775af90964a 100644 --- a/src/libdm/fb_generic.c +++ b/src/libdm/fb_generic.c @@ -1,7 +1,7 @@ /* F B _ G E N E R I C . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/fb_log.c b/src/libdm/fb_log.c index 6513aedc8bb..58c3ad313d8 100644 --- a/src/libdm/fb_log.c +++ b/src/libdm/fb_log.c @@ -1,7 +1,7 @@ /* F B _ L O G . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/fb_paged_io.c b/src/libdm/fb_paged_io.c index ce0dbb8eca1..21226878f49 100644 --- a/src/libdm/fb_paged_io.c +++ b/src/libdm/fb_paged_io.c @@ -1,7 +1,7 @@ /* F B _ P A G E D _ I O . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/fb_rect.c b/src/libdm/fb_rect.c index 530c4bdd3f4..63c0185ebf5 100644 --- a/src/libdm/fb_rect.c +++ b/src/libdm/fb_rect.c @@ -1,7 +1,7 @@ /* F B _ R E C T . C * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/fb_util.c b/src/libdm/fb_util.c index 7e9766014fd..306087dbccf 100644 --- a/src/libdm/fb_util.c +++ b/src/libdm/fb_util.c @@ -1,7 +1,7 @@ /* F B _ U T I L . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/glx/dm-glx.h b/src/libdm/glx/dm-glx.h index 5ed14376789..c890ce7fd7f 100644 --- a/src/libdm/glx/dm-glx.h +++ b/src/libdm/glx/dm-glx.h @@ -1,7 +1,7 @@ /* D M - G L X . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/glx/dm-ogl.c b/src/libdm/glx/dm-ogl.c index 8e9b708b5fe..3766e7b8dd9 100644 --- a/src/libdm/glx/dm-ogl.c +++ b/src/libdm/glx/dm-ogl.c @@ -1,7 +1,7 @@ /* D M - O G L . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/glx/dm-ogl.h b/src/libdm/glx/dm-ogl.h index 37b9969a03c..d84780f07fa 100644 --- a/src/libdm/glx/dm-ogl.h +++ b/src/libdm/glx/dm-ogl.h @@ -1,7 +1,7 @@ /* D M - O G L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/glx/fb_ogl.h b/src/libdm/glx/fb_ogl.h index cfb3f744810..680f38d1633 100644 --- a/src/libdm/glx/fb_ogl.h +++ b/src/libdm/glx/fb_ogl.h @@ -1,7 +1,7 @@ /* F B _ O G L . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/glx/if_ogl.c b/src/libdm/glx/if_ogl.c index 2714ae0c675..27b067ca2df 100644 --- a/src/libdm/glx/if_ogl.c +++ b/src/libdm/glx/if_ogl.c @@ -1,7 +1,7 @@ /* I F _ O G L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/grid.c b/src/libdm/grid.c index 8dd97c5c91b..6e8afc48090 100644 --- a/src/libdm/grid.c +++ b/src/libdm/grid.c @@ -1,7 +1,7 @@ /* G R I D . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libdm/if_TEMPLATE.c b/src/libdm/if_TEMPLATE.c index 877b71fc867..6c8bc3f89c1 100644 --- a/src/libdm/if_TEMPLATE.c +++ b/src/libdm/if_TEMPLATE.c @@ -1,7 +1,7 @@ /* I F _ T E M P L A T E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/if_disk.c b/src/libdm/if_disk.c index 197e1ef0b58..716d69b4ee8 100644 --- a/src/libdm/if_disk.c +++ b/src/libdm/if_disk.c @@ -1,7 +1,7 @@ /* I F _ D I S K . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/if_mem.c b/src/libdm/if_mem.c index 52ce389cf4b..9bafe6140b5 100644 --- a/src/libdm/if_mem.c +++ b/src/libdm/if_mem.c @@ -1,7 +1,7 @@ /* I F _ M E M . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/if_remote.c b/src/libdm/if_remote.c index c12df1babd2..19fa6cb1ecb 100644 --- a/src/libdm/if_remote.c +++ b/src/libdm/if_remote.c @@ -1,7 +1,7 @@ /* I F _ R E M O T E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/if_stack.c b/src/libdm/if_stack.c index e4bd243deef..48f5a1673f7 100644 --- a/src/libdm/if_stack.c +++ b/src/libdm/if_stack.c @@ -1,7 +1,7 @@ /* I F _ S T A C K . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/include/calltable.h b/src/libdm/include/calltable.h index 650f1c17d95..87b33d68fb9 100644 --- a/src/libdm/include/calltable.h +++ b/src/libdm/include/calltable.h @@ -1,7 +1,7 @@ /* C A L L T A B L E . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/include/private.h b/src/libdm/include/private.h index 73d3c4bd2c6..7da1e3b6873 100644 --- a/src/libdm/include/private.h +++ b/src/libdm/include/private.h @@ -1,7 +1,7 @@ /* D M _ P R I V A T E . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/knob.c b/src/libdm/knob.c index 67ac85c9e61..f21ba09a2ea 100644 --- a/src/libdm/knob.c +++ b/src/libdm/knob.c @@ -1,7 +1,7 @@ /* K N O B . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/labels.c b/src/libdm/labels.c index fcb33b7bb6c..a6443d9d932 100644 --- a/src/libdm/labels.c +++ b/src/libdm/labels.c @@ -1,7 +1,7 @@ /* L A B E L S . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/null/dm-Null.c b/src/libdm/null/dm-Null.c index 2957bb1b0cd..23aa2afaa3d 100644 --- a/src/libdm/null/dm-Null.c +++ b/src/libdm/null/dm-Null.c @@ -1,7 +1,7 @@ /* D M - N U L L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/null/dm-Null.h b/src/libdm/null/dm-Null.h index f71407c9a48..52d59873b43 100644 --- a/src/libdm/null/dm-Null.h +++ b/src/libdm/null/dm-Null.h @@ -1,7 +1,7 @@ /* D M - N U L L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/null/if_null.c b/src/libdm/null/if_null.c index c26b415c2c5..27cb525fc25 100644 --- a/src/libdm/null/if_null.c +++ b/src/libdm/null/if_null.c @@ -1,7 +1,7 @@ /* I F _ N U L L . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/options.c b/src/libdm/options.c index d9f7a8d1d9e..ef55b5a5c13 100644 --- a/src/libdm/options.c +++ b/src/libdm/options.c @@ -1,7 +1,7 @@ /* O P T I O N S . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -38,6 +38,9 @@ dm_processOptions(struct dm *dmp, struct bu_vls *init_proc_vls, int argc, const { int c; + if (argc < 1 || !argv) + return 0; + char **av = bu_argv_dup(argc, argv); bu_optind = 0; /* re-init bu_getopt */ diff --git a/src/libdm/osgl/dm-osgl.cpp b/src/libdm/osgl/dm-osgl.cpp index ec86a09227a..c7f498f902b 100644 --- a/src/libdm/osgl/dm-osgl.cpp +++ b/src/libdm/osgl/dm-osgl.cpp @@ -1,7 +1,7 @@ /* D M - O S G L . C P P * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -688,7 +688,7 @@ osgl_open(void *vinterp, int argc, const char **argv) return DM_NULL; } privvars->fontNormal = FONS_INVALID; - privvars->fontNormal = fonsAddFont(privvars->fs, "sans", bu_brlcad_root("share/fonts/ProFont.ttf", 0)); + privvars->fontNormal = fonsAddFont(privvars->fs, "sans", bu_dir(NULL, 0, BU_DIR_DATA, "fonts", "ProFont.ttf", NULL)); /* This is the applications display list offset */ dmp->i->dm_displaylist = glGenLists(0); diff --git a/src/libdm/osgl/dm-osgl.h b/src/libdm/osgl/dm-osgl.h index 75d66a9633d..ec2e6de521c 100644 --- a/src/libdm/osgl/dm-osgl.h +++ b/src/libdm/osgl/dm-osgl.h @@ -1,7 +1,7 @@ /* D M - O S G . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/osgl/fb_osgl.h b/src/libdm/osgl/fb_osgl.h index 2001efde7b8..1ba28aecc1d 100644 --- a/src/libdm/osgl/fb_osgl.h +++ b/src/libdm/osgl/fb_osgl.h @@ -1,7 +1,7 @@ /* F B _ O S G L . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/osgl/if_osgl.cpp b/src/libdm/osgl/if_osgl.cpp index e1678b629dc..91037578282 100644 --- a/src/libdm/osgl/if_osgl.cpp +++ b/src/libdm/osgl/if_osgl.cpp @@ -1,7 +1,7 @@ /* I F _ O S G L . C P P * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -506,8 +506,8 @@ fb_osgl_open(struct fb *ifp, const char *UNUSED(file), int width, int height) std::string ppath = std::string(bu_dir(NULL, 0, BU_DIR_LIB, "osgPlugins")); osgDB::FilePathList paths = osgDB::Registry::instance()->getLibraryFilePathList(); if (ppath.length()) { - /* The first entry is the final installed path - prefer that to the local - * bu_brlcad_root lib directory. This means our new path should be the + /* The first entry is the final installed path - prefer that to the + * local lib directory. This means our new path should be the * second entry in the list - insert it accordingly. */ osgDB::FilePathList::iterator in_itr=++(paths.begin()); paths.insert(in_itr, ppath); diff --git a/src/libdm/osgl/osg-test.cpp b/src/libdm/osgl/osg-test.cpp index b54505c0c14..92f32bdf51f 100644 --- a/src/libdm/osgl/osg-test.cpp +++ b/src/libdm/osgl/osg-test.cpp @@ -1,7 +1,7 @@ /* O S G - T E S T . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/osgl/osg_bob.cpp b/src/libdm/osgl/osg_bob.cpp old mode 100755 new mode 100644 index 3fcea01cfbd..5436c7e8b94 --- a/src/libdm/osgl/osg_bob.cpp +++ b/src/libdm/osgl/osg_bob.cpp @@ -1,7 +1,7 @@ /* O S G . C P P * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/plot/dm-plot.c b/src/libdm/plot/dm-plot.c index 4bdb074c44b..bb2efb6d895 100644 --- a/src/libdm/plot/dm-plot.c +++ b/src/libdm/plot/dm-plot.c @@ -1,7 +1,7 @@ /* D M - P L O T . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/plot/dm-plot.h b/src/libdm/plot/dm-plot.h index de104b6ba63..c45b5e00ffd 100644 --- a/src/libdm/plot/dm-plot.h +++ b/src/libdm/plot/dm-plot.h @@ -1,7 +1,7 @@ /* D M - P L O T . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/postscript/dm-ps.c b/src/libdm/postscript/dm-ps.c index 63be770c6b0..f26f6f69b57 100644 --- a/src/libdm/postscript/dm-ps.c +++ b/src/libdm/postscript/dm-ps.c @@ -1,7 +1,7 @@ /* D M - P S . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/postscript/dm-ps.h b/src/libdm/postscript/dm-ps.h index 0ee335b69bf..0e6614c23bc 100644 --- a/src/libdm/postscript/dm-ps.h +++ b/src/libdm/postscript/dm-ps.h @@ -1,7 +1,7 @@ /* D M - P S . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/qt/dm-qt.cpp b/src/libdm/qt/dm-qt.cpp index 571a89a57a4..e68b8b133e9 100644 --- a/src/libdm/qt/dm-qt.cpp +++ b/src/libdm/qt/dm-qt.cpp @@ -1,7 +1,7 @@ /* D M - Q T . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/qt/dm-qt.h b/src/libdm/qt/dm-qt.h index 22df50fa68d..5223c58425f 100644 --- a/src/libdm/qt/dm-qt.h +++ b/src/libdm/qt/dm-qt.h @@ -1,7 +1,7 @@ /* D M - Q T . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/qt/fb_qt.h b/src/libdm/qt/fb_qt.h index 7944c1cf335..56c098c7a10 100644 --- a/src/libdm/qt/fb_qt.h +++ b/src/libdm/qt/fb_qt.h @@ -1,7 +1,7 @@ /* F B _ Q T . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/qt/if_qt.cpp b/src/libdm/qt/if_qt.cpp index 340532d3769..56bfbc69641 100644 --- a/src/libdm/qt/if_qt.cpp +++ b/src/libdm/qt/if_qt.cpp @@ -1,7 +1,7 @@ /* I F _ Q T . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/rect.c b/src/libdm/rect.c index 43c03b5df01..ee8f638ae41 100644 --- a/src/libdm/rect.c +++ b/src/libdm/rect.c @@ -1,7 +1,7 @@ /* R E C T . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libdm/scale.c b/src/libdm/scale.c index 083f1597bc9..20a760ab71e 100644 --- a/src/libdm/scale.c +++ b/src/libdm/scale.c @@ -1,7 +1,7 @@ /* S C A L E . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/tests/CMakeLists.txt b/src/libdm/tests/CMakeLists.txt index 4dcb0d1e8c7..0a2925f79c9 100644 --- a/src/libdm/tests/CMakeLists.txt +++ b/src/libdm/tests/CMakeLists.txt @@ -1,7 +1,7 @@ # C M A K E L I S T S . T X T # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/src/libdm/tests/dm_test.c b/src/libdm/tests/dm_test.c index 69bef3ffc75..a5b8727a765 100644 --- a/src/libdm/tests/dm_test.c +++ b/src/libdm/tests/dm_test.c @@ -1,7 +1,7 @@ /* D M _ T E S T . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/tk/dm-tk.c b/src/libdm/tk/dm-tk.c index f2a0682bf27..43cf9c6b017 100644 --- a/src/libdm/tk/dm-tk.c +++ b/src/libdm/tk/dm-tk.c @@ -1,7 +1,7 @@ /* D M - T K . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/tk/dm-tk.h b/src/libdm/tk/dm-tk.h index d4a7c16f4f1..bc77426ff6d 100644 --- a/src/libdm/tk/dm-tk.h +++ b/src/libdm/tk/dm-tk.h @@ -1,7 +1,7 @@ /* D M - T K . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/tk/if_tk.c b/src/libdm/tk/if_tk.c index 217e7f0b581..0ae7ef107ac 100644 --- a/src/libdm/tk/if_tk.c +++ b/src/libdm/tk/if_tk.c @@ -1,7 +1,7 @@ /* I F _ T K . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/txt/dm-txt.c b/src/libdm/txt/dm-txt.c index afa354c9a6c..a9a74da64f2 100644 --- a/src/libdm/txt/dm-txt.c +++ b/src/libdm/txt/dm-txt.c @@ -1,7 +1,7 @@ /* D M - T X T . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/txt/if_debug.c b/src/libdm/txt/if_debug.c index a466dd54075..f69187e0827 100644 --- a/src/libdm/txt/if_debug.c +++ b/src/libdm/txt/if_debug.c @@ -1,7 +1,7 @@ /* I F _ D E B U G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/vers.c b/src/libdm/vers.c index f58cf35ed78..176411097dd 100644 --- a/src/libdm/vers.c +++ b/src/libdm/vers.c @@ -1,7 +1,7 @@ /* V E R S . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/wgl/CMakeLists.txt b/src/libdm/wgl/CMakeLists.txt index 7891b31f706..8e8ee053004 100644 --- a/src/libdm/wgl/CMakeLists.txt +++ b/src/libdm/wgl/CMakeLists.txt @@ -15,6 +15,9 @@ if(WIN32 AND BRLCAD_ENABLE_OPENGL) ${OPENGL_INCLUDE_DIR_GL} ${TCL_INCLUDE_PATH} ${TK_INCLUDE_PATH} + # Needed for tkWinInt.h + ${CMAKE_CURRENT_SOURCE_DIR}/../../other/ext/tk/generic + ${CMAKE_CURRENT_SOURCE_DIR}/../../other/ext/tk/win ) set_property(SOURCE dm-wgl.c APPEND PROPERTY COMPILE_DEFINITIONS FB_USE_INTERNAL_API) diff --git a/src/libdm/wgl/dm-wgl.c b/src/libdm/wgl/dm-wgl.c index 5b1b7142061..c779722c8f8 100644 --- a/src/libdm/wgl/dm-wgl.c +++ b/src/libdm/wgl/dm-wgl.c @@ -1,7 +1,7 @@ /* D M - W G L . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -27,7 +27,7 @@ #include "tk.h" /* needed for TkWinGetHWND() */ -#include "TkWinInt.h" +#include "tkWinInt.h" #undef VMIN /* is used in vmath.h, too */ diff --git a/src/libdm/wgl/dm-wgl.h b/src/libdm/wgl/dm-wgl.h index 3f3bd279863..0f10bca5508 100644 --- a/src/libdm/wgl/dm-wgl.h +++ b/src/libdm/wgl/dm-wgl.h @@ -1,7 +1,7 @@ /* D M - W G L . H * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/wgl/fb_wgl.h b/src/libdm/wgl/fb_wgl.h index e7c3d3ab07e..1cb513e4c72 100644 --- a/src/libdm/wgl/fb_wgl.h +++ b/src/libdm/wgl/fb_wgl.h @@ -1,7 +1,7 @@ /* F B _ W G L . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libdm/wgl/if_wgl.c b/src/libdm/wgl/if_wgl.c index f4ea31ce204..7dc9d4a33e6 100644 --- a/src/libdm/wgl/if_wgl.c +++ b/src/libdm/wgl/if_wgl.c @@ -1,7 +1,7 @@ /* I F _ W G L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libfft/ditsplit.c b/src/libfft/ditsplit.c index f690a931f02..f69289f7e53 100644 --- a/src/libfft/ditsplit.c +++ b/src/libfft/ditsplit.c @@ -1,7 +1,7 @@ /* D I T S P L I T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libfft/ditsplitc.c b/src/libfft/ditsplitc.c index d135c7377e1..adbda3f4b2d 100644 --- a/src/libfft/ditsplitc.c +++ b/src/libfft/ditsplitc.c @@ -1,7 +1,7 @@ /* D I T S P L I T C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libfft/fftc.c b/src/libfft/fftc.c index 19e41349202..7e987be7c51 100644 --- a/src/libfft/fftc.c +++ b/src/libfft/fftc.c @@ -1,7 +1,7 @@ /* F F T C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libfft/fftest.c b/src/libfft/fftest.c index 5e64dc50f89..986624cde93 100644 --- a/src/libfft/fftest.c +++ b/src/libfft/fftest.c @@ -1,7 +1,7 @@ /* F F T E S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libfft/fftfast.c b/src/libfft/fftfast.c index 9e24e57fd1b..037b57b7108 100644 --- a/src/libfft/fftfast.c +++ b/src/libfft/fftfast.c @@ -1,7 +1,7 @@ /* F F T F A S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libfft/ifftc.c b/src/libfft/ifftc.c index 3d8f2393e71..f52766b3692 100644 --- a/src/libfft/ifftc.c +++ b/src/libfft/ifftc.c @@ -1,7 +1,7 @@ /* I F F T C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libfft/splitdit.c b/src/libfft/splitdit.c index f3dc7486b6c..e2526d3f1d7 100644 --- a/src/libfft/splitdit.c +++ b/src/libfft/splitdit.c @@ -1,7 +1,7 @@ /* S P L I T D I T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libfft/splitditc.c b/src/libfft/splitditc.c index 36f8d648362..fe51f130803 100644 --- a/src/libfft/splitditc.c +++ b/src/libfft/splitditc.c @@ -1,7 +1,7 @@ /* S P L I T D I T C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/CMakeLists.txt b/src/libgcv/CMakeLists.txt index 977e3cd39f4..6494684b371 100644 --- a/src/libgcv/CMakeLists.txt +++ b/src/libgcv/CMakeLists.txt @@ -14,7 +14,7 @@ if(MSVC) else(MSVC) set(LIBGCV_PLUGINS_PATH "${LIB_DIR}") endif(MSVC) -set(LIBGCV_PLUGINS_DIRECTORY "libgcv_plugins") +set(LIBGCV_PLUGINS_DIRECTORY "gcv") add_subdirectory(plugins) set(LIBGCV_SOURCES diff --git a/src/libgcv/bottess.c b/src/libgcv/bottess.c index c0358e034cd..776f6c1b22c 100644 --- a/src/libgcv/bottess.c +++ b/src/libgcv/bottess.c @@ -1,7 +1,7 @@ /* B O T T E S S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/facetize.c b/src/libgcv/facetize.c index a6e0077f0d5..3199f3c37c3 100644 --- a/src/libgcv/facetize.c +++ b/src/libgcv/facetize.c @@ -1,7 +1,7 @@ /* F A C E T I Z E . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/gcv.c b/src/libgcv/gcv.c index 7531b67daab..1c4fe4e31b5 100644 --- a/src/libgcv/gcv.c +++ b/src/libgcv/gcv.c @@ -1,7 +1,7 @@ /* G C V . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -87,7 +87,13 @@ _gcv_brlcad_write(struct gcv_context *context, const struct gcv_opts *UNUSED(gcv_options), const void *UNUSED(options_data), const char *dest_path) { - struct rt_wdb * const out_wdbp = wdb_fopen(dest_path); + struct rt_wdb * out_wdbp = NULL; + if (!bu_file_exists(dest_path, NULL)) { + out_wdbp = wdb_fopen(dest_path); + } else { + struct db_i *dbip = db_open(dest_path, DB_OPEN_READWRITE); + out_wdbp = wdb_dbopen(dbip, RT_WDB_TYPE_DB_DISK_APPEND_ONLY); + } if (!out_wdbp) { bu_log("wdb_fopen() failed for '%s'\n", dest_path); @@ -347,23 +353,8 @@ _gcv_plugins_load(struct bu_ptbl *filter_table, const char *path) HIDDEN const char * _gcv_plugins_get_path(void) { - const char *brlcad_libs_path; - struct bu_vls buffer; - const char *result; - - /* LIBGCV_PLUGINS_PATH is where the plugin dir resides, defined via cppflag */ - brlcad_libs_path = bu_brlcad_dir(LIBGCV_PLUGINS_PATH, 0); - - if (!brlcad_libs_path) - return NULL; - - bu_vls_init(&buffer); - /* LIBGCV_PLUGINS_DIRECTORY is the name of the plugin dir, defined via cppflag */ - bu_vls_sprintf(&buffer, "%s%c%s", brlcad_libs_path, BU_DIR_SEPARATOR, - LIBGCV_PLUGINS_DIRECTORY); - result = bu_brlcad_root(bu_vls_addr(&buffer), 0); - bu_vls_free(&buffer); - + const char *pdir = bu_dir(NULL, 0, BU_DIR_LIBEXEC, LIBGCV_PLUGINS_DIRECTORY, NULL); + const char *result = bu_strdup(pdir); return result; } diff --git a/src/libgcv/plugins/CMakeLists.txt b/src/libgcv/plugins/CMakeLists.txt index 5d11ecbb765..9317f0667b3 100644 --- a/src/libgcv/plugins/CMakeLists.txt +++ b/src/libgcv/plugins/CMakeLists.txt @@ -1,55 +1,36 @@ -add_custom_target(libgcv_plugins) -set_target_properties(libgcv_plugins PROPERTIES FOLDER "BRL-CAD Shared Libraries") - - -function(LIBGCV_ADD_PLUGIN plugin_name sources libs) - set(target_name libgcv_${plugin_name}) - BRLCAD_ADDLIB(${target_name} "${sources}" "libgcv;${libs}" SHARED NO_INSTALL FOLDER "LibGCV Plugins") - target_include_directories(${target_name} PRIVATE "${GCV_INCLUDE_DIRS}") - - set(DIR_TYPES LIBRARY RUNTIME ARCHIVE) - if(NOT CMAKE_CONFIGURATION_TYPES) - foreach(DIR_TYPE ${DIR_TYPES}) - get_property(current_output_dir TARGET ${target_name} PROPERTY ${DIR_TYPE}_OUTPUT_DIRECTORY) - set_property(TARGET ${target_name} PROPERTY ${DIR_TYPE}_OUTPUT_DIRECTORY "${current_output_dir}/${LIBGCV_PLUGINS_DIRECTORY}") - endforeach(DIR_TYPE ${DIR_TYPES}) - else(NOT CMAKE_CONFIGURATION_TYPES) - set(CFG_ROOT ${${PROJECT_NAME}_BINARY_DIR}) - foreach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) - if(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") - set(CFG_ROOT ${${PROJECT_NAME}_BINARY_DIR}/${CFG_TYPE}) - endif(NOT "${CMAKE_CFG_INTDIR}" STREQUAL ".") - string(TOUPPER "${CFG_TYPE}" CFG_TYPE_UPPER) - foreach(DIR_TYPE ${DIR_TYPES}) - get_property(current_output_dir TARGET ${target_name} PROPERTY ${DIR_TYPE}_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER}) - set_property(TARGET ${target_name} PROPERTY ${DIR_TYPE}_OUTPUT_DIRECTORY_${CFG_TYPE_UPPER} "${current_output_dir}/${LIBGCV_PLUGINS_DIRECTORY}") - endforeach(DIR_TYPE ${DIR_TYPES}) - endforeach(CFG_TYPE ${CMAKE_CONFIGURATION_TYPES}) - endif(NOT CMAKE_CONFIGURATION_TYPES) - - install(TARGETS ${target_name} - RUNTIME DESTINATION ${BIN_DIR}/${LIBGCV_PLUGINS_DIRECTORY} - LIBRARY DESTINATION ${LIB_DIR}/${LIBGCV_PLUGINS_DIRECTORY} - ARCHIVE DESTINATION ${LIB_DIR}/${LIBGCV_PLUGINS_DIRECTORY} - ) - - add_dependencies(libgcv_plugins ${target_name}) -endfunction(LIBGCV_ADD_PLUGIN plugin_name sources libs) - - -function(GET_LIBGCV_PLUGINS) - file(GLOB cmakelist_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} */CMakeLists.txt) - - foreach(file ${cmakelist_files}) - get_filename_component(plugin_directory "${file}" PATH) - add_subdirectory(${plugin_directory}) - endforeach(file ${cmakelist_files}) -endfunction(GET_LIBGCV_PLUGINS) - - -GET_LIBGCV_PLUGINS() - -CMAKEFILES(CMakeLists.txt) +add_custom_command( + OUTPUT "${CMAKE_BINARY_DIR}/gcv_plugins.sentinel" + COMMAND ${CMAKE_COMMAND} -E touch "${CMAKE_BINARY_DIR}/gcv_plugins.sentinel" + ) +add_custom_target(gcv_plugins_sentinel + DEPENDS ${CMAKE_BINARY_DIR}/gcv_plugins.sentinel + ) +set_target_properties(gcv_plugins_sentinel PROPERTIES FOLDER "BRL-CAD Plugins/gcv") + +function(gcv_plugin_library name) + add_library(${name} ${ARGN}) + add_dependencies(gcv_plugins_sentinel ${name}) +endfunction(gcv_plugin_library name) + +# This target is supplied so applications wanting to run gcv commands at build +# time can depend on the plugins being built as well as libgcv itself (otherwise +# gcv commands might fail due to their plugins not yet having been built.) +add_custom_target(gcv_plugins ALL DEPENDS gcv_plugins_sentinel) +set_target_properties(gcv_plugins PROPERTIES FOLDER "BRL-CAD Plugins") + +add_subdirectory(asc) +add_subdirectory(decimate) +add_subdirectory(fastgen4) +add_subdirectory(gdal) +add_subdirectory(obj) +add_subdirectory(rhino) +add_subdirectory(stl) +add_subdirectory(vol) +add_subdirectory(vrml) + +CMAKEFILES( + CMakeLists.txt + ) # Local Variables: # tab-width: 8 diff --git a/src/libgcv/plugins/asc/CMakeLists.txt b/src/libgcv/plugins/asc/CMakeLists.txt index db68e38c64a..69ce129fe32 100644 --- a/src/libgcv/plugins/asc/CMakeLists.txt +++ b/src/libgcv/plugins/asc/CMakeLists.txt @@ -1,11 +1,19 @@ -LIBGCV_ADD_PLUGIN(asc "asc.cpp;asc_v4.cpp;asc_v5.cpp" "librt;libbu") - -CMAKEFILES( +set(ASC_SRCS asc.cpp asc_v4.cpp asc_v5.cpp ) -CMAKEFILES(CMakeLists.txt) + +gcv_plugin_library(gcv-asc SHARED ${ASC_SRCS}) +target_link_libraries(gcv-asc libwdb librt libbu) +set_property(TARGET gcv-asc APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(gcv-asc "${ASC_SRCS}") +PLUGIN_SETUP(gcv-asc gcv) + +CMAKEFILES( + ${ASC_SRCS} + CMakeLists.txt + ) # Local Variables: # tab-width: 8 diff --git a/src/libgcv/plugins/asc/asc.cpp b/src/libgcv/plugins/asc/asc.cpp index a3a8f0055c8..3dddd043f45 100644 --- a/src/libgcv/plugins/asc/asc.cpp +++ b/src/libgcv/plugins/asc/asc.cpp @@ -1,7 +1,7 @@ /* A S C . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/asc/asc_v4.cpp b/src/libgcv/plugins/asc/asc_v4.cpp index 97010df9679..9ca7844fe01 100644 --- a/src/libgcv/plugins/asc/asc_v4.cpp +++ b/src/libgcv/plugins/asc/asc_v4.cpp @@ -1,7 +1,7 @@ /* A S C _ V 4 . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/asc/asc_v5.cpp b/src/libgcv/plugins/asc/asc_v5.cpp index 395eca8f1cd..a8d4a58d161 100644 --- a/src/libgcv/plugins/asc/asc_v5.cpp +++ b/src/libgcv/plugins/asc/asc_v5.cpp @@ -1,7 +1,7 @@ /* A S C _ V 5 . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/decimate/CMakeLists.txt b/src/libgcv/plugins/decimate/CMakeLists.txt index a26eeeb2337..9b769678b25 100644 --- a/src/libgcv/plugins/decimate/CMakeLists.txt +++ b/src/libgcv/plugins/decimate/CMakeLists.txt @@ -1,2 +1,22 @@ -LIBGCV_ADD_PLUGIN(decimate "decimate.c" "librt") -CMAKEFILES(CMakeLists.txt) +set(DECIMATE_SRCS + decimate.c + ) + +gcv_plugin_library(gcv-decimate SHARED ${DECIMATE_SRCS}) +target_link_libraries(gcv-decimate librt) +set_property(TARGET gcv-decimate APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(gcv-decimate "${DECIMATE_SRCS}") +PLUGIN_SETUP(gcv-decimate gcv) + +CMAKEFILES( + ${DECIMATE_SRCS} + CMakeLists.txt + ) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 + diff --git a/src/libgcv/plugins/decimate/decimate.c b/src/libgcv/plugins/decimate/decimate.c index 167dac93ca0..5485a54245c 100644 --- a/src/libgcv/plugins/decimate/decimate.c +++ b/src/libgcv/plugins/decimate/decimate.c @@ -1,7 +1,7 @@ /* D E C I M A T E . C * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/fastgen4/CMakeLists.txt b/src/libgcv/plugins/fastgen4/CMakeLists.txt index 70ff6ddfd28..c5e95d021ff 100644 --- a/src/libgcv/plugins/fastgen4/CMakeLists.txt +++ b/src/libgcv/plugins/fastgen4/CMakeLists.txt @@ -1,4 +1,24 @@ -LIBGCV_ADD_PLUGIN(fastgen4 "fastgen4_read.c;fastgen4_write.cpp" "librt;libbu") +set(FASTGEN4_SRCS + fastgen4_read.c + fastgen4_write.cpp + ) + +gcv_plugin_library(gcv-fastgen4 SHARED ${FASTGEN4_SRCS}) +target_link_libraries(gcv-fastgen4 libgcv libwdb librt libbu) +set_property(TARGET gcv-fastgen4 APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(gcv-fastgen4 "${FASTGEN4_SRCS}") +PLUGIN_SETUP(gcv-fastgen4 gcv) + +CMAKEFILES( + ${FASTGEN4_SRCS} + CMakeLists.txt + NOTES + ) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 -CMAKEFILES(NOTES) -CMAKEFILES(CMakeLists.txt) diff --git a/src/libgcv/plugins/fastgen4/fastgen4_read.c b/src/libgcv/plugins/fastgen4/fastgen4_read.c index 2e38042cc7d..e5e4deb7c8e 100644 --- a/src/libgcv/plugins/fastgen4/fastgen4_read.c +++ b/src/libgcv/plugins/fastgen4/fastgen4_read.c @@ -1,7 +1,7 @@ /* F A S T G E N 4 _ R E A D . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/fastgen4/fastgen4_write.cpp b/src/libgcv/plugins/fastgen4/fastgen4_write.cpp index afe8a98aef6..58626421907 100644 --- a/src/libgcv/plugins/fastgen4/fastgen4_write.cpp +++ b/src/libgcv/plugins/fastgen4/fastgen4_write.cpp @@ -1,7 +1,7 @@ /* F A S T G E N 4 _ W R I T E . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/gdal/CMakeLists.txt b/src/libgcv/plugins/gdal/CMakeLists.txt index bcecee525a9..7d931122818 100644 --- a/src/libgcv/plugins/gdal/CMakeLists.txt +++ b/src/libgcv/plugins/gdal/CMakeLists.txt @@ -1,10 +1,24 @@ +set(GDAL_SRCS + gdal.cpp + gdal_ll.cpp + ) + if(GDAL_LIBRARY AND GDAL_INCLUDE_DIR) + include_directories(SYSTEM ${GDAL_INCLUDE_DIR}) - LIBGCV_ADD_PLUGIN(gdal "gdal.cpp;gdal_ll.cpp" "librt;libbu;${GDAL_LIBRARY}") + + gcv_plugin_library(gcv-gdal SHARED ${GDAL_SRCS}) + target_link_libraries(gcv-gdal libwdb librt libbu ${GDAL_LIBRARIES}) + set_property(TARGET gcv-gdal APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) + VALIDATE_STYLE(gcv-gdal "${GDAL_SRCS}") + PLUGIN_SETUP(gcv-gdal gcv) + endif(GDAL_LIBRARY AND GDAL_INCLUDE_DIR) -CMAKEFILES(gdal.cpp) -CMAKEFILES(CMakeLists.txt) +CMAKEFILES( + ${GDAL_SRCS} + CMakeLists.txt + ) # Local Variables: # tab-width: 8 diff --git a/src/libgcv/plugins/gdal/gdal.cpp b/src/libgcv/plugins/gdal/gdal.cpp index 45386d2edc9..365b1506f18 100644 --- a/src/libgcv/plugins/gdal/gdal.cpp +++ b/src/libgcv/plugins/gdal/gdal.cpp @@ -2,7 +2,7 @@ * BRL-CAD * * Copyright (c) 2013 Tom Browder - * Copyright (c) 2017-2020 United States Government as represented by the U.S. Army + * Copyright (c) 2017-2021 United States Government as represented by the U.S. Army * Research Laboratory. * * Permission is hereby granted, free of charge, to any person obtaining a copy @@ -42,13 +42,13 @@ #include /* GDAL headers */ -#include -#include -#include -#include -#include -#include -#include +#include "gdal.h" +#include "gdalwarper.h" +#include "gdal_utils.h" +#include "cpl_conv.h" +#include "cpl_string.h" +#include "cpl_multiproc.h" +#include "ogr_spatialref.h" #include "vrtdataset.h" #include "bu/app.h" diff --git a/src/libgcv/plugins/gdal/gdal_ll.cpp b/src/libgcv/plugins/gdal/gdal_ll.cpp index fb08024c778..58a725db80b 100644 --- a/src/libgcv/plugins/gdal/gdal_ll.cpp +++ b/src/libgcv/plugins/gdal/gdal_ll.cpp @@ -27,13 +27,13 @@ #include "common.h" /* GDAL headers */ -#include -#include -#include -#include -#include -#include -#include +#include "gdal.h" +#include "gdalwarper.h" +#include "gdal_utils.h" +#include "cpl_conv.h" +#include "cpl_string.h" +#include "cpl_multiproc.h" +#include "ogr_spatialref.h" #include "vrtdataset.h" #include "bu/log.h" diff --git a/src/libgcv/plugins/obj/CMakeLists.txt b/src/libgcv/plugins/obj/CMakeLists.txt index c725831a30a..ead87971311 100644 --- a/src/libgcv/plugins/obj/CMakeLists.txt +++ b/src/libgcv/plugins/obj/CMakeLists.txt @@ -12,13 +12,21 @@ include_directories( ${CMAKE_CURRENT_BINARY_DIR}/wfobj ) -LIBGCV_ADD_PLUGIN(obj "obj_read.c;obj_write.c;tri_face.c" "librt;libwfobj") - -set(obj_ignore_files - CMakeLists.txt +set(OBJ_SRCS obj_read.c obj_write.c tri_face.c + ) + +gcv_plugin_library(gcv-obj SHARED ${OBJ_SRCS}) +target_link_libraries(gcv-obj libwdb librt libwfobj) +set_property(TARGET gcv-obj APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(gcv-obj "${OBJ_SRCS}") +PLUGIN_SETUP(gcv-obj gcv) + +set(obj_ignore_files + CMakeLists.txt + ${OBJ_SRCS} tri_face.h wfobj/CMake/FindLEMON.cmake wfobj/CMake/FindPERPLEX.cmake diff --git a/src/libgcv/plugins/obj/obj_read.c b/src/libgcv/plugins/obj/obj_read.c index 7bb3754f093..53717d9fb3e 100644 --- a/src/libgcv/plugins/obj/obj_read.c +++ b/src/libgcv/plugins/obj/obj_read.c @@ -1,7 +1,7 @@ /* O B J _ R E A D . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/obj_write.c b/src/libgcv/plugins/obj/obj_write.c index adcaaf2fd51..b592a6c4e47 100644 --- a/src/libgcv/plugins/obj/obj_write.c +++ b/src/libgcv/plugins/obj/obj_write.c @@ -1,7 +1,7 @@ /* O B J _ W R I T E . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/tri_face.c b/src/libgcv/plugins/obj/tri_face.c index 22416b7599a..bc531c9a755 100644 --- a/src/libgcv/plugins/obj/tri_face.c +++ b/src/libgcv/plugins/obj/tri_face.c @@ -1,7 +1,7 @@ /* T R I _ F A C E . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/tri_face.h b/src/libgcv/plugins/obj/tri_face.h index 03a56969034..92b374f36d8 100644 --- a/src/libgcv/plugins/obj/tri_face.h +++ b/src/libgcv/plugins/obj/tri_face.h @@ -1,7 +1,7 @@ /* T R I _ F A C E . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/CMake/FindLEMON.cmake b/src/libgcv/plugins/obj/wfobj/CMake/FindLEMON.cmake index 4ce415e2a99..6302fc65a35 100644 --- a/src/libgcv/plugins/obj/wfobj/CMake/FindLEMON.cmake +++ b/src/libgcv/plugins/obj/wfobj/CMake/FindLEMON.cmake @@ -10,7 +10,7 @@ # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel @@ -44,9 +44,35 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= -find_program(LEMON_EXECUTABLE lemon DOC "path to the lemon executable") +set(_LEMON_SEARCHES) + +# Search LEMON_ROOT first if it is set. +if(LEMON_ROOT) + set(_LEMON_SEARCH_ROOT PATHS ${LEMON_ROOT} NO_DEFAULT_PATH) + list(APPEND _LEMON_SEARCHES _LEMON_SEARCH_ROOT) +endif() + +# Normal search. +set(_LEMON_x86 "(x86)") +set(_LEMON_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/lemon" + "$ENV{ProgramFiles${_LEMON_x86}}/lemon") +unset(_LEMON_x86) +list(APPEND _LEMON_SEARCHES _LEMON_SEARCH_NORMAL) + +set(LEMON_NAMES lemon) + +# Try each search configuration. +foreach(search ${_LEMON_SEARCHES}) + find_program(LEMON_EXECUTABLE lemon ${${search}} PATH_SUFFIXES bin) +endforeach() mark_as_advanced(LEMON_EXECUTABLE) +foreach(search ${_LEMON_SEARCHES}) + find_file(LEMON_TEMPLATE lempar.c ${${search}} PATH_SUFFIXES ${DATA_DIR} ${DATA_DIR}/lemon) +endforeach() +mark_as_advanced(LEMON_TEMPLATE) + if (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE) # look for the template in share if (DATA_DIR AND EXISTS "${DATA_DIR}/lemon/lempar.c") @@ -113,6 +139,10 @@ if(NOT COMMAND LEMON_TARGET) CMAKE_PARSE_ARGUMENTS(${LVAR_PREFIX} "" "OUT_SRC_FILE;OUT_HDR_FILE;WORKING_DIR;EXTRA_ARGS" "" ${ARGN}) endif(${ARGC} GREATER 3) + if (TARGET perplex_stage) + set(DEPS_TARGET perplex_stage) + endif (TARGET perplex_stage) + # Need a working directory if("${${LVAR_PREFIX}_WORKING_DIR}" STREQUAL "") set(${LVAR_PREFIX}_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}/${LVAR_PREFIX}") @@ -161,7 +191,7 @@ if(NOT COMMAND LEMON_TARGET) OUTPUT ${LEMON_GEN_OUT} ${LEMON_GEN_SOURCE} ${LEMON_GEN_HEADER} COMMAND ${CMAKE_COMMAND} -E copy ${lemon_in_file} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} COMMAND ${LEMON_EXECUTABLE} -T${LEMON_TEMPLATE} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} ${${LVAR_PREFIX}__EXTRA_ARGS} - DEPENDS ${Input} ${LEMON_TEMPLATE} ${LEMON_EXECUTABLE_TARGET} + DEPENDS ${Input} ${LEMON_EXECUTABLE_TARGET} ${DEPS_TARGET} WORKING_DIRECTORY ${${LVAR_PREFIX}_WORKING_DIR} COMMENT "[LEMON][${Name}] Building parser with ${LEMON_EXECUTABLE}" ) @@ -171,7 +201,7 @@ if(NOT COMMAND LEMON_TARGET) add_custom_command( OUTPUT ${${LVAR_PREFIX}_OUT_SRC_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_SOURCE} ${${LVAR_PREFIX}_OUT_SRC_FILE} - DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_SOURCE} + DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_SOURCE} ${DEPS_TARGET} ) set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_SRC_FILE} ${LEMON_${Name}_OUTPUTS}) endif(NOT "${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "${LEMON_GEN_SOURCE}") @@ -179,7 +209,7 @@ if(NOT COMMAND LEMON_TARGET) add_custom_command( OUTPUT ${${LVAR_PREFIX}_OUT_HDR_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_HEADER} ${${LVAR_PREFIX}_OUT_HDR_FILE} - DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_HEADER} + DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_HEADER} ${DEPS_TARGET} ) set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_HDR_FILE} ${LEMON_${Name}_OUTPUTS}) endif(NOT "${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "${LEMON_GEN_HEADER}") diff --git a/src/libgcv/plugins/obj/wfobj/CMake/FindPERPLEX.cmake b/src/libgcv/plugins/obj/wfobj/CMake/FindPERPLEX.cmake index 85be047bd6c..583b7971b51 100644 --- a/src/libgcv/plugins/obj/wfobj/CMake/FindPERPLEX.cmake +++ b/src/libgcv/plugins/obj/wfobj/CMake/FindPERPLEX.cmake @@ -10,7 +10,7 @@ # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel @@ -44,9 +44,35 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #============================================================================= -find_program(PERPLEX_EXECUTABLE perplex DOC "path to the perplex executable") +set(_PERPLEX_SEARCHES) + +# Search PERPLEX_ROOT first if it is set. +if(PERPLEX_ROOT) + set(_PERPLEX_SEARCH_ROOT PATHS ${PERPLEX_ROOT} NO_DEFAULT_PATH) + list(APPEND _PERPLEX_SEARCHES _PERPLEX_SEARCH_ROOT) +endif() + +# Normal search. +set(_PERPLEX_x86 "(x86)") +set(_PERPLEX_SEARCH_NORMAL + PATHS "$ENV{ProgramFiles}/perplex" + "$ENV{ProgramFiles${_PERPLEX_x86}}/perplex") +unset(_PERPLEX_x86) +list(APPEND _PERPLEX_SEARCHES _PERPLEX_SEARCH_NORMAL) + +set(PERPLEX_NAMES perplex) + +# Try each search configuration. +foreach(search ${_PERPLEX_SEARCHES}) + find_program(PERPLEX_EXECUTABLE perplex ${${search}} PATH_SUFFIXES bin) +endforeach() mark_as_advanced(PERPLEX_EXECUTABLE) +foreach(search ${_PERPLEX_SEARCHES}) + find_file(PERPLEX_TEMPLATE perplex_template.c ${${search}} PATH_SUFFIXES ${DATA_DIR} ${DATA_DIR}/perplex) +endforeach() +mark_as_advanced(PERPLEX_TEMPLATE) + if(PERPLEX_EXECUTABLE AND NOT PERPLEX_TEMPLATE) get_filename_component(perplex_path ${PERPLEX_EXECUTABLE} PATH) if(perplex_path) @@ -96,7 +122,7 @@ mark_as_advanced(PERPLEX_TEMPLATE) # # Originally based off of FindBISON.cmake from Kitware's CMake distribution # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel @@ -141,6 +167,10 @@ if(NOT COMMAND PERPLEX_TARGET) get_filename_component(IN_FILE_WE ${Input} NAME_WE) set(PVAR_PREFIX ${Name}_${IN_FILE_WE}) + if (TARGET perplex_stage) + set(DEP_TARGET perplex_stage) + endif (TARGET perplex_stage) + if(${ARGC} GREATER 3) CMAKE_PARSE_ARGUMENTS(${PVAR_PREFIX} "" "TEMPLATE;OUT_SRC_FILE;OUT_HDR_FILE;WORKING_DIR" "" ${ARGN}) endif(${ARGC} GREATER 3) @@ -200,7 +230,7 @@ if(NOT COMMAND PERPLEX_TARGET) OUTPUT ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE} COMMAND ${CMAKE_COMMAND} -E copy ${perplex_in_file} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE} COMMAND ${PERPLEX_EXECUTABLE} -c -o ${re2c_src} -i ${${PVAR_PREFIX}_OUT_HDR_FILE} -t ${${PVAR_PREFIX}_TEMPLATE} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE} - DEPENDS ${Input} ${${PVAR_PREFIX}_TEMPLATE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} + DEPENDS ${Input} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET} WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR} COMMENT "[PERPLEX][${Name}] Generating re2c input with ${PERPLEX_EXECUTABLE}" ) @@ -209,7 +239,7 @@ if(NOT COMMAND PERPLEX_TARGET) add_custom_command( OUTPUT ${${PVAR_PREFIX}_OUT_SRC_FILE} COMMAND ${RE2C_EXECUTABLE} --no-debug-info --no-generation-date -c -o ${${PVAR_PREFIX}_OUT_SRC_FILE} ${re2c_src} - DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} + DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET} WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR} COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}" ) @@ -217,7 +247,7 @@ if(NOT COMMAND PERPLEX_TARGET) add_custom_command( OUTPUT ${${PVAR_PREFIX}_OUT_SRC_FILE} COMMAND ${RE2C_EXECUTABLE} --no-generation-date -c -o ${${PVAR_PREFIX}_OUT_SRC_FILE} ${re2c_src} - DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} + DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET} WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR} COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}" ) diff --git a/src/libgcv/plugins/obj/wfobj/CMake/FindRE2C.cmake b/src/libgcv/plugins/obj/wfobj/CMake/FindRE2C.cmake index e59a193d975..1d7c04a927b 100644 --- a/src/libgcv/plugins/obj/wfobj/CMake/FindRE2C.cmake +++ b/src/libgcv/plugins/obj/wfobj/CMake/FindRE2C.cmake @@ -42,7 +42,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(RE2C DEFAULT_MSG RE2C_EXECUTABLE) # ==================================================================== # #============================================================================= -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # Copyright 2009 Kitware, Inc. # Copyright 2006 Tristan Carel diff --git a/src/libgcv/plugins/obj/wfobj/CMake/Path_Setup.cmake b/src/libgcv/plugins/obj/wfobj/CMake/Path_Setup.cmake index 00585b6febf..aaa5ecd1e4f 100644 --- a/src/libgcv/plugins/obj/wfobj/CMake/Path_Setup.cmake +++ b/src/libgcv/plugins/obj/wfobj/CMake/Path_Setup.cmake @@ -1,4 +1,4 @@ -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/src/libgcv/plugins/obj/wfobj/CMakeLists.txt b/src/libgcv/plugins/obj/wfobj/CMakeLists.txt index 8700459eba3..1b0ffa3f484 100644 --- a/src/libgcv/plugins/obj/wfobj/CMakeLists.txt +++ b/src/libgcv/plugins/obj/wfobj/CMakeLists.txt @@ -1,6 +1,6 @@ # C M A K E L I S T S . T X T # -# This file is Copyright (c) 2010-2020 United States Government as +# This file is Copyright (c) 2010-2021 United States Government as # represented by the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without @@ -37,7 +37,7 @@ # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(WFOBJ) diff --git a/src/libgcv/plugins/obj/wfobj/obj_grammar.yy b/src/libgcv/plugins/obj/wfobj/obj_grammar.yy index 5cc22ac925f..aa373a7ede2 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_grammar.yy +++ b/src/libgcv/plugins/obj/wfobj/obj_grammar.yy @@ -1,7 +1,7 @@ /* O B J _ G R A M M A R . Y Y * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -21,7 +21,7 @@ /* O B J _ G R A M M A R . Y Y * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/obj_grammar_decls.h b/src/libgcv/plugins/obj/wfobj/obj_grammar_decls.h index 03ca330984c..e07ffc891ec 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_grammar_decls.h +++ b/src/libgcv/plugins/obj/wfobj/obj_grammar_decls.h @@ -1,7 +1,7 @@ /* O B J _ G R A M M A R _ D E C L S . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/obj_parser.cpp b/src/libgcv/plugins/obj/wfobj/obj_parser.cpp index b2a061bf766..fc1e5f8e697 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_parser.cpp +++ b/src/libgcv/plugins/obj/wfobj/obj_parser.cpp @@ -1,7 +1,7 @@ /* O B J _ P A R S E R . C P P * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/obj_parser.h b/src/libgcv/plugins/obj/wfobj/obj_parser.h index e5b8d47f9ad..ea3cc239240 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_parser.h +++ b/src/libgcv/plugins/obj/wfobj/obj_parser.h @@ -1,7 +1,7 @@ /* O B J _ P A R S E R . H * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/obj_parser_state.h b/src/libgcv/plugins/obj/wfobj/obj_parser_state.h index 92f4e070436..48b753f5423 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_parser_state.h +++ b/src/libgcv/plugins/obj/wfobj/obj_parser_state.h @@ -1,7 +1,7 @@ /* O B J _ P A R S E R _ S T A T E . H * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/obj_rules.h b/src/libgcv/plugins/obj/wfobj/obj_rules.h index 45ef803984b..8a5d59456ee 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_rules.h +++ b/src/libgcv/plugins/obj/wfobj/obj_rules.h @@ -1,7 +1,7 @@ /* O B J _ R U L E S . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/obj_rules.l b/src/libgcv/plugins/obj/wfobj/obj_rules.l index 55f9fbdffbe..ce04347c1ec 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_rules.l +++ b/src/libgcv/plugins/obj/wfobj/obj_rules.l @@ -1,5 +1,5 @@ /* O B J _ R U L E S . R E - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/obj_token_type.h b/src/libgcv/plugins/obj/wfobj/obj_token_type.h index 3c63ad796dc..c3eb9f4c768 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_token_type.h +++ b/src/libgcv/plugins/obj/wfobj/obj_token_type.h @@ -1,7 +1,7 @@ /* O B J _ T O K E N _ T Y P E . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/obj_util.cpp b/src/libgcv/plugins/obj/wfobj/obj_util.cpp index c384e13d892..2bd588c0598 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_util.cpp +++ b/src/libgcv/plugins/obj/wfobj/obj_util.cpp @@ -1,7 +1,7 @@ /* O B J _ U T I L . C P P * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/obj/wfobj/obj_util.h b/src/libgcv/plugins/obj/wfobj/obj_util.h index eb323abfb5c..b5a4577d320 100644 --- a/src/libgcv/plugins/obj/wfobj/obj_util.h +++ b/src/libgcv/plugins/obj/wfobj/obj_util.h @@ -1,7 +1,7 @@ /* O B J _ U T I L . H * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/rhino/CMakeLists.txt b/src/libgcv/plugins/rhino/CMakeLists.txt index a9b6f2a8b13..b391b7f2ad2 100644 --- a/src/libgcv/plugins/rhino/CMakeLists.txt +++ b/src/libgcv/plugins/rhino/CMakeLists.txt @@ -1,2 +1,22 @@ -LIBGCV_ADD_PLUGIN(rhino "rhino_read.cpp" "librt;libwdb;libbg;${OPENNURBS_LIBRARIES}") -CMAKEFILES(CMakeLists.txt) +set(RHINO_SRCS + rhino_read.cpp + ) + +gcv_plugin_library(gcv-rhino SHARED ${RHINO_SRCS}) +target_link_libraries(gcv-rhino librt libwdb libbg ${OPENNURBS_LIBRARIES}) +set_property(TARGET gcv-rhino APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(gcv-rhino "${RHINO_SRCS}") +PLUGIN_SETUP(gcv-rhino gcv) + +CMAKEFILES( + ${RHINO_SRCS} + CMakeLists.txt + ) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 + diff --git a/src/libgcv/plugins/rhino/rhino_read.cpp b/src/libgcv/plugins/rhino/rhino_read.cpp index cf4d5c8e2a3..9048ca0e329 100644 --- a/src/libgcv/plugins/rhino/rhino_read.cpp +++ b/src/libgcv/plugins/rhino/rhino_read.cpp @@ -1,7 +1,7 @@ /* R H I N O _ R E A D . C P P * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/stl/CMakeLists.txt b/src/libgcv/plugins/stl/CMakeLists.txt index 451be482fec..aaca0a28454 100644 --- a/src/libgcv/plugins/stl/CMakeLists.txt +++ b/src/libgcv/plugins/stl/CMakeLists.txt @@ -1,2 +1,23 @@ -LIBGCV_ADD_PLUGIN(stl "stl_read.c;stl_write.c" "librt") -CMAKEFILES(CMakeLists.txt) +set(STL_SRCS + stl_read.c + stl_write.c + ) + +gcv_plugin_library(gcv-stl SHARED ${STL_SRCS}) +target_link_libraries(gcv-stl libgcv libwdb librt) +set_property(TARGET gcv-stl APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(gcv-stl "${STL_SRCS}") +PLUGIN_SETUP(gcv-stl gcv) + +CMAKEFILES( + ${STL_SRCS} + CMakeLists.txt + ) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 + diff --git a/src/libgcv/plugins/stl/stl_read.c b/src/libgcv/plugins/stl/stl_read.c index a48d58a2665..1c7bf67cbc1 100644 --- a/src/libgcv/plugins/stl/stl_read.c +++ b/src/libgcv/plugins/stl/stl_read.c @@ -1,7 +1,7 @@ /* S T L _ R E A D . C * BRL-CAD * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/stl/stl_write.c b/src/libgcv/plugins/stl/stl_write.c index 2d765e418bc..bc3ee3f90fd 100644 --- a/src/libgcv/plugins/stl/stl_write.c +++ b/src/libgcv/plugins/stl/stl_write.c @@ -1,7 +1,7 @@ /* S T L _ W R I T E . C * BRL-CAD * - * Copyright (c) 2003-2020 United States Government as represented by + * Copyright (c) 2003-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vol/CMakeLists.txt b/src/libgcv/plugins/vol/CMakeLists.txt index adb492bf135..2a18432c645 100644 --- a/src/libgcv/plugins/vol/CMakeLists.txt +++ b/src/libgcv/plugins/vol/CMakeLists.txt @@ -1,4 +1,22 @@ -LIBGCV_ADD_PLUGIN(vol "png_read.c" "librt;libbu") +set(VOL_SRCS + png_read.c + ) -CMAKEFILES(CMakeLists.txt) +gcv_plugin_library(gcv-vol SHARED ${VOL_SRCS}) +target_link_libraries(gcv-vol libwdb librt libbu) +set_property(TARGET gcv-vol APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(gcv-vol "${VOL_SRCS}") +PLUGIN_SETUP(gcv-vol gcv) + +CMAKEFILES( + ${VOL_SRCS} + CMakeLists.txt + ) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/src/libgcv/plugins/vol/png_read.c b/src/libgcv/plugins/vol/png_read.c index 48ea7cda644..32b18fdf950 100644 --- a/src/libgcv/plugins/vol/png_read.c +++ b/src/libgcv/plugins/vol/png_read.c @@ -1,7 +1,7 @@ /* P N G _ R E A D . C * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/CMakeLists.txt b/src/libgcv/plugins/vrml/CMakeLists.txt index 483670c47b1..11f86492b45 100644 --- a/src/libgcv/plugins/vrml/CMakeLists.txt +++ b/src/libgcv/plugins/vrml/CMakeLists.txt @@ -1,4 +1,4 @@ -set(LIBGCV_VRML_SOURCES +set(VRML_SRCS vrml_read/file_util.cpp vrml_read/node.cpp vrml_read/node_type.cpp @@ -9,11 +9,15 @@ set(LIBGCV_VRML_SOURCES vrml_write.c ) - -LIBGCV_ADD_PLUGIN(vrml "${LIBGCV_VRML_SOURCES}" "librt;libbn;libbu") +gcv_plugin_library(gcv-vrml SHARED ${VRML_SRCS}) +target_link_libraries(gcv-vrml libwdb librt libbn libbu) +set_property(TARGET gcv-vrml APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(gcv-vrml "${VRML_SRCS}") +PLUGIN_SETUP(gcv-vrml gcv) CMAKEFILES( CMakeLists.txt + ${VRML_SRCS} vrml_read/file_util.h vrml_read/node.h vrml_read/node_type.h diff --git a/src/libgcv/plugins/vrml/vrml_read/file_util.cpp b/src/libgcv/plugins/vrml/vrml_read/file_util.cpp index 0a88f5c6436..6766cd859e1 100644 --- a/src/libgcv/plugins/vrml/vrml_read/file_util.cpp +++ b/src/libgcv/plugins/vrml/vrml_read/file_util.cpp @@ -1,7 +1,7 @@ /* F I L E _ U T I L . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/file_util.h b/src/libgcv/plugins/vrml/vrml_read/file_util.h index 75e1d3d263d..4491b10a57d 100644 --- a/src/libgcv/plugins/vrml/vrml_read/file_util.h +++ b/src/libgcv/plugins/vrml/vrml_read/file_util.h @@ -1,7 +1,7 @@ /* F I L E _ U T I L . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/node.cpp b/src/libgcv/plugins/vrml/vrml_read/node.cpp index 8094db04d05..977291c82c8 100644 --- a/src/libgcv/plugins/vrml/vrml_read/node.cpp +++ b/src/libgcv/plugins/vrml/vrml_read/node.cpp @@ -1,7 +1,7 @@ /* N O D E . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/node.h b/src/libgcv/plugins/vrml/vrml_read/node.h index 6155de7130a..8b439ad0537 100644 --- a/src/libgcv/plugins/vrml/vrml_read/node.h +++ b/src/libgcv/plugins/vrml/vrml_read/node.h @@ -1,7 +1,7 @@ /* N O D E. H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/node_type.cpp b/src/libgcv/plugins/vrml/vrml_read/node_type.cpp index 3c719c8870b..7bcaa016356 100644 --- a/src/libgcv/plugins/vrml/vrml_read/node_type.cpp +++ b/src/libgcv/plugins/vrml/vrml_read/node_type.cpp @@ -1,7 +1,7 @@ /* N O D E _ T Y P E . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/node_type.h b/src/libgcv/plugins/vrml/vrml_read/node_type.h index 054faa50d11..cc615e927a9 100644 --- a/src/libgcv/plugins/vrml/vrml_read/node_type.h +++ b/src/libgcv/plugins/vrml/vrml_read/node_type.h @@ -1,7 +1,7 @@ /* N O D E _ T Y P E . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/parser.cpp b/src/libgcv/plugins/vrml/vrml_read/parser.cpp index 4c304d3d2a7..405518df444 100644 --- a/src/libgcv/plugins/vrml/vrml_read/parser.cpp +++ b/src/libgcv/plugins/vrml/vrml_read/parser.cpp @@ -1,7 +1,7 @@ /* P A R S E R . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/parser.h b/src/libgcv/plugins/vrml/vrml_read/parser.h index 9e607a05fbf..d88f5611ba5 100644 --- a/src/libgcv/plugins/vrml/vrml_read/parser.h +++ b/src/libgcv/plugins/vrml/vrml_read/parser.h @@ -1,7 +1,7 @@ /* P A R S E R . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/string_util.cpp b/src/libgcv/plugins/vrml/vrml_read/string_util.cpp index 338cc74eb5e..20199c57248 100644 --- a/src/libgcv/plugins/vrml/vrml_read/string_util.cpp +++ b/src/libgcv/plugins/vrml/vrml_read/string_util.cpp @@ -1,7 +1,7 @@ /* S T R I N G _ U T I L . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/string_util.h b/src/libgcv/plugins/vrml/vrml_read/string_util.h index d2cd033763b..7a57a169ef3 100644 --- a/src/libgcv/plugins/vrml/vrml_read/string_util.h +++ b/src/libgcv/plugins/vrml/vrml_read/string_util.h @@ -1,7 +1,7 @@ /* S T R I N G _ U T I L . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/transform_node.cpp b/src/libgcv/plugins/vrml/vrml_read/transform_node.cpp index a6e4704ec04..5ddfe5bab5e 100644 --- a/src/libgcv/plugins/vrml/vrml_read/transform_node.cpp +++ b/src/libgcv/plugins/vrml/vrml_read/transform_node.cpp @@ -1,7 +1,7 @@ /* T R A N S F O R M _ N O D E. C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/transform_node.h b/src/libgcv/plugins/vrml/vrml_read/transform_node.h index 69da23ac3d1..dff28f5bac7 100644 --- a/src/libgcv/plugins/vrml/vrml_read/transform_node.h +++ b/src/libgcv/plugins/vrml/vrml_read/transform_node.h @@ -1,7 +1,7 @@ /* T R A N S F O R M _ N O D E. H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_read/vrml_read.cpp b/src/libgcv/plugins/vrml/vrml_read/vrml_read.cpp index efd98cd2716..5694fffe4ff 100644 --- a/src/libgcv/plugins/vrml/vrml_read/vrml_read.cpp +++ b/src/libgcv/plugins/vrml/vrml_read/vrml_read.cpp @@ -1,7 +1,7 @@ /* V R M L - G . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/plugins/vrml/vrml_write.c b/src/libgcv/plugins/vrml/vrml_write.c index ab359d8f7ba..8d40ff6b192 100644 --- a/src/libgcv/plugins/vrml/vrml_write.c +++ b/src/libgcv/plugins/vrml/vrml_write.c @@ -1,7 +1,7 @@ /* V R M L _ W R I T E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libgcv/region_end.c b/src/libgcv/region_end.c index e326848be24..25b4c1835a1 100644 --- a/src/libgcv/region_end.c +++ b/src/libgcv/region_end.c @@ -1,7 +1,7 @@ /* R E G I O N _ E N D . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/region_end_mc.c b/src/libgcv/region_end_mc.c index 24896eb891c..f739d644728 100644 --- a/src/libgcv/region_end_mc.c +++ b/src/libgcv/region_end_mc.c @@ -1,7 +1,7 @@ /* R E G I O N _ E N D _ M C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/soup.h b/src/libgcv/soup.h index 0ae65f9b3a7..f620e3754f6 100644 --- a/src/libgcv/soup.h +++ b/src/libgcv/soup.h @@ -1,7 +1,7 @@ /* S O U P . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/tests/CMakeLists.txt b/src/libgcv/tests/CMakeLists.txt index b35680120eb..81ee8222763 100644 --- a/src/libgcv/tests/CMakeLists.txt +++ b/src/libgcv/tests/CMakeLists.txt @@ -2,7 +2,7 @@ BRLCAD_ADDEXEC(test_bottess test_bottess.c libgcv NO_INSTALL) if(HIDE_INTERNAL_SYMBOLS) set_property(TARGET test_bottess APPEND PROPERTY COMPILE_DEFINITIONS "BOTTESS_DLL_IMPORTS") endif(HIDE_INTERNAL_SYMBOLS) -add_test(NAME bottess_test COMMAND test_bottess) +BRLCAD_ADD_TEST(NAME bottess_test COMMAND test_bottess) CMAKEFILES(CMakeLists.txt) diff --git a/src/libgcv/tests/test_bottess.c b/src/libgcv/tests/test_bottess.c index a8c20eddb78..1a85ad38ad3 100644 --- a/src/libgcv/tests/test_bottess.c +++ b/src/libgcv/tests/test_bottess.c @@ -1,7 +1,7 @@ /* T E S T _ B O T T E S S . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/tri_intersect.c b/src/libgcv/tri_intersect.c index 9d0d62adcba..d326def4033 100644 --- a/src/libgcv/tri_intersect.c +++ b/src/libgcv/tri_intersect.c @@ -1,7 +1,7 @@ /* T R I _ I N T E R S E C T . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libgcv/tri_intersect.h b/src/libgcv/tri_intersect.h index 2284a814125..5384e3b75cb 100644 --- a/src/libgcv/tri_intersect.h +++ b/src/libgcv/tri_intersect.h @@ -1,7 +1,7 @@ /* T R I _ I N T E R S E C T . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/3ptarb/3ptarb.c b/src/libged/3ptarb/3ptarb.c index 44a8cb086ea..e20af772e95 100644 --- a/src/libged/3ptarb/3ptarb.c +++ b/src/libged/3ptarb/3ptarb.c @@ -1,7 +1,7 @@ /* 3 P T A R B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/CMakeLists.txt b/src/libged/CMakeLists.txt index 995305ec9a7..3b7b28b7e46 100644 --- a/src/libged/CMakeLists.txt +++ b/src/libged/CMakeLists.txt @@ -256,6 +256,7 @@ add_subdirectory(move_arb_face) add_subdirectory(mrot) add_subdirectory(nirt) add_subdirectory(nmg) +add_subdirectory(npush) add_subdirectory(ocenter) add_subdirectory(open) add_subdirectory(orient) @@ -325,6 +326,7 @@ add_subdirectory(slew) add_subdirectory(solid_report) add_subdirectory(solids_on_ray) add_subdirectory(sphgroup) +add_subdirectory(stat) add_subdirectory(summary) add_subdirectory(sync) add_subdirectory(tables) diff --git a/src/libged/adc/adc.c b/src/libged/adc/adc.c index 8fc7a9bae35..90247703973 100644 --- a/src/libged/adc/adc.c +++ b/src/libged/adc/adc.c @@ -1,7 +1,7 @@ /* A D C . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/adjust/adjust.c b/src/libged/adjust/adjust.c index 6f7c990c561..298576bc369 100644 --- a/src/libged/adjust/adjust.c +++ b/src/libged/adjust/adjust.c @@ -1,7 +1,7 @@ /* A D J U S T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/ae2dir/ae2dir.c b/src/libged/ae2dir/ae2dir.c index a4ec626a311..cb575a750ef 100644 --- a/src/libged/ae2dir/ae2dir.c +++ b/src/libged/ae2dir/ae2dir.c @@ -1,7 +1,7 @@ /* A E 2 D I R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/analyze/CMakeLists.txt b/src/libged/analyze/CMakeLists.txt index 41585ff1440..4a20c1e01d6 100644 --- a/src/libged/analyze/CMakeLists.txt +++ b/src/libged/analyze/CMakeLists.txt @@ -6,16 +6,28 @@ include_directories( ${GED_INCLUDE_DIRS} ) +set(analyze_srcs + analyze.cpp + arb8.cpp + arbn.cpp + ars.cpp + superell.cpp + sketch.cpp + util.cpp + op_pnts_vol.cpp + ) + add_definitions(-DGED_PLUGIN) -ged_plugin_library(ged-analyze SHARED analyze.c) -target_link_libraries(ged-analyze libged libbu) +ged_plugin_library(ged-analyze SHARED ${analyze_srcs}) +target_link_libraries(ged-analyze libged libanalyze libbu) set_property(TARGET ged-analyze APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) VALIDATE_STYLE(ged-analyze analyze.c) PLUGIN_SETUP(ged-analyze ged) CMAKEFILES( CMakeLists.txt - analyze.c + ${analyze_srcs} + ged_analyze.h ) # Local Variables: diff --git a/src/libged/analyze/analyze.cpp b/src/libged/analyze/analyze.cpp new file mode 100644 index 00000000000..ef269503759 --- /dev/null +++ b/src/libged/analyze/analyze.cpp @@ -0,0 +1,748 @@ +/* A N A L Y Z E . C P P + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file analyze.cpp + * + * The analyze command + * + */ + +#include "common.h" + +extern "C" { +#include +#include +#include +} + +#include + +extern "C" { +#include "bu/cmd.h" +#include "bu/opt.h" +#include "../ged_private.h" +#include "./ged_analyze.h" +} + +#define DB_SOLID INT_MAX +#define DB_NON_SOLID INT_MAX - 1 + + +#define HELPFLAG "--print-help" +#define PURPOSEFLAG "--print-purpose" + +struct _ged_analyze_info { + struct ged *gedp = NULL; + const struct bu_cmdtab *cmds = NULL; + struct bu_opt_desc *gopts = NULL; + int verbosity = 0; + std::map, op_func_ptr> *union_map; + std::map, op_func_ptr> *isect_map; + std::map, op_func_ptr> *subtr_map; +}; + + +static struct _ged_analyze_info * +_analyze_info_create() +{ + struct _ged_analyze_info *gc = new struct _ged_analyze_info; + gc->verbosity = 0; + gc->union_map = new std::map, op_func_ptr>; + gc->isect_map = new std::map, op_func_ptr>; + gc->subtr_map = new std::map, op_func_ptr>; + + + // Populate the maps with known pair analysis functions + (*gc->union_map)[std::make_pair(DB5_MINORTYPE_BRLCAD_PNTS, DB_SOLID)] = op_pnts_vol; + (*gc->isect_map)[std::make_pair(DB5_MINORTYPE_BRLCAD_PNTS, DB_SOLID)] = op_pnts_vol; + (*gc->subtr_map)[std::make_pair(DB5_MINORTYPE_BRLCAD_PNTS, DB_SOLID)] = op_pnts_vol; + + return gc; +} + +static void +_analyze_info_destroy(struct _ged_analyze_info *s) +{ + delete s->union_map; + delete s->isect_map; + delete s->subtr_map; + delete s; +} + +static bool +db_solid_type(int type) +{ + switch (type) { + case DB5_MINORTYPE_BRLCAD_ARB8: + case DB5_MINORTYPE_BRLCAD_ARBN: + case DB5_MINORTYPE_BRLCAD_ARS: + case DB5_MINORTYPE_BRLCAD_BOT: + case DB5_MINORTYPE_BRLCAD_BREP: + case DB5_MINORTYPE_BRLCAD_BSPLINE: + case DB5_MINORTYPE_BRLCAD_CLINE: + case DB5_MINORTYPE_BRLCAD_COMBINATION: + case DB5_MINORTYPE_BRLCAD_DSP: + case DB5_MINORTYPE_BRLCAD_EBM: + case DB5_MINORTYPE_BRLCAD_EHY: + case DB5_MINORTYPE_BRLCAD_ELL: + case DB5_MINORTYPE_BRLCAD_EPA: + case DB5_MINORTYPE_BRLCAD_ETO: + case DB5_MINORTYPE_BRLCAD_EXTRUDE: + case DB5_MINORTYPE_BRLCAD_HALF: + case DB5_MINORTYPE_BRLCAD_HF: + case DB5_MINORTYPE_BRLCAD_HRT: + case DB5_MINORTYPE_BRLCAD_HYP: + case DB5_MINORTYPE_BRLCAD_METABALL: + case DB5_MINORTYPE_BRLCAD_NMG: + case DB5_MINORTYPE_BRLCAD_PARTICLE: + case DB5_MINORTYPE_BRLCAD_PIPE: + case DB5_MINORTYPE_BRLCAD_POLY: + case DB5_MINORTYPE_BRLCAD_REC: + case DB5_MINORTYPE_BRLCAD_REVOLVE: + case DB5_MINORTYPE_BRLCAD_RHC: + case DB5_MINORTYPE_BRLCAD_RPC: + case DB5_MINORTYPE_BRLCAD_SKETCH: + case DB5_MINORTYPE_BRLCAD_SPH: + case DB5_MINORTYPE_BRLCAD_SUBMODEL: + case DB5_MINORTYPE_BRLCAD_SUPERELL: + case DB5_MINORTYPE_BRLCAD_TGC: + case DB5_MINORTYPE_BRLCAD_TOR: + case DB5_MINORTYPE_BRLCAD_VOL: + return true; + case DB5_MINORTYPE_BRLCAD_ANNOT: + case DB5_MINORTYPE_BRLCAD_CONSTRAINT: + case DB5_MINORTYPE_BRLCAD_DATUM: + case DB5_MINORTYPE_BRLCAD_GRIP: + case DB5_MINORTYPE_BRLCAD_JOINT: + case DB5_MINORTYPE_BRLCAD_PNTS: + case DB5_MINORTYPE_BRLCAD_SCRIPT: + default: + return false; + }; +} + +static op_func_ptr +_analyze_find_processor(struct _ged_analyze_info *s, db_op_t op, int t1, int t2) +{ + int type1 = t1; + int type2 = t2; + std::map, op_func_ptr> *omap; + switch (op) { + case DB_OP_UNION: + omap = s->union_map; + break; + case DB_OP_INTERSECT: + omap = s->isect_map; + break; + case DB_OP_SUBTRACT: + omap = s->subtr_map; + break; + default: + return NULL; + } + + if (omap->find(std::make_pair(type1, type2)) != omap->end()) { + return (*omap)[std::make_pair(t1, t2)]; + } + + // If there isn't a specific type, see if there's a generic match for t2 + type2 = (db_solid_type(t2)) ? DB_SOLID : DB_NON_SOLID; + if (omap->find(std::make_pair(type1, type2)) != omap->end()) { + return (*omap)[std::make_pair(type1, type2)]; + } + + // If there isn't a specific type, see if there's a generic match for t1 + type1 = (db_solid_type(t1)) ? DB_SOLID : DB_NON_SOLID; + type2 = t2; + if (omap->find(std::make_pair(type1, type2)) != omap->end()) { + return (*omap)[std::make_pair(type1, type2)]; + } + // If there isn't a match, see if there's a generic match for t1 and t2 + type1 = (db_solid_type(t1)) ? DB_SOLID : DB_NON_SOLID; + type2 = (db_solid_type(t2)) ? DB_SOLID : DB_NON_SOLID; + if (omap->find(std::make_pair(type1, type2)) != omap->end()) { + return (*omap)[std::make_pair(type1, type2)]; + } + + // Nope, nothing + return NULL; +} + +static int +_analyze_cmd_msgs(void *cs, int argc, const char **argv, const char *us, const char *ps) +{ + struct _ged_analyze_info *gc = (struct _ged_analyze_info *)cs; + if (argc == 2 && BU_STR_EQUAL(argv[1], HELPFLAG)) { + bu_vls_printf(gc->gedp->ged_result_str, "%s\n%s\n", us, ps); + return 1; + } + if (argc == 2 && BU_STR_EQUAL(argv[1], PURPOSEFLAG)) { + bu_vls_printf(gc->gedp->ged_result_str, "%s\n", ps); + return 1; + } + return 0; +} + +/* Analyze solid in internal form. + * TODO - this switch table probably indicates this should + * be a functab callback... */ +/** + * TODO: primitives that still need implementing + * ehy + * metaball + * nmg + */ +static void +analyze_do_summary(struct ged *gedp, const struct rt_db_internal *ip) +{ + /* XXX Could give solid name, and current units, here */ + + switch (ip->idb_type) { + + case ID_ARB8: + analyze_arb8(gedp, ip); + break; + + case ID_BOT: + analyze_general(gedp, ip); + break; + + case ID_ARBN: + analyze_arbn(gedp, ip); + break; + + case ID_ARS: + analyze_ars(gedp, ip); + break; + + case ID_TGC: + analyze_general(gedp, ip); + break; + + case ID_ELL: + analyze_general(gedp, ip); + break; + + case ID_TOR: + analyze_general(gedp, ip); + break; + + case ID_RPC: + analyze_general(gedp, ip); + break; + + case ID_ETO: + analyze_general(gedp, ip); + break; + + case ID_EPA: + analyze_general(gedp, ip); + break; + + case ID_PARTICLE: + analyze_general(gedp, ip); + break; + + case ID_SUPERELL: + analyze_superell(gedp, ip); + break; + + case ID_SKETCH: + analyze_sketch(gedp, ip); + break; + + case ID_HYP: + analyze_general(gedp, ip); + break; + + case ID_PIPE: + analyze_general(gedp, ip); + break; + + case ID_VOL: + analyze_general(gedp, ip); + break; + + case ID_EXTRUDE: + analyze_general(gedp, ip); + break; + + case ID_RHC: + analyze_general(gedp, ip); + break; + + default: + bu_vls_printf(gedp->ged_result_str, "\nanalyze: unable to process %s solid\n", + OBJ[ip->idb_type].ft_name); + break; + } +} + +extern "C" int +_analyze_cmd_summarize(void *bs, int argc, const char **argv) +{ + const char *usage_string = "analyze [options] summarize obj1 "; + const char *purpose_string = "Summary of analytical information about listed objects"; + if (_analyze_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) { + return GED_OK; + } + + struct _ged_analyze_info *gc = (struct _ged_analyze_info *)bs; + struct ged *gedp = gc->gedp; + struct rt_db_internal intern; + + argc--; argv++; + if (!argc) { + bu_vls_printf(gc->gedp->ged_result_str, "%s\n", usage_string); + return GED_ERROR; + } + + GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); + GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR); + + /* initialize result */ + bu_vls_trunc(gedp->ged_result_str, 0); + + /* use the names that were input */ + for (int i = 0; i < argc; i++) { + struct directory *ndp = db_lookup(gedp->ged_wdbp->dbip, argv[i], LOOKUP_NOISY); + if (ndp == RT_DIR_NULL) + continue; + + GED_DB_GET_INTERNAL(gedp, &intern, ndp, bn_mat_identity, &rt_uniresource, GED_ERROR); + + _ged_do_list(gedp, ndp, 1); + analyze_do_summary(gedp, &intern); + rt_db_free_internal(&intern); + } + + return GED_OK; +} + +static void +clear_obj(struct ged *gedp, const char *name) +{ + struct bu_vls tmpstr = BU_VLS_INIT_ZERO; + bu_vls_sprintf(&tmpstr, "%s", bu_vls_cstr(gedp->ged_result_str)); + const char *av[4]; + av[0] = "kill"; + av[1] = "-f"; + av[2] = "-q"; + av[3] = name; + ged_kill(gedp, 4, (const char **)av); + bu_vls_sprintf(gedp->ged_result_str, "%s", bu_vls_cstr(&tmpstr)); +} + + +static void +mv_obj(struct ged *gedp, const char *n1, const char *n2) +{ + clear_obj(gedp, n2); + struct bu_vls tmpstr = BU_VLS_INIT_ZERO; + bu_vls_sprintf(&tmpstr, "%s", bu_vls_cstr(gedp->ged_result_str)); + const char *av[3]; + av[0] = "mv"; + av[1] = n1; + av[2] = n2; + ged_move(gedp, 3, (const char **)av); + bu_vls_sprintf(gedp->ged_result_str, "%s", bu_vls_cstr(&tmpstr)); +} + +extern "C" int +_analyze_cmd_intersect(void *bs, int argc, const char **argv) +{ + const char *usage_string = "analyze [options] intersect [-o out_obj] obj1 obj2 <...>"; + const char *purpose_string = "Intersect obj1 with obj2 and any subsequent objs"; + if (_analyze_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) { + return GED_OK; + } + + struct _ged_analyze_info *gc = (struct _ged_analyze_info *)bs; + struct ged *gedp = gc->gedp; + + argc--; argv++; + if (!argc) { + bu_vls_printf(gc->gedp->ged_result_str, "%s\n", usage_string); + return GED_ERROR; + } + + GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); + GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR); + + /* initialize result */ + bu_vls_trunc(gedp->ged_result_str, 0); + + // See if we are going to output an object + int help = 0; + struct bu_vls oname = BU_VLS_INIT_ZERO; + struct bu_opt_desc d[3]; + BU_OPT(d[0], "h", "help", "", NULL, &help, "Print help"); + BU_OPT(d[1], "o", "output", "name", &bu_opt_vls, &oname, "Specify output object"); + BU_OPT_NULL(d[2]); + + int ac = bu_opt_parse(NULL, argc, argv, d); + if (help) { + bu_vls_printf(gc->gedp->ged_result_str, "%s\n", usage_string); + return GED_HELP; + } + if (ac < 2) { + bu_vls_printf(gc->gedp->ged_result_str, "%s\n", usage_string); + return GED_HELP; + } + argc = ac; + + if (bu_vls_strlen(&oname)) { + struct directory *dp_out = db_lookup(gedp->ged_wdbp->dbip, bu_vls_cstr(&oname), LOOKUP_QUIET); + if (dp_out != RT_DIR_NULL) { + bu_vls_sprintf(gedp->ged_result_str, "specified output object %s already exists.\n", bu_vls_cstr(&oname)); + bu_vls_free(&oname); + return GED_ERROR; + } + } + + long ret = 0; + const char *tmpname = "___analyze_cmd_intersect_tmp_obj__"; + struct directory *dp1 = db_lookup(gedp->ged_wdbp->dbip, argv[0], LOOKUP_NOISY); + struct directory *dp2 = db_lookup(gedp->ged_wdbp->dbip, argv[1], LOOKUP_NOISY); + op_func_ptr of = _analyze_find_processor(gc, DB_OP_INTERSECT, dp1->d_minor_type, dp2->d_minor_type); + if (!of) { + bu_vls_sprintf(gedp->ged_result_str, "Unsupported type pairing\n"); + bu_vls_free(&oname); + return GED_ERROR; + } + clear_obj(gc->gedp, tmpname); + ret = (*of)(tmpname, gc->gedp, DB_OP_INTERSECT, argv[0], argv[1]); + if (ret == -1) { + clear_obj(gc->gedp, tmpname); + bu_vls_free(&oname); + return GED_ERROR; + } + + if (argc > 2) { + const char *tmpname2 = "___analyze_cmd_intersect_tmp_obj_2__"; + for (int i = 2; i < argc; i++) { + const char *n1 = tmpname; + const char *n2 = argv[i]; + dp1 = db_lookup(gedp->ged_wdbp->dbip, n1, LOOKUP_NOISY); + dp2 = db_lookup(gedp->ged_wdbp->dbip, n2, LOOKUP_NOISY); + of = _analyze_find_processor(gc, DB_OP_INTERSECT, dp1->d_minor_type, dp2->d_minor_type); + if (!of) { + bu_vls_sprintf(gedp->ged_result_str, "Unsupported type pairing\n"); + clear_obj(gc->gedp, tmpname); + clear_obj(gc->gedp, tmpname2); + bu_vls_free(&oname); + return GED_ERROR; + } + ret = (*of)(tmpname2, gc->gedp, DB_OP_INTERSECT, n1, n2); + mv_obj(gc->gedp, tmpname2, tmpname); + if (ret == -1) { + clear_obj(gc->gedp, tmpname); + clear_obj(gc->gedp, tmpname2); + bu_vls_free(&oname); + return GED_ERROR; + } + } + } + + if (bu_vls_strlen(&oname)) { + mv_obj(gc->gedp, tmpname, bu_vls_cstr(&oname)); + } + + clear_obj(gc->gedp, tmpname); + + bu_vls_sprintf(gedp->ged_result_str, "%ld\n", ret); + bu_vls_free(&oname); + + return GED_OK; +} + +extern "C" int +_analyze_cmd_subtract(void *bs, int argc, const char **argv) +{ + const char *usage_string = "analyze [options] subtract [-o out_obj] obj1 obj2 <...>"; + const char *purpose_string = "Subtract obj2 (and any subsequent objects) from obj1"; + if (_analyze_cmd_msgs(bs, argc, argv, usage_string, purpose_string)) { + return GED_OK; + } + + struct _ged_analyze_info *gc = (struct _ged_analyze_info *)bs; + struct ged *gedp = gc->gedp; + + argc--; argv++; + if (!argc) { + bu_vls_printf(gc->gedp->ged_result_str, "%s\n", usage_string); + return GED_ERROR; + } + + GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); + GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR); + + /* initialize result */ + bu_vls_trunc(gedp->ged_result_str, 0); + + // See if we are going to output an object + int help = 0; + struct bu_vls oname = BU_VLS_INIT_ZERO; + struct bu_opt_desc d[3]; + BU_OPT(d[0], "h", "help", "", NULL, &help, "Print help"); + BU_OPT(d[1], "o", "output", "name", &bu_opt_vls, &oname, "Specify output object"); + BU_OPT_NULL(d[2]); + + int ac = bu_opt_parse(NULL, argc, argv, d); + if (help) { + bu_vls_printf(gc->gedp->ged_result_str, "%s\n", usage_string); + return GED_HELP; + } + if (ac < 2) { + bu_vls_printf(gc->gedp->ged_result_str, "%s\n", usage_string); + return GED_HELP; + } + argc = ac; + + if (bu_vls_strlen(&oname)) { + struct directory *dp_out = db_lookup(gedp->ged_wdbp->dbip, bu_vls_cstr(&oname), LOOKUP_QUIET); + if (dp_out != RT_DIR_NULL) { + bu_vls_sprintf(gedp->ged_result_str, "specified output object %s already exists.\n", bu_vls_cstr(&oname)); + bu_vls_free(&oname); + return GED_ERROR; + } + } + + long ret = 0; + const char *tmpname = "___analyze_cmd_subtract_tmp_obj__"; + struct directory *dp1 = db_lookup(gedp->ged_wdbp->dbip, argv[0], LOOKUP_NOISY); + struct directory *dp2 = db_lookup(gedp->ged_wdbp->dbip, argv[1], LOOKUP_NOISY); + op_func_ptr of = _analyze_find_processor(gc, DB_OP_SUBTRACT, dp1->d_minor_type, dp2->d_minor_type); + if (!of) { + bu_vls_sprintf(gedp->ged_result_str, "Unsupported type pairing\n"); + bu_vls_free(&oname); + return GED_ERROR; + } + clear_obj(gc->gedp, tmpname); + ret = (*of)(tmpname, gc->gedp, DB_OP_SUBTRACT, argv[0], argv[1]); + if (ret == -1) { + clear_obj(gc->gedp, tmpname); + bu_vls_free(&oname); + return GED_ERROR; + } + + if (argc > 2) { + const char *tmpname2 = "___analyze_cmd_subtract_tmp_obj_2__"; + for (int i = 2; i < argc; i++) { + const char *n1 = tmpname; + const char *n2 = argv[i]; + dp1 = db_lookup(gedp->ged_wdbp->dbip, n1, LOOKUP_NOISY); + dp2 = db_lookup(gedp->ged_wdbp->dbip, n2, LOOKUP_NOISY); + of = _analyze_find_processor(gc, DB_OP_SUBTRACT, dp1->d_minor_type, dp2->d_minor_type); + if (!of) { + bu_vls_sprintf(gedp->ged_result_str, "Unsupported type pairing\n"); + clear_obj(gc->gedp, tmpname); + clear_obj(gc->gedp, tmpname2); + bu_vls_free(&oname); + return GED_ERROR; + } + ret = (*of)(tmpname2, gc->gedp, DB_OP_SUBTRACT, n1, n2); + mv_obj(gc->gedp, tmpname2, tmpname); + if (ret == -1) { + clear_obj(gc->gedp, tmpname); + clear_obj(gc->gedp, tmpname2); + bu_vls_free(&oname); + return GED_ERROR; + } + } + } + + if (bu_vls_strlen(&oname)) { + mv_obj(gc->gedp, tmpname, bu_vls_cstr(&oname)); + } + + clear_obj(gc->gedp, tmpname); + + bu_vls_sprintf(gedp->ged_result_str, "%ld\n", ret); + bu_vls_free(&oname); + + return GED_OK; +} + +extern "C" int +_analyze_cmd_help(void *bs, int argc, const char **argv) +{ + struct _ged_analyze_info *gc = (struct _ged_analyze_info *)bs; + if (!argc || !argv || BU_STR_EQUAL(argv[0], "help")) { + bu_vls_printf(gc->gedp->ged_result_str, "analyze [options] subcommand [args]\n"); + if (gc->gopts) { + char *option_help = bu_opt_describe(gc->gopts, NULL); + if (option_help) { + bu_vls_printf(gc->gedp->ged_result_str, "Options:\n%s\n", option_help); + bu_free(option_help, "help str"); + } + } + bu_vls_printf(gc->gedp->ged_result_str, "Available subcommands:\n"); + const struct bu_cmdtab *ctp = NULL; + int ret; + const char *helpflag[2]; + helpflag[1] = PURPOSEFLAG; + size_t maxcmdlen = 0; + for (ctp = gc->cmds; ctp->ct_name != (char *)NULL; ctp++) { + maxcmdlen = (maxcmdlen > strlen(ctp->ct_name)) ? maxcmdlen : strlen(ctp->ct_name); + } + for (ctp = gc->cmds; ctp->ct_name != (char *)NULL; ctp++) { + bu_vls_printf(gc->gedp->ged_result_str, " %s%*s", ctp->ct_name, (int)(maxcmdlen - strlen(ctp->ct_name)) + 2, " "); + if (!BU_STR_EQUAL(ctp->ct_name, "help")) { + helpflag[0] = ctp->ct_name; + bu_cmd(gc->cmds, 2, helpflag, 0, (void *)gc, &ret); + } else { + bu_vls_printf(gc->gedp->ged_result_str, "print help and exit\n"); + } + } + } else { + int ret; + const char **helpargv = (const char **)bu_calloc(argc+1, sizeof(char *), "help argv"); + helpargv[0] = argv[0]; + helpargv[1] = HELPFLAG; + for (int i = 1; i < argc; i++) { + helpargv[i+1] = argv[i]; + } + bu_cmd(gc->cmds, argc+1, helpargv, 0, (void *)gc, &ret); + bu_free(helpargv, "help argv"); + return ret; + } + + return GED_OK; +} + + +const struct bu_cmdtab _analyze_cmds[] = { + { "summarize", _analyze_cmd_summarize}, + { "intersect", _analyze_cmd_intersect}, + { "subtract", _analyze_cmd_subtract}, + { (char *)NULL, NULL} + }; + + +extern "C" int +ged_analyze_core(struct ged *gedp, int argc, const char *argv[]) +{ + int help = 0; + struct _ged_analyze_info *gc = _analyze_info_create(); + gc->gedp = gedp; + gc->cmds = _analyze_cmds; + + // Sanity + if (UNLIKELY(!gedp || !argc || !argv)) { + _analyze_info_destroy(gc); + return GED_ERROR; + } + + // Clear results + bu_vls_trunc(gedp->ged_result_str, 0); + + // See if we have any high level options set + struct bu_opt_desc d[3]; + BU_OPT(d[0], "h", "help", "", NULL, &help, "Print help"); + BU_OPT(d[1], "v", "verbose", "", NULL, &gc->verbosity, "Verbose output"); + BU_OPT_NULL(d[2]); + + gc->gopts = d; + + if (argc == 1) { + _analyze_cmd_help(gc, 0, NULL); + _analyze_info_destroy(gc); + return GED_OK; + } + + // High level options are only defined prior to the subcommand + int cmd_pos = -1; + for (int i = 1; i < argc; i++) { + if (bu_cmd_valid(_analyze_cmds, argv[i]) == BRLCAD_OK) { + cmd_pos = i; + break; + } + } + + int acnt = (cmd_pos >= 0) ? cmd_pos : argc; + + bu_opt_parse(NULL, acnt, argv, d); + + if (help) { + if (cmd_pos >= 0) { + argc = argc - cmd_pos; + argv = &argv[cmd_pos]; + _analyze_cmd_help(gc, argc, argv); + } else { + _analyze_cmd_help(gc, 0, NULL); + } + _analyze_info_destroy(gc); + return GED_OK; + } + + + // Jump the processing past any options specified. If we don't have a + // subcommand, assume all args are geometry objects and the command mode is + // summarize. This will get us the old behavior, except in the case where + // we happen to have an object with a name that matches a subcommand of + // analyze. In that case, the full "analyze summarize objname" is needed. + const char *scmd = "summarize"; + if (cmd_pos != -1) { + argc = argc - cmd_pos; + argv = &argv[cmd_pos]; + } else { + argv[0] = scmd; + } + + int ret; + if (bu_cmd(_analyze_cmds, argc, argv, 0, (void *)gc, &ret) == BRLCAD_OK) { + _analyze_info_destroy(gc); + return ret; + } else { + bu_vls_printf(gedp->ged_result_str, "subcommand %s not defined", argv[0]); + } + + _analyze_info_destroy(gc); + return GED_ERROR; +} + +// Local Variables: + +#ifdef GED_PLUGIN +#include "../include/plugin.h" +extern "C" { + struct ged_cmd_impl analyze_cmd_impl = { "analyze", ged_analyze_core, GED_CMD_DEFAULT }; + const struct ged_cmd analyze_cmd = { &analyze_cmd_impl }; + + const struct ged_cmd *analyze_cmds[] = { &analyze_cmd, NULL }; + + static const struct ged_plugin pinfo = { GED_API, analyze_cmds, 1 }; + + COMPILER_DLLEXPORT const struct ged_plugin *ged_plugin_info() + { + return &pinfo; + } +} +#endif + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 + diff --git a/src/libged/analyze/arb8.cpp b/src/libged/analyze/arb8.cpp new file mode 100644 index 00000000000..57b463191df --- /dev/null +++ b/src/libged/analyze/arb8.cpp @@ -0,0 +1,209 @@ +/* A R B 8 . C P P + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file arb8.cpp + * + * Brief description + * + */ + +#include "common.h" + +#include "vmath.h" + +#include "bg/polygon.h" +#include "rt/arb_edit.h" +#include "rt/geom.h" +#include "ged/defines.h" +#include "../ged_private.h" +#include "./ged_analyze.h" + +/* edge definition array */ +static const int nedge[5][24] = { + {0, 1, 1, 2, 2, 0, 0, 3, 3, 2, 1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* ARB4 */ + {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 1, 4, 2, 4, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1}, /* ARB5 */ + {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 1, 4, 2, 5, 3, 5, 4, 5, -1, -1, -1, -1, -1, -1}, /* ARB6 */ + {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 3, 4, 1, 5, 2, 6, 4, 5, 5, 6, 4, 6, -1, -1}, /* ARB7 */ + {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 4, 5, 1, 5, 5, 6, 6, 7, 4, 7, 3, 7, 2, 6}, /* ARB8 */ +}; + +/* ARB face printout array */ +static const int prface[5][6] = { + {123, 124, 234, 134, -111, -111}, /* ARB4 */ + {1234, 125, 235, 345, 145, -111}, /* ARB5 */ + {1234, 2365, 1564, 512, 634, -111}, /* ARB6 */ + {1234, 567, 145, 2376, 1265, 4375}, /* ARB7 */ + {1234, 5678, 1584, 2376, 1265, 4378}, /* ARB8 */ +}; + +void +analyze_edge(struct ged *gedp, const int edge, const struct rt_arb_internal *arb, + const int type, row_t *row) +{ + int a = nedge[type][edge*2]; + int b = nedge[type][edge*2+1]; + + if (b == -1) { + row->nfields = 0; + return; + } + + row->nfields = 2; + row->fields[0].nchars = sprintf(row->fields[0].buf, "%d%d", a + 1, b + 1); + row->fields[1].nchars = sprintf(row->fields[1].buf, "%10.8f", + DIST_PNT_PNT(arb->pt[a], arb->pt[b])*gedp->ged_wdbp->dbip->dbi_base2local); +} + + + +void +analyze_arb8(struct ged *gedp, const struct rt_db_internal *ip) +{ + int i, type; + int cgtype; /* COMGEOM arb type: # of vertices */ + table_t table; /* holds table data from child functions */ + fastf_t tot_vol = 0.0, tot_area = 0.0; + point_t center_pt = VINIT_ZERO; + struct poly_face face = POLY_FACE_INIT_ZERO; + struct rt_arb_internal earb; + struct rt_arb_internal *arb = (struct rt_arb_internal *)ip->idb_ptr; + const int arb_faces[5][24] = rt_arb_faces; + RT_ARB_CK_MAGIC(arb); + + /* find the specific arb type, in GIFT order. */ + if ((cgtype = rt_arb_std_type(ip, &gedp->ged_wdbp->wdb_tol)) == 0) { + bu_vls_printf(gedp->ged_result_str, "analyze_arb: bad ARB\n"); + return; + } + + type = cgtype - 4; + + /* to get formatting correct, we need to collect the actual string + * lengths for each field BEFORE we start printing a table (fields + * are allowed to overflow the stated printf field width) */ + + /* TABLE 1 =========================================== */ + /* analyze each face, use center point of arb for reference */ + rt_arb_centroid(¢er_pt, ip); + + /* allocate pts array, maximum 4 verts per arb8 face */ + face.pts = (point_t *)bu_calloc(4, sizeof(point_t), "analyze_arb8: pts"); + /* allocate table rows, 12 rows needed for arb8 edges */ + table.rows = (row_t *)bu_calloc(12, sizeof(row_t), "analyze_arb8: rows"); + + table.nrows = 0; + for (face.npts = 0, i = 0; i < 6; face.npts = 0, i++) { + int a, b, c, d; /* 4 indices to face vertices */ + + a = arb_faces[type][i*4+0]; + b = arb_faces[type][i*4+1]; + c = arb_faces[type][i*4+2]; + d = arb_faces[type][i*4+3]; + + if (a == -1) { + table.rows[i].nfields = 0; + continue; + } + + /* find plane eqn for this face */ + if (bn_make_plane_3pnts(face.plane_eqn, arb->pt[a], arb->pt[b], arb->pt[c], &gedp->ged_wdbp->wdb_tol) < 0) { + bu_vls_printf(gedp->ged_result_str, "| %d%d%d%d | ***NOT A PLANE*** |\n", + a+1, b+1, c+1, d+1); + /* this row has 1 special fields */ + table.rows[i].nfields = NOT_A_PLANE; + continue; + } + + ADD_PT(face, arb->pt[a]); + ADD_PT(face, arb->pt[b]); + ADD_PT(face, arb->pt[c]); + ADD_PT(face, arb->pt[d]); + + /* The plane equations returned by bn_make_plane_3pnts above do + * not necessarily point outward. Use the reference center + * point for the arb and reverse direction for any errant planes. + * This corrects the output rotation, fallback angles so that + * they always give the outward pointing normal vector. */ + if (DIST_PNT_PLANE(center_pt, face.plane_eqn) > 0.0) { + HREVERSE(face.plane_eqn, face.plane_eqn); + } + + snprintf(face.label, sizeof(face.label), "%d", prface[type][i]); + + analyze_poly_face(gedp, &face, &(table.rows[i])); + tot_area += face.area; + table.nrows++; + } + + /* and print it */ + print_faces_table(gedp, &table); + + /* TABLE 2 =========================================== */ + /* analyze each edge */ + + /* blank line following previous table */ + bu_vls_printf(gedp->ged_result_str, "\n"); + + /* set up the records for arb4's and arb6's */ + earb = *arb; /* struct copy */ + if (cgtype == 4) { + VMOVE(earb.pt[3], earb.pt[4]); + } else if (cgtype == 6) { + VMOVE(earb.pt[5], earb.pt[6]); + } + + table.nrows = 0; + for (i = 0; i < 12; i++) { + analyze_edge(gedp, i, &earb, type, &(table.rows[i])); + if (nedge[type][i*2] == -1) { + break; + } + table.nrows += 1; + } + + print_edges_table(gedp, &table); + + /* TABLE 3 =========================================== */ + /* find the volume - break arb8 into 6 arb4s */ + + if (OBJ[ID_ARB8].ft_volume) + OBJ[ID_ARB8].ft_volume(&tot_vol, ip); + + print_volume_table(gedp, + tot_vol + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + tot_area + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + tot_vol/GALLONS_TO_MM3 + ); + + bu_free((char *)face.pts, "analyze_arb8: pts"); + bu_free((char *)table.rows, "analyze_arb8: rows"); +} +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/libged/analyze/arbn.cpp b/src/libged/analyze/arbn.cpp new file mode 100644 index 00000000000..8d919e37b1e --- /dev/null +++ b/src/libged/analyze/arbn.cpp @@ -0,0 +1,112 @@ +/* A R B N . C P P + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file arbn.cpp + * + * Brief description + * + */ + +#include "common.h" + +#include "vmath.h" + +#include "rt/geom.h" +#include "ged/defines.h" +#include "../ged_private.h" +#include "./ged_analyze.h" + +void +analyze_arbn(struct ged *gedp, const struct rt_db_internal *ip) +{ + size_t i; + fastf_t tot_vol = 0.0, tot_area = 0.0; + table_t table; + struct poly_face *faces; + struct bu_vls tmpstr = BU_VLS_INIT_ZERO; + struct rt_arbn_internal *aip = (struct rt_arbn_internal *)ip->idb_ptr; + size_t *npts = (size_t *)bu_calloc(aip->neqn, sizeof(size_t), "analyze_arbn: npts"); + point_t **tmp_pts = (point_t **)bu_calloc(aip->neqn, sizeof(point_t *), "analyze_arbn: tmp_pts"); + plane_t *eqs= (plane_t *)bu_calloc(aip->neqn, sizeof(plane_t), "analyze_arbn: eqs"); + + /* allocate array of face structs */ + faces = (struct poly_face *)bu_calloc(aip->neqn, sizeof(struct poly_face), "analyze_arbn: faces"); + for (i = 0; i < aip->neqn; i++) { + HMOVE(faces[i].plane_eqn, aip->eqn[i]); + VUNITIZE(faces[i].plane_eqn); + /* allocate array of pt structs, max number of verts per faces = (# of faces) - 1 */ + faces[i].pts = (point_t *)bu_calloc(aip->neqn - 1, sizeof(point_t), "analyze_arbn: pts"); + tmp_pts[i] = faces[i].pts; + HMOVE(eqs[i], faces[i].plane_eqn); + } + /* allocate table rows, 1 row per plane eqn */ + table.rows = (row_t *)bu_calloc(aip->neqn, sizeof(row_t), "analyze_arbn: rows"); + table.nrows = aip->neqn; + + bg_3d_polygon_make_pnts_planes(npts, tmp_pts, aip->neqn, (const plane_t *)eqs); + + for (i = 0; i < aip->neqn; i++) { + vect_t tmp; + bu_vls_sprintf(&tmpstr, "%4zu", i); + snprintf(faces[i].label, sizeof(faces[i].label), "%s", bu_vls_addr(&tmpstr)); + + faces[i].npts = npts[i]; + + /* calculate surface area */ + analyze_poly_face(gedp, &faces[i], &table.rows[i]); + tot_area += faces[i].area; + + /* calculate volume */ + VSCALE(tmp, faces[i].plane_eqn, faces[i].area); + tot_vol += VDOT(faces[i].pts[0], tmp); + } + tot_vol /= 3.0; + + print_faces_table(gedp, &table); + print_volume_table(gedp, + tot_vol + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + tot_area + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + tot_vol/GALLONS_TO_MM3 + ); + + for (i = 0; i < aip->neqn; i++) { + bu_free((char *)faces[i].pts, "analyze_arbn: pts"); + } + bu_free((char *)faces, "analyze_arbn: faces"); + bu_free((char *)table.rows, "analyze_arbn: rows"); + bu_free((char *)tmp_pts, "analyze_arbn: tmp_pts"); + bu_free((char *)npts, "analyze_arbn: npts"); + bu_free((char *)eqs, "analyze_arbn: eqs"); + bu_vls_free(&tmpstr); +} + + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/libged/analyze/ars.cpp b/src/libged/analyze/ars.cpp new file mode 100644 index 00000000000..14ad86b23cb --- /dev/null +++ b/src/libged/analyze/ars.cpp @@ -0,0 +1,138 @@ +/* A R S . C P P + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file ars.cpp + * + * Brief description + * + */ + +#include "common.h" + +#include "vmath.h" + +#include "rt/geom.h" +#include "ged/defines.h" +#include "../ged_private.h" +#include "./ged_analyze.h" + +#define ARS_PT(ii, jj) (&arip->curves[i+(ii)][(j+(jj))*ELEMENTS_PER_VECT]) + +void +analyze_ars(struct ged *gedp, const struct rt_db_internal *ip) +{ + size_t i, j, k; + size_t nfaces = 0; + fastf_t tot_area = 0.0, tot_vol = 0.0; + table_t table; + plane_t old_plane = HINIT_ZERO; + struct bu_vls tmpstr = BU_VLS_INIT_ZERO; + struct poly_face face = POLY_FACE_INIT_ZERO; + struct rt_ars_internal *arip = (struct rt_ars_internal *)ip->idb_ptr; + RT_ARS_CK_MAGIC(arip); + + /* allocate pts array, max 3 pts per triangular face */ + face.pts = (point_t *)bu_calloc(3, sizeof(point_t), "analyze_ars: pts"); + /* allocate table rows, probably overestimating the number of rows needed */ + table.rows = (row_t *)bu_calloc((arip->ncurves - 1) * 2 * arip->pts_per_curve, sizeof(row_t), "analyze_ars: rows"); + + k = arip->pts_per_curve - 2; + for (i = 0; i < arip->ncurves - 1; i++) { + int double_ended = k != 1 && VEQUAL(&arip->curves[i][ELEMENTS_PER_VECT], &arip->curves[i][k * ELEMENTS_PER_VECT]); + + for (j = 0; j < arip->pts_per_curve; j++) { + vect_t tmp; + + if (double_ended && i != 0 && (j == 0 || j == k || j == arip->pts_per_curve - 1)) continue; + + /* first triangular face, make sure it's not a duplicate */ + if (bn_make_plane_3pnts(face.plane_eqn, ARS_PT(0, 0), ARS_PT(1, 1), ARS_PT(0, 1), &gedp->ged_wdbp->wdb_tol) == 0 + && !HEQUAL(old_plane, face.plane_eqn)) { + HMOVE(old_plane, face.plane_eqn); + ADD_PT(face, ARS_PT(0, 1)); + ADD_PT(face, ARS_PT(0, 0)); + ADD_PT(face, ARS_PT(1, 1)); + + bu_vls_sprintf(&tmpstr, "%zu%zu", i, j); + snprintf(face.label, sizeof(face.label), "%s", bu_vls_addr(&tmpstr)); + + /* surface area */ + analyze_poly_face(gedp, &face, &(table.rows[nfaces])); + tot_area += face.area; + + /* volume */ + VSCALE(tmp, face.plane_eqn, face.area); + tot_vol += fabs(VDOT(face.pts[0], tmp)); + + face.npts = 0; + nfaces++; + } + + /* second triangular face, make sure it's not a duplicate */ + if (bn_make_plane_3pnts(face.plane_eqn, ARS_PT(1, 0), ARS_PT(1, 1), ARS_PT(0, 0), &gedp->ged_wdbp->wdb_tol) == 0 + && !HEQUAL(old_plane, face.plane_eqn)) { + HMOVE(old_plane, face.plane_eqn); + ADD_PT(face, ARS_PT(1, 0)); + ADD_PT(face, ARS_PT(0, 0)); + ADD_PT(face, ARS_PT(1, 1)); + + bu_vls_sprintf(&tmpstr, "%zu%zu", i, j); + snprintf(face.label, sizeof(face.label), "%s", bu_vls_addr(&tmpstr)); + + analyze_poly_face(gedp, &face, &table.rows[nfaces]); + tot_area += face.area; + + VSCALE(tmp, face.plane_eqn, face.area); + tot_vol += fabs(VDOT(face.pts[0], tmp)); + + face.npts = 0; + nfaces++; + } + } + } + tot_vol /= 3.0; + table.nrows = nfaces; + + print_faces_table(gedp, &table); + print_volume_table(gedp, + tot_vol + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + tot_area + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + tot_vol/GALLONS_TO_MM3 + ); + + bu_free((char *)face.pts, "analyze_ars: pts"); + bu_free((char *)table.rows, "analyze_ars: rows"); + bu_vls_free(&tmpstr); +} + + + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/libged/analyze/ged_analyze.h b/src/libged/analyze/ged_analyze.h new file mode 100644 index 00000000000..adb7757e568 --- /dev/null +++ b/src/libged/analyze/ged_analyze.h @@ -0,0 +1,157 @@ +/* G E D _ A N A L Y Z E . H + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file ged_cg.h + * + * Brief description + * + */ + +#ifndef LIBGED_ANALYZE_GED_PRIVATE_H +#define LIBGED_ANALYZE_GED_PRIVATE_H + +#include "common.h" + +#include "vmath.h" +#include "rt/op.h" +#include "./ged/defines.h" + +__BEGIN_DECLS + +/* Conversion factor for Gallons to cubic millimeters */ +#define GALLONS_TO_MM3 3785411.784 +#define NOT_A_PLANE -1 + +#define FBUFSIZ 100 +#define NFIELDS 9 + +typedef struct row_field +{ + int nchars; + char buf[FBUFSIZ]; +} field_t; + +typedef struct table_row +{ + int nfields; + field_t fields[NFIELDS]; +} row_t; + +typedef struct table +{ + int nrows; + row_t *rows; +} table_t; + +#define ADD_PT(face, pt) do { VMOVE((face).pts[(face).npts], (pt)); (face).npts++; } while (0) + +/* contains information used to analyze a polygonal face */ +struct poly_face +{ + char label[5]; + size_t npts; + point_t *pts; + plane_t plane_eqn; + fastf_t area; +}; + +GED_EXPORT extern void +print_edges_table(struct ged *gedp, table_t *table); + +GED_EXPORT extern void +print_faces_table(struct ged *gedp, table_t *table); + +GED_EXPORT extern void +print_volume_table( + struct ged *gedp, + const fastf_t tot_vol, + const fastf_t tot_area, + const fastf_t tot_gallons + ); + +#define POLY_FACE_INIT_ZERO { { 0, 0, 0, 0, 0 }, 0, NULL, HINIT_ZERO, 0.0 } + +GED_EXPORT extern void +analyze_poly_face(struct ged *gedp, struct poly_face *face, row_t *row); + +GED_EXPORT extern void +print_faces_table(struct ged *gedp, table_t *table); + + +GED_EXPORT extern void +analyze_arb8(struct ged *gedp, const struct rt_db_internal *ip); + +GED_EXPORT extern void +analyze_arbn(struct ged *gedp, const struct rt_db_internal *ip); + +GED_EXPORT extern void +analyze_ars(struct ged *gedp, const struct rt_db_internal *ip); + +GED_EXPORT extern void +analyze_superell(struct ged *gedp, const struct rt_db_internal *ip); + +GED_EXPORT extern void +analyze_sketch(struct ged *gedp, const struct rt_db_internal *ip); + +GED_EXPORT extern void +analyze_general(struct ged *gedp, const struct rt_db_internal *ip); + + + +/** + * Functions for performing union/intersection/subtraction analysis operations + * on various type combinations. + * + * output_obj is optional. If non-NULL, it is the name used to produce a new + * geometry database object with the results of the operation (if any). + * + * The trivial case would be an op_vol_vol that takes two csg solids or combs + * and returns a new implicit comb with them unioned (always), intersected (if + * there is overlap) or subtracted (if there is overlap). + * + * More interesting are cases like op_pnts_vol that will produce new pnts + * objects based on boolean set operation analysis. + */ + +typedef long (*op_func_ptr)(const char *, struct ged *, db_op_t, const char *, const char *); + +GED_EXPORT extern long +op_pnts_vol( + const char *output_obj, + struct ged *gedp, + db_op_t op, + const char *pnt_obj, + const char *vol_obj + ); + + +__END_DECLS + +#endif /* LIBGED_ANALYZE_GED_PRIVATE_H */ + +/** @} */ +/* + * Local Variables: + * mode: C + * tab-width: 8 + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libged/analyze/op_pnts_vol.cpp b/src/libged/analyze/op_pnts_vol.cpp new file mode 100644 index 00000000000..b5b499e1221 --- /dev/null +++ b/src/libged/analyze/op_pnts_vol.cpp @@ -0,0 +1,427 @@ +/* O P _ P N T S _ V O L . C P P + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file op_pnts_vol.cpp + * + * Test all points in a pnts object for inside/outside status against + * a CSG volume. + * + */ + +#include "common.h" + +extern "C" { +#include +#include +#include +} + +extern "C" { +#include "rt/geom.h" +#include "analyze.h" +#include "../ged_private.h" +#include "../pnts_util.h" +#include "./ged_analyze.h" +} + +struct ray_result { + point_t *p; + double dist_test_pt; + int flag; +}; + +static void +_tgc_hack_fix(struct partition *part, struct soltab *stp) { + /* hack fix for bad tgc surfaces - avoids a logging crash, which is probably something else altogether... */ + if (bu_strncmp("rec", stp->st_meth->ft_label, 3) == 0 || bu_strncmp("tgc", stp->st_meth->ft_label, 3) == 0) { + + /* correct invalid surface number */ + if (part->pt_inhit->hit_surfno < 1 || part->pt_inhit->hit_surfno > 3) { + part->pt_inhit->hit_surfno = 2; + } + if (part->pt_outhit->hit_surfno < 1 || part->pt_outhit->hit_surfno > 3) { + part->pt_outhit->hit_surfno = 2; + } + } +} + + +static int +in_out_hit(struct application *ap, struct partition *partH, struct seg *UNUSED(segs)) +{ + struct partition *part = partH->pt_forw; + struct soltab *stp = part->pt_inseg->seg_stp; + + struct ray_result *r= (struct ray_result *)(ap->a_uptr); + + RT_CK_APPLICATION(ap); + + _tgc_hack_fix(part, stp); + + // Any partition containing the test point will have a hit distance less than + // or at the test point. If we find such a partition, set the flag. + bool t1 = ((part->pt_inhit->hit_dist < r->dist_test_pt) || NEAR_EQUAL(part->pt_inhit->hit_dist, r->dist_test_pt, VUNITIZE_TOL)); + bool t2 = ((part->pt_outhit->hit_dist > r->dist_test_pt) || NEAR_EQUAL(part->pt_outhit->hit_dist, r->dist_test_pt, VUNITIZE_TOL)); + if (t1 && t2) { + r->flag = -1; + } + + // Test point not on the partition + return 0; +} + +static int +in_out_miss(struct application *UNUSED(ap)) +{ + return 0; +} + +static double _backout(struct application *ap, point_t *p) +{ + double bov; + point_t ray_point; + vect_t diag, dvec, ray_dir, center_bsphere; + fastf_t bsphere_diameter, dist_to_target, delta; + + VMOVE(ray_point, *p); + VSET(ray_dir, 0, 0, 1); + + VSUB2(diag, ap->a_rt_i->mdl_max, ap->a_rt_i->mdl_min); + bsphere_diameter = MAGNITUDE(diag); + + /* + * calculate the distance from a plane normal to the ray direction through the center of + * the bounding sphere and a plane normal to the ray direction through the aim point. + */ + VADD2SCALE(center_bsphere, ap->a_rt_i->mdl_max, ap->a_rt_i->mdl_min, 0.5); + + dist_to_target = DIST_PNT_PNT(center_bsphere, ray_point); + + VSUB2(dvec, ray_point, center_bsphere); + VUNITIZE(dvec); + delta = dist_to_target*VDOT(ray_dir, dvec); + + /* + * this should put us about a bounding sphere radius in front of the bounding sphere + */ + bov = bsphere_diameter + delta; + + return bov; +} + + +// Return 0 if not inside, 1 if (approximately) on and -1 if inside the volume. +static int +_pnt_in_vol(point_t *p, struct application *ap) +{ + int (*a_hit)(struct application *, struct partition *, struct seg *); + int (*a_miss)(struct application *); + void *uptr_stash; + struct ray_result result; + result.flag = 0; + result.p = p; + + vect_t pz; + VSET(pz, 0, 0, 1); + + /* reuse existing application, just cache pre-existing hit routines and + * substitute our own */ + a_hit = ap->a_hit; + a_miss = ap->a_miss; + uptr_stash = ap->a_uptr; + + ap->a_hit = in_out_hit; + ap->a_miss = in_out_miss; + + VMOVE(ap->a_ray.r_pt, *p); + + double bov = _backout(ap, p); + for (int i = 0; i < 3; i++) { + ap->a_ray.r_pt[i] = ap->a_ray.r_pt[i] + (bov * -1*(pz[i])); + } + result.dist_test_pt = DIST_PNT_PNT(ap->a_ray.r_pt, *p); + + ap->a_uptr = &result; + VMOVE(ap->a_ray.r_dir, pz); + (void)rt_shootray(ap); + + /* restore application */ + ap->a_hit = a_hit; + ap->a_miss = a_miss; + ap->a_uptr = uptr_stash; + + return result.flag; +} + + +extern "C" long +op_pnts_vol( + const char *output_pnts_obj, + struct ged *gedp, + db_op_t op, + const char *pnts_obj, + const char *vol_obj + ) +{ + struct pnt *pstd, *pstdl = NULL; + struct pnt_color *pc, *pcl = NULL; + struct pnt_scale *ps, *psl = NULL; + struct pnt_normal *pn, *pnl = NULL; + struct pnt_color_scale *pcs, *pcsl = NULL; + struct pnt_color_normal *pcn, *pcnl = NULL; + struct pnt_scale_normal *psn, *psnl = NULL; + struct pnt_color_scale_normal *pcsn, *pcsnl = NULL; + void *npnt = NULL; + int iostat = 0; + struct rt_db_internal internal; + long pntcnt = 0; + struct rt_pnts_internal *opnts = NULL; + + // If we're supposed to make an output object, don't do anything + // until we're sure the way is clear. + if (output_pnts_obj) { + struct directory *odp = db_lookup(gedp->ged_wdbp->dbip, output_pnts_obj, LOOKUP_QUIET); + if (odp != RT_DIR_NULL) { + bu_vls_printf(gedp->ged_result_str, "%s already exists, aborting", output_pnts_obj); + return -1; + } + } + + // Unpack the points object + struct directory *dp = db_lookup(gedp->ged_wdbp->dbip, pnts_obj, LOOKUP_QUIET); + struct rt_db_internal tpnts_intern; + GED_DB_GET_INTERNAL(gedp, &tpnts_intern, dp, bn_mat_identity, &rt_uniresource, GED_ERROR); + if (tpnts_intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_PNTS) { + bu_vls_printf(gedp->ged_result_str, "%s is not a pnts object, aborting", pnts_obj); + rt_db_free_internal(&tpnts_intern); + return -1; + } + struct rt_pnts_internal *pnts = (struct rt_pnts_internal *)tpnts_intern.idb_ptr; + RT_PNTS_CK_MAGIC(pnts); + + // Since we need to verify type info about vol_obj, look it up + if (vol_obj) { + dp = db_lookup(gedp->ged_wdbp->dbip, vol_obj, LOOKUP_QUIET); + } + // If we're missing the volume object, union or subtraction result + // in the point set being unchanged. + if (!dp && (op == DB_OP_UNION || op == DB_OP_SUBTRACT)) { + if (output_pnts_obj) { + const char *av[3]; + av[0] = "copy"; + av[1] = pnts_obj; + av[2] = output_pnts_obj; + (void)ged_copy(gedp, 3, (const char **)av); + } + rt_db_free_internal(&tpnts_intern); + return pnts->count; + } + // Intersecting with nothing yields nothing + if (!dp && op == DB_OP_INTERSECT) { + rt_db_free_internal(&tpnts_intern); + return 0; + } + + /* Verify the object supplied as the volume object has + * non non-volumetric object types in its hierarchy. If + * there is such an object, abandon the test. */ + const char *tfilter = "! -type shape"; + if (db_search(NULL, DB_SEARCH_QUIET, tfilter, 1, &dp, gedp->ged_wdbp->dbip, NULL) > 0) { + bu_vls_printf(gedp->ged_result_str, "Non-solid object found in %s, aborting\n", vol_obj); + rt_db_free_internal(&tpnts_intern); + return -1; + } + + /* For the volume object, we need to raytrace it */ + struct application *ap; + struct resource *resp; + struct rt_i *rtip; + size_t ncpus; + BU_GET(ap, struct application); + RT_APPLICATION_INIT(ap); + BU_GET(resp, struct resource); + rtip = rt_new_rti(gedp->ged_wdbp->dbip); + rt_init_resource(resp, 0, rtip); + ap->a_rt_i = rtip; + ap->a_resource = resp; + ap->a_onehit = 1; + ap->a_hit = NULL; + ap->a_miss = NULL; + ap->a_overlap = NULL; + ap->a_logoverlap = rt_silent_logoverlap; + if ((rt_gettree(rtip, vol_obj) < 0)) { + pntcnt = -1; + goto pnts_internal_memfree; + } + ncpus = bu_avail_cpus(); + rt_prep_parallel(rtip, ncpus); + + /* For the output, make a new pnts object */ + if (output_pnts_obj) { + RT_DB_INTERNAL_INIT(&internal); + internal.idb_major_type = DB5_MAJORTYPE_BRLCAD; + internal.idb_type = ID_PNTS; + internal.idb_meth = &OBJ[ID_PNTS]; + BU_ALLOC(internal.idb_ptr, struct rt_pnts_internal); + opnts = (struct rt_pnts_internal *) internal.idb_ptr; + opnts->magic = RT_PNTS_INTERNAL_MAGIC; + opnts->scale = pnts->scale; + opnts->type = pnts->type; + opnts->point = _ged_pnts_new_pnt(pnts->type); + _ged_pnts_init_head_pnt(opnts); + } + + switch(pnts->type) { + case RT_PNT_TYPE_PNT: + pstdl = (struct pnt *)pnts->point; + for (BU_LIST_FOR(pstd, pnt, &(pstdl->l))) { + iostat = _pnt_in_vol(&(pstd->v), ap); + if ((op == DB_OP_INTERSECT && iostat) || (op == DB_OP_SUBTRACT && !iostat)) { + if (output_pnts_obj) { + npnt = _ged_pnts_dup((void *)pstd, RT_PNT_TYPE_PNT); + _ged_pnts_add(opnts, npnt); + } + pntcnt++; + } + } + break; + case RT_PNT_TYPE_COL: + pcl = (struct pnt_color *)pnts->point; + for (BU_LIST_FOR(pc, pnt_color, &(pcl->l))) { + iostat = _pnt_in_vol(&(pc->v), ap); + if ((op == DB_OP_INTERSECT && iostat) || (op == DB_OP_SUBTRACT && !iostat)) { + if (output_pnts_obj) { + npnt = _ged_pnts_dup((void *)pc, RT_PNT_TYPE_COL); + _ged_pnts_add(opnts, npnt); + } + pntcnt++; + } + } + break; + case RT_PNT_TYPE_SCA: + psl = (struct pnt_scale *)pnts->point; + for (BU_LIST_FOR(ps, pnt_scale, &(psl->l))) { + iostat = _pnt_in_vol(&(ps->v), ap); + if ((op == DB_OP_INTERSECT && iostat) || (op == DB_OP_SUBTRACT && !iostat)) { + if (output_pnts_obj) { + npnt = _ged_pnts_dup((void *)ps, RT_PNT_TYPE_SCA); + _ged_pnts_add(opnts, npnt); + } + pntcnt++; + } + } + break; + case RT_PNT_TYPE_NRM: + pnl = (struct pnt_normal *)pnts->point; + for (BU_LIST_FOR(pn, pnt_normal, &(pnl->l))) { + iostat = _pnt_in_vol(&(pn->v), ap); + if ((op == DB_OP_INTERSECT && iostat) || (op == DB_OP_SUBTRACT && !iostat)) { + if (output_pnts_obj) { + npnt = _ged_pnts_dup((void *)pn, RT_PNT_TYPE_NRM); + _ged_pnts_add(opnts, npnt); + } + pntcnt++; + } + } + break; + case RT_PNT_TYPE_COL_SCA: + pcsl = (struct pnt_color_scale *)pnts->point; + for (BU_LIST_FOR(pcs, pnt_color_scale, &(pcsl->l))) { + iostat = _pnt_in_vol(&(pcs->v), ap); + if ((op == DB_OP_INTERSECT && iostat) || (op == DB_OP_SUBTRACT && !iostat)) { + if (output_pnts_obj) { + npnt = _ged_pnts_dup((void *)pcs, RT_PNT_TYPE_COL_SCA); + _ged_pnts_add(opnts, npnt); + } + pntcnt++; + } + } + break; + case RT_PNT_TYPE_COL_NRM: + pcnl = (struct pnt_color_normal *)pnts->point; + for (BU_LIST_FOR(pcn, pnt_color_normal, &(pcnl->l))) { + iostat = _pnt_in_vol(&(pcn->v), ap); + if ((op == DB_OP_INTERSECT && iostat) || (op == DB_OP_SUBTRACT && !iostat)) { + if (output_pnts_obj) { + npnt = _ged_pnts_dup((void *)pcn, RT_PNT_TYPE_COL_NRM); + _ged_pnts_add(opnts, npnt); + } + pntcnt++; + } + } + break; + case RT_PNT_TYPE_SCA_NRM: + psnl = (struct pnt_scale_normal *)pnts->point; + for (BU_LIST_FOR(psn, pnt_scale_normal, &(psnl->l))) { + iostat = _pnt_in_vol(&(psn->v), ap); + if ((op == DB_OP_INTERSECT && iostat) || (op == DB_OP_SUBTRACT && !iostat)) { + if (output_pnts_obj) { + npnt = _ged_pnts_dup((void *)psn, RT_PNT_TYPE_SCA_NRM); + _ged_pnts_add(opnts, npnt); + } + pntcnt++; + } + } + break; + case RT_PNT_TYPE_COL_SCA_NRM: + pcsnl = (struct pnt_color_scale_normal *)pnts->point; + for (BU_LIST_FOR(pcsn, pnt_color_scale_normal, &(pcsnl->l))) { + iostat = _pnt_in_vol(&(pcsn->v), ap); + if ((op == DB_OP_INTERSECT && iostat) || (op == DB_OP_SUBTRACT && !iostat)) { + if (output_pnts_obj) { + npnt = _ged_pnts_dup((void *)pcsn, RT_PNT_TYPE_COL_SCA_NRM); + _ged_pnts_add(opnts, npnt); + } + pntcnt++; + } + } + break; + default: + bu_vls_printf(gedp->ged_result_str, "Unknown point type in object, aborting\n"); + pntcnt = -1; + goto pnts_internal_memfree; + }; + + if (output_pnts_obj) { + opnts->count = pntcnt; + GED_DB_DIRADD(gedp, dp, output_pnts_obj, RT_DIR_PHONY_ADDR, 0, RT_DIR_SOLID, (void *)&internal.idb_type, GED_ERROR); + GED_DB_PUT_INTERNAL(gedp, dp, &internal, &rt_uniresource, GED_ERROR); + + bu_vls_printf(gedp->ged_result_str, "Generated pnts object %s\n", output_pnts_obj); + } + +pnts_internal_memfree: + rt_clean_resource(rtip, resp); + rt_free_rti(rtip); + rt_db_free_internal(&tpnts_intern); + BU_PUT(resp, struct resource); + BU_PUT(ap, struct appliation); + + return pntcnt; +} + + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/libged/analyze/sketch.cpp b/src/libged/analyze/sketch.cpp new file mode 100644 index 00000000000..27a5ff48c3f --- /dev/null +++ b/src/libged/analyze/sketch.cpp @@ -0,0 +1,68 @@ +/* A R S . C P P + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file ars.cpp + * + * Brief description + * + */ + +#include "common.h" + +#include "vmath.h" + +#include "rt/geom.h" +#include "ged/defines.h" +#include "../ged_private.h" +#include "./ged_analyze.h" + +void +analyze_sketch(struct ged *gedp, const struct rt_db_internal *ip) +{ + fastf_t area = -1; + point_t centroid; + + if (OBJ[ID_SKETCH].ft_surf_area) + OBJ[ID_SKETCH].ft_surf_area(&area, ip); + + if (area > 0.0) { + bu_vls_printf(gedp->ged_result_str, "\nTotal Area: %10.8f", + area + * gedp->ged_wdbp->dbip->dbi_local2base + * gedp->ged_wdbp->dbip->dbi_local2base + ); + } + + if (OBJ[ID_SKETCH].ft_centroid) { + OBJ[ID_SKETCH].ft_centroid(¢roid, ip); + bu_vls_printf(gedp->ged_result_str, "\n Centroid: (%g, %g, %g)\n", + centroid[X] * gedp->ged_wdbp->dbip->dbi_base2local, + centroid[Y] * gedp->ged_wdbp->dbip->dbi_base2local, + centroid[Z] * gedp->ged_wdbp->dbip->dbi_base2local); + } +} + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/libged/analyze/superell.cpp b/src/libged/analyze/superell.cpp new file mode 100644 index 00000000000..7d580d53290 --- /dev/null +++ b/src/libged/analyze/superell.cpp @@ -0,0 +1,139 @@ +/* S U P E R E L L . C P P + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file superell.cpp + * + * Brief description + * + */ + +#include "common.h" + +#include "vmath.h" + +#include "rt/geom.h" +#include "ged/defines.h" +#include "../ged_private.h" +#include "./ged_analyze.h" + +#define PROLATE 1 +#define OBLATE 2 + +void +analyze_superell(struct ged *gedp, const struct rt_db_internal *ip) +{ + struct rt_superell_internal *superell = (struct rt_superell_internal *)ip->idb_ptr; + fastf_t ma, mb, mc; + fastf_t ecc, major_mag, minor_mag; + fastf_t vol, sur_area; + int type; + + RT_SUPERELL_CK_MAGIC(superell); + + ma = MAGNITUDE(superell->a); + mb = MAGNITUDE(superell->b); + mc = MAGNITUDE(superell->c); + + type = 0; + + vol = 4.0 * M_PI * ma * mb * mc / 3.0; + + if (fabs(ma-mb) < .00001 && fabs(mb-mc) < .00001) { + /* have a sphere */ + sur_area = 4.0 * M_PI * ma * ma; + goto print_results; + } + if (fabs(ma-mb) < .00001) { + /* A == B */ + if (mc > ma) { + /* oblate spheroid */ + type = OBLATE; + major_mag = mc; + minor_mag = ma; + } else { + /* prolate spheroid */ + type = PROLATE; + major_mag = ma; + minor_mag = mc; + } + } else + if (fabs(ma-mc) < .00001) { + /* A == C */ + if (mb > ma) { + /* oblate spheroid */ + type = OBLATE; + major_mag = mb; + minor_mag = ma; + } else { + /* prolate spheroid */ + type = PROLATE; + major_mag = ma; + minor_mag = mb; + } + } else + if (fabs(mb-mc) < .00001) { + /* B == C */ + if (ma > mb) { + /* oblate spheroid */ + type = OBLATE; + major_mag = ma; + minor_mag = mb; + } else { + /* prolate spheroid */ + type = PROLATE; + major_mag = mb; + minor_mag = ma; + } + } else { + bu_vls_printf(gedp->ged_result_str, " Cannot find surface area\n"); + return; + } + ecc = sqrt(major_mag*major_mag - minor_mag*minor_mag) / major_mag; + if (type == PROLATE) { + sur_area = M_2PI * minor_mag * minor_mag + + (M_2PI * (major_mag*minor_mag/ecc) * asin(ecc)); + } else { + /* type == OBLATE */ + sur_area = M_2PI * major_mag * major_mag + + (M_PI * (minor_mag*minor_mag/ecc) * log((1.0+ecc)/(1.0-ecc))); + } + +print_results: + print_volume_table(gedp, + vol + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + sur_area + * gedp->ged_wdbp->dbip->dbi_base2local + * gedp->ged_wdbp->dbip->dbi_base2local, + vol/GALLONS_TO_MM3 + ); +} + + + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/libged/analyze/analyze.c b/src/libged/analyze/util.cpp similarity index 51% rename from src/libged/analyze/analyze.c rename to src/libged/analyze/util.cpp index 4583e18684f..9490629740f 100644 --- a/src/libged/analyze/analyze.c +++ b/src/libged/analyze/util.cpp @@ -1,14 +1,14 @@ -/* A N A L Y Z E . C +/* U T I L . C P P * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * - * This program is free software; you can redistribute it and/or + * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * version 2.1 as published by the Free Software Foundation. * - * This program is distributed in the hope that it will be useful, but + * This library is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. @@ -17,95 +17,29 @@ * License along with this file; see the file named COPYING for more * information. */ -/** @file libged/analyze.c +/** @file util.cpp * - * The analyze command. + * Brief description * */ #include "common.h" -#include +extern "C" { +#include +#include #include -#include +} -#include "vmath.h" -#include "bn.h" -#include "bg/polygon.h" -#include "rt/arb_edit.h" -#include "raytrace.h" -#include "rt/geom.h" +#include +#include +extern "C" { +#include "bu/malloc.h" +#include "bu/vls.h" #include "../ged_private.h" - -/** - * TODO: primitives that still need implementing - * ehy - * metaball - * nmg - */ - -/* Conversion factor for Gallons to cubic millimeters */ -#define GALLONS_TO_MM3 3785411.784 - - -/* ARB face printout array */ -static const int prface[5][6] = { - {123, 124, 234, 134, -111, -111}, /* ARB4 */ - {1234, 125, 235, 345, 145, -111}, /* ARB5 */ - {1234, 2365, 1564, 512, 634, -111}, /* ARB6 */ - {1234, 567, 145, 2376, 1265, 4375}, /* ARB7 */ - {1234, 5678, 1584, 2376, 1265, 4378}, /* ARB8 */ -}; - - -/* edge definition array */ -static const int nedge[5][24] = { - {0, 1, 1, 2, 2, 0, 0, 3, 3, 2, 1, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* ARB4 */ - {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 1, 4, 2, 4, 3, 4, -1, -1, -1, -1, -1, -1, -1, -1}, /* ARB5 */ - {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 1, 4, 2, 5, 3, 5, 4, 5, -1, -1, -1, -1, -1, -1}, /* ARB6 */ - {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 3, 4, 1, 5, 2, 6, 4, 5, 5, 6, 4, 6, -1, -1}, /* ARB7 */ - {0, 1, 1, 2, 2, 3, 0, 3, 0, 4, 4, 5, 1, 5, 5, 6, 6, 7, 4, 7, 3, 7, 2, 6}, /* ARB8 */ -}; - - -/* contains information used to analyze a polygonal face */ -struct poly_face -{ - char label[5]; - size_t npts; - point_t *pts; - plane_t plane_eqn; - fastf_t area; -}; - - -#define POLY_FACE_INIT_ZERO { { 0, 0, 0, 0, 0 }, 0, NULL, HINIT_ZERO, 0.0 } - -#define ADD_PT(face, pt) do { VMOVE((face).pts[(face).npts], (pt)); (face).npts++; } while (0) - -/* structures and subroutines for analyze pretty printing */ - -#define FBUFSIZ 100 -#define NFIELDS 9 -#define NOT_A_PLANE -1 -typedef struct row_field -{ - int nchars; - char buf[FBUFSIZ]; -} field_t; - -typedef struct table_row -{ - int nfields; - field_t fields[NFIELDS]; -} row_t; - -typedef struct table -{ - int nrows; - row_t *rows; -} table_t; +#include "./ged_analyze.h" +} void get_dashes(field_t *f, const int ndashes) { @@ -117,98 +51,8 @@ void get_dashes(field_t *f, const int ndashes) f->nchars = ndashes; } - -void print_volume_table(struct ged *gedp - , const fastf_t tot_vol - , const fastf_t tot_area - , const fastf_t tot_gallons - ) -{ - -/* table format - - +------------------------------------+ - | Volume = 7999999999.99999905 | - | Surface Area = 24000000.00000000 | - | Gallons = 2113.37641887 | - +------------------------------------+ - -*/ - /* track actual table column widths */ - /* this table has 1 column (plus a name column) */ - int maxwidth[2] = {0, 0}; - field_t dashes; - char* fnames[3] = {"Volume", - "Surface Area", - "Gallons"}; - int indent = 4; /* number spaces to indent the table */ - int table_width_chars; - table_t table; - int i, nd, field; - - table.nrows = 3; - table.rows = (row_t *)bu_calloc(3, sizeof(row_t), "print_volume_table: rows"); - for (i = 0; i < table.nrows; ++i) { - fastf_t val = 0.0; - - /* field 0 */ - field = 0; - table.rows[i].fields[0].nchars = snprintf(table.rows[i].fields[field].buf, FBUFSIZ, "%s", - fnames[i]); - if (maxwidth[field] < table.rows[i].fields[field].nchars) - maxwidth[field] = table.rows[i].fields[field].nchars; - - if (i == 0) { - val = tot_vol; - } else if (i == 1) { - val = tot_area; - } else if (i == 2) { - val = tot_gallons; - } - - /* field 1 */ - field = 1; - if (val < 0) { - table.rows[i].fields[1].nchars = snprintf(table.rows[i].fields[field].buf, FBUFSIZ, "COULD NOT DETERMINE"); - } else { - table.rows[i].fields[1].nchars = snprintf(table.rows[i].fields[field].buf, FBUFSIZ, "%10.8f", val); - } - if (maxwidth[field] < table.rows[i].fields[field].nchars) - maxwidth[field] = table.rows[i].fields[field].nchars; - } - - /* get total table width */ - table_width_chars = maxwidth[0] + maxwidth[1]; - table_width_chars += 2 + 2; /* 2 chars at each end of a row */ - table_width_chars += 3; /* ' = ' between the two fields of a row */ - - /* newline following previous table */ - bu_vls_printf(gedp->ged_result_str, "\n"); - - /* header row 1 */ - nd = table_width_chars - 4; - get_dashes(&dashes, nd); - bu_vls_printf(gedp->ged_result_str, "%-*.*s+-%-*.*s-+\n", - indent, indent, " ", - nd, nd, dashes.buf); - - /* the three data rows */ - for (i = 0; i < table.nrows; ++i) { - bu_vls_printf(gedp->ged_result_str, "%-*.*s| %-*.*s = %*.*s |\n", - indent, indent, " ", - maxwidth[0], maxwidth[0], table.rows[i].fields[0].buf, - maxwidth[1], maxwidth[1], table.rows[i].fields[1].buf); - } - - /* closing table row */ - bu_vls_printf(gedp->ged_result_str, "%-*.*s+-%-*.*s-+\n", - indent, indent, " ", - nd, nd, dashes.buf); - bu_free((char *)table.rows, "print_volume_table: rows"); -} - - -void print_edges_table(struct ged *gedp, table_t *table) +void +print_edges_table(struct ged *gedp, table_t *table) { /* table header @@ -408,7 +252,8 @@ void print_edges_table(struct ged *gedp, table_t *table) } -void print_faces_table(struct ged *gedp, table_t *table) +void +print_faces_table(struct ged *gedp, table_t *table) { /* table header @@ -606,53 +451,93 @@ void print_faces_table(struct ged *gedp, table_t *table) bu_vls_printf(gedp->ged_result_str, "-+\n"); } - -/** - * general analyze function for primitives that can be analyzed using volume - * and surface area functions from the rt_functab. - * Currently used for: - * - ell - * - tor - * - tgc - * - rpc - * - eto - * - epa - * - part - * - rhc - */ -HIDDEN void -analyze_general(struct ged *gedp, const struct rt_db_internal *ip) +void +print_volume_table( + struct ged *gedp, + const fastf_t tot_vol, + const fastf_t tot_area, + const fastf_t tot_gallons + ) { - fastf_t vol, area; - point_t centroid; - vol = area = -1.0; +/* table format - if (OBJ[ip->idb_minor_type].ft_volume) { - OBJ[ip->idb_minor_type].ft_volume(&vol, ip); - } - if (OBJ[ip->idb_minor_type].ft_surf_area) { - OBJ[ip->idb_minor_type].ft_surf_area(&area, ip); + +------------------------------------+ + | Volume = 7999999999.99999905 | + | Surface Area = 24000000.00000000 | + | Gallons = 2113.37641887 | + +------------------------------------+ + +*/ + /* track actual table column widths */ + /* this table has 1 column (plus a name column) */ + int maxwidth[2] = {0, 0}; + field_t dashes; + const char* fnames[3] = {"Volume", "Surface Area", "Gallons"}; + int indent = 4; /* number spaces to indent the table */ + int table_width_chars; + table_t table; + int i, nd, field; + + table.nrows = 3; + table.rows = (row_t *)bu_calloc(3, sizeof(row_t), "print_volume_table: rows"); + for (i = 0; i < table.nrows; ++i) { + fastf_t val = 0.0; + + /* field 0 */ + field = 0; + table.rows[i].fields[0].nchars = snprintf(table.rows[i].fields[field].buf, FBUFSIZ, "%s", + fnames[i]); + if (maxwidth[field] < table.rows[i].fields[field].nchars) + maxwidth[field] = table.rows[i].fields[field].nchars; + + if (i == 0) { + val = tot_vol; + } else if (i == 1) { + val = tot_area; + } else if (i == 2) { + val = tot_gallons; + } + + /* field 1 */ + field = 1; + if (val < 0) { + table.rows[i].fields[1].nchars = snprintf(table.rows[i].fields[field].buf, FBUFSIZ, "COULD NOT DETERMINE"); + } else { + table.rows[i].fields[1].nchars = snprintf(table.rows[i].fields[field].buf, FBUFSIZ, "%10.8f", val); + } + if (maxwidth[field] < table.rows[i].fields[field].nchars) + maxwidth[field] = table.rows[i].fields[field].nchars; } - if (OBJ[ip->idb_minor_type].ft_centroid) { - OBJ[ip->idb_minor_type].ft_centroid(¢roid, ip); - bu_vls_printf(gedp->ged_result_str, "\n Centroid: (%g, %g, %g)\n", - centroid[X] * gedp->ged_wdbp->dbip->dbi_base2local, - centroid[Y] * gedp->ged_wdbp->dbip->dbi_base2local, - centroid[Z] * gedp->ged_wdbp->dbip->dbi_base2local); + /* get total table width */ + table_width_chars = maxwidth[0] + maxwidth[1]; + table_width_chars += 2 + 2; /* 2 chars at each end of a row */ + table_width_chars += 3; /* ' = ' between the two fields of a row */ + + /* newline following previous table */ + bu_vls_printf(gedp->ged_result_str, "\n"); + + /* header row 1 */ + nd = table_width_chars - 4; + get_dashes(&dashes, nd); + bu_vls_printf(gedp->ged_result_str, "%-*.*s+-%-*.*s-+\n", + indent, indent, " ", + nd, nd, dashes.buf); + + /* the three data rows */ + for (i = 0; i < table.nrows; ++i) { + bu_vls_printf(gedp->ged_result_str, "%-*.*s| %-*.*s = %*.*s |\n", + indent, indent, " ", + maxwidth[0], maxwidth[0], table.rows[i].fields[0].buf, + maxwidth[1], maxwidth[1], table.rows[i].fields[1].buf); } - print_volume_table(gedp, - vol - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local, - area - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local, - vol/GALLONS_TO_MM3 - ); + /* closing table row */ + bu_vls_printf(gedp->ged_result_str, "%-*.*s+-%-*.*s-+\n", + indent, indent, " ", + nd, nd, dashes.buf); + bu_free((char *)table.rows, "print_volume_table: rows"); } @@ -661,7 +546,7 @@ analyze_general(struct ged *gedp, const struct rt_db_internal *ip) * angles = pointer to 5 fastf_t's to store angles * unitv = pointer to the unit vector (previously computed) */ -HIDDEN void +static void findang(fastf_t *angles, fastf_t *unitv) { int i; @@ -707,6 +592,7 @@ findang(fastf_t *angles, fastf_t *unitv) } + /** * general analyze function for polygonal faces. * Currently used for: @@ -719,7 +605,7 @@ findang(fastf_t *angles, fastf_t *unitv) * - print_faces_table() information in row * - sorts vertices in face->pts into ccw order */ -HIDDEN void +void analyze_poly_face(struct ged *gedp, struct poly_face *face, row_t *row) { fastf_t angles[5]; @@ -744,409 +630,48 @@ analyze_poly_face(struct ged *gedp, struct poly_face *face, row_t *row) face->area*gedp->ged_wdbp->dbip->dbi_base2local*gedp->ged_wdbp->dbip->dbi_base2local); } - -HIDDEN void -analyze_edge(struct ged *gedp, const int edge, const struct rt_arb_internal *arb, - const int type, row_t *row) -{ - int a = nedge[type][edge*2]; - int b = nedge[type][edge*2+1]; - - if (b == -1) { - row->nfields = 0; - return; - } - - row->nfields = 2; - row->fields[0].nchars = sprintf(row->fields[0].buf, "%d%d", a + 1, b + 1); - row->fields[1].nchars = sprintf(row->fields[1].buf, "%10.8f", - DIST_PNT_PNT(arb->pt[a], arb->pt[b])*gedp->ged_wdbp->dbip->dbi_base2local); -} - - -HIDDEN void -analyze_arb8(struct ged *gedp, const struct rt_db_internal *ip) -{ - int i, type; - int cgtype; /* COMGEOM arb type: # of vertices */ - table_t table; /* holds table data from child functions */ - fastf_t tot_vol = 0.0, tot_area = 0.0; - point_t center_pt = VINIT_ZERO; - struct poly_face face = POLY_FACE_INIT_ZERO; - struct rt_arb_internal earb; - struct rt_arb_internal *arb = (struct rt_arb_internal *)ip->idb_ptr; - const int arb_faces[5][24] = rt_arb_faces; - RT_ARB_CK_MAGIC(arb); - - /* find the specific arb type, in GIFT order. */ - if ((cgtype = rt_arb_std_type(ip, &gedp->ged_wdbp->wdb_tol)) == 0) { - bu_vls_printf(gedp->ged_result_str, "analyze_arb: bad ARB\n"); - return; - } - - type = cgtype - 4; - - /* to get formatting correct, we need to collect the actual string - * lengths for each field BEFORE we start printing a table (fields - * are allowed to overflow the stated printf field width) */ - - /* TABLE 1 =========================================== */ - /* analyze each face, use center point of arb for reference */ - rt_arb_centroid(¢er_pt, ip); - - /* allocate pts array, maximum 4 verts per arb8 face */ - face.pts = (point_t *)bu_calloc(4, sizeof(point_t), "analyze_arb8: pts"); - /* allocate table rows, 12 rows needed for arb8 edges */ - table.rows = (row_t *)bu_calloc(12, sizeof(row_t), "analyze_arb8: rows"); - - table.nrows = 0; - for (face.npts = 0, i = 0; i < 6; face.npts = 0, i++) { - int a, b, c, d; /* 4 indices to face vertices */ - - a = arb_faces[type][i*4+0]; - b = arb_faces[type][i*4+1]; - c = arb_faces[type][i*4+2]; - d = arb_faces[type][i*4+3]; - - if (a == -1) { - table.rows[i].nfields = 0; - continue; - } - - /* find plane eqn for this face */ - if (bn_make_plane_3pnts(face.plane_eqn, arb->pt[a], arb->pt[b], arb->pt[c], &gedp->ged_wdbp->wdb_tol) < 0) { - bu_vls_printf(gedp->ged_result_str, "| %d%d%d%d | ***NOT A PLANE*** |\n", - a+1, b+1, c+1, d+1); - /* this row has 1 special fields */ - table.rows[i].nfields = NOT_A_PLANE; - continue; - } - - ADD_PT(face, arb->pt[a]); - ADD_PT(face, arb->pt[b]); - ADD_PT(face, arb->pt[c]); - ADD_PT(face, arb->pt[d]); - - /* The plane equations returned by bn_make_plane_3pnts above do - * not necessarily point outward. Use the reference center - * point for the arb and reverse direction for any errant planes. - * This corrects the output rotation, fallback angles so that - * they always give the outward pointing normal vector. */ - if (DIST_PNT_PLANE(center_pt, face.plane_eqn) > 0.0) { - HREVERSE(face.plane_eqn, face.plane_eqn); - } - - snprintf(face.label, sizeof(face.label), "%d", prface[type][i]); - - analyze_poly_face(gedp, &face, &(table.rows[i])); - tot_area += face.area; - table.nrows++; - } - - /* and print it */ - print_faces_table(gedp, &table); - - /* TABLE 2 =========================================== */ - /* analyze each edge */ - - /* blank line following previous table */ - bu_vls_printf(gedp->ged_result_str, "\n"); - - /* set up the records for arb4's and arb6's */ - earb = *arb; /* struct copy */ - if (cgtype == 4) { - VMOVE(earb.pt[3], earb.pt[4]); - } else if (cgtype == 6) { - VMOVE(earb.pt[5], earb.pt[6]); - } - - table.nrows = 0; - for (i = 0; i < 12; i++) { - analyze_edge(gedp, i, &earb, type, &(table.rows[i])); - if (nedge[type][i*2] == -1) { - break; - } - table.nrows += 1; - } - - print_edges_table(gedp, &table); - - /* TABLE 3 =========================================== */ - /* find the volume - break arb8 into 6 arb4s */ - - if (OBJ[ID_ARB8].ft_volume) - OBJ[ID_ARB8].ft_volume(&tot_vol, ip); - - print_volume_table(gedp, - tot_vol - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local, - tot_area - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local, - tot_vol/GALLONS_TO_MM3 - ); - - bu_free((char *)face.pts, "analyze_arb8: pts"); - bu_free((char *)table.rows, "analyze_arb8: rows"); -} - - -HIDDEN void -analyze_arbn(struct ged *gedp, const struct rt_db_internal *ip) +/** + * general analyze function for primitives that can be analyzed using volume + * and surface area functions from the rt_functab. + * Currently used for: + * - ell + * - tor + * - tgc + * - rpc + * - eto + * - epa + * - part + * - rhc + */ +void +analyze_general(struct ged *gedp, const struct rt_db_internal *ip) { - size_t i; - fastf_t tot_vol = 0.0, tot_area = 0.0; - table_t table; - struct poly_face *faces; - struct bu_vls tmpstr = BU_VLS_INIT_ZERO; - struct rt_arbn_internal *aip = (struct rt_arbn_internal *)ip->idb_ptr; - size_t *npts = (size_t *)bu_calloc(aip->neqn, sizeof(size_t), "analyze_arbn: npts"); - point_t **tmp_pts = (point_t **)bu_calloc(aip->neqn, sizeof(point_t *), "analyze_arbn: tmp_pts"); - plane_t *eqs= (plane_t *)bu_calloc(aip->neqn, sizeof(plane_t), "analyze_arbn: eqs"); - - /* allocate array of face structs */ - faces = (struct poly_face *)bu_calloc(aip->neqn, sizeof(struct poly_face), "analyze_arbn: faces"); - for (i = 0; i < aip->neqn; i++) { - HMOVE(faces[i].plane_eqn, aip->eqn[i]); - VUNITIZE(faces[i].plane_eqn); - /* allocate array of pt structs, max number of verts per faces = (# of faces) - 1 */ - faces[i].pts = (point_t *)bu_calloc(aip->neqn - 1, sizeof(point_t), "analyze_arbn: pts"); - tmp_pts[i] = faces[i].pts; - HMOVE(eqs[i], faces[i].plane_eqn); - } - /* allocate table rows, 1 row per plane eqn */ - table.rows = (row_t *)bu_calloc(aip->neqn, sizeof(row_t), "analyze_arbn: rows"); - table.nrows = aip->neqn; - - bg_3d_polygon_make_pnts_planes(npts, tmp_pts, aip->neqn, (const plane_t *)eqs); - - for (i = 0; i < aip->neqn; i++) { - vect_t tmp; - bu_vls_sprintf(&tmpstr, "%4zu", i); - snprintf(faces[i].label, sizeof(faces[i].label), "%s", bu_vls_addr(&tmpstr)); - - faces[i].npts = npts[i]; - - /* calculate surface area */ - analyze_poly_face(gedp, &faces[i], &table.rows[i]); - tot_area += faces[i].area; - - /* calculate volume */ - VSCALE(tmp, faces[i].plane_eqn, faces[i].area); - tot_vol += VDOT(faces[i].pts[0], tmp); - } - tot_vol /= 3.0; + fastf_t vol, area; + point_t centroid; - print_faces_table(gedp, &table); - print_volume_table(gedp, - tot_vol - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local, - tot_area - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local, - tot_vol/GALLONS_TO_MM3 - ); + vol = area = -1.0; - for (i = 0; i < aip->neqn; i++) { - bu_free((char *)faces[i].pts, "analyze_arbn: pts"); + if (OBJ[ip->idb_minor_type].ft_volume) { + OBJ[ip->idb_minor_type].ft_volume(&vol, ip); } - bu_free((char *)faces, "analyze_arbn: faces"); - bu_free((char *)table.rows, "analyze_arbn: rows"); - bu_free((char *)tmp_pts, "analyze_arbn: tmp_pts"); - bu_free((char *)npts, "analyze_arbn: npts"); - bu_free((char *)eqs, "analyze_arbn: eqs"); - bu_vls_free(&tmpstr); -} - - -#define ARS_PT(ii, jj) (&arip->curves[i+(ii)][(j+(jj))*ELEMENTS_PER_VECT]) - -HIDDEN void -analyze_ars(struct ged *gedp, const struct rt_db_internal *ip) -{ - size_t i, j, k; - size_t nfaces = 0; - fastf_t tot_area = 0.0, tot_vol = 0.0; - table_t table; - plane_t old_plane = HINIT_ZERO; - struct bu_vls tmpstr = BU_VLS_INIT_ZERO; - struct poly_face face = POLY_FACE_INIT_ZERO; - struct rt_ars_internal *arip = (struct rt_ars_internal *)ip->idb_ptr; - RT_ARS_CK_MAGIC(arip); - - /* allocate pts array, max 3 pts per triangular face */ - face.pts = (point_t *)bu_calloc(3, sizeof(point_t), "analyze_ars: pts"); - /* allocate table rows, probably overestimating the number of rows needed */ - table.rows = (row_t *)bu_calloc((arip->ncurves - 1) * 2 * arip->pts_per_curve, sizeof(row_t), "analyze_ars: rows"); - - k = arip->pts_per_curve - 2; - for (i = 0; i < arip->ncurves - 1; i++) { - int double_ended = k != 1 && VEQUAL(&arip->curves[i][ELEMENTS_PER_VECT], &arip->curves[i][k * ELEMENTS_PER_VECT]); - - for (j = 0; j < arip->pts_per_curve; j++) { - vect_t tmp; - - if (double_ended && i != 0 && (j == 0 || j == k || j == arip->pts_per_curve - 1)) continue; - - /* first triangular face, make sure it's not a duplicate */ - if (bn_make_plane_3pnts(face.plane_eqn, ARS_PT(0, 0), ARS_PT(1, 1), ARS_PT(0, 1), &gedp->ged_wdbp->wdb_tol) == 0 - && !HEQUAL(old_plane, face.plane_eqn)) { - HMOVE(old_plane, face.plane_eqn); - ADD_PT(face, ARS_PT(0, 1)); - ADD_PT(face, ARS_PT(0, 0)); - ADD_PT(face, ARS_PT(1, 1)); - - bu_vls_sprintf(&tmpstr, "%zu%zu", i, j); - snprintf(face.label, sizeof(face.label), "%s", bu_vls_addr(&tmpstr)); - - /* surface area */ - analyze_poly_face(gedp, &face, &(table.rows[nfaces])); - tot_area += face.area; - - /* volume */ - VSCALE(tmp, face.plane_eqn, face.area); - tot_vol += fabs(VDOT(face.pts[0], tmp)); - - face.npts = 0; - nfaces++; - } - - /* second triangular face, make sure it's not a duplicate */ - if (bn_make_plane_3pnts(face.plane_eqn, ARS_PT(1, 0), ARS_PT(1, 1), ARS_PT(0, 0), &gedp->ged_wdbp->wdb_tol) == 0 - && !HEQUAL(old_plane, face.plane_eqn)) { - HMOVE(old_plane, face.plane_eqn); - ADD_PT(face, ARS_PT(1, 0)); - ADD_PT(face, ARS_PT(0, 0)); - ADD_PT(face, ARS_PT(1, 1)); - - bu_vls_sprintf(&tmpstr, "%zu%zu", i, j); - snprintf(face.label, sizeof(face.label), "%s", bu_vls_addr(&tmpstr)); - - analyze_poly_face(gedp, &face, &table.rows[nfaces]); - tot_area += face.area; - - VSCALE(tmp, face.plane_eqn, face.area); - tot_vol += fabs(VDOT(face.pts[0], tmp)); - - face.npts = 0; - nfaces++; - } - } + if (OBJ[ip->idb_minor_type].ft_surf_area) { + OBJ[ip->idb_minor_type].ft_surf_area(&area, ip); } - tot_vol /= 3.0; - table.nrows = nfaces; - - print_faces_table(gedp, &table); - print_volume_table(gedp, - tot_vol - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local, - tot_area - * gedp->ged_wdbp->dbip->dbi_base2local - * gedp->ged_wdbp->dbip->dbi_base2local, - tot_vol/GALLONS_TO_MM3 - ); - - bu_free((char *)face.pts, "analyze_ars: pts"); - bu_free((char *)table.rows, "analyze_ars: rows"); - bu_vls_free(&tmpstr); -} - - -#define PROLATE 1 -#define OBLATE 2 - -HIDDEN void -analyze_superell(struct ged *gedp, const struct rt_db_internal *ip) -{ - struct rt_superell_internal *superell = (struct rt_superell_internal *)ip->idb_ptr; - fastf_t ma, mb, mc; - fastf_t ecc, major_mag, minor_mag; - fastf_t vol, sur_area; - int type; - RT_SUPERELL_CK_MAGIC(superell); - - ma = MAGNITUDE(superell->a); - mb = MAGNITUDE(superell->b); - mc = MAGNITUDE(superell->c); - - type = 0; - - vol = 4.0 * M_PI * ma * mb * mc / 3.0; - - if (fabs(ma-mb) < .00001 && fabs(mb-mc) < .00001) { - /* have a sphere */ - sur_area = 4.0 * M_PI * ma * ma; - goto print_results; - } - if (fabs(ma-mb) < .00001) { - /* A == B */ - if (mc > ma) { - /* oblate spheroid */ - type = OBLATE; - major_mag = mc; - minor_mag = ma; - } else { - /* prolate spheroid */ - type = PROLATE; - major_mag = ma; - minor_mag = mc; - } - } else - if (fabs(ma-mc) < .00001) { - /* A == C */ - if (mb > ma) { - /* oblate spheroid */ - type = OBLATE; - major_mag = mb; - minor_mag = ma; - } else { - /* prolate spheroid */ - type = PROLATE; - major_mag = ma; - minor_mag = mb; - } - } else - if (fabs(mb-mc) < .00001) { - /* B == C */ - if (ma > mb) { - /* oblate spheroid */ - type = OBLATE; - major_mag = ma; - minor_mag = mb; - } else { - /* prolate spheroid */ - type = PROLATE; - major_mag = mb; - minor_mag = ma; - } - } else { - bu_vls_printf(gedp->ged_result_str, " Cannot find surface area\n"); - return; - } - ecc = sqrt(major_mag*major_mag - minor_mag*minor_mag) / major_mag; - if (type == PROLATE) { - sur_area = M_2PI * minor_mag * minor_mag + - (M_2PI * (major_mag*minor_mag/ecc) * asin(ecc)); - } else { - /* type == OBLATE */ - sur_area = M_2PI * major_mag * major_mag + - (M_PI * (minor_mag*minor_mag/ecc) * log((1.0+ecc)/(1.0-ecc))); + if (OBJ[ip->idb_minor_type].ft_centroid) { + OBJ[ip->idb_minor_type].ft_centroid(¢roid, ip); + bu_vls_printf(gedp->ged_result_str, "\n Centroid: (%g, %g, %g)\n", + centroid[X] * gedp->ged_wdbp->dbip->dbi_base2local, + centroid[Y] * gedp->ged_wdbp->dbip->dbi_base2local, + centroid[Z] * gedp->ged_wdbp->dbip->dbi_base2local); } -print_results: print_volume_table(gedp, vol * gedp->ged_wdbp->dbip->dbi_base2local * gedp->ged_wdbp->dbip->dbi_base2local * gedp->ged_wdbp->dbip->dbi_base2local, - sur_area + area * gedp->ged_wdbp->dbip->dbi_base2local * gedp->ged_wdbp->dbip->dbi_base2local, vol/GALLONS_TO_MM3 @@ -1154,188 +679,14 @@ analyze_superell(struct ged *gedp, const struct rt_db_internal *ip) } -HIDDEN void -analyze_sketch(struct ged *gedp, const struct rt_db_internal *ip) -{ - fastf_t area = -1; - point_t centroid; - if (OBJ[ID_SKETCH].ft_surf_area) - OBJ[ID_SKETCH].ft_surf_area(&area, ip); - if (area > 0.0) { - bu_vls_printf(gedp->ged_result_str, "\nTotal Area: %10.8f", - area - * gedp->ged_wdbp->dbip->dbi_local2base - * gedp->ged_wdbp->dbip->dbi_local2base - ); - } +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 - if (OBJ[ID_SKETCH].ft_centroid) { - OBJ[ID_SKETCH].ft_centroid(¢roid, ip); - bu_vls_printf(gedp->ged_result_str, "\n Centroid: (%g, %g, %g)\n", - centroid[X] * gedp->ged_wdbp->dbip->dbi_base2local, - centroid[Y] * gedp->ged_wdbp->dbip->dbi_base2local, - centroid[Z] * gedp->ged_wdbp->dbip->dbi_base2local); - } -} - - -/** - * Analyze command - prints loads of info about a solid - * Format: analyze [name] - * if 'name' is missing use solid being edited - */ - -/* Analyze solid in internal form */ -HIDDEN void -analyze_do(struct ged *gedp, const struct rt_db_internal *ip) -{ - /* XXX Could give solid name, and current units, here */ - - switch (ip->idb_type) { - - case ID_ARB8: - analyze_arb8(gedp, ip); - break; - - case ID_BOT: - analyze_general(gedp, ip); - break; - - case ID_ARBN: - analyze_arbn(gedp, ip); - break; - - case ID_ARS: - analyze_ars(gedp, ip); - break; - - case ID_TGC: - analyze_general(gedp, ip); - break; - - case ID_ELL: - analyze_general(gedp, ip); - break; - - case ID_TOR: - analyze_general(gedp, ip); - break; - - case ID_RPC: - analyze_general(gedp, ip); - break; - - case ID_ETO: - analyze_general(gedp, ip); - break; - - case ID_EPA: - analyze_general(gedp, ip); - break; - - case ID_PARTICLE: - analyze_general(gedp, ip); - break; - - case ID_SUPERELL: - analyze_superell(gedp, ip); - break; - - case ID_SKETCH: - analyze_sketch(gedp, ip); - break; - - case ID_HYP: - analyze_general(gedp, ip); - break; - - case ID_PIPE: - analyze_general(gedp, ip); - break; - - case ID_VOL: - analyze_general(gedp, ip); - break; - - case ID_EXTRUDE: - analyze_general(gedp, ip); - break; - - case ID_RHC: - analyze_general(gedp, ip); - break; - - default: - bu_vls_printf(gedp->ged_result_str, "\nanalyze: unable to process %s solid\n", - OBJ[ip->idb_type].ft_name); - break; - } -} - - -int -ged_analyze_core(struct ged *gedp, int argc, const char *argv[]) -{ - struct directory *ndp; - int i; - struct rt_db_internal intern; - static const char *usage = "object(s)"; - - GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); - GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR); - - /* initialize result */ - bu_vls_trunc(gedp->ged_result_str, 0); - - /* must be wanting help */ - if (argc == 1) { - bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); - return GED_HELP; - } - - /* use the names that were input */ - for (i = 1; i < argc; i++) { - if ((ndp = db_lookup(gedp->ged_wdbp->dbip, argv[i], LOOKUP_NOISY)) == RT_DIR_NULL) - continue; - - GED_DB_GET_INTERNAL(gedp, &intern, ndp, bn_mat_identity, &rt_uniresource, GED_ERROR); - - _ged_do_list(gedp, ndp, 1); - analyze_do(gedp, &intern); - rt_db_free_internal(&intern); - } - - return GED_OK; -} - - -#ifdef GED_PLUGIN -#include "../include/plugin.h" -struct ged_cmd_impl analyze_cmd_impl = { - "analyze", - ged_analyze_core, - GED_CMD_DEFAULT -}; - -const struct ged_cmd analyze_cmd = { &analyze_cmd_impl }; -const struct ged_cmd *analyze_cmds[] = { &analyze_cmd, NULL }; - -static const struct ged_plugin pinfo = { GED_API, analyze_cmds, 1 }; - -COMPILER_DLLEXPORT const struct ged_plugin *ged_plugin_info() -{ - return &pinfo; -} -#endif /* GED_PLUGIN */ - -/* - * Local Variables: - * mode: C - * tab-width: 8 - * indent-tabs-mode: t - * c-file-style: "stroustrup" - * End: - * ex: shiftwidth=4 tabstop=8 - */ diff --git a/src/libged/annotate/annotate.c b/src/libged/annotate/annotate.c index ce1b073beaa..5e30dc09ff6 100644 --- a/src/libged/annotate/annotate.c +++ b/src/libged/annotate/annotate.c @@ -1,7 +1,7 @@ /* A N N O T A T E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/arb/arb.c b/src/libged/arb/arb.c index 412028468cd..6bf01cd4ad5 100644 --- a/src/libged/arb/arb.c +++ b/src/libged/arb/arb.c @@ -1,7 +1,7 @@ /* A R B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/arb/rotate_arb_face.c b/src/libged/arb/rotate_arb_face.c index 7b639b0979a..51738d9b721 100644 --- a/src/libged/arb/rotate_arb_face.c +++ b/src/libged/arb/rotate_arb_face.c @@ -1,7 +1,7 @@ /* R O T A T E _ A R B _ F A C E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/arced/arced.c b/src/libged/arced/arced.c index 26258143680..95973310db3 100644 --- a/src/libged/arced/arced.c +++ b/src/libged/arced/arced.c @@ -1,7 +1,7 @@ /* A R C E D . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/arot/arot.c b/src/libged/arot/arot.c index 89fe789b378..d8642421954 100644 --- a/src/libged/arot/arot.c +++ b/src/libged/arot/arot.c @@ -1,7 +1,7 @@ /* A R O T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/attr/attr.cpp b/src/libged/attr/attr.cpp index af92f116b9a..3e69dc5a2ec 100644 --- a/src/libged/attr/attr.cpp +++ b/src/libged/attr/attr.cpp @@ -1,7 +1,7 @@ /* A T T R . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/autoview/autoview.c b/src/libged/autoview/autoview.c index d600228a281..ef11df5e920 100644 --- a/src/libged/autoview/autoview.c +++ b/src/libged/autoview/autoview.c @@ -1,7 +1,7 @@ /* A U T O V I E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bb/bb.c b/src/libged/bb/bb.c index 5ecefbc0881..5d9a38b632c 100644 --- a/src/libged/bb/bb.c +++ b/src/libged/bb/bb.c @@ -1,7 +1,7 @@ /* B B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bev/bev.c b/src/libged/bev/bev.c index eb9f6bb2313..ca79d4c2fa0 100644 --- a/src/libged/bev/bev.c +++ b/src/libged/bev/bev.c @@ -1,7 +1,7 @@ /* B E V . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bigE/bigE.c b/src/libged/bigE/bigE.c index a51953577ca..5ca9cd1df93 100644 --- a/src/libged/bigE/bigE.c +++ b/src/libged/bigE/bigE.c @@ -1,7 +1,7 @@ /* B I G E . C * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/blast/blast.c b/src/libged/blast/blast.c index 4edc8ca812b..4265777ab55 100644 --- a/src/libged/blast/blast.c +++ b/src/libged/blast/blast.c @@ -1,7 +1,7 @@ /* B L A S T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bo/bo.c b/src/libged/bo/bo.c index 719bc24e7d2..3af982543d2 100644 --- a/src/libged/bo/bo.c +++ b/src/libged/bo/bo.c @@ -1,7 +1,7 @@ /* B O . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot.cpp b/src/libged/bot/bot.cpp index 5a79b45c8b9..92810313ef3 100644 --- a/src/libged/bot/bot.cpp +++ b/src/libged/bot/bot.cpp @@ -1,7 +1,7 @@ /* B O T . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_condense.c b/src/libged/bot/bot_condense.c index de58ba48d31..ee514662f8e 100644 --- a/src/libged/bot/bot_condense.c +++ b/src/libged/bot/bot_condense.c @@ -1,7 +1,7 @@ /* B O T _ C O N D E N S E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_decimate.c b/src/libged/bot/bot_decimate.c index 4ee99a763be..8d01e7579aa 100644 --- a/src/libged/bot/bot_decimate.c +++ b/src/libged/bot/bot_decimate.c @@ -1,7 +1,7 @@ /* B O T _ D E C I M A T E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_dump.c b/src/libged/bot/bot_dump.c index dc95800c03c..c0f497f1d28 100644 --- a/src/libged/bot/bot_dump.c +++ b/src/libged/bot/bot_dump.c @@ -1,7 +1,7 @@ /* B O T _ D U M P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_face_fuse.c b/src/libged/bot/bot_face_fuse.c index 5598279a127..0eae5a0d149 100644 --- a/src/libged/bot/bot_face_fuse.c +++ b/src/libged/bot/bot_face_fuse.c @@ -1,7 +1,7 @@ /* B O T _ F A C E _ F U S E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_face_sort.c b/src/libged/bot/bot_face_sort.c index 224ef223abc..274ab910468 100644 --- a/src/libged/bot/bot_face_sort.c +++ b/src/libged/bot/bot_face_sort.c @@ -1,7 +1,7 @@ /* B O T _ F A C E _ S O R T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_flip.c b/src/libged/bot/bot_flip.c index 6ef8ba3be4b..64b6d903cfb 100644 --- a/src/libged/bot/bot_flip.c +++ b/src/libged/bot/bot_flip.c @@ -1,7 +1,7 @@ /* B O T _ F L I P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_fuse.c b/src/libged/bot/bot_fuse.c index 1ee39c0091f..a8740e77717 100644 --- a/src/libged/bot/bot_fuse.c +++ b/src/libged/bot/bot_fuse.c @@ -1,7 +1,7 @@ /* B O T _ F U S E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_merge.c b/src/libged/bot/bot_merge.c index 55373f7fffe..15b3d6464a7 100644 --- a/src/libged/bot/bot_merge.c +++ b/src/libged/bot/bot_merge.c @@ -1,7 +1,7 @@ /* B O T _ M E R G E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_smooth.c b/src/libged/bot/bot_smooth.c index be62898f117..5074f8de7a9 100644 --- a/src/libged/bot/bot_smooth.c +++ b/src/libged/bot/bot_smooth.c @@ -1,7 +1,7 @@ /* B O T _ S M O O T H . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_split.c b/src/libged/bot/bot_split.c index 2d12afaf720..715892e57cc 100644 --- a/src/libged/bot/bot_split.c +++ b/src/libged/bot/bot_split.c @@ -1,7 +1,7 @@ /* B O T _ S P L I T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_sync.c b/src/libged/bot/bot_sync.c index 4aedccf6d02..1c42a6e8b93 100644 --- a/src/libged/bot/bot_sync.c +++ b/src/libged/bot/bot_sync.c @@ -1,7 +1,7 @@ /* B O T _ S Y N C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/bot_vertex_fuse.c b/src/libged/bot/bot_vertex_fuse.c index 68ce3ea9bbd..b15b2323a2e 100644 --- a/src/libged/bot/bot_vertex_fuse.c +++ b/src/libged/bot/bot_vertex_fuse.c @@ -1,7 +1,7 @@ /* B O T _ V E R T E X _ F U S E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/check.cpp b/src/libged/bot/check.cpp index c68e5c8f450..86e76a0915b 100644 --- a/src/libged/bot/check.cpp +++ b/src/libged/bot/check.cpp @@ -1,7 +1,7 @@ /* C H E C K . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/edbot.c b/src/libged/bot/edbot.c index d3229a1691e..0c1e3e229a5 100644 --- a/src/libged/bot/edbot.c +++ b/src/libged/bot/edbot.c @@ -1,7 +1,7 @@ /* E D B O T . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/bot/extrude.cpp b/src/libged/bot/extrude.cpp index a51cf30d658..63dbebfe794 100644 --- a/src/libged/bot/extrude.cpp +++ b/src/libged/bot/extrude.cpp @@ -1,7 +1,7 @@ /* E X T R U D E . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/ged_bot.h b/src/libged/bot/ged_bot.h index 0b26dccbc96..7a51b848f93 100644 --- a/src/libged/bot/ged_bot.h +++ b/src/libged/bot/ged_bot.h @@ -1,7 +1,7 @@ /* G E D _ B O T . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/bot/remesh.cpp b/src/libged/bot/remesh.cpp index 0f89c24387a..71a51cae8ec 100644 --- a/src/libged/bot/remesh.cpp +++ b/src/libged/bot/remesh.cpp @@ -1,7 +1,7 @@ /* B O T _ R E M E S H . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/brep/CMakeLists.txt b/src/libged/brep/CMakeLists.txt index cf9a84ceeca..551cc40afee 100644 --- a/src/libged/brep/CMakeLists.txt +++ b/src/libged/brep/CMakeLists.txt @@ -1,12 +1,33 @@ + +set(DPLOT_READER dplot) + +PERPLEX_TARGET( + ${DPLOT_READER}_scanner + ${DPLOT_READER}_scanner.perplex + OUT_SRC_FILE ${DPLOT_READER}_scanner.c + OUT_HDR_FILE ${DPLOT_READER}_scanner.h) +LEMON_TARGET( + ${DPLOT_READER}_parser + ${DPLOT_READER}_parser.lemon + OUT_SRC_FILE ${DPLOT_READER}_parser.c + OUT_HDR_FILE ${DPLOT_READER}_parser.h) +ADD_PERPLEX_LEMON_DEPENDENCY(${DPLOT_READER}_scanner ${DPLOT_READER}_parser) +DISTCLEAN(${CMAKE_CURRENT_BINARY_DIR}/${DPLOT_READER}_parser_${DPLOT_READER}_parser/${DPLOT_READER}_parser.lemon) + include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ${BRLCAD_BINARY_DIR}/include ${BRLCAD_SOURCE_DIR}/include ${BU_INCLUDE_DIRS} ${GED_INCLUDE_DIRS} + ${PERPLEX_${DPLOT_READER}_scanner_INCLUDE_DIR} + ${LEMON_${DPLOT_READER}_parser_INCLUDE_DIR} ) set(BREP_SRCS + ${PERPLEX_${DPLOT_READER}_scanner_SRC} + ${LEMON_${DPLOT_READER}_parser_SRC} + dplot.c brep.cpp conversion.cpp csg.cpp @@ -28,6 +49,10 @@ PLUGIN_SETUP(ged-brep ged) CMAKEFILES( CMakeLists.txt ${BREP_SRCS} + dplot_parser.lemon + dplot_reader.c + dplot_reader.h + dplot_scanner.perplex ) # Local Variables: diff --git a/src/libged/brep/brep.cpp b/src/libged/brep/brep.cpp index f499b4a6428..f42cc48df87 100644 --- a/src/libged/brep/brep.cpp +++ b/src/libged/brep/brep.cpp @@ -1,7 +1,7 @@ /* B R E P . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -1480,9 +1480,11 @@ ged_brep_core(struct ged *gedp, int argc, const char *argv[]) extern "C" { struct ged_cmd_impl brep_cmd_impl = { "brep", ged_brep_core, GED_CMD_DEFAULT }; const struct ged_cmd brep_cmd = { &brep_cmd_impl }; - const struct ged_cmd *brep_cmds[] = { &brep_cmd, NULL }; + struct ged_cmd_impl dplot_cmd_impl = { "dplot", ged_dplot_core, GED_CMD_DEFAULT }; + const struct ged_cmd dplot_cmd = { &dplot_cmd_impl }; + const struct ged_cmd *brep_cmds[] = { &brep_cmd, &dplot_cmd, NULL }; - static const struct ged_plugin pinfo = { GED_API, brep_cmds, 1 }; + static const struct ged_plugin pinfo = { GED_API, brep_cmds, 2 }; COMPILER_DLLEXPORT const struct ged_plugin *ged_plugin_info() { diff --git a/src/libged/brep/conversion.cpp b/src/libged/brep/conversion.cpp index 231147f6558..d61eb42a966 100644 --- a/src/libged/brep/conversion.cpp +++ b/src/libged/brep/conversion.cpp @@ -1,7 +1,7 @@ /* C O N V E R S I O N . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/brep/csg.cpp b/src/libged/brep/csg.cpp index 545185298a4..9518d431c55 100644 --- a/src/libged/brep/csg.cpp +++ b/src/libged/brep/csg.cpp @@ -1,7 +1,7 @@ /* C S G . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/brep/dplot.c b/src/libged/brep/dplot.c new file mode 100644 index 00000000000..56423448278 --- /dev/null +++ b/src/libged/brep/dplot.c @@ -0,0 +1,799 @@ +/* D P L O T . C + * BRL-CAD + * + * Copyright (c) 2014-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file dplot.c + * + * Brief description + * + */ + +#include "common.h" + +#include +#include + +#include "bu/color.h" +#include "bu/opt.h" +#include "raytrace.h" +#include "rt/geom.h" +#include "wdb.h" + +#include "../ged_private.h" +#include "./dplot_reader.h" + +enum { + DPLOT_INITIAL, + DPLOT_SSX_FIRST, + DPLOT_SSX, + DPLOT_SSX_EVENTS, + DPLOT_ISOCSX_FIRST, + DPLOT_ISOCSX, + DPLOT_ISOCSX_EVENTS, + DPLOT_FACE_CURVES, + DPLOT_LINKED_CURVES, + DPLOT_SPLIT_FACES +}; + +struct dplot_info { + struct dplot_data fdata; + int mode; + struct ged *gedp; + FILE *logfile; + char *prefix; + int ssx_idx; + int isocsx_idx; + int brep1_surf_idx; + int brep2_surf_idx; + int brep1_surf_count; + int brep2_surf_count; + int event_idx; + int event_count; + int brep1_isocsx_count; + int isocsx_count; +}; + +#define CLEANUP \ + fclose(info.logfile); \ + bu_free(info.prefix, "prefix"); \ + info.prefix = NULL; \ + if (info.fdata.ssx) bu_free(info.fdata.ssx, "ssx array"); + +#define RETURN_MORE \ + CLEANUP \ + return GED_MORE; + +#define RETURN_ERROR \ + CLEANUP \ + info.mode = DPLOT_INITIAL; \ + return GED_ERROR; + +HIDDEN int +dplot_overlay( + struct ged *gedp, + const char *prefix, + const char *infix, + int idx, + const char *name) +{ + const char *cmd_av[] = {"overlay", "[filename]", "1.0", "[name]"}; + int ret, cmd_ac = sizeof(cmd_av) / sizeof(char *); + struct bu_vls overlay_name = BU_VLS_INIT_ZERO; + + bu_vls_printf(&overlay_name, "%s%s%d.plot3", prefix, infix, idx); + cmd_av[1] = cmd_av[3] = bu_vls_cstr(&overlay_name); + if (name) { + cmd_av[3] = name; + } + ret = ged_overlay(gedp, cmd_ac, cmd_av); + bu_vls_free(&overlay_name); + + if (ret != GED_OK) { + bu_vls_printf(gedp->ged_result_str, "error overlaying plot\n"); + return GED_ERROR; + } + return GED_OK; +} + +HIDDEN int +dplot_erase_overlay( + struct dplot_info *info, + const char *name) +{ + const int NUM_EMPTY_PLOTS = 13; + int i; + + /* We can't actually erase the old plot without its real name, + * which is unknown. Instead, we'll write a plot with the same + * base name and color, which will overwrite the old one. We + * don't actually know the color either, so we resort to writing + * an empty plot with the given name using every color we created + * plots with. + */ + for (i = 0; i < NUM_EMPTY_PLOTS; ++i) { + int ret = dplot_overlay(info->gedp, info->prefix, "_empty", i, name); + if (ret != GED_OK) { + return ret; + } + } + return GED_OK; +} + +HIDDEN int +dplot_ssx( + struct dplot_info *info) +{ + int i, ret; + + /* draw surfaces, skipping intersecting surfaces if in SSI mode */ + /* TODO: need to name these overlays so I can selectively erase them */ + for (i = 0; i < info->brep1_surf_count; ++i) { + struct bu_vls name = BU_VLS_INIT_ZERO; + bu_vls_printf(&name, "%s_brep1_surface%d", info->prefix, i); + dplot_erase_overlay(info, bu_vls_cstr(&name)); + bu_vls_free(&name); + } + for (i = 0; i < info->brep2_surf_count; ++i) { + struct bu_vls name = BU_VLS_INIT_ZERO; + bu_vls_printf(&name, "%s_brep2_surface%d", info->prefix, i); + dplot_erase_overlay(info, bu_vls_cstr(&name)); + bu_vls_free(&name); + } + if (info->mode == DPLOT_SSX_FIRST || info->mode == DPLOT_SSX || info->mode == DPLOT_SSX_EVENTS) { + for (i = 0; i < info->brep1_surf_count; ++i) { + if (info->mode != DPLOT_SSX_FIRST && i == info->brep1_surf_idx) { + continue; + } + ret = dplot_overlay(info->gedp, info->prefix, "_brep1_surface", i, NULL); + if (ret != GED_OK) { + return GED_ERROR; + } + } + for (i = 0; i < info->brep2_surf_count; ++i) { + if (info->mode != DPLOT_SSX_FIRST && i == info->brep2_surf_idx) { + continue; + } + ret = dplot_overlay(info->gedp, info->prefix, "_brep2_surface", i, NULL); + if (ret != GED_OK) { + return GED_ERROR; + } + } + } + + /* draw highlighted surface-surface intersection pair */ + if (info->mode == DPLOT_SSX || info->mode == DPLOT_SSX_EVENTS) { + ret = dplot_overlay(info->gedp, info->prefix, "_highlight_brep1_surface", + info->brep1_surf_idx, "dplot_ssx1"); + if (ret != GED_OK) { + return GED_ERROR; + } + ret = dplot_overlay(info->gedp, info->prefix, "_highlight_brep2_surface", + info->brep2_surf_idx, "dplot_ssx2"); + if (ret != GED_OK) { + return GED_ERROR; + } + if (info->mode == DPLOT_SSX) { + /* advance past the completed pair */ + ++info->ssx_idx; + } + } + if (info->mode == DPLOT_SSX_FIRST) { + info->mode = DPLOT_SSX; + } + if (info->mode == DPLOT_SSX && info->ssx_idx < info->fdata.ssx_count) { + bu_vls_printf(info->gedp->ged_result_str, "Press [Enter] to show surface-" + "surface intersection %d", info->ssx_idx); + return GED_MORE; + } + return GED_OK; +} + +void +dplot_print_event_legend(struct dplot_info *info) +{ + bu_vls_printf(info->gedp->ged_result_str, "yellow = transverse\n"); + bu_vls_printf(info->gedp->ged_result_str, "white = tangent\n"); + bu_vls_printf(info->gedp->ged_result_str, "green = overlap\n"); +} + +HIDDEN int +dplot_ssx_events( + struct dplot_info *info) +{ + int ret; + + /* erase old event plots */ + ret = dplot_erase_overlay(info, "curr_event"); + if (ret != GED_OK) { + return ret; + } + + if (info->mode != DPLOT_SSX_EVENTS) { + return GED_OK; + } + + if (info->event_count > 0) { + /* convert event ssx_idx to string */ + struct bu_vls infix = BU_VLS_INIT_ZERO; + bu_vls_printf(&infix, "_ssx%d_event", info->ssx_idx); + + /* plot overlay */ + ret = dplot_overlay(info->gedp, info->prefix, bu_vls_cstr(&infix), + info->event_idx, "curr_event"); + bu_vls_free(&infix); + + if (ret != GED_OK) { + return ret; + } + if (info->event_idx == 0) { + dplot_print_event_legend(info); + } + } + /* advance to next event, or return to initial state */ + if (++info->event_idx < info->event_count) { + bu_vls_printf(info->gedp->ged_result_str, "Press [Enter] to show next event\n"); + return GED_MORE; + } + info->mode = DPLOT_INITIAL; + return GED_OK; +} + +HIDDEN int +dplot_isocsx( + struct dplot_info *info) +{ + if (info->mode != DPLOT_ISOCSX && + info->mode != DPLOT_ISOCSX_FIRST && + info->mode != DPLOT_ISOCSX_EVENTS) + { + return GED_OK; + } + + if (info->fdata.ssx[info->ssx_idx].isocsx_events == NULL) { + bu_vls_printf(info->gedp->ged_result_str, "The isocurves of neither " + "surface intersected the opposing surface in surface-surface" + " intersection %d.\n", info->ssx_idx); + info->mode = DPLOT_INITIAL; + return GED_OK; + } + + dplot_overlay(info->gedp, info->prefix, "_brep1_surface", + info->brep1_surf_idx, "isocsx_b1"); + dplot_overlay(info->gedp, info->prefix, "_brep2_surface", + info->brep2_surf_idx, "isocsx_b2"); + + if (info->mode == DPLOT_ISOCSX) { + struct bu_vls infix = BU_VLS_INIT_ZERO; + /* plot surface and the isocurve that intersects it */ + if (info->isocsx_idx < info->brep1_isocsx_count) { + dplot_overlay(info->gedp, info->prefix, "_highlight_brep2_surface", + info->brep2_surf_idx, "isocsx_b2"); + } else { + dplot_overlay(info->gedp, info->prefix, "_highlight_brep1_surface", + info->brep1_surf_idx, "isocsx_b1"); + } + bu_vls_printf(&infix, "_highlight_ssx%d_isocurve", info->ssx_idx); + dplot_overlay(info->gedp, info->prefix, bu_vls_cstr(&infix), info->isocsx_idx, "isocsx_isocurve"); + bu_vls_free(&infix); + } + + if (info->mode == DPLOT_ISOCSX_FIRST || + info->mode == DPLOT_ISOCSX) + { + if (info->mode == DPLOT_ISOCSX_FIRST || + ++info->isocsx_idx < info->isocsx_count) + { + bu_vls_printf(info->gedp->ged_result_str, "Press [Enter] to show " + "isocurve-surface intersection %d", info->isocsx_idx); + info->mode = DPLOT_ISOCSX; + return GED_MORE; + } else { + info->mode = DPLOT_INITIAL; + } + } + return GED_OK; +} + +HIDDEN int +dplot_isocsx_events(struct dplot_info *info) +{ + int ret; + + if (info->mode != DPLOT_ISOCSX_EVENTS) { + return GED_OK; + } + ret = dplot_erase_overlay(info, "curr_event"); + if (ret != GED_OK) { + return ret; + } + if (info->event_count > 0) { + /* convert event ssx_idx to string */ + struct bu_vls infix = BU_VLS_INIT_ZERO; + bu_vls_printf(&infix, "_ssx%d_isocsx%d_event", info->ssx_idx, + info->isocsx_idx); + + /* plot overlay */ + ret = dplot_overlay(info->gedp, info->prefix, bu_vls_cstr(&infix), + info->event_idx, "curr_event"); + bu_vls_free(&infix); + + if (ret != GED_OK) { + bu_vls_printf(info->gedp->ged_result_str, + "error overlaying plot\n"); + return ret; + } + if (info->event_idx == 0) { + dplot_print_event_legend(info); + } + } + /* advance to next event, or return to initial state */ + if (++info->event_idx < info->event_count) { + bu_vls_printf(info->gedp->ged_result_str, + "Press [Enter] to show next event\n"); + return GED_MORE; + } + + info->mode = DPLOT_INITIAL; + return GED_OK; +} + +HIDDEN int +dplot_face_curves(struct dplot_info *info) +{ + int f1_curves, f2_curves; + if (info->mode != DPLOT_FACE_CURVES) { + return GED_OK; + } + + f1_curves = info->fdata.ssx[info->ssx_idx].face1_clipped_curves; + f2_curves = info->fdata.ssx[info->ssx_idx].face2_clipped_curves; + info->event_count = f1_curves + f2_curves; + + if (info->event_count == 0) { + bu_vls_printf(info->gedp->ged_result_str, "No clipped curves for ssx" + " pair %d.\n", info->ssx_idx); + return GED_OK; + } + + if (info->event_idx < info->event_count) { + struct bu_vls prefix; + + dplot_overlay(info->gedp, info->prefix, "_brep1_surface", + info->brep1_surf_idx, "face_b1"); + dplot_overlay(info->gedp, info->prefix, "_brep2_surface", + info->brep2_surf_idx, "face_b2"); + + BU_VLS_INIT(&prefix); + bu_vls_printf(&prefix, "%s_ssx%d", info->prefix, info->ssx_idx); + dplot_erase_overlay(info, "clipped_fcurve"); + if (info->event_idx < f1_curves) { + bu_vls_printf(&prefix, "_brep1face_clipped_curve"); + dplot_overlay(info->gedp, bu_vls_cstr(&prefix), "", + info->event_idx, "clipped_fcurve"); + } else { + bu_vls_printf(&prefix, "_brep2face_clipped_curve"); + dplot_overlay(info->gedp, bu_vls_cstr(&prefix), "", + info->event_idx - f1_curves, "clipped_fcurve"); + } + ++info->event_idx; + if (info->event_idx < info->event_count) { + bu_vls_printf(info->gedp->ged_result_str, "Press [Enter] to show the" + " next curve."); + return GED_MORE; + } + } + + info->mode = DPLOT_INITIAL; + return GED_OK; +} + +HIDDEN int +dplot_split_faces( + struct dplot_info *info) +{ + int i, j; + struct bu_vls name = BU_VLS_INIT_ZERO; + struct bu_vls short_name = BU_VLS_INIT_ZERO; + struct split_face split_face; + + if (info->mode != DPLOT_SPLIT_FACES) { + return GED_OK; + } + + if (info->event_idx >= info->fdata.split_face_count) { + for (i = 0; i < info->fdata.split_face_count; ++i) { + split_face = info->fdata.face[i]; + + bu_vls_trunc(&name, 0); + bu_vls_printf(&name, "_split_face%d_outerloop_curve", i); + for (j = 0; j < split_face.outerloop_curves; ++j) { + bu_vls_trunc(&short_name, 0); + bu_vls_printf(&short_name, "sf%do%d", i, j); + dplot_overlay(info->gedp, info->prefix, bu_vls_cstr(&name), j, + bu_vls_cstr(&short_name)); + } + + bu_vls_trunc(&name, 0); + bu_vls_printf(&name, "_split_face%d_innerloop_curve", i); + for (j = 0; j < split_face.innerloop_curves; ++j) { + bu_vls_trunc(&short_name, 0); + bu_vls_printf(&short_name, "sf%di%d", i, j); + dplot_overlay(info->gedp, info->prefix, bu_vls_cstr(&name), j, + bu_vls_cstr(&short_name)); + } + } + } else { + if (info->event_idx > 0) { + /* erase curves of previous split face */ + split_face = info->fdata.face[info->event_idx - 1]; + for (i = 0; i < split_face.outerloop_curves; ++i) { + bu_vls_trunc(&short_name, 0); + bu_vls_printf(&short_name, "sfo%d", i); + dplot_erase_overlay(info, bu_vls_cstr(&short_name)); + } + for (i = 0; i < split_face.innerloop_curves; ++i) { + bu_vls_trunc(&short_name, 0); + bu_vls_printf(&short_name, "sfi%d", i); + dplot_erase_overlay(info, bu_vls_cstr(&short_name)); + } + } + + split_face = info->fdata.face[info->event_idx]; + bu_vls_printf(&name, "_split_face%d_outerloop_curve", info->event_idx); + for (i = 0; i < info->fdata.face[info->event_idx].outerloop_curves; ++i) { + bu_vls_trunc(&short_name, 0); + bu_vls_printf(&short_name, "sfo%d", i); + + dplot_erase_overlay(info, bu_vls_cstr(&short_name)); + dplot_overlay(info->gedp, info->prefix, bu_vls_cstr(&name), i, + bu_vls_cstr(&short_name)); + } + + bu_vls_trunc(&name, 0); + bu_vls_printf(&name, "_split_face%d_innerloop_curve", info->event_idx); + for (i = 0; i < info->fdata.face[info->event_idx].innerloop_curves; ++i) { + bu_vls_trunc(&short_name, 0); + bu_vls_printf(&short_name, "sfi%d", i); + + dplot_erase_overlay(info, bu_vls_cstr(&short_name)); + dplot_overlay(info->gedp, info->prefix, bu_vls_cstr(&name), i, + bu_vls_cstr(&short_name)); + } + + bu_vls_printf(info->gedp->ged_result_str, "Press [Enter] to show " + "split face %d", ++info->event_idx); + return GED_MORE; + } + return GED_OK; +} + +HIDDEN int +dplot_linked_curves( + struct dplot_info *info) +{ + int i; + if (info->mode != DPLOT_LINKED_CURVES) { + return GED_OK; + } + + if (info->event_idx >= info->fdata.linked_curve_count) { + for (i = 0; i < info->fdata.linked_curve_count; ++i) { + dplot_overlay(info->gedp, info->prefix, "_linked_curve", i, NULL); + } + } else { + dplot_overlay(info->gedp, info->prefix, "_linked_curve", + info->event_idx, "linked_curve"); + bu_vls_printf(info->gedp->ged_result_str, "Press [Enter] to show " + "linked curve %d", ++info->event_idx); + return GED_MORE; + } + return GED_OK; +} + +HIDDEN void * +dplot_malloc(size_t s) { + return bu_malloc(s, "dplot_malloc"); +} + +HIDDEN void +dplot_free(void *p) { + bu_free(p, "dplot_free"); +} + +HIDDEN void +dplot_load_file_data(struct dplot_info *info) +{ + int i, j; + struct ssx *curr_ssx; + struct isocsx *curr_isocsx; + int token_id; + perplex_t scanner; + void *parser; + + /* initialize scanner and parser */ + parser = ParseAlloc(dplot_malloc); + scanner = perplexFileScanner(info->logfile); + + info->fdata.brep1_surface_count = info->fdata.brep2_surface_count = 0; + info->fdata.ssx_count = 0; + BU_LIST_INIT(&info->fdata.ssx_list); + BU_LIST_INIT(&info->fdata.isocsx_list); + perplexSetExtra(scanner, (void *)&info->fdata); + + /* parse */ + while ((token_id = yylex(scanner)) != YYEOF) { + Parse(parser, token_id, info->fdata.token_data, &info->fdata); + } + Parse(parser, 0, info->fdata.token_data, &info->fdata); + + /* clean up */ + ParseFree(parser, dplot_free); + perplexFree(scanner); + + /* move ssx to dynamic array for easy access */ + info->fdata.ssx = NULL; + if (info->fdata.ssx_count > 0) { + + info->fdata.ssx = (struct ssx *)bu_malloc( + sizeof(struct ssx) * info->fdata.ssx_count, "ssx array"); + + i = info->fdata.ssx_count - 1; + while (BU_LIST_WHILE(curr_ssx, ssx, &info->fdata.ssx_list)) { + BU_LIST_DEQUEUE(&curr_ssx->l); + + curr_ssx->isocsx_events = NULL; + if (curr_ssx->intersecting_isocurves > 0) { + curr_ssx->isocsx_events = (int *)bu_malloc(sizeof(int) * + curr_ssx->intersecting_isocurves, "isocsx array"); + + j = curr_ssx->intersecting_isocurves - 1; + while (BU_LIST_WHILE(curr_isocsx, isocsx, &curr_ssx->isocsx_list)) { + BU_LIST_DEQUEUE(&curr_isocsx->l); + curr_ssx->isocsx_events[j--] = curr_isocsx->events; + BU_PUT(curr_isocsx, struct isocsx); + } + } + info->fdata.ssx[i--] = *curr_ssx; + BU_PUT(curr_ssx, struct ssx); + } + } +} + +int +ged_dplot_core(struct ged *gedp, int argc, const char *argv[]) +{ + static struct dplot_info info; + int ret; + const char *filename, *cmd; + char *dot; + + info.gedp = gedp; + bu_vls_trunc(gedp->ged_result_str, 0); + + if (argc < 3) { + bu_vls_printf(gedp->ged_result_str, "usage: %s logfile cmd\n", + argv[0]); + bu_vls_printf(gedp->ged_result_str, " where cmd is one of:\n"); + bu_vls_printf(gedp->ged_result_str, + " ssx (show intersecting surface pairs)\n"); + bu_vls_printf(gedp->ged_result_str, + " ssx N (show intersections of ssx pair N)\n"); + bu_vls_printf(gedp->ged_result_str, + " isocsx N (show intersecting isocurve-surface pairs of ssx pair N)\n"); + bu_vls_printf(gedp->ged_result_str, + " isocsx N M (show intersections of ssx pair N, isocsx pair M)\n"); + bu_vls_printf(gedp->ged_result_str, + " fcurves N (show clipped face curves of ssx pair N)\n"); + bu_vls_printf(gedp->ged_result_str, + " lcurves (show linked ssx curves used to split faces)\n"); + bu_vls_printf(gedp->ged_result_str, + " faces (show split faces used to construct result)\n"); + return GED_HELP; + } + filename = argv[1]; + cmd = argv[2]; + + if (info.mode == DPLOT_INITIAL) { + if (BU_STR_EQUAL(cmd, "ssx") && argc == 3) { + info.mode = DPLOT_SSX_FIRST; + info.ssx_idx = 0; + } else if (BU_STR_EQUAL(cmd, "ssx") && argc == 4) { + /* parse surface pair index */ + const char *idx_str = argv[3]; + ret = bu_sscanf(idx_str, "%d", &info.ssx_idx); + if (ret != 1) { + bu_vls_printf(gedp->ged_result_str, "%s is not a valid " + "surface pair (must be a non-negative integer)\n", idx_str); + return GED_ERROR; + } + info.mode = DPLOT_SSX_EVENTS; + info.event_idx = 0; + } else if (BU_STR_EQUAL(cmd, "isocsx") && argc == 4) { + const char *idx_str = argv[3]; + ret = bu_sscanf(idx_str, "%d", &info.ssx_idx); + if (ret != 1) { + bu_vls_printf(gedp->ged_result_str, "%s is not a valid " + "surface pair (must be a non-negative integer)\n", idx_str); + return GED_ERROR; + } + info.mode = DPLOT_ISOCSX_FIRST; + info.isocsx_idx = 0; + } else if (BU_STR_EQUAL(cmd, "isocsx") && argc == 5) { + /* parse surface pair index */ + const char *idx_str = argv[3]; + ret = bu_sscanf(idx_str, "%d", &info.ssx_idx); + if (ret != 1) { + bu_vls_printf(gedp->ged_result_str, "%s is not a valid " + "surface pair (must be a non-negative integer)\n", idx_str); + return GED_ERROR; + } + idx_str = argv[4]; + ret = bu_sscanf(idx_str, "%d", &info.isocsx_idx); + if (ret != 1) { + bu_vls_printf(gedp->ged_result_str, "%s is not a valid " + "isocurve-surface pair (must be a non-negative integer)\n", idx_str); + return GED_ERROR; + } + info.mode = DPLOT_ISOCSX_EVENTS; + info.event_idx = 0; + } else if (BU_STR_EQUAL(cmd, "fcurves") && argc == 4) { + const char *idx_str = argv[3]; + ret = bu_sscanf(idx_str, "%d", &info.ssx_idx); + if (ret != 1) { + bu_vls_printf(gedp->ged_result_str, "%s is not a valid " + "surface pair (must be a non-negative integer)\n", idx_str); + return GED_ERROR; + } + info.mode = DPLOT_FACE_CURVES; + info.event_idx = 0; + } else if (BU_STR_EQUAL(cmd, "lcurves") && argc == 3) { + info.mode = DPLOT_LINKED_CURVES; + info.event_idx = 0; + } else if (BU_STR_EQUAL(cmd, "faces") && argc == 3) { + info.mode = DPLOT_SPLIT_FACES; + info.event_idx = 0; + } else { + bu_vls_printf(gedp->ged_result_str, "%s is not a recognized " + "command or was given the wrong number of arguments\n", + cmd); + return GED_ERROR; + } + } + + /* open dplot log file */ + info.logfile = fopen(filename, "r"); + if (!info.logfile) { + bu_vls_printf(gedp->ged_result_str, "couldn't open log file \"%s\"\n", filename); + return GED_ERROR; + } + + /* filename before '.' is assumed to be the prefix for all + * plot-file names + */ + info.prefix = bu_strdup(filename); + dot = strchr(info.prefix, '.'); + if (dot) { + *dot = '\0'; + } + + dplot_load_file_data(&info); + + if (info.mode == DPLOT_SSX_FIRST || + info.mode == DPLOT_SSX || + info.mode == DPLOT_SSX_EVENTS || + info.mode == DPLOT_ISOCSX_FIRST || + info.mode == DPLOT_ISOCSX || + info.mode == DPLOT_ISOCSX_EVENTS) + { + if (info.fdata.ssx_count == 0) { + bu_vls_printf(info.gedp->ged_result_str, "no surface surface" + "intersections"); + RETURN_ERROR; + } else if (info.ssx_idx < 0 || + info.ssx_idx > (info.fdata.ssx_count - 1)) + { + bu_vls_printf(info.gedp->ged_result_str, "no surface pair %d (valid" + " range is [0, %d])\n", info.ssx_idx, info.fdata.ssx_count - 1); + RETURN_ERROR; + } + } + if (info.fdata.ssx_count > 0) { + info.brep1_surf_idx = info.fdata.ssx[info.ssx_idx].brep1_surface; + info.brep2_surf_idx = info.fdata.ssx[info.ssx_idx].brep2_surface; + info.event_count = info.fdata.ssx[info.ssx_idx].final_curve_events; + info.brep1_isocsx_count = + info.fdata.ssx[info.ssx_idx].intersecting_brep1_isocurves; + info.isocsx_count = + info.fdata.ssx[info.ssx_idx].intersecting_isocurves; + } + info.brep1_surf_count = info.fdata.brep1_surface_count; + info.brep2_surf_count = info.fdata.brep2_surface_count; + + if (info.mode == DPLOT_ISOCSX_EVENTS) { + int *isocsx_events = info.fdata.ssx[info.ssx_idx].isocsx_events; + + info.event_count = 0; + if (isocsx_events) { + info.event_count = isocsx_events[info.event_idx]; + } + } + + ret = dplot_ssx(&info); + if (ret == GED_ERROR) { + RETURN_ERROR; + } else if (ret == GED_MORE) { + RETURN_MORE; + } + + ret = dplot_ssx_events(&info); + if (ret == GED_ERROR) { + RETURN_ERROR; + } else if (ret == GED_MORE) { + RETURN_MORE; + } + + ret = dplot_isocsx(&info); + if (ret == GED_ERROR) { + RETURN_ERROR; + } else if (ret == GED_MORE) { + RETURN_MORE; + } + + ret = dplot_isocsx_events(&info); + if (ret == GED_ERROR) { + RETURN_ERROR; + } else if (ret == GED_MORE) { + RETURN_MORE; + } + + ret = dplot_face_curves(&info); + if (ret == GED_ERROR) { + RETURN_ERROR; + } else if (ret == GED_MORE) { + RETURN_MORE; + } + + ret = dplot_split_faces(&info); + if (ret == GED_ERROR) { + RETURN_ERROR; + } else if (ret == GED_MORE) { + RETURN_MORE; + } + + ret = dplot_linked_curves(&info); + if (ret == GED_ERROR) { + RETURN_ERROR; + } else if (ret == GED_MORE) { + RETURN_MORE; + } + + info.mode = DPLOT_INITIAL; + CLEANUP; + + return GED_OK; +} + +/* + * Local Variables: + * tab-width: 8 + * mode: C + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libged/brep/dplot_parser.lemon b/src/libged/brep/dplot_parser.lemon new file mode 100644 index 00000000000..35b6a376863 --- /dev/null +++ b/src/libged/brep/dplot_parser.lemon @@ -0,0 +1,103 @@ +%include { +#include "bu.h" +#include +#include "dplot_reader.h" +} + +%destructor statement_list { + $$.n = data->ssx_count; +} + +%stack_overflow { + fprintf(stderr, "Parser stack overflow. Last token was %d\n", yypMinor->yy0.n); +} + +%syntax_error { + fprintf(stderr, "Syntax error. Last token (type %d) was %d. Ignoring " + "input tokens until valid input is found.\n", yymajor, yyminor.yy0.n); +} + +%parse_failure { + fprintf(stderr, "Parsing failed. Parser has reset.\n"); +} + +%token_type {token_t} +%extra_argument {struct dplot_data *data} + +%token_prefix {TOKEN_} + +%type count {int} +%type index {int} + +start_symbol ::= statement_list. + +statement_list ::= /* empty */. +statement_list ::= statement_list statement. + +statement ::= surface_counts EOL. +statement ::= ssx_info EOL. +statement ::= linked_curve_count EOL. +statement ::= split_face_count EOL. +statement ::= split_face_info EOL. + +surface_counts ::= SURFACES count(C1) count(C2). { + data->brep1_surface_count = C1; + data->brep2_surface_count = C2; +} + +ssx_info ::= SSX index(SURF_IDX1) index(SURF_IDX2) count(EVENTS) count(CRV_COUNT1) count(CRV_COUNT2) count(B1_ISO) count(ISO) isocsx_event_counts. { + struct ssx *ssx; + BU_GET(ssx, struct ssx); + + ssx->brep1_surface = SURF_IDX1; + ssx->brep2_surface = SURF_IDX2; + ssx->final_curve_events = EVENTS; + ssx->face1_clipped_curves = CRV_COUNT1; + ssx->face2_clipped_curves = CRV_COUNT2; + ssx->intersecting_brep1_isocurves = B1_ISO; + ssx->intersecting_isocurves = ISO; + BU_LIST_INIT(&ssx->isocsx_list); + + /* move the list of event counts from the tmp location to this ssx + * instance + */ + BU_LIST_APPEND_LIST(&ssx->isocsx_list, &data->isocsx_list); + + BU_LIST_PUSH(&data->ssx_list, &ssx->l); + ++data->ssx_count; +} + +isocsx_event_counts ::= /* empty */. + +isocsx_event_counts ::= isocsx_event_counts count(C). { + struct isocsx *isocsx; + BU_GET(isocsx, struct isocsx); + + isocsx->events = C; + BU_LIST_INIT(&isocsx->l); + + BU_LIST_PUSH(&data->isocsx_list, &isocsx->l); +} + +linked_curve_count ::= LINKED_CURVES count(COUNT). { + data->linked_curve_count = COUNT; +} + +split_face_count ::= SPLIT_FACES count(SPLIT_FACES). { + data->split_face_count = SPLIT_FACES; + data->face = (struct split_face *)bu_malloc(SPLIT_FACES * + sizeof(struct split_face), "split face array"); +} + +split_face_info ::= SPLIT_FACE index(I) count(OUTER_COUNT) count(INNER_COUNT). { + data->face[I].outerloop_curves = OUTER_COUNT; + data->face[I].innerloop_curves = INNER_COUNT; +} + +count(C) ::= NONNEGATIVE_INT(N). { + C = N.n; +} + +index(I) ::= NONNEGATIVE_INT(N). { + I = N.n; +} diff --git a/src/libged/brep/dplot_reader.c b/src/libged/brep/dplot_reader.c new file mode 100644 index 00000000000..dde4b63d29c --- /dev/null +++ b/src/libged/brep/dplot_reader.c @@ -0,0 +1,124 @@ +/* D P L O T _ R E A D E R . C + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file dplot_reader.c + * + * Brief description + * + */ + +#include +#include +#include "dplot_reader.h" +#include "bu.h" + +HIDDEN void * +dplot_malloc(size_t s) { + return bu_malloc(s, "dplot_malloc"); +} + +HIDDEN void +dplot_free(void *p) { + bu_free(p, "dplot_free"); +} + +int +main(int argc, char *argv[]) +{ + int i, token_id; + FILE *input_file; + perplex_t scanner; + void *parser; + struct ssx *curr; + struct dplot_data data; + + if (argc != 2) { + bu_exit(1, "usage: %s input\n", argv[0]); + } + + bu_setprogname(argv[0]); + + /* initialize scanner */ + input_file = fopen(argv[1], "r"); + if (!input_file) { + bu_exit(2, "error: couldn't open \"%s\" for reading.\n", argv[1]); + } + scanner = perplexFileScanner(input_file); + + data.ssx_count = 0; + BU_LIST_INIT(&data.ssx_list); + perplexSetExtra(scanner, (void *)&data); + + /* initialize parser */ + parser = ParseAlloc(dplot_malloc); + + /* parse */ + while ((token_id = yylex(scanner)) != YYEOF) { + Parse(parser, token_id, data.token_data, &data); + } + Parse(parser, 0, data.token_data, &data); + + /* move list data to array */ + if (data.ssx_count > 0) { + data.ssx = (struct ssx *)bu_malloc( + sizeof(struct ssx) * data.ssx_count, "ssx array"); + + i = data.ssx_count - 1; + while (BU_LIST_WHILE(curr, ssx, &data.ssx_list)) { + data.ssx[i--] = *curr; + BU_LIST_DEQUEUE(&curr->l); + BU_PUT(curr, struct ssx); + } + } + + /* print data */ + bu_log("brep1: %d surfaces\n", data.brep1_surface_count); + bu_log("brep2: %d surfaces\n", data.brep2_surface_count); + + for (i = 0; i < data.ssx_count; ++i) { + bu_log("%d curve events between surface 1-%d and 2-%d\n", + data.ssx[i].final_curve_events, data.ssx[i].brep1_surface, + data.ssx[i].brep2_surface); + bu_log("\t%d brep1 isocurves intersected brep2\n", + data.ssx[i].intersecting_brep1_isocurves); + bu_log("\t%d brep2 isocurves intersected brep1\n", + data.ssx[i].intersecting_isocurves - + data.ssx[i].intersecting_brep1_isocurves); + } + + /* clean up */ + if (data.ssx) { + bu_free(data.ssx, "ssx array"); + } + ParseFree(parser, dplot_free); + perplexFree(scanner); + fclose(input_file); + + return 0; +} + +/* + * Local Variables: + * tab-width: 8 + * mode: C + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libged/brep/dplot_reader.h b/src/libged/brep/dplot_reader.h new file mode 100644 index 00000000000..180b4bbacf1 --- /dev/null +++ b/src/libged/brep/dplot_reader.h @@ -0,0 +1,91 @@ +/* D P L O T _ R E A D E R . H + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file dplot_reader.h + * + * Brief description + * + */ + +#ifndef DPLOT_PARSER +#define DPLOT_PARSER + +#define PERPLEX_ON_ENTER struct dplot_data *data = (struct dplot_data *)yyextra; + +#include "bu.h" +#include "dplot_parser.h" +#include "dplot_scanner.h" + +typedef struct { + int n; +} token_t; + +struct isocsx { + struct bu_list l; + int events; +}; + +struct ssx { + struct bu_list l; + int brep1_surface; + int brep2_surface; + int final_curve_events; + int face1_clipped_curves; + int face2_clipped_curves; + int intersecting_brep1_isocurves; + int intersecting_isocurves; + struct bu_list isocsx_list; /* struct isocsx list */ + int *isocsx_events; +}; + +struct split_face { + int outerloop_curves; + int innerloop_curves; +}; + +struct dplot_data { + token_t token_data; + int brep1_surface_count; + int brep2_surface_count; + int linked_curve_count; + int ssx_count; + int split_face_count; + struct bu_list ssx_list; /* struct ssx list */ + struct ssx *ssx; + struct bu_list isocsx_list; /* struct ssx list */ + struct split_face *face; +}; + +/* lemon prototypes */ +void *ParseAlloc(void *(*mallocProc)(size_t)); +void ParseFree(void *parser, void (*freeProc)(void *)); +void Parse(void *yyp, int yymajor, token_t tokenData, struct dplot_data *data); +void ParseTrace(FILE *fp, char *s); + +#endif + +/* + * Local Variables: + * tab-width: 8 + * mode: C + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libged/brep/dplot_scanner.perplex b/src/libged/brep/dplot_scanner.perplex new file mode 100644 index 00000000000..c35f63a59e5 --- /dev/null +++ b/src/libged/brep/dplot_scanner.perplex @@ -0,0 +1,42 @@ +#include "bu.h" +#include "dplot_reader.h" +enum {INITIAL, normal}; +%% +<> => normal { continue; } + + { +"surfaces" { + return TOKEN_SURFACES; +} + +"ssx" { + return TOKEN_SSX; +} + +"linkedcurves" { + return TOKEN_LINKED_CURVES; +} + +"splitfaces" { + return TOKEN_SPLIT_FACES; +} + +"splitface" { + return TOKEN_SPLIT_FACE; +} + +[0-9]|[1-9][0-9]+ { + data->token_data.n = 0; + bu_sscanf(yytext, "%d", &data->token_data.n); + return TOKEN_NONNEGATIVE_INT; +} + +[\n]+ { + return TOKEN_EOL; +} + +[^] { + /* ignore */ + continue; +} +} diff --git a/src/libged/brep/ged_brep.h b/src/libged/brep/ged_brep.h index 17a1c8525d7..3aa77be6325 100644 --- a/src/libged/brep/ged_brep.h +++ b/src/libged/brep/ged_brep.h @@ -1,7 +1,7 @@ /* G E D _ B R E P . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -111,6 +111,8 @@ GED_EXPORT extern int brep_intersect_curve_curve(struct rt_db_internal *intern1, GED_EXPORT extern int brep_intersect_curve_surface(struct rt_db_internal *intern1, struct rt_db_internal *intern2, int i, int j); GED_EXPORT extern int brep_intersect_surface_surface(struct rt_db_internal *intern1, struct rt_db_internal *intern2, int i, int j, struct bn_vlblock *vbp); +GED_EXPORT extern int ged_dplot_core(struct ged *gedp, int argc, const char *argv[]); + using namespace brlcad; void plotface(const ON_BrepFace &face, struct bn_vlblock *vbp, int plotres, bool dim3d, const int red, const int green, const int blue); diff --git a/src/libged/brep/info.cpp b/src/libged/brep/info.cpp index edd474bee61..99acf813615 100644 --- a/src/libged/brep/info.cpp +++ b/src/libged/brep/info.cpp @@ -1,7 +1,7 @@ /* I N F O . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/brep/intersect.cpp b/src/libged/brep/intersect.cpp index 0d72d5d79ee..dd04bdff806 100644 --- a/src/libged/brep/intersect.cpp +++ b/src/libged/brep/intersect.cpp @@ -1,7 +1,7 @@ /* I N T E R S E C T . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/brep/pick.cpp b/src/libged/brep/pick.cpp index 0a0c5907b96..86ef8dcedb5 100644 --- a/src/libged/brep/pick.cpp +++ b/src/libged/brep/pick.cpp @@ -1,7 +1,7 @@ /* P I C K . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/brep/plot.cpp b/src/libged/brep/plot.cpp index bdc1389629a..d363466114c 100644 --- a/src/libged/brep/plot.cpp +++ b/src/libged/brep/plot.cpp @@ -1,7 +1,7 @@ /* P L O T . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/brep/tikz.cpp b/src/libged/brep/tikz.cpp index 08ded121a5a..4e6adac7284 100644 --- a/src/libged/brep/tikz.cpp +++ b/src/libged/brep/tikz.cpp @@ -1,7 +1,7 @@ /* T I K Z . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/brep/valid.cpp b/src/libged/brep/valid.cpp index 58e031a55d4..ad382d67aac 100644 --- a/src/libged/brep/valid.cpp +++ b/src/libged/brep/valid.cpp @@ -1,7 +1,7 @@ /* V A L I D . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/cat/cat.c b/src/libged/cat/cat.c index 5aaabd98954..1dbaa13fbc7 100644 --- a/src/libged/cat/cat.c +++ b/src/libged/cat/cat.c @@ -1,7 +1,7 @@ /* C A T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/cc/cc.c b/src/libged/cc/cc.c index f723f71bbe6..3bcf5dbdbfa 100644 --- a/src/libged/cc/cc.c +++ b/src/libged/cc/cc.c @@ -1,7 +1,7 @@ /* C C . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check.c b/src/libged/check/check.c index 6fc31ee5409..7bec6b8f4ea 100644 --- a/src/libged/check/check.c +++ b/src/libged/check/check.c @@ -1,7 +1,7 @@ /* C H E C K . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_adj_air.c b/src/libged/check/check_adj_air.c index 13c1aa24c90..6a2c1b422a6 100644 --- a/src/libged/check/check_adj_air.c +++ b/src/libged/check/check_adj_air.c @@ -1,7 +1,7 @@ /* C H E C K _ A D J _ A I R . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_centroid.c b/src/libged/check/check_centroid.c index aa24d76e204..d7974dbc165 100644 --- a/src/libged/check/check_centroid.c +++ b/src/libged/check/check_centroid.c @@ -1,7 +1,7 @@ /* C H E C K _ C E N T R O I D . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_exp_air.c b/src/libged/check/check_exp_air.c index fa19cc5a8f8..872b8ce6b53 100644 --- a/src/libged/check/check_exp_air.c +++ b/src/libged/check/check_exp_air.c @@ -1,7 +1,7 @@ /* C H E C K _ E X P _ A I R . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_gap.c b/src/libged/check/check_gap.c index 5f694951f86..009d6079147 100644 --- a/src/libged/check/check_gap.c +++ b/src/libged/check/check_gap.c @@ -1,7 +1,7 @@ /* C H E C K _ G A P . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_mass.c b/src/libged/check/check_mass.c index f9ea8c7aa7b..47522357642 100644 --- a/src/libged/check/check_mass.c +++ b/src/libged/check/check_mass.c @@ -1,7 +1,7 @@ /* C H E C K _ M A S S . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_moments.c b/src/libged/check/check_moments.c index 6e8efdd7f79..28bfc614d1d 100644 --- a/src/libged/check/check_moments.c +++ b/src/libged/check/check_moments.c @@ -1,7 +1,7 @@ /* C H E C K _ M O M E N T S . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_overlaps.c b/src/libged/check/check_overlaps.c index b26058ad989..ded231d1f66 100644 --- a/src/libged/check/check_overlaps.c +++ b/src/libged/check/check_overlaps.c @@ -1,7 +1,7 @@ /* C H E C K _ O V E R L A P S . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_private.h b/src/libged/check/check_private.h index 507d9a0978b..866704a780e 100644 --- a/src/libged/check/check_private.h +++ b/src/libged/check/check_private.h @@ -1,7 +1,7 @@ /* C H E C K _ P R I V A T E . H * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_surf_area.c b/src/libged/check/check_surf_area.c index cf5e502598e..ecb7a555c2d 100644 --- a/src/libged/check/check_surf_area.c +++ b/src/libged/check/check_surf_area.c @@ -1,7 +1,7 @@ /* C H E C K _ S U R F _ A R E A . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_unconf_air.c b/src/libged/check/check_unconf_air.c index 23c5117c4b5..488c0d9da6a 100644 --- a/src/libged/check/check_unconf_air.c +++ b/src/libged/check/check_unconf_air.c @@ -1,7 +1,7 @@ /* C H E C K _ U N C O N F _ A I R . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/check/check_volume.c b/src/libged/check/check_volume.c index 32ac512b92b..ac83ccde168 100644 --- a/src/libged/check/check_volume.c +++ b/src/libged/check/check_volume.c @@ -1,7 +1,7 @@ /* C H E C K _ V O L U M E . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/clone/clone.c b/src/libged/clone/clone.c index c77c0452bce..c3efb08ed1d 100644 --- a/src/libged/clone/clone.c +++ b/src/libged/clone/clone.c @@ -1,7 +1,7 @@ /* C L O N E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/coil/coil.c b/src/libged/coil/coil.c index 9990865c2b8..acb90c137a2 100644 --- a/src/libged/coil/coil.c +++ b/src/libged/coil/coil.c @@ -1,7 +1,7 @@ /* C O I L . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/color/color.c b/src/libged/color/color.c index 1728df9fc21..94079e2b216 100644 --- a/src/libged/color/color.c +++ b/src/libged/color/color.c @@ -1,7 +1,7 @@ /* C O L O R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/columns.c b/src/libged/columns.c index d12cc1d2067..8f7deca489f 100644 --- a/src/libged/columns.c +++ b/src/libged/columns.c @@ -1,7 +1,7 @@ /* C O L U M N S . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/comb/comb.c b/src/libged/comb/comb.c index 466ec0292cd..069eab61a22 100644 --- a/src/libged/comb/comb.c +++ b/src/libged/comb/comb.c @@ -1,7 +1,7 @@ /* C O M B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/comb_color/comb_color.c b/src/libged/comb_color/comb_color.c index 7b4937cf81b..6b54b59729c 100644 --- a/src/libged/comb_color/comb_color.c +++ b/src/libged/comb_color/comb_color.c @@ -1,7 +1,7 @@ /* C O M B _ C O L O R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/comb_std/comb_std.c b/src/libged/comb_std/comb_std.c index 2c9cfd10be1..88404b0a731 100644 --- a/src/libged/comb_std/comb_std.c +++ b/src/libged/comb_std/comb_std.c @@ -1,7 +1,7 @@ /* C O M B _ S T D . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/combmem/combmem.c b/src/libged/combmem/combmem.c index 689438f4716..a947070c492 100644 --- a/src/libged/combmem/combmem.c +++ b/src/libged/combmem/combmem.c @@ -1,7 +1,7 @@ /* C O M B M E M . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/concat/concat.cpp b/src/libged/concat/concat.cpp index 8d17aee8153..ee417eda361 100644 --- a/src/libged/concat/concat.cpp +++ b/src/libged/concat/concat.cpp @@ -1,7 +1,7 @@ /* C O N C A T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -283,6 +283,10 @@ copy_object(struct ged *gedp, return GED_ERROR; } + /* db_diradd doesn't produce the correct major type for binary objects - + * make sure they match. */ + new_dp->d_major_type = input_dp->d_major_type; + if (rt_db_put_internal(new_dp, curr_dbip, &ip, &rt_uniresource) < 0) { bu_vls_printf(gedp->ged_result_str, "Failed to write new object (%s) to database - aborting!!\n", diff --git a/src/libged/constraint/constraint.c b/src/libged/constraint/constraint.c index 87070151663..73cd0d08011 100644 --- a/src/libged/constraint/constraint.c +++ b/src/libged/constraint/constraint.c @@ -1,7 +1,7 @@ /* C O N S T R A I N T . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/copy/copy.c b/src/libged/copy/copy.c index 275a764309c..c285df8ea4b 100644 --- a/src/libged/copy/copy.c +++ b/src/libged/copy/copy.c @@ -1,7 +1,7 @@ /* C O P Y . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/copyeval/copyeval.c b/src/libged/copyeval/copyeval.c index 613dcf589e3..eb6b14ede72 100644 --- a/src/libged/copyeval/copyeval.c +++ b/src/libged/copyeval/copyeval.c @@ -1,7 +1,7 @@ /* C O P Y E V A L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/copymat/copymat.c b/src/libged/copymat/copymat.c index 3555a53cabc..efe82df562d 100644 --- a/src/libged/copymat/copymat.c +++ b/src/libged/copymat/copymat.c @@ -1,7 +1,7 @@ /* C O P Y M A T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/cpi/cpi.c b/src/libged/cpi/cpi.c index 35caf8f01b1..8bdfd458488 100644 --- a/src/libged/cpi/cpi.c +++ b/src/libged/cpi/cpi.c @@ -1,7 +1,7 @@ /* C P I . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/dag/dag.cpp b/src/libged/dag/dag.cpp index acbbc8eaf38..361605d0605 100644 --- a/src/libged/dag/dag.cpp +++ b/src/libged/dag/dag.cpp @@ -1,7 +1,7 @@ /* D A G . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/dbip/dbip.c b/src/libged/dbip/dbip.c index 7897498abb4..ca427b57f99 100644 --- a/src/libged/dbip/dbip.c +++ b/src/libged/dbip/dbip.c @@ -1,7 +1,7 @@ /* D B I P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/debug/debug.cpp b/src/libged/debug/debug.cpp index db1c1b78dae..68a60d8eb0c 100644 --- a/src/libged/debug/debug.cpp +++ b/src/libged/debug/debug.cpp @@ -1,7 +1,7 @@ /* D E B U G . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/debugbu/debugbu.c b/src/libged/debugbu/debugbu.c index f5bbf10edd0..5c7b5f05e65 100644 --- a/src/libged/debugbu/debugbu.c +++ b/src/libged/debugbu/debugbu.c @@ -1,7 +1,7 @@ /* D E B U G B U . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/debugdir/debugdir.c b/src/libged/debugdir/debugdir.c index e6665bb2822..97fe16b6ccf 100644 --- a/src/libged/debugdir/debugdir.c +++ b/src/libged/debugdir/debugdir.c @@ -1,7 +1,7 @@ /* D E B U G D I R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/debuglib/debuglib.c b/src/libged/debuglib/debuglib.c index 38c25a0e414..b9861fbc38e 100644 --- a/src/libged/debuglib/debuglib.c +++ b/src/libged/debuglib/debuglib.c @@ -1,7 +1,7 @@ /* D E B U G L I B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/debugnmg/debugnmg.c b/src/libged/debugnmg/debugnmg.c index af233008830..1e2b6009468 100644 --- a/src/libged/debugnmg/debugnmg.c +++ b/src/libged/debugnmg/debugnmg.c @@ -1,7 +1,7 @@ /* D E B U G N M G . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/decompose/decompose.c b/src/libged/decompose/decompose.c index 17c2fccc2c2..2df4e9ab088 100644 --- a/src/libged/decompose/decompose.c +++ b/src/libged/decompose/decompose.c @@ -1,7 +1,7 @@ /* D E C O M P O S E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/delay/delay.c b/src/libged/delay/delay.c index c149705b68a..1936e3e09bb 100644 --- a/src/libged/delay/delay.c +++ b/src/libged/delay/delay.c @@ -1,7 +1,7 @@ /* D E L A Y . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/dir2ae/dir2ae.c b/src/libged/dir2ae/dir2ae.c index 6e9f794ff25..98ee1fc60ca 100644 --- a/src/libged/dir2ae/dir2ae.c +++ b/src/libged/dir2ae/dir2ae.c @@ -1,7 +1,7 @@ /* D I R 2 A E. C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/display_list.c b/src/libged/display_list.c index 157bce4e399..d8757019106 100644 --- a/src/libged/display_list.c +++ b/src/libged/display_list.c @@ -1,7 +1,7 @@ /* D I S P L A Y _ L I S T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/draw/draw.c b/src/libged/draw/draw.c index abb6b5cbad1..a1c71949f31 100644 --- a/src/libged/draw/draw.c +++ b/src/libged/draw/draw.c @@ -1,7 +1,7 @@ /* D R A W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/draw/loadview.c b/src/libged/draw/loadview.c index 9bb06121172..4c1b1de31a9 100644 --- a/src/libged/draw/loadview.c +++ b/src/libged/draw/loadview.c @@ -1,7 +1,7 @@ /* L O A D V I E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/draw/preview.c b/src/libged/draw/preview.c index bf3a21415c9..38bf645f887 100644 --- a/src/libged/draw/preview.c +++ b/src/libged/draw/preview.c @@ -1,7 +1,7 @@ /* P R E V I E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/draw_calc.cpp b/src/libged/draw_calc.cpp index d66cb1f4789..6ce1025554c 100644 --- a/src/libged/draw_calc.cpp +++ b/src/libged/draw_calc.cpp @@ -1,7 +1,7 @@ /* D R A W _ C A L C . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/dsp/dsp.c b/src/libged/dsp/dsp.c index a98d55a1d7f..f5d42bcc36c 100644 --- a/src/libged/dsp/dsp.c +++ b/src/libged/dsp/dsp.c @@ -1,7 +1,7 @@ /* D S P . C * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/dump/dump.c b/src/libged/dump/dump.c index 3e37ebc7e22..456b6714e12 100644 --- a/src/libged/dump/dump.c +++ b/src/libged/dump/dump.c @@ -1,7 +1,7 @@ /* D U M P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/dup/dup.c b/src/libged/dup/dup.c index bba5644738f..00b87c91291 100644 --- a/src/libged/dup/dup.c +++ b/src/libged/dup/dup.c @@ -1,7 +1,7 @@ /* D U P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/eac/eac.c b/src/libged/eac/eac.c index f1e186102d2..0fdbb31eb7d 100644 --- a/src/libged/eac/eac.c +++ b/src/libged/eac/eac.c @@ -1,7 +1,7 @@ /* E A C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/echo/echo.c b/src/libged/echo/echo.c index acb86de9d65..e37ebd72d4f 100644 --- a/src/libged/echo/echo.c +++ b/src/libged/echo/echo.c @@ -1,7 +1,7 @@ /* E C H O . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/edarb/edarb.c b/src/libged/edarb/edarb.c index 85c8ac733c8..fe0c70cdc3b 100644 --- a/src/libged/edarb/edarb.c +++ b/src/libged/edarb/edarb.c @@ -1,7 +1,7 @@ /* E D A R B . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/edcodes/edcodes.c b/src/libged/edcodes/edcodes.c index 74688ee7a0e..599b9f28928 100644 --- a/src/libged/edcodes/edcodes.c +++ b/src/libged/edcodes/edcodes.c @@ -1,7 +1,7 @@ /* E D C O D E S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/edcomb/edcomb.c b/src/libged/edcomb/edcomb.c index b3c1f49fde3..796fa585e78 100644 --- a/src/libged/edcomb/edcomb.c +++ b/src/libged/edcomb/edcomb.c @@ -1,7 +1,7 @@ /* E D C O M B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/edit/edit.c b/src/libged/edit/edit.c index 1938d5de5c5..364ed66b143 100644 --- a/src/libged/edit/edit.c +++ b/src/libged/edit/edit.c @@ -1,7 +1,7 @@ /* E D I T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/editit/editit.c b/src/libged/editit/editit.c index e7f3d58dde7..ead1452147e 100644 --- a/src/libged/editit/editit.c +++ b/src/libged/editit/editit.c @@ -1,7 +1,7 @@ /* E D I T I T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/edmater/edmater.c b/src/libged/edmater/edmater.c index fba0d0128cc..076a358dd03 100644 --- a/src/libged/edmater/edmater.c +++ b/src/libged/edmater/edmater.c @@ -1,7 +1,7 @@ /* E D M A T E R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/env/env.c b/src/libged/env/env.c index 20cba08a408..d726253a583 100644 --- a/src/libged/env/env.c +++ b/src/libged/env/env.c @@ -1,7 +1,7 @@ /* E N V . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/erase/erase.c b/src/libged/erase/erase.c index 9e2c44d3a44..44b866a09bd 100644 --- a/src/libged/erase/erase.c +++ b/src/libged/erase/erase.c @@ -1,7 +1,7 @@ /* E R A S E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/exec.cpp b/src/libged/exec.cpp index 2e5c1307368..2dacfad7a42 100644 --- a/src/libged/exec.cpp +++ b/src/libged/exec.cpp @@ -1,7 +1,7 @@ /* E X E C . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -34,8 +34,10 @@ extern "C" void libged_init(void); + extern "C" int -ged_exec(struct ged *gedp, int argc, const char *argv[]) { +ged_exec(struct ged *gedp, int argc, const char *argv[]) +{ if (!gedp || !argc || !argv) { return GED_ERROR; } @@ -46,21 +48,23 @@ ged_exec(struct ged *gedp, int argc, const char *argv[]) { start = bu_gettime(); } - // TODO - right now this is the map from the libged load - should probably - // use this to initialize a struct ged copy when ged_init is called, so - // client codes can add their own commands to their gedp... + // TODO - right now this is the map from the libged load - should + // probably use this to initialize a struct ged copy when ged_init + // is called, so client codes can add their own commands to their + // gedp... // - // The ged_cmds map should always reflect the original, vanilla state of - // libged's command set so we have a clean fallback available if we ever - // need it to fall back on/recover with. + // The ged_cmds map should always reflect the original, vanilla + // state of libged's command set so we have a clean fallback + // available if we ever need it to fall back on/recover with. std::map *cmap = (std::map *)ged_cmds; - // On OpenBSD, if the executable was launched in a way that requires - // bu_setprogname to find the BRL-CAD root directory the iniital libged - // initialization would have failed. If we have no ged_cmds at all this is - // probably what happened, so call libged_init again here. By the time we - // are calling ged_exec bu_setprogname should be set and we should be ready - // to actually find the commands. + // On OpenBSD, if the executable was launched in a way that + // requires bu_setprogname to find the BRL-CAD root directory the + // initial libged initialization would have failed. If we have no + // ged_cmds at all this is probably what happened, so call + // libged_init again here. By the time we are calling ged_exec + // bu_setprogname should be set and we should be ready to actually + // find the commands. if (!cmap->size()) { libged_init(); } @@ -74,8 +78,8 @@ ged_exec(struct ged *gedp, int argc, const char *argv[]) { const struct ged_cmd *cmd = c_it->second; - // TODO - if interactive command via cmd->i->interactive, don't execute - // unless we have the necessary callbacks defined in gedp + // TODO - if interactive command via cmd->i->interactive, don't + // execute unless we have the necessary callbacks defined in gedp int cret = (*cmd->i->cmd)(gedp, argc, argv); diff --git a/src/libged/exec_mapping.cpp b/src/libged/exec_mapping.cpp index dca6262727e..020b9bbefe3 100644 --- a/src/libged/exec_mapping.cpp +++ b/src/libged/exec_mapping.cpp @@ -1,7 +1,7 @@ /* E X E C _ M A P P I N G . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -31,11 +31,24 @@ #include "ged.h" +/* For this file, we need to undefine stat if defined so the command template + * doesn't end up being expanded with the defined version of the string. + * Without this we end up with ged__stati64 on Windows, instead of ged_stat. + * + * If this happens for other commands, the solution will be similar - the + * purpose of this function is just to expand templates into definitions to + * call ged_cmd_valid and ged_exec, not to actually execute any other + * functions; it should be safe to undef them here. + */ +#undef stat + + #define GED_CMD_HELPER1(x, y) x##y #define GED_CMD(x) \ int GED_CMD_HELPER1(ged_,x)(struct ged *gedp, int argc, const char *argv[]) \ { \ const char *fname = #x ; \ + const char *argv0 = argv[0] ; \ int vret = ged_cmd_valid(argv[0], fname); \ if (vret) { \ argv[0] = fname; \ @@ -44,9 +57,11 @@ if (vret) { \ ret |= GED_UNKNOWN; \ } \ + argv[0] = argv0; \ return ret; \ } \ + GED_CMD(3ptarb) GED_CMD(E) GED_CMD(adc) @@ -114,6 +129,7 @@ GED_CMD(debugnmg) GED_CMD(decompose) GED_CMD(delay) GED_CMD(dir2ae) +GED_CMD(dplot) GED_CMD(draw) GED_CMD(dsp) GED_CMD(dump) @@ -229,6 +245,7 @@ GED_CMD(nmg) GED_CMD(nmg_collapse) GED_CMD(nmg_fix_normals) GED_CMD(nmg_simplify) +GED_CMD(npush) GED_CMD(ocenter) GED_CMD(orient) GED_CMD(orientation) @@ -320,6 +337,7 @@ GED_CMD(solid_report) GED_CMD(solids) GED_CMD(solids_on_ray) GED_CMD(sphgroup) +GED_CMD(stat) GED_CMD(summary) GED_CMD(sv) GED_CMD(sync) diff --git a/src/libged/exists/exists.c b/src/libged/exists/exists.c index 663e5d050b9..58b4a4d2f08 100644 --- a/src/libged/exists/exists.c +++ b/src/libged/exists/exists.c @@ -1,7 +1,7 @@ /* E X I S T S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/expand/expand.c b/src/libged/expand/expand.c index ffef3b1cd93..85d8db7611f 100644 --- a/src/libged/expand/expand.c +++ b/src/libged/expand/expand.c @@ -1,7 +1,7 @@ /* E X P A N D . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/eye_pos/eye_pos.c b/src/libged/eye_pos/eye_pos.c index 53e0c07edd7..570db434608 100644 --- a/src/libged/eye_pos/eye_pos.c +++ b/src/libged/eye_pos/eye_pos.c @@ -1,7 +1,7 @@ /* E Y E _ P O S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/facedef.c b/src/libged/facedef.c index d719691b060..b080337ee6f 100644 --- a/src/libged/facedef.c +++ b/src/libged/facedef.c @@ -1,7 +1,7 @@ /* F A C E D E F . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/facetize/facetize.cpp b/src/libged/facetize/facetize.cpp index 6fea7dc1e1b..d848c0cb64e 100644 --- a/src/libged/facetize/facetize.cpp +++ b/src/libged/facetize/facetize.cpp @@ -1,7 +1,7 @@ /* F A C E T I Z E . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/facetize/facetize_log.c b/src/libged/facetize/facetize_log.c index 8c0bbbe7aa9..7737d89091c 100644 --- a/src/libged/facetize/facetize_log.c +++ b/src/libged/facetize/facetize_log.c @@ -1,7 +1,7 @@ /* F A C E T I Z E _ L O G . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/fb2pix/fb2pix.c b/src/libged/fb2pix/fb2pix.c index 8c87de7c7af..8bf24393526 100644 --- a/src/libged/fb2pix/fb2pix.c +++ b/src/libged/fb2pix/fb2pix.c @@ -1,7 +1,7 @@ /* F B 2 P I X . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/fbclear/fbclear.c b/src/libged/fbclear/fbclear.c index b81d7543ff7..ef90d96df0a 100644 --- a/src/libged/fbclear/fbclear.c +++ b/src/libged/fbclear/fbclear.c @@ -1,7 +1,7 @@ /* F B C L E A R . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/find/find.c b/src/libged/find/find.c index f1d1a30c35e..74e0d6b8419 100644 --- a/src/libged/find/find.c +++ b/src/libged/find/find.c @@ -1,7 +1,7 @@ /* F I N D . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/form/form.c b/src/libged/form/form.c index 8a3b72da937..7c74a48a0ba 100644 --- a/src/libged/form/form.c +++ b/src/libged/form/form.c @@ -1,7 +1,7 @@ /* F O R M . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/fracture/fracture.c b/src/libged/fracture/fracture.c index 19d8cc261c0..7626f6f297e 100644 --- a/src/libged/fracture/fracture.c +++ b/src/libged/fracture/fracture.c @@ -1,7 +1,7 @@ /* F R A C T U R E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/gdiff/gdiff.c b/src/libged/gdiff/gdiff.c index 5e90bc1f26c..2c6dd8db9ce 100644 --- a/src/libged/gdiff/gdiff.c +++ b/src/libged/gdiff/gdiff.c @@ -1,7 +1,7 @@ /* G D I F F . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -29,10 +29,164 @@ #include "bu/cmd.h" #include "bu/opt.h" +#include "rt/db_fullpath.h" +#include "rt/db_diff.h" #include "analyze.h" #include "../ged_private.h" +static void check_walk( + int *diff, + struct bu_vls *msgs, + struct db_i *dbip, + struct db_full_path *p1, + struct db_full_path *p2); +static void +check_walk_subtree(int *diff, struct bu_vls *msgs, struct db_i *dbip, struct db_full_path *p1, struct db_full_path *p2, union tree *tp1, union tree *tp2) +{ + int idn1, idn2; + struct directory *dp1, *dp2; + + if (!diff) + return; + + if ((!tp1 && tp2) || (tp1 && !tp2)) { + (*diff) = 1; + return; + } + + if (!tp1 || !tp2) + return; + + if (tp1->tr_op != tp2->tr_op) { + (*diff) = 1; + return; + } + + switch (tp1->tr_op) { + case OP_DB_LEAF: + idn1 = (!tp1->tr_l.tl_mat || bn_mat_is_identity(tp1->tr_l.tl_mat)); + idn2 = (!tp2->tr_l.tl_mat || bn_mat_is_identity(tp2->tr_l.tl_mat)); + if (idn1 != idn2) { + (*diff) = 1; + return; + } + if (tp1->tr_l.tl_mat && tp2->tr_l.tl_mat) { + if (!bn_mat_is_equal(tp1->tr_l.tl_mat, tp2->tr_l.tl_mat, &dbip->dbi_wdbp->wdb_tol)) { + (*diff) = 1; + return; + } + } + + dp1 = db_lookup(dbip, tp1->tr_l.tl_name, LOOKUP_NOISY); + dp2 = db_lookup(dbip, tp2->tr_l.tl_name, LOOKUP_NOISY); + if (dp1 != RT_DIR_NULL) + db_add_node_to_full_path(p1, dp1); + if (dp2 != RT_DIR_NULL) + db_add_node_to_full_path(p2, dp2); + + check_walk(diff, msgs, dbip, p1, p2); + + if (dp1 != RT_DIR_NULL) + DB_FULL_PATH_POP(p1); + if (dp2 != RT_DIR_NULL) + DB_FULL_PATH_POP(p2); + + break; + case OP_UNION: + case OP_INTERSECT: + case OP_SUBTRACT: + case OP_XOR: + check_walk_subtree(diff, msgs, dbip, p1, p2, tp1->tr_b.tb_left, tp2->tr_b.tb_left); + check_walk_subtree(diff, msgs, dbip, p1, p2, tp1->tr_b.tb_right, tp2->tr_b.tb_right); + break; + default: + bu_log("check_walk_subtree: unrecognized operator %d\n", tp1->tr_op); + bu_bomb("check_walk_subtree: unrecognized operator\n"); + } +} + +static void +check_walk(int *diff, + struct bu_vls *msgs, + struct db_i *dbip, + struct db_full_path *p1, + struct db_full_path *p2 + ) +{ + if ((!p1 && !p2) || !diff || (*diff)) { + return; /* nothing to do */ + } + + if ((!p1 && p2) || (p1 && !p2)) { + *diff = 1; + return; + } + + if (p1->fp_len != p2->fp_len) { + *diff = 1; + if (msgs) { + char *p1s = db_path_to_string(p1); + char *p2s = db_path_to_string(p2); + bu_vls_printf(msgs, "%s and %s have different lengths - tree difference found.\n", p1s, p2s); + bu_free(p1s, "p1s"); + bu_free(p2s, "p2s"); + } + return; + } + + struct directory *dp1 = DB_FULL_PATH_CUR_DIR(p1); + struct directory *dp2 = DB_FULL_PATH_CUR_DIR(p2); + + if (dp1->d_flags != dp2->d_flags) { + *diff = 1; + if (msgs) { + char *p1s = db_path_to_string(p1); + char *p2s = db_path_to_string(p2); + bu_vls_printf(msgs, "%s and %s have flag differences.\n", p1s, p2s); + bu_free(p1s, "p1s"); + bu_free(p2s, "p2s"); + } + return; + } + + if (dp1->d_flags & RT_DIR_COMB) { + + struct rt_db_internal in1, in2; + struct rt_comb_internal *comb1, *comb2; + + if (rt_db_get_internal5(&in1, dp1, dbip, NULL, &rt_uniresource) < 0) { + *diff = 1; + return; + } + + if (rt_db_get_internal5(&in2, dp2, dbip, NULL, &rt_uniresource) < 0) { + *diff = 1; + return; + } + + comb1 = (struct rt_comb_internal *)in1.idb_ptr; + comb2 = (struct rt_comb_internal *)in2.idb_ptr; + check_walk_subtree(diff, msgs, dbip, p1, p2, comb1->tree, comb2->tree); + rt_db_free_internal(&in1); + rt_db_free_internal(&in2); + + return; + } + + /* If we have two solids, use db_diff_dp */ + int dr = db_diff_dp(dbip, dbip, dp1, dp2, &dbip->dbi_wdbp->wdb_tol, DB_COMPARE_ALL, NULL); + if (dr != DIFF_UNCHANGED) { + char *p1s = db_path_to_string(p1); + char *p2s = db_path_to_string(p2); + bu_vls_printf(msgs, "%s and %s differ.\n", p1s, p2s); + bu_free(p1s, "p1s"); + bu_free(p2s, "p2s"); + *diff = 1; + } +} + + int ged_gdiff_core(struct ged *gedp, int argc, const char *argv[]) { @@ -40,7 +194,8 @@ ged_gdiff_core(struct ged *gedp, int argc, const char *argv[]) struct analyze_raydiff_results *results; struct bn_tol tol = {BN_TOL_MAGIC, BN_TOL_DIST, BN_TOL_DIST * BN_TOL_DIST, 1.0e-6, 1.0 - 1.0e-6 }; - int do_diff_raytrace = 1; + long verbosity = 0; + int structure_diff = 0; int view_left = 0; int view_right = 0; int view_overlap = 0; @@ -54,14 +209,16 @@ ged_gdiff_core(struct ged *gedp, int argc, const char *argv[]) int ac = argc - 1; const char **av = argv+1; - struct bu_opt_desc d[7]; + struct bu_opt_desc d[9]; BU_OPT(d[0], "h", "help", "", NULL, &print_help, "Print help."); BU_OPT(d[1], "g", "grid-spacing", "#", &bu_opt_fastf_t, &len_tol, "Controls spacing of test ray grids (units are mm.)"); BU_OPT(d[2], "l", "view-left", "", NULL, &view_left, "Visualize volumes occurring only in the left object"); BU_OPT(d[3], "b", "view-both", "", NULL, &view_overlap, "Visualize volumes common to both objects"); BU_OPT(d[4], "r", "view-right", "", NULL, &view_right, "Visualize volumes occurring only in the right object"); BU_OPT(d[5], "G", "grazing", "", NULL, &grazereport, "Report differences in grazing hits"); - BU_OPT_NULL(d[6]); + BU_OPT(d[6], "S", "structure", "", NULL, &structure_diff, "Do a diff of tree structures (matrices and objects, ignoring object names.) This mode is not raytrace based."); + BU_OPT(d[7], "v", "verbosity", "", &bu_opt_incr_long, &verbosity, "Increase output verbosity."); + BU_OPT_NULL(d[8]); GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR); @@ -73,7 +230,9 @@ ged_gdiff_core(struct ged *gedp, int argc, const char *argv[]) if (print_help) { char *usage = bu_opt_describe((struct bu_opt_desc *)&d, NULL); - bu_vls_printf(gedp->ged_result_str, "Usage: gdiff [opts] left_obj right_obj\nOptions:\n%s\nRed segments are those generated\nonly from intersections with \"left_obj\" while blue segments represent\nintersections unique to \"right_obj\". White segments represent intersections\ncommon to both objects. By default, segments unique to left and right objects are displayed. ", usage); + bu_vls_printf(gedp->ged_result_str, "Usage: gdiff [opts] left_obj right_obj\n"); + bu_vls_printf(gedp->ged_result_str, "Options:\n%s\n", usage); + bu_vls_printf(gedp->ged_result_str, "When visualizing raytrace based diff results, red segments are those generated\nonly from intersections with \"left_obj\" while blue segments represent\nintersections unique to \"right_obj\". White segments represent intersections\ncommon to both objects. By default, in raytracing mode, segments unique to left and right objects are displayed. "); bu_vls_printf(gedp->ged_result_str, "If no tolerance is given, a default of 100mm is used.\n\n Be careful of using too fine a grid - finer grides will (up to a point) yield better visuals, but too fine a grid can cause very long raytracing times."); bu_free(usage, "help str"); return GED_OK; @@ -89,6 +248,42 @@ ged_gdiff_core(struct ged *gedp, int argc, const char *argv[]) right_obj = av[1]; } + if (structure_diff) { + int diff = 0; + struct bu_vls smsgs = BU_VLS_INIT_ZERO; + struct db_full_path *lp, *rp; + BU_GET(lp, struct db_full_path); + db_full_path_init(lp); + BU_GET(rp, struct db_full_path); + db_full_path_init(rp); + + struct directory *dp1, *dp2; + if ((dp1 = db_lookup(gedp->ged_wdbp->dbip, left_obj, LOOKUP_NOISY)) == RT_DIR_NULL) { + return GED_ERROR; + } + if ((dp2 = db_lookup(gedp->ged_wdbp->dbip, right_obj, LOOKUP_NOISY)) == RT_DIR_NULL) { + return GED_ERROR; + } + + db_add_node_to_full_path(lp, dp1); + db_add_node_to_full_path(rp, dp2); + + check_walk(&diff, &smsgs, gedp->ged_wdbp->dbip, lp, rp); + + db_free_full_path(lp); + BU_PUT(lp, struct db_full_path); + db_free_full_path(rp); + BU_PUT(rp, struct db_full_path); + + if (bu_vls_strlen(&smsgs)) + bu_vls_printf(gedp->ged_result_str, "%s\n", bu_vls_cstr(&smsgs)); + + bu_vls_free(&smsgs); + + bu_vls_printf(gedp->ged_result_str, "%d", diff); + + return GED_OK; + } /* There are possible convention-based interpretations of 1, 2, 3, 4 and n args * beyond those used as options. For the shortest cases, the interpretation depends @@ -124,107 +319,105 @@ ged_gdiff_core(struct ged *gedp, int argc, const char *argv[]) * specified, the argv environments will override use of the "current" .g environment. */ - if (do_diff_raytrace) { - if (db_lookup(gedp->ged_wdbp->dbip, left_obj, LOOKUP_NOISY) == RT_DIR_NULL) { - return GED_ERROR; - } - if (db_lookup(gedp->ged_wdbp->dbip, right_obj, LOOKUP_NOISY) == RT_DIR_NULL) { - return GED_ERROR; - } + if (db_lookup(gedp->ged_wdbp->dbip, left_obj, LOOKUP_NOISY) == RT_DIR_NULL) { + return GED_ERROR; + } + if (db_lookup(gedp->ged_wdbp->dbip, right_obj, LOOKUP_NOISY) == RT_DIR_NULL) { + return GED_ERROR; + } - /* If we don't have a tolerance, try to guess something sane from the bbox */ - if (NEAR_ZERO(len_tol, RT_LEN_TOL)) { - point_t rpp_min, rpp_max; - point_t obj_min, obj_max; - VSETALL(rpp_min, INFINITY); - VSETALL(rpp_max, -INFINITY); - ged_get_obj_bounds(gedp, 1, (const char **)&left_obj, 0, obj_min, obj_max); - VMINMAX(rpp_min, rpp_max, (double *)obj_min); - VMINMAX(rpp_min, rpp_max, (double *)obj_max); - ged_get_obj_bounds(gedp, 1, (const char **)&right_obj, 0, obj_min, obj_max); - VMINMAX(rpp_min, rpp_max, (double *)obj_min); - VMINMAX(rpp_min, rpp_max, (double *)obj_max); - len_tol = DIST_PNT_PNT(rpp_max, rpp_min) * 0.01; - } - tol.dist = len_tol; + /* If we don't have a tolerance, try to guess something sane from the bbox */ + if (NEAR_ZERO(len_tol, RT_LEN_TOL)) { + point_t rpp_min, rpp_max; + point_t obj_min, obj_max; + VSETALL(rpp_min, INFINITY); + VSETALL(rpp_max, -INFINITY); + ged_get_obj_bounds(gedp, 1, (const char **)&left_obj, 0, obj_min, obj_max); + VMINMAX(rpp_min, rpp_max, (double *)obj_min); + VMINMAX(rpp_min, rpp_max, (double *)obj_max); + ged_get_obj_bounds(gedp, 1, (const char **)&right_obj, 0, obj_min, obj_max); + VMINMAX(rpp_min, rpp_max, (double *)obj_min); + VMINMAX(rpp_min, rpp_max, (double *)obj_max); + len_tol = DIST_PNT_PNT(rpp_max, rpp_min) * 0.01; + } + tol.dist = len_tol; - analyze_raydiff(&results, gedp->ged_wdbp->dbip, left_obj, right_obj, &tol, !grazereport); + analyze_raydiff(&results, gedp->ged_wdbp->dbip, left_obj, right_obj, &tol, !grazereport); - /* TODO - may want to integrate with a "regular" diff and report intelligently. Needs - * some thought. */ - if (BU_PTBL_LEN(results->left) > 0 || BU_PTBL_LEN(results->right) > 0) { - bu_vls_printf(gedp->ged_result_str, "1"); - } else { - bu_vls_printf(gedp->ged_result_str, "0"); - } + /* TODO - may want to integrate with a "regular" diff and report intelligently. Needs + * some thought. */ + if (BU_PTBL_LEN(results->left) > 0 || BU_PTBL_LEN(results->right) > 0) { + bu_vls_printf(gedp->ged_result_str, "1"); + } else { + bu_vls_printf(gedp->ged_result_str, "0"); + } - /* For now, graphical output is the main output of this mode, so if we don't have any - * specifics do left and right */ - if (!view_left && !view_overlap && !view_right) { - view_left = 1; - view_right = 1; - view_overlap = 0; - } + /* For now, graphical output is the main output of this mode, so if we don't have any + * specifics do left and right */ + if (!view_left && !view_overlap && !view_right) { + view_left = 1; + view_right = 1; + view_overlap = 0; + } - if (view_left || view_overlap || view_right) { - /* Visualize the differences */ - struct bu_list *vhead; - point_t a, b; - struct bn_vlblock *vbp; - struct bu_list local_vlist; - BU_LIST_INIT(&local_vlist); - vbp = bn_vlblock_init(&local_vlist, 32); - - /* Clear any previous diff drawing */ - if (db_lookup(gedp->ged_wdbp->dbip, "diff_visualff", LOOKUP_QUIET) != RT_DIR_NULL) - dl_erasePathFromDisplay(gedp, "diff_visualff", 1); - if (db_lookup(gedp->ged_wdbp->dbip, "diff_visualff0000", LOOKUP_QUIET) != RT_DIR_NULL) - dl_erasePathFromDisplay(gedp, "diff_visualff0000", 1); - if (db_lookup(gedp->ged_wdbp->dbip, "diff_visualffffff", LOOKUP_QUIET) != RT_DIR_NULL) - dl_erasePathFromDisplay(gedp, "diff_visualffffff", 1); - - /* Draw left-only lines */ - if (view_left) { - for (i = 0; i < BU_PTBL_LEN(results->left); i++) { - struct diff_seg *dseg = (struct diff_seg *)BU_PTBL_GET(results->left, i); - VMOVE(a, dseg->in_pt); - VMOVE(b, dseg->out_pt); - vhead = bn_vlblock_find(vbp, 255, 0, 0); /* should be red */ - BN_ADD_VLIST(vbp->free_vlist_hd, vhead, a, BN_VLIST_LINE_MOVE); - BN_ADD_VLIST(vbp->free_vlist_hd, vhead, b, BN_VLIST_LINE_DRAW); - } + if (view_left || view_overlap || view_right) { + /* Visualize the differences */ + struct bu_list *vhead; + point_t a, b; + struct bn_vlblock *vbp; + struct bu_list local_vlist; + BU_LIST_INIT(&local_vlist); + vbp = bn_vlblock_init(&local_vlist, 32); + + /* Clear any previous diff drawing */ + if (db_lookup(gedp->ged_wdbp->dbip, "diff_visualff", LOOKUP_QUIET) != RT_DIR_NULL) + dl_erasePathFromDisplay(gedp, "diff_visualff", 1); + if (db_lookup(gedp->ged_wdbp->dbip, "diff_visualff0000", LOOKUP_QUIET) != RT_DIR_NULL) + dl_erasePathFromDisplay(gedp, "diff_visualff0000", 1); + if (db_lookup(gedp->ged_wdbp->dbip, "diff_visualffffff", LOOKUP_QUIET) != RT_DIR_NULL) + dl_erasePathFromDisplay(gedp, "diff_visualffffff", 1); + + /* Draw left-only lines */ + if (view_left) { + for (i = 0; i < BU_PTBL_LEN(results->left); i++) { + struct diff_seg *dseg = (struct diff_seg *)BU_PTBL_GET(results->left, i); + VMOVE(a, dseg->in_pt); + VMOVE(b, dseg->out_pt); + vhead = bn_vlblock_find(vbp, 255, 0, 0); /* should be red */ + BN_ADD_VLIST(vbp->free_vlist_hd, vhead, a, BN_VLIST_LINE_MOVE); + BN_ADD_VLIST(vbp->free_vlist_hd, vhead, b, BN_VLIST_LINE_DRAW); } - /* Draw overlap lines */ - if (view_overlap) { - for (i = 0; i < BU_PTBL_LEN(results->both); i++) { - struct diff_seg *dseg = (struct diff_seg *)BU_PTBL_GET(results->both, i); - VMOVE(a, dseg->in_pt); - VMOVE(b, dseg->out_pt); - vhead = bn_vlblock_find(vbp, 255, 255, 255); /* should be white */ - BN_ADD_VLIST(vbp->free_vlist_hd, vhead, a, BN_VLIST_LINE_MOVE); - BN_ADD_VLIST(vbp->free_vlist_hd, vhead, b, BN_VLIST_LINE_DRAW); + } + /* Draw overlap lines */ + if (view_overlap) { + for (i = 0; i < BU_PTBL_LEN(results->both); i++) { + struct diff_seg *dseg = (struct diff_seg *)BU_PTBL_GET(results->both, i); + VMOVE(a, dseg->in_pt); + VMOVE(b, dseg->out_pt); + vhead = bn_vlblock_find(vbp, 255, 255, 255); /* should be white */ + BN_ADD_VLIST(vbp->free_vlist_hd, vhead, a, BN_VLIST_LINE_MOVE); + BN_ADD_VLIST(vbp->free_vlist_hd, vhead, b, BN_VLIST_LINE_DRAW); - } } - /* Draw right lines */ - if (view_right) { - for (i = 0; i < BU_PTBL_LEN(results->right); i++) { - struct diff_seg *dseg = (struct diff_seg *)BU_PTBL_GET(results->right, i); - VMOVE(a, dseg->in_pt); - VMOVE(b, dseg->out_pt); - vhead = bn_vlblock_find(vbp, 0, 0, 255); /* should be blue */ - BN_ADD_VLIST(vbp->free_vlist_hd, vhead, a, BN_VLIST_LINE_MOVE); - BN_ADD_VLIST(vbp->free_vlist_hd, vhead, b, BN_VLIST_LINE_DRAW); - } + } + /* Draw right lines */ + if (view_right) { + for (i = 0; i < BU_PTBL_LEN(results->right); i++) { + struct diff_seg *dseg = (struct diff_seg *)BU_PTBL_GET(results->right, i); + VMOVE(a, dseg->in_pt); + VMOVE(b, dseg->out_pt); + vhead = bn_vlblock_find(vbp, 0, 0, 255); /* should be blue */ + BN_ADD_VLIST(vbp->free_vlist_hd, vhead, a, BN_VLIST_LINE_MOVE); + BN_ADD_VLIST(vbp->free_vlist_hd, vhead, b, BN_VLIST_LINE_DRAW); } + } - _ged_cvt_vlblock_to_solids(gedp, vbp, "diff_visual", 0); + _ged_cvt_vlblock_to_solids(gedp, vbp, "diff_visual", 0); - bn_vlist_cleanup(&local_vlist); - bn_vlblock_free(vbp); - } - analyze_raydiff_results_free(results); + bn_vlist_cleanup(&local_vlist); + bn_vlblock_free(vbp); } + analyze_raydiff_results_free(results); return GED_OK; } diff --git a/src/libged/ged.c b/src/libged/ged.c index 0924d0f288d..f15a4c2bd0c 100644 --- a/src/libged/ged.c +++ b/src/libged/ged.c @@ -1,7 +1,7 @@ /* G E D . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -531,189 +531,6 @@ _ged_open_dbip(const char *filename, int existing_only) return dbip; } - -HIDDEN int -_ged_cmp_attr(const void *p1, const void *p2, void *UNUSED(arg)) -{ - return bu_strcmp(((struct bu_attribute_value_pair *)p1)->name, - ((struct bu_attribute_value_pair *)p2)->name); -} - - -void -_ged_print_node(struct ged *gedp, - struct directory *dp, - size_t pathpos, - int indentSize, - char prefix, - unsigned flags, - int displayDepth, - int currdisplayDepth) -{ - size_t i; - struct directory *nextdp; - struct rt_db_internal intern; - struct rt_comb_internal *comb; - unsigned aflag = (flags & _GED_TREE_AFLAG); - unsigned cflag = (flags & _GED_TREE_CFLAG); - struct bu_vls tmp_str = BU_VLS_INIT_ZERO; - - /* cflag = don't show shapes, so return if this is not a combination */ - if (cflag && !(dp->d_flags & RT_DIR_COMB)) { - return; - } - - /* set up spacing from the left margin */ - for (i = 0; i < pathpos; i++) { - if (indentSize < 0) { - bu_vls_printf(gedp->ged_result_str, "\t"); - if (aflag) - bu_vls_printf(&tmp_str, "\t"); - - } else { - int j; - for (j = 0; j < indentSize; j++) { - bu_vls_printf(gedp->ged_result_str, " "); - if (aflag) - bu_vls_printf(&tmp_str, " "); - } - } - } - - /* add the prefix if desired */ - if (prefix) { - bu_vls_printf(gedp->ged_result_str, "%c ", prefix); - if (aflag) - bu_vls_printf(&tmp_str, " "); - } - - /* now the object name */ - bu_vls_printf(gedp->ged_result_str, "%s", dp->d_namep); - - /* suffix name if appropriate */ - /* Output Comb and Region flags (-F?) */ - if (dp->d_flags & RT_DIR_COMB) - bu_vls_printf(gedp->ged_result_str, "/"); - if (dp->d_flags & RT_DIR_REGION) - bu_vls_printf(gedp->ged_result_str, "R"); - - bu_vls_printf(gedp->ged_result_str, "\n"); - - /* output attributes if any and if desired */ - if (aflag) { - struct bu_attribute_value_set avs; - bu_avs_init_empty(&avs); - if (db5_get_attributes(gedp->ged_wdbp->dbip, &avs, dp)) { - bu_vls_printf(gedp->ged_result_str, "Cannot get attributes for object %s\n", dp->d_namep); - /* need a bombing macro or set an error code here: return GED_ERROR; */ - bu_vls_free(&tmp_str); - return; - } - - /* FIXME: manually list all the attributes, if any. should be - * calling ged_attr() show so output formatting is consistent. - */ - if (avs.count) { - struct bu_attribute_value_pair *avpp; - int max_attr_name_len = 0; - - /* sort attribute-value set array by attribute name */ - bu_sort(&avs.avp[0], avs.count, sizeof(struct bu_attribute_value_pair), _ged_cmp_attr, NULL); - - for (i = 0, avpp = avs.avp; i < avs.count; i++, avpp++) { - int len = (int)strlen(avpp->name); - if (len > max_attr_name_len) { - max_attr_name_len = len; - } - } - for (i = 0, avpp = avs.avp; i < avs.count; i++, avpp++) { - bu_vls_printf(gedp->ged_result_str, "%s @ %-*.*s %s\n", - tmp_str.vls_str, - max_attr_name_len, max_attr_name_len, - avpp->name, avpp->value); - } - } - bu_vls_free(&tmp_str); - } - - if (!(dp->d_flags & RT_DIR_COMB)) - return; - - /* - * This node is a combination (e.g., a directory). - * Process all the arcs (e.g., directory members). - */ - - if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { - bu_vls_printf(gedp->ged_result_str, "Database read error, aborting"); - return; - } - comb = (struct rt_comb_internal *)intern.idb_ptr; - - if (comb->tree) { - size_t node_count; - size_t actual_count; - struct rt_tree_array *rt_tree_array; - - if (comb->tree && db_ck_v4gift_tree(comb->tree) < 0) { - db_non_union_push(comb->tree, &rt_uniresource); - if (db_ck_v4gift_tree(comb->tree) < 0) { - bu_vls_printf(gedp->ged_result_str, "Cannot flatten tree for listing"); - return; - } - } - node_count = db_tree_nleaves(comb->tree); - if (node_count > 0) { - rt_tree_array = (struct rt_tree_array *)bu_calloc(node_count, - sizeof(struct rt_tree_array), "tree list"); - actual_count = (struct rt_tree_array *)db_flatten_tree( - rt_tree_array, comb->tree, OP_UNION, - 1, &rt_uniresource) - rt_tree_array; - BU_ASSERT(actual_count == node_count); - comb->tree = TREE_NULL; - } else { - actual_count = 0; - rt_tree_array = NULL; - } - - for (i = 0; i < actual_count; i++) { - char op; - - switch (rt_tree_array[i].tl_op) { - case OP_UNION: - op = DB_OP_UNION; - break; - case OP_INTERSECT: - op = DB_OP_INTERSECT; - break; - case OP_SUBTRACT: - op = DB_OP_SUBTRACT; - break; - default: - op = '?'; - break; - } - - if ((nextdp = db_lookup(gedp->ged_wdbp->dbip, rt_tree_array[i].tl_tree->tr_l.tl_name, LOOKUP_QUIET)) == RT_DIR_NULL) { - size_t j; - - for (j = 0; j < pathpos+1; j++) - bu_vls_printf(gedp->ged_result_str, "\t"); - - bu_vls_printf(gedp->ged_result_str, "%c ", op); - bu_vls_printf(gedp->ged_result_str, "%s\n", rt_tree_array[i].tl_tree->tr_l.tl_name); - } else { - if (currdisplayDepth < displayDepth) { - _ged_print_node(gedp, nextdp, pathpos+1, indentSize, op, flags, displayDepth, currdisplayDepth+1); - } - } - db_free_tree(rt_tree_array[i].tl_tree, &rt_uniresource); - } - if (rt_tree_array) bu_free((char *)rt_tree_array, "printnode: rt_tree_array"); - } - rt_db_free_internal(&intern); -} - /* Callback wrapper functions */ void diff --git a/src/libged/ged_init.cpp b/src/libged/ged_init.cpp index 9bb3c596c2b..be465ac33e2 100644 --- a/src/libged/ged_init.cpp +++ b/src/libged/ged_init.cpp @@ -1,7 +1,7 @@ /* G E D _ I N I T . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -43,24 +43,25 @@ #include "./include/plugin.h" -static std::map ged_cmd_map; -static size_t cmd_list_len = 0; static char **cmd_list = NULL; +static size_t cmd_list_len = 0; +static std::map cmd_map; +static std::set cmd_funcs; +static struct bu_vls init_msgs = BU_VLS_INIT_ZERO; void *ged_cmds; extern "C" void libged_init(void); -static std::set ged_handles; -struct bu_vls *ged_init_msg_str; const char * ged_init_msgs() { - return bu_vls_cstr(ged_init_msg_str); + return bu_vls_cstr(&init_msgs); } -/* If func is NULL, just see if the string has a ged_cmd_map entry. - * If func is defined, see if a) func and cmd have ged_cmd_map entries and + +/* If func is NULL, just see if the string has a cmd_map entry. + * If func is defined, see if a) func and cmd have cmd_map entries and * b) if they both do, whether they map to the same function. */ int ged_cmd_valid(const char *cmd, const char *func) @@ -76,32 +77,75 @@ ged_cmd_valid(const char *cmd, const char *func) // probably what happened, so call libged_init again here. By the time we // are calling ged_cmd_valid bu_setprogname should be set and we should be // ready to actually find the commands. - if (!ged_cmd_map.size()) { + if (!cmd_map.size()) { libged_init(); } std::string scmd(cmd); - std::map::iterator cmd_it = ged_cmd_map.find(scmd); - if (cmd_it != ged_cmd_map.end()) { + std::map::iterator cmd_it = cmd_map.find(scmd); + if (cmd_it != cmd_map.end()) { cmd_invalid = 0; } if (cmd_invalid) { return cmd_invalid; } - ged_func_ptr c1 = cmd_it->second->i->cmd; - std::map::iterator func_it = ged_cmd_map.find(std::string(func)); - if (func_it == ged_cmd_map.end()) { - // func not in table, nothing to validate against - return invalid - return 1; + + if (func) { + ged_func_ptr c1 = cmd_it->second->i->cmd; + std::map::iterator func_it = cmd_map.find(std::string(func)); + if (func_it == cmd_map.end()) { + // func not in table, nothing to validate against - return invalid + return 1; + } + ged_func_ptr c2 = func_it->second->i->cmd; + int mismatched_functions = 2; + if (c1 == c2) { + mismatched_functions = 0; + } + return mismatched_functions; + } + + return 0; +} + + +/* Use bu_editdist to see if there is a command name similar to cmd + * defined. Return the closest match and the edit distance. (0 indicates + * an exact match, -1 an error) */ +int +ged_cmd_lookup(const char **ncmd, const char *cmd) +{ + if (!cmd || !ncmd) { + return -1; + } + unsigned long min_dist = LONG_MAX; + + // On OpenBSD, if the executable was launched in a way that requires + // bu_setprogname to find the BRL-CAD root directory the iniital libged + // initialization would have failed. If we have no ged_cmds at all this is + // probably what happened, so call libged_init again here. By the time we + // are calling ged_cmd_valid bu_setprogname should be set and we should be + // ready to actually find the commands. + if (!cmd_map.size()) { + libged_init(); } - ged_func_ptr c2 = func_it->second->i->cmd; - int mismatched_functions = 2; - if (c1 == c2) { - mismatched_functions = 0; + + const char *ccmd = NULL; + std::string scmd(cmd); + std::map::iterator cmd_it; + for (cmd_it = cmd_map.begin(); cmd_it != cmd_map.end(); cmd_it++) { + unsigned long edist = bu_editdist(cmd, cmd_it->first.c_str(), 0); + if (edist < min_dist) { + ccmd = (*cmd_it).first.c_str(); + min_dist = edist; + } } - return mismatched_functions; + + (*ncmd) = ccmd; + return (int)min_dist; } + size_t ged_cmd_list(const char * const **cl) { @@ -109,9 +153,9 @@ ged_cmd_list(const char * const **cl) bu_argv_free(cmd_list_len, (char **)cmd_list); cmd_list_len = 0; } - cmd_list = (char **)bu_calloc(ged_cmd_map.size(), sizeof(char *), "ged cmd argv"); + cmd_list = (char **)bu_calloc(cmd_map.size(), sizeof(char *), "ged cmd argv"); std::map::iterator m_it; - for (m_it = ged_cmd_map.begin(); m_it != ged_cmd_map.end(); m_it++) { + for (m_it = cmd_map.begin(); m_it != cmd_map.end(); m_it++) { const char *str = m_it->first.c_str(); cmd_list[cmd_list_len] = bu_strdup(str); cmd_list_len++; @@ -120,13 +164,10 @@ ged_cmd_list(const char * const **cl) return cmd_list_len; } + extern "C" void libged_init(void) { - - BU_GET(ged_init_msg_str, struct bu_vls); - bu_vls_init(ged_init_msg_str); - const char *ppath = bu_dir(NULL, 0, BU_DIR_LIBEXEC, "ged", NULL); char **filenames; struct bu_vls plugin_pattern = BU_VLS_INIT_ZERO; @@ -140,9 +181,9 @@ libged_init(void) if (!dl_handle) { const char * const error_msg = bu_dlerror(); if (error_msg) - bu_vls_printf(ged_init_msg_str, "%s\n", error_msg); + bu_vls_printf(&init_msgs, "%s\n", error_msg); - bu_vls_printf(ged_init_msg_str, "Unable to dynamically load '%s' (skipping)\n", pfile); + bu_vls_printf(&init_msgs, "Unable to dynamically load '%s' (skipping)\n", pfile); continue; } { @@ -153,10 +194,10 @@ libged_init(void) const char * const error_msg = bu_dlerror(); if (error_msg) - bu_vls_printf(ged_init_msg_str, "%s\n", error_msg); + bu_vls_printf(&init_msgs, "%s\n", error_msg); - bu_vls_printf(ged_init_msg_str, "Unable to load symbols from '%s' (skipping)\n", pfile); - bu_vls_printf(ged_init_msg_str, "Could not find '%s' symbol in plugin\n", psymbol); + bu_vls_printf(&init_msgs, "Unable to load symbols from '%s' (skipping)\n", pfile); + bu_vls_printf(&init_msgs, "Could not find '%s' symbol in plugin\n", psymbol); bu_dlclose(dl_handle); continue; } @@ -164,25 +205,25 @@ libged_init(void) const struct ged_plugin *plugin = plugin_info(); if (!plugin) { - bu_vls_printf(ged_init_msg_str, "Invalid plugin file '%s' encountered (skipping)\n", pfile); + bu_vls_printf(&init_msgs, "Invalid plugin file '%s' encountered (skipping)\n", pfile); bu_dlclose(dl_handle); continue; } if (*((const uint32_t *)(plugin)) != (uint32_t) (GED_API)) { - bu_vls_printf(ged_init_msg_str, "Plugin version %d of '%s' differs from %d (skipping)\n", *((const uint32_t *)(plugin)), pfile, GED_API); + bu_vls_printf(&init_msgs, "Plugin version %d of '%s' differs from %d (skipping)\n", *((const uint32_t *)(plugin)), pfile, GED_API); bu_dlclose(dl_handle); continue; } if (!plugin->cmds) { - bu_vls_printf(ged_init_msg_str, "Invalid plugin file '%s' encountered (skipping)\n", pfile); + bu_vls_printf(&init_msgs, "Invalid plugin file '%s' encountered (skipping)\n", pfile); bu_dlclose(dl_handle); continue; } if (!plugin->cmd_cnt) { - bu_vls_printf(ged_init_msg_str, "Plugin '%s' contains no commands, (skipping)\n", pfile); + bu_vls_printf(&init_msgs, "Plugin '%s' contains no commands, (skipping)\n", pfile); bu_dlclose(dl_handle); continue; } @@ -191,37 +232,36 @@ libged_init(void) for (int c = 0; c < plugin->cmd_cnt; c++) { const struct ged_cmd *cmd = cmds[c]; std::string key(cmd->i->cname); - if (ged_cmd_map.find(key) != ged_cmd_map.end()) { - bu_vls_printf(ged_init_msg_str, "Warning - plugin '%s' provides command '%s' but that command has already been loaded, skipping\n", pfile, cmd->i->cname); + if (cmd_map.find(key) != cmd_map.end()) { + bu_vls_printf(&init_msgs, "Warning - plugin '%s' provides command '%s' but that command has already been loaded, skipping\n", pfile, cmd->i->cname); continue; } - ged_cmd_map[key] = cmd; + cmd_map[key] = cmd; // MGED calls many of these commands with an _mged_ prefix - allow for that std::string mged_key = std::string("_mged_") + key; - ged_cmd_map[mged_key] = cmd; + cmd_map[mged_key] = cmd; } - ged_handles.insert(dl_handle); + cmd_funcs.insert(dl_handle); } } + bu_argv_free(nfiles, filenames); + bu_vls_free(&plugin_pattern); - ged_cmds = (void *)&ged_cmd_map; + ged_cmds = (void *)&cmd_map; } static void libged_clear(void) { - ged_cmd_map.clear(); + cmd_map.clear(); std::set::iterator h_it; - for (h_it = ged_handles.begin(); h_it != ged_handles.end(); h_it++) { + for (h_it = cmd_funcs.begin(); h_it != cmd_funcs.end(); h_it++) { void *handle = *h_it; bu_dlclose(handle); } - ged_handles.clear(); - - bu_vls_free(ged_init_msg_str); - BU_PUT(ged_init_msg_str, struct bu_vls); + cmd_funcs.clear(); } @@ -233,11 +273,12 @@ struct libged_initializer { /* destructor */ ~libged_initializer() { libged_clear(); + bu_vls_free(&init_msgs); } }; -static libged_initializer LIBGED; +static libged_initializer LIBGED; // Local Variables: diff --git a/src/libged/ged_private.h b/src/libged/ged_private.h index f9742bd3cf6..38d8c778cf3 100644 --- a/src/libged/ged_private.h +++ b/src/libged/ged_private.h @@ -1,7 +1,7 @@ /* G E D _ P R I V A T E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -181,14 +181,6 @@ GED_EXPORT void vls_col_eol(struct bu_vls *str); GED_EXPORT extern int edarb_facedef(void *data, int argc, const char *argv[]); /* defined in ged.c */ -GED_EXPORT extern void _ged_print_node(struct ged *gedp, - struct directory *dp, - size_t pathpos, - int indentSize, - char prefix, - unsigned flags, - int displayDepth, - int currdisplayDepth); GED_EXPORT extern struct db_i *_ged_open_dbip(const char *filename, int existing_only); @@ -554,6 +546,24 @@ GED_EXPORT extern void _ged_vls_col_pr4v(struct bu_vls *vls, GED_EXPORT extern struct directory ** _ged_getspace(struct db_i *dbip, size_t num_entries); + +#if 0 +/** + * Characterize a path specification (search command style). + * + * Return flags characterizing the path specifier, as defined below: + */ +#define GED_PATHSPEC_INVALID 1ULL << 1 +#define GED_PATHSPEC_SPECIFIC 1ULL << 2 +#define GED_PATHSPEC_LOCAL 1ULL << 3 +#define GED_PATHSPEC_FLAT 1ULL << 4 + +GED_EXPORT extern unsigned long long +_ged_characterize_path_spec(struct bu_vls *normalized, + struct ged *gedp, const char *pathspec + ); +#endif + /** * Routine for generic command help printing. */ diff --git a/src/libged/ged_util.c b/src/libged/ged_util.c index a9660ddead8..01a42e9f2b7 100644 --- a/src/libged/ged_util.c +++ b/src/libged/ged_util.c @@ -1,7 +1,7 @@ /* G E D _ U T I L . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -1339,7 +1339,8 @@ _ged_rt_output_handler(void *clientData, int UNUSED(mask)) struct ged_subprocess *rrtp = (struct ged_subprocess *)clientData; int count = 0; int retcode = 0; - int read_failed = 0; + int read_failed_stderr = 0; + int read_failed_stdout = 0; char line[RT_MAXLINE+1] = {0}; if ((rrtp == (struct ged_subprocess *)NULL) || (rrtp->gedp == (struct ged *)NULL)) @@ -1350,19 +1351,22 @@ _ged_rt_output_handler(void *clientData, int UNUSED(mask)) struct ged *gedp = rrtp->gedp; /* Get data from rt */ - if (bu_process_read((char *)line, &count, rrtp->p, BU_PROCESS_STDERR, RT_MAXLINE) <= 0) { - if (bu_process_read((char *)line, &count, rrtp->p, BU_PROCESS_STDOUT, RT_MAXLINE) <= 0) { - read_failed = 1; - } + if (rrtp->stderr_active && bu_process_read((char *)line, &count, rrtp->p, BU_PROCESS_STDERR, RT_MAXLINE) <= 0) { + read_failed_stderr = 1; + } + if (rrtp->stdout_active && bu_process_read((char *)line, &count, rrtp->p, BU_PROCESS_STDOUT, RT_MAXLINE) <= 0) { + read_failed_stdout = 1; } - if (read_failed) { + if (read_failed_stderr || read_failed_stdout) { int aborted; /* Done watching for output, undo subprocess I/O hooks. */ if (gedp->ged_delete_io_handler) { - (*gedp->ged_delete_io_handler)(rrtp, BU_PROCESS_STDERR); - (*gedp->ged_delete_io_handler)(rrtp, BU_PROCESS_STDOUT); + if (rrtp->stderr_active) + (*gedp->ged_delete_io_handler)(rrtp, BU_PROCESS_STDERR); + if (rrtp->stdout_active) + (*gedp->ged_delete_io_handler)(rrtp, BU_PROCESS_STDOUT); } @@ -1485,6 +1489,9 @@ _ged_run_rt(struct ged *gedp, int cmd_len, const char **gd_rt_cmd, int argc, con BU_GET(run_rtp, struct ged_subprocess); run_rtp->magic = GED_CMD_MAGIC; + run_rtp->stdin_active = 0; + run_rtp->stdout_active = 0; + run_rtp->stderr_active = 0; bu_ptbl_ins(&gedp->ged_subp, (long *)run_rtp); run_rtp->p = p; @@ -1494,7 +1501,6 @@ _ged_run_rt(struct ged *gedp, int cmd_len, const char **gd_rt_cmd, int argc, con /* If we know how, set up hooks so the parent process knows to watch for output. */ if (gedp->ged_create_io_handler) { (*gedp->ged_create_io_handler)(run_rtp, BU_PROCESS_STDERR, _ged_rt_output_handler, (void *)run_rtp); - (*gedp->ged_create_io_handler)(run_rtp, BU_PROCESS_STDOUT, _ged_rt_output_handler, (void *)run_rtp); } return GED_OK; } @@ -2036,6 +2042,98 @@ _ged_scale_metaball(struct ged *gedp, struct rt_metaball_internal *mbip, const c return GED_OK; } +#if 0 + +// TODO - need to generalize the path specifier parsing per notes in TODO. This is a first +// cut at recasting what search is using now, which doesn't implement the full resolving logic. + +int +_ged_characterize_pathspec(struct bu_vls *normalized, struct ged *gedp, const char *pathspec) +{ + struct bu_vls np = BU_VLS_INIT_ZERO; + int flags = 0; + + // Start with nothing - if we get a valid answer we'll print it + if (normalized) { + bu_vls_trunc(normalized, 0); + } + + if (!pathspec) + return GED_PATHSPEC_INVALID; + + if (BU_STR_EQUAL(pathspec, "/")) + return flags; + + if (BU_STR_EQUAL(pathspec, ".")) { + flags |= GED_PATHSPEC_LOCAL; + return flags; + } + + if (BU_STR_EQUAL(pathspec, "|")) { + flags |= GED_PATHSPEC_FLAT; + return flags; + } + + bu_vls_sprintf(&np, "%s", pathspec); + if (bu_vls_cstr(&np)[0] == '|') { + flags |= GED_PATHSPEC_FLAT; + bu_vls_nibble(&np, 1); + } + if (BU_STR_EQUAL(bu_vls_cstr(&np), "/")) { + bu_vls_free(&np); + return flags; + } + + if (BU_STR_EQUAL(bu_vls_cstr(&np), ".")) { + flags |= GED_PATHSPEC_LOCAL; + bu_vls_free(&np); + return flags; + } + + if (bu_vls_cstr(&np)[0] != '/') + flags |= GED_PATHSPEC_LOCAL; + + const char *bu_norm = bu_path_normalize(bu_vls_cstr(&np)); + + if (bu_norm && !BU_STR_EQUAL(bu_norm , "/")) { + struct bu_vls tmp = BU_VLS_INIT_ZERO; + char *tbasename = bu_path_basename(bu_vls_cstr(&np), NULL); + bu_vls_sprintf(&tmp, "%s", tbasename); + bu_free(tbasename, "free bu_path_basename string (caller's responsibility per bu/log.h)"); + bu_vls_sprintf(&np, "%s", bu_vls_cstr(&tmp)); + bu_vls_free(&tmp); + } else { + bu_vls_sprintf(&np, "%s", "/"); + } + + // If we've gotten this far, normalizing to nothing is considered invalid. + if (!bu_vls_strlen(&np)) { + bu_vls_free(&np); + return GED_PATHSPEC_INVALID; + } + + // If we reduced to the root fullpath, we're done + if (BU_STR_EQUAL(bu_vls_cstr(&np), "/")) { + bu_vls_free(&np); + return flags; + } + + /* We've handled the toplevel special cases. If we got here, we have a specific + * path - now the only question is whether that path is valid */ + flags |= GED_PATHSPEC_SPECIFIC; + struct directory *path_dp = db_lookup(gedp->ged_wdbp->dbip, bu_vls_cstr(&np), LOOKUP_QUIET); + if (path_dp == RT_DIR_NULL) { + flags = GED_PATHSPEC_INVALID; + } else { + if (normalized) + bu_vls_sprintf(normalized, "%s", bu_vls_cstr(&np)); + } + bu_vls_free(&np); + + return flags; +} + +#endif /* diff --git a/src/libged/get/get.c b/src/libged/get/get.c index 094611ac957..6ff9b65e83c 100644 --- a/src/libged/get/get.c +++ b/src/libged/get/get.c @@ -1,7 +1,7 @@ /* G E T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/get_autoview/get_autoview.c b/src/libged/get_autoview/get_autoview.c index 56db3b62a25..45c93520bf9 100644 --- a/src/libged/get_autoview/get_autoview.c +++ b/src/libged/get_autoview/get_autoview.c @@ -1,7 +1,7 @@ /* G E T _ A U T O V I E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/get_comb/get_comb.c b/src/libged/get_comb/get_comb.c index 35ff931de94..b8d5b1ce41b 100644 --- a/src/libged/get_comb/get_comb.c +++ b/src/libged/get_comb/get_comb.c @@ -1,7 +1,7 @@ /* G E T _ C O M B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/get_eyemodel/get_eyemodel.c b/src/libged/get_eyemodel/get_eyemodel.c index 15188c00706..a4ab7ab31fd 100644 --- a/src/libged/get_eyemodel/get_eyemodel.c +++ b/src/libged/get_eyemodel/get_eyemodel.c @@ -1,7 +1,7 @@ /* G E T _ E Y E M O D E L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/get_obj_bounds.c b/src/libged/get_obj_bounds.c index 8d0c18258de..d873dd68765 100644 --- a/src/libged/get_obj_bounds.c +++ b/src/libged/get_obj_bounds.c @@ -1,7 +1,7 @@ /* G E T _ O B J _ B O U N D S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/get_solid_kp.c b/src/libged/get_solid_kp.c index 482ef8cab6d..33d5bc96c20 100644 --- a/src/libged/get_solid_kp.c +++ b/src/libged/get_solid_kp.c @@ -1,7 +1,7 @@ /* G E T _ S O L I D _ K P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/get_type/get_type.c b/src/libged/get_type/get_type.c index 1473c1c8e79..f6d1d4e436e 100644 --- a/src/libged/get_type/get_type.c +++ b/src/libged/get_type/get_type.c @@ -1,7 +1,7 @@ /* G E T _ T Y P E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/glob/glob.c b/src/libged/glob/glob.c index 19d53d05d8d..c38d174dbb9 100644 --- a/src/libged/glob/glob.c +++ b/src/libged/glob/glob.c @@ -1,7 +1,7 @@ /* G L O B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/gqa/CMakeLists.txt b/src/libged/gqa/CMakeLists.txt index d21359eef3e..995087b3212 100644 --- a/src/libged/gqa/CMakeLists.txt +++ b/src/libged/gqa/CMakeLists.txt @@ -7,15 +7,15 @@ include_directories( ) add_definitions(-DGED_PLUGIN) -ged_plugin_library(ged-gqa SHARED gqa.c) +ged_plugin_library(ged-gqa SHARED gqa.cpp) target_link_libraries(ged-gqa libged libbu) set_property(TARGET ged-gqa APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) -VALIDATE_STYLE(ged-gqa gqa.c) +VALIDATE_STYLE(ged-gqa gqa.cpp) PLUGIN_SETUP(ged-gqa ged) CMAKEFILES( CMakeLists.txt - gqa.c + gqa.cpp ) # Local Variables: diff --git a/src/libged/gqa/gqa.c b/src/libged/gqa/gqa.cpp similarity index 97% rename from src/libged/gqa/gqa.c rename to src/libged/gqa/gqa.cpp index 9754d599fd2..b08c1b3de4c 100644 --- a/src/libged/gqa/gqa.c +++ b/src/libged/gqa/gqa.cpp @@ -1,7 +1,7 @@ /* G Q A . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -54,8 +54,8 @@ struct analyze_densities *_gd_densities; char *_gd_densities_source; /* bu_getopt() options */ -char *options = "A:a:de:f:g:Gn:N:p:P:qrS:s:t:U:u:vV:W:h?"; -char *options_str = "[-A A|a|b|c|e|g|m|o|v|w] [-a az] [-d] [-e el] [-f densityFile] [-g spacing|upper,lower|upper-lower] [-G] [-n nhits] [-N nviews] [-p plotPrefix] [-P ncpus] [-q] [-r] [-S nsamples] [-t overlap_tol] [-U useair] [-u len_units vol_units wt_units] [-v] [-V volume_tol] [-W weight_tol]"; +const char *options = "A:a:de:f:g:Gn:N:p:P:qrS:s:t:U:u:vV:W:h?"; +const char *options_str = "[-A A|a|b|c|e|g|m|o|v|w] [-a az] [-d] [-e el] [-f densityFile] [-g spacing|upper,lower|upper-lower] [-G] [-n nhits] [-N nviews] [-p plotPrefix] [-P ncpus] [-q] [-r] [-S nsamples] [-t overlap_tol] [-U useair] [-u len_units vol_units wt_units] [-v] [-V volume_tol] [-W weight_tol]"; #define ANALYSIS_VOLUMES 1 #define ANALYSIS_WEIGHTS 2 @@ -135,6 +135,7 @@ struct cstate { int sem_lists; int sem_worker; + int sem_plot; /* sem_worker protects this */ int v; /* indicates how many "grid_size" steps in the v direction have been taken */ @@ -794,8 +795,10 @@ _gqa_overlap(struct application *ap, VJOIN1(ohit, rp->r_pt, ohitp->hit_dist, rp->r_dir); if (plot_overlaps) { + bu_semaphore_acquire(state->sem_plot); pl_color(plot_overlaps, V3ARGS(overlap_color)); pdv_3line(plot_overlaps, ihit, ohit); + bu_semaphore_release(state->sem_plot); } if (analysis_flags & ANALYSIS_PLOT_OVERLAPS) { @@ -811,8 +814,10 @@ _gqa_overlap(struct application *ap, bu_semaphore_release(state->sem_lists); if (plot_overlaps) { + bu_semaphore_acquire(state->sem_plot); pl_color(plot_overlaps, V3ARGS(overlap_color)); pdv_3line(plot_overlaps, ihit, ohit); + bu_semaphore_release(state->sem_plot); } } else { bu_semaphore_acquire(state->sem_worker); @@ -867,8 +872,10 @@ void _gqa_exposed_air(struct application *ap, bu_semaphore_release(state->sem_lists); if (plot_expair) { + bu_semaphore_acquire(state->sem_plot); pl_color(plot_expair, V3ARGS(expAir_color)); pdv_3line(plot_expair, pt, opt); + bu_semaphore_release(state->sem_plot); } } @@ -882,7 +889,7 @@ void _gqa_exposed_air(struct application *ap, * this routine must be prepared to run in parallel */ int -hit(struct application *ap, struct partition *PartHeadp, struct seg *segs) +_gqa_hit(struct application *ap, struct partition *PartHeadp, struct seg *segs) { /* see raytrace.h for all of these guys */ struct partition *pp; @@ -962,8 +969,10 @@ hit(struct application *ap, struct partition *PartHeadp, struct seg *segs) vect_t gapEnd; VJOIN1(gapEnd, pt, -gap_dist, ap->a_ray.r_dir); + bu_semaphore_acquire(state->sem_plot); pl_color(plot_gaps, V3ARGS(gap_color)); pdv_3line(plot_gaps, pt, gapEnd); + bu_semaphore_release(state->sem_plot); } } } @@ -1121,6 +1130,7 @@ hit(struct application *ap, struct partition *PartHeadp, struct seg *segs) if (plot_volume) { VJOIN1(opt, ap->a_ray.r_pt, pp->pt_outhit->hit_dist, ap->a_ray.r_dir); + bu_semaphore_acquire(state->sem_plot); if (ap->a_user & 1) { pl_color(plot_volume, V3ARGS(gap_color)); } else { @@ -1128,6 +1138,7 @@ hit(struct application *ap, struct partition *PartHeadp, struct seg *segs) } pdv_3line(plot_volume, pt, opt); + bu_semaphore_release(state->sem_plot); } } @@ -1148,8 +1159,10 @@ hit(struct application *ap, struct partition *PartHeadp, struct seg *segs) d *= 0.25; VJOIN1(aapt, pt, d, ap->a_ray.r_dir); + bu_semaphore_acquire(state->sem_plot); pl_color(plot_adjair, V3ARGS(adjAir_color)); pdv_3line(plot_adjair, pt, aapt); + bu_semaphore_release(state->sem_plot); } } @@ -1183,7 +1196,7 @@ hit(struct application *ap, struct partition *PartHeadp, struct seg *segs) * This routine must be prepared to run in parallel */ int -miss(struct application *ap) +_gqa_miss(struct application *ap) { RT_CK_APPLICATION(ap); @@ -1229,8 +1242,8 @@ plane_worker(int cpu, void *ptr) RT_APPLICATION_INIT(&ap); ap.a_rt_i = (struct rt_i *)state->rtip; /* application uses this instance */ - ap.a_hit = hit; /* where to go on a hit */ - ap.a_miss = miss; /* where to go on a miss */ + ap.a_hit = _gqa_hit; /* where to go on a hit */ + ap.a_miss = _gqa_miss; /* where to go on a miss */ ap.a_logoverlap = logoverlap; ap.a_overlap = _gqa_overlap; ap.a_resource = &state->resp[cpu]; @@ -2249,7 +2262,7 @@ summary_reports(struct cstate *state) } -int +extern "C" int ged_gqa_core(struct ged *gedp, int argc, const char *argv[]) { int arg_count; @@ -2410,6 +2423,8 @@ ged_gqa_core(struct ged *gedp, int argc, const char *argv[]) /* initialize some stuff */ state.sem_worker = bu_semaphore_register("gqa_sem_worker"); state.sem_stats = bu_semaphore_register("gqa_sem_stats"); + state.sem_lists = bu_semaphore_register("gqa_sem_lists"); + state.sem_plot = bu_semaphore_register("gqa_sem_plot"); state.rtip = rtip; state.first = 1; allocate_per_region_data(&state, start_objs, argc, argv); @@ -2554,20 +2569,22 @@ ged_gqa_core(struct ged *gedp, int argc, const char *argv[]) #ifdef GED_PLUGIN #include "../include/plugin.h" -struct ged_cmd_impl gqa_cmd_impl = { - "gqa", - ged_gqa_core, - GED_CMD_DEFAULT -}; +extern "C" { + struct ged_cmd_impl gqa_cmd_impl = { + "gqa", + ged_gqa_core, + GED_CMD_DEFAULT + }; -const struct ged_cmd gqa_cmd = { &gqa_cmd_impl }; -const struct ged_cmd *gqa_cmds[] = { &gqa_cmd, NULL }; + const struct ged_cmd gqa_cmd = { &gqa_cmd_impl }; + const struct ged_cmd *gqa_cmds[] = { &gqa_cmd, NULL }; -static const struct ged_plugin pinfo = { GED_API, gqa_cmds, 1 }; + static const struct ged_plugin pinfo = { GED_API, gqa_cmds, 1 }; -COMPILER_DLLEXPORT const struct ged_plugin *ged_plugin_info() -{ - return &pinfo; + COMPILER_DLLEXPORT const struct ged_plugin *ged_plugin_info() + { + return &pinfo; + } } #endif /* GED_PLUGIN */ diff --git a/src/libged/grid/grid.c b/src/libged/grid/grid.c index 97c47cd0640..3913b14b93f 100644 --- a/src/libged/grid/grid.c +++ b/src/libged/grid/grid.c @@ -1,7 +1,7 @@ /* G R I D . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/grid2model_lu/grid2model_lu.c b/src/libged/grid2model_lu/grid2model_lu.c index fbafaec6dc9..d533c9f528e 100644 --- a/src/libged/grid2model_lu/grid2model_lu.c +++ b/src/libged/grid2model_lu/grid2model_lu.c @@ -1,7 +1,7 @@ /* G R I D 2 M O D E L _ L U . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/grid2view_lu/grid2view_lu.c b/src/libged/grid2view_lu/grid2view_lu.c index 2b647791795..1beb9fc8248 100644 --- a/src/libged/grid2view_lu/grid2view_lu.c +++ b/src/libged/grid2view_lu/grid2view_lu.c @@ -1,7 +1,7 @@ /* G R I D 2 V I E W _ L U . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/group/group.c b/src/libged/group/group.c index d36bd54cb1c..64572031de1 100644 --- a/src/libged/group/group.c +++ b/src/libged/group/group.c @@ -1,7 +1,7 @@ /* G R O U P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/heal/heal.c b/src/libged/heal/heal.c index 37a32860d37..3779afd7ba9 100644 --- a/src/libged/heal/heal.c +++ b/src/libged/heal/heal.c @@ -1,7 +1,7 @@ /* H E A L . C * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/help/help.cpp b/src/libged/help/help.cpp index 71b4676d993..c0b91494fbd 100644 --- a/src/libged/help/help.cpp +++ b/src/libged/help/help.cpp @@ -1,7 +1,7 @@ /* H E L P . C * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -249,7 +249,7 @@ ged_help_core(struct ged *gedp, int argc, const char *argv[]) return -1; /* get our doc dir */ - dir = bu_strdup(bu_brlcad_dir("doc", 0)); + dir = bu_strdup(bu_dir(NULL, 0, BU_DIR_DOC, NULL)); /* get recursive list of documentation files */ count = help_files(dir, &entries); diff --git a/src/libged/help/test_help.c b/src/libged/help/test_help.c index b9b5438e616..af1cb408f93 100644 --- a/src/libged/help/test_help.c +++ b/src/libged/help/test_help.c @@ -1,7 +1,7 @@ /* T E S T _ H E L P . C * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/hide/hide.c b/src/libged/hide/hide.c index 5a232b01a82..fced42d978b 100644 --- a/src/libged/hide/hide.c +++ b/src/libged/hide/hide.c @@ -1,7 +1,7 @@ /* H I D E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/how/how.c b/src/libged/how/how.c index 1788ddfc015..dfc66e96b7f 100644 --- a/src/libged/how/how.c +++ b/src/libged/how/how.c @@ -1,7 +1,7 @@ /* H O W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/human/human.c b/src/libged/human/human.c index f17d92e2efb..183c0adbc85 100644 --- a/src/libged/human/human.c +++ b/src/libged/human/human.c @@ -1,7 +1,7 @@ /* H U M A N . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/illum/illum.c b/src/libged/illum/illum.c index f5564e510d5..909f2fd32e2 100644 --- a/src/libged/illum/illum.c +++ b/src/libged/illum/illum.c @@ -1,7 +1,7 @@ /* I L L U M . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/importFg4Section/importFg4Section.c b/src/libged/importFg4Section/importFg4Section.c index b911558e5cf..61d9e7ea00d 100644 --- a/src/libged/importFg4Section/importFg4Section.c +++ b/src/libged/importFg4Section/importFg4Section.c @@ -1,7 +1,7 @@ /* I M P O R T F G 4 S E C T I O N . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/include/plugin.h b/src/libged/include/plugin.h index 6290823622c..f0a4a436846 100644 --- a/src/libged/include/plugin.h +++ b/src/libged/include/plugin.h @@ -1,7 +1,7 @@ /* P L U G I N . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/inside.c b/src/libged/inside.c index 988900cae3d..e920337c7da 100644 --- a/src/libged/inside.c +++ b/src/libged/inside.c @@ -1,7 +1,7 @@ /* I N S I D E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/inside/inside.c b/src/libged/inside/inside.c index 5dd3f76a558..2598d0b408f 100644 --- a/src/libged/inside/inside.c +++ b/src/libged/inside/inside.c @@ -1,7 +1,7 @@ /* I N S I D E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/instance/instance.c b/src/libged/instance/instance.c index 8b98f298265..cb6e51ff631 100644 --- a/src/libged/instance/instance.c +++ b/src/libged/instance/instance.c @@ -1,7 +1,7 @@ /* I N S T A N C E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/isize/isize.c b/src/libged/isize/isize.c index 02745176515..1e227bd6cfd 100644 --- a/src/libged/isize/isize.c +++ b/src/libged/isize/isize.c @@ -1,7 +1,7 @@ /* I S I Z E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/item/item.c b/src/libged/item/item.c index 7e731f8085b..194de09c175 100644 --- a/src/libged/item/item.c +++ b/src/libged/item/item.c @@ -1,7 +1,7 @@ /* I T E M . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/joint/joint.c b/src/libged/joint/joint.c index 4a64f9a9a4a..a761b5166b2 100644 --- a/src/libged/joint/joint.c +++ b/src/libged/joint/joint.c @@ -1,7 +1,7 @@ /* J O I N T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/joint/joint.h b/src/libged/joint/joint.h index e750985eaea..66cfee1bd25 100644 --- a/src/libged/joint/joint.h +++ b/src/libged/joint/joint.h @@ -1,7 +1,7 @@ /* J O I N T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/joint2/joint2.c b/src/libged/joint2/joint2.c index 5b4749f97f1..eadde5dc956 100644 --- a/src/libged/joint2/joint2.c +++ b/src/libged/joint2/joint2.c @@ -1,7 +1,7 @@ /* J O I N T 2 . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/keep/keep.c b/src/libged/keep/keep.c index cdf262c8aa7..5606e691a35 100644 --- a/src/libged/keep/keep.c +++ b/src/libged/keep/keep.c @@ -1,7 +1,7 @@ /* K E E P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/keypoint/keypoint.c b/src/libged/keypoint/keypoint.c index c5757ed2b6b..df3bba49bf0 100644 --- a/src/libged/keypoint/keypoint.c +++ b/src/libged/keypoint/keypoint.c @@ -1,7 +1,7 @@ /* K E Y P O I N T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/kill/kill.c b/src/libged/kill/kill.c index acd56e87f67..38d870edf15 100644 --- a/src/libged/kill/kill.c +++ b/src/libged/kill/kill.c @@ -1,7 +1,7 @@ /* K I L L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -60,7 +60,7 @@ ged_kill_core(struct ged *gedp, int argc, const char *argv[]) } bu_optind = 1; - while ((c = bu_getopt(argc, (char * const *)argv, "fn")) != -1) { + while ((c = bu_getopt(argc, (char * const *)argv, "fnq")) != -1) { switch (c) { case 'f': force = 1; @@ -68,6 +68,9 @@ ged_kill_core(struct ged *gedp, int argc, const char *argv[]) case 'n': nflag = 1; break; + case 'q': + verbose = LOOKUP_QUIET; + break; default: bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; diff --git a/src/libged/killall/killall.c b/src/libged/killall/killall.c index 8263643e917..d2486edb816 100644 --- a/src/libged/killall/killall.c +++ b/src/libged/killall/killall.c @@ -1,7 +1,7 @@ /* K I L L A L L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/killrefs/killrefs.c b/src/libged/killrefs/killrefs.c index ddb6a3d2d05..604a5294da2 100644 --- a/src/libged/killrefs/killrefs.c +++ b/src/libged/killrefs/killrefs.c @@ -1,7 +1,7 @@ /* K I L L R E F S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/killtree/killtree.c b/src/libged/killtree/killtree.c index dfec4c96fcd..bf53bf1d065 100644 --- a/src/libged/killtree/killtree.c +++ b/src/libged/killtree/killtree.c @@ -1,7 +1,7 @@ /* K I L L T R E E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/label/label.c b/src/libged/label/label.c index 93a5873b1a8..e656c226c8c 100644 --- a/src/libged/label/label.c +++ b/src/libged/label/label.c @@ -1,7 +1,7 @@ /* L A B E L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/lc/lc.c b/src/libged/lc/lc.c index d10ff76099a..82821fa83bc 100644 --- a/src/libged/lc/lc.c +++ b/src/libged/lc/lc.c @@ -1,7 +1,7 @@ /* L C . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/libfuncs/libfuncs.c b/src/libged/libfuncs/libfuncs.c index 72d4ce459b7..40f19651a19 100644 --- a/src/libged/libfuncs/libfuncs.c +++ b/src/libged/libfuncs/libfuncs.c @@ -1,7 +1,7 @@ /* L I B F U N C S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/lint/lint.cpp b/src/libged/lint/lint.cpp index ae6840563a2..9589c345093 100644 --- a/src/libged/lint/lint.cpp +++ b/src/libged/lint/lint.cpp @@ -1,7 +1,7 @@ /* L I N T . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -455,7 +455,6 @@ _ged_invalid_shape_check(struct _ged_invalid_data *idata, struct ged *gedp, int BU_ALLOC(pc, struct bu_ptbl); if (db_search(pc, DB_SEARCH_RETURN_UNIQ_DP, bu_vls_cstr(&sopts), argc, dpa, gedp->ged_wdbp->dbip, NULL) < 0) { ret = GED_ERROR; - bu_ptbl_free(pc); bu_free(pc, "pc table"); } else { for (i = 0; i < BU_PTBL_LEN(pc); i++) { diff --git a/src/libged/list/list.c b/src/libged/list/list.c index 9109d24afc1..bd7b22231e3 100644 --- a/src/libged/list/list.c +++ b/src/libged/list/list.c @@ -1,7 +1,7 @@ /* L I S T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/lod/lod.c b/src/libged/lod/lod.c index a06d3a70ffe..7b7fcb3fb37 100644 --- a/src/libged/lod/lod.c +++ b/src/libged/lod/lod.c @@ -1,7 +1,7 @@ /* L O D . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/log/log.c b/src/libged/log/log.c index 9a085ed8094..e3aa8a54379 100644 --- a/src/libged/log/log.c +++ b/src/libged/log/log.c @@ -1,7 +1,7 @@ /* L O G . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/lookat/lookat.c b/src/libged/lookat/lookat.c index ff9f8822797..937b7de0dce 100644 --- a/src/libged/lookat/lookat.c +++ b/src/libged/lookat/lookat.c @@ -1,7 +1,7 @@ /* L O O K A T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/ls/ls.c b/src/libged/ls/ls.c index 54e8efb6116..69c4653263c 100644 --- a/src/libged/ls/ls.c +++ b/src/libged/ls/ls.c @@ -1,7 +1,7 @@ /* L S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/lt/lt.c b/src/libged/lt/lt.c index 4f86c0ecec1..c620400411a 100644 --- a/src/libged/lt/lt.c +++ b/src/libged/lt/lt.c @@ -1,7 +1,7 @@ /* L T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/m2v_point/m2v_point.c b/src/libged/m2v_point/m2v_point.c index 1f2f2bc0fa4..916db1996ec 100644 --- a/src/libged/m2v_point/m2v_point.c +++ b/src/libged/m2v_point/m2v_point.c @@ -1,7 +1,7 @@ /* M 2 V _ P O I N T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/make/make.c b/src/libged/make/make.c index 22f46e97c50..36864454296 100644 --- a/src/libged/make/make.c +++ b/src/libged/make/make.c @@ -1,7 +1,7 @@ /* M A K E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/make_name/make_name.c b/src/libged/make_name/make_name.c index ffdd00b0127..cc3c662bc70 100644 --- a/src/libged/make_name/make_name.c +++ b/src/libged/make_name/make_name.c @@ -1,7 +1,7 @@ /* M A K E _ N A M E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/match/match.c b/src/libged/match/match.c index 952de5744d7..951ed605665 100644 --- a/src/libged/match/match.c +++ b/src/libged/match/match.c @@ -1,7 +1,7 @@ /* M A T C H . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/mater/mater.cpp b/src/libged/mater/mater.cpp index a2465e33f19..a8a8ca16dbc 100644 --- a/src/libged/mater/mater.cpp +++ b/src/libged/mater/mater.cpp @@ -1,7 +1,7 @@ /* M A T E R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/metaball/metaball.c b/src/libged/metaball/metaball.c index 307543b33cc..7244873a272 100644 --- a/src/libged/metaball/metaball.c +++ b/src/libged/metaball/metaball.c @@ -1,7 +1,7 @@ /* E D I T _ M E T A B A L L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/mirror/mirror.c b/src/libged/mirror/mirror.c index e086e5710e1..623e4cedf82 100644 --- a/src/libged/mirror/mirror.c +++ b/src/libged/mirror/mirror.c @@ -1,7 +1,7 @@ /* M I R R O R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/model2grid_lu/model2grid_lu.c b/src/libged/model2grid_lu/model2grid_lu.c index c25da01834b..548c59cf66f 100644 --- a/src/libged/model2grid_lu/model2grid_lu.c +++ b/src/libged/model2grid_lu/model2grid_lu.c @@ -1,7 +1,7 @@ /* M O D E L 2 G R I D _ L U . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/model2view/model2view.c b/src/libged/model2view/model2view.c index 6292eb44921..108b329a667 100644 --- a/src/libged/model2view/model2view.c +++ b/src/libged/model2view/model2view.c @@ -1,7 +1,7 @@ /* M O D E L 2 V I E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/model2view_lu/model2view_lu.c b/src/libged/model2view_lu/model2view_lu.c index 76a0cc55d6b..568cb433068 100644 --- a/src/libged/model2view_lu/model2view_lu.c +++ b/src/libged/model2view_lu/model2view_lu.c @@ -1,7 +1,7 @@ /* M O D E L 2 V I E W _ L U . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/move/move.c b/src/libged/move/move.c index 41e29430d0b..8e655b3cb82 100644 --- a/src/libged/move/move.c +++ b/src/libged/move/move.c @@ -1,7 +1,7 @@ /* M O V E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/move_all/move_all.c b/src/libged/move_all/move_all.c index c1436dacb8b..19f1446f856 100644 --- a/src/libged/move_all/move_all.c +++ b/src/libged/move_all/move_all.c @@ -1,7 +1,7 @@ /* M O V E _ A L L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -44,12 +44,13 @@ move_all_func(struct ged *gedp, int nflag, const char *old_name, const char *new struct rt_db_internal intern; struct rt_comb_internal *comb; struct bu_ptbl stack; + size_t moved = 0; - /* rename the record itself */ - if ((dp = db_lookup(gedp->ged_wdbp->dbip, old_name, LOOKUP_NOISY)) == RT_DIR_NULL) - return GED_ERROR; + /* check the old_name source and new_name target */ + + dp = db_lookup(gedp->ged_wdbp->dbip, old_name, LOOKUP_NOISY); - if (db_lookup(gedp->ged_wdbp->dbip, new_name, LOOKUP_QUIET) != RT_DIR_NULL) { + if (dp && db_lookup(gedp->ged_wdbp->dbip, new_name, LOOKUP_QUIET) != RT_DIR_NULL) { bu_vls_printf(gedp->ged_result_str, "%s: already exists", new_name); return GED_ERROR; } @@ -57,56 +58,65 @@ move_all_func(struct ged *gedp, int nflag, const char *old_name, const char *new /* if this was a sketch, we need to look for all the extrude * objects that might use it. * - * This has to be done here, before we rename the (possible) sketch object - * because the extrude will do a rt_db_get on the sketch when we call - * rt_db_get_internal on it. + * This has to be done here, before we rename the (possible) + * sketch object because the extrude will do a rt_db_get on the + * sketch when we call rt_db_get_internal on it. */ - if (dp->d_major_type == DB5_MAJORTYPE_BRLCAD && \ - dp->d_minor_type == DB5_MINORTYPE_BRLCAD_SKETCH) { - + if (dp + && dp->d_major_type == DB5_MAJORTYPE_BRLCAD + && dp->d_minor_type == DB5_MINORTYPE_BRLCAD_SKETCH) + { struct directory *dirp; for (i = 0; i < RT_DBNHASH; i++) { for (dirp = gedp->ged_wdbp->dbip->dbi_Head[i]; dirp != RT_DIR_NULL; dirp = dirp->d_forw) { + struct rt_extrude_internal *extrude; - if (dirp->d_major_type == DB5_MAJORTYPE_BRLCAD && \ - dirp->d_minor_type == DB5_MINORTYPE_BRLCAD_EXTRUDE) { - struct rt_extrude_internal *extrude; + if (dirp->d_major_type != DB5_MAJORTYPE_BRLCAD || \ + dirp->d_minor_type != DB5_MINORTYPE_BRLCAD_EXTRUDE) { + continue; + } - if (rt_db_get_internal(&intern, dirp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { - bu_log("Can't get extrude %s?\n", dirp->d_namep); - continue; - } - extrude = (struct rt_extrude_internal *)intern.idb_ptr; - RT_EXTRUDE_CK_MAGIC(extrude); - - if (BU_STR_EQUAL(extrude->sketch_name, old_name)) { - if (nflag) { - bu_vls_printf(gedp->ged_result_str, "%s ", dirp->d_namep); - rt_db_free_internal(&intern); - } else { - bu_free(extrude->sketch_name, "sketch name"); - extrude->sketch_name = bu_strdup(new_name); - - if (rt_db_put_internal(dirp, gedp->ged_wdbp->dbip, &intern, &rt_uniresource) < 0) { - bu_log("oops\n"); - } - } - } else - rt_db_free_internal(&intern); + if (rt_db_get_internal(&intern, dirp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { + bu_log("WARNING: Can't get extrude %s?\n", dirp->d_namep); + continue; + } + + extrude = (struct rt_extrude_internal *)intern.idb_ptr; + RT_EXTRUDE_CK_MAGIC(extrude); + + if (!BU_STR_EQUAL(extrude->sketch_name, old_name)) { + rt_db_free_internal(&intern); + continue; + } + + if (nflag) { + bu_vls_printf(gedp->ged_result_str, "%s ", dirp->d_namep); + rt_db_free_internal(&intern); + continue; } + + bu_free(extrude->sketch_name, "sketch name"); + extrude->sketch_name = bu_strdup(new_name); + + if (rt_db_put_internal(dirp, gedp->ged_wdbp->dbip, &intern, &rt_uniresource) < 0) { + bu_log("INTERNAL ERROR: unable to write sketch [%s] during mvall\n", new_name); + } else { + moved++; + } + rt_db_free_internal(&intern); } } } - if (!nflag) { + if (!nflag && dp) { /* Change object name in the directory. */ if (db_rename(gedp->ged_wdbp->dbip, dp, new_name) < 0) { bu_vls_printf(gedp->ged_result_str, "error in rename to %s, aborting", new_name); return GED_ERROR; } - /* Change name in the file */ + /* Change object name on disk */ if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { bu_vls_printf(gedp->ged_result_str, "Database read error, aborting"); return GED_ERROR; @@ -116,11 +126,11 @@ move_all_func(struct ged *gedp, int nflag, const char *old_name, const char *new bu_vls_printf(gedp->ged_result_str, "Database write error, aborting"); return GED_ERROR; } + moved++; } bu_ptbl_init(&stack, 64, "combination stack for wdb_mvall_cmd"); - /* Examine all COMB nodes */ for (i = 0; i < RT_DBNHASH; i++) { for (dp = gedp->ged_wdbp->dbip->dbi_Head[i]; dp != RT_DIR_NULL; dp = dp->d_forw) { @@ -128,10 +138,14 @@ move_all_func(struct ged *gedp, int nflag, const char *old_name, const char *new union tree *comb_leaf; int done=0; - if (!(dp->d_flags & RT_DIR_COMB)) continue; - if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) continue; + if (!(dp->d_flags & RT_DIR_COMB)) + continue; + if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) + continue; + comb = (struct rt_comb_internal *)intern.idb_ptr; bu_ptbl_reset(&stack); + /* visit each leaf in the combination */ comb_leaf = comb->tree; if (comb_leaf) { @@ -159,13 +173,15 @@ move_all_func(struct ged *gedp, int nflag, const char *old_name, const char *new rt_db_free_internal(&intern); } else { int comb_mvall_status = db_comb_mvall(dp, gedp->ged_wdbp->dbip, old_name, new_name, &stack); - if (!comb_mvall_status) continue; + if (!comb_mvall_status) + continue; if (comb_mvall_status == 2) { bu_ptbl_free(&stack); bu_vls_printf(gedp->ged_result_str, "Database write error, aborting"); return GED_ERROR; } } + moved++; } } @@ -210,6 +226,11 @@ move_all_func(struct ged *gedp, int nflag, const char *old_name, const char *new } } + if (!moved) { + bu_log("ERROR: move %s to %s: no such object or reference\n", old_name, new_name); + return GED_ERROR; + } + return GED_OK; } diff --git a/src/libged/move_arb_edge/move_arb_edge.c b/src/libged/move_arb_edge/move_arb_edge.c index 722ae942069..cc8c71e940c 100644 --- a/src/libged/move_arb_edge/move_arb_edge.c +++ b/src/libged/move_arb_edge/move_arb_edge.c @@ -1,7 +1,7 @@ /* M O V E _ A R B _ E D G E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/move_arb_face/move_arb_face.c b/src/libged/move_arb_face/move_arb_face.c index 430be7a756e..a61ba04241d 100644 --- a/src/libged/move_arb_face/move_arb_face.c +++ b/src/libged/move_arb_face/move_arb_face.c @@ -1,7 +1,7 @@ /* M O V E _ A R B _ F A C E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/mrot/mrot.c b/src/libged/mrot/mrot.c index 3ef353c0f93..378fcbf56d2 100644 --- a/src/libged/mrot/mrot.c +++ b/src/libged/mrot/mrot.c @@ -1,7 +1,7 @@ /* M R O T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nirt/nirt.c b/src/libged/nirt/nirt.c index 431e823d1eb..ec6438ceffa 100644 --- a/src/libged/nirt/nirt.c +++ b/src/libged/nirt/nirt.c @@ -1,7 +1,7 @@ /* N I R T . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg.c b/src/libged/nmg/nmg.c index 22e3c6a8c5b..845913c1b33 100644 --- a/src/libged/nmg/nmg.c +++ b/src/libged/nmg/nmg.c @@ -1,7 +1,7 @@ /* N M G . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg_cmface.c b/src/libged/nmg/nmg_cmface.c index d556e1d592d..bbc4010555b 100644 --- a/src/libged/nmg/nmg_cmface.c +++ b/src/libged/nmg/nmg_cmface.c @@ -1,7 +1,7 @@ /* N M G _ C M F A C E . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg_collapse.c b/src/libged/nmg/nmg_collapse.c index e9172fb1080..266d7f1ee86 100644 --- a/src/libged/nmg/nmg_collapse.c +++ b/src/libged/nmg/nmg_collapse.c @@ -1,7 +1,7 @@ /* N M G _ C O L L A P S E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg_fix_normals.c b/src/libged/nmg/nmg_fix_normals.c index 8284f869ead..ce5a524139b 100644 --- a/src/libged/nmg/nmg_fix_normals.c +++ b/src/libged/nmg/nmg_fix_normals.c @@ -1,7 +1,7 @@ /* N M G _ F I X _ N O R M A L S . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg_kill_f.c b/src/libged/nmg/nmg_kill_f.c index 2d7f04e9d38..7bd9bad00ef 100644 --- a/src/libged/nmg/nmg_kill_f.c +++ b/src/libged/nmg/nmg_kill_f.c @@ -1,7 +1,7 @@ /* N M G _ K I L L _ F. C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg_kill_v.c b/src/libged/nmg/nmg_kill_v.c index 357763d5095..64b2f4145b5 100644 --- a/src/libged/nmg/nmg_kill_v.c +++ b/src/libged/nmg/nmg_kill_v.c @@ -1,7 +1,7 @@ /* N M G _ K I L L _ V. C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg_make_v.c b/src/libged/nmg/nmg_make_v.c index a2f8d5c3350..ef19eb67072 100644 --- a/src/libged/nmg/nmg_make_v.c +++ b/src/libged/nmg/nmg_make_v.c @@ -1,7 +1,7 @@ /* N M G _ M A K E _ V. C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg_mm.c b/src/libged/nmg/nmg_mm.c index af21093b775..0f4d5f248b2 100644 --- a/src/libged/nmg/nmg_mm.c +++ b/src/libged/nmg/nmg_mm.c @@ -1,7 +1,7 @@ /* N M G _ M M . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg_move_v.c b/src/libged/nmg/nmg_move_v.c index c0def074467..22789c6030f 100644 --- a/src/libged/nmg/nmg_move_v.c +++ b/src/libged/nmg/nmg_move_v.c @@ -1,7 +1,7 @@ /* N M G _ M O V E _ V. C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/nmg/nmg_simplify.c b/src/libged/nmg/nmg_simplify.c index 629a62c19e5..162d4a4a0ff 100644 --- a/src/libged/nmg/nmg_simplify.c +++ b/src/libged/nmg/nmg_simplify.c @@ -1,7 +1,7 @@ /* N M G _ S I M P L I F Y . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/npush/CMakeLists.txt b/src/libged/npush/CMakeLists.txt new file mode 100644 index 00000000000..b8589c102f2 --- /dev/null +++ b/src/libged/npush/CMakeLists.txt @@ -0,0 +1,26 @@ +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${BRLCAD_BINARY_DIR}/include + ${BRLCAD_SOURCE_DIR}/include + ${BU_INCLUDE_DIRS} + ${GED_INCLUDE_DIRS} + ) + +add_definitions(-DGED_PLUGIN) +ged_plugin_library(ged-npush SHARED npush.cpp) +target_link_libraries(ged-npush libged libbu) +set_property(TARGET ged-npush APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(ged-npush npush.cpp) +PLUGIN_SETUP(ged-npush ged) + +CMAKEFILES( + CMakeLists.txt + npush.cpp + ) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/src/libged/npush/npush.cpp b/src/libged/npush/npush.cpp new file mode 100644 index 00000000000..401743c9e48 --- /dev/null +++ b/src/libged/npush/npush.cpp @@ -0,0 +1,1466 @@ +/* P U S H . C + * BRL-CAD + * + * Copyright (c) 2008-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file libged/push.c + * + * The push command. + * + */ + +#include "common.h" + +#include +#include +#include +#include +#include +#include + +#include "bu/cmd.h" +#include "bu/opt.h" + +#include "../ged_private.h" + +/* Database objects (struct directory) are unique in a database, but those + * unique objects may be reused by multiple distinct comb tree instances. + * When pushing matrices, the atomic unit of interest is not the database + * object but those comb tree instances. + * + * The .g file format does not store such instances as discrete objects - they + * exist as tree elements of the comb object tree definitions, consisting of a + * reference to a directory object and a matrix associated with that instance + * (if no explicit matrix is present, an implicit identity (IDN) matrix is + * assumed.) + * + * For the purposes of matrix pushing, we need to think about these instances + * as distinct atomic objects, whose uniqueness is defined not by the directory + * pointer itself or by the instance in any given tree, but the combination of + * the directory pointer and the positioning matrix. In order to do so, we + * define a C++ class that encapsulates the necessary information and a < + * operator that allows for insertion of instances into C++ sets (which offer + * sorting and a uniqueness guarantee.) + */ +class dp_i { + public: + struct directory *dp; // Instance database object + struct directory *parent_dp; // Parent object + mat_t mat; // Instance matrix + size_t ind; // Used for debugging + std::string iname = std::string(); // Container to hold instance name, if needed + const struct bn_tol *tol; // Tolerance to use for matrix comparisons + + bool push_obj = true; // Flag to determine if this instance is being pushed + bool is_leaf = false; // Flag to determine if this instance is a push leaf + + // If an instance is being pushed, there is one step that can be taken + // beyond simply propagating the matrix down the tree - the solid + // associated with the instance can have its parameters updated to + // reflect the application of the matrix. This completely "clears" all + // matrix applications from the comb tree instance. + bool apply_to_solid = false; + + // The key to the dp_i class is the less than operator, which is what + // allows C++ sets to distinguish between separate instances with the + // same dp pointer. The first check is that dp pointer - if the current + // and other dp do not match, the sorting criteria is obvious. Likewise, + // if one instance is instructed in the push to apply the matrix to a + // solid and another is not, even if they would otherwise be identical + // instances, it is necessary to distinguish them since those two + // definitions require different comb tree instances to represent. + // + // If instance definitions DO match in other respects, the uniqueness + // rests on the similarity of their matrices. If they are equal within + // tolerance, the instances are equal as well. + // + // One additional refinement is made to the sorting for processing + // convenience - we make sure that any IDN instance is less than any + // non-IDN matrix in sorting behavior, even if the numerics of the + // matrices wouldn't otherwise reach that determination. + bool operator<(const dp_i &o) const { + + // First, check dp + if (dp < o.dp) return true; + if (o.dp < dp) return false; + + // Important for multiple tests to know if matrices are IDN + int tidn = bn_mat_is_equal(mat, bn_mat_identity, tol);; + int oidn = bn_mat_is_equal(o.mat, bn_mat_identity, tol); + + /* If the dp didn't resolve the question, check the matrix. */ + if (!bn_mat_is_equal(mat, o.mat, tol)) { + // We want IDN matrices to be less than any others, regardless + // of the numerics. + if (tidn && !oidn) return true; + if (oidn && !tidn) return false; + + // If we don't have an IDN matrix involved, fall back on + // numerical sorting to order the instances + for (int i = 0; i < 16; i++) { + if (mat[i] < o.mat[i]) { + return true; + } + if (mat[i] > o.mat[i]) { + return false; + } + } + } + + // The application of the matrix to the solid may matter + // when distinguishing dp_i instances, but only if one + // of the matrices involved is non-IDN - otherwise, the + // matrix applications are no-ops and we don't want them + // to prompt multiple instances of objects. + if (!(dp->d_flags & RT_DIR_COMB)) { + if ((!tidn || !oidn) && (apply_to_solid && !o.apply_to_solid)) + return true; + } + + /* All attempt to find non-equalities failed */ + return false; + } + + /* For convenience, we also define an equality operator */ + bool operator==(const dp_i &o) const { + if (dp != o.dp) return false; + if (apply_to_solid != o.apply_to_solid) { + if (!bn_mat_is_equal(mat, bn_mat_identity, tol) || + !bn_mat_is_equal(o.mat, bn_mat_identity, tol)) + return false; + } + return bn_mat_is_equal(mat, o.mat, tol); + } +}; + +/* Container to hold information during tree walk. */ +struct push_state { + + /* Variables used for validity checking of specified push object(s). The + * target_objects set is user specified - if objects are specified that are + * below other target objects, flag valid_push is set to false and the user + * gets an error report. Conveniently, that mechanism will also recognize + * and reject cyclic trees. */ + bool final_check = false; + bool valid_push = true; + bool walk_error = false; + std::set initial_missing; + std::set target_objs; + struct bu_vls *msgs = NULL; + std::string problem_obj; + + /* User-supplied flags controlling tree walking behavior */ + bool dry_run = false; + bool stop_at_regions = false; + bool stop_at_shapes = false; + int max_depth = 0; + int verbosity = 0; + + /* Containers for instance structures being built up during the push walk. + * We do not need to duplicate these - the combination of matrix and dp + * uniquely identifies a volume in space. The C++ set container is used + * to ensure we end up with one unique dp_i per instance. */ + std::set instances; + + /* Tolerance to be used for matrix comparisons. Typically comes from the + * database tolerances. */ + const struct bn_tol *tol = NULL; + + /* Database information */ + struct rt_wdb *wdbp = RT_WDB_NULL; + + /* Container for finalized database objects, used to assemble and + * store them prior to the database writing step. */ + std::map updated; +}; + +/* Tree walks terminate at leaves. However, what constitutes a leaf is not always + * the same, depending on the specific stage of the push operation we are in. + * is_push_leaf encapsulates the various possibilities. */ +static bool +is_push_leaf(struct directory *dp, int depth, struct push_state *s, bool survey) +{ + if (!dp || !s || depth < 0) return true; + + if (survey) { + // In a survey, if a leaf is one of the originally specified objects, + // we're done - below such an object push logic is active. A survey + // needs to find objects not otherwise considered by the push. + if (s->target_objs.find(std::string(dp->d_namep)) != s->target_objs.end()) { + return true; + } + return false; + } + + /* Solids are always leaves, since there's nothing to walk */ + if (!(dp->d_flags & RT_DIR_COMB)) { + return true; + } + + /* Regions may be leaves, depending on user options */ + if ((dp->d_flags & RT_DIR_REGION) && s->stop_at_regions) { + return true; + } + + /* Depth halting may be active */ + if (s->max_depth && (depth >= s->max_depth)) + return true; + + return false; +} + + +/* There are a variety of situations, both due to invalid user inputs and to + * problems with tree processing, that can result in errors. + * + * This set of walking functions encapsulates a series of checks used at various + * stages of the process: + * + * 1. A preliminary check to ensure there are no nested specifications of push + * objects supplied to the push command, in the case where a user supplies + * multiple root objects to pushed. + * + * 2. A check to ensure the logic hasn't created any tree instances that don't + * refer to real database objects. This works in two stages - the initial + * pass, performed as part of the initial validation walk, records any + * references that were missing to begin with. A second pass at the end + * checks for any new missing references. + * + * The "mode" of the validation (beginning checks or end checks) is controlled + * by the "final_check" flag in the push_state container. + * + * Once an invalidity is found, these routines abort and record the invalidity. + * This is for ease of implementation and performance, but can be adjusted to + * do a more comprehensive review if that proves worthwhile. */ +static void +validate_walk(struct db_i *dbip, + struct db_full_path *dfp, + void *client_data); + +static void +validate_walk_subtree(struct db_i *dbip, + struct db_full_path *dfp, + union tree *tp, + void *client_data) +{ + struct directory *dp; + struct push_state *s = (struct push_state *)client_data; + + if (!tp || !s->valid_push) + return; + + RT_CK_TREE(tp); + + switch (tp->tr_op) { + + case OP_DB_LEAF: + + if ((dp=db_lookup(dbip, tp->tr_l.tl_name, LOOKUP_NOISY)) == RT_DIR_NULL) { + if (s->final_check) { + // If we didn't spot this object as missing in the beginning, it indicates + // a problem with the push + if (s->initial_missing.find(std::string(tp->tr_l.tl_name)) == s->initial_missing.end()) { + s->valid_push = false; + } + } else { + // This instance is referencing a non-existent object from the beginning, + // so its absence won't indicate a problem with the push later + s->initial_missing.insert(std::string(tp->tr_l.tl_name)); + } + return; + } + + db_add_node_to_full_path(dfp, dp); + + if (!s->final_check) { + if (s->target_objs.find(std::string(dp->d_namep)) != s->target_objs.end()) { + s->valid_push = false; + if (s->msgs) { + char *ps = db_path_to_string(dfp); + bu_vls_printf(s->msgs, "W1[%s]: user specified push object %s is below user specified push object %s\n", ps, DB_FULL_PATH_CUR_DIR(dfp)->d_namep, dfp->fp_names[0]->d_namep); + bu_free(ps, "path string"); + } + s->problem_obj = std::string(dp->d_namep); + DB_FULL_PATH_POP(dfp); + return; + } + } + + if (!(dp->d_flags & RT_DIR_COMB)) { + DB_FULL_PATH_POP(dfp); + return; + } + + validate_walk(dbip, dfp, client_data); + + DB_FULL_PATH_POP(dfp); + break; + + case OP_UNION: + case OP_INTERSECT: + case OP_SUBTRACT: + case OP_XOR: + validate_walk_subtree(dbip, dfp, tp->tr_b.tb_left, client_data); + validate_walk_subtree(dbip, dfp, tp->tr_b.tb_right, client_data); + break; + default: + bu_log("validate_walk_subtree: unrecognized operator %d\n", tp->tr_op); + bu_bomb("validate_walk_subtree: unrecognized operator\n"); + } +} + +static void +validate_walk(struct db_i *dbip, + struct db_full_path *dfp, + void *client_data) +{ + struct push_state *s = (struct push_state *)client_data; + RT_CK_DBI(dbip); + + if (!dfp || !s->valid_push) + return; /* nothing to do */ + + if (DB_FULL_PATH_CUR_DIR(dfp)->d_flags & RT_DIR_COMB) { + + struct rt_db_internal in; + struct rt_comb_internal *comb; + + // Load the comb. In the validation stage, if we can't do this report + // an error. + if (rt_db_get_internal5(&in, DB_FULL_PATH_CUR_DIR(dfp), dbip, NULL, &rt_uniresource) < 0) { + if (s->msgs) { + char *ps = db_path_to_string(dfp); + bu_vls_printf(s->msgs, "W1[%s]: rt_db_get_internal5 failure reading comb %s\n", ps, DB_FULL_PATH_CUR_DIR(dfp)->d_namep); + bu_free(ps, "path string"); + } + s->valid_push = false; + return; + } + + // Have comb, proceed to walk tree + comb = (struct rt_comb_internal *)in.idb_ptr; + validate_walk_subtree(dbip, dfp, comb->tree, client_data); + rt_db_free_internal(&in); + + } +} + + +/* push_walk is responsible for identifying the set of instances we will use in + * push operations, as well as characterizing other parts of the database which + * may (depending on user settings) require awareness on the part of the + * processing routines to keep unrelated parts of the .g file isolated from + * push-related changes. + */ +static void +push_walk(struct db_full_path *dfp, + int depth, + mat_t *curr_mat, + bool survey, + void *client_data); + +static void +push_walk_subtree( + struct db_full_path *dfp, + union tree *tp, + int depth, + mat_t *curr_mat, + bool survey, + void *client_data) +{ + mat_t om, nm; + struct push_state *s = (struct push_state *)client_data; + struct directory *dp; + + dp_i dnew; + + // Note - instances aren't actually defined in terms of the name or dp of + // their parent - it is theoretically possible to have an instance with + // multiple parent combs - but typically knowing the parent is the simplest + // way to find/inspect information related to an instance in the database. + dnew.parent_dp = DB_FULL_PATH_CUR_DIR(dfp); + + if (!tp) + return; + + RT_CHECK_DBI(s->wdbp->dbip); + RT_CK_TREE(tp); + + switch (tp->tr_op) { + + case OP_DB_LEAF: + + // Don't consider the leaf it if doesn't exist (TODO - is this always + // what we want to do when pushing?) + if ((dp=db_lookup(s->wdbp->dbip, tp->tr_l.tl_name, LOOKUP_NOISY)) == RT_DIR_NULL) + return; + + /* Update current matrix state to reflect the new branch of + * the tree. Either we have a local matrix, or we have an + * implicit IDN matrix. */ + MAT_COPY(om, *curr_mat); + if (tp->tr_l.tl_mat) { + MAT_COPY(nm, tp->tr_l.tl_mat); + } else { + MAT_IDN(nm); + } + bn_mat_mul(*curr_mat, om, nm); + + /* Depending on use verbosity settings, report various information about + * the current state of the tree walk */ + if (s->verbosity > 2 && s->msgs) { + char *ps = db_path_to_string(dfp); + if (tp->tr_l.tl_mat && !bn_mat_is_equal(*curr_mat, bn_mat_identity, s->tol)) { + bu_vls_printf(s->msgs, "W2[%s]: found [M]%s\n", ps, dp->d_namep); + if (s->verbosity > 3) { + struct bu_vls title = BU_VLS_INIT_ZERO; + bu_vls_sprintf(&title, "W2[%s]: %s instance matrix", ps, dp->d_namep); + bn_mat_print_vls(bu_vls_cstr(&title), *curr_mat, s->msgs); + bu_vls_free(&title); + } + } else { + bu_vls_printf(s->msgs, "W2[%s]: found %s\n", ps, dp->d_namep); + } + if (s->verbosity > 3) { + struct bu_vls title = BU_VLS_INIT_ZERO; + bu_vls_sprintf(&title, "W2[%s]: %s current overall path matrix", ps, dp->d_namep); + bn_mat_print_vls(bu_vls_cstr(&title), *curr_mat, s->msgs); + bu_vls_free(&title); + } + bu_free(ps, "path string"); + } + + // Define the instance container for the (potentially) new instance. + dnew.dp = dp; + dnew.tol = s->tol; + dnew.push_obj = !(survey); + if (!survey) { + MAT_COPY(dnew.mat, *curr_mat); + } else { + MAT_COPY(dnew.mat, nm); + } + + // A "push leaf" is the termination point below which we will not + // propagate changes encoded in matrices. + if (is_push_leaf(dp, depth, s, survey)) { + + // Flag as leaf + dnew.is_leaf = true; + + // Leaf without parent means no work to do + if (!DB_FULL_PATH_LEN(dfp)) + return; + + // If dp is a solid, we're not depth limited, we're not + // stopping above shapes, and the solid supports it we apply + // the matrix to the primitive itself. The comb reference will + // use the IDN matrix. + if (!survey && !(dp->d_flags & RT_DIR_COMB) && + (!s->max_depth || depth+1 <= s->max_depth) && !s->stop_at_shapes) { + if (s->verbosity > 2 && s->msgs) { + char *ps = db_path_to_string(dfp); + bu_vls_printf(s->msgs, "W2[%s]: push leaf (finalize matrix or solid params): %s\n", ps, dp->d_namep); + bu_free(ps, "path string"); + } + dnew.apply_to_solid = true; + } + + // If we haven't already inserted an identical instance, record + // this new entry. (Note that we're not concerned with the + // boolean set aspects of the tree's definition here, only + // unique volumes in space, so the instance set does not + // exactly mimic the original comb tree structure.) + if (s->instances.find(dnew) == s->instances.end()) { + s->instances.insert(dnew); + if (s->verbosity > 3 && s->msgs) { + struct bu_vls title = BU_VLS_INIT_ZERO; + char *ps = db_path_to_string(dfp); + bu_vls_printf(s->msgs, "W2[%s]: %s is a new unique instance\n", ps, dp->d_namep); + bu_vls_sprintf(&title, "W2[%s]: instance matrix", ps); + bn_mat_print_vls(bu_vls_cstr(&title), dnew.mat, s->msgs); + bu_vls_free(&title); + bu_free(ps, "path string"); + } + } + + // Even though this is a leaf, we need to continue if we have a + // comb, in order to build awareness of non-pushed comb + // instances when we are depth limiting. If a pushed matrix + // changes a comb definition, but the same comb is in use + // elsewhere in the tree below the max push depth, the altered + // comb will need to be copied. + if (dp->d_flags & RT_DIR_COMB) { + /* Process branch's tree */ + if (!survey && s->verbosity > 4 && s->msgs) { + char *ps = db_path_to_string(dfp); + bu_vls_printf(s->msgs, "W2[%s]: switching from push to survey - non-shape leaf %s found\n", ps, dp->d_namep); + bu_free(ps, "path string"); + } + db_add_node_to_full_path(dfp, dp); + push_walk(dfp, depth, curr_mat, true, client_data); + DB_FULL_PATH_POP(dfp); + } + + /* Done with branch - put back the old matrix state */ + MAT_COPY(*curr_mat, om); + return; + } else { + // If this isn't a push leaf, this is not the termination point + // of a push - the matrix ultimately applied will be an IDN + // matrix, but the current tree matrix is recorded to allow + // instance lookups later in processing. + if (!survey && s->msgs && s->verbosity > 4) { + char *ps = db_path_to_string(dfp); + bu_vls_printf(s->msgs, "W2[%s]: pushed comb instance %s\n", ps, dp->d_namep); + bu_free(ps, "path string"); + } + dnew.is_leaf = false; + } + + if (survey && s->msgs && s->verbosity > 4) { + char *ps = db_path_to_string(dfp); + bu_vls_printf(s->msgs, "W2[%s]: survey comb instance %s\n", ps, dp->d_namep); + bu_free(ps, "path string"); + } + + if (s->instances.find(dnew) == s->instances.end()) { + s->instances.insert(dnew); + if (s->verbosity > 3 && s->msgs) { + struct bu_vls title = BU_VLS_INIT_ZERO; + char *ps = db_path_to_string(dfp); + bu_vls_printf(s->msgs, "W2[%s]: %s is a new unique instance\n", ps, dp->d_namep); + bu_vls_sprintf(&title, "W2[%s]: instance matrix", ps); + bn_mat_print_vls(bu_vls_cstr(&title), dnew.mat, s->msgs); + bu_vls_free(&title); + bu_free(ps, "path string"); + } + } + + /* Process branch's tree */ + db_add_node_to_full_path(dfp, dp); + push_walk(dfp, depth, curr_mat, survey, client_data); + DB_FULL_PATH_POP(dfp); + + /* Done with branch - put back the old matrix state */ + MAT_COPY(*curr_mat, om); + break; + + case OP_UNION: + case OP_INTERSECT: + case OP_SUBTRACT: + case OP_XOR: + push_walk_subtree(dfp, tp->tr_b.tb_left, depth, curr_mat, survey, client_data); + push_walk_subtree(dfp, tp->tr_b.tb_right, depth, curr_mat, survey, client_data); + break; + default: + bu_log("push_walk_subtree: unrecognized operator %d\n", tp->tr_op); + bu_bomb("push_walk_subtree: unrecognized operator\n"); + } +} + +static void +push_walk(struct db_full_path *dfp, + int depth, + mat_t *curr_mat, + bool survey, + void *client_data) +{ + struct push_state *s = (struct push_state *)client_data; + + if (!dfp) { + return; /* nothing to do */ + } + + if (DB_FULL_PATH_CUR_DIR(dfp)->d_flags & RT_DIR_COMB) { + + struct rt_db_internal in; + struct rt_comb_internal *comb; + + if (rt_db_get_internal5(&in, DB_FULL_PATH_CUR_DIR(dfp), s->wdbp->dbip, NULL, &rt_uniresource) < 0) + return; + + comb = (struct rt_comb_internal *)in.idb_ptr; + push_walk_subtree(dfp, comb->tree, depth+1, curr_mat, survey, client_data); + rt_db_free_internal(&in); + } +} + + +/* Now that instances are uniquely defined (and inames assigned to those + * instances where needed) analyze the comb trees to finalize what needs to be + * updated and/or created to finalize the proper comb tree references. */ +static void +tree_update_walk( + const dp_i &dpi, + struct db_full_path *dfp, + int depth, + mat_t *curr_mat, + void *client_data); + +static void +tree_update_walk_subtree( + const dp_i &parent_dpi, + struct db_full_path *dfp, + union tree *tp, + union tree *wtp, + int depth, + mat_t *curr_mat, + bool *tree_altered, + void *client_data) +{ + struct directory *dp; + struct push_state *s = (struct push_state *)client_data; + std::set::iterator dpii, i_it; + mat_t om, nm; + dp_i ldpi; + + if (!tp) + return; + + RT_CK_TREE(tp); + + switch (tp->tr_op) { + + case OP_DB_LEAF: + + // Don't consider the leaf it if doesn't exist (TODO - is this always + // what we want to do when pushing?) + if ((dp=db_lookup(s->wdbp->dbip, tp->tr_l.tl_name, LOOKUP_NOISY)) == RT_DIR_NULL) + return; + + /* Update current matrix state to reflect the new branch of + * the tree. Either we have a local matrix, or we have an + * implicit IDN matrix. */ + MAT_COPY(om, *curr_mat); + if (tp->tr_l.tl_mat) { + MAT_COPY(nm, tp->tr_l.tl_mat); + } else { + MAT_IDN(nm); + } + bn_mat_mul(*curr_mat, om, nm); + + // Look up the dpi for this comb+curr_mat combination. + ldpi.dp = dp; + MAT_COPY(ldpi.mat, *curr_mat); + ldpi.tol = s->tol; + if (!(dp->d_flags & RT_DIR_COMB) && (!s->max_depth || depth+1 <= s->max_depth) && !s->stop_at_shapes) { + ldpi.apply_to_solid = true; + } + dpii = s->instances.find(ldpi); + if (dpii == s->instances.end()) { + char *ps = db_path_to_string(dfp); + bu_log("%s: Error - no instance found: %s->%s!\n", ps, parent_dpi.dp->d_namep, dp->d_namep); + dpii = s->instances.find(ldpi); + bn_mat_print("curr_mat", *curr_mat); + if (dpii->apply_to_solid) + bu_log("%s: apply_to_solid set\n", ps); + for (i_it = s->instances.begin(); i_it != s->instances.end(); i_it++) { + const dp_i &ddpi = *i_it; + if (ddpi.dp == dp) { + bn_mat_print(tp->tr_l.tl_name, ddpi.mat); + if (ddpi.iname.length()) + bu_log("%s: iname: %s\n", ps, ddpi.iname.c_str()); + if (ddpi.apply_to_solid) + bu_log("%s: apply_to_solid set\n", ps); + } + } + bu_free(ps, "path string"); + s->walk_error = true; + return; + } + + /* Tree editing operations - form the tree that will be used in the final + * output of this comb object. These operations should use the writable + * tree (wtp) to ensure we don't cause any inadvertent issues with the + * tree walk. (If it can be proven that this can never happen we could + * edit directly on the original tp, but until that's certain working on + * a copy of the tree is safer. */ + + // Comb tree edit: if this is a push leaf, set final matrix, else + // set IDN and keep walking down. + if (dpii->is_leaf && !dpii->apply_to_solid) { + if (wtp->tr_l.tl_mat) { + if (!bn_mat_is_equal(wtp->tr_l.tl_mat, dpii->mat, s->tol)) { + MAT_COPY(wtp->tr_l.tl_mat, dpii->mat); + (*tree_altered) = true; + } + } else { + if (!bn_mat_is_identity(dpii->mat)) { + wtp->tr_l.tl_mat = bn_mat_dup(dpii->mat); + (*tree_altered) = true; + } + } + } else { + if (wtp->tr_l.tl_mat) { + // IDN matrix + bu_free(wtp->tr_l.tl_mat, "free mat"); + wtp->tr_l.tl_mat = NULL; + (*tree_altered) = true; + } + } + + // Comb tree edit: if we have an iname, update the tree name. + if (dpii->iname.length()) { + bu_free(wtp->tr_l.tl_name, "free old name"); + wtp->tr_l.tl_name = bu_strdup(dpii->iname.c_str()); + (*tree_altered) = true; + } + + + // If we're at max depth, we're done creating instances to manipulate + // on this tree branch. + if (s->max_depth && (depth == s->max_depth)) { + return; + } + + /* If we're stopping at regions and this is a region, we're done. */ + if ((dp->d_flags & RT_DIR_REGION) && s->stop_at_regions) { + /* Done with branch - put back the old matrix state */ + MAT_COPY(*curr_mat, om); + return; + } + + /* Process */ + db_add_node_to_full_path(dfp, dp); + tree_update_walk(*dpii, dfp, depth, curr_mat, client_data); + DB_FULL_PATH_POP(dfp); + + /* Done with branch - put back the old matrix state */ + MAT_COPY(*curr_mat, om); + break; + + case OP_UNION: + case OP_INTERSECT: + case OP_SUBTRACT: + case OP_XOR: + tree_update_walk_subtree(parent_dpi, dfp, tp->tr_b.tb_left, wtp->tr_b.tb_left, depth+1, curr_mat, tree_altered, client_data); + tree_update_walk_subtree(parent_dpi, dfp, tp->tr_b.tb_right, wtp->tr_b.tb_right, depth+1, curr_mat, tree_altered, client_data); + break; + default: + bu_log("tree_update_walk_subtree: unrecognized operator %d\n", tp->tr_op); + bu_bomb("tree_update_walk_subtree: unrecognized operator\n"); + } +} + +static void +tree_update_walk( + const dp_i &dpi, + struct db_full_path *dfp, + int depth, + mat_t *curr_mat, + void *client_data) +{ + struct directory *dp; + struct push_state *s = (struct push_state *)client_data; + + if (dpi.dp->d_flags & RT_DIR_COMB) { + + /* Read only copy of comb tree - use for steering the walk */ + struct rt_db_internal intern; + struct rt_comb_internal *comb; + bool tree_altered = false; + if (rt_db_get_internal5(&intern, dpi.dp, s->wdbp->dbip, NULL, &rt_uniresource) < 0) { + return; + } + comb = (struct rt_comb_internal *)intern.idb_ptr; + + /* Copy of comb tree for editing - use for recording new tree */ + struct rt_db_internal *in; + struct rt_comb_internal *wcomb; + BU_GET(in, struct rt_db_internal); + if (rt_db_get_internal5(in, dpi.dp, s->wdbp->dbip, NULL, &rt_uniresource) < 0) { + BU_PUT(in, struct rt_db_internal); + return; + } + wcomb = (struct rt_comb_internal *)in->idb_ptr; + + // Walk one tree copy, while recording updates in the other one + tree_update_walk_subtree(dpi, dfp, comb->tree, wcomb->tree, depth + 1, curr_mat, &tree_altered, client_data); + + // Read-only copy is done + rt_db_free_internal(&intern); + + // If we didn't alter the working comb tree, we're done. + if (!tree_altered && !dpi.iname.length()) { + rt_db_free_internal(in); + BU_PUT(in, struct rt_db_internal); + return; + } + + // If we DID alter the comb tree (typically we will) or we have an + // iname, we have to get the new tree on to disk. If this instance has + // an iname, we are not updating the existing object but instead + // creating a new one. + // + // At this point in processing, we can either rely on the uniqueness + // of the dp->instance mapping (vanilla push) or we use the inames to + // create new dp objects - i.e., at this point, we have enough information + // to make a unique 1-1 mapping between a struct directory pointer and + // the object information needed for a pushed object instance. + if (dpi.iname.length()) { + + // New name, new dp + dp = db_lookup(s->wdbp->dbip, dpi.iname.c_str(), LOOKUP_QUIET); + + if (dp != RT_DIR_NULL) { + // If we've already created the dp, we don't need to do so + // again. Theoretically this might happen if two separate + // branches of tree walking happen to produce the same instance + // in their trees. + rt_db_free_internal(in); + BU_PUT(in, struct rt_db_internal); + return; + } + + // Haven't already created this particular instance dp - proceed, + // but don't (yet) alter the database by writing the internal + // contents. That will be done with all other file changes at the + // end of processing. + dp = db_diradd(s->wdbp->dbip, dpi.iname.c_str(), RT_DIR_PHONY_ADDR, 0, dpi.dp->d_flags, (void *)&in->idb_type); + if (dp == RT_DIR_NULL) { + bu_log("Unable to add %s to the database directory", dpi.iname.c_str()); + rt_db_free_internal(in); + BU_PUT(in, struct rt_db_internal); + return; + } + } else { + // We're editing the existing tree - reuse dp + dp = dpi.dp; + } + + s->updated[dp] = in; + + } else { + + // If we're not copying the solid and not applying a matrix, we're done + if (!dpi.iname.length() && bn_mat_is_identity(dpi.mat)) + return; + + if (s->verbosity > 3 && s->msgs) { + if (dpi.iname.length()) { + bu_vls_printf(s->msgs, "Solid process %s->%s\n", dpi.parent_dp->d_namep, dpi.iname.c_str()); + } else { + bu_vls_printf(s->msgs, "Solid process %s->%s\n", dpi.parent_dp->d_namep, dpi.dp->d_namep); + } + } + + struct rt_db_internal *in; + BU_GET(in, struct rt_db_internal); + if (dpi.apply_to_solid) { + // If there is a non-IDN matrix, this is where we apply it + // First step, check for validity. + // + // Note: tor has a specific restriction in that it needs a uniform + // matrix - if I'm deciphering the code in rt_tor_import5 + // correctly, it handles this by simply ignoring a non-conforming + // matrix on import. As currently implemented, this limitation + // applies whether the matrix is above the torus in a given tree or + // an attempt is made to apply the matrix directly to the solid's + // parameters. + // + // Because the same bn_mat_is_non_unif matrix is ignored for a tor + // regardless of where the problem matrix is in the tree, trying to + // apply this matrix to the tor is not currently considered a + // "failure" - previously a "push" operation on such a tor would + // complete, clear the matrix from the tree, and simply skip + // applying the updates to the torus. This certainly is a failure + // to make the specified changes to the torus, but since the desired + // shape was never achieved in the tree with or without the matrix + // above it, the geometry the raytracer reports has not changed and + // the realized shape pre and post push is consistent. + // + // Accordingly, we're deliberately NOT checking for the tor+non_unif + // case in this validation step. + if (bn_mat_ck(dpi.dp->d_namep, dpi.mat) < 0) { + if (s->msgs) { + char *ps = db_path_to_string(dfp); + bu_vls_printf(s->msgs, "%s: attempting to apply a matrix that does does not preserve axis perpendicularity to solid %s\n", ps, dpi.dp->d_namep); + bu_free(ps, "path string"); + } + BU_PUT(in, struct rt_db_internal); + s->walk_error = true; + return; + } + + + if (s->verbosity > 3 && !bn_mat_is_identity(dpi.mat) && s->msgs) { + bn_mat_print_vls(dpi.dp->d_namep, dpi.mat, s->msgs); + bn_mat_print_vls("curr_mat", *curr_mat, s->msgs); + } + if (rt_db_get_internal(in, dpi.dp, s->wdbp->dbip, dpi.mat, &rt_uniresource) < 0) { + if (s->msgs) + bu_vls_printf(s->msgs, "Read error fetching '%s'\n", dpi.dp->d_namep); + BU_PUT(in, struct rt_db_internal); + s->walk_error = true; + return; + } + } else { + // If there is a non-IDN matrix, this is where we apply it + if (rt_db_get_internal(in, dpi.dp, s->wdbp->dbip, bn_mat_identity, &rt_uniresource) < 0) { + if (s->msgs) + bu_vls_printf(s->msgs, "Read error fetching '%s'\n", dpi.dp->d_namep); + BU_PUT(in, struct rt_db_internal); + s->walk_error = true; + return; + } + } + RT_CK_DB_INTERNAL(in); + + if (dpi.iname.length()) { + // If we have an iname, we need a new directory pointer. + dp = db_lookup(s->wdbp->dbip, dpi.iname.c_str(), LOOKUP_QUIET); + if (dp != RT_DIR_NULL) { + // If we've already created this, we're done + rt_db_free_internal(in); + BU_PUT(in, struct rt_db_internal); + return; + } + dp = db_diradd(s->wdbp->dbip, dpi.iname.c_str(), RT_DIR_PHONY_ADDR, 0, dpi.dp->d_flags, (void *)&in->idb_type); + if (dp == RT_DIR_NULL) { + if (s->msgs) + bu_vls_printf(s->msgs, "Unable to add %s to the database directory\n", dpi.iname.c_str()); + rt_db_free_internal(in); + BU_PUT(in, struct rt_db_internal); + s->walk_error = true; + return; + } + if (s->verbosity > 1 && s->msgs) + bu_vls_printf(s->msgs, "Write solid %s contents\n", dpi.iname.c_str()); + } else { + if (s->verbosity > 1 && s->msgs) + bu_vls_printf(s->msgs, "Write solid %s contents\n", dpi.dp->d_namep); + + dp = dpi.dp; + } + + s->updated[dp] = in; + + } +} + + +static void +npush_usage(struct bu_vls *str, struct bu_opt_desc *d) { + char *option_help = bu_opt_describe(d, NULL); + bu_vls_sprintf(str, "Usage: npush [options] obj\n"); + bu_vls_printf(str, "\nPushes position/rotation matrices 'down' the tree hierarchy, altering existing geometry as needed. Default behavior clears all matrices from tree, unless push requires creation of new geometry objects.\n\n"); + if (option_help) { + bu_vls_printf(str, "Options:\n%s\n", option_help); + bu_free(option_help, "help str"); + } +} + + +extern "C" int +ged_npush_core(struct ged *gedp, int argc, const char *argv[]) +{ + int print_help = 0; + int xpush = 0; + int to_regions = 0; + int to_solids = 0; + int max_depth = 0; + int verbosity = 0; + int local_changes_only = 0; + int dry_run = 0; + struct bu_opt_desc d[11]; + BU_OPT(d[0], "h", "help", "", NULL, &print_help, "Print help and exit"); + BU_OPT(d[1], "?", "", "", NULL, &print_help, ""); + BU_OPT(d[2], "v", "verbosity", "", &bu_opt_incr_long, &verbosity, "Increase output verbosity (multiple specifications of -v increase verbosity)"); + BU_OPT(d[3], "f", "force", "", NULL, &xpush, "Create new objects if needed to push matrices (xpush)"); + BU_OPT(d[4], "x", "xpush", "", NULL, &xpush, ""); + BU_OPT(d[5], "r", "regions", "", NULL, &to_regions, "Halt push at regions (matrix will be above region reference)"); + BU_OPT(d[6], "s", "solids", "", NULL, &to_solids, "Halt push at solids (matrix will be above solid reference)"); + BU_OPT(d[7], "d", "max-depth", "", &bu_opt_int, &max_depth, "Halt at depth # from tree root (matrix will be above item # layers deep)"); + BU_OPT(d[8], "L", "local", "", NULL, &local_changes_only, "Ensure push operations do not impact geometry outside the specified trees."); + BU_OPT(d[9], "D", "dry-run", "", NULL, &dry_run, "Calculate the changes but do not apply them."); + + BU_OPT_NULL(d[10]); + + /* Skip command name */ + argc--; argv++; + + /* parse standard options */ + int opt_ret = bu_opt_parse(NULL, argc, argv, d); + + if (!argc || print_help) { + struct bu_vls npush_help = BU_VLS_INIT_ZERO; + npush_usage(&npush_help, d); + bu_vls_sprintf(gedp->ged_result_str, "%s", bu_vls_cstr(&npush_help)); + bu_vls_free(&npush_help); + return GED_OK; + } + + /* adjust argc to match the leftovers of the options parsing */ + argc = opt_ret; + + GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); + GED_CHECK_READ_ONLY(gedp, GED_ERROR); + GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR); + struct db_i *dbip = gedp->ged_wdbp->dbip; + + /* Need nref current for db_ls to work */ + db_update_nref(dbip, &rt_uniresource); + + /* initialize result */ + bu_vls_trunc(gedp->ged_result_str, 0); + + + /* Based on the push arg list, walk the specified trees to identify + * instances involved with matrices */ + struct push_state s; + s.verbosity = verbosity; + s.tol = &gedp->ged_wdbp->wdb_tol; + s.max_depth = max_depth; + s.stop_at_regions = (to_regions) ? true : false; + s.stop_at_shapes = (to_solids) ? true : false; + s.dry_run = (dry_run) ? true : false; + s.wdbp = gedp->ged_wdbp; + s.msgs = gedp->ged_result_str; + for (int i = 0; i < argc; i++) { + s.target_objs.insert(std::string(argv[i])); + } + + + // Validate that no target_obj is underneath another target obj. Otherwise, + // multiple push operations may collide. + std::set::iterator s_it; + for (s_it = s.target_objs.begin(); s_it != s.target_objs.end(); s_it++) { + struct directory *dp = db_lookup(dbip, s_it->c_str(), LOOKUP_NOISY); + if (dp == RT_DIR_NULL) { + return GED_ERROR; + } + struct db_full_path *dfp; + BU_GET(dfp, struct db_full_path); + db_full_path_init(dfp); + db_add_node_to_full_path(dfp, dp); + validate_walk(dbip, dfp, &s); + if (!s.valid_push) { + if (BU_STR_EQUAL(dp->d_namep, s.problem_obj.c_str())) { + bu_vls_printf(gedp->ged_result_str, "NOTE: cyclic path found: %s is below itself", dp->d_namep); + } + db_free_full_path(dfp); + BU_PUT(dfp, struct db_full_path); + return GED_ERROR; + } + db_free_full_path(dfp); + BU_PUT(dfp, struct db_full_path); + } + + // Build an initial list of tops objects in the .g file. Push operations + // should not alter this top level list - any changes indicate a problem + // with the logic. + struct directory **all_paths; + int tops_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS, NULL, &all_paths); + std::set tops1; + for (int i = 0; i < tops_cnt; i++) { + tops1.insert(std::string(all_paths[i]->d_namep)); + } + + // Do a preliminary walk down the push objects to determine what impact the + // push operations would have on the comb trees and solids. + mat_t m; + for (s_it = s.target_objs.begin(); s_it != s.target_objs.end(); s_it++) { + MAT_IDN(m); + struct directory *dp = db_lookup(dbip, s_it->c_str(), LOOKUP_NOISY); + if (dp != RT_DIR_NULL && (dp->d_flags & RT_DIR_COMB)) { + struct db_full_path *dfp; + BU_GET(dfp, struct db_full_path); + db_full_path_init(dfp); + db_add_node_to_full_path(dfp, dp); + + push_walk(dfp, 0, &m, false, &s); + + db_free_full_path(dfp); + BU_PUT(dfp, struct db_full_path); + + /* Sanity - if we didn't end up with m back at the identity matrix, + * something went wrong with the walk */ + if (!bn_mat_is_equal(m, bn_mat_identity, &gedp->ged_wdbp->wdb_tol)) { + bu_vls_sprintf(gedp->ged_result_str, "Error - initial tree walk down %s finished with non-IDN matrix.\n", dp->d_namep); + bu_free(all_paths, "free db_ls output"); + return GED_ERROR; + } + } + } + + + if (local_changes_only) { + /* Because pushes have potentially global consequences, we provide an + * option that records ALL unique object instances in the database. + * That information will allow the push operation to tell if any given + * matrix push is self contained as-is or would require an object + * copy+rename to avoid changing geometry elsewhere in the .g database's + * trees. + */ + for (int i = 0; i < tops_cnt; i++) { + struct directory *dp = all_paths[i]; + if (s.target_objs.find(std::string(dp->d_namep)) == s.target_objs.end()) { + MAT_IDN(m); + + struct db_full_path *dfp; + BU_GET(dfp, struct db_full_path); + db_full_path_init(dfp); + db_add_node_to_full_path(dfp, dp); + + push_walk(dfp, 0, &m, true, &s); + + db_free_full_path(dfp); + BU_PUT(dfp, struct db_full_path); + } + } + } + + // We're done with the tops dps now - free the array. + bu_free(all_paths, "free db_ls output"); + + // Create a vector of unique instances for easier manipulation. + std::vector uniq_instances(s.instances.size()); + std::copy(s.instances.begin(), s.instances.end(), uniq_instances.begin()); + + // Iterate over unique instances and build sets of indices to instances + // sharing a common directory pointer. Any dp with multiple associated + // instances can't be pushed without a copy being made, as the unique dp + // instances represent multiple distinct volumes in space. + // + // Note: we assign the index to the instance because it has proven useful + // in debugging sorting behaviors for the dp_i class - if the initial + // insert had one answer but a subsequent set rebuild produces another, + // the index can help diagnose this. + std::map> i_cnt; + for (size_t i = 0; i < uniq_instances.size(); i++) { + uniq_instances[i].ind = i; + i_cnt[uniq_instances[i].dp].push_back(i); + } + + // If we don't have force-push on, and we have non-unique mapping between + // dp pointers and instances, we can't proceed. + if (!xpush) { + bool conflict = false; + struct bu_vls msgs = BU_VLS_INIT_ZERO; + for (size_t i = 0; i < uniq_instances.size(); i++) { + const dp_i &dpi = uniq_instances[i]; + + // If we're not looking at a push object, or the dp mapping is + // unique, we don't need a force push for this case. + if (!dpi.push_obj || i_cnt[dpi.dp].size() < 2) { + continue; + } + + // Push object with multiple mappings - this is the condition where + // xpush is needed. Since force is not enabled, we can't proceed. + conflict = true; + + // If we're not being verbose, the first failure means we can just + // immediately bail. + if (!verbosity) { + bu_vls_printf(gedp->ged_result_str, "Operation failed - force not enabled and one or more solids are being moved in conflicting directions by multiple comb instances."); + return GED_ERROR; + } + } + if (conflict) { + // If we haven't already bailed, verbosity settings indicate the user + // will want more information about the precise nature of the failure. + std::set reported; + for (size_t i = 0; i < uniq_instances.size(); i++) { + const dp_i &dpi = uniq_instances[i]; + // If not a problem case, skip + if (!dpi.push_obj || i_cnt[dpi.dp].size() < 2) { + continue; + } + + // If we have already reported on this dp's conflicts, skip + if (reported.find(dpi.dp) != reported.end()) + continue; + + // Reporting - mark so we don't repeat later + reported.insert(dpi.dp); + + // Handle various verbosity settings + if (s.verbosity > 1) { + bu_vls_printf(&msgs, "Conflicting instances found: %s->%s:\n", dpi.parent_dp->d_namep, dpi.dp->d_namep); + } else { + bu_vls_printf(&msgs, "Conflicting instances found: %s->%s\n", dpi.parent_dp->d_namep, dpi.dp->d_namep); + } + // Itemize the instances causing the failure (potentially quite + // verbose, so require a higher verbosity setting for this...) + if (s.verbosity > 1) { + for (size_t j = 0; j < i_cnt[dpi.dp].size(); j++) { + const dp_i &dpc = uniq_instances[i_cnt[dpi.dp][j]]; + struct bu_vls imat = BU_VLS_INIT_ZERO; + struct bu_vls ititle = BU_VLS_INIT_ZERO; + const char *title0 = "Initial instance"; + if (j == 0) { + bu_vls_printf(&ititle, "%s", title0); + } else { + bu_vls_printf(&ititle, "Conflicting Instance #%zd", j); + } + if (!dpc.push_obj) { + bu_vls_printf(&ititle, " (non-local)"); + } + bn_mat_print_vls(bu_vls_cstr(&ititle), dpc.mat, &imat); + bu_vls_printf(&msgs, "%s", bu_vls_cstr(&imat)); + bu_vls_free(&imat); + } + } + } + bu_vls_printf(gedp->ged_result_str, "%s\nOperation failed - force not enabled and one or more solids are being moved in conflicting directions by multiple comb instances.", bu_vls_cstr(&msgs)); + bu_vls_free(&msgs); + return GED_ERROR; + } + bu_vls_free(&msgs); + } + + // We need to assign new names for the instances we will be creating. Because we need these + // names to not collide with any existing database names (or each other) we build up a set + // of the current names: + std::set dbnames; + for (int i = 0; i < RT_DBNHASH; i++) { + struct directory *dp; + for (dp = gedp->ged_wdbp->dbip->dbi_Head[i]; dp != RT_DIR_NULL; dp = dp->d_forw) { + if (dp->d_namep) { + std::string dpn(dp->d_namep); + dbnames.insert(dpn); + } + } + } + + // New names for copies are only required if we have non-unique mappings between directory + // pointers and instances. + // + // This mechanism is convenient, because it is general - it handles both local (in-push) + // and non-local (global check, if enabled) instances and only generates new names for objects + // that will be pushed, without trying to rename "inactive" instances. + std::map>::iterator i_it; + for (i_it = i_cnt.begin(); i_it != i_cnt.end(); i_it++) { + if (i_it->second.size() == 1) + continue; + + // If we have anything we're NOT pushing, that means we need to rename + // all the push objects. + bool have_nopush = false; + for (size_t i = 0; i < i_it->second.size(); i++) { + dp_i &dpi = uniq_instances[i_it->second[i]]; + if (!dpi.push_obj) + have_nopush = true; + } + // Don't rename the first object in the list if we're pushing all of + // the instances, since there is no need to rename it to avoid a + // conflict - we're renaming everything else. + int ilabel = 0; + size_t istart = (have_nopush) ? 0 : 1; + for (size_t i = istart; i < i_it->second.size(); i++) { + dp_i &dpi = uniq_instances[i_it->second[i]]; + if (!dpi.push_obj) + continue; + std::string iname = std::string(dpi.dp->d_namep) + std::string("_") + std::to_string(ilabel); + while (dbnames.find(iname) != dbnames.end() && ilabel < INT_MAX) { + ilabel++; + iname = std::string(dpi.dp->d_namep) + std::string("_") + std::to_string(ilabel); + } + if (ilabel == INT_MAX) { + // Strange name generation failure... + bu_vls_printf(gedp->ged_result_str, "Unable to generate valid push name for %s\n", dpi.dp->d_namep); + return GED_ERROR; + } + dbnames.insert(iname); + dpi.iname = iname; + } + } + + // Clear the set and repopulate it, so any lookups into the set will find + // dp_i containers containing any inames the above logic may have assigned. + s.instances.clear(); + s.instances.insert(uniq_instances.begin(), uniq_instances.end()); + + // For debugging purposes, with a high enough verbosity print out the state + // of the instances set ahead of the final tree walk so we know what to + // expect. + if (s.verbosity > 4 && s.msgs) { + std::set::iterator in_it; + bu_log("\n\n\nDirectory pointer instance set (final state before application walk):\n\n"); + for (in_it = s.instances.begin(); in_it != s.instances.end(); in_it++) { + const dp_i &dpi = *in_it; + if (!dpi.push_obj) + continue; + if (dpi.iname.length()) { + if (!dpi.is_leaf && (dpi.dp->d_flags & RT_DIR_COMB)) { + bu_vls_printf(s.msgs, "%s tree edited && matrix to IDN\n", dpi.iname.c_str()); + } + if (dpi.is_leaf && !bn_mat_is_equal(dpi.mat, bn_mat_identity, s.tol)) { + bu_vls_printf(s.msgs, "%s\n", dpi.iname.c_str()); + bn_mat_print_vls("applied", dpi.mat, s.msgs); + } + } else { + if (!dpi.is_leaf && (dpi.dp->d_flags & RT_DIR_COMB)) { + bu_vls_printf(s.msgs, "%s matrix to IDN\n", dpi.dp->d_namep); + } + if (dpi.is_leaf && !bn_mat_is_equal(dpi.mat, bn_mat_identity, s.tol)) { + bu_vls_printf(s.msgs, "%s\n", dpi.dp->d_namep); + bn_mat_print_vls("applied", dpi.mat, s.msgs); + } + } + } + } + + + // Walk a final time to characterize the state of the comb trees in light + // of the changes made to handle pushed information. + for (s_it = s.target_objs.begin(); s_it != s.target_objs.end(); s_it++) { + struct directory *dp = db_lookup(dbip, s_it->c_str(), LOOKUP_NOISY); + if (dp != RT_DIR_NULL && (dp->d_flags & RT_DIR_COMB)) { + // All walks start with an identity matrix. + MAT_IDN(m); + // We are now working with instances, not the raw directory + // pointers. Because by definition the top level object is an + // identity matrix object, we initialize a dp_i with the identity + // form of the object to "seed" the tree walk. + dp_i ldpi; + ldpi.dp = dp; + MAT_IDN(ldpi.mat); + ldpi.tol = s.tol; + + struct db_full_path *dfp; + BU_GET(dfp, struct db_full_path); + db_full_path_init(dfp); + db_add_node_to_full_path(dfp, dp); + + // Start the walk. + tree_update_walk(ldpi, dfp, 0, &m, &s); + + db_free_full_path(dfp); + BU_PUT(dfp, struct db_full_path); + + } + } + + // If anything went wrong, there's no point in going any further. + if (s.walk_error) { + bu_vls_printf(gedp->ged_result_str, "Fatal error preparing new trees\n"); + std::map::iterator uf_it; + for (uf_it = s.updated.begin(); uf_it != s.updated.end(); uf_it++) { + struct rt_db_internal *in = uf_it->second; + rt_db_free_internal(in); + BU_PUT(in, struct rt_db_internal); + } + return GED_ERROR; + } + + /* We now know everything we need. For combs and primitives that have updates + * or are being newly created apply those changes to the .g file. Because this + * step is destructive, it is carried out only after all characterization steps + * are complete in order to avoid any risk of changing what is being analyzed + * mid-stream. (Problems of that nature are not always simple to observe, and + * can be *very* difficult to debug.) */ + std::map::iterator u_it; + for (u_it = s.updated.begin(); u_it != s.updated.end(); u_it++) { + struct directory *dp = u_it->first; + if (s.verbosity > 4) { + bu_log("Writing %s to database\n", dp->d_namep); + } + struct rt_db_internal *in = u_it->second; + if (!s.dry_run) { + if (rt_db_put_internal(dp, s.wdbp->dbip, in, s.wdbp->wdb_resp) < 0) { + bu_log("Unable to store %s to the database", dp->d_namep); + } + } else { + // Delete the directory pointers we set up - dry run, so we're not + // actually creating the objects. + db_dirdelete(gedp->ged_wdbp->dbip, dp); + } + rt_db_free_internal(in); + BU_PUT(in, struct rt_db_internal); + } + + // We've written to the database - everything should be finalized now. Do a final + // validation check. + s.valid_push = true; + s.final_check = true; + for (s_it = s.target_objs.begin(); s_it != s.target_objs.end(); s_it++) { + struct directory *dp = db_lookup(dbip, s_it->c_str(), LOOKUP_NOISY); + struct db_full_path *dfp; + BU_GET(dfp, struct db_full_path); + db_full_path_init(dfp); + db_add_node_to_full_path(dfp, dp); + validate_walk(dbip, dfp, &s); + db_free_full_path(dfp); + BU_PUT(dfp, struct db_full_path); + } + if (!s.valid_push) { + bu_vls_printf(gedp->ged_result_str, "failed to generate one or more objects listed in pushed trees."); + return GED_ERROR; + } + + // Writing done - update nref again to reflect changes + db_update_nref(dbip, &rt_uniresource); + + // Repeat the db_ls call and verify it is consistent. + struct directory **final_paths; + int final_tops_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS, NULL, &final_paths); + std::set tops2; + for (int i = 0; i < final_tops_cnt; i++) { + tops2.insert(std::string(final_paths[i]->d_namep)); + } + bu_free(final_paths, "free db_ls output"); + + // Report any differences + std::set removed_tops, added_tops; + std::set_difference(tops1.begin(), tops1.end(), tops2.begin(), tops2.end(), std::inserter(removed_tops, removed_tops.end())); + std::set_difference(tops2.begin(), tops2.end(), tops1.begin(), tops1.end(), std::inserter(added_tops, added_tops.end())); + for (s_it = removed_tops.begin(); s_it != removed_tops.end(); s_it++) { + bu_vls_sprintf(gedp->ged_result_str, "Error: object %s is no longer a tops object\n", (*s_it).c_str()); + } + for (s_it = added_tops.begin(); s_it != added_tops.end(); s_it++) { + bu_vls_sprintf(gedp->ged_result_str, "Error: object %s is now a tops object\n", (*s_it).c_str()); + } + + if (removed_tops.size() || added_tops.size()) { + return GED_ERROR; + } + + return GED_OK; +} + +extern "C" { +#ifdef GED_PLUGIN +#include "../include/plugin.h" +struct ged_cmd_impl npush_cmd_impl = { + "npush", + ged_npush_core, + GED_CMD_DEFAULT +}; + +const struct ged_cmd npush_cmd = { &npush_cmd_impl }; +const struct ged_cmd *npush_cmds[] = { &npush_cmd, NULL }; + +static const struct ged_plugin pinfo = { GED_API, npush_cmds, 1 }; + +COMPILER_DLLEXPORT const struct ged_plugin *ged_plugin_info() +{ + return &pinfo; +} +#endif /* GED_PLUGIN */ +} + +/* + * Local Variables: + * mode: C + * tab-width: 8 + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libged/ocenter/ocenter.c b/src/libged/ocenter/ocenter.c index e9abff50132..5b7e824dc73 100644 --- a/src/libged/ocenter/ocenter.c +++ b/src/libged/ocenter/ocenter.c @@ -1,7 +1,7 @@ /* O C E N T E R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/open/open.c b/src/libged/open/open.c index ef5c6f60fc3..bfa254d859c 100644 --- a/src/libged/open/open.c +++ b/src/libged/open/open.c @@ -1,7 +1,7 @@ /* O P E N . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/orient/orient.c b/src/libged/orient/orient.c index 8ab7fcee91a..6c3183a3af2 100644 --- a/src/libged/orient/orient.c +++ b/src/libged/orient/orient.c @@ -1,7 +1,7 @@ /* O R I E N T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/orotate/orotate.c b/src/libged/orotate/orotate.c index eaaddbb482f..2e188eb79ca 100644 --- a/src/libged/orotate/orotate.c +++ b/src/libged/orotate/orotate.c @@ -1,7 +1,7 @@ /* O R O T A T E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/oscale/oscale.c b/src/libged/oscale/oscale.c index e8d11892f3d..cdf194bbe02 100644 --- a/src/libged/oscale/oscale.c +++ b/src/libged/oscale/oscale.c @@ -1,7 +1,7 @@ /* O S C A L E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/osg.cpp b/src/libged/osg.cpp old mode 100755 new mode 100644 index 80ae30d6d6a..2ce3158c813 --- a/src/libged/osg.cpp +++ b/src/libged/osg.cpp @@ -1,7 +1,7 @@ /* O S G . C P P * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/otranslate/otranslate.c b/src/libged/otranslate/otranslate.c index 532a6b6d057..5c95005d0ec 100644 --- a/src/libged/otranslate/otranslate.c +++ b/src/libged/otranslate/otranslate.c @@ -1,7 +1,7 @@ /* O T R A N S L A T E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/overlay/overlay.c b/src/libged/overlay/overlay.c index fc506a9980c..e278a7105e1 100644 --- a/src/libged/overlay/overlay.c +++ b/src/libged/overlay/overlay.c @@ -1,7 +1,7 @@ /* O V E R L A Y . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -241,7 +241,7 @@ ged_overlay_core(struct ged *gedp, int argc, const char *argv[]) bu_vls_printf(gedp->ged_result_str, "unable to stat input file"); return GED_ERROR; } - unsigned long lwidth, lheight; + size_t lwidth, lheight; if (!icv_image_size(NULL, 0, (size_t)sbuf.st_size, type, &lwidth, &lheight)) { bu_vls_printf(gedp->ged_result_str, "input image type does not have dimension information encoded, and libicv was not able to deduce a size. Please specify image width in pixels with the \"-w\" option and image height in pixels with the \"-n\" option.\n"); return GED_ERROR; diff --git a/src/libged/path.c b/src/libged/path.c index 5bbd47988f4..c1d5ae03adb 100644 --- a/src/libged/path.c +++ b/src/libged/path.c @@ -1,7 +1,7 @@ /* P A T H . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pathlist/pathlist.c b/src/libged/pathlist/pathlist.c index 4f9ff839ad6..07ebdcfabfa 100644 --- a/src/libged/pathlist/pathlist.c +++ b/src/libged/pathlist/pathlist.c @@ -1,7 +1,7 @@ /* P A T H L I S T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pathsum/pathsum.c b/src/libged/pathsum/pathsum.c index a8a2415bc8d..ff6e0363a8a 100644 --- a/src/libged/pathsum/pathsum.c +++ b/src/libged/pathsum/pathsum.c @@ -1,7 +1,7 @@ /* P A T H S U M . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/perspective/perspective.c b/src/libged/perspective/perspective.c index f60c163c608..4335c68930d 100644 --- a/src/libged/perspective/perspective.c +++ b/src/libged/perspective/perspective.c @@ -1,7 +1,7 @@ /* P E R S P E C T I V E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pipe.c b/src/libged/pipe.c index f28f4dadc2a..02c95f2390b 100644 --- a/src/libged/pipe.c +++ b/src/libged/pipe.c @@ -1,7 +1,7 @@ /* P I P E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/pipe/pipe.c b/src/libged/pipe/pipe.c index 3b61babd840..48f96df30e8 100644 --- a/src/libged/pipe/pipe.c +++ b/src/libged/pipe/pipe.c @@ -1,7 +1,7 @@ /* E D P I P E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/pix2fb/pix2fb.c b/src/libged/pix2fb/pix2fb.c index e8517fa10c8..acf73aa492f 100644 --- a/src/libged/pix2fb/pix2fb.c +++ b/src/libged/pix2fb/pix2fb.c @@ -1,7 +1,7 @@ /* P I X 2 F B . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/plot/plot.c b/src/libged/plot/plot.c index 1644437a8d9..ec4f5cb41c5 100644 --- a/src/libged/plot/plot.c +++ b/src/libged/plot/plot.c @@ -1,7 +1,7 @@ /* P L O T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pmat/pmat.c b/src/libged/pmat/pmat.c index fd5187ad9ce..c16a509f2db 100644 --- a/src/libged/pmat/pmat.c +++ b/src/libged/pmat/pmat.c @@ -1,7 +1,7 @@ /* P M A T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pmodel2view/pmodel2view.c b/src/libged/pmodel2view/pmodel2view.c index 1090b9770ca..8993bdf3344 100644 --- a/src/libged/pmodel2view/pmodel2view.c +++ b/src/libged/pmodel2view/pmodel2view.c @@ -1,7 +1,7 @@ /* P M O D E L 2 V I E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/png/png.c b/src/libged/png/png.c index 59616f4bec5..5f2759d1167 100644 --- a/src/libged/png/png.c +++ b/src/libged/png/png.c @@ -1,7 +1,7 @@ /* P N G . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/png2fb/png2fb.c b/src/libged/png2fb/png2fb.c index 293c62eeff8..a56035664bc 100644 --- a/src/libged/png2fb/png2fb.c +++ b/src/libged/png2fb/png2fb.c @@ -1,7 +1,7 @@ /* P N G - F B . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/pnts/pnts.cpp b/src/libged/pnts/pnts.cpp index 5523b332289..c1cfea297a7 100644 --- a/src/libged/pnts/pnts.cpp +++ b/src/libged/pnts/pnts.cpp @@ -1,7 +1,7 @@ /* P N T S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pnts_util.c b/src/libged/pnts_util.c index 4d199d160c9..5218b0ece93 100644 --- a/src/libged/pnts_util.c +++ b/src/libged/pnts_util.c @@ -1,7 +1,7 @@ /* P N T S _ U T I L. C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -392,6 +392,91 @@ _ged_pnts_add(struct rt_pnts_internal *pnts, void *point) } } +void * +_ged_pnts_dup(void *point, rt_pnt_type type) +{ + void *npnt = NULL; + struct pnt *pstd, *pstdnew = NULL; + struct pnt_color *pc, *pcnew = NULL; + struct pnt_scale *ps, *psnew = NULL; + struct pnt_normal *pn, *pnnew = NULL; + struct pnt_color_scale *pcs, *pcsnew = NULL; + struct pnt_color_normal *pcn, *pcnnew = NULL; + struct pnt_scale_normal *psn, *psnnew = NULL; + struct pnt_color_scale_normal *pcsn, *pcsnnew = NULL; + + switch (type) { + case RT_PNT_TYPE_PNT: + pstd = (struct pnt *)point; + npnt = _ged_pnts_new_pnt(type); + pstdnew = (struct pnt *)npnt; + VMOVE(pstdnew->v, pstd->v); + break; + case RT_PNT_TYPE_COL: + pc = (struct pnt_color *)point; + npnt = _ged_pnts_new_pnt(type); + pcnew = (struct pnt_color *)npnt; + VMOVE(pcnew->v, pc->v); + pcnew->c.buc_rgb[0] = pc->c.buc_rgb[0]; + pcnew->c.buc_rgb[1] = pc->c.buc_rgb[1]; + pcnew->c.buc_rgb[2] = pc->c.buc_rgb[2]; + break; + case RT_PNT_TYPE_SCA: + ps = (struct pnt_scale *)point; + npnt = _ged_pnts_new_pnt(type); + psnew = (struct pnt_scale *)npnt; + VMOVE(psnew->v, ps->v); + psnew->s = ps->s; + break; + case RT_PNT_TYPE_NRM: + pn = (struct pnt_normal *)point; + npnt = _ged_pnts_new_pnt(type); + pnnew = (struct pnt_normal *)npnt; + VMOVE(pnnew->v, pn->v); + VMOVE(pnnew->n, pn->n); + break; + case RT_PNT_TYPE_COL_SCA: + pcs = (struct pnt_color_scale *)point; + npnt = _ged_pnts_new_pnt(type); + pcsnew = (struct pnt_color_scale *)npnt; + VMOVE(pcsnew->v, pcs->v); + pcsnew->c.buc_rgb[0] = pcs->c.buc_rgb[0]; + pcsnew->c.buc_rgb[1] = pcs->c.buc_rgb[1]; + pcsnew->c.buc_rgb[2] = pcs->c.buc_rgb[2]; + pcsnew->s = pcs->s; + break; + case RT_PNT_TYPE_COL_NRM: + pcn = (struct pnt_color_normal *)point; + npnt = _ged_pnts_new_pnt(type); + pcnnew = (struct pnt_color_normal *)npnt; + VMOVE(pcnnew->v, pcn->v); + VMOVE(pcnnew->n, pcn->n); + break; + case RT_PNT_TYPE_SCA_NRM: + psn = (struct pnt_scale_normal *)point; + npnt = _ged_pnts_new_pnt(type); + psnnew = (struct pnt_scale_normal *)npnt; + VMOVE(psnnew->v, psn->v); + psnnew->s = psn->s; + VMOVE(psnnew->n, psn->n); + break; + case RT_PNT_TYPE_COL_SCA_NRM: + pcsn = (struct pnt_color_scale_normal *)point; + npnt = _ged_pnts_new_pnt(type); + pcsnnew = (struct pnt_color_scale_normal *)npnt; + VMOVE(pcsnnew->v, pcsn->v); + pcsnnew->c.buc_rgb[0] = pcsn->c.buc_rgb[0]; + pcsnnew->c.buc_rgb[1] = pcsn->c.buc_rgb[1]; + pcsnnew->c.buc_rgb[2] = pcsn->c.buc_rgb[2]; + pcsnnew->s = pcsn->s; + VMOVE(pcsnnew->n, pcsn->n); + break; + default: + break; + } + return npnt; +} + /* * Local Variables: * tab-width: 8 diff --git a/src/libged/pnts_util.h b/src/libged/pnts_util.h index dae36d1efd0..21f225b924d 100644 --- a/src/libged/pnts_util.h +++ b/src/libged/pnts_util.h @@ -1,7 +1,7 @@ /* P N T S _ U T I L. H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -60,6 +60,8 @@ GED_EXPORT extern void * _ged_pnts_new_pnt(rt_pnt_type t); GED_EXPORT extern void _ged_pnts_add(struct rt_pnts_internal *pnts, void *point); +GED_EXPORT extern void * _ged_pnts_dup(void *point, rt_pnt_type t); + __END_DECLS #endif //LIBGED_PNT_GED_PRIVATE_H diff --git a/src/libged/polyclip.cpp b/src/libged/polyclip.cpp index 3d33252be0c..43c9be2aa1a 100644 --- a/src/libged/polyclip.cpp +++ b/src/libged/polyclip.cpp @@ -1,7 +1,7 @@ /* P O L Y C L I P . C P P * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/prcolor/prcolor.c b/src/libged/prcolor/prcolor.c index 6b1382262dd..b5524db394d 100644 --- a/src/libged/prcolor/prcolor.c +++ b/src/libged/prcolor/prcolor.c @@ -1,7 +1,7 @@ /* P R C O L O R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/prefix/prefix.c b/src/libged/prefix/prefix.c index a224bc976e5..2cff39c91a3 100644 --- a/src/libged/prefix/prefix.c +++ b/src/libged/prefix/prefix.c @@ -1,7 +1,7 @@ /* P R E F I X . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/process/process.c b/src/libged/process/process.c index 9d8ea466891..88f0aeaf743 100644 --- a/src/libged/process/process.c +++ b/src/libged/process/process.c @@ -1,7 +1,7 @@ /* P R O C E S S . C * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/protate/protate.c b/src/libged/protate/protate.c index 934fc7847f8..5ada959fa10 100644 --- a/src/libged/protate/protate.c +++ b/src/libged/protate/protate.c @@ -1,7 +1,7 @@ /* P R O T A T E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/ps/ps.c b/src/libged/ps/ps.c index 52633ec1417..8ad14985373 100644 --- a/src/libged/ps/ps.c +++ b/src/libged/ps/ps.c @@ -1,7 +1,7 @@ /* P S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/pscale.c b/src/libged/pscale/pscale.c index 7bfebb980e8..35a01bc697e 100644 --- a/src/libged/pscale/pscale.c +++ b/src/libged/pscale/pscale.c @@ -1,7 +1,7 @@ /* P S C A L E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/pscale.h b/src/libged/pscale/pscale.h index 198856b055e..318902079ad 100644 --- a/src/libged/pscale/pscale.h +++ b/src/libged/pscale/pscale.h @@ -1,7 +1,7 @@ /* P S C A L E . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_ehy.c b/src/libged/pscale/scale_ehy.c index ac88ba59ffc..d5cdb9fc98b 100644 --- a/src/libged/pscale/scale_ehy.c +++ b/src/libged/pscale/scale_ehy.c @@ -1,7 +1,7 @@ /* S C A L E _ E H Y . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_ell.c b/src/libged/pscale/scale_ell.c index ff156c51d19..5b6207eea79 100644 --- a/src/libged/pscale/scale_ell.c +++ b/src/libged/pscale/scale_ell.c @@ -1,7 +1,7 @@ /* S C A L E _ E L L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_epa.c b/src/libged/pscale/scale_epa.c index 344efc8ec9e..816b908490c 100644 --- a/src/libged/pscale/scale_epa.c +++ b/src/libged/pscale/scale_epa.c @@ -1,7 +1,7 @@ /* S C A L E _ E P A . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_eto.c b/src/libged/pscale/scale_eto.c index 946adad069e..e2f0964907a 100644 --- a/src/libged/pscale/scale_eto.c +++ b/src/libged/pscale/scale_eto.c @@ -1,7 +1,7 @@ /* S C A L E _ E T O . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_extrude.c b/src/libged/pscale/scale_extrude.c index 3c6c8ede5dc..317c4692ed6 100644 --- a/src/libged/pscale/scale_extrude.c +++ b/src/libged/pscale/scale_extrude.c @@ -1,7 +1,7 @@ /* S C A L E _ E X T R U D E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_hyp.c b/src/libged/pscale/scale_hyp.c index 934fe9ed59a..6bfcb078846 100644 --- a/src/libged/pscale/scale_hyp.c +++ b/src/libged/pscale/scale_hyp.c @@ -1,7 +1,7 @@ /* S C A L E _ H Y P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_part.c b/src/libged/pscale/scale_part.c index a47e70de7ae..702ff04b17d 100644 --- a/src/libged/pscale/scale_part.c +++ b/src/libged/pscale/scale_part.c @@ -1,7 +1,7 @@ /* S C A L E _ P A R T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_rhc.c b/src/libged/pscale/scale_rhc.c index 1040deadddd..7d31fbee467 100644 --- a/src/libged/pscale/scale_rhc.c +++ b/src/libged/pscale/scale_rhc.c @@ -1,7 +1,7 @@ /* S C A L E _ R H C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_rpc.c b/src/libged/pscale/scale_rpc.c index f8435c731c6..ba515555136 100644 --- a/src/libged/pscale/scale_rpc.c +++ b/src/libged/pscale/scale_rpc.c @@ -1,7 +1,7 @@ /* S C A L E _ R P C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_superell.c b/src/libged/pscale/scale_superell.c index 1d1c25876ad..0fbb08d319c 100644 --- a/src/libged/pscale/scale_superell.c +++ b/src/libged/pscale/scale_superell.c @@ -1,7 +1,7 @@ /* S C A L E _ S U P E R E L L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_tgc.c b/src/libged/pscale/scale_tgc.c index fa84d071e47..56dc3bbb108 100644 --- a/src/libged/pscale/scale_tgc.c +++ b/src/libged/pscale/scale_tgc.c @@ -1,7 +1,7 @@ /* S C A L E _ T G C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pscale/scale_tor.c b/src/libged/pscale/scale_tor.c index 7402575c727..776bfd5a334 100644 --- a/src/libged/pscale/scale_tor.c +++ b/src/libged/pscale/scale_tor.c @@ -1,7 +1,7 @@ /* S C A L E _ T O R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pset/pset.c b/src/libged/pset/pset.c index d101d99aa80..646f2eed388 100644 --- a/src/libged/pset/pset.c +++ b/src/libged/pset/pset.c @@ -1,7 +1,7 @@ /* P S E T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/ptranslate/ptranslate.c b/src/libged/ptranslate/ptranslate.c index 55282f4cef1..d595b274408 100644 --- a/src/libged/ptranslate/ptranslate.c +++ b/src/libged/ptranslate/ptranslate.c @@ -1,7 +1,7 @@ /* P T R A N S L A T E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/pull/pull.c b/src/libged/pull/pull.c index 904faac1404..277e085e2ac 100644 --- a/src/libged/pull/pull.c +++ b/src/libged/pull/pull.c @@ -1,7 +1,7 @@ /* P U L L . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/push/push.c b/src/libged/push/push.c index ad2918b6c05..652f84bd931 100644 --- a/src/libged/push/push.c +++ b/src/libged/push/push.c @@ -1,7 +1,7 @@ /* P U S H . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/put/put.c b/src/libged/put/put.c index d6a95aba4f6..8d77514af41 100644 --- a/src/libged/put/put.c +++ b/src/libged/put/put.c @@ -1,7 +1,7 @@ /* P U T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/put_comb/put_comb.c b/src/libged/put_comb/put_comb.c index 7d4ce018178..f8561432c2d 100644 --- a/src/libged/put_comb/put_comb.c +++ b/src/libged/put_comb/put_comb.c @@ -1,7 +1,7 @@ /* P U T _ C O M B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/putmat/putmat.c b/src/libged/putmat/putmat.c index 6a42abb20f4..5cb11147ce0 100644 --- a/src/libged/putmat/putmat.c +++ b/src/libged/putmat/putmat.c @@ -1,7 +1,7 @@ /* P U T M A T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/qray.c b/src/libged/qray.c index d6a2386b661..735c11eb8f5 100644 --- a/src/libged/qray.c +++ b/src/libged/qray.c @@ -1,7 +1,7 @@ /* Q R A Y . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/qray.h b/src/libged/qray.h index 869efa2a4bc..c30c1a240a5 100644 --- a/src/libged/qray.h +++ b/src/libged/qray.h @@ -1,7 +1,7 @@ /* Q R A Y . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/qray/qray.c b/src/libged/qray/qray.c index 0109f9e2658..5b901a7c6f5 100644 --- a/src/libged/qray/qray.c +++ b/src/libged/qray/qray.c @@ -1,7 +1,7 @@ /* Q R A Y . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/qvrot/qvrot.c b/src/libged/qvrot/qvrot.c index f3217a472c4..ba069288b25 100644 --- a/src/libged/qvrot/qvrot.c +++ b/src/libged/qvrot/qvrot.c @@ -1,7 +1,7 @@ /* Q V R O T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rcodes/rcodes.c b/src/libged/rcodes/rcodes.c index c5c759ee618..3fec262ac2a 100644 --- a/src/libged/rcodes/rcodes.c +++ b/src/libged/rcodes/rcodes.c @@ -1,7 +1,7 @@ /* R C O D E S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rect/rect.c b/src/libged/rect/rect.c index af3e9343d51..b8643c2ff12 100644 --- a/src/libged/rect/rect.c +++ b/src/libged/rect/rect.c @@ -1,7 +1,7 @@ /* R E C T . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libged/red/red.c b/src/libged/red/red.c index 124db9dae53..809ee9815ed 100644 --- a/src/libged/red/red.c +++ b/src/libged/red/red.c @@ -1,7 +1,7 @@ /* R E D . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/regdef/regdef.c b/src/libged/regdef/regdef.c index 8d81ac248a7..364629e382f 100644 --- a/src/libged/regdef/regdef.c +++ b/src/libged/regdef/regdef.c @@ -1,7 +1,7 @@ /* R E G D E F . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/region/region.c b/src/libged/region/region.c index b1cf99328cc..aadbff029a1 100644 --- a/src/libged/region/region.c +++ b/src/libged/region/region.c @@ -1,7 +1,7 @@ /* R E G I O N . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/remove/remove.c b/src/libged/remove/remove.c index ffd3e0767ca..57f247dd750 100644 --- a/src/libged/remove/remove.c +++ b/src/libged/remove/remove.c @@ -1,7 +1,7 @@ /* R E M O V E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rfarb/rfarb.c b/src/libged/rfarb/rfarb.c index 818ec3521f5..9fba0fa00f5 100644 --- a/src/libged/rfarb/rfarb.c +++ b/src/libged/rfarb/rfarb.c @@ -1,7 +1,7 @@ /* R F A R B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rmap/rmap.c b/src/libged/rmap/rmap.c index 68302f261d2..787f6f96f57 100644 --- a/src/libged/rmap/rmap.c +++ b/src/libged/rmap/rmap.c @@ -1,7 +1,7 @@ /* R M A P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rmat/rmat.c b/src/libged/rmat/rmat.c index 45d958ff520..fd00e5a2703 100644 --- a/src/libged/rmat/rmat.c +++ b/src/libged/rmat/rmat.c @@ -1,7 +1,7 @@ /* R M A T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rmater/rmater.c b/src/libged/rmater/rmater.c index 9b52edcbbbf..27cb5965d6e 100644 --- a/src/libged/rmater/rmater.c +++ b/src/libged/rmater/rmater.c @@ -1,7 +1,7 @@ /* R M A T E R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rot/rot.c b/src/libged/rot/rot.c index 839fc38c314..0d8fc8a1ec4 100644 --- a/src/libged/rot/rot.c +++ b/src/libged/rot/rot.c @@ -1,7 +1,7 @@ /* R O T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rot/rotate_about.c b/src/libged/rot/rotate_about.c index 5844ab89784..9ccd47f3dd0 100644 --- a/src/libged/rot/rotate_about.c +++ b/src/libged/rot/rotate_about.c @@ -1,7 +1,7 @@ /* R O T A T E _ A B O U T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rot_point/rot_point.c b/src/libged/rot_point/rot_point.c index d425995da0d..1c52f83f961 100644 --- a/src/libged/rot_point/rot_point.c +++ b/src/libged/rot_point/rot_point.c @@ -1,7 +1,7 @@ /* R O T _ P O I N T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rotate_eto.c b/src/libged/rotate_eto.c index e13514f4a27..8b62781df39 100644 --- a/src/libged/rotate_eto.c +++ b/src/libged/rotate_eto.c @@ -1,7 +1,7 @@ /* R O T A T E _ E T O . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rotate_extrude.c b/src/libged/rotate_extrude.c index 2ea8615fe37..114279b0508 100644 --- a/src/libged/rotate_extrude.c +++ b/src/libged/rotate_extrude.c @@ -1,7 +1,7 @@ /* R O T A T E _ E X T R U D E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rotate_hyp.c b/src/libged/rotate_hyp.c index a47ff7e1957..d0a8a809677 100644 --- a/src/libged/rotate_hyp.c +++ b/src/libged/rotate_hyp.c @@ -1,7 +1,7 @@ /* R O T A T E _ H Y P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rotate_tgc.c b/src/libged/rotate_tgc.c index ee2db1ddb28..37d880abe6d 100644 --- a/src/libged/rotate_tgc.c +++ b/src/libged/rotate_tgc.c @@ -1,7 +1,7 @@ /* R O T A T E _ T G C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rrt/rrt.c b/src/libged/rrt/rrt.c index 9330874a826..9ae295eb803 100644 --- a/src/libged/rrt/rrt.c +++ b/src/libged/rrt/rrt.c @@ -1,7 +1,7 @@ /* R R T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rt/rt.c b/src/libged/rt/rt.c index 06ade202c06..f267d921073 100644 --- a/src/libged/rt/rt.c +++ b/src/libged/rt/rt.c @@ -1,7 +1,7 @@ /* R T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -65,7 +65,7 @@ ged_rt_core(struct ged *gedp, int argc, const char *argv[]) args = argc + 7 + 2 + ged_who_argc(gedp); gd_rt_cmd = (char **)bu_calloc(args, sizeof(char *), "alloc gd_rt_cmd"); - bin = bu_brlcad_root("bin", 1); + bin = bu_dir(NULL, 0, BU_DIR_BIN, NULL); if (bin) { snprintf(rt, 256, "%s/%s", bin, argv[0]); } diff --git a/src/libged/rtabort/rtabort.c b/src/libged/rtabort/rtabort.c index 7c88d756b75..4b7598c5eaf 100644 --- a/src/libged/rtabort/rtabort.c +++ b/src/libged/rtabort/rtabort.c @@ -1,7 +1,7 @@ /* R T A B O R T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/rtcheck/rtcheck.c b/src/libged/rtcheck/rtcheck.c index a5e6a317017..8149d5c74d3 100644 --- a/src/libged/rtcheck/rtcheck.c +++ b/src/libged/rtcheck/rtcheck.c @@ -1,7 +1,7 @@ /* R T C H E C K . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -199,7 +199,7 @@ ged_rtcheck_core(struct ged *gedp, int argc, const char *argv[]) /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); - bin = bu_brlcad_root("bin", 1); + bin = bu_dir(NULL, 0, BU_DIR_BIN, NULL); if (bin) { snprintf(rtcheck, 256, "%s/%s", bin, argv[0]); } @@ -272,6 +272,10 @@ ged_rtcheck_core(struct ged *gedp, int argc, const char *argv[]) rtcp->rrtp->p = p; rtcp->rrtp->aborted = 0; rtcp->rrtp->gedp = gedp; + rtcp->rrtp->stdin_active = 0; + rtcp->rrtp->stdout_active = 0; + rtcp->rrtp->stderr_active = 0; + if (gedp->ged_create_io_handler) { (*gedp->ged_create_io_handler)(rtcp->rrtp, BU_PROCESS_STDOUT, rtcheck_vector_handler, (void *)rtcp); } diff --git a/src/libged/rtwizard/rtwizard.c b/src/libged/rtwizard/rtwizard.c index 7cbac15ccdb..51c2a1c92d4 100644 --- a/src/libged/rtwizard/rtwizard.c +++ b/src/libged/rtwizard/rtwizard.c @@ -1,7 +1,7 @@ /* R T W I Z A R D . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -57,6 +57,9 @@ _ged_run_rtwizard(struct ged *gedp, int cmd_len, const char **gd_rt_cmd) BU_GET(run_rtp, struct ged_subprocess); run_rtp->magic = GED_CMD_MAGIC; + run_rtp->stdin_active = 0; + run_rtp->stdout_active = 0; + run_rtp->stderr_active = 0; bu_ptbl_ins(&gedp->ged_subp, (long *)run_rtp); run_rtp->p = p; @@ -108,7 +111,7 @@ ged_rtwizard_core(struct ged *gedp, int argc, const char *argv[]) gd_rt_cmd = (char **)bu_calloc(args, sizeof(char *), "alloc gd_rt_cmd"); - bin = bu_brlcad_root("bin", 1); + bin = bu_dir(NULL, 0, BU_DIR_BIN, NULL); if (bin) { snprintf(rtscript, 256, "%s/rtwizard", bin); } else { diff --git a/src/libged/savekey/savekey.c b/src/libged/savekey/savekey.c index 63c1896492f..2373dbd8637 100644 --- a/src/libged/savekey/savekey.c +++ b/src/libged/savekey/savekey.c @@ -1,7 +1,7 @@ /* S A V E K E Y . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/saveview/saveview.c b/src/libged/saveview/saveview.c index ec09c190142..12405aa91d2 100644 --- a/src/libged/saveview/saveview.c +++ b/src/libged/saveview/saveview.c @@ -1,7 +1,7 @@ /* S A V E V I E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/scale/scale.c b/src/libged/scale/scale.c index 8bb09bc29ea..d69396e8b48 100644 --- a/src/libged/scale/scale.c +++ b/src/libged/scale/scale.c @@ -1,7 +1,7 @@ /* S C A L E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/screengrab/screengrab.c b/src/libged/screengrab/screengrab.c index e11d8cd1945..ad5222e754b 100644 --- a/src/libged/screengrab/screengrab.c +++ b/src/libged/screengrab/screengrab.c @@ -1,7 +1,7 @@ /* S C R E E N G R A B . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/search/search.c b/src/libged/search/search.c index d354cd58bff..cf314988a2f 100644 --- a/src/libged/search/search.c +++ b/src/libged/search/search.c @@ -1,7 +1,7 @@ /* S E A R C H . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -38,6 +38,7 @@ #include "bu/getopt.h" #include "bu/path.h" #include "bu/sort.h" +#include "bu/defines.h" #include "../alphanum.h" #include "../ged_private.h" @@ -47,8 +48,13 @@ dp_name_compare(const void *d1, const void *d2, void *arg) { struct directory *dp1 = *(struct directory **)d1; struct directory *dp2 = *(struct directory **)d2; - int ret = alphanum_impl((const char *)dp2->d_namep, (const char *)dp1->d_namep, arg); - return ret; + if (dp1 == dp2) + return 0; + else if (!dp1) + return 1; + else if (!dp2) + return -1; + return alphanum_impl((const char *)dp2->d_namep, (const char *)dp1->d_namep, arg); } struct fp_cmp_vls { @@ -63,18 +69,29 @@ fp_name_compare(const void *d1, const void *d2, void *arg) struct db_full_path *fp1 = *(struct db_full_path **)d1; struct db_full_path *fp2 = *(struct db_full_path **)d2; struct fp_cmp_vls *data = (struct fp_cmp_vls *)arg; + + BU_ASSERT(data != NULL); + + if (fp1 == fp2) + return 0; + else if (!fp1) + return 1; + else if (!fp2) + return -1; + bu_vls_trunc(data->left, 0); bu_vls_trunc(data->right, 0); + db_fullpath_to_vls(data->left, fp1, data->dbip, data->print_verbose_info); db_fullpath_to_vls(data->right, fp2, data->dbip, data->print_verbose_info); - int ret = alphanum_impl(bu_vls_cstr(data->right), bu_vls_cstr(data->left), arg); - return ret; + + return alphanum_impl(bu_vls_cstr(data->right), bu_vls_cstr(data->left), arg); } struct ged_search { struct directory **paths; - int path_cnt; + size_t path_cnt; int search_type; }; @@ -119,25 +136,24 @@ _path_scrub(struct bu_vls *path) HIDDEN void _ged_free_search_set(struct bu_ptbl *search_set) { - int i; + size_t i; if (!search_set) return; - for (i = (int)BU_PTBL_LEN(search_set) - 1; i >= 0; i--) { + for (i = 0; i < BU_PTBL_LEN(search_set); i++) { struct ged_search *search = (struct ged_search *)BU_PTBL_GET(search_set, i); - if (search && search->paths) - bu_free(search->paths, "free search paths"); - - if (search) + if (search) { + if (search->paths) { + bu_free(search->paths, "free search paths"); + } bu_free(search, "free search"); + } } - if (search_set) { - bu_ptbl_free(search_set); - bu_free(search_set, "free search container"); - } + bu_ptbl_free(search_set); + bu_free(search_set, "free search container"); } @@ -171,7 +187,10 @@ _ged_search_characterize_path(struct ged *gedp, const char *orig, struct bu_vls (*flat_only) = 0; (*is_specific) = 0; (*is_local) = 0; - if (!orig || !normalized) return 0; + + if (!orig || !normalized) + return 0; + if (BU_STR_EQUAL(orig, "/")) { return 1; } @@ -183,6 +202,7 @@ _ged_search_characterize_path(struct ged *gedp, const char *orig, struct bu_vls (*flat_only) = 1; return 1; } + bu_vls_sprintf(normalized, "%s", orig); if (bu_vls_addr(normalized)[0] == '|') { (*is_flat) = 1; @@ -195,11 +215,14 @@ _ged_search_characterize_path(struct ged *gedp, const char *orig, struct bu_vls (*is_local) = 1; return 1; } + (*is_local) = _path_scrub(normalized); - if (!bu_vls_strlen(normalized)) return 0; + if (!bu_vls_strlen(normalized)) + return 0; if (BU_STR_EQUAL(bu_vls_addr(normalized), "/")) { return 1; } + /* We've handled the toplevel special cases - now the only question * is is the path valid */ (*is_specific) = 1; @@ -215,28 +238,55 @@ _ged_search_characterize_path(struct ged *gedp, const char *orig, struct bu_vls HIDDEN int _ged_search_localized_obj_list(struct ged *gedp, struct directory *path, struct directory ***path_list, struct db_search_context *ctx) { - int path_cnt; - int j; + size_t path_cnt; + size_t j; const char *comb_str = "-name *"; struct bu_ptbl *tmp_search; + BU_ALLOC(tmp_search, struct bu_ptbl); + (void)db_search(tmp_search, DB_SEARCH_RETURN_UNIQ_DP, comb_str, 1, &path, gedp->ged_wdbp->dbip, ctx); - path_cnt = (int)BU_PTBL_LEN(tmp_search); + path_cnt = BU_PTBL_LEN(tmp_search); (*path_list) = (struct directory **)bu_malloc(sizeof(char *) * (path_cnt+1), "object path array"); + for (j = 0; j < path_cnt; j++) { (*path_list)[j] = (struct directory *)BU_PTBL_GET(tmp_search, j); } + (*path_list)[path_cnt] = RT_DIR_NULL; bu_ptbl_free(tmp_search); bu_free(tmp_search, "Free search table container"); + return path_cnt; } +HIDDEN void +search_print_objs_to_vls(const struct bu_ptbl *objs, struct bu_vls *out) +{ + size_t len; + + if (!objs || !out) + return; + + len = BU_PTBL_LEN(objs); + if (len > 0) { + bu_sort((void *)BU_PTBL_BASEADDR(objs), len, sizeof(struct directory *), dp_name_compare, NULL); + + while (len-- > 0) { + struct directory *uniq_dp = (struct directory *)BU_PTBL_GET(objs, len); + bu_vls_printf(out, "%s\n", uniq_dp->d_namep); + } + } +} + + int ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) { - int i, c, optcnt; + size_t i; + int c; + int optcnt; int aflag = 0; /* flag controlling whether hidden objects are examined */ int wflag = 0; /* flag controlling whether to fail quietly or not */ int flags = 0; @@ -263,7 +313,7 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) * (do db_lookup on things to see if they are paths, recognize * toplevel path specifiers, etc. */ optcnt = 0; - for (i = 1; i < argc; i++) { + for (i = 1; i < (size_t)argc; i++) { if ((argv_orig[i][0] == '-') && (strlen(argv_orig[i]) == 2)) { optcnt++; } else { @@ -329,16 +379,22 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) /* If any specific paths are specified before the plan, we need to identify * them and construct search structs. */ while (!plan_found) { + if (!argv[plan_argv]) { /* OK, no plan - will use default behavior */ plan_found = 1; + } else { + if (!(_ged_plan_item(argv[plan_argv]))) { /* We seem to have a path - figure out what type of search it specifies */ int is_specific, is_local, is_flat, flat_only; struct ged_search *new_search; - int search_path_type = _ged_search_characterize_path(gedp, argv[plan_argv], &argvls, &is_specific, &is_local, &is_flat, &flat_only); + int search_path_type; + + search_path_type = _ged_search_characterize_path(gedp, argv[plan_argv], &argvls, &is_specific, &is_local, &is_flat, &flat_only); path_found = 1; + if (search_path_type) { BU_ALLOC(new_search, struct ged_search); } else { @@ -349,16 +405,22 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) } else { bu_vls_trunc(gedp->ged_result_str, 0); } + bu_vls_free(&argvls); bu_argv_free(argc, argv); _ged_free_search_set(search_set); return (wflag) ? GED_OK : GED_ERROR; } + if (!is_specific) { - if (!is_flat && !aflag && !flat_only) new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS, NULL, &(new_search->paths)); - if (!is_flat && aflag && !flat_only) new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS | DB_LS_HIDDEN, NULL, &(new_search->paths)); - if (is_flat && !aflag && !flat_only) new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, 0, NULL, &(new_search->paths)); - if (is_flat && aflag && !flat_only) new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_HIDDEN, NULL, &(new_search->paths)); + if (!is_flat && !aflag && !flat_only) + new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS, NULL, &(new_search->paths)); + if (!is_flat && aflag && !flat_only) + new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS | DB_LS_HIDDEN, NULL, &(new_search->paths)); + if (is_flat && !aflag && !flat_only) + new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, 0, NULL, &(new_search->paths)); + if (is_flat && aflag && !flat_only) + new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_HIDDEN, NULL, &(new_search->paths)); } else { /* _ged_search_characterize_path verified that the db_lookup will succeed */ struct directory *local_dp = db_lookup(gedp->ged_wdbp->dbip, bu_vls_addr(&argvls), LOOKUP_QUIET); @@ -371,18 +433,27 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) new_search->path_cnt = 1; } } + new_search->search_type = is_local; - if (flat_only) new_search->search_type = 2; + if (flat_only) + new_search->search_type = 2; bu_ptbl_ins(search_set, (long *)new_search); plan_argv++; + } else { plan_found = 1; + if (!path_found) { /* We have a plan but not path - in that case, do a non-full-path tops search */ struct ged_search *new_search; + BU_ALLOC(new_search, struct ged_search); - if (!aflag) new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS, NULL, &(new_search->paths)); - if (aflag) new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS | DB_LS_HIDDEN, NULL, &(new_search->paths)); + + if (!aflag) + new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS, NULL, &(new_search->paths)); + if (aflag) + new_search->path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_TOPS | DB_LS_HIDDEN, NULL, &(new_search->paths)); + new_search->search_type = 1; bu_ptbl_ins(search_set, (long *)new_search); } @@ -410,9 +481,11 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) } /* Check if all of our searches are local or not */ - for (i = (int)BU_PTBL_LEN(search_set) - 1; i >= 0; i--) { + for (i = 0; i < BU_PTBL_LEN(search_set); i++) { struct ged_search *search = (struct ged_search *)BU_PTBL_GET(search_set, i); - if (search->search_type != 1) all_local = 0; + if (search && search->search_type != 1) { + all_local = 0; + } } /* If all searches are local, use all supplied paths in the search to @@ -420,12 +493,20 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) * each path is treated as its own search */ if (all_local) { struct bu_ptbl *uniq_db_objs; + BU_ALLOC(uniq_db_objs, struct bu_ptbl); BU_PTBL_INIT(uniq_db_objs); - for (i = (int)BU_PTBL_LEN(search_set) - 1; i >= 0; i--) { - int path_cnt = 0; - struct ged_search *search = (struct ged_search *)BU_PTBL_GET(search_set, i); - struct directory *curr_path = search->paths[path_cnt]; + + for (i = 0; i < BU_PTBL_LEN(search_set); i++) { + size_t path_cnt = 0; + struct ged_search *search; + struct directory *curr_path; + + search = (struct ged_search *)BU_PTBL_GET(search_set, i); + if (!search || !search->paths) + continue; + curr_path = search->paths[path_cnt]; + while (path_cnt < search->path_cnt) { flags |= DB_SEARCH_RETURN_UNIQ_DP; (void)db_search(uniq_db_objs, flags, bu_vls_addr(&search_string), 1, &curr_path, gedp->ged_wdbp->dbip, ctx); @@ -433,19 +514,19 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) curr_path = search->paths[path_cnt]; } } - /* For this return, we want a list of all unique leaf objects */ - bu_sort((void *)BU_PTBL_BASEADDR(uniq_db_objs), BU_PTBL_LEN(uniq_db_objs), sizeof(struct directory *), dp_name_compare, NULL); - for (i = (int)BU_PTBL_LEN(uniq_db_objs) - 1; i >= 0; i--) { - struct directory *uniq_dp = (struct directory *)BU_PTBL_GET(uniq_db_objs, i); - bu_vls_printf(gedp->ged_result_str, "%s\n", uniq_dp->d_namep); - } + + search_print_objs_to_vls(uniq_db_objs, gedp->ged_result_str); + bu_ptbl_free(uniq_db_objs); bu_free(uniq_db_objs, "free unique object container"); + } else { + /* Search types are either mixed or all full path, so use the standard calls and print * the full output of each search */ struct fp_cmp_vls *sdata; + BU_GET(sdata, struct fp_cmp_vls); BU_GET(sdata->left, struct bu_vls); BU_GET(sdata->right, struct bu_vls); @@ -454,17 +535,21 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) sdata->dbip = gedp->ged_wdbp->dbip; sdata->print_verbose_info = print_verbose_info; - for (i = 0; i < (int)BU_PTBL_LEN(search_set); i++) { - int path_cnt = 0; - int j; + for (i = 0; i < BU_PTBL_LEN(search_set); i++) { + size_t j; + size_t path_cnt = 0; + size_t sr_len; struct ged_search *search = (struct ged_search *)BU_PTBL_GET(search_set, i); + if (search && (search->path_cnt > 0 || search->search_type == 2)) { if (search->search_type == 2) { - int k; + size_t k; struct bu_ptbl *search_results; + flags |= DB_SEARCH_FLAT; BU_ALLOC(search_results, struct bu_ptbl); bu_ptbl_init(search_results, 8, "initialize search result table"); + for (k = 0; k < RT_DBNHASH; k++) { struct directory *dp; for (dp = gedp->ged_wdbp->dbip->dbi_Head[k]; dp != RT_DIR_NULL; dp = dp->d_forw) { @@ -473,30 +558,34 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) } } } - if (BU_PTBL_LEN(search_results) > 0) { - bu_sort((void *)BU_PTBL_BASEADDR(search_results), BU_PTBL_LEN(search_results), sizeof(struct directory *), dp_name_compare, NULL); - for (j = (int)BU_PTBL_LEN(search_results) - 1; j >= 0; j--) { - struct directory *uniq_dp = (struct directory *)BU_PTBL_GET(search_results, j); - bu_vls_printf(gedp->ged_result_str, "%s\n", uniq_dp->d_namep); - } - } - /* Make sure to clear the flag in case of subsequent searches of different types */ - flags = flags & ~(DB_SEARCH_FLAT); + + search_print_objs_to_vls(search_results, gedp->ged_result_str); + db_search_free(search_results); bu_free(search_results, "free search container"); + + /* Make sure to clear the flag in case of subsequent searches of different types */ + flags = flags & ~(DB_SEARCH_FLAT); + } else { struct directory *curr_path = search->paths[path_cnt]; + while (path_cnt < search->path_cnt) { struct bu_ptbl *search_results; struct bu_vls fullpath_string = BU_VLS_INIT_ZERO; + BU_ALLOC(search_results, struct bu_ptbl); bu_ptbl_init(search_results, 8, "initialize search result table"); + switch (search->search_type) { case 0: (void)db_search(search_results, flags, bu_vls_addr(&search_string), 1, &curr_path, gedp->ged_wdbp->dbip, ctx); - if (BU_PTBL_LEN(search_results) > 0) { - bu_sort((void *)BU_PTBL_BASEADDR(search_results), BU_PTBL_LEN(search_results), sizeof(struct directory *), fp_name_compare, (void *)sdata); - for (j = (int)BU_PTBL_LEN(search_results) - 1; j >= 0; j--) { + + sr_len = j = BU_PTBL_LEN(search_results); + if (sr_len > 0) { + bu_sort((void *)BU_PTBL_BASEADDR(search_results), sr_len, sizeof(struct directory *), fp_name_compare, (void *)sdata); + + while (j-- > 0) { struct db_full_path *dfptr = (struct db_full_path *)BU_PTBL_GET(search_results, j); bu_vls_trunc(&fullpath_string, 0); db_fullpath_to_vls(&fullpath_string, dfptr, gedp->ged_wdbp->dbip, print_verbose_info); @@ -507,16 +596,15 @@ ged_search_core(struct ged *gedp, int argc, const char *argv_orig[]) case 1: flags |= DB_SEARCH_RETURN_UNIQ_DP; (void)db_search(search_results, flags, bu_vls_addr(&search_string), 1, &curr_path, gedp->ged_wdbp->dbip, ctx); - bu_sort((void *)BU_PTBL_BASEADDR(search_results), BU_PTBL_LEN(search_results), sizeof(struct directory *), dp_name_compare, NULL); - for (j = (int)BU_PTBL_LEN(search_results) - 1; j >= 0; j--) { - struct directory *uniq_dp = (struct directory *)BU_PTBL_GET(search_results, j); - bu_vls_printf(gedp->ged_result_str, "%s\n", uniq_dp->d_namep); - } + + search_print_objs_to_vls(search_results, gedp->ged_result_str); + break; default: bu_log("Warning - ignoring unknown search type %d\n", search->search_type); break; } + db_search_free(search_results); bu_free(search_results, "free search container"); bu_vls_free(&fullpath_string); diff --git a/src/libged/select/select.c b/src/libged/select/select.c index 64b4cebc27b..97e7027478e 100644 --- a/src/libged/select/select.c +++ b/src/libged/select/select.c @@ -1,7 +1,7 @@ /* S E L E C T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/set_output_script/set_output_script.c b/src/libged/set_output_script/set_output_script.c index ea571abe2af..bfe5ab8443b 100644 --- a/src/libged/set_output_script/set_output_script.c +++ b/src/libged/set_output_script/set_output_script.c @@ -1,7 +1,7 @@ /* S E T _ O U T P U T _ S C R I P T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/set_transparency/set_transparency.c b/src/libged/set_transparency/set_transparency.c index 381043cd0e6..17edf400b9b 100644 --- a/src/libged/set_transparency/set_transparency.c +++ b/src/libged/set_transparency/set_transparency.c @@ -1,7 +1,7 @@ /* S E T _ T R A N S P A R E N C Y . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/set_uplotOutputMode/set_uplotOutputMode.c b/src/libged/set_uplotOutputMode/set_uplotOutputMode.c index 3408c732b15..5aa426fddcc 100644 --- a/src/libged/set_uplotOutputMode/set_uplotOutputMode.c +++ b/src/libged/set_uplotOutputMode/set_uplotOutputMode.c @@ -1,7 +1,7 @@ /* S E T _ U P L O T O U T P U T M O D E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/setview/setview.c b/src/libged/setview/setview.c index 3af7dca2b59..4e22851a710 100644 --- a/src/libged/setview/setview.c +++ b/src/libged/setview/setview.c @@ -1,7 +1,7 @@ /* S E T V I E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/shaded_mode/shaded_mode.c b/src/libged/shaded_mode/shaded_mode.c index 7c85aab61bf..48ba257fdfc 100644 --- a/src/libged/shaded_mode/shaded_mode.c +++ b/src/libged/shaded_mode/shaded_mode.c @@ -1,7 +1,7 @@ /* S H A D E D _ M O D E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/shader/shader.c b/src/libged/shader/shader.c index 6ff3b0ffa4d..ae070b66c55 100644 --- a/src/libged/shader/shader.c +++ b/src/libged/shader/shader.c @@ -1,7 +1,7 @@ /* S H A D E R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/shells/shells.c b/src/libged/shells/shells.c index 0c9e7de74db..5ee7a0d431e 100644 --- a/src/libged/shells/shells.c +++ b/src/libged/shells/shells.c @@ -1,7 +1,7 @@ /* S H E L L S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/showmats/showmats.c b/src/libged/showmats/showmats.c index 12925e9e7d7..9c8e86d0122 100644 --- a/src/libged/showmats/showmats.c +++ b/src/libged/showmats/showmats.c @@ -1,7 +1,7 @@ /* S H O W M A T S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/ged_command.cpp b/src/libged/simulate/ged_command.cpp index 8f171606cc8..ce23c2a32cc 100644 --- a/src/libged/simulate/ged_command.cpp +++ b/src/libged/simulate/ged_command.cpp @@ -1,7 +1,7 @@ /* G E D _ C O M M A N D . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_collision_algorithm.cpp b/src/libged/simulate/rt_collision_algorithm.cpp index c665417f68c..49b28dab873 100644 --- a/src/libged/simulate/rt_collision_algorithm.cpp +++ b/src/libged/simulate/rt_collision_algorithm.cpp @@ -1,7 +1,7 @@ /* R T _ C O L L I S I O N _ A L G O R I T H M . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_collision_algorithm.hpp b/src/libged/simulate/rt_collision_algorithm.hpp index 903680b8b4c..a11d266d648 100644 --- a/src/libged/simulate/rt_collision_algorithm.hpp +++ b/src/libged/simulate/rt_collision_algorithm.hpp @@ -1,7 +1,7 @@ /* R T _ C O L L I S I O N _ A L G O R I T H M . H P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_collision_shape.cpp b/src/libged/simulate/rt_collision_shape.cpp index 068d287212b..639ae7a2103 100644 --- a/src/libged/simulate/rt_collision_shape.cpp +++ b/src/libged/simulate/rt_collision_shape.cpp @@ -1,7 +1,7 @@ /* R T _ C O L L I S I O N _ S H A P E . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_collision_shape.hpp b/src/libged/simulate/rt_collision_shape.hpp index 2c5d035c2d5..b3167c3f4e6 100644 --- a/src/libged/simulate/rt_collision_shape.hpp +++ b/src/libged/simulate/rt_collision_shape.hpp @@ -1,7 +1,7 @@ /* R T _ C O L L I S I O N _ S H A P E . H P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_debug_draw.cpp b/src/libged/simulate/rt_debug_draw.cpp index d00a5e9acb7..ffadb7ae115 100644 --- a/src/libged/simulate/rt_debug_draw.cpp +++ b/src/libged/simulate/rt_debug_draw.cpp @@ -1,7 +1,7 @@ /* R T _ D E B U G _ D R A W . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_debug_draw.hpp b/src/libged/simulate/rt_debug_draw.hpp index b2f65a34761..724c6ecc195 100644 --- a/src/libged/simulate/rt_debug_draw.hpp +++ b/src/libged/simulate/rt_debug_draw.hpp @@ -1,7 +1,7 @@ /* R T _ D E B U G _ D R A W . H P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_instance.cpp b/src/libged/simulate/rt_instance.cpp index 0311ddaeb0d..a0b91d3e30b 100644 --- a/src/libged/simulate/rt_instance.cpp +++ b/src/libged/simulate/rt_instance.cpp @@ -1,7 +1,7 @@ /* R T _ I N S T A N C E . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_instance.hpp b/src/libged/simulate/rt_instance.hpp index 679088c3d9c..2d994b6a11c 100644 --- a/src/libged/simulate/rt_instance.hpp +++ b/src/libged/simulate/rt_instance.hpp @@ -1,7 +1,7 @@ /* R T _ I N S T A N C E . H P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_motion_state.cpp b/src/libged/simulate/rt_motion_state.cpp index 2c4f559d7a1..e5dafe9207c 100644 --- a/src/libged/simulate/rt_motion_state.cpp +++ b/src/libged/simulate/rt_motion_state.cpp @@ -1,7 +1,7 @@ /* R T _ M O T I O N _ S T A T E . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/rt_motion_state.hpp b/src/libged/simulate/rt_motion_state.hpp index a309d3bda34..de931d16f4c 100644 --- a/src/libged/simulate/rt_motion_state.hpp +++ b/src/libged/simulate/rt_motion_state.hpp @@ -1,7 +1,7 @@ /* R T _ M O T I O N _ S T A T E . H P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/simulation.cpp b/src/libged/simulate/simulation.cpp index 25128056582..ee4069810a6 100644 --- a/src/libged/simulate/simulation.cpp +++ b/src/libged/simulate/simulation.cpp @@ -1,7 +1,7 @@ /* S I M U L A T I O N . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/simulation.hpp b/src/libged/simulate/simulation.hpp index c7d1cdf257f..1a38b23db8e 100644 --- a/src/libged/simulate/simulation.hpp +++ b/src/libged/simulate/simulation.hpp @@ -1,7 +1,7 @@ /* S I M U L A T I O N . H P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/tests/CMakeLists.txt b/src/libged/simulate/tests/CMakeLists.txt index 68013785064..61495432081 100644 --- a/src/libged/simulate/tests/CMakeLists.txt +++ b/src/libged/simulate/tests/CMakeLists.txt @@ -1,6 +1,6 @@ if(BRLCAD_ENABLE_BULLET) BRLCAD_ADDEXEC(simulate_test "simulate_test.cpp" "libged" TEST) - add_test(NAME simulate_test COMMAND simulate_test) + BRLCAD_ADD_TEST(NAME simulate_test COMMAND simulate_test) endif(BRLCAD_ENABLE_BULLET) CMAKEFILES(simulate_test.cpp) diff --git a/src/libged/simulate/tests/simulate_test.cpp b/src/libged/simulate/tests/simulate_test.cpp index f8690f2a6f6..5168e1daa79 100644 --- a/src/libged/simulate/tests/simulate_test.cpp +++ b/src/libged/simulate/tests/simulate_test.cpp @@ -1,7 +1,7 @@ /* S I M U L A T E _ T E S T . C P P * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/utility.cpp b/src/libged/simulate/utility.cpp index a51b9cadb4d..63325f95faa 100644 --- a/src/libged/simulate/utility.cpp +++ b/src/libged/simulate/utility.cpp @@ -1,7 +1,7 @@ /* U T I L I T Y . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/simulate/utility.hpp b/src/libged/simulate/utility.hpp index afc4bbc6923..28c1375dc8a 100644 --- a/src/libged/simulate/utility.hpp +++ b/src/libged/simulate/utility.hpp @@ -1,7 +1,7 @@ /* U T I L I T Y . H P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/slew/slew.c b/src/libged/slew/slew.c index 10d3d33ab61..853f988e5ca 100644 --- a/src/libged/slew/slew.c +++ b/src/libged/slew/slew.c @@ -1,7 +1,7 @@ /* S L E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/snap.c b/src/libged/snap.c index af6226b60aa..4b2fdefeadb 100644 --- a/src/libged/snap.c +++ b/src/libged/snap.c @@ -1,7 +1,7 @@ /* S N A P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/solid_report/solid_report.c b/src/libged/solid_report/solid_report.c index 5ae6b103a3c..20d9cc2c66f 100644 --- a/src/libged/solid_report/solid_report.c +++ b/src/libged/solid_report/solid_report.c @@ -1,7 +1,7 @@ /* S O L I D _ R E P O R T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/solids_on_ray/solids_on_ray.c b/src/libged/solids_on_ray/solids_on_ray.c index 1e33f58f31b..31548fd2fb1 100644 --- a/src/libged/solids_on_ray/solids_on_ray.c +++ b/src/libged/solids_on_ray/solids_on_ray.c @@ -1,7 +1,7 @@ /* S O L I D S _ O N _ R A Y . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/sphgroup/sphgroup.c b/src/libged/sphgroup/sphgroup.c index 9b809b20771..af9979e5eb8 100644 --- a/src/libged/sphgroup/sphgroup.c +++ b/src/libged/sphgroup/sphgroup.c @@ -1,7 +1,7 @@ /* S P H G R O U P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/stat/CMakeLists.txt b/src/libged/stat/CMakeLists.txt new file mode 100644 index 00000000000..ecbf8a2d7a1 --- /dev/null +++ b/src/libged/stat/CMakeLists.txt @@ -0,0 +1,28 @@ +include_directories( + ${CMAKE_CURRENT_SOURCE_DIR} + ${BRLCAD_BINARY_DIR}/include + ${BRLCAD_SOURCE_DIR}/include + ${BU_INCLUDE_DIRS} + ${GED_INCLUDE_DIRS} + ) + +add_definitions(-DGED_PLUGIN) +ged_plugin_library(ged-stat SHARED stat.cpp fort.c) +target_link_libraries(ged-stat libged libbu) +set_property(TARGET ged-stat APPEND PROPERTY COMPILE_DEFINITIONS BRLCADBUILD HAVE_CONFIG_H) +VALIDATE_STYLE(ged-stat stat.cpp) +PLUGIN_SETUP(ged-stat ged) + +CMAKEFILES( + CMakeLists.txt + stat.cpp + fort.c + fort.h + ) + +# Local Variables: +# tab-width: 8 +# mode: cmake +# indent-tabs-mode: t +# End: +# ex: shiftwidth=2 tabstop=8 diff --git a/src/libged/stat/fort.c b/src/libged/stat/fort.c new file mode 100644 index 00000000000..1ea89832600 --- /dev/null +++ b/src/libged/stat/fort.c @@ -0,0 +1,7741 @@ +/* +libfort + +MIT License + +Copyright (c) 2017 - 2020 Seleznev Anton + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +/* The file was GENERATED by an amalgamation script.*/ +/* DO NOT EDIT BY HAND!!! */ + + +#define FT_AMALGAMED_SOURCE /* Macros to make internal libfort functions static */ + + +/******************************************************** + Begin of file "fort_utils.h" + ********************************************************/ + +#ifndef FORT_IMPL_H +#define FORT_IMPL_H + +#if defined(_MSC_VER) +#define _CRT_SECURE_NO_WARNINGS /* To disable warnings for unsafe functions */ +#endif + +#include +#include +#include +#include +#include +#include "fort.h" + +#include "bu/str.h" + +/* Define FT_INTERNAL to make internal libfort functions static + * in the result amalgamed source file. + */ +#ifdef FT_AMALGAMED_SOURCE +#define FT_INTERNAL static +#else +#define FT_INTERNAL +#endif /* FT_AMALGAMED_SORCE */ + + +#define FORT_DEFAULT_COL_SEPARATOR '|' +extern char g_col_separator; + +#define FORT_COL_SEPARATOR_LENGTH 1 + +#define FORT_UNUSED __attribute__((unused)) + +#define F_MALLOC fort_malloc +#define F_FREE fort_free +#define F_CALLOC fort_calloc +#define F_REALLOC fort_realloc +#define F_STRDUP fort_strdup +#define F_WCSDUP fort_wcsdup +/* @todo: replace with custom impl !!!*/ +#define F_UTF8DUP utf8dup + +#define F_CREATE(type) ((type *)F_CALLOC(sizeof(type), 1)) + +#define MAX(a,b) ((a) > (b) ? (a) : (b)) +#define MIN(a,b) ((a) < (b) ? (a) : (b)) + +#define FT_NEWLINE "\n" +#define FT_SPACE " " + +/***************************************************************************** + * DEFAULT_SIZES + * ***************************************************************************/ +#define DEFAULT_STR_BUF_SIZE 1024 +#define DEFAULT_VECTOR_CAPACITY 10 + +/***************************************************************************** + * DATA TYPES + * ***************************************************************************/ + +enum f_get_policy { + CREATE_ON_NULL, + DONT_CREATE_ON_NULL +}; + +enum f_bool { + F_FALSE = 0, + F_TRUE = 1 +}; + +enum f_cell_type { + COMMON_CELL, + GROUP_MASTER_CELL, + GROUP_SLAVE_CELL +}; + +enum f_geometry_type { + VISIBLE_GEOMETRY, + INTERN_REPR_GEOMETRY +}; + +enum f_string_type { + CHAR_BUF, +#ifdef FT_HAVE_WCHAR + W_CHAR_BUF, +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + UTF8_BUF, +#endif /* FT_HAVE_WCHAR */ +}; + +struct f_string_view { + union { + const char *cstr; +#ifdef FT_HAVE_WCHAR + const wchar_t *wstr; +#endif +#ifdef FT_HAVE_UTF8 + const void *u8str; +#endif + const void *data; + } u; + enum f_string_type type; +}; +typedef struct f_string_view f_string_view_t; + + +#define FT_STR_2_CAT_(arg1, arg2) \ + arg1##arg2 +#define FT_STR_2_CAT(arg1, arg2) \ + FT_STR_2_CAT_(arg1, arg2) + +#define UNIQUE_NAME_(prefix) \ + FT_STR_2_CAT(prefix,__COUNTER__) +#define UNIQUE_NAME(prefix) \ + UNIQUE_NAME_(prefix) + +typedef int f_status; + + + + +struct f_table_properties; +struct f_row; +struct f_vector; +struct f_cell; +struct f_string_buffer; +struct f_separator { + int enabled; +}; + +typedef struct f_table_properties f_table_properties_t; +typedef struct f_vector f_vector_t; +typedef struct f_cell f_cell_t; +typedef struct f_string_buffer f_string_buffer_t; +typedef struct f_row f_row_t; +typedef struct f_separator f_separator_t; + +struct f_context { + f_table_properties_t *table_properties; + size_t row; + size_t column; +}; +typedef struct f_context f_context_t; + +struct f_conv_context { + union { + char *buf; +#ifdef FT_HAVE_WCHAR + wchar_t *wbuf; +#endif +#ifdef FT_HAVE_UTF8 + const void *u8str; +#endif + } u; + size_t raw_avail; + struct f_context *cntx; + enum f_string_type b_type; +}; +typedef struct f_conv_context f_conv_context_t; + + +/***************************************************************************** + * LIBFORT helpers + *****************************************************************************/ + +extern void *(*fort_malloc)(size_t size); +extern void (*fort_free)(void *ptr); +extern void *(*fort_calloc)(size_t nmemb, size_t size); +extern void *(*fort_realloc)(void *ptr, size_t size); + +FT_INTERNAL +void set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr)); + +FT_INTERNAL +char *fort_strdup(const char *str); + + + +FT_INTERNAL +size_t number_of_columns_in_format_string(const f_string_view_t *fmt); + +FT_INTERNAL +size_t number_of_columns_in_format_buffer(const f_string_buffer_t *fmt); + +#if defined(FT_HAVE_WCHAR) +FT_INTERNAL +wchar_t *fort_wcsdup(const wchar_t *str); +#endif + + + +FT_INTERNAL +int print_n_strings(f_conv_context_t *cntx, size_t n, const char *str); + + +FT_INTERNAL +int ft_nprint(f_conv_context_t *cntx, const char *str, size_t strlen); +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +int ft_nwprint(f_conv_context_t *cntx, const wchar_t *str, size_t strlen); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +int ft_nu8print(f_conv_context_t *cntx, const void *beg, const void *end); +#endif /* FT_HAVE_UTF8 */ + + +/*#define PRINT_DEBUG_INFO fprintf(stderr, "error in %s(%s:%d)\n", __FUNCTION__, __FILE__, __LINE__);*/ +#define PRINT_DEBUG_INFO + +#define FT_CHECK(statement) \ + do { \ + tmp = statement; \ + if (tmp < 0) {\ + PRINT_DEBUG_INFO \ + goto clear; \ + } \ + } while(0) + +#define CHCK_RSLT_ADD_TO_WRITTEN(statement) \ + do { \ + tmp = statement; \ + if (tmp < 0) {\ + PRINT_DEBUG_INFO \ + goto clear; \ + } \ + written += (size_t)tmp; \ + } while(0) + +#define CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(statement) \ + do { \ + tmp = statement; \ + if (tmp < 0) {\ + PRINT_DEBUG_INFO \ + goto clear; \ + } \ + invisible_written += (size_t)tmp; \ + } while(0) + + +#define CHECK_NOT_NEGATIVE(x) \ + do { if ((x) < 0) goto fort_fail; } while (0) + +#endif /* FORT_IMPL_H */ + +/******************************************************** + End of file "fort_utils.h" + ********************************************************/ + + +/******************************************************** + Begin of file "vector.h" + ********************************************************/ + +#ifndef VECTOR_H +#define VECTOR_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + + +#define INVALID_VEC_INDEX ((size_t) -1) + +FT_INTERNAL +f_vector_t *create_vector(size_t item_size, size_t capacity); + +FT_INTERNAL +void destroy_vector(f_vector_t *); + +FT_INTERNAL +size_t vector_size(const f_vector_t *); + +FT_INTERNAL +size_t vector_capacity(const f_vector_t *); + +FT_INTERNAL +int vector_push(f_vector_t *, const void *item); + +FT_INTERNAL +int vector_insert(f_vector_t *, const void *item, size_t pos); + +FT_INTERNAL +f_vector_t *vector_split(f_vector_t *, size_t pos); + +FT_INTERNAL +const void *vector_at_c(const f_vector_t *vector, size_t index); + +FT_INTERNAL +void *vector_at(f_vector_t *, size_t index); + +FT_INTERNAL +f_status vector_swap(f_vector_t *cur_vec, f_vector_t *mv_vec, size_t pos); + +FT_INTERNAL +void vector_clear(f_vector_t *); + +FT_INTERNAL +int vector_erase(f_vector_t *, size_t index); + +#ifdef FT_TEST_BUILD +f_vector_t *copy_vector(f_vector_t *); +size_t vector_index_of(const f_vector_t *, const void *item); +#endif + +#define VECTOR_AT(vector, pos, data_type) \ + *(data_type *)vector_at((vector), (pos)) + +#define VECTOR_AT_C(vector, pos, const_data_type) \ + *(const_data_type *)vector_at_c((vector), (pos)) + +#endif /* VECTOR_H */ + +/******************************************************** + End of file "vector.h" + ********************************************************/ + + +/******************************************************** + Begin of file "wcwidth.h" + ********************************************************/ + +#ifndef WCWIDTH_H +#define WCWIDTH_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + +#ifdef FT_HAVE_WCHAR +#include + +FT_INTERNAL +int mk_wcswidth(const wchar_t *pwcs, size_t n); + +#endif /* FT_HAVE_WCHAR */ + +#endif /* WCWIDTH_H */ + +/******************************************************** + End of file "wcwidth.h" + ********************************************************/ + + +/******************************************************** + Begin of file "utf8.h" + ********************************************************/ + +// The latest version of this library is available on GitHub; +// https://github.com/sheredom/utf8.h + +// This is free and unencumbered software released into the public domain. +// +// Anyone is free to copy, modify, publish, use, compile, sell, or +// distribute this software, either in source code form or as a compiled +// binary, for any purpose, commercial or non-commercial, and by any +// means. +// +// In jurisdictions that recognize copyright laws, the author or authors +// of this software dedicate any and all copyright interest in the +// software to the public domain. We make this dedication for the benefit +// of the public at large and to the detriment of our heirs and +// successors. We intend this dedication to be an overt act of +// relinquishment in perpetuity of all present and future rights to this +// software under copyright law. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +// OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +// ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +// OTHER DEALINGS IN THE SOFTWARE. +// +// For more information, please refer to + +#ifndef SHEREDOM_UTF8_H_INCLUDED +#define SHEREDOM_UTF8_H_INCLUDED + +#if defined(_MSC_VER) +#pragma warning(push) + +// disable 'bytes padding added after construct' warning +#pragma warning(disable : 4820) +#endif + +#include +#include + +#if defined(_MSC_VER) +#pragma warning(pop) +#endif + +#if defined(_MSC_VER) +typedef __int32 utf8_int32_t; +#else +#include +typedef int32_t utf8_int32_t; +#endif + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wold-style-cast" +#pragma clang diagnostic ignored "-Wcast-qual" +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +#if defined(__clang__) || defined(__GNUC__) +#define utf8_nonnull __attribute__((nonnull)) +#define utf8_pure __attribute__((pure)) +#define utf8_restrict __restrict__ +#define utf8_weak __attribute__((weak)) +#elif defined(_MSC_VER) +#define utf8_nonnull +#define utf8_pure +#define utf8_restrict __restrict +#define utf8_weak __inline +#else +#define utf8_nonnull +#define utf8_pure +#define utf8_restrict +#define utf8_weak inline +#endif + +#ifdef __cplusplus +#define utf8_null NULL +#else +#define utf8_null 0 +#endif + +// Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > +// src2 respectively, case insensitive. +utf8_nonnull utf8_pure utf8_weak int utf8casecmp(const void *src1, + const void *src2); + +// Append the utf8 string src onto the utf8 string dst. +utf8_nonnull utf8_weak void *utf8cat(void *utf8_restrict dst, + const void *utf8_restrict src); + +// Find the first match of the utf8 codepoint chr in the utf8 string src. +utf8_nonnull utf8_pure utf8_weak void *utf8chr(const void *src, + utf8_int32_t chr); + +// Return less than 0, 0, greater than 0 if src1 < src2, +// src1 == src2, src1 > src2 respectively. +utf8_nonnull utf8_pure utf8_weak int utf8cmp(const void *src1, + const void *src2); + +// Copy the utf8 string src onto the memory allocated in dst. +utf8_nonnull utf8_weak void *utf8cpy(void *utf8_restrict dst, + const void *utf8_restrict src); + +// Number of utf8 codepoints in the utf8 string src that consists entirely +// of utf8 codepoints not from the utf8 string reject. +utf8_nonnull utf8_pure utf8_weak size_t utf8cspn(const void *src, + const void *reject); + +// Duplicate the utf8 string src by getting its size, malloc'ing a new buffer +// copying over the data, and returning that. Or 0 if malloc failed. +utf8_nonnull utf8_weak void *utf8dup(const void *src); + +// Number of utf8 codepoints in the utf8 string str, +// excluding the null terminating byte. +utf8_nonnull utf8_pure utf8_weak size_t utf8len(const void *str); + +// Visible width of utf8string. +utf8_nonnull utf8_pure utf8_weak size_t utf8width(const void *str); + +// Visible width of codepoint. +utf8_nonnull utf8_pure utf8_weak int utf8cwidth(utf8_int32_t c); + +// Return less than 0, 0, greater than 0 if src1 < src2, src1 == src2, src1 > +// src2 respectively, case insensitive. Checking at most n bytes of each utf8 +// string. +utf8_nonnull utf8_pure utf8_weak int utf8ncasecmp(const void *src1, + const void *src2, size_t n); + +// Append the utf8 string src onto the utf8 string dst, +// writing at most n+1 bytes. Can produce an invalid utf8 +// string if n falls partway through a utf8 codepoint. +utf8_nonnull utf8_weak void *utf8ncat(void *utf8_restrict dst, + const void *utf8_restrict src, size_t n); + +// Return less than 0, 0, greater than 0 if src1 < src2, +// src1 == src2, src1 > src2 respectively. Checking at most n +// bytes of each utf8 string. +utf8_nonnull utf8_pure utf8_weak int utf8ncmp(const void *src1, + const void *src2, size_t n); + +// Copy the utf8 string src onto the memory allocated in dst. +// Copies at most n bytes. If there is no terminating null byte in +// the first n bytes of src, the string placed into dst will not be +// null-terminated. If the size (in bytes) of src is less than n, +// extra null terminating bytes are appended to dst such that at +// total of n bytes are written. Can produce an invalid utf8 +// string if n falls partway through a utf8 codepoint. +utf8_nonnull utf8_weak void *utf8ncpy(void *utf8_restrict dst, + const void *utf8_restrict src, size_t n); + +// Similar to utf8dup, except that at most n bytes of src are copied. If src is +// longer than n, only n bytes are copied and a null byte is added. +// +// Returns a new string if successful, 0 otherwise +utf8_nonnull utf8_weak void *utf8ndup(const void *src, size_t n); + +// Locates the first occurence in the utf8 string str of any byte in the +// utf8 string accept, or 0 if no match was found. +utf8_nonnull utf8_pure utf8_weak void *utf8pbrk(const void *str, + const void *accept); + +// Find the last match of the utf8 codepoint chr in the utf8 string src. +utf8_nonnull utf8_pure utf8_weak void *utf8rchr(const void *src, int chr); + +// Number of bytes in the utf8 string str, +// including the null terminating byte. +utf8_nonnull utf8_pure utf8_weak size_t utf8size(const void *str); + +// Number of utf8 codepoints in the utf8 string src that consists entirely +// of utf8 codepoints from the utf8 string accept. +utf8_nonnull utf8_pure utf8_weak size_t utf8spn(const void *src, + const void *accept); + +// The position of the utf8 string needle in the utf8 string haystack. +utf8_nonnull utf8_pure utf8_weak void *utf8str(const void *haystack, + const void *needle); + +// The position of the utf8 string needle in the utf8 string haystack, case +// insensitive. +utf8_nonnull utf8_pure utf8_weak void *utf8casestr(const void *haystack, + const void *needle); + +// Return 0 on success, or the position of the invalid +// utf8 codepoint on failure. +utf8_nonnull utf8_pure utf8_weak void *utf8valid(const void *str); + +// Sets out_codepoint to the next utf8 codepoint in str, and returns the address +// of the utf8 codepoint after the current one in str. +utf8_nonnull utf8_weak void * +utf8codepoint(const void *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint); + +// Returns the size of the given codepoint in bytes. +utf8_weak size_t utf8codepointsize(utf8_int32_t chr); + +// Write a codepoint to the given string, and return the address to the next +// place after the written codepoint. Pass how many bytes left in the buffer to +// n. If there is not enough space for the codepoint, this function returns +// null. +utf8_nonnull utf8_weak void *utf8catcodepoint(void *utf8_restrict str, + utf8_int32_t chr, size_t n); + +// Returns 1 if the given character is lowercase, or 0 if it is not. +utf8_weak int utf8islower(utf8_int32_t chr); + +// Returns 1 if the given character is uppercase, or 0 if it is not. +utf8_weak int utf8isupper(utf8_int32_t chr); + +// Transform the given string into all lowercase codepoints. +utf8_nonnull utf8_weak void utf8lwr(void *utf8_restrict str); + +// Transform the given string into all uppercase codepoints. +utf8_nonnull utf8_weak void utf8upr(void *utf8_restrict str); + +// Make a codepoint lower case if possible. +utf8_weak utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp); + +// Make a codepoint upper case if possible. +utf8_weak utf8_int32_t utf8uprcodepoint(utf8_int32_t cp); + +#undef utf8_weak +#undef utf8_pure +#undef utf8_nonnull + +int utf8casecmp(const void *src1, const void *src2) +{ + utf8_int32_t src1_cp, src2_cp, src1_orig_cp, src2_orig_cp; + + for (;;) { + src1 = utf8codepoint(src1, &src1_cp); + src2 = utf8codepoint(src2, &src2_cp); + + // Take a copy of src1 & src2 + src1_orig_cp = src1_cp; + src2_orig_cp = src2_cp; + + // Lower the srcs if required + src1_cp = utf8lwrcodepoint(src1_cp); + src2_cp = utf8lwrcodepoint(src2_cp); + + // Check if the lowered codepoints match + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if (src1_cp == src2_cp) { + continue; + } + + // If they don't match, then we return which of the original's are less + if (src1_orig_cp < src2_orig_cp) { + return -1; + } else if (src1_orig_cp > src2_orig_cp) { + return 1; + } + } +} + +void *utf8cat(void *utf8_restrict dst, const void *utf8_restrict src) +{ + char *d = (char *)dst; + const char *s = (const char *)src; + + // find the null terminating byte in dst + while ('\0' != *d) { + d++; + } + + // overwriting the null terminating byte in dst, append src byte-by-byte + while ('\0' != *s) { + *d++ = *s++; + } + + // write out a new null terminating byte into dst + *d = '\0'; + + return dst; +} + +void *utf8chr(const void *src, utf8_int32_t chr) +{ + char c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + // being asked to return position of null terminating byte, so + // just run s to the end, and return! + const char *s = (const char *)src; + while ('\0' != *s) { + s++; + } + return (void *)s; + } else if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + // 1-byte/7-bit ascii + // (0b0xxxxxxx) + c[0] = (char)chr; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + // 2-byte/11-bit utf8 code point + // (0b110xxxxx 0b10xxxxxx) + c[0] = 0xc0 | (char)(chr >> 6); + c[1] = 0x80 | (char)(chr & 0x3f); + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + // 3-byte/16-bit utf8 code point + // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) + c[0] = 0xe0 | (char)(chr >> 12); + c[1] = 0x80 | (char)((chr >> 6) & 0x3f); + c[2] = 0x80 | (char)(chr & 0x3f); + } else { // if (0 == ((int)0xffe00000 & chr)) { + // 4-byte/21-bit utf8 code point + // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) + c[0] = 0xf0 | (char)(chr >> 18); + c[1] = 0x80 | (char)((chr >> 12) & 0x3f); + c[2] = 0x80 | (char)((chr >> 6) & 0x3f); + c[3] = 0x80 | (char)(chr & 0x3f); + } + + // we've made c into a 2 utf8 codepoint string, one for the chr we are + // seeking, another for the null terminating byte. Now use utf8str to + // search + return utf8str(src, c); +} + +int utf8cmp(const void *src1, const void *src2) +{ + const unsigned char *s1 = (const unsigned char *)src1; + const unsigned char *s2 = (const unsigned char *)src2; + + while (('\0' != *s1) || ('\0' != *s2)) { + if (*s1 < *s2) { + return -1; + } else if (*s1 > *s2) { + return 1; + } + + s1++; + s2++; + } + + // both utf8 strings matched + return 0; +} + +int utf8coll(const void *src1, const void *src2); + +void *utf8cpy(void *utf8_restrict dst, const void *utf8_restrict src) +{ + char *d = (char *)dst; + const char *s = (const char *)src; + + // overwriting anything previously in dst, write byte-by-byte + // from src + while ('\0' != *s) { + *d++ = *s++; + } + + // append null terminating byte + *d = '\0'; + + return dst; +} + +size_t utf8cspn(const void *src, const void *reject) +{ + const char *s = (const char *)src; + size_t chars = 0; + + while ('\0' != *s) { + const char *r = (const char *)reject; + size_t offset = 0; + + while ('\0' != *r) { + // checking that if *r is the start of a utf8 codepoint + // (it is not 0b10xxxxxx) and we have successfully matched + // a previous character (0 < offset) - we found a match + if ((0x80 != (0xc0 & *r)) && (0 < offset)) { + return chars; + } else { + if (*r == s[offset]) { + // part of a utf8 codepoint matched, so move our checking + // onwards to the next byte + offset++; + r++; + } else { + // r could be in the middle of an unmatching utf8 code point, + // so we need to march it on to the next character beginning, + + do { + r++; + } while (0x80 == (0xc0 & *r)); + + // reset offset too as we found a mismatch + offset = 0; + } + } + } + + // the current utf8 codepoint in src did not match reject, but src + // could have been partway through a utf8 codepoint, so we need to + // march it onto the next utf8 codepoint starting byte + do { + s++; + } while ((0x80 == (0xc0 & *s))); + chars++; + } + + return chars; +} + +size_t utf8size(const void *str); + +void *utf8dup(const void *src) +{ + const char *s = (const char *)src; + char *n = utf8_null; + + // figure out how many bytes (including the terminator) we need to copy first + size_t bytes = utf8size(src); + + n = (char *)malloc(bytes); + + if (utf8_null == n) { + // out of memory so we bail + return utf8_null; + } else { + bytes = 0; + + // copy src byte-by-byte into our new utf8 string + while ('\0' != s[bytes]) { + n[bytes] = s[bytes]; + bytes++; + } + + // append null terminating byte + n[bytes] = '\0'; + return n; + } +} + +void *utf8fry(const void *str); + +size_t utf8len(const void *str) +{ + const unsigned char *s = (const unsigned char *)str; + size_t length = 0; + + while ('\0' != *s) { + if (0xf0 == (0xf8 & *s)) { + // 4-byte utf8 code point (began with 0b11110xxx) + s += 4; + } else if (0xe0 == (0xf0 & *s)) { + // 3-byte utf8 code point (began with 0b1110xxxx) + s += 3; + } else if (0xc0 == (0xe0 & *s)) { + // 2-byte utf8 code point (began with 0b110xxxxx) + s += 2; + } else { // if (0x00 == (0x80 & *s)) { + // 1-byte ascii (began with 0b0xxxxxxx) + s += 1; + } + + // no matter the bytes we marched s forward by, it was + // only 1 utf8 codepoint + length++; + } + + return length; +} + +// See +// https://unicode.org/Public/UNIDATA/EastAsianWidth.txt +// http://www.unicode.org/reports/tr11/tr11-33.html +int utf8cwidth(utf8_int32_t c) +{ + // TODO: add non printable characters check + if (c == 0) + return 0; + + if (c < 0x1100) + return 1; + + // Fullwidth + if ((0x3000 == c) || + (0xFF01 <= c && c <= 0xFF60) || + (0xFFE0 <= c && c <= 0xFFE6)) { + return 2; + } + + // Wide + if ((0x1100 <= c && c <= 0x115F) || + (0x11A3 <= c && c <= 0x11A7) || + (0x11FA <= c && c <= 0x11FF) || + (0x2329 <= c && c <= 0x232A) || + (0x2E80 <= c && c <= 0x2E99) || + (0x2E9B <= c && c <= 0x2EF3) || + (0x2F00 <= c && c <= 0x2FD5) || + (0x2FF0 <= c && c <= 0x2FFB) || + (0x3001 <= c && c <= 0x303E) || + (0x3041 <= c && c <= 0x3096) || + (0x3099 <= c && c <= 0x30FF) || + (0x3105 <= c && c <= 0x312D) || + (0x3131 <= c && c <= 0x318E) || + (0x3190 <= c && c <= 0x31BA) || + (0x31C0 <= c && c <= 0x31E3) || + (0x31F0 <= c && c <= 0x321E) || + (0x3220 <= c && c <= 0x3247) || + (0x3250 <= c && c <= 0x32FE) || + (0x3300 <= c && c <= 0x4DBF) || + (0x4E00 <= c && c <= 0xA48C) || + (0xA490 <= c && c <= 0xA4C6) || + (0xA960 <= c && c <= 0xA97C) || + (0xAC00 <= c && c <= 0xD7A3) || + (0xD7B0 <= c && c <= 0xD7C6) || + (0xD7CB <= c && c <= 0xD7FB) || + (0xF900 <= c && c <= 0xFAFF) || + (0xFE10 <= c && c <= 0xFE19) || + (0xFE30 <= c && c <= 0xFE52) || + (0xFE54 <= c && c <= 0xFE66) || + (0xFE68 <= c && c <= 0xFE6B) || + (0x1B000 <= c && c <= 0x1B001) || + (0x1F200 <= c && c <= 0x1F202) || + (0x1F210 <= c && c <= 0x1F23A) || + (0x1F240 <= c && c <= 0x1F248) || + (0x1F250 <= c && c <= 0x1F251) || + (0x20000 <= c && c <= 0x2F73F) || + (0x2B740 <= c && c <= 0x2FFFD) || + (0x30000 <= c && c <= 0x3FFFD)) { + return 2; + } + + return 1; +} + +size_t utf8width(const void *str) +{ + size_t length = 0; + utf8_int32_t c = 0; + + str = utf8codepoint(str, &c); + while (c != 0) { + length += utf8cwidth(c); + str = utf8codepoint(str, &c); + } + return length; +} + +int utf8ncasecmp(const void *src1, const void *src2, size_t n) +{ + utf8_int32_t src1_cp, src2_cp, src1_orig_cp, src2_orig_cp; + + do { + const unsigned char *const s1 = (const unsigned char *)src1; + const unsigned char *const s2 = (const unsigned char *)src2; + + // first check that we have enough bytes left in n to contain an entire + // codepoint + if (0 == n) { + return 0; + } + + if ((1 == n) && ((0xc0 == (0xe0 & *s1)) || (0xc0 == (0xe0 & *s2)))) { + const utf8_int32_t c1 = (0xe0 & *s1); + const utf8_int32_t c2 = (0xe0 & *s2); + + if (c1 < c2) { + return -1; + } else if (c1 > c2) { + return 1; + } else { + return 0; + } + } + + if ((2 >= n) && ((0xe0 == (0xf0 & *s1)) || (0xe0 == (0xf0 & *s2)))) { + const utf8_int32_t c1 = (0xf0 & *s1); + const utf8_int32_t c2 = (0xf0 & *s2); + + if (c1 < c2) { + return -1; + } else if (c1 > c2) { + return 1; + } else { + return 0; + } + } + + if ((3 >= n) && ((0xf0 == (0xf8 & *s1)) || (0xf0 == (0xf8 & *s2)))) { + const utf8_int32_t c1 = (0xf8 & *s1); + const utf8_int32_t c2 = (0xf8 & *s2); + + if (c1 < c2) { + return -1; + } else if (c1 > c2) { + return 1; + } else { + return 0; + } + } + + src1 = utf8codepoint(src1, &src1_cp); + src2 = utf8codepoint(src2, &src2_cp); + n -= utf8codepointsize(src1_cp); + + // Take a copy of src1 & src2 + src1_orig_cp = src1_cp; + src2_orig_cp = src2_cp; + + // Lower srcs if required + src1_cp = utf8lwrcodepoint(src1_cp); + src2_cp = utf8lwrcodepoint(src2_cp); + + // Check if the lowered codepoints match + if ((0 == src1_orig_cp) && (0 == src2_orig_cp)) { + return 0; + } else if (src1_cp == src2_cp) { + continue; + } + + // If they don't match, then we return which of the original's are less + if (src1_orig_cp < src2_orig_cp) { + return -1; + } else if (src1_orig_cp > src2_orig_cp) { + return 1; + } + } while (0 < n); + + // both utf8 strings matched + return 0; +} + +void *utf8ncat(void *utf8_restrict dst, const void *utf8_restrict src, + size_t n) +{ + char *d = (char *)dst; + const char *s = (const char *)src; + + // find the null terminating byte in dst + while ('\0' != *d) { + d++; + } + + // overwriting the null terminating byte in dst, append src byte-by-byte + // stopping if we run out of space + do { + *d++ = *s++; + } while (('\0' != *s) && (0 != --n)); + + // write out a new null terminating byte into dst + *d = '\0'; + + return dst; +} + +int utf8ncmp(const void *src1, const void *src2, size_t n) +{ + const unsigned char *s1 = (const unsigned char *)src1; + const unsigned char *s2 = (const unsigned char *)src2; + + while ((0 != n--) && (('\0' != *s1) || ('\0' != *s2))) { + if (*s1 < *s2) { + return -1; + } else if (*s1 > *s2) { + return 1; + } + + s1++; + s2++; + } + + // both utf8 strings matched + return 0; +} + +void *utf8ncpy(void *utf8_restrict dst, const void *utf8_restrict src, + size_t n) +{ + char *d = (char *)dst; + const char *s = (const char *)src; + size_t index; + + // overwriting anything previously in dst, write byte-by-byte + // from src + for (index = 0; index < n; index++) { + d[index] = s[index]; + if ('\0' == s[index]) { + break; + } + } + + // append null terminating byte + for (; index < n; index++) { + d[index] = 0; + } + + return dst; +} + +void *utf8ndup(const void *src, size_t n) +{ + const char *s = (const char *)src; + char *c = utf8_null; + size_t bytes = 0; + + // Find the end of the string or stop when n is reached + while ('\0' != s[bytes] && bytes < n) { + bytes++; + } + + // In case bytes is actually less than n, we need to set it + // to be used later in the copy byte by byte. + n = bytes; + + c = (char *)malloc(bytes + 1); + if (utf8_null == c) { + // out of memory so we bail + return utf8_null; + } + + bytes = 0; + + // copy src byte-by-byte into our new utf8 string + while ('\0' != s[bytes] && bytes < n) { + c[bytes] = s[bytes]; + bytes++; + } + + // append null terminating byte + c[bytes] = '\0'; + return c; +} + +void *utf8rchr(const void *src, int chr) +{ + const char *s = (const char *)src; + const char *match = utf8_null; + char c[5] = {'\0', '\0', '\0', '\0', '\0'}; + + if (0 == chr) { + // being asked to return position of null terminating byte, so + // just run s to the end, and return! + while ('\0' != *s) { + s++; + } + return (void *)s; + } else if (0 == ((int)0xffffff80 & chr)) { + // 1-byte/7-bit ascii + // (0b0xxxxxxx) + c[0] = (char)chr; + } else if (0 == ((int)0xfffff800 & chr)) { + // 2-byte/11-bit utf8 code point + // (0b110xxxxx 0b10xxxxxx) + c[0] = 0xc0 | (char)(chr >> 6); + c[1] = 0x80 | (char)(chr & 0x3f); + } else if (0 == ((int)0xffff0000 & chr)) { + // 3-byte/16-bit utf8 code point + // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) + c[0] = 0xe0 | (char)(chr >> 12); + c[1] = 0x80 | (char)((chr >> 6) & 0x3f); + c[2] = 0x80 | (char)(chr & 0x3f); + } else { // if (0 == ((int)0xffe00000 & chr)) { + // 4-byte/21-bit utf8 code point + // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) + c[0] = 0xf0 | (char)(chr >> 18); + c[1] = 0x80 | (char)((chr >> 12) & 0x3f); + c[2] = 0x80 | (char)((chr >> 6) & 0x3f); + c[3] = 0x80 | (char)(chr & 0x3f); + } + + // we've created a 2 utf8 codepoint string in c that is + // the utf8 character asked for by chr, and a null + // terminating byte + + while ('\0' != *s) { + size_t offset = 0; + + while (s[offset] == c[offset]) { + offset++; + } + + if ('\0' == c[offset]) { + // we found a matching utf8 code point + match = s; + s += offset; + } else { + s += offset; + + // need to march s along to next utf8 codepoint start + // (the next byte that doesn't match 0b10xxxxxx) + if ('\0' != *s) { + do { + s++; + } while (0x80 == (0xc0 & *s)); + } + } + } + + // return the last match we found (or 0 if no match was found) + return (void *)match; +} + +void *utf8pbrk(const void *str, const void *accept) +{ + const char *s = (const char *)str; + + while ('\0' != *s) { + const char *a = (const char *)accept; + size_t offset = 0; + + while ('\0' != *a) { + // checking that if *a is the start of a utf8 codepoint + // (it is not 0b10xxxxxx) and we have successfully matched + // a previous character (0 < offset) - we found a match + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + return (void *)s; + } else { + if (*a == s[offset]) { + // part of a utf8 codepoint matched, so move our checking + // onwards to the next byte + offset++; + a++; + } else { + // r could be in the middle of an unmatching utf8 code point, + // so we need to march it on to the next character beginning, + + do { + a++; + } while (0x80 == (0xc0 & *a)); + + // reset offset too as we found a mismatch + offset = 0; + } + } + } + + // we found a match on the last utf8 codepoint + if (0 < offset) { + return (void *)s; + } + + // the current utf8 codepoint in src did not match accept, but src + // could have been partway through a utf8 codepoint, so we need to + // march it onto the next utf8 codepoint starting byte + do { + s++; + } while ((0x80 == (0xc0 & *s))); + } + + return utf8_null; +} + +size_t utf8size(const void *str) +{ + const char *s = (const char *)str; + size_t size = 0; + while ('\0' != s[size]) { + size++; + } + + // we are including the null terminating byte in the size calculation + size++; + return size; +} + +size_t utf8spn(const void *src, const void *accept) +{ + const char *s = (const char *)src; + size_t chars = 0; + + while ('\0' != *s) { + const char *a = (const char *)accept; + size_t offset = 0; + + while ('\0' != *a) { + // checking that if *r is the start of a utf8 codepoint + // (it is not 0b10xxxxxx) and we have successfully matched + // a previous character (0 < offset) - we found a match + if ((0x80 != (0xc0 & *a)) && (0 < offset)) { + // found a match, so increment the number of utf8 codepoints + // that have matched and stop checking whether any other utf8 + // codepoints in a match + chars++; + s += offset; + break; + } else { + if (*a == s[offset]) { + offset++; + a++; + } else { + // a could be in the middle of an unmatching utf8 codepoint, + // so we need to march it on to the next character beginning, + do { + a++; + } while (0x80 == (0xc0 & *a)); + + // reset offset too as we found a mismatch + offset = 0; + } + } + } + + // if a got to its terminating null byte, then we didn't find a match. + // Return the current number of matched utf8 codepoints + if ('\0' == *a) { + return chars; + } + } + + return chars; +} + +void *utf8str(const void *haystack, const void *needle) +{ + const char *h = (const char *)haystack; + utf8_int32_t throwaway_codepoint; + + // if needle has no utf8 codepoints before the null terminating + // byte then return haystack + if ('\0' == *((const char *)needle)) { + return (void *)haystack; + } + + while ('\0' != *h) { + const char *maybeMatch = h; + const char *n = (const char *)needle; + + while (*h == *n && (*h != '\0' && *n != '\0')) { + n++; + h++; + } + + if ('\0' == *n) { + // we found the whole utf8 string for needle in haystack at + // maybeMatch, so return it + return (void *)maybeMatch; + } else { + // h could be in the middle of an unmatching utf8 codepoint, + // so we need to march it on to the next character beginning + // starting from the current character + h = (const char *)utf8codepoint(maybeMatch, &throwaway_codepoint); + } + } + + // no match + return utf8_null; +} + +void *utf8casestr(const void *haystack, const void *needle) +{ + const void *h = haystack; + + // if needle has no utf8 codepoints before the null terminating + // byte then return haystack + if ('\0' == *((const char *)needle)) { + return (void *)haystack; + } + + for (;;) { + const void *maybeMatch = h; + const void *n = needle; + utf8_int32_t h_cp, n_cp; + + // Get the next code point and track it + const void *nextH = h = utf8codepoint(h, &h_cp); + n = utf8codepoint(n, &n_cp); + + while ((0 != h_cp) && (0 != n_cp)) { + h_cp = utf8lwrcodepoint(h_cp); + n_cp = utf8lwrcodepoint(n_cp); + + // if we find a mismatch, bail out! + if (h_cp != n_cp) { + break; + } + + h = utf8codepoint(h, &h_cp); + n = utf8codepoint(n, &n_cp); + } + + if (0 == n_cp) { + // we found the whole utf8 string for needle in haystack at + // maybeMatch, so return it + return (void *)maybeMatch; + } + + if (0 == h_cp) { + // no match + return utf8_null; + } + + // Roll back to the next code point in the haystack to test + h = nextH; + } +} + +void *utf8valid(const void *str) +{ + const char *s = (const char *)str; + + while ('\0' != *s) { + if (0xf0 == (0xf8 & *s)) { + // ensure each of the 3 following bytes in this 4-byte + // utf8 codepoint began with 0b10xxxxxx + if ((0x80 != (0xc0 & s[1])) || (0x80 != (0xc0 & s[2])) || + (0x80 != (0xc0 & s[3]))) { + return (void *)s; + } + + // ensure that our utf8 codepoint ended after 4 bytes + if (0x80 == (0xc0 & s[4])) { + return (void *)s; + } + + // ensure that the top 5 bits of this 4-byte utf8 + // codepoint were not 0, as then we could have used + // one of the smaller encodings + if ((0 == (0x07 & s[0])) && (0 == (0x30 & s[1]))) { + return (void *)s; + } + + // 4-byte utf8 code point (began with 0b11110xxx) + s += 4; + } else if (0xe0 == (0xf0 & *s)) { + // ensure each of the 2 following bytes in this 3-byte + // utf8 codepoint began with 0b10xxxxxx + if ((0x80 != (0xc0 & s[1])) || (0x80 != (0xc0 & s[2]))) { + return (void *)s; + } + + // ensure that our utf8 codepoint ended after 3 bytes + if (0x80 == (0xc0 & s[3])) { + return (void *)s; + } + + // ensure that the top 5 bits of this 3-byte utf8 + // codepoint were not 0, as then we could have used + // one of the smaller encodings + if ((0 == (0x0f & s[0])) && (0 == (0x20 & s[1]))) { + return (void *)s; + } + + // 3-byte utf8 code point (began with 0b1110xxxx) + s += 3; + } else if (0xc0 == (0xe0 & *s)) { + // ensure the 1 following byte in this 2-byte + // utf8 codepoint began with 0b10xxxxxx + if (0x80 != (0xc0 & s[1])) { + return (void *)s; + } + + // ensure that our utf8 codepoint ended after 2 bytes + if (0x80 == (0xc0 & s[2])) { + return (void *)s; + } + + // ensure that the top 4 bits of this 2-byte utf8 + // codepoint were not 0, as then we could have used + // one of the smaller encodings + if (0 == (0x1e & s[0])) { + return (void *)s; + } + + // 2-byte utf8 code point (began with 0b110xxxxx) + s += 2; + } else if (0x00 == (0x80 & *s)) { + // 1-byte ascii (began with 0b0xxxxxxx) + s += 1; + } else { + // we have an invalid 0b1xxxxxxx utf8 code point entry + return (void *)s; + } + } + + return utf8_null; +} + +void *utf8codepoint(const void *utf8_restrict str, + utf8_int32_t *utf8_restrict out_codepoint) +{ + const char *s = (const char *)str; + + if (0xf0 == (0xf8 & s[0])) { + // 4 byte utf8 codepoint + *out_codepoint = ((0x07 & s[0]) << 18) | ((0x3f & s[1]) << 12) | + ((0x3f & s[2]) << 6) | (0x3f & s[3]); + s += 4; + } else if (0xe0 == (0xf0 & s[0])) { + // 3 byte utf8 codepoint + *out_codepoint = + ((0x0f & s[0]) << 12) | ((0x3f & s[1]) << 6) | (0x3f & s[2]); + s += 3; + } else if (0xc0 == (0xe0 & s[0])) { + // 2 byte utf8 codepoint + *out_codepoint = ((0x1f & s[0]) << 6) | (0x3f & s[1]); + s += 2; + } else { + // 1 byte utf8 codepoint otherwise + *out_codepoint = s[0]; + s += 1; + } + + return (void *)s; +} + +size_t utf8codepointsize(utf8_int32_t chr) +{ + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + return 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + return 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + return 3; + } else { // if (0 == ((int)0xffe00000 & chr)) { + return 4; + } +} + +void *utf8catcodepoint(void *utf8_restrict str, utf8_int32_t chr, size_t n) +{ + char *s = (char *)str; + + if (0 == ((utf8_int32_t)0xffffff80 & chr)) { + // 1-byte/7-bit ascii + // (0b0xxxxxxx) + if (n < 1) { + return utf8_null; + } + s[0] = (char)chr; + s += 1; + } else if (0 == ((utf8_int32_t)0xfffff800 & chr)) { + // 2-byte/11-bit utf8 code point + // (0b110xxxxx 0b10xxxxxx) + if (n < 2) { + return utf8_null; + } + s[0] = 0xc0 | (char)(chr >> 6); + s[1] = 0x80 | (char)(chr & 0x3f); + s += 2; + } else if (0 == ((utf8_int32_t)0xffff0000 & chr)) { + // 3-byte/16-bit utf8 code point + // (0b1110xxxx 0b10xxxxxx 0b10xxxxxx) + if (n < 3) { + return utf8_null; + } + s[0] = 0xe0 | (char)(chr >> 12); + s[1] = 0x80 | (char)((chr >> 6) & 0x3f); + s[2] = 0x80 | (char)(chr & 0x3f); + s += 3; + } else { // if (0 == ((int)0xffe00000 & chr)) { + // 4-byte/21-bit utf8 code point + // (0b11110xxx 0b10xxxxxx 0b10xxxxxx 0b10xxxxxx) + if (n < 4) { + return utf8_null; + } + s[0] = 0xf0 | (char)(chr >> 18); + s[1] = 0x80 | (char)((chr >> 12) & 0x3f); + s[2] = 0x80 | (char)((chr >> 6) & 0x3f); + s[3] = 0x80 | (char)(chr & 0x3f); + s += 4; + } + + return s; +} + +int utf8islower(utf8_int32_t chr) { return chr != utf8uprcodepoint(chr); } + +int utf8isupper(utf8_int32_t chr) { return chr != utf8lwrcodepoint(chr); } + +void utf8lwr(void *utf8_restrict str) +{ + void *p, *pn; + utf8_int32_t cp; + + p = (char *)str; + pn = utf8codepoint(p, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8lwrcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(p, lwr_cp, size); + } + + p = pn; + pn = utf8codepoint(p, &cp); + } +} + +void utf8upr(void *utf8_restrict str) +{ + void *p, *pn; + utf8_int32_t cp; + + p = (char *)str; + pn = utf8codepoint(p, &cp); + + while (cp != 0) { + const utf8_int32_t lwr_cp = utf8uprcodepoint(cp); + const size_t size = utf8codepointsize(lwr_cp); + + if (lwr_cp != cp) { + utf8catcodepoint(p, lwr_cp, size); + } + + p = pn; + pn = utf8codepoint(p, &cp); + } +} + +utf8_int32_t utf8lwrcodepoint(utf8_int32_t cp) +{ + if (((0x0041 <= cp) && (0x005a >= cp)) || + ((0x00c0 <= cp) && (0x00d6 >= cp)) || + ((0x00d8 <= cp) && (0x00de >= cp)) || + ((0x0391 <= cp) && (0x03a1 >= cp)) || + ((0x03a3 <= cp) && (0x03ab >= cp))) { + cp += 32; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp))) { + cp |= 0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp += 1; + cp &= ~0x1; + } else { + switch (cp) { + default: break; + case 0x0178: cp = 0x00ff; break; + case 0x0243: cp = 0x0180; break; + case 0x018e: cp = 0x01dd; break; + case 0x023d: cp = 0x019a; break; + case 0x0220: cp = 0x019e; break; + case 0x01b7: cp = 0x0292; break; + case 0x01c4: cp = 0x01c6; break; + case 0x01c7: cp = 0x01c9; break; + case 0x01ca: cp = 0x01cc; break; + case 0x01f1: cp = 0x01f3; break; + case 0x01f7: cp = 0x01bf; break; + case 0x0187: cp = 0x0188; break; + case 0x018b: cp = 0x018c; break; + case 0x0191: cp = 0x0192; break; + case 0x0198: cp = 0x0199; break; + case 0x01a7: cp = 0x01a8; break; + case 0x01ac: cp = 0x01ad; break; + case 0x01af: cp = 0x01b0; break; + case 0x01b8: cp = 0x01b9; break; + case 0x01bc: cp = 0x01bd; break; + case 0x01f4: cp = 0x01f5; break; + case 0x023b: cp = 0x023c; break; + case 0x0241: cp = 0x0242; break; + case 0x03fd: cp = 0x037b; break; + case 0x03fe: cp = 0x037c; break; + case 0x03ff: cp = 0x037d; break; + case 0x037f: cp = 0x03f3; break; + case 0x0386: cp = 0x03ac; break; + case 0x0388: cp = 0x03ad; break; + case 0x0389: cp = 0x03ae; break; + case 0x038a: cp = 0x03af; break; + case 0x038c: cp = 0x03cc; break; + case 0x038e: cp = 0x03cd; break; + case 0x038f: cp = 0x03ce; break; + case 0x0370: cp = 0x0371; break; + case 0x0372: cp = 0x0373; break; + case 0x0376: cp = 0x0377; break; + case 0x03f4: cp = 0x03d1; break; + case 0x03cf: cp = 0x03d7; break; + case 0x03f9: cp = 0x03f2; break; + case 0x03f7: cp = 0x03f8; break; + case 0x03fa: cp = 0x03fb; break; + }; + } + + return cp; +} + +utf8_int32_t utf8uprcodepoint(utf8_int32_t cp) +{ + if (((0x0061 <= cp) && (0x007a >= cp)) || + ((0x00e0 <= cp) && (0x00f6 >= cp)) || + ((0x00f8 <= cp) && (0x00fe >= cp)) || + ((0x03b1 <= cp) && (0x03c1 >= cp)) || + ((0x03c3 <= cp) && (0x03cb >= cp))) { + cp -= 32; + } else if (((0x0100 <= cp) && (0x012f >= cp)) || + ((0x0132 <= cp) && (0x0137 >= cp)) || + ((0x014a <= cp) && (0x0177 >= cp)) || + ((0x0182 <= cp) && (0x0185 >= cp)) || + ((0x01a0 <= cp) && (0x01a5 >= cp)) || + ((0x01de <= cp) && (0x01ef >= cp)) || + ((0x01f8 <= cp) && (0x021f >= cp)) || + ((0x0222 <= cp) && (0x0233 >= cp)) || + ((0x0246 <= cp) && (0x024f >= cp)) || + ((0x03d8 <= cp) && (0x03ef >= cp))) { + cp &= ~0x1; + } else if (((0x0139 <= cp) && (0x0148 >= cp)) || + ((0x0179 <= cp) && (0x017e >= cp)) || + ((0x01af <= cp) && (0x01b0 >= cp)) || + ((0x01b3 <= cp) && (0x01b6 >= cp)) || + ((0x01cd <= cp) && (0x01dc >= cp))) { + cp -= 1; + cp |= 0x1; + } else { + switch (cp) { + default: break; + case 0x00ff: cp = 0x0178; break; + case 0x0180: cp = 0x0243; break; + case 0x01dd: cp = 0x018e; break; + case 0x019a: cp = 0x023d; break; + case 0x019e: cp = 0x0220; break; + case 0x0292: cp = 0x01b7; break; + case 0x01c6: cp = 0x01c4; break; + case 0x01c9: cp = 0x01c7; break; + case 0x01cc: cp = 0x01ca; break; + case 0x01f3: cp = 0x01f1; break; + case 0x01bf: cp = 0x01f7; break; + case 0x0188: cp = 0x0187; break; + case 0x018c: cp = 0x018b; break; + case 0x0192: cp = 0x0191; break; + case 0x0199: cp = 0x0198; break; + case 0x01a8: cp = 0x01a7; break; + case 0x01ad: cp = 0x01ac; break; + case 0x01b0: cp = 0x01af; break; + case 0x01b9: cp = 0x01b8; break; + case 0x01bd: cp = 0x01bc; break; + case 0x01f5: cp = 0x01f4; break; + case 0x023c: cp = 0x023b; break; + case 0x0242: cp = 0x0241; break; + case 0x037b: cp = 0x03fd; break; + case 0x037c: cp = 0x03fe; break; + case 0x037d: cp = 0x03ff; break; + case 0x03f3: cp = 0x037f; break; + case 0x03ac: cp = 0x0386; break; + case 0x03ad: cp = 0x0388; break; + case 0x03ae: cp = 0x0389; break; + case 0x03af: cp = 0x038a; break; + case 0x03cc: cp = 0x038c; break; + case 0x03cd: cp = 0x038e; break; + case 0x03ce: cp = 0x038f; break; + case 0x0371: cp = 0x0370; break; + case 0x0373: cp = 0x0372; break; + case 0x0377: cp = 0x0376; break; + case 0x03d1: cp = 0x03f4; break; + case 0x03d7: cp = 0x03cf; break; + case 0x03f2: cp = 0x03f9; break; + case 0x03f8: cp = 0x03f7; break; + case 0x03fb: cp = 0x03fa; break; + }; + } + + return cp; +} + +#undef utf8_restrict +#undef utf8_null + +#ifdef __cplusplus +} // extern "C" +#endif + +#if defined(__clang__) +#pragma clang diagnostic pop +#endif + +#endif // SHEREDOM_UTF8_H_INCLUDED + + +/******************************************************** + End of file "utf8.h" + ********************************************************/ + + +/******************************************************** + Begin of file "string_buffer.h" + ********************************************************/ + +#ifndef STRING_BUFFER_H +#define STRING_BUFFER_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + + +/***************************************************************************** + * STRING BUFFER + * ***************************************************************************/ + +struct f_string_buffer { + union { + char *cstr; +#ifdef FT_HAVE_WCHAR + wchar_t *wstr; +#endif +#ifdef FT_HAVE_UTF8 + void *u8str; +#endif + void *data; + } str; + size_t data_sz; + enum f_string_type type; +}; + +FT_INTERNAL +f_string_buffer_t *create_string_buffer(size_t number_of_chars, enum f_string_type type); + +FT_INTERNAL +void destroy_string_buffer(f_string_buffer_t *buffer); + +FT_INTERNAL +f_string_buffer_t *copy_string_buffer(const f_string_buffer_t *buffer); + +FT_INTERNAL +f_status realloc_string_buffer_without_copy(f_string_buffer_t *buffer); + +FT_INTERNAL +f_status fill_buffer_from_string(f_string_buffer_t *buffer, const char *str); + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_status fill_buffer_from_wstring(f_string_buffer_t *buffer, const wchar_t *str); +#endif /* FT_HAVE_WCHAR */ + +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +f_status fill_buffer_from_u8string(f_string_buffer_t *buffer, const void *str); +#endif /* FT_HAVE_UTF8 */ + +FT_INTERNAL +size_t buffer_text_visible_width(const f_string_buffer_t *buffer); + +FT_INTERNAL +size_t buffer_text_visible_height(const f_string_buffer_t *buffer); + +FT_INTERNAL +size_t string_buffer_cod_width_capacity(const f_string_buffer_t *buffer); + +FT_INTERNAL +size_t string_buffer_raw_capacity(const f_string_buffer_t *buffer); + +FT_INTERNAL +size_t string_buffer_width_capacity(const f_string_buffer_t *buffer); + +FT_INTERNAL +void *buffer_get_data(f_string_buffer_t *buffer); + +FT_INTERNAL +int buffer_check_align(f_string_buffer_t *buffer); + +FT_INTERNAL +int buffer_printf(f_string_buffer_t *buffer, size_t buffer_row, f_conv_context_t *cntx, size_t cod_width, + const char *content_style_tag, const char *reset_content_style_tag); + +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +void buffer_set_u8strwid_func(int (*u8strwid)(const void *beg, const void *end, size_t *width)); +#endif /* FT_HAVE_UTF8 */ + + +#endif /* STRING_BUFFER_H */ + +/******************************************************** + End of file "string_buffer.h" + ********************************************************/ + + +/******************************************************** + Begin of file "properties.h" + ********************************************************/ + +#ifndef PROPERTIES_H +#define PROPERTIES_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +#include +#include + +#define PROP_IS_SET(ft_props, property) ((ft_props) & (property)) +#define PROP_SET(ft_props, property) ((ft_props) |=(property)) +#define PROP_UNSET(ft_props, property) ((ft_props) &= ~((uint32_t)(property))) + +#define TEXT_STYLE_TAG_MAX_SIZE (64 * 2) + +FT_INTERNAL +void get_style_tag_for_cell(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz); + +FT_INTERNAL +void get_reset_style_tag_for_cell(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz); + +FT_INTERNAL +void get_style_tag_for_content(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz); + +FT_INTERNAL +void get_reset_style_tag_for_content(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz); + + +struct f_cell_props { + size_t cell_row; + size_t cell_col; + uint32_t properties_flags; + + unsigned int col_min_width; + enum ft_text_alignment align; + unsigned int cell_padding_top; + unsigned int cell_padding_bottom; + unsigned int cell_padding_left; + unsigned int cell_padding_right; + unsigned int cell_empty_string_height; + enum ft_row_type row_type; + unsigned int content_fg_color_number; + unsigned int content_bg_color_number; + unsigned int cell_bg_color_number; + enum ft_text_style cell_text_style; + enum ft_text_style content_text_style; +}; + +typedef struct f_cell_props f_cell_props_t; +typedef f_vector_t f_cell_prop_container_t; + +FT_INTERNAL +f_cell_prop_container_t *create_cell_prop_container(void); + +FT_INTERNAL +void destroy_cell_prop_container(f_cell_prop_container_t *cont); + +FT_INTERNAL +const f_cell_props_t *cget_cell_prop(const f_cell_prop_container_t *cont, size_t row, size_t col); + +FT_INTERNAL +f_cell_props_t *get_cell_prop_and_create_if_not_exists(f_cell_prop_container_t *cont, size_t row, size_t col); + +FT_INTERNAL +f_status set_cell_property(f_cell_prop_container_t *cont, size_t row, size_t col, uint32_t property, int value); + +FT_INTERNAL +int get_cell_property_hierarchically(const f_table_properties_t *properties, size_t row, size_t column, uint32_t property); + +FT_INTERNAL +f_status set_default_cell_property(uint32_t property, int value); + + +/* TABLE BORDER DESСRIPTION + * + * + * TL TT TT TT TV TT TT TT TT TT TT TT TR + * LL IV RR + * LL IV RR + * LH IH IH IH II IH IH IH TI IH IH IH RH + * LL IV IV RR + * LL IV IV RR + * LL LI IH IH IH RI RH + * LL IV IV RR + * LL IV IV RR + * LH IH IH IH BI IH IH IH II IH IH IH RH + * LL IV RR + * LL IV RR + * BL BB BB BB BV BB BB BB BV BB BB BB BR + */ + + +/* HORIZONTAL SEPARATOR DESCRIPTION + * + * + * TL TT TT TT TV TT TT TT TV TT TT TT TR <----- TOP_SEPARATOR + * LL IV IV RR + * LH IH IH IH II IH IH IH II IH IH IH RH <----- INSIDE_SEPARATOR + * LL IV IV RR + * BL BB BB BB BV BB BB BB BV BB BB BB BR <----- BOTTOM_SEPARATOR + */ + +enum f_hor_separator_pos { + TOP_SEPARATOR, + INSIDE_SEPARATOR, + BOTTOM_SEPARATOR +}; + +enum f_border_item_pos { + TL_bip = 0, + TT_bip = 1, + TV_bip = 2, + TR_bip = 3, + + LL_bip = 4, + IV_bip = 5, + RR_bip = 6, + + LH_bip = 7, + IH_bip = 8, + II_bip = 9, + RH_bip = 10, + + BL_bip = 11, + BB_bip = 12, + BV_bip = 13, + BR_bip = 14, + + LI_bip = 15, + TI_bip = 16, + RI_bip = 17, + BI_bip = 18, + + BORDER_ITEM_POS_SIZE +}; + + +enum f_separator_item_pos { + LH_sip = 0, + IH_sip = 1, + II_sip = 2, + RH_sip = 3, + + TI_sip = 4, + BI_sip = 5, + + SEPARATOR_ITEM_POS_SIZE +}; + + +struct fort_border_style { + const char *border_chars[BORDER_ITEM_POS_SIZE]; + const char *header_border_chars[BORDER_ITEM_POS_SIZE]; + const char *separator_chars[SEPARATOR_ITEM_POS_SIZE]; +}; +extern struct fort_border_style FORT_BASIC_STYLE; +extern struct fort_border_style FORT_BASIC2_STYLE; +extern struct fort_border_style FORT_SIMPLE_STYLE; +extern struct fort_border_style FORT_PLAIN_STYLE; +extern struct fort_border_style FORT_DOT_STYLE; +extern struct fort_border_style FORT_EMPTY_STYLE; +extern struct fort_border_style FORT_EMPTY2_STYLE; +extern struct fort_border_style FORT_SOLID_STYLE; +extern struct fort_border_style FORT_SOLID_ROUND_STYLE; +extern struct fort_border_style FORT_NICE_STYLE; +extern struct fort_border_style FORT_DOUBLE_STYLE; +extern struct fort_border_style FORT_DOUBLE2_STYLE; +extern struct fort_border_style FORT_BOLD_STYLE; +extern struct fort_border_style FORT_BOLD2_STYLE; +extern struct fort_border_style FORT_FRAME_STYLE; + + +struct fort_entire_table_properties { + unsigned int left_margin; + unsigned int top_margin; + unsigned int right_margin; + unsigned int bottom_margin; + enum ft_adding_strategy add_strategy; +}; +typedef struct fort_entire_table_properties fort_entire_table_properties_t; +extern fort_entire_table_properties_t g_entire_table_properties; + +FT_INTERNAL +f_status set_entire_table_property(f_table_properties_t *table_properties, uint32_t property, int value); + +FT_INTERNAL +f_status set_default_entire_table_property(uint32_t property, int value); + +struct f_table_properties { + struct fort_border_style border_style; + f_cell_prop_container_t *cell_properties; + fort_entire_table_properties_t entire_table_properties; +}; +extern f_table_properties_t g_table_properties; + +FT_INTERNAL +size_t max_border_elem_strlen(struct f_table_properties *); + +FT_INTERNAL +f_table_properties_t *create_table_properties(void); + +FT_INTERNAL +void destroy_table_properties(f_table_properties_t *properties); + +FT_INTERNAL +f_table_properties_t *copy_table_properties(const f_table_properties_t *property); + +#endif /* PROPERTIES_H */ + +/******************************************************** + End of file "properties.h" + ********************************************************/ + + +/******************************************************** + Begin of file "cell.h" + ********************************************************/ + +#ifndef CELL_H +#define CELL_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + +FT_INTERNAL +f_cell_t *create_cell(void); + +FT_INTERNAL +void destroy_cell(f_cell_t *cell); + +FT_INTERNAL +f_cell_t *copy_cell(f_cell_t *cell); + +FT_INTERNAL +size_t cell_vis_width(const f_cell_t *cell, const f_context_t *context); + +FT_INTERNAL +size_t cell_invis_codes_width(const f_cell_t *cell, const f_context_t *context); + +FT_INTERNAL +size_t hint_height_cell(const f_cell_t *cell, const f_context_t *context); + +FT_INTERNAL +void set_cell_type(f_cell_t *cell, enum f_cell_type type); + +FT_INTERNAL +enum f_cell_type get_cell_type(const f_cell_t *cell); + +FT_INTERNAL +int cell_printf(f_cell_t *cell, size_t row, f_conv_context_t *cntx, size_t cod_width); + +FT_INTERNAL +f_status fill_cell_from_string(f_cell_t *cell, const char *str); + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_status fill_cell_from_wstring(f_cell_t *cell, const wchar_t *str); +#endif + +FT_INTERNAL +f_status fill_cell_from_buffer(f_cell_t *cell, const f_string_buffer_t *buf); + +FT_INTERNAL +f_string_buffer_t *cell_get_string_buffer(f_cell_t *cell); + +#endif /* CELL_H */ + +/******************************************************** + End of file "cell.h" + ********************************************************/ + + +/******************************************************** + Begin of file "row.h" + ********************************************************/ + +#ifndef ROW_H +#define ROW_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +#include "fort.h" +#include +/* #include "properties.h" */ /* Commented by amalgamation script */ +#ifdef FT_HAVE_WCHAR +#include +#endif + +FT_INTERNAL +f_row_t *create_row(void); + +FT_INTERNAL +void destroy_row(f_row_t *row); + +FT_INTERNAL +f_row_t *copy_row(f_row_t *row); + +FT_INTERNAL +f_row_t *split_row(f_row_t *row, size_t pos); + +// Delete range [left; right] of cells (both ends included) +FT_INTERNAL +int ft_row_erase_range(f_row_t *row, size_t left, size_t right); + +FT_INTERNAL +f_row_t *create_row_from_string(const char *str); + +FT_INTERNAL +f_row_t *create_row_from_fmt_string(const struct f_string_view *fmt, va_list *va_args); + +FT_INTERNAL +size_t columns_in_row(const f_row_t *row); + +FT_INTERNAL +f_cell_t *get_cell(f_row_t *row, size_t col); + +FT_INTERNAL +const f_cell_t *get_cell_c(const f_row_t *row, size_t col); + +FT_INTERNAL +f_cell_t *get_cell_and_create_if_not_exists(f_row_t *row, size_t col); + +FT_INTERNAL +f_cell_t *create_cell_in_position(f_row_t *row, size_t col); + +FT_INTERNAL +f_status swap_row(f_row_t *cur_row, f_row_t *ins_row, size_t pos); + +FT_INTERNAL +f_status insert_row(f_row_t *cur_row, f_row_t *ins_row, size_t pos); + +FT_INTERNAL +size_t group_cell_number(const f_row_t *row, size_t master_cell_col); + +FT_INTERNAL +int get_row_cell_types(const f_row_t *row, enum f_cell_type *types, size_t types_sz); + +FT_INTERNAL +f_status row_set_cell_span(f_row_t *row, size_t cell_column, size_t hor_span); + +FT_INTERNAL +int print_row_separator(f_conv_context_t *cntx, + const size_t *col_width_arr, size_t cols, + const f_row_t *upper_row, const f_row_t *lower_row, + enum f_hor_separator_pos separatorPos, const f_separator_t *sep); + +FT_INTERNAL +int snprintf_row(const f_row_t *row, f_conv_context_t *cntx, size_t *col_width_arr, size_t col_width_arr_sz, + size_t row_height); + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_row_t *create_row_from_wstring(const wchar_t *str); +#endif + + +#endif /* ROW_H */ + +/******************************************************** + End of file "row.h" + ********************************************************/ + + +/******************************************************** + Begin of file "table.h" + ********************************************************/ + +#ifndef TABLE_H +#define TABLE_H + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ + +struct ft_table { + f_vector_t *rows; + f_table_properties_t *properties; + f_string_buffer_t *conv_buffer; + size_t cur_row; + size_t cur_col; + f_vector_t *separators; +}; + +FT_INTERNAL +f_separator_t *create_separator(int enabled); + +FT_INTERNAL +void destroy_separator(f_separator_t *sep); + +FT_INTERNAL +f_separator_t *copy_separator(f_separator_t *sep); + +FT_INTERNAL +f_status get_table_sizes(const ft_table_t *table, size_t *rows, size_t *cols); + +FT_INTERNAL +f_row_t *get_row(ft_table_t *table, size_t row); + +FT_INTERNAL +const f_row_t *get_row_c(const ft_table_t *table, size_t row); + +FT_INTERNAL +f_row_t *get_row_and_create_if_not_exists(ft_table_t *table, size_t row); + +FT_INTERNAL +f_string_buffer_t *get_cur_str_buffer_and_create_if_not_exists(ft_table_t *table); + + +FT_INTERNAL +f_status table_rows_and_cols_geometry(const ft_table_t *table, + size_t **col_width_arr_p, size_t *col_width_arr_sz, + size_t **row_height_arr_p, size_t *row_height_arr_sz, + enum f_geometry_type geom); + +FT_INTERNAL +f_status table_geometry(const ft_table_t *table, size_t *height, size_t *width); + +/* + * Returns geometry in codepoints(characters) (include codepoints of invisible + * elements: e.g. styles tags). + */ +FT_INTERNAL +f_status table_internal_codepoints_geometry(const ft_table_t *table, size_t *height, size_t *width); + +#endif /* TABLE_H */ + +/******************************************************** + End of file "table.h" + ********************************************************/ + + +/******************************************************** + Begin of file "cell.c" + ********************************************************/ + +/* #include "cell.h" */ /* Commented by amalgamation script */ +/* #include "properties.h" */ /* Commented by amalgamation script */ +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +#include + +struct f_cell { + f_string_buffer_t *str_buffer; + enum f_cell_type cell_type; +}; + +FT_INTERNAL +f_cell_t *create_cell(void) +{ + f_cell_t *cell = (f_cell_t *)F_CALLOC(sizeof(f_cell_t), 1); + if (cell == NULL) + return NULL; + cell->str_buffer = create_string_buffer(DEFAULT_STR_BUF_SIZE, CHAR_BUF); + if (cell->str_buffer == NULL) { + F_FREE(cell); + return NULL; + } + cell->cell_type = COMMON_CELL; + return cell; +} + +FT_INTERNAL +void destroy_cell(f_cell_t *cell) +{ + if (cell == NULL) + return; + destroy_string_buffer(cell->str_buffer); + F_FREE(cell); +} + +FT_INTERNAL +f_cell_t *copy_cell(f_cell_t *cell) +{ + assert(cell); + + f_cell_t *result = create_cell(); + if (result == NULL) + return NULL; + destroy_string_buffer(result->str_buffer); + result->str_buffer = copy_string_buffer(cell->str_buffer); + if (result->str_buffer == NULL) { + destroy_cell(result); + return NULL; + } + result->cell_type = cell->cell_type; + return result; +} + +FT_INTERNAL +void set_cell_type(f_cell_t *cell, enum f_cell_type type) +{ + assert(cell); + cell->cell_type = type; +} + +FT_INTERNAL +enum f_cell_type get_cell_type(const f_cell_t *cell) +{ + assert(cell); + return cell->cell_type; +} + +FT_INTERNAL +size_t cell_vis_width(const f_cell_t *cell, const f_context_t *context) +{ + /* todo: + * At the moment min width includes paddings. Maybe it is better that min width weren't include + * paddings but be min width of the cell content without padding + */ + + assert(cell); + assert(context); + + f_table_properties_t *properties = context->table_properties; + size_t row = context->row; + size_t column = context->column; + + size_t padding_left = get_cell_property_hierarchically(properties, row, column, FT_CPROP_LEFT_PADDING); + size_t padding_right = get_cell_property_hierarchically(properties, row, column, FT_CPROP_RIGHT_PADDING); + size_t result = padding_left + padding_right; + if (cell->str_buffer && cell->str_buffer->str.data) { + result += buffer_text_visible_width(cell->str_buffer); + } + result = MAX(result, (size_t)get_cell_property_hierarchically(properties, row, column, FT_CPROP_MIN_WIDTH)); + return result; +} + +FT_INTERNAL +size_t cell_invis_codes_width(const f_cell_t *UNUSED(cell), const f_context_t *context) +{ + assert(context); + + f_table_properties_t *properties = context->table_properties; + size_t row = context->row; + size_t column = context->column; + + size_t result = 0; + char cell_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_style_tag_for_cell(properties, row, column, cell_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + result += strlen(cell_style_tag); + + char reset_cell_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_reset_style_tag_for_cell(properties, row, column, reset_cell_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + result += strlen(reset_cell_style_tag); + + char content_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_style_tag_for_content(properties, row, column, content_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + result += strlen(content_style_tag); + + char reset_content_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_reset_style_tag_for_content(properties, row, column, reset_content_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + result += strlen(reset_content_style_tag); + return result; +} + +FT_INTERNAL +size_t hint_height_cell(const f_cell_t *cell, const f_context_t *context) +{ + assert(cell); + assert(context); + f_table_properties_t *properties = context->table_properties; + size_t row = context->row; + size_t column = context->column; + + size_t padding_top = get_cell_property_hierarchically(properties, row, column, FT_CPROP_TOP_PADDING); + size_t padding_bottom = get_cell_property_hierarchically(properties, row, column, FT_CPROP_BOTTOM_PADDING); + size_t empty_string_height = get_cell_property_hierarchically(properties, row, column, FT_CPROP_EMPTY_STR_HEIGHT); + + size_t result = padding_top + padding_bottom; + if (cell->str_buffer && cell->str_buffer->str.data) { + size_t text_height = buffer_text_visible_height(cell->str_buffer); + result += text_height == 0 ? empty_string_height : text_height; + } + return result; +} + + +FT_INTERNAL +int cell_printf(f_cell_t *cell, size_t row, f_conv_context_t *cntx, size_t vis_width) +{ + const f_context_t *context = cntx->cntx; + size_t buf_len = vis_width; + + if (cell == NULL || (vis_width < cell_vis_width(cell, context))) { + return -1; + } + + f_table_properties_t *properties = context->table_properties; + unsigned int padding_top = get_cell_property_hierarchically(properties, context->row, context->column, FT_CPROP_TOP_PADDING); + unsigned int padding_left = get_cell_property_hierarchically(properties, context->row, context->column, FT_CPROP_LEFT_PADDING); + unsigned int padding_right = get_cell_property_hierarchically(properties, context->row, context->column, FT_CPROP_RIGHT_PADDING); + + size_t written = 0; + size_t invisible_written = 0; + int tmp = 0; + + /* todo: Dirty hack with changing buf_len! need refactoring. */ + /* Also maybe it is better to move all struff with colors to buffers? */ + char cell_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_style_tag_for_cell(properties, context->row, context->column, cell_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + buf_len += strlen(cell_style_tag); + + char reset_cell_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_reset_style_tag_for_cell(properties, context->row, context->column, reset_cell_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + buf_len += strlen(reset_cell_style_tag); + + char content_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_style_tag_for_content(properties, context->row, context->column, content_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + buf_len += strlen(content_style_tag); + + char reset_content_style_tag[TEXT_STYLE_TAG_MAX_SIZE]; + get_reset_style_tag_for_content(properties, context->row, context->column, reset_content_style_tag, TEXT_STYLE_TAG_MAX_SIZE); + buf_len += strlen(reset_content_style_tag); + + /* CELL_STYLE_T LEFT_PADDING CONTENT_STYLE_T CONTENT RESET_CONTENT_STYLE_T RIGHT_PADDING RESET_CELL_STYLE_T + * | | | | | | | | + * L1 R1 + * L2 R2 + * L3 R3 + */ + + size_t L2 = padding_left; + + size_t R2 = padding_right; + size_t R3 = strlen(reset_cell_style_tag); + +#define TOTAL_WRITTEN (written + invisible_written) +#define RIGHT (padding_right + extra_right) + +#define WRITE_CELL_STYLE_TAG CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(print_n_strings(cntx, 1, cell_style_tag)) +#define WRITE_RESET_CELL_STYLE_TAG CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(print_n_strings(cntx, 1, reset_cell_style_tag)) +#define WRITE_CONTENT_STYLE_TAG CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(print_n_strings(cntx, 1, content_style_tag)) +#define WRITE_RESET_CONTENT_STYLE_TAG CHCK_RSLT_ADD_TO_INVISIBLE_WRITTEN(print_n_strings(cntx, 1, reset_content_style_tag)) + + if (row >= hint_height_cell(cell, context) + || row < padding_top + || row >= (padding_top + buffer_text_visible_height(cell->str_buffer))) { + WRITE_CELL_STYLE_TAG; + WRITE_CONTENT_STYLE_TAG; + WRITE_RESET_CONTENT_STYLE_TAG; + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, buf_len - TOTAL_WRITTEN - R3, FT_SPACE)); + WRITE_RESET_CELL_STYLE_TAG; + + return (int)TOTAL_WRITTEN; + } + + WRITE_CELL_STYLE_TAG; + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, L2, FT_SPACE)); + if (cell->str_buffer) { + CHCK_RSLT_ADD_TO_WRITTEN(buffer_printf(cell->str_buffer, row - padding_top, cntx, vis_width - L2 - R2, content_style_tag, reset_content_style_tag)); + } else { + WRITE_CONTENT_STYLE_TAG; + WRITE_RESET_CONTENT_STYLE_TAG; + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, vis_width - L2 - R2, FT_SPACE)); + } + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, R2, FT_SPACE)); + WRITE_RESET_CELL_STYLE_TAG; + + return (int)TOTAL_WRITTEN; + +clear: + return -1; +#undef WRITE_CELL_STYLE_TAG +#undef WRITE_RESET_CELL_STYLE_TAG +#undef WRITE_CONTENT_STYLE_TAG +#undef WRITE_RESET_CONTENT_STYLE_TAG +#undef TOTAL_WRITTEN +#undef RIGHT +} + +FT_INTERNAL +f_status fill_cell_from_string(f_cell_t *cell, const char *str) +{ + assert(str); + assert(cell); + + return fill_buffer_from_string(cell->str_buffer, str); +} + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_status fill_cell_from_wstring(f_cell_t *cell, const wchar_t *str) +{ + assert(str); + assert(cell); + + return fill_buffer_from_wstring(cell->str_buffer, str); +} +#endif + +#ifdef FT_HAVE_UTF8 +static +f_status fill_cell_from_u8string(f_cell_t *cell, const void *str) +{ + assert(str); + assert(cell); + return fill_buffer_from_u8string(cell->str_buffer, str); +} +#endif /* FT_HAVE_UTF8 */ + +FT_INTERNAL +f_string_buffer_t *cell_get_string_buffer(f_cell_t *cell) +{ + assert(cell); + assert(cell->str_buffer); + return cell->str_buffer; +} + +FT_INTERNAL +f_status fill_cell_from_buffer(f_cell_t *cell, const f_string_buffer_t *buffer) +{ + assert(cell); + assert(buffer); + switch (buffer->type) { + case CHAR_BUF: + return fill_cell_from_string(cell, buffer->str.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return fill_cell_from_wstring(cell, buffer->str.wstr); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return fill_cell_from_u8string(cell, buffer->str.u8str); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + return FT_GEN_ERROR; + } + +} + +/******************************************************** + End of file "cell.c" + ********************************************************/ + + +/******************************************************** + Begin of file "fort_impl.c" + ********************************************************/ + +/* +libfort + +MIT License + +Copyright (c) 2017 - 2018 Seleznev Anton + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +#include +#include +#include +#include "fort.h" +#include +#include +#include + +/* #include "vector.h" */ /* Commented by amalgamation script */ +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +/* #include "table.h" */ /* Commented by amalgamation script */ +/* #include "row.h" */ /* Commented by amalgamation script */ +/* #include "properties.h" */ /* Commented by amalgamation script */ + + +ft_table_t *ft_create_table(void) +{ + ft_table_t *result = (ft_table_t *)F_CALLOC(1, sizeof(ft_table_t)); + if (result == NULL) + return NULL; + + result->rows = create_vector(sizeof(f_row_t *), DEFAULT_VECTOR_CAPACITY); + if (result->rows == NULL) { + F_FREE(result); + return NULL; + } + result->separators = create_vector(sizeof(f_separator_t *), DEFAULT_VECTOR_CAPACITY); + if (result->separators == NULL) { + destroy_vector(result->rows); + F_FREE(result); + return NULL; + } + + result->properties = create_table_properties(); + if (result->properties == NULL) { + destroy_vector(result->separators); + destroy_vector(result->rows); + F_FREE(result); + return NULL; + } + result->conv_buffer = NULL; + result->cur_row = 0; + result->cur_col = 0; + return result; +} + + +void ft_destroy_table(ft_table_t *table) +{ + size_t i = 0; + + if (table == NULL) + return; + + if (table->rows) { + size_t row_n = vector_size(table->rows); + for (i = 0; i < row_n; ++i) { + destroy_row(VECTOR_AT(table->rows, i, f_row_t *)); + } + destroy_vector(table->rows); + } + if (table->separators) { + size_t row_n = vector_size(table->separators); + for (i = 0; i < row_n; ++i) { + destroy_separator(VECTOR_AT(table->separators, i, f_separator_t *)); + } + destroy_vector(table->separators); + } + destroy_table_properties(table->properties); + destroy_string_buffer(table->conv_buffer); + F_FREE(table); +} + +ft_table_t *ft_copy_table(ft_table_t *table) +{ + if (table == NULL) + return NULL; + + ft_table_t *result = ft_create_table(); + if (result == NULL) + return NULL; + + size_t i = 0; + size_t rows_n = vector_size(table->rows); + for (i = 0; i < rows_n; ++i) { + f_row_t *row = VECTOR_AT(table->rows, i, f_row_t *); + f_row_t *new_row = copy_row(row); + if (new_row == NULL) { + ft_destroy_table(result); + return NULL; + } + vector_push(result->rows, &new_row); + } + + size_t sep_sz = vector_size(table->separators); + for (i = 0; i < sep_sz; ++i) { + f_separator_t *sep = VECTOR_AT(table->separators, i, f_separator_t *); + f_separator_t *new_sep = copy_separator(sep); + if (new_sep == NULL) { + ft_destroy_table(result); + return NULL; + } + vector_push(result->separators, &new_sep); + } + + /* note: by default new table has allocated default properties, so we + * have to destroy them first. + */ + if (result->properties) { + destroy_table_properties(result->properties); + } + result->properties = copy_table_properties(table->properties); + if (result->properties == NULL) { + ft_destroy_table(result); + return NULL; + } + + /* todo: copy conv_buffer ?? */ + + result->cur_row = table->cur_row; + result->cur_col = table->cur_col; + return result; +} + +static int split_cur_row(ft_table_t *table, f_row_t **tail_of_cur_row) +{ + if (table->cur_row >= vector_size(table->rows)) { + tail_of_cur_row = NULL; + return 0; + } + + f_row_t *row = VECTOR_AT(table->rows, table->cur_row, f_row_t *); + if (table->cur_col >= columns_in_row(row)) { + tail_of_cur_row = NULL; + return 0; + } + + f_row_t *tail = split_row(row, table->cur_col); + if (!tail) { + tail_of_cur_row = NULL; + return FT_GEN_ERROR; + } + + *tail_of_cur_row = tail; + return 0; +} + +int ft_ln(ft_table_t *table) +{ + assert(table); + fort_entire_table_properties_t *table_props = &table->properties->entire_table_properties; + switch (table_props->add_strategy) { + case FT_STRATEGY_INSERT: { + f_row_t *new_row = NULL; + if (FT_IS_ERROR(split_cur_row(table, &new_row))) { + return FT_GEN_ERROR; + } + if (new_row) { + if (FT_IS_ERROR(vector_insert(table->rows, &new_row, table->cur_row + 1))) { + destroy_row(new_row); + return FT_GEN_ERROR; + } + } + break; + } + case FT_STRATEGY_REPLACE: + // do nothing + break; + default: + assert(0 && "Unexpected situation inside libfort"); + break; + } + table->cur_col = 0; + table->cur_row++; + return FT_SUCCESS; +} + +size_t ft_cur_row(const ft_table_t *table) +{ + assert(table); + return table->cur_row; +} + +size_t ft_cur_col(const ft_table_t *table) +{ + assert(table); + return table->cur_col; +} + +void ft_set_cur_cell(ft_table_t *table, size_t row, size_t col) +{ + assert(table); + table->cur_row = row; + table->cur_col = col; +} + +int ft_is_empty(const ft_table_t *table) +{ + assert(table); + return ft_row_count(table) == 0; +} + +size_t ft_row_count(const ft_table_t *table) +{ + assert(table && table->rows); + return vector_size(table->rows); +} + +int ft_erase_range(ft_table_t *table, + size_t top_left_row, size_t top_left_col, + size_t bottom_right_row, size_t bottom_right_col) +{ + assert(table && table->rows); + int status = FT_SUCCESS; + + size_t rows_n = vector_size(table->rows); + + if (top_left_row == FT_CUR_ROW) + top_left_row = table->cur_row; + if (bottom_right_row == FT_CUR_ROW) + bottom_right_row = table->cur_row; + + if (top_left_col == FT_CUR_COLUMN) + top_left_col = table->cur_row; + if (bottom_right_col == FT_CUR_COLUMN) + bottom_right_col = table->cur_row; + + if (top_left_row > bottom_right_row || top_left_col > bottom_right_col) + return FT_EINVAL; + + f_row_t *row = NULL; + size_t i = top_left_row; + while (i < rows_n && i <= bottom_right_row) { + row = VECTOR_AT(table->rows, i, f_row_t *); + status = ft_row_erase_range(row, top_left_col, bottom_right_col); + if (FT_IS_ERROR(status)) + return status; + ++i; + } + + f_separator_t *separator = NULL; + + size_t n_iterations = MIN(rows_n - 1, bottom_right_row) - top_left_row + 1; + size_t j = 0; + i = top_left_row; + for (j = 0; j < n_iterations; ++j) { + row = VECTOR_AT(table->rows, i, f_row_t *); + if (columns_in_row(row)) { + ++i; + } else { + destroy_row(row); + status = vector_erase(table->rows, i); + if (FT_IS_ERROR(status)) + return status; + if (i < vector_size(table->separators)) { + separator = VECTOR_AT(table->separators, i, f_separator_t *); + destroy_separator(separator); + vector_erase(table->separators, i); + } + } + } + + return FT_SUCCESS; +} + + +static int ft_row_printf_impl_(ft_table_t *table, size_t row, const struct f_string_view *fmt, va_list *va) +{ + size_t i = 0; + size_t new_cols = 0; + + if (table == NULL) + return -1; + + f_row_t *new_row = create_row_from_fmt_string(fmt, va); + + if (new_row == NULL) { + return -1; + } + + f_row_t **cur_row_p = NULL; + size_t sz = vector_size(table->rows); + if (row >= sz) { + size_t push_n = row - sz + 1; + for (i = 0; i < push_n; ++i) { + f_row_t *padding_row = create_row(); + if (padding_row == NULL) + goto clear; + + if (FT_IS_ERROR(vector_push(table->rows, &padding_row))) { + destroy_row(padding_row); + goto clear; + } + } + } + /* todo: clearing pushed items in case of error ?? */ + + new_cols = columns_in_row(new_row); + cur_row_p = &VECTOR_AT(table->rows, row, f_row_t *); + + switch (table->properties->entire_table_properties.add_strategy) { + case FT_STRATEGY_INSERT: { + if (FT_IS_ERROR(insert_row(*cur_row_p, new_row, table->cur_col))) + goto clear; + break; + } + case FT_STRATEGY_REPLACE: { + if (FT_IS_ERROR(swap_row(*cur_row_p, new_row, table->cur_col))) + goto clear; + break; + } + default: + assert(0 && "Unexpected situation inside libfort"); + break; + } + + table->cur_col += new_cols; + destroy_row(new_row); + return (int)new_cols; + +clear: + destroy_row(new_row); + return -1; +} + +#if defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) +#define FT_PRINTF ft_printf +#define FT_PRINTF_LN ft_printf_ln +#else +#define FT_PRINTF ft_printf_impl +#define FT_PRINTF_LN ft_printf_ln_impl +#endif + + + +int FT_PRINTF(ft_table_t *table, const char *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = CHAR_BUF; + fmt_str.u.cstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + va_end(va); + return result; +} + +int FT_PRINTF_LN(ft_table_t *table, const char *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = CHAR_BUF; + fmt_str.u.cstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + if (result >= 0) { + ft_ln(table); + } + va_end(va); + return result; +} + +#undef FT_PRINTF +#undef FT_PRINTF_LN + +#ifdef FT_HAVE_WCHAR +int ft_wprintf(ft_table_t *table, const wchar_t *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = W_CHAR_BUF; + fmt_str.u.wstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + va_end(va); + return result; +} + +int ft_wprintf_ln(ft_table_t *table, const wchar_t *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = W_CHAR_BUF; + fmt_str.u.wstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + if (result >= 0) { + ft_ln(table); + } + va_end(va); + return result; +} + +#endif + +void ft_set_default_printf_field_separator(char separator) +{ + g_col_separator = separator; +} + +static int ft_write_impl_(ft_table_t *table, const f_string_view_t *cell_content) +{ + assert(table); + f_string_buffer_t *buf = get_cur_str_buffer_and_create_if_not_exists(table); + if (buf == NULL) + return FT_GEN_ERROR; + + int status = FT_SUCCESS; + switch (cell_content->type) { + case CHAR_BUF: + status = fill_buffer_from_string(buf, cell_content->u.cstr); + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + status = fill_buffer_from_wstring(buf, cell_content->u.wstr); + break; +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + status = fill_buffer_from_u8string(buf, cell_content->u.u8str); + break; +#endif + default: + status = FT_GEN_ERROR; + } + if (FT_IS_SUCCESS(status)) { + table->cur_col++; + } + return status; +} + +static int ft_write_impl(ft_table_t *table, const char *cell_content) +{ + f_string_view_t content; + content.type = CHAR_BUF; + content.u.cstr = cell_content; + return ft_write_impl_(table, &content); +} + +#ifdef FT_HAVE_UTF8 +static int ft_u8write_impl(ft_table_t *table, const void *cell_content) +{ + f_string_view_t content; + content.type = UTF8_BUF; + content.u.u8str = cell_content; + return ft_write_impl_(table, &content); +} +#endif /* FT_HAVE_UTF8 */ + +#ifdef FT_HAVE_WCHAR +static int ft_wwrite_impl(ft_table_t *table, const wchar_t *cell_content) +{ + f_string_view_t content; + content.type = W_CHAR_BUF; + content.u.wstr = cell_content; + return ft_write_impl_(table, &content); +} +#endif + + +int ft_nwrite(ft_table_t *table, size_t count, const char *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_write_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --count; + for (i = 0; i < count; ++i) { + const char *cell = va_arg(va, const char *); + status = ft_write_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + return status; +} + +int ft_nwrite_ln(ft_table_t *table, size_t count, const char *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_write_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --count; + for (i = 0; i < count; ++i) { + const char *cell = va_arg(va, const char *); + status = ft_write_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + + ft_ln(table); + return status; +} + + + + +#ifdef FT_HAVE_WCHAR + +int ft_nwwrite(ft_table_t *table, size_t n, const wchar_t *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_wwrite_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --n; + for (i = 0; i < n; ++i) { + const wchar_t *cell = va_arg(va, const wchar_t *); + status = ft_wwrite_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + return status; +} + +int ft_nwwrite_ln(ft_table_t *table, size_t n, const wchar_t *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_wwrite_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --n; + for (i = 0; i < n; ++i) { + const wchar_t *cell = va_arg(va, const wchar_t *); + status = ft_wwrite_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + + ft_ln(table); + return status; +} +#endif + + +int ft_row_write(ft_table_t *table, size_t cols, const char *cells[]) +{ + size_t i = 0; + assert(table); + for (i = 0; i < cols; ++i) { + int status = ft_write_impl(table, cells[i]); + if (FT_IS_ERROR(status)) { + /* todo: maybe current pos in case of error should be equal to the one before function call? */ + return status; + } + } + return FT_SUCCESS; +} + +int ft_row_write_ln(ft_table_t *table, size_t cols, const char *cells[]) +{ + assert(table); + int status = ft_row_write(table, cols, cells); + if (FT_IS_SUCCESS(status)) { + ft_ln(table); + } + return status; +} + +#ifdef FT_HAVE_WCHAR +int ft_row_wwrite(ft_table_t *table, size_t cols, const wchar_t *cells[]) +{ + size_t i = 0; + assert(table); + for (i = 0; i < cols; ++i) { + int status = ft_wwrite_impl(table, cells[i]); + if (FT_IS_ERROR(status)) { + /* todo: maybe current pos in case of error should be equal + * to the one before function call? + */ + return status; + } + } + return FT_SUCCESS; +} + +int ft_row_wwrite_ln(ft_table_t *table, size_t cols, const wchar_t *cells[]) +{ + assert(table); + int status = ft_row_wwrite(table, cols, cells); + if (FT_IS_SUCCESS(status)) { + ft_ln(table); + } + return status; +} +#endif + + + +int ft_table_write(ft_table_t *table, size_t rows, size_t cols, const char *table_cells[]) +{ + size_t i = 0; + assert(table); + for (i = 0; i < rows; ++i) { + int status = ft_row_write(table, cols, (const char **)&table_cells[i * cols]); + if (FT_IS_ERROR(status)) { + /* todo: maybe current pos in case of error should be equal + * to the one before function call? + */ + return status; + } + if (i != rows - 1) + ft_ln(table); + } + return FT_SUCCESS; +} + +int ft_table_write_ln(ft_table_t *table, size_t rows, size_t cols, const char *table_cells[]) +{ + assert(table); + int status = ft_table_write(table, rows, cols, table_cells); + if (FT_IS_SUCCESS(status)) { + ft_ln(table); + } + return status; +} + + +#ifdef FT_HAVE_WCHAR +int ft_table_wwrite(ft_table_t *table, size_t rows, size_t cols, const wchar_t *table_cells[]) +{ + size_t i = 0; + assert(table); + for (i = 0; i < rows; ++i) { + int status = ft_row_wwrite(table, cols, (const wchar_t **)&table_cells[i * cols]); + if (FT_IS_ERROR(status)) { + /* todo: maybe current pos in case of error should be equal + * to the one before function call? + */ + return status; + } + if (i != rows - 1) + ft_ln(table); + } + return FT_SUCCESS; +} + +int ft_table_wwrite_ln(ft_table_t *table, size_t rows, size_t cols, const wchar_t *table_cells[]) +{ + assert(table); + int status = ft_table_wwrite(table, rows, cols, table_cells); + if (FT_IS_SUCCESS(status)) { + ft_ln(table); + } + return status; +} +#endif + +static +const char *empty_str_arr[] = {"", (const char *)L"", ""}; + +static +const void *ft_to_string_impl(const ft_table_t *table, enum f_string_type b_type) +{ + assert(table); + + const char *result = NULL; + + /* Determine size of table string representation */ + size_t cod_height = 0; + size_t cod_width = 0; + int status = table_internal_codepoints_geometry(table, &cod_height, &cod_width); + if (FT_IS_ERROR(status)) { + return NULL; + } + size_t n_codepoints = cod_height * cod_width + 1; + + /* Allocate string buffer for string representation */ + if (table->conv_buffer == NULL) { + ((ft_table_t *)table)->conv_buffer = create_string_buffer(n_codepoints, b_type); + if (table->conv_buffer == NULL) + return NULL; + } + while (string_buffer_cod_width_capacity(table->conv_buffer) < n_codepoints) { + if (FT_IS_ERROR(realloc_string_buffer_without_copy(table->conv_buffer))) { + return NULL; + } + } + if (!buffer_check_align(table->conv_buffer)) + return NULL; + char *buffer = (char *)buffer_get_data(table->conv_buffer); + + size_t cols = 0; + size_t rows = 0; + size_t *col_vis_width_arr = NULL; + size_t *row_vis_height_arr = NULL; + status = table_rows_and_cols_geometry(table, &col_vis_width_arr, &cols, &row_vis_height_arr, &rows, VISIBLE_GEOMETRY); + if (FT_IS_ERROR(status)) + return NULL; + + if (rows == 0) { + F_FREE(col_vis_width_arr); + F_FREE(row_vis_height_arr); + return empty_str_arr[b_type]; + } + + int tmp = 0; + size_t i = 0; + f_context_t context; + context.table_properties = (table->properties ? table->properties : &g_table_properties); + f_row_t *prev_row = NULL; + f_row_t *cur_row = NULL; + f_separator_t *cur_sep = NULL; + size_t sep_size = vector_size(table->separators); + + f_conv_context_t cntx; + cntx.u.buf = buffer; + cntx.raw_avail = string_buffer_raw_capacity(table->conv_buffer); + cntx.cntx = &context; + cntx.b_type = b_type; + + /* Print top margin */ + for (i = 0; i < context.table_properties->entire_table_properties.top_margin; ++i) { + FT_CHECK(print_n_strings(&cntx, cod_width - 1/* minus new_line*/, FT_SPACE)); + FT_CHECK(print_n_strings(&cntx, 1, FT_NEWLINE)); + } + + for (i = 0; i < rows; ++i) { + cur_sep = (i < sep_size) ? VECTOR_AT(table->separators, i, f_separator_t *) : NULL; + cur_row = VECTOR_AT(table->rows, i, f_row_t *); + enum f_hor_separator_pos separatorPos = (i == 0) ? TOP_SEPARATOR : INSIDE_SEPARATOR; + context.row = i; + FT_CHECK(print_row_separator(&cntx, col_vis_width_arr, cols, prev_row, cur_row, separatorPos, cur_sep)); + FT_CHECK(snprintf_row(cur_row, &cntx, col_vis_width_arr, cols, row_vis_height_arr[i])); + prev_row = cur_row; + } + cur_row = NULL; + cur_sep = (i < sep_size) ? VECTOR_AT(table->separators, i, f_separator_t *) : NULL; + context.row = i; + FT_CHECK(print_row_separator(&cntx, col_vis_width_arr, cols, prev_row, cur_row, BOTTOM_SEPARATOR, cur_sep)); + + /* Print bottom margin */ + for (i = 0; i < context.table_properties->entire_table_properties.bottom_margin; ++i) { + FT_CHECK(print_n_strings(&cntx, cod_width - 1/* minus new_line*/, FT_SPACE)); + FT_CHECK(print_n_strings(&cntx, 1, FT_NEWLINE)); + } + + result = buffer; + +clear: + F_FREE(col_vis_width_arr); + F_FREE(row_vis_height_arr); + return result; +} + +const char *ft_to_string(const ft_table_t *table) +{ + return (const char *)ft_to_string_impl(table, CHAR_BUF); +} + +#ifdef FT_HAVE_WCHAR +const wchar_t *ft_to_wstring(const ft_table_t *table) +{ + return (const wchar_t *)ft_to_string_impl(table, W_CHAR_BUF); +} +#endif + + +int ft_add_separator(ft_table_t *table) +{ + assert(table); + assert(table->separators); + + while (vector_size(table->separators) <= table->cur_row) { + f_separator_t *sep_p = create_separator(F_FALSE); + if (sep_p == NULL) + return FT_MEMORY_ERROR; + int status = vector_push(table->separators, &sep_p); + if (FT_IS_ERROR(status)) + return status; + } + + f_separator_t **sep_p = &VECTOR_AT(table->separators, table->cur_row, f_separator_t *); + if (*sep_p == NULL) + *sep_p = create_separator(F_TRUE); + else + (*sep_p)->enabled = F_TRUE; + + if (*sep_p == NULL) + return FT_GEN_ERROR; + return FT_SUCCESS; +} + +static const struct fort_border_style *built_in_styles[] = { + &FORT_BASIC_STYLE, + &FORT_BASIC2_STYLE, + &FORT_SIMPLE_STYLE, + &FORT_PLAIN_STYLE, + &FORT_DOT_STYLE, + &FORT_EMPTY_STYLE, + &FORT_EMPTY2_STYLE, + &FORT_SOLID_STYLE, + &FORT_SOLID_ROUND_STYLE, + &FORT_NICE_STYLE, + &FORT_DOUBLE_STYLE, + &FORT_DOUBLE2_STYLE, + &FORT_BOLD_STYLE, + &FORT_BOLD2_STYLE, + &FORT_FRAME_STYLE, +}; +#define BUILT_IN_STYLES_SZ (sizeof(built_in_styles) / sizeof(built_in_styles[0])) + +/* todo: remove this stupid and dangerous code */ +static const struct ft_border_style built_in_external_styles[BUILT_IN_STYLES_SZ] = { + { + {"", "", "", "", "", ""}, + {"", "", "", "", "", ""}, + "" + } +}; + +const struct ft_border_style *const FT_BASIC_STYLE = &built_in_external_styles[0]; +const struct ft_border_style *const FT_BASIC2_STYLE = &built_in_external_styles[1]; +const struct ft_border_style *const FT_SIMPLE_STYLE = &built_in_external_styles[2]; +const struct ft_border_style *const FT_PLAIN_STYLE = &built_in_external_styles[3]; +const struct ft_border_style *const FT_DOT_STYLE = &built_in_external_styles[4]; +const struct ft_border_style *const FT_EMPTY_STYLE = &built_in_external_styles[5]; +const struct ft_border_style *const FT_EMPTY2_STYLE = &built_in_external_styles[6]; +const struct ft_border_style *const FT_SOLID_STYLE = &built_in_external_styles[7]; +const struct ft_border_style *const FT_SOLID_ROUND_STYLE = &built_in_external_styles[8]; +const struct ft_border_style *const FT_NICE_STYLE = &built_in_external_styles[9]; +const struct ft_border_style *const FT_DOUBLE_STYLE = &built_in_external_styles[10]; +const struct ft_border_style *const FT_DOUBLE2_STYLE = &built_in_external_styles[11]; +const struct ft_border_style *const FT_BOLD_STYLE = &built_in_external_styles[12]; +const struct ft_border_style *const FT_BOLD2_STYLE = &built_in_external_styles[13]; +const struct ft_border_style *const FT_FRAME_STYLE = &built_in_external_styles[14]; + +static void set_border_props_for_props(f_table_properties_t *properties, const struct ft_border_style *style) +{ + if (style >= built_in_external_styles && style < (built_in_external_styles + BUILT_IN_STYLES_SZ)) { + size_t pos = (size_t)(style - built_in_external_styles); + memcpy(&(properties->border_style), built_in_styles[pos], sizeof(struct fort_border_style)); + return; + } + + const struct ft_border_chars *border_chs = &(style->border_chs); + const struct ft_border_chars *header_border_chs = &(style->header_border_chs); + +#define BOR_CHARS properties->border_style.border_chars +#define H_BOR_CHARS properties->border_style.header_border_chars +#define SEP_CHARS properties->border_style.separator_chars + + BOR_CHARS[TT_bip] = border_chs->top_border_ch; + BOR_CHARS[IH_bip] = border_chs->separator_ch; + BOR_CHARS[BB_bip] = border_chs->bottom_border_ch; + BOR_CHARS[LL_bip] = BOR_CHARS[IV_bip] = BOR_CHARS[RR_bip] = border_chs->side_border_ch; + + BOR_CHARS[TL_bip] = BOR_CHARS[TV_bip] = BOR_CHARS[TR_bip] = border_chs->out_intersect_ch; + BOR_CHARS[LH_bip] = BOR_CHARS[RH_bip] = border_chs->out_intersect_ch; + BOR_CHARS[BL_bip] = BOR_CHARS[BV_bip] = BOR_CHARS[BR_bip] = border_chs->out_intersect_ch; + BOR_CHARS[II_bip] = border_chs->in_intersect_ch; + + BOR_CHARS[LI_bip] = BOR_CHARS[TI_bip] = BOR_CHARS[RI_bip] = BOR_CHARS[BI_bip] = border_chs->in_intersect_ch; + + if (strlen(border_chs->separator_ch) == 0 && strlen(border_chs->in_intersect_ch) == 0) { + BOR_CHARS[LH_bip] = BOR_CHARS[RH_bip] = "\0"; + } + + H_BOR_CHARS[TT_bip] = header_border_chs->top_border_ch; + H_BOR_CHARS[IH_bip] = header_border_chs->separator_ch; + H_BOR_CHARS[BB_bip] = header_border_chs->bottom_border_ch; + H_BOR_CHARS[LL_bip] = H_BOR_CHARS[IV_bip] = H_BOR_CHARS[RR_bip] = header_border_chs->side_border_ch; + + H_BOR_CHARS[TL_bip] = H_BOR_CHARS[TV_bip] = H_BOR_CHARS[TR_bip] = header_border_chs->out_intersect_ch; + H_BOR_CHARS[LH_bip] = H_BOR_CHARS[RH_bip] = header_border_chs->out_intersect_ch; + H_BOR_CHARS[BL_bip] = H_BOR_CHARS[BV_bip] = H_BOR_CHARS[BR_bip] = header_border_chs->out_intersect_ch; + H_BOR_CHARS[II_bip] = header_border_chs->in_intersect_ch; + + H_BOR_CHARS[LI_bip] = H_BOR_CHARS[TI_bip] = H_BOR_CHARS[RI_bip] = H_BOR_CHARS[BI_bip] = header_border_chs->in_intersect_ch; + + if (strlen(header_border_chs->separator_ch) == 0 && strlen(header_border_chs->in_intersect_ch) == 0) { + BOR_CHARS[LH_bip] = BOR_CHARS[RH_bip] = "\0"; + } + + SEP_CHARS[LH_sip] = SEP_CHARS[RH_sip] = SEP_CHARS[II_sip] = header_border_chs->out_intersect_ch; + SEP_CHARS[TI_sip] = SEP_CHARS[BI_sip] = header_border_chs->out_intersect_ch; + SEP_CHARS[IH_sip] = style->hor_separator_char; + + +#undef BOR_CHARS +#undef H_BOR_CHARS +#undef SEP_CHARS +} + + +int ft_set_default_border_style(const struct ft_border_style *style) +{ + set_border_props_for_props(&g_table_properties, style); + return FT_SUCCESS; +} + +int ft_set_border_style(ft_table_t *table, const struct ft_border_style *style) +{ + assert(table); + if (table->properties == NULL) { + table->properties = create_table_properties(); + if (table->properties == NULL) + return FT_MEMORY_ERROR; + } + set_border_props_for_props(table->properties, style); + return FT_SUCCESS; +} + + + +int ft_set_cell_prop(ft_table_t *table, size_t row, size_t col, uint32_t property, int value) +{ + assert(table); + + if (table->properties == NULL) { + table->properties = create_table_properties(); + if (table->properties == NULL) + return FT_MEMORY_ERROR; + } + if (table->properties->cell_properties == NULL) { + table->properties->cell_properties = create_cell_prop_container(); + if (table->properties->cell_properties == NULL) { + return FT_GEN_ERROR; + } + } + + if (row == FT_CUR_ROW) + row = table->cur_row; + if (col == FT_CUR_COLUMN) + col = table->cur_col; + + return set_cell_property(table->properties->cell_properties, row, col, property, value); +} + +int ft_set_default_cell_prop(uint32_t property, int value) +{ + return set_default_cell_property(property, value); +} + + +int ft_set_default_tbl_prop(uint32_t property, int value) +{ + return set_default_entire_table_property(property, value); +} + +int ft_set_tbl_prop(ft_table_t *table, uint32_t property, int value) +{ + assert(table); + + if (table->properties == NULL) { + table->properties = create_table_properties(); + if (table->properties == NULL) + return FT_MEMORY_ERROR; + } + return set_entire_table_property(table->properties, property, value); +} + +void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr)) +{ + set_memory_funcs(f_malloc, f_free); +} + +const char *ft_strerror(int error_code) +{ + switch (error_code) { + case FT_MEMORY_ERROR: + return "Out of memory"; + case FT_GEN_ERROR: + return "General error"; + case FT_EINVAL: + return "Invalid argument"; + case FT_INTERN_ERROR: + return "Internal libfort error"; + default: + if (error_code < 0) + return "Unknown error code"; + else + return "Success"; + } +} + +int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span) +{ + assert(table); + if (hor_span < 2) + return FT_EINVAL; + + if (row == FT_CUR_ROW) + row = table->cur_row; + if (row == FT_CUR_COLUMN) + col = table->cur_col; + + f_row_t *row_p = get_row_and_create_if_not_exists(table, row); + if (row_p == NULL) + return FT_GEN_ERROR; + + return row_set_cell_span(row_p, col, hor_span); +} + +#ifdef FT_HAVE_UTF8 + +int ft_u8nwrite(ft_table_t *table, size_t n, const void *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_u8write_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --n; + for (i = 0; i < n; ++i) { + const void *cell = va_arg(va, const void *); + status = ft_u8write_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + + return status; +} + +int ft_u8nwrite_ln(ft_table_t *table, size_t n, const void *cell_content, ...) +{ + size_t i = 0; + assert(table); + int status = ft_u8write_impl(table, cell_content); + if (FT_IS_ERROR(status)) + return status; + + va_list va; + va_start(va, cell_content); + --n; + for (i = 0; i < n; ++i) { + const void *cell = va_arg(va, const void *); + status = ft_u8write_impl(table, cell); + if (FT_IS_ERROR(status)) { + va_end(va); + return status; + } + } + va_end(va); + + ft_ln(table); + return status; +} + +FT_PRINTF_ATTRIBUTE_FORMAT(2, 3) +int ft_u8printf(ft_table_t *table, const char *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = UTF8_BUF; + fmt_str.u.cstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + va_end(va); + return result; +} + +FT_PRINTF_ATTRIBUTE_FORMAT(2, 3) +int ft_u8printf_ln(ft_table_t *table, const char *fmt, ...) +{ + assert(table); + va_list va; + va_start(va, fmt); + + struct f_string_view fmt_str; + fmt_str.type = UTF8_BUF; + fmt_str.u.cstr = fmt; + int result = ft_row_printf_impl_(table, table->cur_row, &fmt_str, &va); + if (result >= 0) { + ft_ln(table); + } + va_end(va); + return result; +} + +const void *ft_to_u8string(const ft_table_t *table) +{ + return (const void *)ft_to_string_impl(table, UTF8_BUF); +} + +void ft_set_u8strwid_func(int (*u8strwid)(const void *beg, const void *end, size_t *width)) +{ + buffer_set_u8strwid_func(u8strwid); +} + +#endif /* FT_HAVE_UTF8 */ + +/******************************************************** + End of file "fort_impl.c" + ********************************************************/ + + +/******************************************************** + Begin of file "fort_utils.c" + ********************************************************/ + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +#ifdef FT_HAVE_WCHAR +#include +#endif +#if defined(FT_HAVE_UTF8) +/* #include "utf8.h" */ /* Commented by amalgamation script */ +#endif +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ + + +char g_col_separator = FORT_DEFAULT_COL_SEPARATOR; + +/***************************************************************************** + * LIBFORT helpers + *****************************************************************************/ + +#if defined(FT_GCC_COMPILER) || defined(FT_CLANG_COMPILER) +void *(*fort_malloc)(size_t size) = &malloc; +void (*fort_free)(void *ptr) = &free; +void *(*fort_calloc)(size_t nmemb, size_t size) = &calloc; +void *(*fort_realloc)(void *ptr, size_t size) = &realloc; +#else +static void *local_malloc(size_t size) +{ + return malloc(size); +} + +static void local_free(void *ptr) +{ + free(ptr); +} + +static void *local_calloc(size_t nmemb, size_t size) +{ + return calloc(nmemb, size); +} + +static void *local_realloc(void *ptr, size_t size) +{ + return realloc(ptr, size); +} + +void *(*fort_malloc)(size_t size) = &local_malloc; +void (*fort_free)(void *ptr) = &local_free; +void *(*fort_calloc)(size_t nmemb, size_t size) = &local_calloc; +void *(*fort_realloc)(void *ptr, size_t size) = &local_realloc; +#endif + +static void *custom_fort_calloc(size_t nmemb, size_t size) +{ + size_t total_size = nmemb * size; + void *result = F_MALLOC(total_size); + if (result != NULL) + memset(result, 0, total_size); + return result; +} + +static void *custom_fort_realloc(void *ptr, size_t size) +{ + if (ptr == NULL) + return F_MALLOC(size); + if (size == 0) { + F_FREE(ptr); + return NULL; + } + + void *new_chunk = F_MALLOC(size); + if (new_chunk == NULL) + return NULL; + + /* + * In theory we should copy MIN(size, size allocated for ptr) bytes, + * but this is rather dummy implementation so we don't care about it + */ + memcpy(new_chunk, ptr, size); + F_FREE(ptr); + return new_chunk; +} + + +FT_INTERNAL +void set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr)) +{ + assert((f_malloc == NULL && f_free == NULL) /* Use std functions */ + || (f_malloc != NULL && f_free != NULL) /* Use custom functions */); + + if (f_malloc == NULL && f_free == NULL) { +#if defined(FT_GCC_COMPILER) || defined(FT_CLANG_COMPILER) + fort_malloc = &malloc; + fort_free = &free; + fort_calloc = &calloc; + fort_realloc = &realloc; +#else + fort_malloc = &local_malloc; + fort_free = &local_free; + fort_calloc = &local_calloc; + fort_realloc = &local_realloc; +#endif + } else { + fort_malloc = f_malloc; + fort_free = f_free; + fort_calloc = &custom_fort_calloc; + fort_realloc = &custom_fort_realloc; + } + +} + +FT_INTERNAL +char *fort_strdup(const char *str) +{ + if (str == NULL) + return NULL; + + return bu_strdup(str); +} + +#if defined(FT_HAVE_WCHAR) +FT_INTERNAL +wchar_t *fort_wcsdup(const wchar_t *str) +{ + if (str == NULL) + return NULL; + + size_t sz = wcslen(str); + wchar_t *str_copy = (wchar_t *)F_MALLOC((sz + 1) * sizeof(wchar_t)); + if (str_copy == NULL) + return NULL; + + wcscpy(str_copy, str); + return str_copy; +} +#endif + + +static +size_t columns_number_in_fmt_string(const char *fmt) +{ + size_t separator_counter = 0; + const char *pos = fmt; + while (1) { + pos = strchr(pos, g_col_separator); + if (pos == NULL) + break; + + separator_counter++; + ++pos; + } + return separator_counter + 1; +} + +#if defined(FT_HAVE_WCHAR) +static +size_t columns_number_in_fmt_wstring(const wchar_t *fmt) +{ + size_t separator_counter = 0; + const wchar_t *pos = fmt; + while (1) { + pos = wcschr(pos, g_col_separator); + if (pos == NULL) + break; + + separator_counter++; + ++pos; + } + return separator_counter + 1; +} +#endif + +#if defined(FT_HAVE_UTF8) +static +size_t columns_number_in_fmt_u8string(const void *fmt) +{ + size_t separator_counter = 0; + const char *pos = (const char *)fmt; + while (1) { + pos = (const char *)utf8chr(pos, g_col_separator); + if (pos == NULL) + break; + + separator_counter++; + ++pos; + } + return separator_counter + 1; +} +#endif + +FT_INTERNAL +size_t number_of_columns_in_format_string(const f_string_view_t *fmt) +{ + switch (fmt->type) { + case CHAR_BUF: + return columns_number_in_fmt_string(fmt->u.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return columns_number_in_fmt_wstring(fmt->u.wstr); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return columns_number_in_fmt_u8string(fmt->u.u8str); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + } + return 0; +} + +FT_INTERNAL +size_t number_of_columns_in_format_buffer(const f_string_buffer_t *fmt) +{ + switch (fmt->type) { + case CHAR_BUF: + return columns_number_in_fmt_string(fmt->str.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return columns_number_in_fmt_wstring(fmt->str.wstr); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return columns_number_in_fmt_u8string(fmt->str.u8str); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + } + return 0; +} + +static +int snprint_n_strings_impl(char *buf, size_t length, size_t n, const char *str) +{ + size_t str_len = strlen(str); + if (length <= n * str_len) + return -1; + + if (n == 0) + return 0; + + /* To ensure valid return value it is safely not print such big strings */ + if (n * str_len > INT_MAX) + return -1; + + if (str_len == 0) + return 0; + + int status = snprintf(buf, length, "%0*d", (int)(n * str_len), 0); + if (status < 0) + return status; + + size_t i = 0; + for (i = 0; i < n; ++i) { + const char *str_p = str; + while (*str_p) + *(buf++) = *(str_p++); + } + return (int)(n * str_len); +} + +static +int snprint_n_strings(f_conv_context_t *cntx, size_t n, const char *str) +{ + int w = snprint_n_strings_impl(cntx->u.buf, cntx->raw_avail, n, str); + if (w >= 0) { + cntx->u.buf += w; + cntx->raw_avail -= w; + } + return w; +} + +#if defined(FT_HAVE_WCHAR) +static +int wsnprint_n_string(wchar_t *buf, size_t length, size_t n, const char *str); +#endif + +#if defined(FT_HAVE_UTF8) +static +int u8nprint_n_strings(void *buf, size_t length, size_t n, const void *str); +#endif + + +FT_INTERNAL +int print_n_strings(f_conv_context_t *cntx, size_t n, const char *str) +{ + int cod_w; + int raw_written; + + switch (cntx->b_type) { + case CHAR_BUF: + raw_written = snprint_n_strings(cntx, n, str); + cod_w = raw_written; + return cod_w; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + cod_w = wsnprint_n_string(cntx->u.wbuf, cntx->raw_avail, n, str); + if (cod_w < 0) + return cod_w; + raw_written = sizeof(wchar_t) * cod_w; + + cntx->u.buf += raw_written; + cntx->raw_avail -= raw_written; + return cod_w; +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + /* Everying is very strange and differs with W_CHAR_BUF */ + raw_written = u8nprint_n_strings(cntx->u.buf, cntx->raw_avail, n, str); + if (raw_written < 0) { + fprintf(stderr, " raw_written = %d\n", raw_written); + return raw_written; + } + + cntx->u.buf += raw_written; + cntx->raw_avail -= raw_written; + return utf8len(str) * n; +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + return -1; + } +} + +FT_INTERNAL +int ft_nprint(f_conv_context_t *cntx, const char *str, size_t strlen) +{ + if (cntx->raw_avail + 1/* for 0 */ < strlen) + return -1; + + memcpy(cntx->u.buf, str, strlen); + cntx->u.buf += strlen; + cntx->raw_avail -= strlen; + *cntx->u.buf = '\0'; /* Do we need this ? */ + return strlen; +} + +#ifdef FT_HAVE_WCHAR +int ft_nwprint(f_conv_context_t *cntx, const wchar_t *str, size_t strlen) +{ + if (cntx->raw_avail + 1/* for 0 */ < strlen) + return -1; + + size_t raw_len = strlen * sizeof(wchar_t); + + memcpy(cntx->u.buf, str, raw_len); + cntx->u.buf += raw_len; + cntx->raw_avail -= raw_len; + + /* Do we need this ? */ + wchar_t end_of_string = L'\0'; + memcpy(cntx->u.buf, &end_of_string, sizeof(wchar_t)); + return strlen; +} +#endif /* FT_HAVE_WCHAR */ + +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +int ft_nu8print(f_conv_context_t *cntx, const void *beg, const void *end) +{ + const char *bc = (const char *)beg; + const char *ec = (const char *)end; + size_t raw_len = ec - bc; + if (cntx->raw_avail + 1 < raw_len) + return -1; + + memcpy(cntx->u.buf, beg, raw_len); + cntx->u.buf += raw_len; + cntx->raw_avail -= raw_len; + *(cntx->u.buf) = '\0'; /* Do we need this ? */ + return raw_len; /* what return here ? */ +} +#endif /* FT_HAVE_UTF8 */ + +#if defined(FT_HAVE_WCHAR) +#define WCS_SIZE 64 + +static +int wsnprint_n_string(wchar_t *buf, size_t length, size_t n, const char *str) +{ + size_t str_len = strlen(str); + + /* note: maybe it's, better to return -1 in case of multibyte character + * strings (not sure this case is done correctly). + */ + if (str_len > 1) { + const unsigned char *p = (const unsigned char *)str; + while (*p) { + if (*p <= 127) + p++; + else { + wchar_t wcs[WCS_SIZE]; + const char *ptr = str; + size_t wcs_len; + mbstate_t mbst; + memset(&mbst, 0, sizeof(mbst)); + wcs_len = mbsrtowcs(wcs, (const char **)&ptr, WCS_SIZE, &mbst); + /* for simplicity */ + if ((wcs_len == (size_t) - 1) || wcs_len > 1) { + return -1; + } else { + wcs[wcs_len] = L'\0'; + size_t k = n; + while (k) { + *buf = *wcs; + ++buf; + --k; + } + buf[n] = L'\0'; + return (int)n; + } + } + } + } + + if (length <= n * str_len) + return -1; + + if (n == 0) + return 0; + + /* To ensure valid return value it is safely not print such big strings */ + if (n * str_len > INT_MAX) + return -1; + + if (str_len == 0) + return 0; + + int status = swprintf(buf, length, L"%0*d", (int)(n * str_len), 0); + if (status < 0) + return status; + + size_t i = 0; + for (i = 0; i < n; ++i) { + const char *str_p = str; + while (*str_p) + *(buf++) = (wchar_t) * (str_p++); + } + return (int)(n * str_len); +} +#endif + + +#if defined(FT_HAVE_UTF8) +static +int u8nprint_n_strings(void *buf, size_t length, size_t n, const void *str) +{ + size_t str_size = utf8size(str) - 1; /* str_size - raw size in bytes, excluding \0 */ + if (length <= n * str_size) + return -1; + + if (n == 0) + return 0; + + /* To ensure valid return value it is safely not print such big strings */ + if (n * str_size > INT_MAX) + return -1; + + if (str_size == 0) + return 0; + + size_t i = n; + while (i) { + memcpy(buf, str, str_size); + buf = (char *)buf + str_size; + --i; + } + *(char *)buf = '\0'; + return (int)(n * str_size); +} +#endif + +/******************************************************** + End of file "fort_utils.c" + ********************************************************/ + + +/******************************************************** + Begin of file "properties.c" + ********************************************************/ + +/* #include "fort_utils.h" */ /* Commented by amalgamation script */ +#include +/* #include "properties.h" */ /* Commented by amalgamation script */ +/* #include "vector.h" */ /* Commented by amalgamation script */ + +#define FT_RESET_COLOR "\033[0m" + +static const char *fg_colors[] = { + "", + "\033[30m", + "\033[31m", + "\033[32m", + "\033[33m", + "\033[34m", + "\033[35m", + "\033[36m", + "\033[37m", + "\033[90m", + "\033[91m", + "\033[92m", + "\033[93m", + "\033[94m", + "\033[95m", + "\033[96m", + "\033[97m", +}; + +static const char *bg_colors[] = { + "", + "\033[40m", + "\033[41m", + "\033[42m", + "\033[43m", + "\033[44m", + "\033[45m", + "\033[46m", + "\033[47m", + "\033[100m", + "\033[101m", + "\033[102m", + "\033[103m", + "\033[104m", + "\033[105m", + "\033[106m", + "\033[107m", +}; + +static const char *text_styles[] = { + "", + "\033[1m", + "\033[2m", + "\033[3m", + "\033[4m", + "\033[5m", + "\033[7m", + "\033[8m", +}; + +#define UNIVERSAL_RESET_TAG "\033[0m" + +static const size_t n_fg_colors = sizeof(fg_colors) / sizeof(fg_colors[0]); +static const size_t n_bg_colors = sizeof(bg_colors) / sizeof(bg_colors[0]); +static const size_t n_styles = sizeof(text_styles) / sizeof(text_styles[0]); + +void get_style_tag_for_cell(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz) +{ + (void)sz; + size_t i = 0; + + unsigned bg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CELL_BG_COLOR); + unsigned text_style = get_cell_property_hierarchically(props, row, col, FT_CPROP_CELL_TEXT_STYLE); + + style_tag[0] = '\0'; + + if (text_style < (1U << n_styles)) { + for (i = 0; i < n_styles; ++i) { + if (text_style & (1 << i)) { + bu_strlcat(style_tag, text_styles[i], sz); + } + } + } else { + goto error; + } + + if (bg_color_number < n_bg_colors) { + bu_strlcat(style_tag, bg_colors[bg_color_number], sz); + } else { + goto error; + } + + return; + +error: + /* shouldn't be here */ + assert(0); + style_tag[0] = '\0'; + return; +} + +void get_reset_style_tag_for_cell(const f_table_properties_t *props, + size_t row, size_t col, char *reset_style_tag, size_t sz) +{ + (void)sz; + size_t i = 0; + + unsigned bg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CELL_BG_COLOR); + unsigned text_style = get_cell_property_hierarchically(props, row, col, FT_CPROP_CELL_TEXT_STYLE); + + reset_style_tag[0] = '\0'; + + if (text_style < (1U << n_styles)) { + for (i = 0; i < n_styles; ++i) { + if (text_style & (1 << i)) { + if (i != 0) // FT_TSTYLE_DEFAULT + goto reset_style; + } + } + } else { + goto error; + } + + if (bg_color_number < n_bg_colors) { + if (bg_color_number) + goto reset_style; + } else { + goto error; + } + + return; + + +reset_style: + bu_strlcat(reset_style_tag, UNIVERSAL_RESET_TAG, sz); + return; + +error: + /* shouldn't be here */ + assert(0); + reset_style_tag[0] = '\0'; + return; +} + + +void get_style_tag_for_content(const f_table_properties_t *props, + size_t row, size_t col, char *style_tag, size_t sz) +{ + (void)sz; + size_t i = 0; + + unsigned text_style = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_TEXT_STYLE); + unsigned fg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_FG_COLOR); + unsigned bg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_BG_COLOR); + + style_tag[0] = '\0'; + + if (text_style < (1U << n_styles)) { + for (i = 0; i < n_styles; ++i) { + if (text_style & (1 << i)) { + bu_strlcat(style_tag, text_styles[i], sz); + } + } + } else { + goto error; + } + + if (fg_color_number < n_fg_colors) { + if (fg_color_number) + bu_strlcat(style_tag, fg_colors[fg_color_number], sz); + } else { + goto error; + } + + if (bg_color_number < n_bg_colors) { + bu_strlcat(style_tag, bg_colors[bg_color_number], sz); + } else { + goto error; + } + + return; + +error: + /* shouldn't be here */ + assert(0); + style_tag[0] = '\0'; + return; +} + +void get_reset_style_tag_for_content(const f_table_properties_t *props, + size_t row, size_t col, char *reset_style_tag, size_t sz) +{ + (void)sz; + size_t i = 0; + size_t len = 0; + + unsigned text_style = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_TEXT_STYLE); + unsigned fg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_FG_COLOR); + unsigned bg_color_number = get_cell_property_hierarchically(props, row, col, FT_CPROP_CONT_BG_COLOR); + + reset_style_tag[0] = '\0'; + + if (text_style < (1U << n_styles)) { + for (i = 0; i < n_styles; ++i) { + if (text_style & (1 << i)) { + if (i != 0) // FT_TSTYLE_DEFAULT + goto reset_style; + } + } + } else { + goto error; + } + + if (fg_color_number < n_fg_colors) { + if (fg_color_number) + goto reset_style; + } else { + goto error; + } + + if (bg_color_number < n_bg_colors) { + if (bg_color_number) + goto reset_style; + } else { + goto error; + } + + return; + + +reset_style: + bu_strlcat(reset_style_tag, UNIVERSAL_RESET_TAG, sz); + len = strlen(reset_style_tag); + get_style_tag_for_cell(props, row, col, reset_style_tag + len, sz - len); + return; + +error: + /* shouldn't be here */ + assert(0); + reset_style_tag[0] = '\0'; + return; +} + + +static struct f_cell_props g_default_cell_properties = { + FT_ANY_ROW, /* cell_row */ + FT_ANY_COLUMN, /* cell_col */ + + /* properties_flags */ + FT_CPROP_MIN_WIDTH | FT_CPROP_TEXT_ALIGN | FT_CPROP_TOP_PADDING + | FT_CPROP_BOTTOM_PADDING | FT_CPROP_LEFT_PADDING | FT_CPROP_RIGHT_PADDING + | FT_CPROP_EMPTY_STR_HEIGHT | FT_CPROP_CONT_FG_COLOR | FT_CPROP_CELL_BG_COLOR + | FT_CPROP_CONT_BG_COLOR | FT_CPROP_CELL_TEXT_STYLE | FT_CPROP_CONT_TEXT_STYLE, + + 0, /* col_min_width */ + FT_ALIGNED_LEFT, /* align */ + 0, /* cell_padding_top */ + 0, /* cell_padding_bottom */ + 1, /* cell_padding_left */ + 1, /* cell_padding_right */ + 1, /* cell_empty_string_height */ + + FT_ROW_COMMON, /* row_type */ + FT_COLOR_DEFAULT, /* content_fg_color_number */ + FT_COLOR_DEFAULT, /* content_bg_color_number */ + FT_COLOR_DEFAULT, /* cell_bg_color_number */ + FT_TSTYLE_DEFAULT, /* cell_text_style */ + FT_TSTYLE_DEFAULT, /* content_text_style */ +}; + +static int get_prop_value_if_exists_otherwise_default(const struct f_cell_props *cell_opts, uint32_t property) +{ + if (cell_opts == NULL || !PROP_IS_SET(cell_opts->properties_flags, property)) { + cell_opts = &g_default_cell_properties; + } + + switch (property) { + case FT_CPROP_MIN_WIDTH: + return cell_opts->col_min_width; + case FT_CPROP_TEXT_ALIGN: + return cell_opts->align; + case FT_CPROP_TOP_PADDING: + return cell_opts->cell_padding_top; + case FT_CPROP_BOTTOM_PADDING: + return cell_opts->cell_padding_bottom; + case FT_CPROP_LEFT_PADDING: + return cell_opts->cell_padding_left; + case FT_CPROP_RIGHT_PADDING: + return cell_opts->cell_padding_right; + case FT_CPROP_EMPTY_STR_HEIGHT: + return cell_opts->cell_empty_string_height; + case FT_CPROP_ROW_TYPE: + return cell_opts->row_type; + case FT_CPROP_CONT_FG_COLOR: + return cell_opts->content_fg_color_number; + case FT_CPROP_CONT_BG_COLOR: + return cell_opts->content_bg_color_number; + case FT_CPROP_CELL_BG_COLOR: + return cell_opts->cell_bg_color_number; + case FT_CPROP_CELL_TEXT_STYLE: + return cell_opts->cell_text_style; + case FT_CPROP_CONT_TEXT_STYLE: + return cell_opts->content_text_style; + default: + /* todo: implement later */ + exit(333); + } +} + + +FT_INTERNAL +f_cell_prop_container_t *create_cell_prop_container(void) +{ + f_cell_prop_container_t *ret = create_vector(sizeof(f_cell_props_t), DEFAULT_VECTOR_CAPACITY); + return ret; +} + + +FT_INTERNAL +void destroy_cell_prop_container(f_cell_prop_container_t *cont) +{ + if (cont) + destroy_vector(cont); +} + + +FT_INTERNAL +const f_cell_props_t *cget_cell_prop(const f_cell_prop_container_t *cont, size_t row, size_t col) +{ + assert(cont); + size_t sz = vector_size(cont); + size_t i = 0; + for (i = 0; i < sz; ++i) { + const f_cell_props_t *opt = &VECTOR_AT_C(cont, i, const f_cell_props_t); + if (opt->cell_row == row && opt->cell_col == col) + return opt; + } + return NULL; +} + + +FT_INTERNAL +f_cell_props_t *get_cell_prop_and_create_if_not_exists(f_cell_prop_container_t *cont, size_t row, size_t col) +{ + assert(cont); + size_t sz = vector_size(cont); + size_t i = 0; + for (i = 0; i < sz; ++i) { + f_cell_props_t *opt = &VECTOR_AT(cont, i, f_cell_props_t); + if (opt->cell_row == row && opt->cell_col == col) + return opt; + } + + f_cell_props_t opt; + if (row == FT_ANY_ROW && col == FT_ANY_COLUMN) + memcpy(&opt, &g_default_cell_properties, sizeof(f_cell_props_t)); + else + memset(&opt, 0, sizeof(f_cell_props_t)); + + opt.cell_row = row; + opt.cell_col = col; + if (FT_IS_SUCCESS(vector_push(cont, &opt))) { + return &VECTOR_AT(cont, sz, f_cell_props_t); + } + + return NULL; +} + + +FT_INTERNAL +int get_cell_property_hierarchically(const f_table_properties_t *propertiess, size_t row, size_t column, uint32_t property) +{ + assert(propertiess); + size_t row_origin = row; + + const f_cell_props_t *opt = NULL; + if (propertiess->cell_properties != NULL) { + while (1) { + opt = cget_cell_prop(propertiess->cell_properties, row, column); + if (opt != NULL && PROP_IS_SET(opt->properties_flags, property)) + break; + + if (row != FT_ANY_ROW && column != FT_ANY_COLUMN) { + row = FT_ANY_ROW; + continue; + } else if (row == FT_ANY_ROW && column != FT_ANY_COLUMN) { + row = row_origin; + column = FT_ANY_COLUMN; + continue; + } else if (row != FT_ANY_ROW && column == FT_ANY_COLUMN) { + row = FT_ANY_ROW; + column = FT_ANY_COLUMN; + continue; + } + + opt = NULL; + break; + } + } + + return get_prop_value_if_exists_otherwise_default(opt, property); +} + + +static f_status set_cell_property_impl(f_cell_props_t *opt, uint32_t property, int value) +{ + assert(opt); + + PROP_SET(opt->properties_flags, property); + if (PROP_IS_SET(property, FT_CPROP_MIN_WIDTH)) { + CHECK_NOT_NEGATIVE(value); + opt->col_min_width = value; + } else if (PROP_IS_SET(property, FT_CPROP_TEXT_ALIGN)) { + opt->align = (enum ft_text_alignment)value; + } else if (PROP_IS_SET(property, FT_CPROP_TOP_PADDING)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_padding_top = value; + } else if (PROP_IS_SET(property, FT_CPROP_BOTTOM_PADDING)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_padding_bottom = value; + } else if (PROP_IS_SET(property, FT_CPROP_LEFT_PADDING)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_padding_left = value; + } else if (PROP_IS_SET(property, FT_CPROP_RIGHT_PADDING)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_padding_right = value; + } else if (PROP_IS_SET(property, FT_CPROP_EMPTY_STR_HEIGHT)) { + CHECK_NOT_NEGATIVE(value); + opt->cell_empty_string_height = value; + } else if (PROP_IS_SET(property, FT_CPROP_ROW_TYPE)) { + opt->row_type = (enum ft_row_type)value; + } else if (PROP_IS_SET(property, FT_CPROP_CONT_FG_COLOR)) { + opt->content_fg_color_number = value; + } else if (PROP_IS_SET(property, FT_CPROP_CONT_BG_COLOR)) { + opt->content_bg_color_number = value; + } else if (PROP_IS_SET(property, FT_CPROP_CELL_BG_COLOR)) { + opt->cell_bg_color_number = value; + } else if (PROP_IS_SET(property, FT_CPROP_CELL_TEXT_STYLE)) { + enum ft_text_style v = (enum ft_text_style)value; + if (v == FT_TSTYLE_DEFAULT) { + opt->cell_text_style = FT_TSTYLE_DEFAULT; + } else { + opt->cell_text_style = (enum ft_text_style)(opt->cell_text_style | v); + } + } else if (PROP_IS_SET(property, FT_CPROP_CONT_TEXT_STYLE)) { + enum ft_text_style v = (enum ft_text_style)value; + if (v == FT_TSTYLE_DEFAULT) { + opt->content_text_style = v; + } else { + opt->content_text_style = (enum ft_text_style)(opt->content_text_style | v); + } + } + + return FT_SUCCESS; + +fort_fail: + return FT_EINVAL; +} + + +FT_INTERNAL +f_status set_cell_property(f_cell_prop_container_t *cont, size_t row, size_t col, uint32_t property, int value) +{ + f_cell_props_t *opt = get_cell_prop_and_create_if_not_exists(cont, row, col); + if (opt == NULL) + return FT_GEN_ERROR; + + return set_cell_property_impl(opt, property, value); + /* + PROP_SET(opt->propertiess, property); + if (PROP_IS_SET(property, FT_CPROP_MIN_WIDTH)) { + opt->col_min_width = value; + } else if (PROP_IS_SET(property, FT_CPROP_TEXT_ALIGN)) { + opt->align = value; + } + + return FT_SUCCESS; + */ +} + + +FT_INTERNAL +f_status set_default_cell_property(uint32_t property, int value) +{ + return set_cell_property_impl(&g_default_cell_properties, property, value); +} + + +#define BASIC_STYLE { \ + /* border_chars */ \ + { \ + "+", "-", "+", "+", \ + "|", "|", "|", \ + "\0", "\0", "\0", "\0", \ + "+", "-", "+", "+", \ + "+", "+", "+", "+", \ + }, \ + /* header_border_chars */ \ + { \ + "+", "-", "+", "+", \ + "|", "|", "|", \ + "+", "-", "+", "+", \ + "+", "-", "+", "+", \ + "+", "+", "+", "+", \ + }, \ + /* separator_chars */ \ + { \ + "+", "-", "+", "+", \ + "+", "+", \ + }, \ +} + +#define BASIC2_STYLE { \ + /* border_chars */ \ + { \ + "+", "-", "+", "+", \ + "|", "|", "|", \ + "+", "-", "+", "+", \ + "+", "-", "+", "+", \ + "+", "+", "+", "+", \ + }, \ + /* header_border_chars */ \ + { \ + "+", "-", "+", "+", \ + "|", "|", "|", \ + "+", "-", "+", "+", \ + "+", "-", "+", "+", \ + "+", "+", "+", "+", \ + }, \ + /* separator_chars */ \ + { \ + "+", "-", "+", "+", \ + "+", "+", \ + }, \ +} + +#define SIMPLE_STYLE { \ + /* border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", " ", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + }, \ + /* header_border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", " ", "\0", \ + "\0", "-", " ", "\0", \ + "\0", " ", " ", "\0", \ + " ", "-", " ", "-", \ + }, \ + /* separator_chars */ \ + { \ + "\0", "-", " ", "\0", \ + " ", " ", \ + }, \ +} + +#define PLAIN_STYLE { \ + /* border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", " ", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + }, \ + /* header_border_chars */ \ + { \ + "\0", "-", "-", "\0", \ + "\0", " ", "\0", \ + "\0", "-", "-", "\0", \ + "\0", "-", "-", "\0", \ + " ", "-", " ", "-", \ + }, \ + /* separator_chars */ \ + { \ + "\0", "-", "-", "\0", \ + "-", "-", \ + }, \ +} + +#define DOT_STYLE { \ + /* border_chars */ \ + { \ + ".", ".", ".", ".", \ + ":", ":", ":", \ + "\0", "\0", "\0", "\0", \ + ":", ".", ":", ":", \ + "+", ":", "+", ":", \ + }, \ + /* header_border_chars */ \ + { \ + ".", ".", ".", ".", \ + ":", ":", ":", \ + ":", ".", ":", ":", \ + ":", ".", ":", ":", \ + "+", ".", "+", ".", \ + }, \ + /* separator_chars */ \ + { \ + ":", ".", ":", ":", \ + ":", ":", \ + }, \ +} + +#define EMPTY_STYLE { \ + /* border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + }, \ + /* header_border_chars */ \ + { \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + "\0", "\0", "\0", "\0", \ + }, \ + /* separator_chars */ \ + { \ + "\0", " ", "\0 ", "\0", \ + "\0", "\0", \ + }, \ +} + + +#define EMPTY2_STYLE { \ + /* border_chars */ \ + { \ + " ", " ", " ", " ", \ + " ", " ", " ", \ + "\0", "\0", "\0", "\0", \ + " ", " ", " ", " ", \ + " ", " ", " ", " ", \ + }, \ + /* header_border_chars */ \ + { \ + " ", " ", " ", " ", \ + " ", " ", " ", \ + "\0", "\0", "\0", "\0", \ + " ", " ", " ", " ", \ + " ", " ", " ", " ", \ + }, \ + /* separator_chars */ \ + { \ + " ", " ", " ", " ", \ + " ", " ", \ + }, \ +} + +#define SOLID_STYLE { \ + /* border_chars */ \ + { \ + "┌", "─", "┬", "┐", \ + "│", "│", "│", \ + "", "", "", "", \ + "└", "─", "┴", "┘", \ + "│", "─", "│", "─", \ + }, \ + /* header_border_chars */ \ + { \ + "┌", "─", "┬", "┐", \ + "│", "│", "│", \ + "├", "─", "┼", "┤", \ + "└", "─", "┴", "┘", \ + "┼", "┬", "┼", "┴", \ + }, \ + /* separator_chars */ \ + { \ + "├", "─", "┼", "┤", \ + "┬", "┴", \ + }, \ +} + +#define SOLID_ROUND_STYLE { \ + /* border_chars */ \ + { \ + "╭", "─", "┬", "╮", \ + "│", "│", "│", \ + "", "", "", "", \ + "╰", "─", "┴", "╯", \ + "│", "─", "│", "─", \ + }, \ + /* header_border_chars */ \ + { \ + "╭", "─", "┬", "╮", \ + "│", "│", "│", \ + "├", "─", "┼", "┤", \ + "╰", "─", "┴", "╯", \ + "┼", "┬", "┼", "┴", \ + }, \ + /* separator_chars */ \ + { \ + "├", "─", "┼", "┤", \ + "┬", "┴", \ + }, \ +} + +#define NICE_STYLE { \ + /* border_chars */ \ + { \ + "╔", "═", "╦", "╗", \ + "║", "║", "║", \ + "", "", "", "", \ + "╚", "═", "╩", "╝", \ + "┣", "┻", "┣", "┳", \ + }, \ + /* header_border_chars */ \ + { \ + "╔", "═", "╦", "╗", \ + "║", "║", "║", \ + "╠", "═", "╬", "╣", \ + "╚", "═", "╩", "╝", \ + "┣", "╦", "┣", "╩", \ + }, \ + /* separator_chars */ \ + { \ + "╟", "─", "╫", "╢", \ + "╥", "╨", \ + }, \ +} + +#define DOUBLE_STYLE { \ + /* border_chars */ \ + { \ + "╔", "═", "╦", "╗", \ + "║", "║", "║", \ + "", "", "", "", \ + "╚", "═", "╩", "╝", \ + "┣", "┻", "┣", "┳", \ + }, \ + /* header_border_chars */ \ + { \ + "╔", "═", "╦", "╗", \ + "║", "║", "║", \ + "╠", "═", "╬", "╣", \ + "╚", "═", "╩", "╝", \ + "┣", "╦", "┣", "╩", \ + }, \ + /* separator_chars */ \ + { \ + "╠", "═", "╬", "╣", \ + "╦", "╩", \ + }, \ +} + + + + +#define DOUBLE2_STYLE { \ + /* border_chars */ \ + { \ + "╔", "═", "╤", "╗", \ + "║", "│", "║", \ + "╟", "─", "┼", "╢", \ + "╚", "═", "╧", "╝", \ + "├", "┬", "┤", "┴", \ + }, \ + /* header_border_chars */ \ + { \ + "╔", "═", "╤", "╗", \ + "║", "│", "║", \ + "╠", "═", "╪", "╣", \ + "╚", "═", "╧", "╝", \ + "├", "╤", "┤", "╧", \ + }, \ + /* separator_chars */ \ + { \ + "╠", "═", "╪", "╣", \ + "╤", "╧", \ + }, \ +} + + +#define BOLD_STYLE { \ + /* border_chars */ \ + { \ + "┏", "━", "┳", "┓", \ + "┃", "┃", "┃", \ + "", "", "", "", \ + "┗", "━", "┻", "┛", \ + "┣", "┻", "┣", "┳", \ + }, \ + /* header_border_chars */ \ + { \ + "┏", "━", "┳", "┓", \ + "┃", "┃", "┃", \ + "┣", "━", "╋", "┫", \ + "┗", "━", "┻", "┛", \ + "┣", "┳", "┣", "┻", \ + }, \ + /* separator_chars */ \ + { \ + "┣", "━", "╋", "┫", \ + "┳", "┻", \ + }, \ +} + +#define BOLD2_STYLE { \ + /* border_chars */ \ + { \ + "┏", "━", "┯", "┓", \ + "┃", "│", "┃", \ + "┠", "─", "┼", "┨", \ + "┗", "━", "┷", "┛", \ + "┣", "┬", "┣", "┴", \ + }, \ + /* header_border_chars */ \ + { \ + "┏", "━", "┯", "┓", \ + "┃", "│", "┃", \ + "┣", "━", "┿", "┫", \ + "┗", "━", "┷", "┛", \ + "┣", "┯", "┣", "┷", \ + }, \ + /* separator_chars */ \ + { \ + "┣", "━", "┿", "┫", \ + "┯", "┷", \ + }, \ +} + +#define FRAME_STYLE { \ + /* border_chars */ \ + { \ + "▛", "▀", "▀", "▜", \ + "▌", "┃", "▐", \ + "", "", "", "", \ + "▙", "▄", "▄", "▟", \ + "┣", "━", "┣", "━" \ + }, \ + /* header_border_chars */ \ + { \ + "▛", "▀", "▀", "▜", \ + "▌", "┃", "▐", \ + "▌", "━", "╋", "▐", \ + "▙", "▄", "▄", "▟", \ + "┣", "━", "┣", "━", \ + }, \ + /* separator_chars */ \ + { \ + "▌", "━", "╋", "▐", \ + "╋", "╋", \ + }, \ +} + + +struct fort_border_style FORT_BASIC_STYLE = BASIC_STYLE; +struct fort_border_style FORT_BASIC2_STYLE = BASIC2_STYLE; +struct fort_border_style FORT_SIMPLE_STYLE = SIMPLE_STYLE; +struct fort_border_style FORT_PLAIN_STYLE = PLAIN_STYLE; +struct fort_border_style FORT_DOT_STYLE = DOT_STYLE; +struct fort_border_style FORT_EMPTY_STYLE = EMPTY_STYLE; +struct fort_border_style FORT_EMPTY2_STYLE = EMPTY2_STYLE; +struct fort_border_style FORT_SOLID_STYLE = SOLID_STYLE; +struct fort_border_style FORT_SOLID_ROUND_STYLE = SOLID_ROUND_STYLE; +struct fort_border_style FORT_NICE_STYLE = NICE_STYLE; +struct fort_border_style FORT_DOUBLE_STYLE = DOUBLE_STYLE; +struct fort_border_style FORT_DOUBLE2_STYLE = DOUBLE2_STYLE; +struct fort_border_style FORT_BOLD_STYLE = BOLD_STYLE; +struct fort_border_style FORT_BOLD2_STYLE = BOLD2_STYLE; +struct fort_border_style FORT_FRAME_STYLE = FRAME_STYLE; + + + +fort_entire_table_properties_t g_entire_table_properties = { + 0, /* left_margin */ + 0, /* top_margin */ + 0, /* right_margin */ + 0, /* bottom_margin */ + FT_STRATEGY_REPLACE, /* add_strategy */ +}; + +static f_status set_entire_table_property_internal(fort_entire_table_properties_t *properties, uint32_t property, int value) +{ + assert(properties); + CHECK_NOT_NEGATIVE(value); + if (PROP_IS_SET(property, FT_TPROP_LEFT_MARGIN)) { + properties->left_margin = value; + } else if (PROP_IS_SET(property, FT_TPROP_TOP_MARGIN)) { + properties->top_margin = value; + } else if (PROP_IS_SET(property, FT_TPROP_RIGHT_MARGIN)) { + properties->right_margin = value; + } else if (PROP_IS_SET(property, FT_TPROP_BOTTOM_MARGIN)) { + properties->bottom_margin = value; + } else if (PROP_IS_SET(property, FT_TPROP_ADDING_STRATEGY)) { + properties->add_strategy = (enum ft_adding_strategy)value; + } else { + return FT_EINVAL; + } + return FT_SUCCESS; + +fort_fail: + return FT_EINVAL; +} + + +FT_INTERNAL +f_status set_entire_table_property(f_table_properties_t *table_properties, uint32_t property, int value) +{ + assert(table_properties); + return set_entire_table_property_internal(&table_properties->entire_table_properties, property, value); +} + + +FT_INTERNAL +f_status set_default_entire_table_property(uint32_t property, int value) +{ + return set_entire_table_property_internal(&g_entire_table_properties, property, value); +} + + +FT_INTERNAL +size_t max_border_elem_strlen(struct f_table_properties *properties) +{ + assert(properties); + size_t result = 1; + int i = 0; + for (i = 0; i < BORDER_ITEM_POS_SIZE; ++i) { + result = MAX(result, strlen(properties->border_style.border_chars[i])); + } + + for (i = 0; i < BORDER_ITEM_POS_SIZE; ++i) { + result = MAX(result, strlen(properties->border_style.header_border_chars[i])); + } + + for (i = 0; i < SEPARATOR_ITEM_POS_SIZE; ++i) { + result = MAX(result, strlen(properties->border_style.separator_chars[i])); + } + return result; +} + + +f_table_properties_t g_table_properties = { + /* border_style */ + BASIC_STYLE, + NULL, /* cell_properties */ + /* entire_table_properties */ + { + 0, /* left_margin */ + 0, /* top_margin */ + 0, /* right_margin */ + 0, /* bottom_margin */ + FT_STRATEGY_REPLACE, /* add_strategy */ + } +}; + + +FT_INTERNAL +f_table_properties_t *create_table_properties(void) +{ + f_table_properties_t *properties = (f_table_properties_t *)F_CALLOC(sizeof(f_table_properties_t), 1); + if (properties == NULL) { + return NULL; + } + memcpy(properties, &g_table_properties, sizeof(f_table_properties_t)); + properties->cell_properties = create_cell_prop_container(); + if (properties->cell_properties == NULL) { + destroy_table_properties(properties); + return NULL; + } + memcpy(&properties->entire_table_properties, &g_entire_table_properties, sizeof(fort_entire_table_properties_t)); + return properties; +} + +FT_INTERNAL +void destroy_table_properties(f_table_properties_t *properties) +{ + if (properties == NULL) + return; + + if (properties->cell_properties != NULL) { + destroy_cell_prop_container(properties->cell_properties); + } + F_FREE(properties); +} + +static +f_cell_prop_container_t *copy_cell_properties(f_cell_prop_container_t *cont) +{ + f_cell_prop_container_t *result = create_cell_prop_container(); + if (result == NULL) + return NULL; + + size_t i = 0; + size_t sz = vector_size(cont); + for (i = 0; i < sz; ++i) { + f_cell_props_t *opt = (f_cell_props_t *)vector_at(cont, i); + if (FT_IS_ERROR(vector_push(result, opt))) { + destroy_cell_prop_container(result); + return NULL; + } + } + return result; +} + +FT_INTERNAL +f_table_properties_t *copy_table_properties(const f_table_properties_t *properties) +{ + f_table_properties_t *new_opt = create_table_properties(); + if (new_opt == NULL) + return NULL; + + destroy_vector(new_opt->cell_properties); + new_opt->cell_properties = copy_cell_properties(properties->cell_properties); + if (new_opt->cell_properties == NULL) { + destroy_table_properties(new_opt); + return NULL; + } + + memcpy(&new_opt->border_style, &properties->border_style, sizeof(struct fort_border_style)); + memcpy(&new_opt->entire_table_properties, + &properties->entire_table_properties, sizeof(fort_entire_table_properties_t)); + + return new_opt; +} + +/******************************************************** + End of file "properties.c" + ********************************************************/ + + +/******************************************************** + Begin of file "row.c" + ********************************************************/ + +#include +#include +/* #include "row.h" */ /* Commented by amalgamation script */ +/* #include "cell.h" */ /* Commented by amalgamation script */ +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +/* #include "vector.h" */ /* Commented by amalgamation script */ + + +struct f_row { + f_vector_t *cells; +}; + +static +f_row_t *create_row_impl(f_vector_t *cells) +{ + f_row_t *row = (f_row_t *)F_CALLOC(1, sizeof(f_row_t)); + if (row == NULL) + return NULL; + if (cells) { + row->cells = cells; + } else { + row->cells = create_vector(sizeof(f_cell_t *), DEFAULT_VECTOR_CAPACITY); + if (row->cells == NULL) { + F_FREE(row); + return NULL; + } + } + return row; +} + +FT_INTERNAL +f_row_t *create_row(void) +{ + return create_row_impl(NULL); +} + +static +void destroy_each_cell(f_vector_t *cells) +{ + size_t i = 0; + size_t cells_n = vector_size(cells); + for (i = 0; i < cells_n; ++i) { + f_cell_t *cell = VECTOR_AT(cells, i, f_cell_t *); + destroy_cell(cell); + } +} + +FT_INTERNAL +void destroy_row(f_row_t *row) +{ + if (row == NULL) + return; + + if (row->cells) { + destroy_each_cell(row->cells); + destroy_vector(row->cells); + } + + F_FREE(row); +} + +FT_INTERNAL +f_row_t *copy_row(f_row_t *row) +{ + assert(row); + f_row_t *result = create_row(); + if (result == NULL) + return NULL; + + size_t i = 0; + size_t cols_n = vector_size(row->cells); + for (i = 0; i < cols_n; ++i) { + f_cell_t *cell = VECTOR_AT(row->cells, i, f_cell_t *); + f_cell_t *new_cell = copy_cell(cell); + if (new_cell == NULL) { + destroy_row(result); + return NULL; + } + vector_push(result->cells, &new_cell); + } + + return result; +} + +FT_INTERNAL +f_row_t *split_row(f_row_t *row, size_t pos) +{ + assert(row); + + f_vector_t *cells = vector_split(row->cells, pos); + if (!cells) + return NULL; + f_row_t *tail = create_row_impl(cells); + if (!tail) { + destroy_each_cell(cells); + destroy_vector(cells); + } + return tail; +} + +FT_INTERNAL +int ft_row_erase_range(f_row_t *row, size_t left, size_t right) +{ + assert(row); + size_t cols_n = vector_size(row->cells); + if (cols_n == 0 || (right < left)) + return FT_SUCCESS; + + f_cell_t *cell = NULL; + size_t i = left; + while (i < cols_n && i <= right) { + cell = VECTOR_AT(row->cells, i, f_cell_t *); + destroy_cell(cell); + ++i; + } + size_t n_destroy = MIN(cols_n - 1, right) - left + 1; + while (n_destroy--) { + vector_erase(row->cells, left); + } + return FT_SUCCESS; +} + +FT_INTERNAL +size_t columns_in_row(const f_row_t *row) +{ + if (row == NULL || row->cells == NULL) + return 0; + + return vector_size(row->cells); +} + + +static +f_cell_t *get_cell_impl(f_row_t *row, size_t col, enum f_get_policy policy) +{ + if (row == NULL || row->cells == NULL) { + return NULL; + } + + switch (policy) { + case DONT_CREATE_ON_NULL: + if (col < columns_in_row(row)) { + return VECTOR_AT(row->cells, col, f_cell_t *); + } + return NULL; + case CREATE_ON_NULL: + while (col >= columns_in_row(row)) { + f_cell_t *new_cell = create_cell(); + if (new_cell == NULL) + return NULL; + if (FT_IS_ERROR(vector_push(row->cells, &new_cell))) { + destroy_cell(new_cell); + return NULL; + } + } + return VECTOR_AT(row->cells, col, f_cell_t *); + } + + assert(0 && "Shouldn't be here!"); + return NULL; +} + + +FT_INTERNAL +f_cell_t *get_cell(f_row_t *row, size_t col) +{ + return get_cell_impl(row, col, DONT_CREATE_ON_NULL); +} + + +FT_INTERNAL +const f_cell_t *get_cell_c(const f_row_t *row, size_t col) +{ + return get_cell((f_row_t *)row, col); +} + + +FT_INTERNAL +f_cell_t *get_cell_and_create_if_not_exists(f_row_t *row, size_t col) +{ + return get_cell_impl(row, col, CREATE_ON_NULL); +} + +FT_INTERNAL +f_cell_t *create_cell_in_position(f_row_t *row, size_t col) +{ + if (row == NULL || row->cells == NULL) { + return NULL; + } + + f_cell_t *new_cell = create_cell(); + if (new_cell == NULL) + return NULL; + if (FT_IS_ERROR(vector_insert(row->cells, &new_cell, col))) { + destroy_cell(new_cell); + return NULL; + } + return VECTOR_AT(row->cells, col, f_cell_t *); +} + + +FT_INTERNAL +f_status swap_row(f_row_t *cur_row, f_row_t *ins_row, size_t pos) +{ + assert(cur_row); + assert(ins_row); + size_t cur_sz = vector_size(cur_row->cells); + if (cur_sz == 0 && pos == 0) { + f_row_t tmp; + memcpy(&tmp, cur_row, sizeof(f_row_t)); + memcpy(cur_row, ins_row, sizeof(f_row_t)); + memcpy(ins_row, &tmp, sizeof(f_row_t)); + return FT_SUCCESS; + } + + return vector_swap(cur_row->cells, ins_row->cells, pos); +} + +/* Ownership of cells of `ins_row` is passed to `cur_row`. */ +FT_INTERNAL +f_status insert_row(f_row_t *cur_row, f_row_t *ins_row, size_t pos) +{ + assert(cur_row); + assert(ins_row); + + while (vector_size(cur_row->cells) < pos) { + f_cell_t *new_cell = create_cell(); + if (!new_cell) + return FT_GEN_ERROR; + vector_push(cur_row->cells, &new_cell); + } + + size_t sz = vector_size(ins_row->cells); + size_t i = 0; + for (i = 0; i < sz; ++i) { + f_cell_t *cell = VECTOR_AT(ins_row->cells, i, f_cell_t *); + if (FT_IS_ERROR(vector_insert(cur_row->cells, &cell, pos + i))) { + /* clean up what we have inserted */ + while (i--) { + vector_erase(cur_row->cells, pos); + } + return FT_GEN_ERROR; + } + } + /* Clear cells so that it will be safe to destroy this row */ + vector_clear(ins_row->cells); + return FT_SUCCESS; +} + + +FT_INTERNAL +size_t group_cell_number(const f_row_t *row, size_t master_cell_col) +{ + assert(row); + const f_cell_t *master_cell = get_cell_c(row, master_cell_col); + if (master_cell == NULL) + return 0; + + if (get_cell_type(master_cell) != GROUP_MASTER_CELL) + return 1; + + size_t total_cols = vector_size(row->cells); + size_t slave_col = master_cell_col + 1; + while (slave_col < total_cols) { + const f_cell_t *cell = get_cell_c(row, slave_col); + if (cell && get_cell_type(cell) == GROUP_SLAVE_CELL) { + ++slave_col; + } else { + break; + } + } + return slave_col - master_cell_col; +} + + +FT_INTERNAL +int get_row_cell_types(const f_row_t *row, enum f_cell_type *types, size_t types_sz) +{ + assert(row); + assert(types); + size_t i = 0; + for (i = 0; i < types_sz; ++i) { + const f_cell_t *cell = get_cell_c(row, i); + if (cell) { + types[i] = get_cell_type(cell); + } else { + types[i] = COMMON_CELL; + } + } + return FT_SUCCESS; +} + + +FT_INTERNAL +f_status row_set_cell_span(f_row_t *row, size_t cell_column, size_t hor_span) +{ + assert(row); + + if (hor_span < 2) + return FT_EINVAL; + + f_cell_t *main_cell = get_cell_and_create_if_not_exists(row, cell_column); + if (main_cell == NULL) { + return FT_GEN_ERROR; + } + set_cell_type(main_cell, GROUP_MASTER_CELL); + --hor_span; + ++cell_column; + + while (hor_span) { + f_cell_t *slave_cell = get_cell_and_create_if_not_exists(row, cell_column); + if (slave_cell == NULL) { + return FT_GEN_ERROR; + } + set_cell_type(slave_cell, GROUP_SLAVE_CELL); + --hor_span; + ++cell_column; + } + + return FT_SUCCESS; +} + +static +int print_row_separator_impl(f_conv_context_t *cntx, + const size_t *col_width_arr, size_t cols, + const f_row_t *upper_row, const f_row_t *lower_row, + enum f_hor_separator_pos separatorPos, + const f_separator_t *sep) +{ + assert(cntx); + + int status = FT_GEN_ERROR; + + const f_context_t *context = cntx->cntx; + + /* Get cell types + * + * Regions above top row and below bottom row areconsidered full of virtual + * GROUP_SLAVE_CELL cells + */ + enum f_cell_type *top_row_types = (enum f_cell_type *)F_MALLOC(sizeof(enum f_cell_type) * cols * 2); + if (top_row_types == NULL) { + return FT_MEMORY_ERROR; + } + enum f_cell_type *bottom_row_types = top_row_types + cols; + if (upper_row) { + get_row_cell_types(upper_row, top_row_types, cols); + } else { + size_t i = 0; + for (i = 0; i < cols; ++i) + top_row_types[i] = GROUP_SLAVE_CELL; + } + if (lower_row) { + get_row_cell_types(lower_row, bottom_row_types, cols); + } else { + size_t i = 0; + for (i = 0; i < cols; ++i) + bottom_row_types[i] = GROUP_SLAVE_CELL; + } + + + f_table_properties_t *properties = context->table_properties; + fort_entire_table_properties_t *entire_tprops = &properties->entire_table_properties; + + size_t written = 0; + int tmp = 0; + + enum ft_row_type lower_row_type = FT_ROW_COMMON; + if (lower_row != NULL) { + int lrt = get_cell_property_hierarchically(properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); + lower_row_type = (enum ft_row_type)lrt; + } + enum ft_row_type upper_row_type = FT_ROW_COMMON; + if (upper_row != NULL) { + int urt = get_cell_property_hierarchically(properties, context->row - 1, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); + upper_row_type = (enum ft_row_type)urt; + } + + /* Row separator anatomy + * + * | C11 | C12 C13 | C14 C15 | + * L I I I IV I I IT I I I IB I I II I I R + * | C21 | C22 | C23 C24 C25 | + */ + const char **L = NULL; + const char **I = NULL; + const char **IV = NULL; + const char **R = NULL; + const char **IT = NULL; + const char **IB = NULL; + const char **II = NULL; + + struct fort_border_style *border_style = &properties->border_style; + + typedef const char *(*border_chars_point_t)[BORDER_ITEM_POS_SIZE]; + const char *(*border_chars)[BORDER_ITEM_POS_SIZE] = NULL; + border_chars = (border_chars_point_t)&border_style->border_chars; + if (upper_row_type == FT_ROW_HEADER || lower_row_type == FT_ROW_HEADER) { + border_chars = (border_chars_point_t)&border_style->header_border_chars; + } + + if (sep && sep->enabled) { + L = &(border_style->separator_chars[LH_sip]); + I = &(border_style->separator_chars[IH_sip]); + IV = &(border_style->separator_chars[II_sip]); + R = &(border_style->separator_chars[RH_sip]); + + IT = &(border_style->separator_chars[TI_sip]); + IB = &(border_style->separator_chars[BI_sip]); + II = &(border_style->separator_chars[IH_sip]); + + if (lower_row == NULL) { + L = &(*border_chars)[BL_bip]; + R = &(*border_chars)[BR_bip]; + } else if (upper_row == NULL) { + L = &(*border_chars)[TL_bip]; + R = &(*border_chars)[TR_bip]; + } + } else { + switch (separatorPos) { + case TOP_SEPARATOR: + L = &(*border_chars)[TL_bip]; + I = &(*border_chars)[TT_bip]; + IV = &(*border_chars)[TV_bip]; + R = &(*border_chars)[TR_bip]; + + IT = &(*border_chars)[TV_bip]; + IB = &(*border_chars)[TV_bip]; + II = &(*border_chars)[TT_bip]; + break; + case INSIDE_SEPARATOR: + L = &(*border_chars)[LH_bip]; + I = &(*border_chars)[IH_bip]; + IV = &(*border_chars)[II_bip]; + R = &(*border_chars)[RH_bip]; + + IT = &(*border_chars)[TI_bip]; + IB = &(*border_chars)[BI_bip]; + II = &(*border_chars)[IH_bip]; + break; + case BOTTOM_SEPARATOR: + L = &(*border_chars)[BL_bip]; + I = &(*border_chars)[BB_bip]; + IV = &(*border_chars)[BV_bip]; + R = &(*border_chars)[BR_bip]; + + IT = &(*border_chars)[BV_bip]; + IB = &(*border_chars)[BV_bip]; + II = &(*border_chars)[BB_bip]; + break; + default: + break; + } + } + + size_t i = 0; + + /* If all chars are not printable, skip line separator */ + /* NOTE: argument of `isprint` should be explicitly converted to + * unsigned char according to + * https://en.cppreference.com/w/c/string/byte/isprint + */ + if ((strlen(*L) == 0 || (strlen(*L) == 1 && !isprint((unsigned char) **L))) + && (strlen(*I) == 0 || (strlen(*I) == 1 && !isprint((unsigned char) **I))) + && (strlen(*IV) == 0 || (strlen(*IV) == 1 && !isprint((unsigned char) **IV))) + && (strlen(*R) == 0 || (strlen(*R) == 1 && !isprint((unsigned char) **R)))) { + status = 0; + goto clear; + } + + /* Print left margin */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, FT_SPACE)); + + for (i = 0; i < cols; ++i) { + if (i == 0) { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *L)); + } else { + if ((top_row_types[i] == COMMON_CELL || top_row_types[i] == GROUP_MASTER_CELL) + && (bottom_row_types[i] == COMMON_CELL || bottom_row_types[i] == GROUP_MASTER_CELL)) { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *IV)); + } else if (top_row_types[i] == GROUP_SLAVE_CELL && bottom_row_types[i] == GROUP_SLAVE_CELL) { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *II)); + } else if (top_row_types[i] == GROUP_SLAVE_CELL) { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *IT)); + } else { + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *IB)); + } + } + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, col_width_arr[i], *I)); + } + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R)); + + /* Print right margin */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, FT_SPACE)); + + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE)); + + status = (int)written; + +clear: + F_FREE(top_row_types); + return status; +} + +FT_INTERNAL +int print_row_separator(f_conv_context_t *cntx, + const size_t *col_width_arr, size_t cols, + const f_row_t *upper_row, const f_row_t *lower_row, + enum f_hor_separator_pos separatorPos, const f_separator_t *sep) +{ + return print_row_separator_impl(cntx, col_width_arr, cols, upper_row, lower_row, + separatorPos, sep); +} + +FT_INTERNAL +f_row_t *create_row_from_string(const char *str) +{ + typedef char char_type; + char_type *(*strdup_)(const char_type * str) = F_STRDUP; + const char_type zero_char = '\0'; + f_status(*fill_cell_from_string_)(f_cell_t *cell, const char *str) = fill_cell_from_string; + const char_type *const zero_string = ""; +#define STRCHR strchr + + char_type *pos = NULL; + char_type *base_pos = NULL; + size_t number_of_separators = 0; + + f_row_t *row = create_row(); + if (row == NULL) + return NULL; + + if (str == NULL) + return row; + + char_type *str_copy = strdup_(str); + if (str_copy == NULL) + goto clear; + + pos = str_copy; + base_pos = str_copy; + number_of_separators = 0; + while (*pos) { + pos = STRCHR(pos, g_col_separator); + if (pos != NULL) { + *(pos) = zero_char; + ++pos; + number_of_separators++; + } + + f_cell_t *cell = create_cell(); + if (cell == NULL) + goto clear; + + int status = fill_cell_from_string_(cell, base_pos); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + status = vector_push(row->cells, &cell); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + if (pos == NULL) + break; + base_pos = pos; + } + + /* special case if in format string last cell is empty */ + while (vector_size(row->cells) < (number_of_separators + 1)) { + f_cell_t *cell = create_cell(); + if (cell == NULL) + goto clear; + + int status = fill_cell_from_string_(cell, zero_string); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + status = vector_push(row->cells, &cell); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + } + + F_FREE(str_copy); + return row; + +clear: + destroy_row(row); + F_FREE(str_copy); + return NULL; + +#undef STRCHR +} + + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_row_t *create_row_from_wstring(const wchar_t *str) +{ + typedef wchar_t char_type; + char_type *(*strdup_)(const char_type * str) = F_WCSDUP; + const char_type zero_char = L'\0'; + f_status(*fill_cell_from_string_)(f_cell_t *cell, const wchar_t *str) = fill_cell_from_wstring; + const char_type *const zero_string = L""; +#define STRCHR wcschr + + char_type *pos = NULL; + char_type *base_pos = NULL; + size_t number_of_separators = 0; + + f_row_t *row = create_row(); + if (row == NULL) + return NULL; + + if (str == NULL) + return row; + + char_type *str_copy = strdup_(str); + if (str_copy == NULL) + goto clear; + + pos = str_copy; + base_pos = str_copy; + number_of_separators = 0; + while (*pos) { + pos = STRCHR(pos, g_col_separator); + if (pos != NULL) { + *(pos) = zero_char; + ++pos; + number_of_separators++; + } + + f_cell_t *cell = create_cell(); + if (cell == NULL) + goto clear; + + int status = fill_cell_from_string_(cell, base_pos); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + status = vector_push(row->cells, &cell); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + if (pos == NULL) + break; + base_pos = pos; + } + + /* special case if in format string last cell is empty */ + while (vector_size(row->cells) < (number_of_separators + 1)) { + f_cell_t *cell = create_cell(); + if (cell == NULL) + goto clear; + + int status = fill_cell_from_string_(cell, zero_string); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + + status = vector_push(row->cells, &cell); + if (FT_IS_ERROR(status)) { + destroy_cell(cell); + goto clear; + } + } + + F_FREE(str_copy); + return row; + +clear: + destroy_row(row); + F_FREE(str_copy); + return NULL; +#undef STRCHR +} +#endif + +FT_INTERNAL +f_row_t *create_row_from_buffer(const f_string_buffer_t *buffer) +{ + switch (buffer->type) { + case CHAR_BUF: + return create_row_from_string(buffer->str.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return create_row_from_wstring(buffer->str.wstr); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return create_row_from_string((const char *)buffer->str.u8str); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + return NULL; + } +} + +static int +vsnprintf_buffer(f_string_buffer_t *buffer, const struct f_string_view *fmt, + va_list *va) +{ + /* Disable compiler diagnostic (format string is not a string literal) */ +#if defined(FT_CLANG_COMPILER) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wformat-nonliteral" +#endif +#if defined(FT_GCC_COMPILER) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wformat-nonliteral" +#endif + size_t width_capacity = string_buffer_width_capacity(buffer); + switch (buffer->type) { + case CHAR_BUF: + return vsnprintf(buffer->str.cstr, width_capacity, fmt->u.cstr, *va); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return vswprintf(buffer->str.wstr, width_capacity, fmt->u.wstr, *va); +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return vsnprintf(buffer->str.cstr, width_capacity, fmt->u.cstr, *va); +#endif + default: + assert(0); + return 0; + } +#if defined(FT_CLANG_COMPILER) +#pragma clang diagnostic pop +#endif +#if defined(FT_GCC_COMPILER) +#pragma GCC diagnostic pop +#endif +} + +FT_INTERNAL +f_row_t *create_row_from_fmt_string(const struct f_string_view *fmt, va_list *va_args) +{ + f_string_buffer_t *buffer = create_string_buffer(DEFAULT_STR_BUF_SIZE, fmt->type); + if (buffer == NULL) + return NULL; + + size_t cols_origin = number_of_columns_in_format_string(fmt); + size_t cols = 0; + + while (1) { + va_list va; + va_copy(va, *va_args); + int virtual_sz = vsnprintf_buffer(buffer, fmt, &va); + va_end(va); + /* If error encountered */ + if (virtual_sz < 0) + goto clear; + + /* Successful write */ + if ((size_t)virtual_sz < string_buffer_width_capacity(buffer)) + break; + + /* Otherwise buffer was too small, so incr. buffer size ant try again. */ + if (!FT_IS_SUCCESS(realloc_string_buffer_without_copy(buffer))) + goto clear; + } + + cols = number_of_columns_in_format_buffer(buffer); + if (cols == cols_origin) { + f_row_t *row = create_row_from_buffer(buffer); + if (row == NULL) { + goto clear; + } + + destroy_string_buffer(buffer); + return row; + } + + if (cols_origin == 1) { + f_row_t *row = create_row(); + if (row == NULL) { + goto clear; + } + + f_cell_t *cell = get_cell_and_create_if_not_exists(row, 0); + if (cell == NULL) { + destroy_row(row); + goto clear; + } + + f_status result = fill_cell_from_buffer(cell, buffer); + if (FT_IS_ERROR(result)) { + destroy_row(row); + goto clear; + } + + destroy_string_buffer(buffer); + return row; + } + + /* + * todo: add processing of cols != cols_origin in a general way + * (when cols_origin != 1). + */ + +clear: + destroy_string_buffer(buffer); + return NULL; +} + + +FT_INTERNAL +int snprintf_row(const f_row_t *row, f_conv_context_t *cntx, size_t *col_width_arr, size_t col_width_arr_sz, + size_t row_height) +{ + const f_context_t *context = cntx->cntx; + assert(context); + + if (row == NULL) + return -1; + + size_t cols_in_row = columns_in_row(row); + if (cols_in_row > col_width_arr_sz) + return -1; + + /* Row separator anatomy + * + * L data IV data IV data R + */ + f_table_properties_t *properties = context->table_properties; + + typedef const char *(*border_chars_point_t)[BORDER_ITEM_POS_SIZE]; + int rtype = get_cell_property_hierarchically(properties, context->row, FT_ANY_COLUMN, FT_CPROP_ROW_TYPE); + enum ft_row_type row_type = (enum ft_row_type)rtype; + const char *(*bord_chars)[BORDER_ITEM_POS_SIZE] = (row_type == FT_ROW_HEADER) + ? (border_chars_point_t)(&properties->border_style.header_border_chars) + : (border_chars_point_t)(&properties->border_style.border_chars); + const char **L = &(*bord_chars)[LL_bip]; + const char **IV = &(*bord_chars)[IV_bip]; + const char **R = &(*bord_chars)[RR_bip]; + + + size_t written = 0; + int tmp = 0; + size_t i = 0; + fort_entire_table_properties_t *entire_tprops = &context->table_properties->entire_table_properties; + for (i = 0; i < row_height; ++i) { + /* Print left margin */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->left_margin, FT_SPACE)); + + /* Print left table boundary */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *L)); + size_t j = 0; + while (j < col_width_arr_sz) { + if (j < cols_in_row) { + ((f_context_t *)context)->column = j; + f_cell_t *cell = VECTOR_AT(row->cells, j, f_cell_t *); + size_t cell_vis_width = 0; + + size_t group_slave_sz = group_cell_number(row, j); + cell_vis_width = col_width_arr[j]; + size_t slave_j = 0; + size_t master_j = j; + for (slave_j = master_j + 1; slave_j < (master_j + group_slave_sz); ++slave_j) { + cell_vis_width += col_width_arr[slave_j] + FORT_COL_SEPARATOR_LENGTH; + ++j; + } + + CHCK_RSLT_ADD_TO_WRITTEN(cell_printf(cell, i, cntx, cell_vis_width)); + } else { + /* Print empty cell */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, col_width_arr[j], FT_SPACE)); + } + + /* Print boundary between cells */ + if (j < col_width_arr_sz - 1) + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *IV)); + + ++j; + } + + /* Print right table boundary */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, *R)); + + /* Print right margin */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, entire_tprops->right_margin, FT_SPACE)); + + /* Print new line character */ + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, FT_NEWLINE)); + } + return (int)written; + +clear: + return -1; +} + +/******************************************************** + End of file "row.c" + ********************************************************/ + + +/******************************************************** + Begin of file "string_buffer.c" + ********************************************************/ + +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +/* #include "properties.h" */ /* Commented by amalgamation script */ +/* #include "wcwidth.h" */ /* Commented by amalgamation script */ +#include +#include +#ifdef FT_HAVE_WCHAR +#include +#endif +#if defined(FT_HAVE_UTF8) +/* #include "utf8.h" */ /* Commented by amalgamation script */ +#endif + +static ptrdiff_t str_iter_width(const char *beg, const char *end) +{ + assert(end >= beg); + return (end - beg); +} + + +#ifdef FT_HAVE_WCHAR +static ptrdiff_t wcs_iter_width(const wchar_t *beg, const wchar_t *end) +{ + assert(end >= beg); + return mk_wcswidth(beg, (size_t)(end - beg)); +} +#endif /* FT_HAVE_WCHAR */ + + +static size_t buf_str_len(const f_string_buffer_t *buf) +{ + assert(buf); + + switch (buf->type) { + case CHAR_BUF: + return strlen(buf->str.cstr); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return wcslen(buf->str.wstr); +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return utf8len(buf->str.u8str); +#endif + } + + assert(0); + return 0; +} + + +FT_INTERNAL +size_t strchr_count(const char *str, char ch) +{ + if (str == NULL) + return 0; + + size_t count = 0; + str = strchr(str, ch); + while (str) { + count++; + str++; + str = strchr(str, ch); + } + return count; +} + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +size_t wstrchr_count(const wchar_t *str, wchar_t ch) +{ + if (str == NULL) + return 0; + + size_t count = 0; + str = wcschr(str, ch); + while (str) { + count++; + str++; + str = wcschr(str, ch); + } + return count; +} +#endif + + +#if defined(FT_HAVE_UTF8) +/* todo: do something with code below!!! */ +FT_INTERNAL +void *ut8next(const void *str) +{ + utf8_int32_t out_codepoint; + return utf8codepoint(str, &out_codepoint); +} + +FT_INTERNAL +size_t utf8chr_count(const void *str, utf8_int32_t ch) +{ + if (str == NULL) + return 0; + + size_t count = 0; + str = utf8chr(str, ch); + while (str) { + count++; + str = ut8next(str); + str = utf8chr(str, ch); + } + return count; +} +#endif /* FT_HAVE_UTF8 */ + + +FT_INTERNAL +const char *str_n_substring_beg(const char *str, char ch_separator, size_t n) +{ + if (str == NULL) + return NULL; + + if (n == 0) + return str; + + str = strchr(str, ch_separator); + --n; + while (n > 0) { + if (str == NULL) + return NULL; + --n; + str++; + str = strchr(str, ch_separator); + } + return str ? (str + 1) : NULL; +} + + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +const wchar_t *wstr_n_substring_beg(const wchar_t *str, wchar_t ch_separator, size_t n) +{ + if (str == NULL) + return NULL; + + if (n == 0) + return str; + + str = wcschr(str, ch_separator); + --n; + while (n > 0) { + if (str == NULL) + return NULL; + --n; + str++; + str = wcschr(str, ch_separator); + } + return str ? (str + 1) : NULL; +} +#endif /* FT_HAVE_WCHAR */ + +#if defined(FT_HAVE_UTF8) +FT_INTERNAL +const void *utf8_n_substring_beg(const void *str, utf8_int32_t ch_separator, size_t n) +{ + if (str == NULL) + return NULL; + + if (n == 0) + return str; + + str = utf8chr(str, ch_separator); + --n; + while (n > 0) { + if (str == NULL) + return NULL; + --n; + str = ut8next(str); + str = utf8chr(str, ch_separator); + } + return str ? (ut8next(str)) : NULL; +} +#endif + + +FT_INTERNAL +void str_n_substring(const char *str, char ch_separator, size_t n, const char **begin, const char **end) +{ + const char *beg = str_n_substring_beg(str, ch_separator, n); + if (beg == NULL) { + *begin = NULL; + *end = NULL; + return; + } + + const char *en = strchr(beg, ch_separator); + if (en == NULL) { + en = str + strlen(str); + } + + *begin = beg; + *end = en; + return; +} + + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +void wstr_n_substring(const wchar_t *str, wchar_t ch_separator, size_t n, const wchar_t **begin, const wchar_t **end) +{ + const wchar_t *beg = wstr_n_substring_beg(str, ch_separator, n); + if (beg == NULL) { + *begin = NULL; + *end = NULL; + return; + } + + const wchar_t *en = wcschr(beg, ch_separator); + if (en == NULL) { + en = str + wcslen(str); + } + + *begin = beg; + *end = en; + return; +} +#endif /* FT_HAVE_WCHAR */ + +#if defined(FT_HAVE_UTF8) +FT_INTERNAL +void utf8_n_substring(const void *str, utf8_int32_t ch_separator, size_t n, const void **begin, const void **end) +{ + const char *beg = (const char *)utf8_n_substring_beg(str, ch_separator, n); + if (beg == NULL) { + *begin = NULL; + *end = NULL; + return; + } + + const char *en = (const char *)utf8chr(beg, ch_separator); + if (en == NULL) { + en = (const char *)str + strlen((const char *)str); + } + + *begin = beg; + *end = en; + return; +} +#endif /* FT_HAVE_UTF8 */ + + + +FT_INTERNAL +f_string_buffer_t *create_string_buffer(size_t n_chars, enum f_string_type type) +{ + size_t char_sz = 0; + switch (type) { + case CHAR_BUF: + char_sz = 1; + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + char_sz = sizeof(wchar_t); + break; +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + char_sz = 4; + break; +#endif + } + + size_t sz = n_chars * char_sz; + f_string_buffer_t *result = (f_string_buffer_t *)F_MALLOC(sizeof(f_string_buffer_t)); + if (result == NULL) + return NULL; + result->str.data = F_MALLOC(sz); + if (result->str.data == NULL) { + F_FREE(result); + return NULL; + } + result->data_sz = sz; + result->type = type; + + if (sz) { + switch (type) { + case CHAR_BUF: + result->str.cstr[0] = '\0'; + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + result->str.wstr[0] = L'\0'; + break; +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + result->str.cstr[0] = '\0'; + break; +#endif + } + } + + return result; +} + + +FT_INTERNAL +void destroy_string_buffer(f_string_buffer_t *buffer) +{ + if (buffer == NULL) + return; + F_FREE(buffer->str.data); + buffer->str.data = NULL; + F_FREE(buffer); +} + +FT_INTERNAL +f_string_buffer_t *copy_string_buffer(const f_string_buffer_t *buffer) +{ + assert(buffer); + f_string_buffer_t *result = create_string_buffer(buffer->data_sz, buffer->type); + if (result == NULL) + return NULL; + switch (buffer->type) { + case CHAR_BUF: + if (FT_IS_ERROR(fill_buffer_from_string(result, buffer->str.cstr))) { + destroy_string_buffer(result); + return NULL; + } + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + if (FT_IS_ERROR(fill_buffer_from_wstring(result, buffer->str.wstr))) { + destroy_string_buffer(result); + return NULL; + } + break; +#endif /* FT_HAVE_WCHAR */ + default: + destroy_string_buffer(result); + return NULL; + } + return result; +} + +FT_INTERNAL +f_status realloc_string_buffer_without_copy(f_string_buffer_t *buffer) +{ + assert(buffer); + char *new_str = (char *)F_MALLOC(buffer->data_sz * 2); + if (new_str == NULL) { + return FT_MEMORY_ERROR; + } + F_FREE(buffer->str.data); + buffer->str.data = new_str; + buffer->data_sz *= 2; + return FT_SUCCESS; +} + + +FT_INTERNAL +f_status fill_buffer_from_string(f_string_buffer_t *buffer, const char *str) +{ + assert(buffer); + assert(str); + + char *copy = F_STRDUP(str); + if (copy == NULL) + return FT_MEMORY_ERROR; + + F_FREE(buffer->str.data); + buffer->str.cstr = copy; + buffer->type = CHAR_BUF; + + return FT_SUCCESS; +} + + +#ifdef FT_HAVE_WCHAR +FT_INTERNAL +f_status fill_buffer_from_wstring(f_string_buffer_t *buffer, const wchar_t *str) +{ + assert(buffer); + assert(str); + + wchar_t *copy = F_WCSDUP(str); + if (copy == NULL) + return FT_MEMORY_ERROR; + + F_FREE(buffer->str.data); + buffer->str.wstr = copy; + buffer->type = W_CHAR_BUF; + + return FT_SUCCESS; +} +#endif /* FT_HAVE_WCHAR */ + +#ifdef FT_HAVE_UTF8 +FT_INTERNAL +f_status fill_buffer_from_u8string(f_string_buffer_t *buffer, const void *str) +{ + assert(buffer); + assert(str); + + void *copy = F_UTF8DUP(str); + if (copy == NULL) + return FT_MEMORY_ERROR; + + F_FREE(buffer->str.u8str); + buffer->str.u8str = copy; + buffer->type = UTF8_BUF; + + return FT_SUCCESS; +} +#endif /* FT_HAVE_UTF8 */ + +FT_INTERNAL +size_t buffer_text_visible_height(const f_string_buffer_t *buffer) +{ + if (buffer == NULL || buffer->str.data == NULL || buf_str_len(buffer) == 0) { + return 0; + } + if (buffer->type == CHAR_BUF) + return 1 + strchr_count(buffer->str.cstr, '\n'); +#ifdef FT_HAVE_WCHAR + else if (buffer->type == W_CHAR_BUF) + return 1 + wstrchr_count(buffer->str.wstr, L'\n'); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + else if (buffer->type == UTF8_BUF) + return 1 + utf8chr_count(buffer->str.u8str, '\n'); +#endif /* FT_HAVE_WCHAR */ + + assert(0); + return 0; +} + +FT_INTERNAL +size_t string_buffer_cod_width_capacity(const f_string_buffer_t *buffer) +{ + return string_buffer_width_capacity(buffer); +} + +FT_INTERNAL +size_t string_buffer_raw_capacity(const f_string_buffer_t *buffer) +{ + return buffer->data_sz; +} + +#ifdef FT_HAVE_UTF8 +/* User provided function to compute utf8 string visible width */ +static int (*_custom_u8strwid)(const void *beg, const void *end, size_t *width) = NULL; + +FT_INTERNAL +void buffer_set_u8strwid_func(int (*u8strwid)(const void *beg, const void *end, size_t *width)) +{ + _custom_u8strwid = u8strwid; +} + +static +size_t utf8_width(const void *beg, const void *end) +{ + if (_custom_u8strwid) { + size_t width = 0; + if (!_custom_u8strwid(beg, end, &width)) + return width; + } + + size_t sz = (size_t)((const char *)end - (const char *)beg); + char *tmp = (char *)F_MALLOC(sizeof(char) * (sz + 1)); + // @todo: add check to tmp + assert(tmp); + + memcpy(tmp, beg, sz); + tmp[sz] = '\0'; + size_t result = utf8width(tmp); + F_FREE(tmp); + return result; +} +#endif /* FT_HAVE_WCHAR */ + +FT_INTERNAL +size_t buffer_text_visible_width(const f_string_buffer_t *buffer) +{ + size_t max_length = 0; + if (buffer->type == CHAR_BUF) { + size_t n = 0; + while (1) { + const char *beg = NULL; + const char *end = NULL; + str_n_substring(buffer->str.cstr, '\n', n, &beg, &end); + if (beg == NULL || end == NULL) + return max_length; + + max_length = MAX(max_length, (size_t)(end - beg)); + ++n; + } +#ifdef FT_HAVE_WCHAR + } else if (buffer->type == W_CHAR_BUF) { + size_t n = 0; + while (1) { + const wchar_t *beg = NULL; + const wchar_t *end = NULL; + wstr_n_substring(buffer->str.wstr, L'\n', n, &beg, &end); + if (beg == NULL || end == NULL) + return max_length; + + int line_width = mk_wcswidth(beg, (size_t)(end - beg)); + if (line_width < 0) /* For safety */ + line_width = 0; + max_length = MAX(max_length, (size_t)line_width); + + ++n; + } +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + } else if (buffer->type == UTF8_BUF) { + size_t n = 0; + while (1) { + const void *beg = NULL; + const void *end = NULL; + utf8_n_substring(buffer->str.u8str, '\n', n, &beg, &end); + if (beg == NULL || end == NULL) + return max_length; + + max_length = MAX(max_length, (size_t)utf8_width(beg, end)); + ++n; + } +#endif /* FT_HAVE_WCHAR */ + } + + return max_length; /* shouldn't be here */ +} + + +static void +buffer_substring(const f_string_buffer_t *buffer, size_t buffer_row, const void **begin, const void **end, ptrdiff_t *str_it_width) +{ + switch (buffer->type) { + case CHAR_BUF: + str_n_substring(buffer->str.cstr, '\n', buffer_row, (const char **)begin, (const char **)end); + if ((*(const char **)begin) && (*(const char **)end)) + *str_it_width = str_iter_width(*(const char **)begin, *(const char **)end); + break; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + wstr_n_substring(buffer->str.wstr, L'\n', buffer_row, (const wchar_t **)begin, (const wchar_t **)end); + if ((*(const wchar_t **)begin) && (*(const wchar_t **)end)) + *str_it_width = wcs_iter_width(*(const wchar_t **)begin, *(const wchar_t **)end); + break; +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + utf8_n_substring(buffer->str.u8str, '\n', buffer_row, begin, end); + if ((*(const char **)begin) && (*(const char **)end)) + *str_it_width = utf8_width(*begin, *end); + break; +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + } +} + + +static int +buffer_print_range(f_conv_context_t *cntx, const void *beg, const void *end) +{ + size_t len; + switch (cntx->b_type) { + case CHAR_BUF: + len = (size_t)((const char *)end - (const char *)beg); + return ft_nprint(cntx, (const char *)beg, len); +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + len = (size_t)((const wchar_t *)end - (const wchar_t *)beg); + return ft_nwprint(cntx, (const wchar_t *)beg, len); +#endif /* FT_HAVE_WCHAR */ +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return ft_nu8print(cntx, beg, end); +#endif /* FT_HAVE_UTF8 */ + default: + assert(0); + return -1; + } +} + + +FT_INTERNAL +int buffer_printf(f_string_buffer_t *buffer, size_t buffer_row, f_conv_context_t *cntx, size_t vis_width, + const char *content_style_tag, const char *reset_content_style_tag) +{ + const f_context_t *context = cntx->cntx; + f_table_properties_t *props = context->table_properties; + size_t row = context->row; + size_t column = context->column; + + if (buffer == NULL || buffer->str.data == NULL + || buffer_row >= buffer_text_visible_height(buffer)) { + return -1; + } + + size_t content_width = buffer_text_visible_width(buffer); + if (vis_width < content_width) + return -1; + + size_t left = 0; + size_t right = 0; + switch (get_cell_property_hierarchically(props, row, column, FT_CPROP_TEXT_ALIGN)) { + case FT_ALIGNED_LEFT: + left = 0; + right = (vis_width) - content_width; + break; + case FT_ALIGNED_CENTER: + left = ((vis_width) - content_width) / 2; + right = ((vis_width) - content_width) - left; + break; + case FT_ALIGNED_RIGHT: + left = (vis_width) - content_width; + right = 0; + break; + default: + assert(0); + break; + } + + size_t written = 0; + int tmp = 0; + ptrdiff_t str_it_width = 0; + const void *beg = NULL; + const void *end = NULL; + buffer_substring(buffer, buffer_row, &beg, &end, &str_it_width); + if (beg == NULL || end == NULL) + return -1; + if (str_it_width < 0 || content_width < (size_t)str_it_width) + return -1; + + size_t padding = content_width - (size_t)str_it_width; + + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, left, FT_SPACE)); + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, content_style_tag)); + CHCK_RSLT_ADD_TO_WRITTEN(buffer_print_range(cntx, beg, end)); + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, 1, reset_content_style_tag)); + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, padding, FT_SPACE)); + CHCK_RSLT_ADD_TO_WRITTEN(print_n_strings(cntx, right, FT_SPACE)); + return (int)written; + +clear: + return -1; +} + +FT_INTERNAL +size_t string_buffer_width_capacity(const f_string_buffer_t *buffer) +{ + assert(buffer); + switch (buffer->type) { + case CHAR_BUF: + return buffer->data_sz; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return buffer->data_sz / sizeof(wchar_t); +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return buffer->data_sz / 4; +#endif + default: + assert(0); + return 0; + } +} + + +FT_INTERNAL +void *buffer_get_data(f_string_buffer_t *buffer) +{ + assert(buffer); + return buffer->str.data; +} + +FT_INTERNAL +int buffer_check_align(f_string_buffer_t *buffer) +{ + assert(buffer); + assert(buffer->str.data); + + switch (buffer->type) { + case CHAR_BUF: + return 1; +#ifdef FT_HAVE_WCHAR + case W_CHAR_BUF: + return (((unsigned long)buffer->str.data) & (sizeof(wchar_t) - 1)) == 0; +#endif +#ifdef FT_HAVE_UTF8 + case UTF8_BUF: + return 1; +#endif + default: + assert(0); + return 0; + } +} + +/******************************************************** + End of file "string_buffer.c" + ********************************************************/ + + +/******************************************************** + Begin of file "table.c" + ********************************************************/ + +/* #include "table.h" */ /* Commented by amalgamation script */ +/* #include "string_buffer.h" */ /* Commented by amalgamation script */ +/* #include "cell.h" */ /* Commented by amalgamation script */ +/* #include "vector.h" */ /* Commented by amalgamation script */ +/* #include "row.h" */ /* Commented by amalgamation script */ + +FT_INTERNAL +f_separator_t *create_separator(int enabled) +{ + f_separator_t *res = (f_separator_t *)F_CALLOC(1, sizeof(f_separator_t)); + if (res == NULL) + return NULL; + res->enabled = enabled; + return res; +} + + +FT_INTERNAL +void destroy_separator(f_separator_t *sep) +{ + F_FREE(sep); +} + + +FT_INTERNAL +f_separator_t *copy_separator(f_separator_t *sep) +{ + assert(sep); + return create_separator(sep->enabled); +} + + +static +f_row_t *get_row_impl(ft_table_t *table, size_t row, enum f_get_policy policy) +{ + if (table == NULL || table->rows == NULL) { + return NULL; + } + + switch (policy) { + case DONT_CREATE_ON_NULL: + if (row < vector_size(table->rows)) { + return VECTOR_AT(table->rows, row, f_row_t *); + } + return NULL; + case CREATE_ON_NULL: + while (row >= vector_size(table->rows)) { + f_row_t *new_row = create_row(); + if (new_row == NULL) + return NULL; + if (FT_IS_ERROR(vector_push(table->rows, &new_row))) { + destroy_row(new_row); + return NULL; + } + } + return VECTOR_AT(table->rows, row, f_row_t *); + } + + assert(0 && "Shouldn't be here!"); + return NULL; +} + + +FT_INTERNAL +f_row_t *get_row(ft_table_t *table, size_t row) +{ + return get_row_impl(table, row, DONT_CREATE_ON_NULL); +} + + +FT_INTERNAL +const f_row_t *get_row_c(const ft_table_t *table, size_t row) +{ + return get_row((ft_table_t *)table, row); +} + + +FT_INTERNAL +f_row_t *get_row_and_create_if_not_exists(ft_table_t *table, size_t row) +{ + return get_row_impl(table, row, CREATE_ON_NULL); +} + +FT_INTERNAL +f_string_buffer_t *get_cur_str_buffer_and_create_if_not_exists(ft_table_t *table) +{ + assert(table); + + f_row_t *row = get_row_and_create_if_not_exists(table, table->cur_row); + if (row == NULL) + return NULL; + + f_cell_t *cell = NULL; + fort_entire_table_properties_t *table_props = &table->properties->entire_table_properties; + switch (table_props->add_strategy) { + case FT_STRATEGY_INSERT: + cell = create_cell_in_position(row, table->cur_col); + break; + case FT_STRATEGY_REPLACE: + cell = get_cell_and_create_if_not_exists(row, table->cur_col); + break; + default: + assert(0 && "Unexpected situation inside libfort"); + break; + } + + if (cell == NULL) + return NULL; + + return cell_get_string_buffer(cell); +} + + +/* + * Returns number of cells (rows * cols) + */ +FT_INTERNAL +f_status get_table_sizes(const ft_table_t *table, size_t *rows, size_t *cols) +{ + *rows = 0; + *cols = 0; + if (table && table->rows) { + *rows = vector_size(table->rows); + size_t row_index = 0; + for (row_index = 0; row_index < vector_size(table->rows); ++row_index) { + f_row_t *row = VECTOR_AT(table->rows, row_index, f_row_t *); + size_t cols_in_row = columns_in_row(row); + if (cols_in_row > *cols) + *cols = cols_in_row; + } + } + return FT_SUCCESS; +} + + +FT_INTERNAL +f_status table_rows_and_cols_geometry(const ft_table_t *table, + size_t **col_width_arr_p, size_t *col_width_arr_sz, + size_t **row_height_arr_p, size_t *row_height_arr_sz, + enum f_geometry_type geom) +{ + if (table == NULL) { + return FT_GEN_ERROR; + } + + size_t max_invis_codepoints = 0; + size_t cols = 0; + size_t rows = 0; + int status = get_table_sizes(table, &rows, &cols); + if (FT_IS_ERROR(status)) + return status; + + size_t *col_width_arr = (size_t *)F_CALLOC(cols, sizeof(size_t)); + size_t *row_height_arr = (size_t *)F_CALLOC(rows, sizeof(size_t)); + if (col_width_arr == NULL || row_height_arr == NULL) { + F_FREE(col_width_arr); + F_FREE(row_height_arr); + return FT_GEN_ERROR; + } + + int combined_cells_found = 0; + f_context_t context; + context.table_properties = (table->properties ? table->properties : &g_table_properties); + size_t col = 0; + for (col = 0; col < cols; ++col) { + col_width_arr[col] = 0; + size_t row = 0; + for (row = 0; row < rows; ++row) { + const f_row_t *row_p = get_row_c(table, row); + const f_cell_t *cell = get_cell_c(row_p, col); + context.column = col; + context.row = row; + if (cell) { + switch (get_cell_type(cell)) { + case COMMON_CELL: + col_width_arr[col] = MAX(col_width_arr[col], cell_vis_width(cell, &context)); + break; + case GROUP_MASTER_CELL: + combined_cells_found = 1; + break; + case GROUP_SLAVE_CELL: + ; /* Do nothing */ + break; + } + row_height_arr[row] = MAX(row_height_arr[row], hint_height_cell(cell, &context)); + } else { + size_t cell_empty_string_height = get_cell_property_hierarchically(context.table_properties, context.row, context.column, FT_CPROP_EMPTY_STR_HEIGHT); + if (cell_empty_string_height) { + size_t cell_top_padding = get_cell_property_hierarchically(context.table_properties, context.row, context.column, FT_CPROP_TOP_PADDING); + size_t cell_bottom_padding = get_cell_property_hierarchically(context.table_properties, context.row, context.column, FT_CPROP_BOTTOM_PADDING); + row_height_arr[row] = MAX(row_height_arr[row], cell_empty_string_height + cell_top_padding + cell_bottom_padding); + } + } + } + + if (geom == INTERN_REPR_GEOMETRY) { + max_invis_codepoints = 0; + for (row = 0; row < rows; ++row) { + const f_row_t *row_p = get_row_c(table, row); + const f_cell_t *cell = get_cell_c(row_p, col); + if (!cell) + continue; + context.column = col; + context.row = row; + size_t inv_codepoints = cell_invis_codes_width(cell, &context); + max_invis_codepoints = MAX(max_invis_codepoints, inv_codepoints); + } + col_width_arr[col] += max_invis_codepoints; + } + } + + if (combined_cells_found) { + for (col = 0; col < cols; ++col) { + size_t row = 0; + for (row = 0; row < rows; ++row) { + const f_row_t *row_p = get_row_c(table, row); + const f_cell_t *cell = get_cell_c(row_p, col); + context.column = col; + context.row = row; + if (cell) { + if (get_cell_type(cell) == GROUP_MASTER_CELL) { + size_t hint_width = cell_vis_width(cell, &context); + if (geom == INTERN_REPR_GEOMETRY) { + hint_width += cell_invis_codes_width(cell, &context); + } + size_t slave_col = col + group_cell_number(row_p, col); + size_t cur_adj_col = col; + size_t group_width = col_width_arr[col]; + size_t i; + for (i = col + 1; i < slave_col; ++i) + group_width += col_width_arr[i] + FORT_COL_SEPARATOR_LENGTH; + /* adjust col. widths */ + while (1) { + if (group_width >= hint_width) + break; + col_width_arr[cur_adj_col] += 1; + group_width++; + cur_adj_col++; + if (cur_adj_col == slave_col) + cur_adj_col = col; + } + } + } + } + } + } + + /* todo: Maybe it is better to move min width checking to a particular cell + * width checking. At the moment min width includes paddings. Maybe it is + * better that min width weren't include paddings but be min width of the + * cell content without padding + */ + /* + if (table->properties) { + for (size_t i = 0; i < cols; ++i) { + col_width_arr[i] = MAX((int)col_width_arr[i], fort_props_column_width(table->properties, i)); + } + } + */ + + *col_width_arr_p = col_width_arr; + *col_width_arr_sz = cols; + *row_height_arr_p = row_height_arr; + *row_height_arr_sz = rows; + return FT_SUCCESS; +} + + +/* + * Returns geometry in characters + */ +FT_INTERNAL +f_status table_geometry(const ft_table_t *table, size_t *height, size_t *width) +{ + if (table == NULL) + return FT_GEN_ERROR; + + *height = 0; + *width = 0; + size_t cols = 0; + size_t rows = 0; + size_t *col_width_arr = NULL; + size_t *row_height_arr = NULL; + + int status = table_rows_and_cols_geometry(table, &col_width_arr, &cols, &row_height_arr, &rows, INTERN_REPR_GEOMETRY); + if (FT_IS_ERROR(status)) + return status; + + *width = 1 + (cols == 0 ? 1 : cols) + 1; /* for boundaries (that take 1 symbol) + newline */ + size_t i = 0; + for (i = 0; i < cols; ++i) { + *width += col_width_arr[i]; + } + + /* todo: add check for non printable horizontal row separators */ + *height = 1 + (rows == 0 ? 1 : rows); /* for boundaries (that take 1 symbol) */ + for (i = 0; i < rows; ++i) { + *height += row_height_arr[i]; + } + F_FREE(col_width_arr); + F_FREE(row_height_arr); + + f_table_properties_t *properties = table->properties; + if (properties) { + *height += properties->entire_table_properties.top_margin; + *height += properties->entire_table_properties.bottom_margin; + *width += properties->entire_table_properties.left_margin; + *width += properties->entire_table_properties.right_margin; + } + + /* Take into account that border elements can be more than one byte long */ + f_table_properties_t *table_properties = properties ? properties : &g_table_properties; + size_t max_border_elem_len = max_border_elem_strlen(table_properties); + *width *= max_border_elem_len; + + return FT_SUCCESS; +} + +FT_INTERNAL +f_status table_internal_codepoints_geometry(const ft_table_t *table, size_t *height, size_t *width) +{ + return table_geometry(table, height, width); +} + +/******************************************************** + End of file "table.c" + ********************************************************/ + + +/******************************************************** + Begin of file "vector.c" + ********************************************************/ + +/* #include "vector.h" */ /* Commented by amalgamation script */ +#include +#include + +struct f_vector { + size_t m_size; + void *m_data; + size_t m_capacity; + size_t m_item_size; +}; + + +static int vector_reallocate_(f_vector_t *vector, size_t new_capacity) +{ + assert(vector); + assert(new_capacity > vector->m_capacity); + + size_t new_size = new_capacity * vector->m_item_size; + vector->m_data = F_REALLOC(vector->m_data, new_size); + if (vector->m_data == NULL) + return -1; + return 0; +} + + +FT_INTERNAL +f_vector_t *create_vector(size_t item_size, size_t capacity) +{ + f_vector_t *vector = (f_vector_t *)F_MALLOC(sizeof(f_vector_t)); + if (vector == NULL) { + return NULL; + } + + size_t init_size = MAX(item_size * capacity, 1); + vector->m_data = F_MALLOC(init_size); + if (vector->m_data == NULL) { + F_FREE(vector); + return NULL; + } + + vector->m_size = 0; + vector->m_capacity = capacity; + vector->m_item_size = item_size; + + return vector; +} + + +FT_INTERNAL +void destroy_vector(f_vector_t *vector) +{ + assert(vector); + F_FREE(vector->m_data); + F_FREE(vector); +} + + +FT_INTERNAL +size_t vector_size(const f_vector_t *vector) +{ + assert(vector); + return vector->m_size; +} + + +FT_INTERNAL +size_t vector_capacity(const f_vector_t *vector) +{ + assert(vector); + return vector->m_capacity; +} + + +FT_INTERNAL +int vector_push(f_vector_t *vector, const void *item) +{ + assert(vector); + assert(item); + + if (vector->m_size == vector->m_capacity) { + if (vector_reallocate_(vector, vector->m_capacity * 2) == -1) + return FT_GEN_ERROR; + vector->m_capacity = vector->m_capacity * 2; + } + + size_t offset = vector->m_size * vector->m_item_size; + memcpy((char *)vector->m_data + offset, item, vector->m_item_size); + + ++(vector->m_size); + + return FT_SUCCESS; +} + +FT_INTERNAL +int vector_insert(f_vector_t *vector, const void *item, size_t pos) +{ + assert(vector); + assert(item); + size_t needed_capacity = MAX(pos + 1, vector->m_size + 1); + if (vector->m_capacity < needed_capacity) { + if (vector_reallocate_(vector, needed_capacity) == -1) + return FT_GEN_ERROR; + vector->m_capacity = needed_capacity; + } + size_t offset = pos * vector->m_item_size; + if (pos >= vector->m_size) { + /* Data in the middle are not initialized */ + memcpy((char *)vector->m_data + offset, item, vector->m_item_size); + vector->m_size = pos + 1; + return FT_SUCCESS; + } else { + /* Shift following data by one position */ + memmove((char *)vector->m_data + offset + vector->m_item_size, + (char *)vector->m_data + offset, + vector->m_item_size * (vector->m_size - pos)); + memcpy((char *)vector->m_data + offset, item, vector->m_item_size); + ++(vector->m_size); + return FT_SUCCESS; + } +} + +FT_INTERNAL +f_vector_t *vector_split(f_vector_t *vector, size_t pos) +{ + size_t trailing_sz = vector->m_size > pos ? vector->m_size - pos : 0; + f_vector_t *new_vector = create_vector(vector->m_item_size, trailing_sz); + if (!new_vector) + return new_vector; + if (new_vector->m_capacity < trailing_sz) { + destroy_vector(new_vector); + return NULL; + } + + if (trailing_sz == 0) + return new_vector; + + size_t offset = vector->m_item_size * pos; + memcpy(new_vector->m_data, (char *)vector->m_data + offset, + trailing_sz * vector->m_item_size); + new_vector->m_size = trailing_sz; + vector->m_size = pos; + return new_vector; +} + +FT_INTERNAL +const void *vector_at_c(const f_vector_t *vector, size_t index) +{ + if (index >= vector->m_size) + return NULL; + + return (char *)vector->m_data + index * vector->m_item_size; +} + + +FT_INTERNAL +void *vector_at(f_vector_t *vector, size_t index) +{ + if (index >= vector->m_size) + return NULL; + + return (char *)vector->m_data + index * vector->m_item_size; +} + + +FT_INTERNAL +f_status vector_swap(f_vector_t *cur_vec, f_vector_t *mv_vec, size_t pos) +{ + assert(cur_vec); + assert(mv_vec); + assert(cur_vec != mv_vec); + assert(cur_vec->m_item_size == mv_vec->m_item_size); + + size_t cur_sz = vector_size(cur_vec); + size_t mv_sz = vector_size(mv_vec); + if (mv_sz == 0) { + return FT_SUCCESS; + } + + size_t min_targ_size = pos + mv_sz; + if (vector_capacity(cur_vec) < min_targ_size) { + if (vector_reallocate_(cur_vec, min_targ_size) == -1) + return FT_GEN_ERROR; + cur_vec->m_capacity = min_targ_size; + } + + size_t offset = pos * cur_vec->m_item_size; + void *tmp = NULL; + size_t new_mv_sz = 0; + if (cur_sz > pos) { + new_mv_sz = MIN(cur_sz - pos, mv_sz); + tmp = F_MALLOC(cur_vec->m_item_size * new_mv_sz); + if (tmp == NULL) { + return FT_MEMORY_ERROR; + } + } + + if (tmp) { + memcpy(tmp, + (char *)cur_vec->m_data + offset, + cur_vec->m_item_size * new_mv_sz); + } + + memcpy((char *)cur_vec->m_data + offset, + mv_vec->m_data, + cur_vec->m_item_size * mv_sz); + + if (tmp) { + memcpy(mv_vec->m_data, + tmp, + cur_vec->m_item_size * new_mv_sz); + } + + cur_vec->m_size = MAX(cur_vec->m_size, min_targ_size); + mv_vec->m_size = new_mv_sz; + F_FREE(tmp); + return FT_SUCCESS; +} + +FT_INTERNAL +void vector_clear(f_vector_t *vector) +{ + vector->m_size = 0; +} + +FT_INTERNAL +int vector_erase(f_vector_t *vector, size_t index) +{ + assert(vector); + + if (vector->m_size == 0 || index >= vector->m_size) + return FT_GEN_ERROR; + + memmove((char *)vector->m_data + vector->m_item_size * index, + (char *)vector->m_data + vector->m_item_size * (index + 1), + (vector->m_size - 1 - index) * vector->m_item_size); + vector->m_size--; + return FT_SUCCESS; +} + +#ifdef FT_TEST_BUILD + +f_vector_t *copy_vector(f_vector_t *v) +{ + if (v == NULL) + return NULL; + + f_vector_t *new_vector = create_vector(v->m_item_size, v->m_capacity); + if (new_vector == NULL) + return NULL; + + memcpy(new_vector->m_data, v->m_data, v->m_item_size * v->m_size); + new_vector->m_size = v->m_size ; + new_vector->m_item_size = v->m_item_size ; + return new_vector; +} + +size_t vector_index_of(const f_vector_t *vector, const void *item) +{ + assert(vector); + assert(item); + + size_t i = 0; + for (i = 0; i < vector->m_size; ++i) { + void *data_pos = (char *)vector->m_data + i * vector->m_item_size; + if (memcmp(data_pos, item, vector->m_item_size) == 0) { + return i; + } + } + return INVALID_VEC_INDEX; +} + +#endif + +/******************************************************** + End of file "vector.c" + ********************************************************/ + + +/******************************************************** + Begin of file "wcwidth.c" + ********************************************************/ + +/* + * This is an implementation of wcwidth() and wcswidth() (defined in + * IEEE Std 1002.1-2001) for Unicode. + * + * http://www.opengroup.org/onlinepubs/007904975/functions/wcwidth.html + * http://www.opengroup.org/onlinepubs/007904975/functions/wcswidth.html + * + * In fixed-width output devices, Latin characters all occupy a single + * "cell" position of equal width, whereas ideographic CJK characters + * occupy two such cells. Interoperability between terminal-line + * applications and (teletype-style) character terminals using the + * UTF-8 encoding requires agreement on which character should advance + * the cursor by how many cell positions. No established formal + * standards exist at present on which Unicode character shall occupy + * how many cell positions on character terminals. These routines are + * a first attempt of defining such behavior based on simple rules + * applied to data provided by the Unicode Consortium. + * + * For some graphical characters, the Unicode standard explicitly + * defines a character-cell width via the definition of the East Asian + * FullWidth (F), Wide (W), Half-width (H), and Narrow (Na) classes. + * In all these cases, there is no ambiguity about which width a + * terminal shall use. For characters in the East Asian Ambiguous (A) + * class, the width choice depends purely on a preference of backward + * compatibility with either historic CJK or Western practice. + * Choosing single-width for these characters is easy to justify as + * the appropriate long-term solution, as the CJK practice of + * displaying these characters as double-width comes from historic + * implementation simplicity (8-bit encoded characters were displayed + * single-width and 16-bit ones double-width, even for Greek, + * Cyrillic, etc.) and not any typographic considerations. + * + * Much less clear is the choice of width for the Not East Asian + * (Neutral) class. Existing practice does not dictate a width for any + * of these characters. It would nevertheless make sense + * typographically to allocate two character cells to characters such + * as for instance EM SPACE or VOLUME INTEGRAL, which cannot be + * represented adequately with a single-width glyph. The following + * routines at present merely assign a single-cell width to all + * neutral characters, in the interest of simplicity. This is not + * entirely satisfactory and should be reconsidered before + * establishing a formal standard in this area. At the moment, the + * decision which Not East Asian (Neutral) characters should be + * represented by double-width glyphs cannot yet be answered by + * applying a simple rule from the Unicode database content. Setting + * up a proper standard for the behavior of UTF-8 character terminals + * will require a careful analysis not only of each Unicode character, + * but also of each presentation form, something the author of these + * routines has avoided to do so far. + * + * http://www.unicode.org/unicode/reports/tr11/ + * + * Markus Kuhn -- 2007-05-26 (Unicode 5.0) + * + * Permission to use, copy, modify, and distribute this software + * for any purpose and without fee is hereby granted. The author + * disclaims all warranties with regard to this software. + * + * Latest version: http://www.cl.cam.ac.uk/~mgk25/ucs/wcwidth.c + */ + +/* #include "wcwidth.h" */ /* Commented by amalgamation script */ + +#ifdef FT_HAVE_WCHAR + + +struct interval { + int32_t first; + int32_t last; +}; + +/* auxiliary function for binary search in interval table */ +static int bisearch(int32_t ucs, const struct interval *table, int max) +{ + int min = 0; + + if (ucs < table[0].first || ucs > table[max].last) + return 0; + while (max >= min) { + int mid = (min + max) / 2; + if (ucs > table[mid].last) + min = mid + 1; + else if (ucs < table[mid].first) + max = mid - 1; + else + return 1; + } + + return 0; +} + + +/* The following two functions define the column width of an ISO 10646 + * character as follows: + * + * - The null character (U+0000) has a column width of 0. + * + * - Other C0/C1 control characters and DEL will lead to a return + * value of -1. + * + * - Non-spacing and enclosing combining characters (general + * category code Mn or Me in the Unicode database) have a + * column width of 0. + * + * - SOFT HYPHEN (U+00AD) has a column width of 1. + * + * - Other format characters (general category code Cf in the Unicode + * database) and ZERO WIDTH SPACE (U+200B) have a column width of 0. + * + * - Hangul Jamo medial vowels and final consonants (U+1160-U+11FF) + * have a column width of 0. + * + * - Spacing characters in the East Asian Wide (W) or East Asian + * Full-width (F) category as defined in Unicode Technical + * Report #11 have a column width of 2. + * + * - All remaining characters (including all printable + * ISO 8859-1 and WGL4 characters, Unicode control characters, + * etc.) have a column width of 1. + * + * This implementation assumes that wchar_t characters are encoded + * in ISO 10646. + */ + +static int mk_wcwidth(wchar_t wcs) +{ + /* sorted list of non-overlapping intervals of non-spacing characters */ + /* generated by "uniset +cat=Me +cat=Mn +cat=Cf -00AD +1160-11FF +200B c" */ + static const struct interval combining[] = { + { 0x0300, 0x036F }, { 0x0483, 0x0486 }, { 0x0488, 0x0489 }, + { 0x0591, 0x05BD }, { 0x05BF, 0x05BF }, { 0x05C1, 0x05C2 }, + { 0x05C4, 0x05C5 }, { 0x05C7, 0x05C7 }, { 0x0600, 0x0603 }, + { 0x0610, 0x0615 }, { 0x064B, 0x065E }, { 0x0670, 0x0670 }, + { 0x06D6, 0x06E4 }, { 0x06E7, 0x06E8 }, { 0x06EA, 0x06ED }, + { 0x070F, 0x070F }, { 0x0711, 0x0711 }, { 0x0730, 0x074A }, + { 0x07A6, 0x07B0 }, { 0x07EB, 0x07F3 }, { 0x0901, 0x0902 }, + { 0x093C, 0x093C }, { 0x0941, 0x0948 }, { 0x094D, 0x094D }, + { 0x0951, 0x0954 }, { 0x0962, 0x0963 }, { 0x0981, 0x0981 }, + { 0x09BC, 0x09BC }, { 0x09C1, 0x09C4 }, { 0x09CD, 0x09CD }, + { 0x09E2, 0x09E3 }, { 0x0A01, 0x0A02 }, { 0x0A3C, 0x0A3C }, + { 0x0A41, 0x0A42 }, { 0x0A47, 0x0A48 }, { 0x0A4B, 0x0A4D }, + { 0x0A70, 0x0A71 }, { 0x0A81, 0x0A82 }, { 0x0ABC, 0x0ABC }, + { 0x0AC1, 0x0AC5 }, { 0x0AC7, 0x0AC8 }, { 0x0ACD, 0x0ACD }, + { 0x0AE2, 0x0AE3 }, { 0x0B01, 0x0B01 }, { 0x0B3C, 0x0B3C }, + { 0x0B3F, 0x0B3F }, { 0x0B41, 0x0B43 }, { 0x0B4D, 0x0B4D }, + { 0x0B56, 0x0B56 }, { 0x0B82, 0x0B82 }, { 0x0BC0, 0x0BC0 }, + { 0x0BCD, 0x0BCD }, { 0x0C3E, 0x0C40 }, { 0x0C46, 0x0C48 }, + { 0x0C4A, 0x0C4D }, { 0x0C55, 0x0C56 }, { 0x0CBC, 0x0CBC }, + { 0x0CBF, 0x0CBF }, { 0x0CC6, 0x0CC6 }, { 0x0CCC, 0x0CCD }, + { 0x0CE2, 0x0CE3 }, { 0x0D41, 0x0D43 }, { 0x0D4D, 0x0D4D }, + { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, + { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, + { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EB9 }, { 0x0EBB, 0x0EBC }, + { 0x0EC8, 0x0ECD }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, + { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, + { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F90, 0x0F97 }, + { 0x0F99, 0x0FBC }, { 0x0FC6, 0x0FC6 }, { 0x102D, 0x1030 }, + { 0x1032, 0x1032 }, { 0x1036, 0x1037 }, { 0x1039, 0x1039 }, + { 0x1058, 0x1059 }, { 0x1160, 0x11FF }, { 0x135F, 0x135F }, + { 0x1712, 0x1714 }, { 0x1732, 0x1734 }, { 0x1752, 0x1753 }, + { 0x1772, 0x1773 }, { 0x17B4, 0x17B5 }, { 0x17B7, 0x17BD }, + { 0x17C6, 0x17C6 }, { 0x17C9, 0x17D3 }, { 0x17DD, 0x17DD }, + { 0x180B, 0x180D }, { 0x18A9, 0x18A9 }, { 0x1920, 0x1922 }, + { 0x1927, 0x1928 }, { 0x1932, 0x1932 }, { 0x1939, 0x193B }, + { 0x1A17, 0x1A18 }, { 0x1B00, 0x1B03 }, { 0x1B34, 0x1B34 }, + { 0x1B36, 0x1B3A }, { 0x1B3C, 0x1B3C }, { 0x1B42, 0x1B42 }, + { 0x1B6B, 0x1B73 }, { 0x1DC0, 0x1DCA }, { 0x1DFE, 0x1DFF }, + { 0x200B, 0x200F }, { 0x202A, 0x202E }, { 0x2060, 0x2063 }, + { 0x206A, 0x206F }, { 0x20D0, 0x20EF }, { 0x302A, 0x302F }, + { 0x3099, 0x309A }, { 0xA806, 0xA806 }, { 0xA80B, 0xA80B }, + { 0xA825, 0xA826 }, { 0xFB1E, 0xFB1E }, { 0xFE00, 0xFE0F }, + { 0xFE20, 0xFE23 }, { 0xFEFF, 0xFEFF }, { 0xFFF9, 0xFFFB }, + { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, + { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x1D167, 0x1D169 }, + { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, + { 0x1D242, 0x1D244 }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, + { 0xE0100, 0xE01EF } + }; + + /* We convert wchar_t to int32_t to avoid compiler warnings + * about implicit integer conversions + * https://github.com/seleznevae/libfort/issues/20 + * + * note: didn't test if we can do it + */ + int32_t ucs = (int32_t)wcs; + + /* test for 8-bit control characters */ + if (ucs == 0) + return 0; + if (ucs < 32 || (ucs >= 0x7f && ucs < 0xa0)) + return -1; + + /* binary search in table of non-spacing characters */ + if (bisearch(ucs, combining, + sizeof(combining) / sizeof(struct interval) - 1)) + return 0; + + /* if we arrive here, ucs is not a combining or C0/C1 control character */ + + return 1 + + (ucs >= 0x1100 && + (ucs <= 0x115f || /* Hangul Jamo init. consonants */ + ucs == 0x2329 || ucs == 0x232a || + (ucs >= 0x2e80 && ucs <= 0xa4cf && + ucs != 0x303f) || /* CJK ... Yi */ + (ucs >= 0xac00 && ucs <= 0xd7a3) || /* Hangul Syllables */ + (ucs >= 0xf900 && ucs <= 0xfaff) || /* CJK Compatibility Ideographs */ + (ucs >= 0xfe10 && ucs <= 0xfe19) || /* Vertical forms */ + (ucs >= 0xfe30 && ucs <= 0xfe6f) || /* CJK Compatibility Forms */ + (ucs >= 0xff00 && ucs <= 0xff60) || /* Fullwidth Forms */ + (ucs >= 0xffe0 && ucs <= 0xffe6) || + (ucs >= 0x20000 && ucs <= 0x2fffd) || + (ucs >= 0x30000 && ucs <= 0x3fffd))); +} + + +FT_INTERNAL +int mk_wcswidth(const wchar_t *pwcs, size_t n) +{ + int width = 0; + + for (; *pwcs && n-- > 0; pwcs++) { + int w; + if ((w = mk_wcwidth(*pwcs)) < 0) + return -1; + else + width += w; + } + + return width; +} +#endif /* FT_HAVE_WCHAR */ + +/******************************************************** + End of file "wcwidth.c" + ********************************************************/ + diff --git a/src/libged/stat/fort.h b/src/libged/stat/fort.h new file mode 100644 index 00000000000..5cc77f93fc8 --- /dev/null +++ b/src/libged/stat/fort.h @@ -0,0 +1,1046 @@ +/* +libfort + +MIT License + +Copyright (c) 2017 - 2020 Seleznev Anton + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +*/ + +/** + * @file fort.h + * @brief Main header file describing libfort API. + * + * This file contains declarations of all libfort functions and macro + * definitions. + */ + +#ifndef LIBFORT_H +#define LIBFORT_H + +#include +#include +#include +#include + +/***************************************************************************** + * VERSION + *****************************************************************************/ + +#define LIBFORT_MAJOR_VERSION 0 +#define LIBFORT_MINOR_VERSION 4 +#define LIBFORT_REVISION 2 +#define LIBFORT_VERSION_STR "0.4.2" + + +/***************************************************************************** + * Configuration + *****************************************************************************/ + +/** + * libfort configuration macros + * (to disable wchar_t/UTF-8 support this macros should be defined) + */ +/** #define FT_CONGIG_DISABLE_WCHAR */ +/** #define FT_CONGIG_DISABLE_UTF8 */ + +#if !defined(FT_CONGIG_DISABLE_WCHAR) +#define FT_HAVE_WCHAR +#endif + +#if !defined(FT_CONGIG_DISABLE_UTF8) +#define FT_HAVE_UTF8 +#endif + + +/***************************************************************************** + * RETURN CODES + *****************************************************************************/ + +/** + * Operation successfully ended. + */ +#define FT_SUCCESS 0 + +/** + * Memory allocation failed. + */ +#define FT_MEMORY_ERROR -1 + +/** + * Invalid argument. + */ +#define FT_EINVAL -2 + +/** + * Libfort internal logic error. + * + * Usually such errors mean that something is wrong in + * libfort internal logic and in most of cases cause of + * these errors is a library bug. + */ +#define FT_INTERN_ERROR -3 + +/** + * General error. + * + * Different errors that do not belong to the group of errors + * mentioned above. + */ +#define FT_GEN_ERROR -4 + + +#define FT_IS_SUCCESS(arg) ((arg) >= 0) +#define FT_IS_ERROR(arg) ((arg) < 0) + + + + +/** + * @cond HELPER_MACROS + */ + +/***************************************************************************** + * Determine compiler + *****************************************************************************/ + +#if defined(__clang__) +#define FT_CLANG_COMPILER +#elif defined(__GNUC__) +#define FT_GCC_COMPILER +#elif defined(_MSC_VER) +#define FT_MICROSOFT_COMPILER +#else +#define FT_UNDEFINED_COMPILER +#endif + + +/***************************************************************************** + * Declare inline + *****************************************************************************/ + +#if defined(__cplusplus) +#define FT_INLINE inline +#else +#define FT_INLINE __inline +#endif /* if defined(__cplusplus) */ + + +/***************************************************************************** + * C++ needs to know that types and declarations are C, not C++. + *****************************************************************************/ + +#ifdef __cplusplus +# define FT_BEGIN_DECLS extern "C" { +# define FT_END_DECLS } +#else +# define FT_BEGIN_DECLS +# define FT_END_DECLS +#endif + + +/***************************************************************************** + * Helper macros + *****************************************************************************/ + +#define FT_STR_2_CAT_(arg1, arg2) \ + arg1##arg2 +#define FT_STR_2_CAT(arg1, arg2) \ + FT_STR_2_CAT_(arg1, arg2) + +/** + * @interanl + */ +static FT_INLINE int ft_check_if_string_helper(const char *str) +{ + (void)str; + return 0; +} + +/** + * @interanl + */ +static FT_INLINE int ft_check_if_wstring_helper(const wchar_t *str) +{ + (void)str; + return 0; +} + +#define FT_NARGS_IMPL_(x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,x12,x13,x14,x15,N,...) N +#define FT_EXPAND_(x) x +#define FT_PP_NARG_(...) \ + FT_EXPAND_(FT_NARGS_IMPL_(__VA_ARGS__,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)) + +#define FT_CHECK_IF_STR_32(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_31(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_31(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_30(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_30(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_29(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_29(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_28(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_28(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_27(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_27(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_26(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_26(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_25(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_25(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_24(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_24(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_23(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_23(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_22(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_22(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_21(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_21(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_20(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_20(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_19(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_19(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_18(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_18(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_17(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_17(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_16(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_16(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_15(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_15(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_14(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_14(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_13(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_13(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_12(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_12(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_11(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_11(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_10(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_10(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_9(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_9(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_8(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_8(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_7(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_7(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_6(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_6(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_5(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_5(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_4(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_4(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_3(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_3(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_2(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_2(checker,arg,...) (checker(arg),FT_EXPAND_(FT_CHECK_IF_STR_1(checker,__VA_ARGS__))) +#define FT_CHECK_IF_STR_1(checker,arg) (checker(arg)) + +#define FT_CHECK_IF_ARGS_ARE_STRINGS__(checker,func, ...) \ + FT_EXPAND_(func(checker,__VA_ARGS__)) +#define FT_CHECK_IF_ARGS_ARE_STRINGS_(checker,basis, n, ...) \ + FT_CHECK_IF_ARGS_ARE_STRINGS__(checker,FT_STR_2_CAT_(basis, n), __VA_ARGS__) +#define FT_CHECK_IF_ARGS_ARE_STRINGS(...) \ + FT_CHECK_IF_ARGS_ARE_STRINGS_(ft_check_if_string_helper,FT_CHECK_IF_STR_,FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__) + +#ifdef FT_HAVE_WCHAR +#define CHECK_IF_ARGS_ARE_WSTRINGS(...) \ + FT_CHECK_IF_ARGS_ARE_STRINGS_(ft_check_if_wstring_helper,FT_CHECK_IF_STR_,FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__) +#endif + +/** + * @endcond + */ + + +/***************************************************************************** + * Attribute format for argument checking + *****************************************************************************/ + +#if defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) +#define FT_PRINTF_ATTRIBUTE_FORMAT(string_index, first_to_check) \ + __attribute__ ((format (printf, string_index, first_to_check))) +#else +#define FT_PRINTF_ATTRIBUTE_FORMAT(string_index, first_to_check) +#endif /* defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) */ + + +/***************************************************************************** + * libfort API + *****************************************************************************/ + +FT_BEGIN_DECLS + +/** + * The main structure of libfort containing information about formatted table. + */ +struct ft_table; + +/** + * The main structure of libfort containing information about formatted table. + * + * ft_table_t objects should be created by a call to ft_create_table and + * destroyed with ft_destroy_table. + */ +typedef struct ft_table ft_table_t; + +/** + * Create formatted table. + * + * @return + * The pointer to the new allocated ft_table_t, on success. NULL on error. + */ +ft_table_t *ft_create_table(void); + +/** + * Destroy formatted table. + * + * Destroy formatted table and free all resources allocated during table creation + * and work with it. + * + * @param table + * Pointer to formatted table previousley created with ft_create_table. If + * table is a null pointer, the function does nothing. + */ +void ft_destroy_table(ft_table_t *table); + +/** + * Copy formatted table. + * + * @param table + * Pointer to formatted table previousley created with ft_create_table. If + * table is a null pointer, the function returns null. + * @return + * The pointer to the new allocated ft_table_t, on success. NULL on error. + */ +ft_table_t *ft_copy_table(ft_table_t *table); + +/** + * Move current position to the first cell of the next line(row). + * + * @param table + * Pointer to formatted table. + * @return + * - 0: Success; data were written + * - (<0): In case of error. + * @note + * This function can fail only in case FT_STRATEGY_INSERT adding strategy + * was set for the table. + */ +int ft_ln(ft_table_t *table); + +/** + * Get row number of the current cell. + * + * @param table + * Pointer to formatted table. + * @return + * Row number of the current cell. + */ +size_t ft_cur_row(const ft_table_t *table); + +/** + * Get column number of the current cell. + * + * @param table + * Pointer to formatted table. + * @return + * Column number of the current cell. + */ +size_t ft_cur_col(const ft_table_t *table); + +/** + * Set current cell position. + * + * Current cell - cell that will be edited with all modifiing functions + * (ft_printf, ft_write ...). + * + * @param table + * Pointer to formatted table. + * @param row + * New row number for the current cell. + * @param col + * New row number for the current cell. + */ +void ft_set_cur_cell(ft_table_t *table, size_t row, size_t col); + +/** + * Check if table is empty. + * + * @param table + * Pointer to the table. + * @return + * 1 - table is empty + * 0 - some data has been inserted + */ +int ft_is_empty(const ft_table_t *table); + +/** + * Get number of rows in the table. + * + * @param table + * Pointer to formatted table. + * @return + * Number of rows in the table. + */ +size_t ft_row_count(const ft_table_t *table); + +/** + * Erase range of cells. + * + * Range of cells is determined by 2 points (top-left and bottom-right) (both + * ends are included). + * + * @param table + * Pointer to formatted table. + * @param top_left_row + * Row number of the top left cell in the range. + * @param top_left_col + * Column number of the top left cell in the range. + * @param bottom_right_row + * Row number of the bottom right cell in the range. + * @param bottom_right_col + * Column number of the bottom right cell in the range. + * @return + * - 0 - Operation was successfully implemented + * - (<0): In case of error + */ +int ft_erase_range(ft_table_t *table, + size_t top_left_row, size_t top_left_col, + size_t bottom_right_row, size_t bottom_right_col); + +#if defined(FT_CLANG_COMPILER) || defined(FT_GCC_COMPILER) + +/** + * Write data formatted acording to the format string to a variety of table + * cells. + * + * @param table + * Pointer to formatted table. + * @param fmt + * Pointer to a null-terminated multibyte string specifying how to interpret + * the data. The format string consists of ordinary characters (except % and |), + * which are copied unchanged into the output stream, and conversion + * specifications. Conversion specifications are the same as for standard + * printf function. Character '|' (wich can be changed with + * {@link ft_set_default_printf_field_separator}) in the format string is treated as + * a cell separator. + * @param ... + * Arguments specifying data to print. Similarly to standard printf-like + * functions if any argument after default conversions is not the type + * expected by the corresponding conversion specifier, or if there are fewer + * arguments than required by format, the behavior is undefined. If there are + * more arguments than required by format, the extraneous arguments are + * evaluated and ignored. + * @return + * - Number of printed cells + * - (<0): In case of error + */ +int ft_printf(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); + +/** + * Write data formatted acording to the format string to a variety of table + * cells and move current position to the first cell of the next line(row). + * + * @param table + * Pointer to formatted table. + * @param fmt + * Pointer to a null-terminated multibyte string specifying how to interpret + * the data. The format string consists of ordinary characters (except % and |), + * which are copied unchanged into the output stream, and conversion + * specifications. Conversion specifications are the same as for standard + * printf function. Character '|' (wich can be changed with + * {@link ft_set_default_printf_field_separator}) in the format string is treated as + * a cell separator. + * @param ... + * Arguments specifying data to print. Similarly to standard printf-like + * functions if any argument after default conversions is not the type + * expected by the corresponding conversion specifier, or if there are fewer + * arguments than required by format, the behavior is undefined. If there are + * more arguments than required by format, the extraneous arguments are + * evaluated and ignored. + * @return + * - Number of printed cells. + * - (<0): In case of error. + */ +int ft_printf_ln(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); + +#else + +/** + * @cond IGNORE_DOC + */ + +int ft_printf_impl(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); +int ft_printf_ln_impl(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); + +#define ft_printf(table, ...) \ + (( 0 ? fprintf(stderr, __VA_ARGS__) : 1), ft_printf_impl(table, __VA_ARGS__)) +#define ft_printf_ln(table, ...) \ + (( 0 ? fprintf(stderr, __VA_ARGS__) : 1), ft_printf_ln_impl(table, __VA_ARGS__)) + +/** + * @endcond + */ +#endif + +/** + * Set field separator for {@link ft_printf}, {@link ft_printf_ln} + * (default separator is '|'). + * + * @param separator + * New separator. + */ +void ft_set_default_printf_field_separator(char separator); + + +/** + * Write strings to the table. + * + * Write specified strings to the same number of consecutive cells in the + * current row. + * + * @param table + * Pointer to formatted table. + * @param ... + * Strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +#define ft_write(table, ...)\ + (0 ? FT_CHECK_IF_ARGS_ARE_STRINGS(__VA_ARGS__) : ft_nwrite(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) + +/** + * Write strings to the table and go to the next line. + * + * Write specified strings to the same number of consecutive cells in the + * current row and move current position to the first cell of the next + * line(row). + * + * @param table + * Pointer to formatted table. + * @param ... + * Strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +#define ft_write_ln(table, ...)\ + (0 ? FT_CHECK_IF_ARGS_ARE_STRINGS(__VA_ARGS__) : ft_nwrite_ln(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) + +/** + * Write specified number of strings to the table. + * + * Write specified number of strings to the same number of consecutive cells in + * the current row. + * + * @note In most cases it is more preferable to use MACRO @ref ft_write instead + * of @ref ft_nwrite, which is more safe (@ref ft_write automatically counts the + * number of string arguments and at compile check that all passed arguments are + * strings). + * + * @param table + * Pointer to formatted table. + * @param count + * Number of strings to write. + * @param cell_content + * First string to write. + * @param ... + * Other strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_nwrite(ft_table_t *table, size_t count, const char *cell_content, ...); + +/** + * Write specified number of strings to the table and go to the next line. + * + * Write specified number of strings to the same number of consecutive cells + * in the current row and move current position to the first cell of the next + * line(row). + * + * @note In most cases it is more preferable to use MACRO @ref ft_write instead + * of @ref ft_nwrite, which is more safe (@ref ft_write automatically counts the + * number of string arguments and at compile check that all passed arguments are + * strings). + * + * @param table + * Pointer to formatted table. + * @param count + * Number of strings to write. + * @param cell_content + * First string to write. + * @param ... + * Other strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_nwrite_ln(ft_table_t *table, size_t count, const char *cell_content, ...); + + + +/** + * Write strings from the array to the table. + * + * Write specified number of strings from the array to the same number of + * consecutive cells in the current row. + * + * @param table + * Pointer to formatted table. + * @param cols + * Number of elements in row_cells. + * @param row_cells + * Array of strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_row_write(ft_table_t *table, size_t cols, const char *row_cells[]); + +/** + * Write strings from the array to the table and go to the next line. + * + * Write specified number of strings from the array to the same number of + * consecutive cells in the current row and move current position to the first + * cell of the next line(row). + * + * @param table + * Pointer to formatted table. + * @param cols + * Number of elements in row_cells. + * @param row_cells + * Array of strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_row_write_ln(ft_table_t *table, size_t cols, const char *row_cells[]); + + +/** + * Write strings from the 2D array to the table. + * + * Write specified number of strings from the 2D array to the formatted table. + * + * @param table + * Pointer to formatted table. + * @param rows + * Number of rows in the 2D array. + * @param cols + * Number of columns in the 2D array. + * @param table_cells + * 2D array of strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_table_write(ft_table_t *table, size_t rows, size_t cols, const char *table_cells[]); + +/** + * Write strings from the 2D array to the table and go to the next line. + * + * Write specified number of strings from the 2D array to the formatted table + * and move current position to the first cell of the next line(row). + * + * @param table + * Pointer to formatted table. + * @param rows + * Number of rows in the 2D array. + * @param cols + * Number of columns in the 2D array. + * @param table_cells + * 2D array of strings to write. + * @return + * - 0: Success; data were written + * - (<0): In case of error + */ +int ft_table_write_ln(ft_table_t *table, size_t rows, size_t cols, const char *table_cells[]); + + +/** + * Add separator after the current row. + * + * @param table + * Formatted table. + * @return + * - 0: Success; separator was added. + * - (<0): In case of error + */ +int ft_add_separator(ft_table_t *table); + + +/** + * Convert table to string representation. + * + * ft_table_t has ownership of the returned pointer. So there is no need to + * free it. To take ownership user should explicitly copy the returned + * string with strdup or similar functions. + * + * Returned pointer may be later invalidated by: + * - Calling ft_destroy_table; + * - Other invocations of ft_to_string. + * + * @param table + * Formatted table. + * @return + * - The pointer to the string representation of formatted table, on success. + * - NULL on error. + */ +const char *ft_to_string(const ft_table_t *table); + + + + + + + +/** + * Structure describing border appearance. + */ +struct ft_border_chars { + const char *top_border_ch; + const char *separator_ch; + const char *bottom_border_ch; + const char *side_border_ch; + const char *out_intersect_ch; + const char *in_intersect_ch; +}; + +/** + * Structure describing border style. + */ +struct ft_border_style { + struct ft_border_chars border_chs; + struct ft_border_chars header_border_chs; + const char *hor_separator_char; +}; + +/** + * @defgroup BasicStyles + * @name Built-in table border styles. + * @note Built-in border styles (FT_BASIC_STYLE, FT_BASIC2_STYLE ...) can be + * used as arguments for @ref ft_set_border_style and + * @ref ft_set_default_border_style, but their fields shouldn't be accessed + * directly because implementation doesn't guarantee that these objects are + * properly initialized. + * @{ + */ +extern const struct ft_border_style *const FT_BASIC_STYLE; +extern const struct ft_border_style *const FT_BASIC2_STYLE; +extern const struct ft_border_style *const FT_SIMPLE_STYLE; +extern const struct ft_border_style *const FT_PLAIN_STYLE; +extern const struct ft_border_style *const FT_DOT_STYLE; +extern const struct ft_border_style *const FT_EMPTY_STYLE; +extern const struct ft_border_style *const FT_EMPTY2_STYLE; +extern const struct ft_border_style *const FT_SOLID_STYLE; +extern const struct ft_border_style *const FT_SOLID_ROUND_STYLE; +extern const struct ft_border_style *const FT_NICE_STYLE; +extern const struct ft_border_style *const FT_DOUBLE_STYLE; +extern const struct ft_border_style *const FT_DOUBLE2_STYLE; +extern const struct ft_border_style *const FT_BOLD_STYLE; +extern const struct ft_border_style *const FT_BOLD2_STYLE; +extern const struct ft_border_style *const FT_FRAME_STYLE; +/** @} */ + + + +/** + * Set default border style for all new formatted tables. + * + * @param style + * Pointer to border style. + * @return + * - 0: Success; default border style was changed. + * - (<0): In case of error + */ +int ft_set_default_border_style(const struct ft_border_style *style); + +/** + * Set border style for the table. + * + * @param table + * A pointer to the ft_table_t structure. + * @param style + * Pointer to border style. + * @return + * - 0: Success; table border style was changed. + * - (<0): In case of error + */ +int ft_set_border_style(ft_table_t *table, const struct ft_border_style *style); + + + +/** + * @name Special macros to define cell position (row and column). + * @{ + */ +#define FT_ANY_COLUMN (UINT_MAX) /**< Any column (can be used to refer to all cells in a row)*/ +#define FT_CUR_COLUMN (UINT_MAX - 1) /**< Current column */ +#define FT_ANY_ROW (UINT_MAX) /**< Any row (can be used to refer to all cells in a column)*/ +#define FT_CUR_ROW (UINT_MAX - 1) /**< Current row */ +/** @} */ + +#define FT_MAX_ROW_INDEX (UINT_MAX - 2) +#define FT_MAX_COL_INDEX (UINT_MAX - 2) + + +/** + * @name Cell properties identifiers. + * @{ + */ +#define FT_CPROP_MIN_WIDTH (0x01U << 0) /**< Minimum width */ +#define FT_CPROP_TEXT_ALIGN (0x01U << 1) /**< Text alignment */ +#define FT_CPROP_TOP_PADDING (0x01U << 2) /**< Top padding for cell content */ +#define FT_CPROP_BOTTOM_PADDING (0x01U << 3) /**< Bottom padding for cell content */ +#define FT_CPROP_LEFT_PADDING (0x01U << 4) /**< Left padding for cell content */ +#define FT_CPROP_RIGHT_PADDING (0x01U << 5) /**< Right padding for cell content */ +#define FT_CPROP_EMPTY_STR_HEIGHT (0x01U << 6) /**< Height of empty cell */ +#define FT_CPROP_ROW_TYPE (0x01U << 7) /**< Row type */ +#define FT_CPROP_CONT_FG_COLOR (0x01U << 8) /**< Cell content foreground text color */ +#define FT_CPROP_CELL_BG_COLOR (0x01U << 9) /**< Cell background color */ +#define FT_CPROP_CONT_BG_COLOR (0x01U << 10) /**< Cell content background color */ +#define FT_CPROP_CELL_TEXT_STYLE (0x01U << 11) /**< Cell text style */ +#define FT_CPROP_CONT_TEXT_STYLE (0x01U << 12) /**< Cell content text style */ +/** @} */ + + +/** + * Colors. + */ +enum ft_color { + FT_COLOR_DEFAULT = 0, /**< Default color */ + FT_COLOR_BLACK = 1, /**< Black color*/ + FT_COLOR_RED = 2, /**< Red color */ + FT_COLOR_GREEN = 3, /**< Green color */ + FT_COLOR_YELLOW = 4, /**< Yellow color */ + FT_COLOR_BLUE = 5, /**< Blue color */ + FT_COLOR_MAGENTA = 6, /**< Magenta color */ + FT_COLOR_CYAN = 7, /**< Cyan color */ + FT_COLOR_LIGHT_GRAY = 8, /**< Light gray color */ + FT_COLOR_DARK_GRAY = 9, /**< Dark gray color */ + FT_COLOR_LIGHT_RED = 10, /**< Light red color */ + FT_COLOR_LIGHT_GREEN = 11, /**< Light green color */ + FT_COLOR_LIGHT_YELLOW = 12, /**< Light yellow color */ + FT_COLOR_LIGHT_BLUE = 13, /**< Light blue color */ + FT_COLOR_LIGHT_MAGENTA = 15, /**< Light magenta color */ + FT_COLOR_LIGHT_CYAN = 16, /**< Light cyan color */ + FT_COLOR_LIGHT_WHYTE = 17 /**< Light whyte color */ +}; + +/** + * Text styles. + */ +enum ft_text_style { + FT_TSTYLE_DEFAULT = (1U << 0), /**< Default style */ + FT_TSTYLE_BOLD = (1U << 1), /**< Bold */ + FT_TSTYLE_DIM = (1U << 2), /**< Dim */ + FT_TSTYLE_ITALIC = (1U << 3), /**< Italic */ + FT_TSTYLE_UNDERLINED = (1U << 4), /**< Underlined */ + FT_TSTYLE_BLINK = (1U << 5), /**< Blink */ + FT_TSTYLE_INVERTED = (1U << 6), /**< Reverse (invert the foreground and background colors) */ + FT_TSTYLE_HIDDEN = (1U << 7) /**< Hidden (useful for passwords) */ +}; + + +/** + * Alignment of cell content. + */ +enum ft_text_alignment { + FT_ALIGNED_LEFT = 0, /**< Align left */ + FT_ALIGNED_CENTER, /**< Align center */ + FT_ALIGNED_RIGHT /**< Align right */ +}; + +/** + * Type of table row. Determines appearance of row. + */ +enum ft_row_type { + FT_ROW_COMMON = 0, /**< Common row */ + FT_ROW_HEADER /**< Header row */ +}; + +/** + * Set default cell property for all new formatted tables. + * + * @param property + * Cell property identifier. + * @param value + * Cell property value. + * @return + * - 0: Success; default cell property was changed. + * - (<0): In case of error + */ +int ft_set_default_cell_prop(uint32_t property, int value); + +/** + * Set property for the specified cell of the table. + * + * @param table + * A pointer to the ft_table_t structure. + * @param row + * Cell row. + * @param col + * Cell column. + * @param property + * Cell property identifier. + * @param value + * Cell property value. + * @return + * - 0: Success; cell property was changed. + * - (<0): In case of error + */ +int ft_set_cell_prop(ft_table_t *table, size_t row, size_t col, uint32_t property, int value); + + +/** + * @name Table properties identifiers. + * @{ + */ +#define FT_TPROP_LEFT_MARGIN (0x01U << 0) +#define FT_TPROP_TOP_MARGIN (0x01U << 1) +#define FT_TPROP_RIGHT_MARGIN (0x01U << 2) +#define FT_TPROP_BOTTOM_MARGIN (0x01U << 3) +#define FT_TPROP_ADDING_STRATEGY (0x01U << 4) +/** @} */ + +/** + * Adding strategy. + * + * Determines what happens with old content if current cell is not empty after + * adding data to it. Default strategy is FT_STRATEGY_REPLACE. + */ +enum ft_adding_strategy { + FT_STRATEGY_REPLACE = 0, /**< Replace old content. */ + FT_STRATEGY_INSERT /**< Insert new conten. Old content is shifted. */ +}; + + +/** + * Set default table property. + * + * @param property + * Table property identifier. + * @param value + * Table property value. + * @return + * - 0: Success; default table property was changed. + * - (<0): In case of error + */ +int ft_set_default_tbl_prop(uint32_t property, int value); + +/** + * Set table property. + * + * @param table + * A pointer to the ft_table_t structure. + * @param property + * Table property identifier. + * @param value + * Table property value. + * @return + * - 0: Success; default table property was changed. + * - (<0): In case of error + */ +int ft_set_tbl_prop(ft_table_t *table, uint32_t property, int value); + + +/** + * Set column span for the specified cell of the table. + * + * @param table + * A pointer to the ft_table_t structure. + * @param row + * Cell row. + * @param col + * Cell column. + * @param hor_span + * Column span. + * @return + * - 0: Success; cell span was changed. + * - (<0): In case of error + */ +int ft_set_cell_span(ft_table_t *table, size_t row, size_t col, size_t hor_span); + + +/** + * Set functions for memory allocation and deallocation to be used instead of + * standard ones. + * + * @param f_malloc + * Pointer to a function for memory allocation that should be used instead of + * malloc. + * @param f_free + * Pointer to a function for memory deallocation that should be used instead + * of free. + * @note + * To return memory allocation/deallocation functions to their standard values + * set f_malloc and f_free to NULL. + */ +void ft_set_memory_funcs(void *(*f_malloc)(size_t size), void (*f_free)(void *ptr)); + + +/** + * Return string describing the `error_code`. + * + * @param error_code + * Error code returned by the library. + * @return + * String describing the error. + */ +const char *ft_strerror(int error_code); + + + +#ifdef FT_HAVE_WCHAR + + +int ft_wprintf(ft_table_t *table, const wchar_t *fmt, ...); +int ft_wprintf_ln(ft_table_t *table, const wchar_t *fmt, ...); + + +#define ft_wwrite(table, ...)\ + (0 ? CHECK_IF_ARGS_ARE_WSTRINGS(__VA_ARGS__) : ft_nwwrite(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) +#define ft_wwrite_ln(table, ...)\ + (0 ? CHECK_IF_ARGS_ARE_WSTRINGS(__VA_ARGS__) : ft_nwwrite_ln(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) +int ft_nwwrite(ft_table_t *table, size_t n, const wchar_t *cell_content, ...); +int ft_nwwrite_ln(ft_table_t *table, size_t n, const wchar_t *cell_content, ...); + +int ft_row_wwrite(ft_table_t *table, size_t cols, const wchar_t *row_cells[]); +int ft_row_wwrite_ln(ft_table_t *table, size_t cols, const wchar_t *row_cells[]); + +int ft_table_wwrite(ft_table_t *table, size_t rows, size_t cols, const wchar_t *table_cells[]); +int ft_table_wwrite_ln(ft_table_t *table, size_t rows, size_t cols, const wchar_t *table_cells[]); + +const wchar_t *ft_to_wstring(const ft_table_t *table); +#endif + + + +#ifdef FT_HAVE_UTF8 +#define ft_u8write(table, ...)\ + (ft_u8nwrite(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) +#define ft_u8write_ln(table, ...)\ + (ft_u8nwrite_ln(table, FT_PP_NARG_(__VA_ARGS__), __VA_ARGS__)) +int ft_u8nwrite(ft_table_t *table, size_t n, const void *cell_content, ...); +int ft_u8nwrite_ln(ft_table_t *table, size_t n, const void *cell_content, ...); + +int ft_u8printf(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); +int ft_u8printf_ln(ft_table_t *table, const char *fmt, ...) FT_PRINTF_ATTRIBUTE_FORMAT(2, 3); + +const void *ft_to_u8string(const ft_table_t *table); + +/** + * Set custom function to compute visible width of UTF-8 string. + * + * libfort internally has a very simple logic to compute visible width of UTF-8 + * strings. It considers that each codepoint will occupy one position on the + * terminal in case of monowidth font (some east asians wide and fullwidth + * characters (see http://www.unicode.org/reports/tr11/tr11-33.html) will occupy + * 2 positions). This logic is very simple and covers wide range of cases. But + * obviously there a lot of cases when it is not sufficient. In such cases user + * should use some external libraries and provide an appropriate function to + * libfort. + * + * @param u8strwid + * User provided function to evaluate width of UTF-8 string ( beg - start of + * UTF-8 string, end - end of UTF-8 string (not included), width - pointer to + * the result). If function succeed it should return 0, otherwise some non- + * zero value. If function returns nonzero value libfort fallbacks to default + * internal algorithm. + */ +void ft_set_u8strwid_func(int (*u8strwid)(const void *beg, const void *end, size_t *width)); + +#endif /* FT_HAVE_UTF8 */ + + +FT_END_DECLS + +#endif /* LIBFORT_H */ diff --git a/src/libged/stat/stat.cpp b/src/libged/stat/stat.cpp new file mode 100644 index 00000000000..0c9e5f6cf84 --- /dev/null +++ b/src/libged/stat/stat.cpp @@ -0,0 +1,645 @@ +/* S T A T . C P P + * BRL-CAD + * + * Copyright (c) 2020-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @file stat.c + * + * Command for reporting information about geometry database + * objects. + * + */ + +#include "common.h" + +#include +#include + +extern "C" { +#include "fort.h" +#include "../alphanum.h" +} + +#include "bu/opt.h" +#include "bu/ptbl.h" +#include "bu/sort.h" +#include "bu/units.h" +#include "bu/vls.h" +#include "rt/directory.h" +#include "ged.h" + +static size_t +_stat_find_first_unescaped(std::string &s, const char *keys, int offset) +{ + int off = offset; + int done = 0; + size_t candidate = std::string::npos; + while (!done) { + candidate = s.find_first_of(keys, off); + if (!candidate || candidate == std::string::npos) return candidate; + if (s.at(candidate - 1) == '\\') { + off = candidate + 1; + } else { + done = 1; + } + } + return candidate; +} + +std::vector +_stat_keys_split(std::string s) +{ + std::vector substrs; + std::string lstr = s; + size_t pos = 0; + while ((pos = _stat_find_first_unescaped(lstr, ",", 0)) != std::string::npos) { + std::string ss = lstr.substr(0, pos); + substrs.push_back(ss); + lstr.erase(0, pos + 1); + } + substrs.push_back(lstr); + return substrs; +} + +static const char * +stat_key_prettyprint(const char *key) +{ + if (BU_STR_EQUAL(key, "flags")) { + static const char *s = "Flags"; + return s; + } + if (BU_STR_EQUAL(key, "name")) { + static const char *s = "Object Name"; + return s; + } + if (BU_STR_EQUAL(key, "refs")) { + static const char *s = "References"; + return s; + } + if (BU_STR_EQUAL(key, "size")) { + static const char *s = "Size"; + return s; + } + if (BU_STR_EQUAL(key, "type")) { + static const char *s = "Type"; + return s; + } + + return key; +} + +struct cmp_dps_arg { + struct db_i *dbip; + std::vector *keys; +}; + +static void +type_str(struct bu_vls *n, struct directory *dp, struct db_i *dbip) +{ + int type; + struct rt_db_internal intern; + const struct bn_tol arb_tol = {BN_TOL_MAGIC, BN_TOL_DIST, BN_TOL_DIST * BN_TOL_DIST, 1.0e-6, 1.0 - 1.0e-6 }; + if (dp->d_major_type == DB5_MAJORTYPE_ATTRIBUTE_ONLY) { + bu_vls_sprintf(n, " "); + return; + } + + if (dp->d_flags & RT_DIR_COMB) { + if (dp->d_flags & RT_DIR_REGION) { + bu_vls_sprintf(n, "region"); + return; + } else { + bu_vls_sprintf(n, "comb"); + return; + } + } else { + if (rt_db_get_internal(&intern, dp, dbip, (fastf_t *)NULL, &rt_uniresource) < 0 || intern.idb_major_type != DB5_MAJORTYPE_BRLCAD) { + rt_db_free_internal(&intern); + bu_vls_sprintf(n, " "); + return; + } + + switch (intern.idb_minor_type) { + case DB5_MINORTYPE_BRLCAD_ARB8: + type = rt_arb_std_type(&intern, &arb_tol); + switch (type) { + case 4: + bu_vls_sprintf(n, "arb4"); + break; + case 5: + bu_vls_sprintf(n, "arb5"); + break; + case 6: + bu_vls_sprintf(n, "arb6"); + break; + case 7: + bu_vls_sprintf(n, "arb7"); + break; + case 8: + bu_vls_sprintf(n, "arb8"); + break; + default: + bu_vls_sprintf(n, "arb?"); + break; + } + break; + default: + bu_vls_sprintf(n, "%s", intern.idb_meth->ft_label); + break; + } + } + + rt_db_free_internal(&intern); +} + +static int +cmp_dps(const void *a, const void *b, void *arg) +{ + int cmp = 0; + struct directory *dp1 = *(struct directory **)a; + struct directory *dp2 = *(struct directory **)b; + struct cmp_dps_arg *sarg = (struct cmp_dps_arg *)arg; + std::vector *keys = sarg->keys; + struct db_i *dbip = sarg->dbip; + // Try each of the specified criteria until we get + // a decision + for (size_t i = 0; i < keys->size(); i++) { + int flip = 1; + struct bu_vls key = BU_VLS_INIT_ZERO; + bu_vls_sprintf(&key, "%s", (*keys)[i].c_str()); + if (bu_vls_cstr(&key)[0] == '!') { + bu_vls_nibble(&key, 1); + flip = -1; + } + if (BU_STR_EQUAL(bu_vls_cstr(&key), "name")) { + cmp = alphanum_impl((const char *)dp1->d_namep, (const char *)dp2->d_namep, arg); + if (cmp) { + bu_vls_free(&key); + return flip * cmp; + } + continue; + } + if (BU_STR_EQUAL(bu_vls_cstr(&key), "uses")) { + cmp = (dp1->d_uses > dp2->d_uses); + if (cmp) { + bu_vls_free(&key); + return flip * cmp; + } + cmp = (dp1->d_uses < dp2->d_uses); + if (cmp) { + bu_vls_free(&key); + return -1 * flip * cmp; + } + continue; + } + if (BU_STR_EQUAL(bu_vls_cstr(&key), "refs")) { + cmp = (dp1->d_nref > dp2->d_nref); + if (cmp) { + bu_vls_free(&key); + return flip * cmp; + } + cmp = (dp1->d_nref < dp2->d_nref); + if (cmp) { + bu_vls_free(&key); + return -1 * flip * cmp; + } + continue; + } + if (BU_STR_EQUAL(bu_vls_cstr(&key), "flags")) { + cmp = (dp1->d_flags > dp2->d_flags); + if (cmp) { + bu_vls_free(&key); + return flip * cmp; + } + cmp = (dp1->d_flags < dp2->d_flags); + if (cmp) { + bu_vls_free(&key); + return -1 * flip * cmp; + } + continue; + } + if (BU_STR_EQUAL(bu_vls_cstr(&key), "major_type")) { + cmp = (dp1->d_major_type > dp2->d_major_type); + if (cmp) { + bu_vls_free(&key); + return flip * cmp; + } + cmp = (dp1->d_major_type < dp2->d_major_type); + if (cmp) { + bu_vls_free(&key); + return -1 * flip * cmp; + } + continue; + } + if (BU_STR_EQUAL(bu_vls_cstr(&key), "minor_type")) { + cmp = (dp1->d_minor_type > dp2->d_minor_type); + if (cmp) { + bu_vls_free(&key); + return flip * cmp; + } + cmp = (dp1->d_minor_type < dp2->d_minor_type); + if (cmp) { + bu_vls_free(&key); + return -1 * flip * cmp; + } + continue; + } + if (BU_STR_EQUAL(bu_vls_cstr(&key), "type")) { + struct bu_vls n1 = BU_VLS_INIT_ZERO; + struct bu_vls n2 = BU_VLS_INIT_ZERO; + type_str(&n1, dp1, dbip); + type_str(&n2, dp2, dbip); + cmp = bu_strcmp(bu_vls_cstr(&n1), bu_vls_cstr(&n2)); + if (cmp) { + bu_vls_free(&key); + return flip * cmp; + } + continue; + } + if (BU_STR_EQUAL(bu_vls_cstr(&key), "size")) { + cmp = (dp1->d_len > dp2->d_len); + if (cmp) { + bu_vls_free(&key); + return flip * cmp; + } + cmp = (dp1->d_len < dp2->d_len); + if (cmp) { + return -1 * flip * cmp; + } + continue; + } + + // If we've gotten this far, we're after an attribute + struct bu_attribute_value_set avs1 = BU_AVS_INIT_ZERO; + if (db5_get_attributes(dbip, &avs1, dp1)) { + continue; + } + db5_standardize_avs(&avs1); + struct bu_attribute_value_set avs2 = BU_AVS_INIT_ZERO; + if (db5_get_attributes(dbip, &avs2, dp2)) { + bu_avs_free(&avs1); + continue; + } + db5_standardize_avs(&avs2); + + struct bu_vls str = BU_VLS_INIT_ZERO; + bu_vls_sprintf(&str, "%s", bu_vls_cstr(&key)); + /* attr: is a special key to allow a stat output to print arbitrary attribute values. */ + if (!bu_strncmp(bu_vls_cstr(&str), "attr:", 5)) { + bu_vls_nibble(&str, 5); + } + cmp = bu_strcmp(bu_avs_get(&avs1, bu_vls_cstr(&str)), bu_avs_get(&avs2, bu_vls_cstr(&str))); + bu_avs_free(&avs1); + bu_avs_free(&avs2); + bu_vls_free(&str); + if (cmp) { + bu_vls_free(&key); + return flip * cmp; + } + } + + return cmp; +} + +void +dpath_sort(void *paths, int path_cnt, const char *col_order, struct ged *gedp) +{ + struct cmp_dps_arg sarg; + std::vector keys; + sarg.dbip = gedp->ged_wdbp->dbip; + sarg.keys = &keys; + if (!strlen(col_order)) { + keys.push_back(std::string("name")); + } else { + keys = _stat_keys_split(std::string(col_order)); + } + bu_sort(paths, path_cnt, sizeof(struct directory *), cmp_dps, (void *)&sarg); +} + +static void +stat_output(ft_table_t *table, struct ged *gedp, struct directory *dp, const char *key, int raw) +{ + struct bu_vls str = BU_VLS_INIT_ZERO; + + if (BU_STR_EQUAL(key, "name")) { + ft_write(table, dp->d_namep); + return; + } + + if (BU_STR_EQUAL(key, "uses")) { + bu_vls_sprintf(&str, "%ld", dp->d_uses); + ft_write(table, bu_vls_cstr(&str)); + bu_vls_free(&str); + return; + } + + if (BU_STR_EQUAL(key, "refs")) { + bu_vls_sprintf(&str, "%ld", dp->d_nref); + ft_write(table, bu_vls_cstr(&str)); + bu_vls_free(&str); + return; + } + + if (BU_STR_EQUAL(key, "flags")) { + // TODO - some sort of human intuitive printing + bu_vls_sprintf(&str, "%d", dp->d_flags); + ft_write(table, bu_vls_cstr(&str)); + bu_vls_free(&str); + return; + } + + if (BU_STR_EQUAL(key, "major_type")) { + // TODO - some sort of human intuitive printing + bu_vls_sprintf(&str, "%d", dp->d_major_type); + ft_write(table, bu_vls_cstr(&str)); + bu_vls_free(&str); + return; + } + + if (BU_STR_EQUAL(key, "minor_type")) { + // TODO - some sort of human intuitive printing + bu_vls_sprintf(&str, "%d", dp->d_minor_type); + ft_write(table, bu_vls_cstr(&str)); + bu_vls_free(&str); + return; + } + + + if (BU_STR_EQUAL(key, "type")) { + struct bu_vls tstr = BU_VLS_INIT_ZERO; + type_str(&tstr, dp, gedp->ged_wdbp->dbip); + ft_write(table, bu_vls_cstr(&tstr)); + bu_vls_free(&tstr); + return; + } + + if (BU_STR_EQUAL(key, "size")) { + if (raw) { + bu_vls_sprintf(&str, "%zd", dp->d_len); + } else { + char hlen[6] = { '\0' }; + (void)bu_humanize_number(hlen, 5, (int64_t)dp->d_len, "", + BU_HN_AUTOSCALE, + BU_HN_B | BU_HN_NOSPACE | BU_HN_DECIMAL); + bu_vls_printf(&str, "%s", hlen); + } + ft_write(table, bu_vls_cstr(&str)); + bu_vls_free(&str); + return; + } + + + // If we've gotten this far, we're after an attribute + struct bu_attribute_value_set avs = BU_AVS_INIT_ZERO; + if (db5_get_attributes(gedp->ged_wdbp->dbip, &avs, dp)) { + bu_log("Error: cannot get attributes for object %s\n", dp->d_namep); + return; + } + + bu_vls_sprintf(&str, "%s", key); + /* attr: is a prefix to allow a stat output to print arbitrary attribute values, even if + * the attribute name matches one of the "defined" keys. */ + if (!bu_strncmp(key, "attr:", 5)) { + bu_vls_nibble(&str, 5); + } + + if (bu_avs_get(&avs, bu_vls_cstr(&str))) { + ft_write(table, bu_avs_get(&avs, bu_vls_cstr(&str))); + } else { + ft_write(table, " "); + } + bu_avs_free(&avs); + bu_vls_free(&str); +} + +/********************************************* + * Command function and user option handling * + *********************************************/ + +static void +stat_usage(struct bu_vls *str, const char *cmd, struct bu_opt_desc *d) { + char *option_help = bu_opt_describe(d, NULL); + bu_vls_sprintf(str, "Usage: %s [options] pattern\n", cmd); + if (option_help) { + bu_vls_printf(str, "Options:\n%s\n", option_help); + bu_free(option_help, "help str"); + } + bu_vls_printf(str, "Available column types are:\n"); + bu_vls_printf(str, " name\n"); + bu_vls_printf(str, " uses\n"); + bu_vls_printf(str, " refs\n"); + bu_vls_printf(str, " flags\n"); + bu_vls_printf(str, " major_type\n"); + bu_vls_printf(str, " minor_type\n"); + bu_vls_printf(str, " type\n"); + bu_vls_printf(str, " size\n"); + bu_vls_printf(str, "\nAttribute keys may also be specified. If the user attribute matches one of the\ncolumn keys above, the user attribute may be accessed by prefixing it with the\nstring \"attr:\" (for example, \"attr:name\" would print the value of\n\"attr get objname name\", not \"objname\"\n"); +} + +int +ged_stat_core(struct ged *gedp, int argc, const char *argv[]) +{ + if (!gedp || !argc || !argv) + return GED_ERROR; + + int print_help = 0;; + long verbosity = 1; + long quiet = 0; + int raw = 0; + struct bu_ptbl sobjs = BU_PTBL_INIT_ZERO; + struct bu_vls search_filter = BU_VLS_INIT_ZERO; + struct bu_vls sort_str = BU_VLS_INIT_ZERO; + struct bu_vls keys_str = BU_VLS_INIT_ZERO; + struct bu_vls msg = BU_VLS_INIT_ZERO; + struct db_i *dbip = gedp->ged_wdbp->dbip; + const char *pname = argv[0]; + + // Stashed command name, increment and continue + argc--;argv++; + + // Clear result string + bu_vls_trunc(gedp->ged_result_str, 0); + + struct bu_opt_desc d[9]; + BU_OPT(d[0], "h", "help", "", NULL, &print_help, "Print help and exit"); + BU_OPT(d[1], "?", "", "", NULL, &print_help, ""); + BU_OPT(d[2], "v", "verbosity", "", &bu_opt_incr_long, &verbosity, "Increase output verbosity (multiple specifications of -v increase verbosity more)"); + BU_OPT(d[3], "q", "quiet", "", &bu_opt_incr_long, &quiet, "Decrease output verbosity (multiple specifications of -q decrease verbosity more)"); + BU_OPT(d[3], "r", "raw", "", NULL , &raw, "Print raw values instead of human friendly values"); + BU_OPT(d[4], "F", "filter", "\"string\"", &bu_opt_vls, &search_filter, "Filter objects being reported (uses search style filter specifications)"); + BU_OPT(d[5], "C", "columns", "\"type1[,type2]...\"", &bu_opt_vls, &keys_str, "Comma separated list of data columns to print"); + BU_OPT(d[6], "S", "sort-order", "\"type1[,type2]...\"", &bu_opt_vls, &sort_str, "Comma separated list of cols to sort by (priority is left to right). To reverse sorting order for an individual column, prefix the specifier with a '!' character."); + BU_OPT_NULL(d[7]); + + int ret_ac = bu_opt_parse(&msg, argc, argv, d); + if (ret_ac < 0) { + bu_vls_printf(gedp->ged_result_str, "%s", bu_vls_cstr(&msg)); + bu_vls_free(&msg); + bu_vls_free(&search_filter); + bu_vls_free(&sort_str); + bu_vls_free(&keys_str); + return GED_ERROR; + } + bu_vls_free(&msg); + + if (print_help) { + stat_usage(gedp->ged_result_str, pname, d); + bu_vls_free(&search_filter); + bu_vls_free(&sort_str); + bu_vls_free(&keys_str); + return GED_HELP; + } + + // If we have one or a series of patterns, process + // them - otherwise, report usage. + argc = ret_ac; + if (!argc) { + stat_usage(gedp->ged_result_str, pname, d); + bu_vls_free(&search_filter); + bu_vls_free(&sort_str); + bu_vls_free(&keys_str); + return GED_ERROR; + } + + if (!bu_vls_strlen(&keys_str)) { + // No key set supplied - set defaults based on verbosity + bu_vls_sprintf(&keys_str, "name,uses,refs,flags,type,size"); + } + + // Make sure our info is current +#if 0 + if (db_dirbuild(dbip) < 0) { + bu_vls_printf(gedp->ged_result_str, "db_dirbuild failed on geometry database file\n"); + return GED_ERROR; + } +#endif + db_update_nref(dbip, &rt_uniresource); + + // Combine verbosity and quiet flags + verbosity = verbosity - quiet; + + /* Split the key string up into individual keys */ + std::vector keys = _stat_keys_split(std::string(bu_vls_cstr(&keys_str))); + + // Create table + ft_table_t *table = ft_create_table(); + ft_set_border_style(table, FT_SIMPLE_STYLE); + + // Set header (depends on verbosity) + for (size_t i = 0; i < keys.size(); i++) { + // TODO - better pretty-printing of header strings - i.e. "Object Name" instead of "name" + ft_write(table, stat_key_prettyprint(keys[i].c_str())); + } + ft_ln(table); + ft_add_separator(table); + + // If we're going to filter, build the set of "allowed" objects + if (bu_vls_strlen(&search_filter)) { + int s_flags = 0; + s_flags |= DB_SEARCH_RETURN_UNIQ_DP; + (void)db_search(&sobjs, s_flags, bu_vls_cstr(&search_filter), 0, NULL, dbip, NULL); + + // If we're not allowed *any* objects according to the filters, there's no point in + // doing any more work - just print the header and exit. + if (!BU_PTBL_LEN(&sobjs)) { + bu_vls_printf(gedp->ged_result_str, "%s\n", ft_to_string(table)); + ft_destroy_table(table); + bu_ptbl_free(&sobjs); + return GED_OK; + } + } + + std::set udp; + + for (int i = 0; i < argc; i++) { + + struct directory **paths; + int path_cnt = db_ls(gedp->ged_wdbp->dbip, DB_LS_HIDDEN, argv[i], &paths); + + + for (int j = 0; j < path_cnt; j++) { + struct directory *dp = paths[j]; + if (BU_PTBL_LEN(&sobjs)) { + // We have filtering enabled - check the object + if (bu_ptbl_locate(&sobjs, (long *)dp ) == -1) { + // skip + continue; + } + } + udp.insert(dp); + } + + bu_free(paths, "dp array"); + } + + // If we have any sorting enabled, do that + struct bu_ptbl objs = BU_PTBL_INIT_ZERO; + std::set::iterator o_it; + for (o_it = udp.begin(); o_it != udp.end(); o_it++) { + struct directory *dp = *o_it; + bu_ptbl_ins(&objs, (long *)dp); + } + dpath_sort((void *)objs.buffer, BU_PTBL_LEN(&objs), bu_vls_cstr(&sort_str), gedp); + + for (size_t j = 0; j < BU_PTBL_LEN(&objs); j++) { + struct directory *dp = (struct directory *)BU_PTBL_GET(&objs, j); + for (size_t k = 0; k < keys.size(); k++) { + stat_output(table, gedp, dp, keys[k].c_str(), raw); + } + ft_ln(table); + } + bu_ptbl_free(&objs); + + bu_vls_printf(gedp->ged_result_str, "%s\n", ft_to_string(table)); + ft_destroy_table(table); + bu_ptbl_free(&sobjs); + + return GED_OK; +} + +#ifdef GED_PLUGIN +#include "../include/plugin.h" +extern "C" { +struct ged_cmd_impl stat_cmd_impl = { + "stat", + ged_stat_core, + GED_CMD_DEFAULT +}; + +const struct ged_cmd stat_cmd = { &stat_cmd_impl }; +const struct ged_cmd *stat_cmds[] = { &stat_cmd, NULL }; + +static const struct ged_plugin pinfo = { GED_API, stat_cmds, 1 }; + +COMPILER_DLLEXPORT const struct ged_plugin *ged_plugin_info() +{ + return &pinfo; +} +} +#endif /* GED_PLUGIN */ + + + +/* + * Local Variables: + * tab-width: 8 + * mode: C + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/libged/summary/summary.c b/src/libged/summary/summary.c index 4913ea0cea1..4b293c5604c 100644 --- a/src/libged/summary/summary.c +++ b/src/libged/summary/summary.c @@ -1,7 +1,7 @@ /* S U M M A R Y . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/sync/sync.c b/src/libged/sync/sync.c index 6d56fdd3ee0..a9282ecf1fc 100644 --- a/src/libged/sync/sync.c +++ b/src/libged/sync/sync.c @@ -1,7 +1,7 @@ /* S Y N C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/tables/tables.c b/src/libged/tables/tables.c index 3bbf8216a37..7b64205ee12 100644 --- a/src/libged/tables/tables.c +++ b/src/libged/tables/tables.c @@ -1,7 +1,7 @@ /* T A B L E S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/tests/CMakeLists.txt b/src/libged/tests/CMakeLists.txt index 79501ab1f41..337150fe61d 100644 --- a/src/libged/tests/CMakeLists.txt +++ b/src/libged/tests/CMakeLists.txt @@ -1,8 +1,8 @@ BRLCAD_ADDEXEC(ged_test_tops test_tops.c libged TEST) -add_test(NAME ged_test_tops_moss COMMAND ged_test_tops "${CMAKE_CURRENT_SOURCE_DIR}/ged_tests.g") +BRLCAD_ADD_TEST(NAME ged_test_tops_moss COMMAND ged_test_tops "${CMAKE_CURRENT_SOURCE_DIR}/ged_tests.g") BRLCAD_ADDEXEC(ged_test_list test_list.c libged TEST) -add_test(NAME ged_test_list COMMAND ged_test_list 2) +BRLCAD_ADD_TEST(NAME ged_test_list COMMAND ged_test_list 2) BRLCAD_ADDEXEC(ged_test_plugins plugins.cpp libged TEST) @@ -13,6 +13,7 @@ CMAKEFILES( lint_tests.g obb_tests.g ged_tests.g + pnts_in_out.g ) CMAKEFILES(CMakeLists.txt) diff --git a/src/libged/tests/ged_tests.g b/src/libged/tests/ged_tests.g index 5855ffac2ef21d99c66804e652f20acbe54b2ff7..a6fa7c728908ab659649c4263dadb753211cdb82 100644 GIT binary patch literal 568 zcmXS8WB>w2(=rtW1||j`j(B$;etd%phwvm7$Hvh4>lI4PCqM#^IwN}ynN6ZR!XHMs{9%a8AAG=I;Q$8<$i?t*0mhd+3u}H^ VP5}c@1rtyOFpT~e8G%)p0s!!cYt{e& delta 6 NcmdnN(!jKU5da6V0pI`t diff --git a/src/libged/tests/plugins.cpp b/src/libged/tests/plugins.cpp index d55f7abeb15..12c980b5962 100644 --- a/src/libged/tests/plugins.cpp +++ b/src/libged/tests/plugins.cpp @@ -1,7 +1,7 @@ /* P L U G I N S . C * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -44,17 +44,19 @@ main(int ac, char *av[]) { gbp = ged_open("db", av[1], 1); - const char * const *ged_cmds = NULL; - size_t ged_cmd_cnt = ged_cmd_list(&ged_cmds); + const char * const *cmds = NULL; + size_t cmds_cnt = ged_cmd_list(&cmds); - for (size_t i = 0; i < ged_cmd_cnt; i++) { - bu_log("%s\n", ged_cmds[i]); + bu_log("%s\n", ged_init_msgs()); + + for (size_t i = 0; i < cmds_cnt; i++) { + bu_log("%s\n", cmds[i]); } #if 0 - for (size_t i = 0; i < ged_cmd_cnt; i++) { - bu_log("ged_execing %s\n", ged_cmds[i]); - ged_exec(gbp, 1, (const char **)&ged_cmds[i]); + for (size_t i = 0; i < cmds_cnt; i++) { + bu_log("ged_execing %s\n", cmds[i]); + ged_exec(gbp, 1, (const char **)&cmds[i]); } #endif @@ -417,8 +419,8 @@ main(int ac, char *av[]) { } // Also add libged's list in case there are any // we missed calling out explicitly above... - for (size_t i = 0; i < ged_cmd_cnt; i++) { - cmd_set.insert(std::string(ged_cmds[i])); + for (size_t i = 0; i < cmds_cnt; i++) { + cmd_set.insert(std::string(cmds[i])); } std::set::iterator cs_it; diff --git a/src/libged/tests/pnts_in_out.g b/src/libged/tests/pnts_in_out.g new file mode 100644 index 0000000000000000000000000000000000000000..9c8308666830e4c2d2724de3896215640184091f GIT binary patch literal 496 zcmXS8WB>w2(=sLy%>yE60ZhwO6d0HocsSzSef*sqeHh$JGD~t&8A9{Gbc%vgkdLmj zqllHK1gR1~B z*kC*d6$s101WH5s=<+Z=jE1R)@nJN~JQyEF9}t1C9H0W|Gy}xF%zSLc1sOo+CP39; NP`E6BDI`|j6abf*B>MmW literal 0 HcmV?d00001 diff --git a/src/libged/tests/test_list.c b/src/libged/tests/test_list.c index 625485d2ece..1fedbf1bb36 100644 --- a/src/libged/tests/test_list.c +++ b/src/libged/tests/test_list.c @@ -1,7 +1,7 @@ /* T E S T _ L I S T . C * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/tests/test_tops.c b/src/libged/tests/test_tops.c index 38fdc3c347f..46e0b7c6c4d 100644 --- a/src/libged/tests/test_tops.c +++ b/src/libged/tests/test_tops.c @@ -1,7 +1,7 @@ /* T E S T _ T O P S . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/tire/tire.c b/src/libged/tire/tire.c index 620f81cdc78..e122fc35bea 100644 --- a/src/libged/tire/tire.c +++ b/src/libged/tire/tire.c @@ -1,7 +1,7 @@ /* T I R E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/title/title.c b/src/libged/title/title.c index 1df55596336..43233e6377c 100644 --- a/src/libged/title/title.c +++ b/src/libged/title/title.c @@ -1,7 +1,7 @@ /* T I T L E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/tol/tol.c b/src/libged/tol/tol.c index 264ed4fc54f..3936c029413 100644 --- a/src/libged/tol/tol.c +++ b/src/libged/tol/tol.c @@ -1,7 +1,7 @@ /* T O L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/tops/tops.c b/src/libged/tops/tops.c index 910ebd048b0..461d99eac9c 100644 --- a/src/libged/tops/tops.c +++ b/src/libged/tops/tops.c @@ -1,7 +1,7 @@ /* T O P S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/tra/tra.c b/src/libged/tra/tra.c index 73e5649713f..04bbe307784 100644 --- a/src/libged/tra/tra.c +++ b/src/libged/tra/tra.c @@ -1,7 +1,7 @@ /* T R A . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/trace.c b/src/libged/trace.c index 7c8f7dd7aa4..e43e08cc7e4 100644 --- a/src/libged/trace.c +++ b/src/libged/trace.c @@ -1,7 +1,7 @@ /* T R A C E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/track.c b/src/libged/track.c index 5e376aca410..ac8a03d07aa 100644 --- a/src/libged/track.c +++ b/src/libged/track.c @@ -1,7 +1,7 @@ /* T R A C K . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/track/track.c b/src/libged/track/track.c index e4debfb9ea7..d34521175ed 100644 --- a/src/libged/track/track.c +++ b/src/libged/track/track.c @@ -1,7 +1,7 @@ /* T R A C K . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/translate_extrude.c b/src/libged/translate_extrude.c index b9a1bd6babb..fd8f7ea277b 100644 --- a/src/libged/translate_extrude.c +++ b/src/libged/translate_extrude.c @@ -1,7 +1,7 @@ /* T R A N S L A T E _ E X T R U D E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/translate_tgc.c b/src/libged/translate_tgc.c index 52408854ea9..7b373b5c1a2 100644 --- a/src/libged/translate_tgc.c +++ b/src/libged/translate_tgc.c @@ -1,7 +1,7 @@ /* T R A N S L A T E _ T G C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/tree/tree.c b/src/libged/tree/tree.c index 3e68741da0e..f16e128442b 100644 --- a/src/libged/tree/tree.c +++ b/src/libged/tree/tree.c @@ -1,7 +1,7 @@ /* T R E E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -26,15 +26,212 @@ #include "common.h" #include +#include #include #include #include "bu/cmd.h" #include "bu/getopt.h" - +#include "bu/sort.h" #include "../ged_private.h" +static int +_tree_cmp_attr(const void *p1, const void *p2, void *UNUSED(arg)) +{ + return bu_strcmp(((struct bu_attribute_value_pair *)p1)->name, + ((struct bu_attribute_value_pair *)p2)->name); +} + +static void +_tree_print_node(struct ged *gedp, + struct directory *dp, + size_t pathpos, + int indentSize, + char opprefix, + unsigned flags, + int displayDepth, + int currdisplayDepth, + int verbosity, + int mprefix) +{ + size_t i; + const char *mlabel = "[M]"; + struct directory *nextdp; + struct rt_db_internal intern; + struct rt_comb_internal *comb; + unsigned aflag = (flags & _GED_TREE_AFLAG); + unsigned cflag = (flags & _GED_TREE_CFLAG); + struct bu_vls tmp_str = BU_VLS_INIT_ZERO; + + /* cflag = don't show shapes, so return if this is not a combination */ + if (cflag && !(dp->d_flags & RT_DIR_COMB)) { + return; + } + + /* set up spacing from the left margin */ + for (i = 0; i < pathpos; i++) { + if (indentSize < 0) { + bu_vls_printf(gedp->ged_result_str, "\t"); + if (aflag) + bu_vls_printf(&tmp_str, "\t"); + + } else { + int j; + for (j = 0; j < indentSize; j++) { + bu_vls_printf(gedp->ged_result_str, " "); + if (aflag) + bu_vls_printf(&tmp_str, " "); + } + } + } + + /* add the prefix if desired */ + if (mprefix) { + bu_vls_printf(gedp->ged_result_str, "%s ", mlabel); + } + if (opprefix) { + bu_vls_printf(gedp->ged_result_str, "%c ", opprefix); + if (aflag) + bu_vls_printf(&tmp_str, " "); + } + + /* now the object name */ + bu_vls_printf(gedp->ged_result_str, "%s", dp->d_namep); + + /* suffix name if appropriate */ + /* Output Comb and Region flags (-F?) */ + if (dp->d_flags & RT_DIR_COMB) + bu_vls_printf(gedp->ged_result_str, "/"); + if (dp->d_flags & RT_DIR_REGION) + bu_vls_printf(gedp->ged_result_str, "R"); + + bu_vls_printf(gedp->ged_result_str, "\n"); + + /* output attributes if any and if desired */ + if (aflag) { + struct bu_attribute_value_set avs; + bu_avs_init_empty(&avs); + if (db5_get_attributes(gedp->ged_wdbp->dbip, &avs, dp)) { + bu_vls_printf(gedp->ged_result_str, "Cannot get attributes for object %s\n", dp->d_namep); + /* need a bombing macro or set an error code here: return GED_ERROR; */ + bu_vls_free(&tmp_str); + return; + } + + /* FIXME: manually list all the attributes, if any. should be + * calling ged_attr() show so output formatting is consistent. + */ + if (avs.count) { + struct bu_attribute_value_pair *avpp; + int max_attr_name_len = 0; + + /* sort attribute-value set array by attribute name */ + bu_sort(&avs.avp[0], avs.count, sizeof(struct bu_attribute_value_pair), _tree_cmp_attr, NULL); + + for (i = 0, avpp = avs.avp; i < avs.count; i++, avpp++) { + int len = (int)strlen(avpp->name); + if (len > max_attr_name_len) { + max_attr_name_len = len; + } + } + for (i = 0, avpp = avs.avp; i < avs.count; i++, avpp++) { + bu_vls_printf(gedp->ged_result_str, "%s @ %-*.*s %s\n", + tmp_str.vls_str, + max_attr_name_len, max_attr_name_len, + avpp->name, avpp->value); + } + } + bu_vls_free(&tmp_str); + } + + if (!(dp->d_flags & RT_DIR_COMB)) + return; + + /* + * This node is a combination (e.g., a directory). + * Process all the arcs (e.g., directory members). + */ + + if (rt_db_get_internal(&intern, dp, gedp->ged_wdbp->dbip, (fastf_t *)NULL, &rt_uniresource) < 0) { + bu_vls_printf(gedp->ged_result_str, "Database read error, aborting"); + return; + } + comb = (struct rt_comb_internal *)intern.idb_ptr; + + if (comb->tree) { + size_t node_count; + size_t actual_count; + struct rt_tree_array *rt_tree_array; + + if (comb->tree && db_ck_v4gift_tree(comb->tree) < 0) { + db_non_union_push(comb->tree, &rt_uniresource); + if (db_ck_v4gift_tree(comb->tree) < 0) { + bu_vls_printf(gedp->ged_result_str, "Cannot flatten tree for listing"); + return; + } + } + node_count = db_tree_nleaves(comb->tree); + if (node_count > 0) { + rt_tree_array = (struct rt_tree_array *)bu_calloc(node_count, + sizeof(struct rt_tree_array), "tree list"); + actual_count = (struct rt_tree_array *)db_flatten_tree( + rt_tree_array, comb->tree, OP_UNION, + 1, &rt_uniresource) - rt_tree_array; + BU_ASSERT(actual_count == node_count); + comb->tree = TREE_NULL; + } else { + actual_count = 0; + rt_tree_array = NULL; + } + + for (i = 0; i < actual_count; i++) { + char op; + + switch (rt_tree_array[i].tl_op) { + case OP_UNION: + op = DB_OP_UNION; + break; + case OP_INTERSECT: + op = DB_OP_INTERSECT; + break; + case OP_SUBTRACT: + op = DB_OP_SUBTRACT; + break; + default: + op = '?'; + break; + } + + if ((nextdp = db_lookup(gedp->ged_wdbp->dbip, rt_tree_array[i].tl_tree->tr_l.tl_name, LOOKUP_QUIET)) == RT_DIR_NULL) { + size_t j; + + for (j = 0; j < pathpos+1; j++) + bu_vls_printf(gedp->ged_result_str, "\t"); + + if (verbosity && rt_tree_array[i].tl_tree->tr_l.tl_mat && !bn_mat_is_equal(rt_tree_array[i].tl_tree->tr_l.tl_mat, bn_mat_identity, &gedp->ged_wdbp->wdb_tol)) + bu_vls_printf(gedp->ged_result_str, "%s ", mlabel); + bu_vls_printf(gedp->ged_result_str, "%c ", op); + bu_vls_printf(gedp->ged_result_str, "%s\n", rt_tree_array[i].tl_tree->tr_l.tl_name); + } else { + + int domprefix = 0; + if (verbosity && rt_tree_array[i].tl_tree->tr_l.tl_mat && !bn_mat_is_equal(rt_tree_array[i].tl_tree->tr_l.tl_mat, bn_mat_identity, &gedp->ged_wdbp->wdb_tol)) { + domprefix = 1; + } + + if (currdisplayDepth < displayDepth) { + _tree_print_node(gedp, nextdp, pathpos+1, indentSize, op, flags, displayDepth, currdisplayDepth+1, verbosity, domprefix); + } + } + db_free_tree(rt_tree_array[i].tl_tree, &rt_uniresource); + } + if (rt_tree_array) bu_free((char *)rt_tree_array, "printnode: rt_tree_array"); + } + rt_db_free_internal(&intern); +} + + /* * Return the object hierarchy for all object(s) specified or for all currently displayed @@ -52,6 +249,7 @@ ged_tree_core(struct ged *gedp, int argc, const char *argv[]) int indentSize = -1; int displayDepth = INT_MAX; int c; + int verbosity = 0; FILE *fdout = NULL; char *buffer = NULL; #define WHOARGVMAX 256 @@ -67,7 +265,7 @@ ged_tree_core(struct ged *gedp, int argc, const char *argv[]) /* Parse options */ bu_optind = 1; /* re-init bu_getopt() */ - while ((c = bu_getopt(argc, (char * const *)argv, "d:i:o:ca")) != -1) { + while ((c = bu_getopt(argc, (char * const *)argv, "d:i:o:cav")) != -1) { switch (c) { case 'i': indentSize = atoi(bu_optarg); @@ -96,6 +294,9 @@ ged_tree_core(struct ged *gedp, int argc, const char *argv[]) return GED_ERROR; } break; + case 'v': + verbosity++; + break; case '?': default: bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); @@ -129,7 +330,7 @@ ged_tree_core(struct ged *gedp, int argc, const char *argv[]) bu_vls_printf(gedp->ged_result_str, "\n"); if ((dp = db_lookup(gedp->ged_wdbp->dbip, next, LOOKUP_NOISY)) == RT_DIR_NULL) continue; - _ged_print_node(gedp, dp, 0, indentSize, 0, flags, displayDepth, 0); + _tree_print_node(gedp, dp, 0, indentSize, 0, flags, displayDepth, 0, verbosity, 0); } if (buffer) { diff --git a/src/libged/typein/typein.c b/src/libged/typein/typein.c index 72ff9bbcd1b..0f7c8caaa8e 100644 --- a/src/libged/typein/typein.c +++ b/src/libged/typein/typein.c @@ -1,7 +1,7 @@ /* T Y P E I N . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -107,7 +107,8 @@ static const char *p_submodel[] = { static const char *p_vol[] = { - "Enter name of file containing voxel data: ", + "Take data from file or database binary object [f|o]: ", + "Enter name of file/object: ", "Enter X, Y, Z dimensions of file (number of cells): ", "Enter Y dimension of file (number of cells): ", "Enter Z dimension of file (number of cells): ", @@ -998,15 +999,23 @@ vol_in(struct ged *gedp, const char **cmd_argvs, struct rt_db_internal *intern) intern->idb_ptr = (void *)vol; vol->magic = RT_VOL_INTERNAL_MAGIC; - bu_strlcpy(vol->file, cmd_argvs[3], sizeof(vol->file)); - vol->xdim = atoi(cmd_argvs[4]); - vol->ydim = atoi(cmd_argvs[5]); - vol->zdim = atoi(cmd_argvs[6]); - vol->lo = atoi(cmd_argvs[7]); - vol->hi = atoi(cmd_argvs[8]); - vol->cellsize[0] = atof(cmd_argvs[9]) * gedp->ged_wdbp->dbip->dbi_local2base; - vol->cellsize[1] = atof(cmd_argvs[10]) * gedp->ged_wdbp->dbip->dbi_local2base; - vol->cellsize[2] = atof(cmd_argvs[11]) * gedp->ged_wdbp->dbip->dbi_local2base; + bu_strlcpy(vol->name, cmd_argvs[4], sizeof(vol->name)); + vol->xdim = atoi(cmd_argvs[5]); + vol->ydim = atoi(cmd_argvs[6]); + vol->zdim = atoi(cmd_argvs[7]); + vol->lo = atoi(cmd_argvs[8]); + vol->hi = atoi(cmd_argvs[9]); + vol->cellsize[0] = atof(cmd_argvs[10]) * gedp->ged_wdbp->dbip->dbi_local2base; + vol->cellsize[1] = atof(cmd_argvs[11]) * gedp->ged_wdbp->dbip->dbi_local2base; + vol->cellsize[2] = atof(cmd_argvs[12]) * gedp->ged_wdbp->dbip->dbi_local2base; + + if (*cmd_argvs[3] == 'f' || *cmd_argvs[3] == 'F') + vol->datasrc = RT_VOL_SRC_FILE; + else if (*cmd_argvs[3] == 'o' || *cmd_argvs[3] == 'O') + vol->datasrc = RT_VOL_SRC_OBJ; + else + return GED_ERROR; + MAT_IDN(vol->mat); return GED_OK; @@ -3206,7 +3215,7 @@ ged_in_core(struct ged *gedp, int argc, const char *argv[]) menu = p_submodel; fn_in = submodel_in; } else if (BU_STR_EQUAL(argv[2], "vol")) { - nvals = 9; + nvals = 10; menu = p_vol; fn_in = vol_in; } else if (BU_STR_EQUAL(argv[2], "hf")) { diff --git a/src/libged/unhide/unhide.c b/src/libged/unhide/unhide.c index c0c2289117a..7ed3bc0d0ae 100644 --- a/src/libged/unhide/unhide.c +++ b/src/libged/unhide/unhide.c @@ -1,7 +1,7 @@ /* U N H I D E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/units/units.c b/src/libged/units/units.c index a434269f20f..cee8fabe85d 100644 --- a/src/libged/units/units.c +++ b/src/libged/units/units.c @@ -1,7 +1,7 @@ /* U N I T S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/v2m_point/v2m_point.c b/src/libged/v2m_point/v2m_point.c index f1b92dcf5de..649f87cbd77 100644 --- a/src/libged/v2m_point/v2m_point.c +++ b/src/libged/v2m_point/v2m_point.c @@ -1,7 +1,7 @@ /* V 2 M _ P O I N T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/vdraw/vdraw.c b/src/libged/vdraw/vdraw.c index 42f532597fa..2fc8bc0d742 100644 --- a/src/libged/vdraw/vdraw.c +++ b/src/libged/vdraw/vdraw.c @@ -1,7 +1,7 @@ /* V D R A W . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/version/version.c b/src/libged/version/version.c index 416722f5b50..b05e00450cf 100644 --- a/src/libged/version/version.c +++ b/src/libged/version/version.c @@ -1,7 +1,7 @@ /* V E R S I O N . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/aet.c b/src/libged/view/aet.c index a847299065f..b6040844a06 100644 --- a/src/libged/view/aet.c +++ b/src/libged/view/aet.c @@ -1,7 +1,7 @@ /* A E T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/center.cpp b/src/libged/view/center.cpp index 6ae75678c63..431c2815d98 100644 --- a/src/libged/view/center.cpp +++ b/src/libged/view/center.cpp @@ -1,7 +1,7 @@ /* C E N T E R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/data_lines.c b/src/libged/view/data_lines.c index da2b5a8f673..561947dd99d 100644 --- a/src/libged/view/data_lines.c +++ b/src/libged/view/data_lines.c @@ -1,7 +1,7 @@ /* D A T A _ L I N E S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/eye.c b/src/libged/view/eye.c index fb6998e9586..f84aac4f082 100644 --- a/src/libged/view/eye.c +++ b/src/libged/view/eye.c @@ -1,7 +1,7 @@ /* E Y E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/ged_view.h b/src/libged/view/ged_view.h index f857a7d5332..ff629fb34f0 100644 --- a/src/libged/view/ged_view.h +++ b/src/libged/view/ged_view.h @@ -1,7 +1,7 @@ /* G E D _ V I E W . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/quat.c b/src/libged/view/quat.c index 99448e2ac82..4e2a9f830cd 100644 --- a/src/libged/view/quat.c +++ b/src/libged/view/quat.c @@ -1,7 +1,7 @@ /* Q U A T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/size.c b/src/libged/view/size.c index 0e6fd9de781..5eb600a357c 100644 --- a/src/libged/view/size.c +++ b/src/libged/view/size.c @@ -1,7 +1,7 @@ /* S I Z E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/snap.c b/src/libged/view/snap.c index 098cc0dc785..fdf794d6f3d 100644 --- a/src/libged/view/snap.c +++ b/src/libged/view/snap.c @@ -1,7 +1,7 @@ /* S N A P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/view.c b/src/libged/view/view.c index a42a04cceae..dd5204fb2ee 100644 --- a/src/libged/view/view.c +++ b/src/libged/view/view.c @@ -1,7 +1,7 @@ /* V I E W . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view/ypr.c b/src/libged/view/ypr.c index cc76f600755..13549d227a5 100644 --- a/src/libged/view/ypr.c +++ b/src/libged/view/ypr.c @@ -1,7 +1,7 @@ /* Y P R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view2grid_lu/view2grid_lu.c b/src/libged/view2grid_lu/view2grid_lu.c index 509958ca6a8..d825192bedb 100644 --- a/src/libged/view2grid_lu/view2grid_lu.c +++ b/src/libged/view2grid_lu/view2grid_lu.c @@ -1,7 +1,7 @@ /* V I E W 2 G R I D _ L U . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view2model/view2model.c b/src/libged/view2model/view2model.c index 3ae4ba1ea06..93050bd27b6 100644 --- a/src/libged/view2model/view2model.c +++ b/src/libged/view2model/view2model.c @@ -1,7 +1,7 @@ /* V I E W 2 M O D E L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view2model_lu/view2model_lu.c b/src/libged/view2model_lu/view2model_lu.c index a215c3a914d..651840d4373 100644 --- a/src/libged/view2model_lu/view2model_lu.c +++ b/src/libged/view2model_lu/view2model_lu.c @@ -1,7 +1,7 @@ /* V I E W 2 M O D E L _ L U . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/view2model_vec/view2model_vec.c b/src/libged/view2model_vec/view2model_vec.c index 1c2e7c8a16a..1817ba18747 100644 --- a/src/libged/view2model_vec/view2model_vec.c +++ b/src/libged/view2model_vec/view2model_vec.c @@ -1,7 +1,7 @@ /* V I E W 2 M O D E L _ V E C . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/viewdir/viewdir.c b/src/libged/viewdir/viewdir.c index bab5806647c..f4700f6fe83 100644 --- a/src/libged/viewdir/viewdir.c +++ b/src/libged/viewdir/viewdir.c @@ -1,7 +1,7 @@ /* V I E W D I R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/voxelize/voxelize.c b/src/libged/voxelize/voxelize.c index 770524ed52f..5977b20e6d4 100644 --- a/src/libged/voxelize/voxelize.c +++ b/src/libged/voxelize/voxelize.c @@ -1,7 +1,7 @@ /* V O X E L I Z E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/vrot/vrot.c b/src/libged/vrot/vrot.c index b39f3895a36..6a5de41befd 100644 --- a/src/libged/vrot/vrot.c +++ b/src/libged/vrot/vrot.c @@ -1,7 +1,7 @@ /* V R O T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/vutil.c b/src/libged/vutil.c index cbd84315ea9..0a5d1812fa5 100644 --- a/src/libged/vutil.c +++ b/src/libged/vutil.c @@ -1,7 +1,7 @@ /* V U T I L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/wcodes/wcodes.c b/src/libged/wcodes/wcodes.c index e22281ec789..dafc06cf94d 100644 --- a/src/libged/wcodes/wcodes.c +++ b/src/libged/wcodes/wcodes.c @@ -1,7 +1,7 @@ /* W C O D E S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/wdb_importFg4Section.c b/src/libged/wdb_importFg4Section.c index b1df777ef95..b53a266e781 100644 --- a/src/libged/wdb_importFg4Section.c +++ b/src/libged/wdb_importFg4Section.c @@ -1,7 +1,7 @@ /* I M P O R T F G 4 S E C T I O N . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/whatid/whatid.c b/src/libged/whatid/whatid.c index 6a33cfff3ab..ebca1a4004e 100644 --- a/src/libged/whatid/whatid.c +++ b/src/libged/whatid/whatid.c @@ -1,7 +1,7 @@ /* W H A T I D . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/which/which.cpp b/src/libged/which/which.cpp index 0f34da691e3..8f3fdc79466 100644 --- a/src/libged/which/which.cpp +++ b/src/libged/which/which.cpp @@ -1,7 +1,7 @@ /* W H I C H . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -59,13 +59,14 @@ ged_which_core(struct ged *gedp, int argc, const char *argv[]) const char *usageIds = "[options] region_id(s)"; std::map> id2names; - struct bu_opt_desc d[6]; + struct bu_opt_desc d[7]; BU_OPT(d[0], "h", "help", "", NULL, &print_help, "Print help and exit"); - BU_OPT(d[1], "s", "script", "", NULL, &sflag, "Different output formatting for scripting"); - BU_OPT(d[2], "V", "", "", NULL, &eflag, "List all active ids, even if no associated regions are found"); - BU_OPT(d[3], "U", "unused", "", NULL, &unused, "Report unused ids in the specified range"); - BU_OPT(d[4], "", "root", "", &bu_opt_vls, &root, "Search only in the tree below 'root_name'"); - BU_OPT_NULL(d[5]); + BU_OPT(d[1], "?", "", "", NULL, &print_help, ""); + BU_OPT(d[2], "s", "script", "", NULL, &sflag, "Different output formatting for scripting"); + BU_OPT(d[3], "V", "", "", NULL, &eflag, "List all active ids, even if no associated regions are found"); + BU_OPT(d[4], "U", "unused", "", NULL, &unused, "Report unused ids in the specified range"); + BU_OPT(d[5], "", "root", "", &bu_opt_vls, &root, "Search only in the tree below 'root_name'"); + BU_OPT_NULL(d[6]); GED_CHECK_DATABASE_OPEN(gedp, GED_ERROR); GED_CHECK_ARGC_GT_0(gedp, argc, GED_ERROR); diff --git a/src/libged/which_shader/which_shader.c b/src/libged/which_shader/which_shader.c index e4859652e7d..86886d0f6c2 100644 --- a/src/libged/which_shader/which_shader.c +++ b/src/libged/which_shader/which_shader.c @@ -1,7 +1,7 @@ /* W H I C H _ S H A D E R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/who/who.c b/src/libged/who/who.c index a1a4e268a9f..87f5a7114bf 100644 --- a/src/libged/who/who.c +++ b/src/libged/who/who.c @@ -1,7 +1,7 @@ /* W H O . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/wmater/wmater.c b/src/libged/wmater/wmater.c index f3ca6269de7..a5c17404a8d 100644 --- a/src/libged/wmater/wmater.c +++ b/src/libged/wmater/wmater.c @@ -1,7 +1,7 @@ /* W M A T E R . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/xpush/xpush.c b/src/libged/xpush/xpush.c index f1e631c5566..8b0474775fa 100644 --- a/src/libged/xpush/xpush.c +++ b/src/libged/xpush/xpush.c @@ -1,7 +1,7 @@ /* X P U S H . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -260,6 +260,12 @@ Copy_solid(struct ged *gedp, RT_CK_DIR(dp); + /* + struct rt_i *rtip = rt_new_rti(gedp->ged_wdbp->dbip); + if (rt_gettree(rtip, dp->d_namep) < 0) return NULL; + rt_free_rti(rtip); + */ + if (!(dp->d_flags & RT_DIR_SOLID)) { bu_vls_printf(gedp->ged_result_str, "Copy_solid: %s is not a solid!!!!\n", dp->d_namep); return RT_DIR_NULL; @@ -416,9 +422,6 @@ Do_ref_incr(struct db_i *dbip, struct rt_comb_internal *UNUSED(comb), union tree static struct directory *Copy_object(struct ged *gedp, struct directory *dp, fastf_t *xform); -static void Do_ref_incr(struct db_i *dbip, struct rt_comb_internal *comb, union tree *comb_leaf, void *user_ptr1, void *user_ptr2, void *user_ptr3, void *UNUSED(user_ptr4)); - - int ged_xpush_core(struct ged *gedp, int argc, const char *argv[]) { diff --git a/src/libged/zap/zap.c b/src/libged/zap/zap.c index bc800d26a8f..744a19316f2 100644 --- a/src/libged/zap/zap.c +++ b/src/libged/zap/zap.c @@ -1,7 +1,7 @@ /* Z A P . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libged/zoom/zoom.c b/src/libged/zoom/zoom.c index 855ac90bd9d..62d4df72188 100644 --- a/src/libged/zoom/zoom.c +++ b/src/libged/zoom/zoom.c @@ -1,7 +1,7 @@ /* Z O O M . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/bw.c b/src/libicv/bw.c index c16f1d2616e..97a329ceed8 100644 --- a/src/libicv/bw.c +++ b/src/libicv/bw.c @@ -1,7 +1,7 @@ /* B W . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/color_space.c b/src/libicv/color_space.c index b96f0ce1110..775879a3d01 100644 --- a/src/libicv/color_space.c +++ b/src/libicv/color_space.c @@ -1,7 +1,7 @@ /* C O L O R _ S P A C E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/crop.c b/src/libicv/crop.c index 699eb0e2524..2232f7f3697 100644 --- a/src/libicv/crop.c +++ b/src/libicv/crop.c @@ -1,7 +1,7 @@ /* C R O P . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/dpix.c b/src/libicv/dpix.c index a94ef78a90c..14e388f14e7 100644 --- a/src/libicv/dpix.c +++ b/src/libicv/dpix.c @@ -1,7 +1,7 @@ /* D P I X . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/encoding.c b/src/libicv/encoding.c index ad3da90462f..b379f17a481 100644 --- a/src/libicv/encoding.c +++ b/src/libicv/encoding.c @@ -1,7 +1,7 @@ /* E N C O D I N G . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/fileformat.c b/src/libicv/fileformat.c index a1e0e29d3b8..80732bda85e 100644 --- a/src/libicv/fileformat.c +++ b/src/libicv/fileformat.c @@ -1,7 +1,7 @@ /* F I L E F O R M A T . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/filter.c b/src/libicv/filter.c index fb26284f784..fab603a642a 100644 --- a/src/libicv/filter.c +++ b/src/libicv/filter.c @@ -1,7 +1,7 @@ /* F I L T E R . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/icv_private.h b/src/libicv/icv_private.h index eb4ec14fa82..0ea3998fb55 100644 --- a/src/libicv/icv_private.h +++ b/src/libicv/icv_private.h @@ -1,7 +1,7 @@ /* I C V _ P R I V A T E . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/operations.c b/src/libicv/operations.c index 1db036e6c5c..0e801f77674 100644 --- a/src/libicv/operations.c +++ b/src/libicv/operations.c @@ -1,7 +1,7 @@ /* O P E R A T I O N S . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/pix.c b/src/libicv/pix.c index 61e2212c2a4..e8bc0f22df7 100644 --- a/src/libicv/pix.c +++ b/src/libicv/pix.c @@ -1,7 +1,7 @@ /* P I X . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/png.c b/src/libicv/png.c index 7cf495d4d49..fa43cc7ea4f 100644 --- a/src/libicv/png.c +++ b/src/libicv/png.c @@ -1,7 +1,7 @@ /* P N G . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/ppm.c b/src/libicv/ppm.c index 4527163ecec..fafd2de7040 100644 --- a/src/libicv/ppm.c +++ b/src/libicv/ppm.c @@ -1,7 +1,7 @@ /* P P M . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/rot.c b/src/libicv/rot.c index 1f427438600..e7a40c835e6 100644 --- a/src/libicv/rot.c +++ b/src/libicv/rot.c @@ -1,7 +1,7 @@ /* R O T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libicv/size.c b/src/libicv/size.c index 6689d675583..b991c87e930 100644 --- a/src/libicv/size.c +++ b/src/libicv/size.c @@ -1,7 +1,7 @@ /* S I Z E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/stat.c b/src/libicv/stat.c index 6a6459175b3..ff920a0bc37 100644 --- a/src/libicv/stat.c +++ b/src/libicv/stat.c @@ -1,7 +1,7 @@ /* S T A T . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/tests/crop.c b/src/libicv/tests/crop.c index d7eabd878ed..df7a9ab0576 100644 --- a/src/libicv/tests/crop.c +++ b/src/libicv/tests/crop.c @@ -1,7 +1,7 @@ /* I C V _ C R O P . C * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/tests/fade.c b/src/libicv/tests/fade.c index 1b50aa275c3..8ed7de18799 100644 --- a/src/libicv/tests/fade.c +++ b/src/libicv/tests/fade.c @@ -1,7 +1,7 @@ /* I C V _ F A D E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/tests/filter.c b/src/libicv/tests/filter.c index a611de72e8d..2f6dc04cc76 100644 --- a/src/libicv/tests/filter.c +++ b/src/libicv/tests/filter.c @@ -1,7 +1,7 @@ /* I C V _ F I L T E R . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/tests/operations.c b/src/libicv/tests/operations.c index f9834bde401..651948e0e7d 100644 --- a/src/libicv/tests/operations.c +++ b/src/libicv/tests/operations.c @@ -1,7 +1,7 @@ /* I C V _ O P E R A T I O N S . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/tests/read_write.c b/src/libicv/tests/read_write.c index 34b10725f9f..2e0b4fb76f6 100644 --- a/src/libicv/tests/read_write.c +++ b/src/libicv/tests/read_write.c @@ -1,7 +1,7 @@ /* I C V _ R E A D _ W R I T E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/tests/rect.c b/src/libicv/tests/rect.c index f51f3de8b8c..01d723db4ac 100644 --- a/src/libicv/tests/rect.c +++ b/src/libicv/tests/rect.c @@ -1,7 +1,7 @@ /* I C V _ R E C T . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/tests/saturate.c b/src/libicv/tests/saturate.c index de88dc20438..73475871eb5 100644 --- a/src/libicv/tests/saturate.c +++ b/src/libicv/tests/saturate.c @@ -1,7 +1,7 @@ /* I C V _ S A T U R A T E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/tests/size_down.c b/src/libicv/tests/size_down.c index 14c3dbbd11f..7105d3ea663 100644 --- a/src/libicv/tests/size_down.c +++ b/src/libicv/tests/size_down.c @@ -1,7 +1,7 @@ /* I C V _ S I Z E _ D O W N . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libicv/tests/size_up.c b/src/libicv/tests/size_up.c index 396055efdba..4ddc6f718b9 100644 --- a/src/libicv/tests/size_up.c +++ b/src/libicv/tests/size_up.c @@ -1,7 +1,7 @@ /* I C V _ S I Z E _ U P . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/alloc.cpp b/src/libnmg/alloc.cpp index a3595d73f5c..f60b0579d06 100644 --- a/src/libnmg/alloc.cpp +++ b/src/libnmg/alloc.cpp @@ -1,7 +1,7 @@ /* A L L O C . C P P * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/bool.c b/src/libnmg/bool.c index 3af89923856..00bf4f6a7e7 100644 --- a/src/libnmg/bool.c +++ b/src/libnmg/bool.c @@ -1,7 +1,7 @@ /* N M G _ B O O L . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/ck.c b/src/libnmg/ck.c index a4bea6280c6..fb4b58cd72c 100644 --- a/src/libnmg/ck.c +++ b/src/libnmg/ck.c @@ -1,7 +1,7 @@ /* N M G _ C K . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/class.c b/src/libnmg/class.c index 1e1d503588f..e67ff2bd8b4 100644 --- a/src/libnmg/class.c +++ b/src/libnmg/class.c @@ -1,7 +1,7 @@ /* N M G _ C L A S S . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/copy.c b/src/libnmg/copy.c index 469039a8e5c..c675a0d1e06 100644 --- a/src/libnmg/copy.c +++ b/src/libnmg/copy.c @@ -1,7 +1,7 @@ /* N M G _ C O P Y . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/eval.c b/src/libnmg/eval.c index 203f1209803..84ebbb08e4c 100644 --- a/src/libnmg/eval.c +++ b/src/libnmg/eval.c @@ -1,7 +1,7 @@ /* N M G _ E V A L . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/extrude.c b/src/libnmg/extrude.c index 64151a3b26d..c290d51def4 100644 --- a/src/libnmg/extrude.c +++ b/src/libnmg/extrude.c @@ -1,7 +1,7 @@ /* N M G _ E X T R U D E . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/fcut.c b/src/libnmg/fcut.c index a4acbbe1a75..36f9a19d01e 100644 --- a/src/libnmg/fcut.c +++ b/src/libnmg/fcut.c @@ -1,7 +1,7 @@ /* N M G _ F C U T . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/fuse.c b/src/libnmg/fuse.c index 07e6e744f6f..52088028990 100644 --- a/src/libnmg/fuse.c +++ b/src/libnmg/fuse.c @@ -1,7 +1,7 @@ /* N M G _ F U S E . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/index.c b/src/libnmg/index.c index b75666553a6..127852ca7c9 100644 --- a/src/libnmg/index.c +++ b/src/libnmg/index.c @@ -1,7 +1,7 @@ /* N M G _ I N D E X . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/info.c b/src/libnmg/info.c index 1642d8e3fc4..775c3809443 100644 --- a/src/libnmg/info.c +++ b/src/libnmg/info.c @@ -1,7 +1,7 @@ /* N M G _ I N F O . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/inter.c b/src/libnmg/inter.c index 2ad2320549a..f54c55b23e8 100644 --- a/src/libnmg/inter.c +++ b/src/libnmg/inter.c @@ -1,7 +1,7 @@ /* N M G _ I N T E R . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/isect.c b/src/libnmg/isect.c index 2935c915d42..8e5ff289ac9 100644 --- a/src/libnmg/isect.c +++ b/src/libnmg/isect.c @@ -1,7 +1,7 @@ /* N M G _ R T _ I S E C T . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/junk.c b/src/libnmg/junk.c index 030102c8839..ee18034b8ca 100644 --- a/src/libnmg/junk.c +++ b/src/libnmg/junk.c @@ -1,7 +1,7 @@ /* N M G _ J U N K . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/manif.c b/src/libnmg/manif.c index 8548650e674..b99292486a0 100644 --- a/src/libnmg/manif.c +++ b/src/libnmg/manif.c @@ -1,7 +1,7 @@ /* N M G _ M A N I F . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/mesh.c b/src/libnmg/mesh.c index c481b1f797f..9846fa0b13a 100644 --- a/src/libnmg/mesh.c +++ b/src/libnmg/mesh.c @@ -1,7 +1,7 @@ /* N M G _ M E S H . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/misc.c b/src/libnmg/misc.c index 57c6323b5da..7bc49a2699c 100644 --- a/src/libnmg/misc.c +++ b/src/libnmg/misc.c @@ -1,7 +1,7 @@ /* N M G _ M I S C . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/mk.c b/src/libnmg/mk.c index e0645b5a8fb..48453f40016 100644 --- a/src/libnmg/mk.c +++ b/src/libnmg/mk.c @@ -1,7 +1,7 @@ /* N M G _ M K . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/mod.c b/src/libnmg/mod.c index 564c120206d..6c321bd4c80 100644 --- a/src/libnmg/mod.c +++ b/src/libnmg/mod.c @@ -1,7 +1,7 @@ /* N M G _ M O D . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_basis.c b/src/libnmg/nurb_basis.c index 3e3046bb698..ac36ded1475 100644 --- a/src/libnmg/nurb_basis.c +++ b/src/libnmg/nurb_basis.c @@ -1,7 +1,7 @@ /* N U R B _ B A S I S . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_bezier.c b/src/libnmg/nurb_bezier.c index f9425ec310e..83515a56178 100644 --- a/src/libnmg/nurb_bezier.c +++ b/src/libnmg/nurb_bezier.c @@ -1,7 +1,7 @@ /* N U R B _ B E Z I E R . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_bound.c b/src/libnmg/nurb_bound.c index d624a9f7c21..bf4a778187b 100644 --- a/src/libnmg/nurb_bound.c +++ b/src/libnmg/nurb_bound.c @@ -1,7 +1,7 @@ /* N U R B _ B O U N D . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_c2.c b/src/libnmg/nurb_c2.c index 0455663d029..1ccba2d5fe0 100644 --- a/src/libnmg/nurb_c2.c +++ b/src/libnmg/nurb_c2.c @@ -1,7 +1,7 @@ /* N U R B _ C 2 . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_copy.c b/src/libnmg/nurb_copy.c index 37a8afc0191..4d4133514c2 100644 --- a/src/libnmg/nurb_copy.c +++ b/src/libnmg/nurb_copy.c @@ -1,7 +1,7 @@ /* N U R B _ C O P Y . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_diff.c b/src/libnmg/nurb_diff.c index 25e4f8ecc1a..92a5fc77682 100644 --- a/src/libnmg/nurb_diff.c +++ b/src/libnmg/nurb_diff.c @@ -1,7 +1,7 @@ /* N U R B _ D I F F . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_eval.c b/src/libnmg/nurb_eval.c index 30521bb813b..d43d272a126 100644 --- a/src/libnmg/nurb_eval.c +++ b/src/libnmg/nurb_eval.c @@ -1,7 +1,7 @@ /* N U R B _ E V A L . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_flat.c b/src/libnmg/nurb_flat.c index 7923fae37cf..aded3279b23 100644 --- a/src/libnmg/nurb_flat.c +++ b/src/libnmg/nurb_flat.c @@ -1,7 +1,7 @@ /* N U R B _ F L A T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_interp.c b/src/libnmg/nurb_interp.c index fd8b928ac54..19dbf7d0901 100644 --- a/src/libnmg/nurb_interp.c +++ b/src/libnmg/nurb_interp.c @@ -1,7 +1,7 @@ /* N U R B _ I N T E R P . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_knot.c b/src/libnmg/nurb_knot.c index 2132d268209..4795f1b9b62 100644 --- a/src/libnmg/nurb_knot.c +++ b/src/libnmg/nurb_knot.c @@ -1,7 +1,7 @@ /* N U R B _ K N O T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_norm.c b/src/libnmg/nurb_norm.c index 74f19079505..ed2e3bcafea 100644 --- a/src/libnmg/nurb_norm.c +++ b/src/libnmg/nurb_norm.c @@ -1,7 +1,7 @@ /* N U R B _ N O R M . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_oslo_calc.c b/src/libnmg/nurb_oslo_calc.c index 30369393cbb..04d74a44cc7 100644 --- a/src/libnmg/nurb_oslo_calc.c +++ b/src/libnmg/nurb_oslo_calc.c @@ -1,7 +1,7 @@ /* O S L O _ C A L C . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_oslo_map.c b/src/libnmg/nurb_oslo_map.c index b459bb19489..1021ed0b256 100644 --- a/src/libnmg/nurb_oslo_map.c +++ b/src/libnmg/nurb_oslo_map.c @@ -1,7 +1,7 @@ /* O S L O _ M A P . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_plot.c b/src/libnmg/nurb_plot.c index a2483a13616..557e202911a 100644 --- a/src/libnmg/nurb_plot.c +++ b/src/libnmg/nurb_plot.c @@ -1,7 +1,7 @@ /* N U R B _ P L O T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_poly.c b/src/libnmg/nurb_poly.c index 49b28203fe8..a8ac2f8597b 100644 --- a/src/libnmg/nurb_poly.c +++ b/src/libnmg/nurb_poly.c @@ -1,7 +1,7 @@ /* N U R B _ P O L Y . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_ray.c b/src/libnmg/nurb_ray.c index b389000f178..e7cd3ff35fb 100644 --- a/src/libnmg/nurb_ray.c +++ b/src/libnmg/nurb_ray.c @@ -1,7 +1,7 @@ /* N U R B _ R A Y . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_refine.c b/src/libnmg/nurb_refine.c index a3c0acdfd59..b7397746a79 100644 --- a/src/libnmg/nurb_refine.c +++ b/src/libnmg/nurb_refine.c @@ -1,7 +1,7 @@ /* N U R B _ R E F I N E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_reverse.c b/src/libnmg/nurb_reverse.c index 0b8e809a2c3..357c1d4f2b7 100644 --- a/src/libnmg/nurb_reverse.c +++ b/src/libnmg/nurb_reverse.c @@ -1,7 +1,7 @@ /* N U R B _ R E V E R S E . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_solve.c b/src/libnmg/nurb_solve.c index 7d852b7cbab..d3d58864a12 100644 --- a/src/libnmg/nurb_solve.c +++ b/src/libnmg/nurb_solve.c @@ -1,7 +1,7 @@ /* N U R B _ S O L V E . C * BRL-CAD * - * Copyright (c) 1983-2020 United States Government as represented by + * Copyright (c) 1983-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_split.c b/src/libnmg/nurb_split.c index 7392e6dfe71..32dff3b66a9 100644 --- a/src/libnmg/nurb_split.c +++ b/src/libnmg/nurb_split.c @@ -1,7 +1,7 @@ /* N U R B _ S P L I T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_tess.c b/src/libnmg/nurb_tess.c index 60afc028f41..db858d21c70 100644 --- a/src/libnmg/nurb_tess.c +++ b/src/libnmg/nurb_tess.c @@ -1,7 +1,7 @@ /* N U R B _ T E S S . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_trim.c b/src/libnmg/nurb_trim.c index 2d07c17a20f..b5b2fbbc2c4 100644 --- a/src/libnmg/nurb_trim.c +++ b/src/libnmg/nurb_trim.c @@ -1,7 +1,7 @@ /* N U R B _ T R I M . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_trim_util.c b/src/libnmg/nurb_trim_util.c index e6b48be1105..6de256dbc87 100644 --- a/src/libnmg/nurb_trim_util.c +++ b/src/libnmg/nurb_trim_util.c @@ -1,7 +1,7 @@ /* N U R B _ T R I M _ U T I L . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_util.c b/src/libnmg/nurb_util.c index 8cae4af589d..22b06c44883 100644 --- a/src/libnmg/nurb_util.c +++ b/src/libnmg/nurb_util.c @@ -1,7 +1,7 @@ /* N U R B _ U T I L . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/nurb_xsplit.c b/src/libnmg/nurb_xsplit.c index 1261a04c7bf..e8e3aca46a2 100644 --- a/src/libnmg/nurb_xsplit.c +++ b/src/libnmg/nurb_xsplit.c @@ -1,7 +1,7 @@ /* N U R B _ X S P L I T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/plot.c b/src/libnmg/plot.c index 37b6b980092..003ca6eadd8 100644 --- a/src/libnmg/plot.c +++ b/src/libnmg/plot.c @@ -1,7 +1,7 @@ /* N M G _ P L O T . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/pr.c b/src/libnmg/pr.c index ca261a20b83..35174005f71 100644 --- a/src/libnmg/pr.c +++ b/src/libnmg/pr.c @@ -1,7 +1,7 @@ /* N M G _ P R . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/pt_fu.c b/src/libnmg/pt_fu.c index 09c3e05a8e7..abf1aa0735b 100644 --- a/src/libnmg/pt_fu.c +++ b/src/libnmg/pt_fu.c @@ -1,7 +1,7 @@ /* N M G _ P T _ F U . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/tests/CMakeLists.txt b/src/libnmg/tests/CMakeLists.txt index a83481717e9..72457108775 100644 --- a/src/libnmg/tests/CMakeLists.txt +++ b/src/libnmg/tests/CMakeLists.txt @@ -1,10 +1,10 @@ # nmg_mk testing BRLCAD_ADDEXEC(nmg_mk nmg_mk.c "libnmg" TEST) -add_test(NAME nmg_mk COMMAND nmg_mk) +BRLCAD_ADD_TEST(NAME nmg_mk COMMAND nmg_mk) # nmg_copy testing BRLCAD_ADDEXEC(nmg_copy nmg_copy.c "libnmg" TEST) -add_test(NAME nmg_copy COMMAND nmg_copy) +BRLCAD_ADD_TEST(NAME nmg_copy COMMAND nmg_copy) CMAKEFILES(CMakeLists.txt) diff --git a/src/libnmg/tests/nmg_copy.c b/src/libnmg/tests/nmg_copy.c index b9dc01d33d3..8969bfaa034 100644 --- a/src/libnmg/tests/nmg_copy.c +++ b/src/libnmg/tests/nmg_copy.c @@ -1,7 +1,7 @@ /* T E S T _ N M G _ C O P Y . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/tests/nmg_mk.c b/src/libnmg/tests/nmg_mk.c index d966f65f901..97806d6f4a5 100644 --- a/src/libnmg/tests/nmg_mk.c +++ b/src/libnmg/tests/nmg_mk.c @@ -1,7 +1,7 @@ /* T E S T _ N M G _ M K . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/tri.c b/src/libnmg/tri.c index b9ac1bb3c82..512e3d36680 100644 --- a/src/libnmg/tri.c +++ b/src/libnmg/tri.c @@ -1,7 +1,7 @@ /* N M G _ T R I . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libnmg/visit.c b/src/libnmg/visit.c index 1769c3b5a46..900d9360709 100644 --- a/src/libnmg/visit.c +++ b/src/libnmg/visit.c @@ -1,7 +1,7 @@ /* N M G _ V I S I T . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/init.c b/src/liboptical/init.c index 7c505cfdfc3..0ca9895c1d7 100644 --- a/src/liboptical/init.c +++ b/src/liboptical/init.c @@ -1,7 +1,7 @@ /* I N I T . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/liboslrend.cpp b/src/liboptical/liboslrend.cpp index 708fda55acc..e735e6f8864 100644 --- a/src/liboptical/liboslrend.cpp +++ b/src/liboptical/liboslrend.cpp @@ -1,7 +1,7 @@ /* L I B O S L R E N D . C P P * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/liboslrend.h b/src/liboptical/liboslrend.h index b1dcac1066c..4090223cbf9 100644 --- a/src/liboptical/liboslrend.h +++ b/src/liboptical/liboslrend.h @@ -1,7 +1,7 @@ /* L I B O S L R E N D . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * diff --git a/src/liboptical/material.c b/src/liboptical/material.c index b324fa2b4de..e5442f8284c 100644 --- a/src/liboptical/material.c +++ b/src/liboptical/material.c @@ -1,7 +1,7 @@ /* M A T E R I A L . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -72,13 +72,13 @@ mlib_add_shader(struct mfuncs **headp, struct mfuncs *mfp1) * up the shader named "material" in the table. */ static struct mfuncs * -try_load(const char *path, const char *material, const char *shader_name) +try_load(const char *path, const char *material) { - void *handle; - struct mfuncs *shader_mfuncs; - struct mfuncs *mfp; - const char *dl_error_str; char sym[MAXPATHLEN]; + const char *dl_error_str; + struct mfuncs *mfp; + struct mfuncs *shader_mfuncs; + void *handle; if (! (handle = bu_dlopen(path, BU_RTLD_NOW))) { if (OPTICAL_DEBUG&OPTICAL_DEBUG_MATERIAL) @@ -89,7 +89,7 @@ try_load(const char *path, const char *material, const char *shader_name) } /* Find the {shader}_mfuncs symbol in the library */ - snprintf(sym, MAXPATHLEN, "%s_mfuncs", shader_name); + snprintf(sym, MAXPATHLEN, "%s_mfuncs", material); shader_mfuncs = (struct mfuncs *)bu_dlsym((struct mfuncs *)handle, sym); dl_error_str=bu_dlerror(); @@ -101,26 +101,28 @@ try_load(const char *path, const char *material, const char *shader_name) shader_mfuncs = (struct mfuncs *)bu_dlsym((struct mfuncs *)handle, "shader_mfuncs"); if ((dl_error_str=bu_dlerror()) != (char *)NULL) { /* didn't find anything appropriate, give up */ - if (OPTICAL_DEBUG&OPTICAL_DEBUG_MATERIAL) bu_log("%s has no %s table, %s\n", material, sym, dl_error_str); + if (OPTICAL_DEBUG&OPTICAL_DEBUG_MATERIAL) + bu_log("%s has no %s table, %s\n", material, sym, dl_error_str); bu_dlclose(handle); return (struct mfuncs *)NULL; } } if (OPTICAL_DEBUG&OPTICAL_DEBUG_MATERIAL) - bu_log("%s_mfuncs table found\n", shader_name); + bu_log("%s_mfuncs table found\n", material); /* make sure the shader we were looking for is in the mfuncs table */ for (mfp = shader_mfuncs; mfp && mfp->mf_name != (char *)NULL; mfp++) { RT_CK_MF(mfp); - if (BU_STR_EQUAL(mfp->mf_name, shader_name)) { + if (BU_STR_EQUAL(mfp->mf_name, material)) { bu_dlclose(handle); return shader_mfuncs; /* found it! */ } } - if (OPTICAL_DEBUG&OPTICAL_DEBUG_MATERIAL) bu_log("shader '%s' not found in library\n", shader_name); + if (OPTICAL_DEBUG&OPTICAL_DEBUG_MATERIAL) + bu_log("shader '%s' not found in library\n", material); /* found the library, but not the shader */ bu_dlclose(handle); @@ -131,66 +133,71 @@ try_load(const char *path, const char *material, const char *shader_name) struct mfuncs * load_dynamic_shader(const char *material) { + char libpath[MAXPATHLEN]; /* path to shader lib */ + char mat_fname[MAXPATHLEN]; /* {material}.{EXT}, no path */ + char mat_libfname[MAXPATHLEN]; /* lib{material}.{EXT}, no path */ struct mfuncs *shader_mfuncs = (struct mfuncs *)NULL; - char libname[MAXPATHLEN]; - char libpath[MAXPATHLEN]; - char *cwd = (char *)NULL; - int old_optical_debug = OPTICAL_DEBUG; - char sh_name[128]; /* XXX constants are bogus */ - - if (strlen(material) < sizeof(sh_name)) { - bu_strlcpy(sh_name, material, sizeof(sh_name)); - } else { - bu_log("shader name too long \"%s\" %zu > %lu\n", - material, strlen(material), sizeof(sh_name)); - return (struct mfuncs *)NULL; - } if (OPTICAL_DEBUG&OPTICAL_DEBUG_MATERIAL) - bu_log("load_dynamic_shader(\"%s\")\n", sh_name); + bu_log("load_dynamic_shader(\"%s\")\n", material); - cwd = getcwd((char *)NULL, (size_t)MAXPATHLEN); + if (sizeof(mat_fname) <= strlen(material)) { + bu_log("shader name too long \"%s\" %zu > %lu\n", + material, strlen(material), sizeof(mat_fname)); + return (struct mfuncs *)NULL; + } - if (cwd) { - /* Look in the current working directory for {sh_name}.so */ - snprintf(libname, sizeof(libname), "%s/%s.so", cwd, sh_name); - if ((shader_mfuncs = try_load(libname, material, sh_name))) - goto done; + /* precalculate the potential file names, with+without lib prefix */ + bu_dir(mat_fname, sizeof(mat_fname), material, BU_DIR_LIBEXT, NULL); + bu_strlcat(mat_libfname, "lib", sizeof(mat_libfname)); + bu_strlcat(mat_libfname, mat_fname, sizeof(mat_libfname)); + /* Look in current working directory for {material}.so */ + bu_dir(libpath, sizeof(libpath), BU_DIR_CURR, mat_fname, NULL); + shader_mfuncs = try_load(libpath, material); + if (shader_mfuncs) + goto done; - /* Look in the current working directory for shaders.so */ - snprintf(libname, sizeof(libname), "%s/shaders.so", cwd); - if ((shader_mfuncs = try_load(libname, material, sh_name))) - goto done; + /* Look in current working directory for lib{material}.so */ + bu_dir(libpath, sizeof(libpath), BU_DIR_CURR, mat_libfname, NULL); + shader_mfuncs = try_load(libpath, material); + if (shader_mfuncs) + goto done; - } else { - bu_log("Cannot get current working directory\n\tSkipping local shader load\n"); - } + /* Don't specify a path in order to look in system locations + * indicated by ld (e.g., $LD_LIBRARY_PATH) for {material}.so + */ + bu_strlcpy(libpath, mat_fname, sizeof(libpath)); + shader_mfuncs = try_load(libpath, material); + if (shader_mfuncs) + goto done; - /* Look in the location indicated by $LD_LIBRARY_PATH for - * lib{sh_name}.so + /* Don't specify a path in order to look in the system locations + * indicated by ld (e.g., $LD_LIBRARY_PATH) for lib{material}.so */ - snprintf(libname, sizeof(libname), "lib%s.so", sh_name); - if ((shader_mfuncs = try_load(libname, material, sh_name))) + bu_strlcpy(libpath, mat_libfname, sizeof(libpath)); + shader_mfuncs = try_load(libpath, material); + if (shader_mfuncs) goto done; - /* Look in BRL-CAD install dir under lib dir for lib{sh_name}.so */ - snprintf(libpath, sizeof(libpath), "/lib/lib%s.so", sh_name); - bu_strlcpy(libname, bu_brlcad_root(libpath, 1), sizeof(libname)); - if ((shader_mfuncs = try_load(libname, material, sh_name))) + /* Look in installation library path for {material}.so */ + bu_dir(libpath, sizeof(libpath), BU_DIR_LIB, mat_fname, NULL); + shader_mfuncs = try_load(libpath, material); + if (shader_mfuncs) goto done; -done: - /* clean up memory allocated */ - if (cwd) free(cwd); + /* Look in installation library path for lib{material}.so */ + bu_dir(libpath, sizeof(libpath), BU_DIR_LIB, mat_libfname, NULL); + shader_mfuncs = try_load(libpath, material); + if (shader_mfuncs) + goto done; +done: /* print appropriate log messages */ if (shader_mfuncs) - bu_log("loaded from %s\n", libname); + bu_log("loaded shader [%s] from %s\n", material, libpath); else - bu_log("WARNING: shader [%s] not found\n", sh_name); - - optical_debug = old_optical_debug; + bu_log("WARNING: shader [%s] not found\n", material); return shader_mfuncs; } @@ -261,7 +268,6 @@ mlib_setup(struct mfuncs **headp, goto retry; } - /* If we get here, then the shader was not found at all (either in * the compiled-in or dynamically loaded shader sets). We set the * shader name to "default" (which should match an entry in the @@ -280,6 +286,7 @@ mlib_setup(struct mfuncs **headp, bu_vls_free(¶ms); bu_vls_free(&name); return -1; + found: rp->reg_mfuncs = (char *)mfp; rp->reg_udata = (char *)0; diff --git a/src/liboptical/photonmap.c b/src/liboptical/photonmap.c index 15a855cded6..134d5d1a8a5 100644 --- a/src/liboptical/photonmap.c +++ b/src/liboptical/photonmap.c @@ -1,7 +1,7 @@ /* P H O T O N M A P . C * BRL-CAD * - * Copyright (c) 2002-2020 United States Government as represented by + * Copyright (c) 2002-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/refract.c b/src/liboptical/refract.c index e089e2cbfa5..27889da8ebd 100644 --- a/src/liboptical/refract.c +++ b/src/liboptical/refract.c @@ -1,7 +1,7 @@ /* R E F R A C T . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/render_svc.cpp b/src/liboptical/render_svc.cpp index 06f11cddb5d..4baf0a093c6 100644 --- a/src/liboptical/render_svc.cpp +++ b/src/liboptical/render_svc.cpp @@ -1,7 +1,7 @@ /* R E N D E R _ S V C . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/render_svc.h b/src/liboptical/render_svc.h index c6af0532b03..41a733cf5d8 100644 --- a/src/liboptical/render_svc.h +++ b/src/liboptical/render_svc.h @@ -1,7 +1,7 @@ /* R E N D E R _ S V C . H * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_air.c b/src/liboptical/sh_air.c index bc38fb6d373..48ab3856327 100644 --- a/src/liboptical/sh_air.c +++ b/src/liboptical/sh_air.c @@ -1,7 +1,7 @@ /* S H _ A I R . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_billboard.c b/src/liboptical/sh_billboard.c index 8690e8b67a0..c25c50b67c5 100644 --- a/src/liboptical/sh_billboard.c +++ b/src/liboptical/sh_billboard.c @@ -1,7 +1,7 @@ /* S H _ B I L L B O A R D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_brdf.c b/src/liboptical/sh_brdf.c index da070179d4c..6627ef2ddb5 100644 --- a/src/liboptical/sh_brdf.c +++ b/src/liboptical/sh_brdf.c @@ -1,7 +1,7 @@ /* S H _ B R D F . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_camo.c b/src/liboptical/sh_camo.c index 6abfbb064a8..931d08e62a3 100644 --- a/src/liboptical/sh_camo.c +++ b/src/liboptical/sh_camo.c @@ -1,7 +1,7 @@ /* S H _ C A M O . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_cloud.c b/src/liboptical/sh_cloud.c index bf0026136fb..c090304b894 100644 --- a/src/liboptical/sh_cloud.c +++ b/src/liboptical/sh_cloud.c @@ -1,7 +1,7 @@ /* S H _ C L O U D . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_cook.c b/src/liboptical/sh_cook.c index 04e539a8e3b..989ca87a19c 100644 --- a/src/liboptical/sh_cook.c +++ b/src/liboptical/sh_cook.c @@ -1,7 +1,7 @@ /* S H _ C O O K . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_fbm.c b/src/liboptical/sh_fbm.c index 83259765e3c..a338b0b0cba 100644 --- a/src/liboptical/sh_fbm.c +++ b/src/liboptical/sh_fbm.c @@ -1,7 +1,7 @@ /* S H _ F B M . C * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_fire.c b/src/liboptical/sh_fire.c index 067e419a7b5..8e4e24161b4 100644 --- a/src/liboptical/sh_fire.c +++ b/src/liboptical/sh_fire.c @@ -1,7 +1,7 @@ /* S H _ F I R E . C * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_flat.c b/src/liboptical/sh_flat.c index bca39f3659b..7d5de8d60f1 100644 --- a/src/liboptical/sh_flat.c +++ b/src/liboptical/sh_flat.c @@ -1,7 +1,7 @@ /* S H _ F L A T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_gauss.c b/src/liboptical/sh_gauss.c index dbc4a84125e..e0c448a9722 100644 --- a/src/liboptical/sh_gauss.c +++ b/src/liboptical/sh_gauss.c @@ -1,7 +1,7 @@ /* S H _ G A U S S . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_grass.c b/src/liboptical/sh_grass.c index 47712ea5292..0240e3c8f58 100644 --- a/src/liboptical/sh_grass.c +++ b/src/liboptical/sh_grass.c @@ -1,7 +1,7 @@ /* S H _ G R A S S . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_light.c b/src/liboptical/sh_light.c index 24507467cd9..8ff673960d9 100644 --- a/src/liboptical/sh_light.c +++ b/src/liboptical/sh_light.c @@ -1,7 +1,7 @@ /* S H _ L I G H T . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_noise.c b/src/liboptical/sh_noise.c index c238ea1c81a..f3ed228e666 100644 --- a/src/liboptical/sh_noise.c +++ b/src/liboptical/sh_noise.c @@ -1,7 +1,7 @@ /* S H _ N O I S E . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_null.c b/src/liboptical/sh_null.c index 479358540a5..cd758f7dc9c 100644 --- a/src/liboptical/sh_null.c +++ b/src/liboptical/sh_null.c @@ -1,7 +1,7 @@ /* S H _ N U L L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_osl.cpp b/src/liboptical/sh_osl.cpp index b5903546097..cfc47a23b47 100644 --- a/src/liboptical/sh_osl.cpp +++ b/src/liboptical/sh_osl.cpp @@ -2,7 +2,7 @@ /* S H _ O S L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_plastic.c b/src/liboptical/sh_plastic.c index 0e3a48de5ef..3c1746a2b97 100644 --- a/src/liboptical/sh_plastic.c +++ b/src/liboptical/sh_plastic.c @@ -1,7 +1,7 @@ /* S H _ P L A S T I C . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_points.c b/src/liboptical/sh_points.c index 213a4f312c8..dcd20c2aee5 100644 --- a/src/liboptical/sh_points.c +++ b/src/liboptical/sh_points.c @@ -1,7 +1,7 @@ /* S H _ P O I N T S . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_prj.c b/src/liboptical/sh_prj.c index 8e85002dcd8..120ae6a527a 100644 --- a/src/liboptical/sh_prj.c +++ b/src/liboptical/sh_prj.c @@ -1,7 +1,7 @@ /* S H _ P R J . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_rtrans.c b/src/liboptical/sh_rtrans.c index b6411a0c379..a94f5e378f2 100644 --- a/src/liboptical/sh_rtrans.c +++ b/src/liboptical/sh_rtrans.c @@ -1,7 +1,7 @@ /* S H _ R T R A N S . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_scloud.c b/src/liboptical/sh_scloud.c index b6119638e71..38b2361a0db 100644 --- a/src/liboptical/sh_scloud.c +++ b/src/liboptical/sh_scloud.c @@ -1,7 +1,7 @@ /* S H _ S C L O U D . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_spm.c b/src/liboptical/sh_spm.c index 44c06b0d703..d12ccf54058 100644 --- a/src/liboptical/sh_spm.c +++ b/src/liboptical/sh_spm.c @@ -1,7 +1,7 @@ /* S H _ S P M . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_stack.c b/src/liboptical/sh_stack.c index 6edf234ef24..5afcb568389 100644 --- a/src/liboptical/sh_stack.c +++ b/src/liboptical/sh_stack.c @@ -1,7 +1,7 @@ /* S H _ S T A C K . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_stxt.c b/src/liboptical/sh_stxt.c index 9041ac0e8fa..c5997bf4503 100644 --- a/src/liboptical/sh_stxt.c +++ b/src/liboptical/sh_stxt.c @@ -1,7 +1,7 @@ /* S H _ S T X T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_tcl.c b/src/liboptical/sh_tcl.c index d05976833b9..e07408cea1c 100644 --- a/src/liboptical/sh_tcl.c +++ b/src/liboptical/sh_tcl.c @@ -1,7 +1,7 @@ /* S H _ T C L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_text.c b/src/liboptical/sh_text.c index 4da88ac9897..dfe7c534c1f 100644 --- a/src/liboptical/sh_text.c +++ b/src/liboptical/sh_text.c @@ -1,7 +1,7 @@ /* S H _ T E X T . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_toon.c b/src/liboptical/sh_toon.c index e35694c33d6..7bdb46a08bc 100644 --- a/src/liboptical/sh_toon.c +++ b/src/liboptical/sh_toon.c @@ -1,7 +1,7 @@ /* S H _ T O O N . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_toyota.c b/src/liboptical/sh_toyota.c index f0326d60609..b16b9425881 100644 --- a/src/liboptical/sh_toyota.c +++ b/src/liboptical/sh_toyota.c @@ -1,7 +1,7 @@ /* S H _ T O Y O T A . C * BRL-CAD * - * Copyright (c) 1992-2020 United States Government as represented by + * Copyright (c) 1992-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_treetherm.c b/src/liboptical/sh_treetherm.c index 66da331705c..5b0e805683d 100644 --- a/src/liboptical/sh_treetherm.c +++ b/src/liboptical/sh_treetherm.c @@ -1,7 +1,7 @@ /* S H _ T R E E T H E R M . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/sh_xxx.c b/src/liboptical/sh_xxx.c index 297d89255d6..e8e62972907 100644 --- a/src/liboptical/sh_xxx.c +++ b/src/liboptical/sh_xxx.c @@ -1,7 +1,7 @@ /* S H _ X X X . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -35,9 +35,7 @@ * edit the xxx_render function to do the actual rendering * * If you are building a dynamically loaded shader, compile this into a - * shared library called "shadername.so". If you have a number of shaders - * for you are adding, you can create a single library called "shaders.so" - * which contains all of your DSO shaders. + * shared library called "shadername.so" or "libshadername.so". * * RT will look in the following locations for DSO shaders: * ./ diff --git a/src/liboptical/shade.c b/src/liboptical/shade.c index 1722cbf1fa8..c64a0955d84 100644 --- a/src/liboptical/shade.c +++ b/src/liboptical/shade.c @@ -1,7 +1,7 @@ /* S H A D E . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/vers.c b/src/liboptical/vers.c index 893cc5c6202..fa38eea1ff0 100644 --- a/src/liboptical/vers.c +++ b/src/liboptical/vers.c @@ -1,7 +1,7 @@ /* V E R S . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/liboptical/wray.c b/src/liboptical/wray.c index 648777c6fe8..4708302e4c1 100644 --- a/src/liboptical/wray.c +++ b/src/liboptical/wray.c @@ -1,7 +1,7 @@ /* W R A Y . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpc/gecode_librt_test.cpp b/src/libpc/gecode_librt_test.cpp index 14e6468fb96..cbc13612cb0 100644 --- a/src/libpc/gecode_librt_test.cpp +++ b/src/libpc/gecode_librt_test.cpp @@ -1,7 +1,7 @@ /* G E C O D E _ L I B R T _ T E S T . C P P * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpc/gecode_solver_test.cpp b/src/libpc/gecode_solver_test.cpp index c7489072426..e151b854c81 100644 --- a/src/libpc/gecode_solver_test.cpp +++ b/src/libpc/gecode_solver_test.cpp @@ -1,7 +1,7 @@ /* G E C O D E _ S O L V E R _ T E S T . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpc/solver_test.cpp b/src/libpc/solver_test.cpp index 9bd5588647a..ecbf364d4bb 100644 --- a/src/libpc/solver_test.cpp +++ b/src/libpc/solver_test.cpp @@ -1,7 +1,7 @@ /* S O L V E R _ T E S T . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpc/vm_test.cpp b/src/libpc/vm_test.cpp index 2d17bdd7cdb..59cf5a9b0bf 100644 --- a/src/libpc/vm_test.cpp +++ b/src/libpc/vm_test.cpp @@ -1,7 +1,7 @@ /* V M _ T E S T . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpkg/example/client.c b/src/libpkg/example/client.c index 4f95c3fc1a9..c8683e95403 100644 --- a/src/libpkg/example/client.c +++ b/src/libpkg/example/client.c @@ -1,7 +1,7 @@ /* C L I E N T . C * BRL-CAD * - * Copyright (c) 2006-2020 United States Government as represented by + * Copyright (c) 2006-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpkg/example/ncp.h b/src/libpkg/example/ncp.h index 45d31e8f4f0..7d37290ce6c 100644 --- a/src/libpkg/example/ncp.h +++ b/src/libpkg/example/ncp.h @@ -1,7 +1,7 @@ /* N C P . H * BRL-CAD * - * Copyright (c) 2006-2020 United States Government as represented by + * Copyright (c) 2006-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpkg/example/server.c b/src/libpkg/example/server.c index 5004f980094..00e46054de9 100644 --- a/src/libpkg/example/server.c +++ b/src/libpkg/example/server.c @@ -1,7 +1,7 @@ /* S E R V E R . C * BRL-CAD * - * Copyright (c) 2006-2020 United States Government as represented by + * Copyright (c) 2006-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpkg/pkg.c b/src/libpkg/pkg.c index 9ca613b0a1f..6761622ba6b 100644 --- a/src/libpkg/pkg.c +++ b/src/libpkg/pkg.c @@ -1,7 +1,7 @@ /* P K G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpkg/tpkg.c b/src/libpkg/tpkg.c index ac781d22081..8999715bcdc 100644 --- a/src/libpkg/tpkg.c +++ b/src/libpkg/tpkg.c @@ -1,7 +1,7 @@ /* T P K G . C * BRL-CAD * - * Copyright (c) 2006-2020 United States Government as represented by + * Copyright (c) 2006-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libpkg/vers.c b/src/libpkg/vers.c index 70a1e4f7278..ee57ddb56dc 100644 --- a/src/libpkg/vers.c +++ b/src/libpkg/vers.c @@ -1,7 +1,7 @@ /* V E R S . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/CMakeLists.txt b/src/librt/CMakeLists.txt index d823b7ca68f..e0f504dc0c5 100644 --- a/src/librt/CMakeLists.txt +++ b/src/librt/CMakeLists.txt @@ -19,9 +19,9 @@ endif (BRLCAD_ENABLE_OPENCL) # locally used but not needed by users of the library set(RT_LOCAL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/vds + ${CMAKE_CURRENT_SOURCE_DIR}/gdiam ${REGEX_INCLUDE_DIRS} - ${VDS_INCLUDE_DIRS} - ${GDIAM_INCLUDE_DIRS} ) BRLCAD_LIB_INCLUDE_DIRS(rt RT_INCLUDE_DIRS RT_LOCAL_INCLUDE_DIRS) @@ -68,6 +68,7 @@ set(LIBRT_SOURCES dir.c dspline.c fortray.c + gdiam/gdiam.cpp globals.c htbl.c ls.c @@ -215,10 +216,12 @@ set(LIBRT_SOURCES roots.c search.c shoot.c + timer.cpp tol.c transform.c tree.c uv.c + vds/vds.c vers.c vlist.c vshoot.c @@ -299,9 +302,6 @@ set(librt_ignored_files test_dbio.c test_nurbsfit.cpp test_root3-subd.cpp - timer-nt.c - timer42.c - timerunix.c uvpoints.cpp ) if(NOT BRLCAD_ENABLE_GCT) @@ -348,12 +348,6 @@ BRLCAD_ADDDATA(nurb_example.c sample_applications) BRLCAD_ADDDATA(raydebug.tcl sample_applications) BRLCAD_ADDDATA(CL_FILES opencl) -if(MSVC) - set(LIBRT_SOURCES ${LIBRT_SOURCES} timer-nt.c) -else(MSVC) - set(LIBRT_SOURCES ${LIBRT_SOURCES} timer42.c) -endif(MSVC) - if(BRLCAD_ENABLE_OPENCL) set(OPENCL_LIBS ${OPENCL_LIBRARIES}) endif(BRLCAD_ENABLE_OPENCL) @@ -362,27 +356,15 @@ if(BRLCAD_ENABLE_SPR) set(SPR_LIB libSPR) endif(BRLCAD_ENABLE_SPR) -BRLCAD_ADDLIB(librt "${LIBRT_SOURCES}" "${OPENCL_LIBS};${GDIAM_LIBRARY};${VDS_LIBRARY};libbrep;libnmg;libbg;libbn;libbu;${OPENNURBS_LIBRARIES};${P2T_LIBRARY};${SPR_LIB};${REGEX_LIBRARIES};${WINSOCK_LIB};${RPCRT_LIB};${STDCXX_LIBRARIES}") +BRLCAD_ADDLIB(librt "${LIBRT_SOURCES}" "${OPENCL_LIBS};libbrep;libnmg;libbg;libbn;libbu;${OPENNURBS_LIBRARIES};${REGEX_LIBRARIES};${WINSOCK_LIB};${RPCRT_LIB};${STDCXX_LIBRARIES}") set_target_properties(librt PROPERTIES VERSION 20.0.1 SOVERSION 20) if(HIDE_INTERNAL_SYMBOLS) set_property(TARGET librt APPEND PROPERTY COMPILE_DEFINITIONS "TIE_DLL_EXPORTS") set_property(TARGET librt APPEND PROPERTY COMPILE_DEFINITIONS "DB5_DLL_EXPORTS") - if(TARGET vds OR HIDE_INTERNAL_SYMBOLS_EXT) - set_property(TARGET librt APPEND PROPERTY COMPILE_DEFINITIONS "VDS_DLL_IMPORTS") - endif(TARGET vds OR HIDE_INTERNAL_SYMBOLS_EXT) - if(TARGET gdiam OR HIDE_INTERNAL_SYMBOLS_EXT) - set_property(TARGET librt APPEND PROPERTY COMPILE_DEFINITIONS "GDIAM_DLL_IMPORTS") - endif(TARGET gdiam OR HIDE_INTERNAL_SYMBOLS_EXT) if (TARGET librt-obj) set_property(TARGET librt-obj APPEND PROPERTY COMPILE_DEFINITIONS "TIE_DLL_EXPORTS") set_property(TARGET librt-obj APPEND PROPERTY COMPILE_DEFINITIONS "DB5_DLL_EXPORTS") - if(TARGET vds OR HIDE_INTERNAL_SYMBOLS_EXT) - set_property(TARGET librt-obj APPEND PROPERTY COMPILE_DEFINITIONS "VDS_DLL_IMPORTS") - endif(TARGET vds OR HIDE_INTERNAL_SYMBOLS_EXT) - if(TARGET gdiam OR HIDE_INTERNAL_SYMBOLS_EXT) - set_property(TARGET librt-obj APPEND PROPERTY COMPILE_DEFINITIONS "GDIAM_DLL_IMPORTS") - endif(TARGET gdiam OR HIDE_INTERNAL_SYMBOLS_EXT) endif (TARGET librt-obj) endif(HIDE_INTERNAL_SYMBOLS) @@ -405,6 +387,13 @@ add_subdirectory(tests) CMAKEFILES( CMakeLists.txt db_fp.cpp + vds/README + vds/COPYING + vds/vds.h + gdiam/gdiam.hpp + gdiam/gdiam_test.cpp + gdiam/LICENSE.MIT + gdiam/README ) # Local Variables: diff --git a/src/librt/attributes.c b/src/librt/attributes.c index d13287163e2..75cc20afd33 100644 --- a/src/librt/attributes.c +++ b/src/librt/attributes.c @@ -1,7 +1,7 @@ /* A T T R I B U T E S . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/bbox.c b/src/librt/bbox.c index 32bf588dd42..8c46b128c50 100644 --- a/src/librt/bbox.c +++ b/src/librt/bbox.c @@ -1,7 +1,7 @@ /* B B O X . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/binunif/binunif.c b/src/librt/binunif/binunif.c index 55071f18523..4615d763908 100644 --- a/src/librt/binunif/binunif.c +++ b/src/librt/binunif/binunif.c @@ -1,7 +1,7 @@ /* B I N U N I F . C * BRL-CAD * - * Copyright (c) 2001-2020 United States Government as represented by + * Copyright (c) 2001-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/binunif/db5_bin.c b/src/librt/binunif/db5_bin.c index c65c76b4a7e..a8fc31f3049 100644 --- a/src/librt/binunif/db5_bin.c +++ b/src/librt/binunif/db5_bin.c @@ -1,7 +1,7 @@ /* D B 5 _ B I N . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/bool.c b/src/librt/bool.c index 37d10a4fd87..9c37fd28293 100644 --- a/src/librt/bool.c +++ b/src/librt/bool.c @@ -1,7 +1,7 @@ /* B O O L . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/bundle.c b/src/librt/bundle.c index f803785806c..dd19fa90814 100644 --- a/src/librt/bundle.c +++ b/src/librt/bundle.c @@ -1,7 +1,7 @@ /* B U N D L E . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/cache.c b/src/librt/cache.c index 783b228f02a..1dd519af1a5 100644 --- a/src/librt/cache.c +++ b/src/librt/cache.c @@ -1,7 +1,7 @@ /* C A C H E . C * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/cache.h b/src/librt/cache.h index fa8a6493bef..760d99b3bf2 100644 --- a/src/librt/cache.h +++ b/src/librt/cache.h @@ -1,7 +1,7 @@ /* C A C H E . H * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/cmd.c b/src/librt/cmd.c index 4499f941c7f..9d6107f0219 100644 --- a/src/librt/cmd.c +++ b/src/librt/cmd.c @@ -1,7 +1,7 @@ /* C M D . C * BRL-CAD * - * Copyright (c) 1987-2020 United States Government as represented by + * Copyright (c) 1987-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/comb/comb.c b/src/librt/comb/comb.c index def369901f0..5647a787ca2 100644 --- a/src/librt/comb/comb.c +++ b/src/librt/comb/comb.c @@ -1,7 +1,7 @@ /* C O M B . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/comb/comb_brep.cpp b/src/librt/comb/comb_brep.cpp index f3c567a9fa1..f008e102127 100644 --- a/src/librt/comb/comb_brep.cpp +++ b/src/librt/comb/comb_brep.cpp @@ -1,7 +1,7 @@ /* C O M B _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/comb/comb_mirror.c b/src/librt/comb/comb_mirror.c index 153fb09934f..a0c9b7d8d66 100644 --- a/src/librt/comb/comb_mirror.c +++ b/src/librt/comb/comb_mirror.c @@ -1,7 +1,7 @@ /* C O M B _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/comb/db_comb.c b/src/librt/comb/db_comb.c index 8c6b0d32700..f2b23ce4c81 100644 --- a/src/librt/comb/db_comb.c +++ b/src/librt/comb/db_comb.c @@ -1,7 +1,7 @@ /* D B _ C O M B . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/constraint.c b/src/librt/constraint.c index 1c4352ef5ec..aa64ccef9ea 100644 --- a/src/librt/constraint.c +++ b/src/librt/constraint.c @@ -1,7 +1,7 @@ /* C O N S T R A I N T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/cut.c b/src/librt/cut.c index 463a2573461..c7b4e51d41b 100644 --- a/src/librt/cut.c +++ b/src/librt/cut.c @@ -1,7 +1,7 @@ /* C U T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db5_alloc.c b/src/librt/db5_alloc.c index 95ef8cc9691..574382e0825 100644 --- a/src/librt/db5_alloc.c +++ b/src/librt/db5_alloc.c @@ -1,7 +1,7 @@ /* D B 5 _ A L L O C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db5_attr.c b/src/librt/db5_attr.c index 616782eedfc..341c1578d4e 100644 --- a/src/librt/db5_attr.c +++ b/src/librt/db5_attr.c @@ -1,7 +1,7 @@ /* D B 5 _ A T T R . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db5_attr_registry.cpp b/src/librt/db5_attr_registry.cpp index 4f5aebe3b03..3ada7e294d6 100644 --- a/src/librt/db5_attr_registry.cpp +++ b/src/librt/db5_attr_registry.cpp @@ -1,7 +1,7 @@ /* D B 5 _ A T T R _ R E G I S T R Y . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db5_io.c b/src/librt/db5_io.c index 26139000822..5744f42115d 100644 --- a/src/librt/db5_io.c +++ b/src/librt/db5_io.c @@ -1,7 +1,7 @@ /* D B 5 _ I O . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -53,31 +53,40 @@ db5_header_is_valid(const unsigned char *hp) { const struct db5_ondisk_header *odp = (const struct db5_ondisk_header *)hp; - if (odp->db5h_magic1 != DB5HDR_MAGIC1) return 0; - if (hp[7] != DB5HDR_MAGIC2) return 0; + if (odp->db5h_magic1 != DB5HDR_MAGIC1) + return 0; + if (hp[7] != DB5HDR_MAGIC2) + return 0; /* hflags */ if ((odp->db5h_hflags & DB5HDR_HFLAGS_DLI_MASK) != DB5HDR_HFLAGS_DLI_HEADER_OBJECT) return 0; - if ((odp->db5h_hflags & DB5HDR_HFLAGS_NAME_PRESENT)) return 0; - if (((odp->db5h_hflags & DB5HDR_HFLAGS_OBJECT_WIDTH_MASK) >> DB5HDR_HFLAGS_OBJECT_WIDTH_SHIFT) - != DB5HDR_WIDTHCODE_8BIT) return 0; + if ((odp->db5h_hflags & DB5HDR_HFLAGS_NAME_PRESENT)) + return 0; + if (((odp->db5h_hflags & DB5HDR_HFLAGS_OBJECT_WIDTH_MASK) >> DB5HDR_HFLAGS_OBJECT_WIDTH_SHIFT) != DB5HDR_WIDTHCODE_8BIT) + return 0; /* aflags */ - if ((odp->db5h_aflags & DB5HDR_AFLAGS_ZZZ_MASK) != DB5_ZZZ_UNCOMPRESSED) return 0; - if (odp->db5h_aflags & DB5HDR_AFLAGS_PRESENT) return 0; - if (((odp->db5h_aflags & DB5HDR_AFLAGS_WIDTH_MASK) >> DB5HDR_AFLAGS_WIDTH_SHIFT) - != DB5HDR_WIDTHCODE_8BIT) return 0; + if ((odp->db5h_aflags & DB5HDR_AFLAGS_ZZZ_MASK) != DB5_ZZZ_UNCOMPRESSED) + return 0; + if (odp->db5h_aflags & DB5HDR_AFLAGS_PRESENT) + return 0; + if (((odp->db5h_aflags & DB5HDR_AFLAGS_WIDTH_MASK) >> DB5HDR_AFLAGS_WIDTH_SHIFT) != DB5HDR_WIDTHCODE_8BIT) + return 0; /* bflags */ - if ((odp->db5h_bflags & DB5HDR_BFLAGS_ZZZ_MASK) != DB5_ZZZ_UNCOMPRESSED) return 0; - if (odp->db5h_bflags & DB5HDR_BFLAGS_PRESENT) return 0; - if (((odp->db5h_bflags & DB5HDR_BFLAGS_WIDTH_MASK) >> DB5HDR_BFLAGS_WIDTH_SHIFT) - != DB5HDR_WIDTHCODE_8BIT) return 0; + if ((odp->db5h_bflags & DB5HDR_BFLAGS_ZZZ_MASK) != DB5_ZZZ_UNCOMPRESSED) + return 0; + if (odp->db5h_bflags & DB5HDR_BFLAGS_PRESENT) + return 0; + if (((odp->db5h_bflags & DB5HDR_BFLAGS_WIDTH_MASK) >> DB5HDR_BFLAGS_WIDTH_SHIFT) != DB5HDR_WIDTHCODE_8BIT) + return 0; /* major and minor type */ - if (odp->db5h_major_type != DB5_MAJORTYPE_RESERVED) return 0; - if (odp->db5h_minor_type != 0) return 0; + if (odp->db5h_major_type != DB5_MAJORTYPE_RESERVED) + return 0; + if (odp->db5h_minor_type != 0) + return 0; /* Check length, known to be 8-bit. Header len=1 8-byte chunk. */ if (hp[6] != 1) @@ -86,12 +95,16 @@ db5_header_is_valid(const unsigned char *hp) return 1; /* valid */ } + int db5_select_length_encoding(size_t len) { - if (len <= 255) return DB5HDR_WIDTHCODE_8BIT; - if (len <= 65535) return DB5HDR_WIDTHCODE_16BIT; - if (len < 0x7ffffffe) return DB5HDR_WIDTHCODE_32BIT; + if (len <= 255) + return DB5HDR_WIDTHCODE_8BIT; + if (len <= 65535) + return DB5HDR_WIDTHCODE_16BIT; + if (len < 0x7ffffffe) + return DB5HDR_WIDTHCODE_32BIT; return DB5HDR_WIDTHCODE_64BIT; } @@ -121,6 +134,7 @@ db5_decode_length(size_t *lenp, const unsigned char *cp, int format) return 0; } + size_t db5_decode_signed(size_t *lenp, const unsigned char *cp, int format) { @@ -215,22 +229,15 @@ crack_disk_header(struct db5_raw_internal *rip, const unsigned char *cp) rip->major_type = cp[4]; rip->minor_type = cp[5]; - if (RT_G_DEBUG&RT_DEBUG_DB) bu_log("crack_disk_header()\n\ - h_dli=%d, h_object_width=%d, h_name_present=%d, h_name_width=%d, \n\ - a_width=%d, a_present=%d, a_zzz=%d, \n\ - b_width=%d, b_present=%d, b_zzz=%d, major=%d, minor=%d\n", - rip->h_dli, - rip->h_object_width, - rip->h_name_present, - rip->h_name_width, - rip->a_width, - rip->a_present, - rip->a_zzz, - rip->b_width, - rip->b_present, - rip->b_zzz, - rip->major_type, - rip->minor_type); + if (RT_G_DEBUG&RT_DEBUG_DB) { + bu_log("crack_disk_header()\n" + "\th_dli=%d, h_object_width=%d, h_name_present=%d, h_name_width=%d,\n" + "\ta_width=%d, a_present=%d, a_zzz=%d,\n" + "\tb_width=%d, b_present=%d, b_zzz=%d, major=%d, minor=%d\n", + rip->h_dli, rip->h_object_width, rip->h_name_present, rip->h_name_width, + rip->a_width, rip->a_present, rip->a_zzz, + rip->b_width, rip->b_present, rip->b_zzz, rip->major_type, rip->minor_type); + } return 0; } @@ -241,15 +248,15 @@ db5_get_raw_internal_ptr(struct db5_raw_internal *rip, const unsigned char *ip) { const unsigned char *cp = ip; - if (crack_disk_header(rip, cp) < 0) return NULL; + if (crack_disk_header(rip, cp) < 0) + return NULL; cp += sizeof(struct db5_ondisk_header); cp += db5_decode_length(&rip->object_length, cp, rip->h_object_width); rip->object_length <<= 3; /* cvt 8-byte chunks to byte count */ if ((size_t)rip->object_length < sizeof(struct db5_ondisk_header)) { - bu_log("db5_get_raw_internal_ptr(): object_length=%ld is too short, database possibly corrupted\n", - rip->object_length); + bu_log("db5_get_raw_internal_ptr(): object_length=%ld is too short, database possibly corrupted\n", rip->object_length); return NULL; } @@ -265,16 +272,14 @@ db5_get_raw_internal_ptr(struct db5_raw_internal *rip, const unsigned char *ip) /* Grab name, if present */ if (rip->h_name_present) { - cp += db5_decode_length(&rip->name.ext_nbytes, - cp, rip->h_name_width); + cp += db5_decode_length(&rip->name.ext_nbytes, cp, rip->h_name_width); rip->name.ext_buf = (uint8_t *)cp; /* discard const */ cp += rip->name.ext_nbytes; } /* Point to attributes, if present */ if (rip->a_present) { - cp += db5_decode_length(&rip->attributes.ext_nbytes, - cp, rip->a_width); + cp += db5_decode_length(&rip->attributes.ext_nbytes, cp, rip->a_width); rip->attributes.ext_buf = (uint8_t *)cp; /* discard const */ #if defined(USE_BINARY_ATTRIBUTES) rip->attributes.widcode = rip->a_width; @@ -284,8 +289,7 @@ db5_get_raw_internal_ptr(struct db5_raw_internal *rip, const unsigned char *ip) /* Point to body, if present */ if (rip->b_present) { - cp += db5_decode_length(&rip->body.ext_nbytes, - cp, rip->b_width); + cp += db5_decode_length(&rip->body.ext_nbytes, cp, rip->b_width); rip->body.ext_buf = (uint8_t *)cp; /* discard const */ cp += rip->body.ext_nbytes; } @@ -295,6 +299,7 @@ db5_get_raw_internal_ptr(struct db5_raw_internal *rip, const unsigned char *ip) return ip + rip->object_length; } + int db5_get_raw_internal_fp(struct db5_raw_internal *rip, FILE *fp) { @@ -307,7 +312,8 @@ db5_get_raw_internal_fp(struct db5_raw_internal *rip, FILE *fp) unsigned char *cp; if (fread((unsigned char *)&header, sizeof header, 1, fp) != 1) { - if (feof(fp)) return -1; + if (feof(fp)) + return -1; bu_log("db5_get_raw_internal_fp(): fread header error\n"); return -2; } @@ -380,16 +386,14 @@ db5_get_raw_internal_fp(struct db5_raw_internal *rip, FILE *fp) /* Grab name, if present */ if (rip->h_name_present) { - cp += db5_decode_length(&rip->name.ext_nbytes, - cp, rip->h_name_width); + cp += db5_decode_length(&rip->name.ext_nbytes, cp, rip->h_name_width); rip->name.ext_buf = (uint8_t *)cp; /* discard const */ cp += rip->name.ext_nbytes; } /* Point to attributes, if present */ if (rip->a_present) { - cp += db5_decode_length(&rip->attributes.ext_nbytes, - cp, rip->a_width); + cp += db5_decode_length(&rip->attributes.ext_nbytes, cp, rip->a_width); rip->attributes.ext_buf = (uint8_t *)cp; /* discard const */ #if defined(USE_BINARY_ATTRIBUTES) rip->attributes.widcode = rip->a_width; @@ -399,8 +403,7 @@ db5_get_raw_internal_fp(struct db5_raw_internal *rip, FILE *fp) /* Point to body, if present */ if (rip->b_present) { - cp += db5_decode_length(&rip->body.ext_nbytes, - cp, rip->b_width); + cp += db5_decode_length(&rip->body.ext_nbytes, cp, rip->b_width); rip->body.ext_buf = (uint8_t *)cp; /* discard const */ cp += rip->body.ext_nbytes; } @@ -408,6 +411,7 @@ db5_get_raw_internal_fp(struct db5_raw_internal *rip, FILE *fp) return 0; /* success */ } + void db5_export_object3( struct bu_external *out, @@ -560,6 +564,7 @@ db5_export_object3( BU_ASSERT(out->ext_nbytes >= 8); } + void db5_make_free_object_hdr(struct bu_external *ep, size_t length) { @@ -589,6 +594,7 @@ db5_make_free_object_hdr(struct bu_external *ep, size_t length) db5_encode_length(cp, length>>3, h_width); } + void db5_make_free_object(struct bu_external *ep, size_t length) { @@ -620,6 +626,7 @@ db5_make_free_object(struct bu_external *ep, size_t length) *cp = DB5HDR_MAGIC2; } + int rt_db_cvt_to_external5( struct bu_external *ext, @@ -690,6 +697,7 @@ rt_db_cvt_to_external5( return 0; /* OK */ } + int db_wrap_v5_external(struct bu_external *ep, const char *name) { @@ -732,6 +740,7 @@ db_wrap_v5_external(struct bu_external *ep, const char *name) return 0; } + int db_put_external5(struct bu_external *ep, struct directory *dp, struct db_i *dbip) { @@ -740,7 +749,7 @@ db_put_external5(struct bu_external *ep, struct directory *dp, struct db_i *dbip BU_CK_EXTERNAL(ep); if (RT_G_DEBUG&RT_DEBUG_DB) bu_log("db_put_external5(%s) ep=%p, dbip=%p, dp=%p\n", - dp->d_namep, (void *)ep, (void *)dbip, (void *)dp); + dp->d_namep, (void *)ep, (void *)dbip, (void *)dp); if (dbip->dbi_read_only) { bu_log("db_put_external5(%s): READ-ONLY file\n", @@ -777,6 +786,7 @@ db_put_external5(struct bu_external *ep, struct directory *dp, struct db_i *dbip return 0; } + int rt_db_put_internal5( struct directory *dp, @@ -874,7 +884,8 @@ rt_db_external5_to_internal5( if ((raw.major_type == DB5_MAJORTYPE_BRLCAD) ||(raw.major_type == DB5_MAJORTYPE_BINARY_UNIF)) { /* As a convenience to older ft_import routines */ - if (mat == NULL) mat = bn_mat_identity; + if (mat == NULL) + mat = bn_mat_identity; } else { bu_log("rt_db_external5_to_internal5(%s): unable to import non-BRL-CAD object, major=%d minor=%d\n", name, raw.major_type, raw.minor_type); @@ -946,6 +957,7 @@ rt_db_external5_to_internal5( return id; /* OK */ } + int rt_db_get_internal5( struct rt_db_internal *ip, @@ -981,6 +993,7 @@ db5_export_color_table(struct bu_vls *ostr, struct db_i *dbip) rt_vls_color_map(ostr); } + void db5_import_color_table(char *cp) { @@ -994,6 +1007,7 @@ db5_import_color_table(char *cp) } } + int db5_put_color_table(struct db_i *dbip) { @@ -1012,6 +1026,7 @@ db5_put_color_table(struct db_i *dbip) return ret; } + int db5_get_attributes(const struct db_i *dbip, struct bu_attribute_value_set *avs, const struct directory *dp) { @@ -1046,6 +1061,7 @@ db5_get_attributes(const struct db_i *dbip, struct bu_attribute_value_set *avs, return 0; } + /** @} */ /* * Local Variables: diff --git a/src/librt/db5_scan.c b/src/librt/db5_scan.c index 05a889e7a0d..ae6e60b5212 100644 --- a/src/librt/db5_scan.c +++ b/src/librt/db5_scan.c @@ -1,7 +1,7 @@ /* D B 5 _ S C A N . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db5_size.cpp b/src/librt/db5_size.cpp index af33e550f8e..15a9cb1bb53 100644 --- a/src/librt/db5_size.cpp +++ b/src/librt/db5_size.cpp @@ -1,7 +1,7 @@ /* D B 5 _ S I Z E . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db5_types.c b/src/librt/db5_types.c index e786e556e63..3036925287d 100644 --- a/src/librt/db5_types.c +++ b/src/librt/db5_types.c @@ -1,7 +1,7 @@ /* D B 5 _ T Y P E S . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_alloc.c b/src/librt/db_alloc.c index 8f88f6fa745..55491bf0011 100644 --- a/src/librt/db_alloc.c +++ b/src/librt/db_alloc.c @@ -1,7 +1,7 @@ /* D B _ A L L O C . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_anim.c b/src/librt/db_anim.c index 624d9d40ac2..f72c0dbbd73 100644 --- a/src/librt/db_anim.c +++ b/src/librt/db_anim.c @@ -1,7 +1,7 @@ /* D B _ A N I M . C * BRL-CAD * - * Copyright (c) 1987-2020 United States Government as represented by + * Copyright (c) 1987-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_corrupt.c b/src/librt/db_corrupt.c index 5aa1608465d..e4d7a168325 100644 --- a/src/librt/db_corrupt.c +++ b/src/librt/db_corrupt.c @@ -1,7 +1,7 @@ /* D B _ C O R R U P T . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_diff.c b/src/librt/db_diff.c index de722103bcb..ef3d7d6141c 100644 --- a/src/librt/db_diff.c +++ b/src/librt/db_diff.c @@ -1,7 +1,7 @@ /* D B _ D I F F . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/librt/db_flags.c b/src/librt/db_flags.c index 395a855e6db..1445ed619c9 100644 --- a/src/librt/db_flags.c +++ b/src/librt/db_flags.c @@ -1,7 +1,7 @@ /* D B _ F L A G S . C * BRL-CAD * - * Copyright (c) 2006-2020 United States Government as represented by + * Copyright (c) 2006-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_flip.c b/src/librt/db_flip.c index 5970d73fbaf..2fdeb5a5d85 100644 --- a/src/librt/db_flip.c +++ b/src/librt/db_flip.c @@ -1,7 +1,7 @@ /* D B _ F L I P . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_fp.cpp b/src/librt/db_fp.cpp index 2328e5719ec..6361a3ce578 100644 --- a/src/librt/db_fp.cpp +++ b/src/librt/db_fp.cpp @@ -1,7 +1,7 @@ /* D B _ F P . C P P * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_fullpath.c b/src/librt/db_fullpath.c index 1fdcd7ccb33..c6b146f5c27 100644 --- a/src/librt/db_fullpath.c +++ b/src/librt/db_fullpath.c @@ -1,7 +1,7 @@ /* D B _ F U L L P A T H . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -257,13 +257,13 @@ db_fullpath_to_vls(struct bu_vls *vls, const struct db_full_path *full_path, con int type; const struct bn_tol tol = {BN_TOL_MAGIC, BN_TOL_DIST, BN_TOL_DIST * BN_TOL_DIST, 1e-6, 1.0 - 1e-6 }; - if (!full_path) + if (!full_path || full_path->fp_len == 0) return; BU_CK_VLS(vls); RT_CK_FULL_PATH(full_path); - if (!full_path->fp_names[0]) { + if (full_path->fp_names == NULL) { bu_vls_strcat(vls, "**NULL**"); return; } diff --git a/src/librt/db_inmem.c b/src/librt/db_inmem.c index 98edf317ef8..f5b574809a5 100644 --- a/src/librt/db_inmem.c +++ b/src/librt/db_inmem.c @@ -1,7 +1,7 @@ /* D B _ I N M E M . C * BRL-CAD * - * Copyright (c) 2006-2020 United States Government as represented by + * Copyright (c) 2006-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_io.c b/src/librt/db_io.c index a1227f02764..41082b1d5a7 100644 --- a/src/librt/db_io.c +++ b/src/librt/db_io.c @@ -1,7 +1,7 @@ /* D B _ I O . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_lookup.c b/src/librt/db_lookup.c index afeb1e7135d..58030479347 100644 --- a/src/librt/db_lookup.c +++ b/src/librt/db_lookup.c @@ -1,7 +1,7 @@ /* D B _ L O O K U P . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_match.c b/src/librt/db_match.c index b15acf9d927..7261254d4e5 100644 --- a/src/librt/db_match.c +++ b/src/librt/db_match.c @@ -1,7 +1,7 @@ /* D B _ M A T C H . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_open.c b/src/librt/db_open.c index f7bc95da80d..ff8fd8bcc98 100644 --- a/src/librt/db_open.c +++ b/src/librt/db_open.c @@ -1,7 +1,7 @@ /* D B _ O P E N . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -42,6 +42,7 @@ #include "bu/parallel.h" #include "bu/path.h" +#include "bu/app.h" #include "vmath.h" #include "rt/db4.h" #include "raytrace.h" @@ -191,11 +192,11 @@ db_open(const char *name, const char *mode) struct bu_vls fullpath = BU_VLS_INIT_ZERO; bu_free((void *)argv[1], "db_open: argv[1]"); - argv[1] = getcwd((char *)NULL, (size_t)MAXPATHLEN); + argv[1] = bu_getcwd((char *)NULL, (size_t)MAXPATHLEN); /* Something went wrong and we didn't get the CWD. So, * free up any memory allocated here and return DBI_NULL */ - if (argv[1] == NULL) { + if (BU_STR_EQUAL(argv[1], ".") || BU_STR_EMPTY(argv[1])) { bu_close_mapped_file(dbip->dbi_mf); bu_free_mapped_files(0); dbip->dbi_mf = (struct bu_mapped_file *)NULL; diff --git a/src/librt/db_scan.c b/src/librt/db_scan.c index 7be7d949a5f..1eee36460ee 100644 --- a/src/librt/db_scan.c +++ b/src/librt/db_scan.c @@ -1,7 +1,7 @@ /* D B _ S C A N . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_tree.c b/src/librt/db_tree.c index 6dc3d02a9b2..0df6e27ece8 100644 --- a/src/librt/db_tree.c +++ b/src/librt/db_tree.c @@ -1,7 +1,7 @@ /* D B _ T R E E . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/db_walk.c b/src/librt/db_walk.c index e18a47c33a1..86fa031230c 100644 --- a/src/librt/db_walk.c +++ b/src/librt/db_walk.c @@ -1,7 +1,7 @@ /* D B _ W A L K . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/dir.c b/src/librt/dir.c index e2201924b2d..71039e3e93f 100644 --- a/src/librt/dir.c +++ b/src/librt/dir.c @@ -1,7 +1,7 @@ /* D I R . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -139,7 +139,8 @@ rt_db_get_internal( id = ID_COMBINATION; } else { /* As a convenience to older ft_import4 routines */ - if (mat == NULL) mat = bn_mat_identity; + if (mat == NULL) + mat = bn_mat_identity; id = rt_id_solid(&ext); } @@ -173,6 +174,7 @@ rt_db_get_internal( return id; /* OK */ } + int rt_db_put_internal( struct directory *dp, @@ -214,6 +216,7 @@ rt_db_put_internal( return 0; /* OK */ } + int rt_fwrite_internal( FILE *fp, @@ -247,9 +250,9 @@ rt_fwrite_internal( bu_free_external(&ext); return -3; } + bu_free_external(&ext); return 0; - } @@ -277,6 +280,7 @@ rt_db_free_internal(struct rt_db_internal *ip) RT_DB_INTERNAL_INIT(ip); } + int rt_db_lookup_internal ( struct db_i *dbip, diff --git a/src/librt/dspline.c b/src/librt/dspline.c index cccc85952b6..2880711946c 100644 --- a/src/librt/dspline.c +++ b/src/librt/dspline.c @@ -1,7 +1,7 @@ /* D S P L I N E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/fortray.c b/src/librt/fortray.c index ea21495d134..7ea9dbfb72e 100644 --- a/src/librt/fortray.c +++ b/src/librt/fortray.c @@ -1,7 +1,7 @@ /* F O R T R A Y . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/other/libgdiam/LICENSE.MIT b/src/librt/gdiam/LICENSE.MIT similarity index 100% rename from src/other/libgdiam/LICENSE.MIT rename to src/librt/gdiam/LICENSE.MIT diff --git a/src/other/libgdiam/README b/src/librt/gdiam/README similarity index 100% rename from src/other/libgdiam/README rename to src/librt/gdiam/README diff --git a/src/other/libgdiam/gdiam.cpp b/src/librt/gdiam/gdiam.cpp similarity index 96% rename from src/other/libgdiam/gdiam.cpp rename to src/librt/gdiam/gdiam.cpp index 837cbca3181..cc9fade3c9f 100644 --- a/src/other/libgdiam/gdiam.cpp +++ b/src/librt/gdiam/gdiam.cpp @@ -4,47 +4,51 @@ * point-set in 3d. * * Copyright 2001 Sariel Har-Peled (ssaarriieell@cs.uiuc.edu) + * https://sarielhp.org/research/papers/00/diameter/diam_prog.html * + * Note: gdiam is available under multiple licenses - we make + * use of it under the MIT license: * - * This program is free software; you can redistribute it and/or - * modify it under the terms of either: + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: * - * * the GNU General Public License as published by the Free - * Software Foundation; either version 2, or (at your option) - * any later version. + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. * - * or + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. * - * * the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1, or (at your option) - * any later version. - * - * or - * - * * MIT license - * * Code is based on the paper: * A Practical Approach for Computing the Diameter of a - * Point-Set (in ACM Sym. on Computation Geometry - * SoCG 2001) + * Point-Set (in ACM Sym. on Computation Geometry SoCG 2001) * Sariel Har-Peled (http://www.uiuc.edu/~sariel) *-------------------------------------------------------------- * History - * 3/6/18 - * - Tobias Stohr reported & fixed a bug wis missing - * constructor for - * 8/19/16 - Clifford Yap updated the source + * 3/6/18 + * - Tobias Stohr reported & fixed a bug was missing + * constructor for + * 8/19/16 - Clifford Yapp updated the source * 3/28/01 - * This is a more robust version of the code. It should * handlereally abnoxious inputs well (i.e., points with equal * coordinates, etc. \*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ -#include -#include -#include -#include -#include +#include "common.h" +#include +#include +#include +#include +#include #include #include @@ -52,6 +56,15 @@ #include "gdiam.hpp" +/* for g++ to quell warnings */ +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push /* start new diagnostic pragma */ +# pragma GCC diagnostic ignored "-Wfloat-equal" +#elif defined(__clang__) +# pragma clang diagnostic push /* start new diagnostic pragma */ +# pragma clang diagnostic ignored "-Wfloat-equal" +#endif + /*--- Constants ---*/ #define HEAP_LIMIT 10000 @@ -79,7 +92,7 @@ class GFSPTreeNode { int size() const { return (int)( p_pnt_right - p_pnt_left ); } - const gdiam_point getCenter() const { + gdiam_point getCenter() const { return (gdiam_point)center; } int nodes_number() const { @@ -230,7 +243,7 @@ class GFSPTree { return diam.distance; } - const gdiam_point getPoint( int ind ) const { + gdiam_point getPoint( int ind ) const { return arr[ ind ]; } @@ -299,8 +312,6 @@ class GFSPTree { if ( left_size <= 0.0 ) { printf( "bb: %g %g\n", bb.min_coord( dim ), bb.max_coord( dim ) ); - printf( "left: %p, right: %p\n", - node->p_pnt_left, node->p_pnt_right ); assert( left_size > 0 ); } if ( left_size >= (node->p_pnt_right - node->p_pnt_left + 1 ) ) { @@ -371,7 +382,7 @@ class GFSPPair } void init( GFSPTreeNode * _left, GFSPTreeNode * _right, - gdiam_point proj_dir, gdiam_real dist ) + gdiam_point proj_dir, gdiam_real UNUSED(dist) ) { left = _left; right = _right; @@ -809,7 +820,7 @@ void GTreeDiamAlg::compute_by_heap_proj( double eps, threshold_brute *= 2; printf( "threshold_brute: %d\n", threshold_brute ); heap_limit += heap_delta; - } + } } count++; } @@ -865,7 +876,7 @@ void GTreeDiamAlg::addPairHeap( g_heap_pairs_p & heap, GFSPTreeNode * left, GFSPTreeNode * right, gdiam_point proj, - GFSPPair & father ) + GFSPPair &UNUSED(father) ) { const gdiam_point p( *(left->ptr_pnt_left()) ); const gdiam_point q( *(right->ptr_pnt_left()) ); @@ -1377,7 +1388,7 @@ point2d_ptr get_min_point( vec_point_2d & in, } -const void dump( vec_point_2d & vec ) +void dump( vec_point_2d & vec ) { for ( int ind = 0; ind < (int)vec.size(); ind++ ) { printf( "-- %11d (%-11g, %-11g)\n", @@ -1417,7 +1428,7 @@ void verify_convex_hull( vec_point_2d & in, vec_point_2d & ch ) *( in[ ind ] ) ) ) { area = Area( *( ch[ jnd ] ), *( ch[ jnd + 1 ] ), *( in[ ind ] ) ); - if ( fabs( area ) < 1e-12 ) + if ( fabsl( area ) < 1e-12 ) continue; printf( "Failure in progress!\n\n" ); print_pnt( ch[ jnd ] ); @@ -2125,7 +2136,7 @@ gdiam_bbox gdiam_mvbb_optimize( gdiam_point * start, int size, gdiam_bbox gdiam_approx_mvbb( gdiam_point * start, int size, - gdiam_real eps ) + gdiam_real UNUSED(eps) ) { gdiam_bbox bb, bb2; @@ -2372,6 +2383,20 @@ gdiam_bbox gdiam_approx_mvbb_grid_sample( gdiam_real * start, int size, return bb; } +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop /* end ignoring warnings */ +#elif defined(__clang__) +# pragma clang diagnostic pop /* end ignoring warnings */ +#endif /* gdiam.C - End of File ------------------------------------------*/ + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/librt/gdiam/gdiam.hpp b/src/librt/gdiam/gdiam.hpp new file mode 100644 index 00000000000..c3b00fce4bd --- /dev/null +++ b/src/librt/gdiam/gdiam.hpp @@ -0,0 +1,727 @@ +/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* + * gdiam.hpp - + * Implmeents an algorithm for computing a diameter, + * + * Copyright 2001 Sariel Har-Peled (ssaarriieell@cs.uiuc.edu) + * https://sarielhp.org/research/papers/00/diameter/diam_prog.html + * + * Note: gdiam is available under multiple licenses - we make + * use of it under the MIT license: + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + * + * Code is based on the paper: + * A Practical Approach for Computing the Diameter of a Point-Set. + * Sariel Har-Peled + \*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ + +#ifndef __GDIAM__H +#define __GDIAM__H + +/* for g++ to quell warnings */ +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic push /* start new diagnostic pragma */ +# pragma GCC diagnostic ignored "-Wfloat-equal" +#elif defined(__clang__) +# pragma clang diagnostic push /* start new diagnostic pragma */ +# pragma clang diagnostic ignored "-Wfloat-equal" +#endif + +#define GDIAM_FLOAT_ZERO(val) (((val) > -1.0e-37) && ((val) < 1.0e-37)) + +#define GDIAM_DIM 3 +typedef double gdiam_real; +typedef gdiam_real gdiam_point_t[ GDIAM_DIM ]; +typedef gdiam_real gdiam_point_2d_t[ 2 ]; +typedef gdiam_real * gdiam_point_2d; +typedef gdiam_real * gdiam_point; +typedef const gdiam_real * gdiam_point_cnt; + +#ifndef __MINMAX_DEFINED +#define __MINMAX_DEFINED + +#include +#include +#include +#include +#define min std::min +#define max std::max + +#endif /* MIN_MAX */ + +template +inline void gdiam_exchange( T & a, T & b ) +{ + T tmp = a; + + a = b; + b = tmp; +} + +inline gdiam_real pnt_length( const gdiam_point pnt ) +{ + return sqrt( pnt[ 0 ] * pnt[ 0 ] + pnt[ 1 ] * pnt[ 1 ] + + pnt[ 2 ] * pnt[ 2 ] ); +} + +inline void pnt_normalize( gdiam_point pnt ) +{ + gdiam_real len = pnt_length( pnt ); + if ( GDIAM_FLOAT_ZERO(len) ) + return; + + pnt[ 0 ] /= len; + pnt[ 1 ] /= len; + pnt[ 2 ] /= len; +} + +inline void pnt_copy( gdiam_point_t dest, + gdiam_point_t src ) +{ + dest[ 0 ] = src[ 0 ]; + dest[ 1 ] = src[ 1 ]; + dest[ 2 ] = src[ 2 ]; +} +inline void pnt_zero( gdiam_point dst ) { + dst[ 0 ] = dst[ 1 ] = dst[ 2 ] = 0; +} +inline void pnt_dump( gdiam_point_cnt pnt ) { + printf( "(%g, %g, %g)\n", pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] ); +} + + +inline gdiam_real pnt_dot_prod( gdiam_point_cnt a, + gdiam_point_cnt b ) +{ + return a[ 0 ] * b[ 0 ] + + a[ 1 ] * b[ 1 ] + + a[ 2 ] * b[ 2 ]; +} + +inline void pnt_cross_prod( const gdiam_point a, + const gdiam_point b, + const gdiam_point out ) +{ + out[ 0 ] = a[ 1 ] * b[ 2 ] - a[ 2 ] * b[ 1 ]; + out[ 1 ] = - ( a[ 0 ] * b[ 2 ] - a[ 2 ] * b[ 0 ] ); + out[ 2 ] = a[ 0 ] * b[ 1 ] - a[ 1 ] * b[ 0 ]; +} + + +inline gdiam_real pnt_distance_2d( gdiam_point_2d p, + gdiam_point_2d q ) +{ + gdiam_real valx = (p[ 0 ] - q[ 0 ]); + gdiam_real valy = (p[ 1 ] - q[ 1 ]); + + return sqrt( valx * valx + valy * valy ); +} + + +inline gdiam_real pnt_distance( gdiam_point p, gdiam_point q ) +{ + gdiam_real valx = (p[ 0 ] - q[ 0 ]); + gdiam_real valy = (p[ 1 ] - q[ 1 ]); + gdiam_real valz = (p[ 2 ] - q[ 2 ]); + + return sqrt( valx * valx + valy * valy + valz * valz ); +} + +inline gdiam_real pnt_distance( gdiam_point p, gdiam_point q, + gdiam_point_cnt dir ) +{ + gdiam_real valx = (p[ 0 ] - q[ 0 ]); + gdiam_real valy = (p[ 1 ] - q[ 1 ]); + gdiam_real valz = (p[ 2 ] - q[ 2 ]); + + gdiam_real len, proj_len; + + len = sqrt( valx * valx + valy * valy + valz * valz ); + + proj_len = dir[ 0 ] * valx + dir[ 1 ] * valy + dir[ 2 ] * valz; + + return sqrt( len * len - proj_len * proj_len ); +} + +inline void pnt_init( gdiam_point pnt, + gdiam_real x, + gdiam_real y, + gdiam_real z ) +{ + pnt[ 0 ] = x; + pnt[ 1 ] = y; + pnt[ 2 ] = z; +} + + +inline void pnt_init_normalize( gdiam_point pnt, + gdiam_real x, + gdiam_real y, + gdiam_real z ) +{ + pnt[ 0 ] = x; + pnt[ 1 ] = y; + pnt[ 2 ] = z; + + pnt_normalize( pnt ); +} + +inline bool pnt_isEqual( const gdiam_point p, + const gdiam_point q ) +{ + // Assuming here the GDIAM_DIM == 3 !!!! + return ( ( GDIAM_FLOAT_ZERO(p[0] - q[0]) ) + && ( GDIAM_FLOAT_ZERO(p[0] - q[0]) ) + && ( GDIAM_FLOAT_ZERO(p[0] - q[0]) ) ); +} + +inline void pnt_scale_and_add( gdiam_point dest, + gdiam_real coef, + gdiam_point_cnt vec ) { + dest[ 0 ] += coef * vec[ 0 ]; + dest[ 1 ] += coef * vec[ 1 ]; + dest[ 2 ] += coef * vec[ 2 ]; +} + +class GPointPair +{ + public: + gdiam_real distance; + gdiam_point p, q; + + GPointPair() : p(), q() { + distance = 0.0; + } + + void init( const gdiam_point _p, + const gdiam_point _q ) { + p = _p; + q = _q; + distance = pnt_distance( p, q ); + } + void init( const gdiam_point _p, + const gdiam_point _q, + const gdiam_point proj ) { + p = _p; + q = _q; + distance = pnt_distance( p, q, proj ); + } + + void init( const gdiam_point pnt ) { + distance = 0; + p = q = pnt; + } + + void update_diam_simple( const gdiam_point _p, const gdiam_point _q ) { + gdiam_real new_dist; + + new_dist = pnt_distance( _p, _q ); + if ( new_dist <= distance ) + return; + + //printf( "new_dist: %g\n", new_dist ); + distance = new_dist; + p = _p; + q = _q; + } + void update_diam_simple( const gdiam_point _p, const gdiam_point _q, + const gdiam_point dir ) { + gdiam_real new_dist; + + new_dist = pnt_distance( _p, _q, dir ); + if ( new_dist <= distance ) + return; + + distance = new_dist; + p = _p; + q = _q; + } + + void update_diam( const gdiam_point _p, const gdiam_point _q ) { + //update_diam_simple( p, _p ); + //update_diam_simple( p, _q ); + //update_diam_simple( q, _p ); + //update_diam_simple( q, _q ); + update_diam_simple( _p, _q ); + } + void update_diam( const gdiam_point _p, const gdiam_point _q, + const gdiam_point dir ) { + //update_diam_simple( p, _p ); + //update_diam_simple( p, _q ); + //update_diam_simple( q, _p ); + //update_diam_simple( q, _q ); + update_diam_simple( _p, _q, dir ); + } + + + void update_diam( GPointPair & pp ) { + //update_diam_simple( p, pp.p ); + //update_diam_simple( p, pp.q ); + //update_diam_simple( q, pp.p ); + //update_diam_simple( q, pp.q ); + update_diam_simple( pp.p, pp.q ); + } +}; + + + + +class GBBox { + private: + gdiam_real min_coords[ GDIAM_DIM ]; + gdiam_real max_coords[ GDIAM_DIM ]; + + public: + void init( const GBBox & a, + const GBBox & b ) { + for (int ind = 0; ind < GDIAM_DIM; ind++ ) { + min_coords[ ind ] = min( a.min_coords[ ind ], + b.min_coords[ ind ] ); + max_coords[ ind ] = max( a.max_coords[ ind ], + b.max_coords[ ind ] ); + } + } + void dump() const { + gdiam_real prod, diff; + + prod = 1.0; + printf( "__________________________________________\n" ); + for (int ind = 0; ind < GDIAM_DIM; ind++ ) { + printf( "%d: [%g...%g]\n", ind, min_coords[ ind ], + max_coords[ ind ] ); + diff = max_coords[ ind ] - min_coords[ ind ]; + prod *= diff; + } + printf( "volume = %g\n", prod ); + printf( "\\__________________________________________\n" ); + } + + void center( gdiam_point out ) const { + for (int ind = 0; ind < GDIAM_DIM; ind++ ) { + out[ ind ] = ( min_coords[ ind ] + max_coords[ ind ] ) / 2.0; + } + } + + gdiam_real volume() const { + gdiam_real prod, val; + + prod = 1; + for ( int ind = 0; ind < GDIAM_DIM; ind++ ) { + val = length_dim( ind ); + prod *= val; + } + + return prod; + } + void init() { + for (int ind = 0; ind < GDIAM_DIM; ind++ ) { + min_coords[ ind ] = 1e20; + max_coords[ ind ] = -1e20; + } + } + /* + void dump() const { + printf( "---(" ); + for (int ind = 0; ind < GDIAM_DIM; ind++ ) { + printf( "[%g, %g] ", + min_coords[ ind ], + max_coords[ ind ] ); + } + printf( ")\n" ); + }*/ + + const gdiam_real & min_coord( int coord ) const { + return min_coords[ coord ]; + } + const gdiam_real & max_coord( int coord ) const { + return max_coords[ coord ]; + } + + void bound( const gdiam_point pnt ) { + //cout << "bounding: " << pnt << "\n"; + for ( int ind = 0; ind < GDIAM_DIM; ind++ ) { + if ( pnt[ ind ] < min_coords[ ind ] ) + min_coords[ ind ] = pnt[ ind ]; + if ( pnt[ ind ] > max_coords[ ind ] ) + max_coords[ ind ] = pnt[ ind ]; + } + } + + gdiam_real length_dim( int dim ) const { + return max_coords[ dim ] - min_coords[ dim ]; + } + int getLongestDim() const { + int dim = 0; + gdiam_real len = length_dim( 0 ); + + for ( int ind = 1; ind < GDIAM_DIM; ind++ ) + if ( length_dim( ind ) > len ) { + len = length_dim( ind ); + dim = ind; + } + + return dim; + } + gdiam_real getLongestEdge() const { + return length_dim( getLongestDim() ); + } + + gdiam_real get_diam() const + { + gdiam_real sum, val; + + sum = 0; + for ( int ind = 0; ind < GDIAM_DIM; ind++ ) { + val = length_dim( ind ); + sum += val * val; + } + + return sqrt( sum ); + } + + // in the following we assume that the length of dir is ONE!!! + // Note that the following is an overestaime - the diameter of + // projection of a cube, is bounded by the length of projections + // of its edges.... + gdiam_real get_diam_proj( gdiam_point dir ) const + { + gdiam_real sum, coord; + gdiam_real prod, val; + + //printf( "get_diam_proj: " ); + sum = 0; + for ( int ind = 0; ind < GDIAM_DIM; ind++ ) { + coord = length_dim( ind ); + //printf( "coord[%d]: %g\n",ind, coord ); + prod = coord * dir [ ind ]; + val = coord * coord - prod * prod; + assert( val >= 0 ); + sum += sqrt( val ); + } + //printf( "sum: %g, %g\n", sum, get_diam() ); + + // sum = squard diameter of the bounding box + // prod = length of projection of the diameter of cube on the + // direction. + + return get_diam(); + } + + gdiam_real get_min_coord( int dim ) const { + return min_coords[ dim ]; + } + gdiam_real get_max_coord( int dim ) const { + return max_coords[ dim ]; + } +}; + + +// gdiam_bbox is the famous - arbitrary orieted bounding box +class gdiam_bbox +{ + private: + gdiam_point_t dir_1, dir_2, dir_3; + + gdiam_real low_1, high_1; + gdiam_real low_2, high_2; + gdiam_real low_3, high_3; + bool f_init; + + public: + gdiam_bbox() { + f_init = false; + } + + gdiam_real volume() const { + gdiam_real len1, len2, len3; + + len1 = ( high_1 - low_1 ); + len2 = ( high_2 - low_2 ); + len3 = ( high_3 - low_3 ); + + return len1 * len2 * len3; + } + + + void set_third_dim_longest() { + gdiam_point_t pnt_tmp; + + if ( ( high_1 - low_1 ) > ( high_3 - low_3 ) ) { + gdiam_exchange( high_1, high_3 ); + gdiam_exchange( low_1, low_3 ); + + memcpy( pnt_tmp, dir_1, sizeof( dir_1 ) ); + //pnt_tmp = dir_1; + memcpy( dir_1, dir_3, sizeof( dir_3) ); + //dir_1 = dir_3; + memcpy( dir_3, pnt_tmp, sizeof( dir_3 ) ); + //dir_3 = pnt_tmp; + } + if ( ( high_2 - low_2 ) > ( high_3 - low_3 ) ) { + gdiam_exchange( high_2, high_3 ); + gdiam_exchange( low_2, low_3 ); + + pnt_copy( pnt_tmp, dir_2 ); + pnt_copy( dir_2, dir_3 ); + pnt_copy( dir_3, pnt_tmp ); + } + } + + gdiam_point get_dir( int ind ) { + if ( ind == 0 ) + return dir_1; + if ( ind == 1 ) + return dir_2; + if ( ind == 2 ) + return dir_3; + + assert( false ); + + return NULL; + } + + void combine( gdiam_point out, + double a_coef, double b_coef, + double c_coef ) { + for ( int ind = 0; ind < GDIAM_DIM; ind++ ) + out[ ind ] = a_coef * dir_1[ ind ] + + b_coef * dir_2[ ind ] + + c_coef * dir_3[ ind ]; + } + + void get_vertex( double sel1, double sel2, double sel3, double *p_x, double *p_y, double *p_z ) { + gdiam_real coef1, coef2, coef3; + gdiam_point_t pnt; + + coef1 = low_1 + sel1 * ( high_1 - low_1 ); + coef2 = low_2 + sel2 * ( high_2 - low_2 ); + coef3 = low_3 + sel3 * ( high_3 - low_3 ); + + pnt_zero( pnt ); + pnt_scale_and_add( pnt, coef1, dir_1 ); + pnt_scale_and_add( pnt, coef2, dir_2 ); + pnt_scale_and_add( pnt, coef3, dir_3 ); + + (*p_x) = pnt[0]; + (*p_y) = pnt[1]; + (*p_z) = pnt[2]; + + } + + + void dump_vertex( double sel1, double sel2, double sel3 ) const { + gdiam_real coef1, coef2, coef3; + + //printf( "selection: (%g, %g, %g)\n", sel1, sel2, sel3 ); + coef1 = low_1 + sel1 * ( high_1 - low_1 ); + coef2 = low_2 + sel2 * ( high_2 - low_2 ); + coef3 = low_3 + sel3 * ( high_3 - low_3 ); + + //printf( "coeficients: (%g, %g, %g)\n", + // coef1, coef2, coef3 ); + + gdiam_point_t pnt; + pnt_zero( pnt ); + + //printf( "starting...\n" ); + //pnt_dump( pnt ); + pnt_scale_and_add( pnt, coef1, dir_1 ); + //pnt_dump( pnt ); + pnt_scale_and_add( pnt, coef2, dir_2 ); + //pnt_dump( pnt ); + pnt_scale_and_add( pnt, coef3, dir_3 ); + //pnt_dump( pnt ); + + pnt_dump( pnt ); + } + + void dump() const { + printf( "-----------------------------------------------\n" ); + dump_vertex( 0, 0, 0 ); + dump_vertex( 0, 0, 1 ); + dump_vertex( 0, 1, 0 ); + dump_vertex( 0, 1, 1 ); + dump_vertex( 1, 0, 0 ); + dump_vertex( 1, 0, 1 ); + dump_vertex( 1, 1, 0 ); + dump_vertex( 1, 1, 1 ); + printf( "volume: %g\n", volume() ); + printf( "Directions:\n" ); + pnt_dump( dir_1 ); + pnt_dump( dir_2 ); + pnt_dump( dir_3 ); + printf( "prods: %g, %g, %g\n", + pnt_dot_prod( dir_1, dir_2 ), + pnt_dot_prod( dir_1, dir_3 ), + pnt_dot_prod( dir_2, dir_3 ) ); + + printf( "--------------------------------------------------\n" ); + //printf( "range_1: %g... %g\n", low_1, high_1 ); + //printf( "range_2: %g... %g\n", low_2, high_2 ); + //printf( "range_3: %g... %g\n", low_3, high_3 ); + //printf( "prd: %g\n", pnt_dot_prod( dir_1, dir_2 ) ); + //printf( "prd: %g\n", pnt_dot_prod( dir_2, dir_3 ) ); + //printf( "prd: %g\n", pnt_dot_prod( dir_1, dir_3 ) ); + } + + + void init( const GBBox & bb ) { + pnt_init( dir_1, 1, 0, 0 ); + pnt_init( dir_2, 0, 1, 0 ); + pnt_init( dir_3, 0, 0, 1 ); + + low_1 = bb.min_coord( 0 ); + high_1 = bb.max_coord( 0 ); + + low_2 = bb.min_coord( 1 ); + high_2 = bb.max_coord( 1 ); + + low_3 = bb.min_coord( 2 ); + high_3 = bb.max_coord( 2 ); + f_init = true; + } + + void init( const gdiam_point _dir_1, + const gdiam_point _dir_2, + const gdiam_point _dir_3 ) { + memset( this, 0, sizeof( gdiam_bbox ) ); + + pnt_copy( dir_1, _dir_1 ); + pnt_copy( dir_2, _dir_2 ); + pnt_copy( dir_3, _dir_3 ); + pnt_normalize( dir_1 ); + pnt_normalize( dir_2 ); + pnt_normalize( dir_3 ); + + if ( ( ! (fabs( pnt_dot_prod( dir_1, dir_2 ) ) < 1e-6 ) ) + || ( ! (fabs( pnt_dot_prod( dir_1, dir_3 ) ) < 1e-6 ) ) + || ( ! (fabs( pnt_dot_prod( dir_2, dir_3 ) ) < 1e-6 ) ) ) { + printf( "should be all close to zero: %g, %g, %g\n", + pnt_dot_prod( dir_1, dir_2 ), + pnt_dot_prod( dir_1, dir_3 ), + pnt_dot_prod( dir_2, dir_3 ) ); + pnt_dump( _dir_1 ); + pnt_dump( _dir_2 ); + pnt_dump( _dir_3 ); + fflush( stdout ); + fflush( stderr ); + assert( fabs( pnt_dot_prod( dir_1, dir_2 ) ) < 1e-6 ); + assert( fabs( pnt_dot_prod( dir_1, dir_3 ) ) < 1e-6 ); + assert( fabs( pnt_dot_prod( dir_2, dir_3 ) ) < 1e-6 ); + } + + // The following reduce the error by slightly improve the + // orthoginality of the third vector. Doing to the second + // vector is not efficient... + pnt_scale_and_add( dir_3, -pnt_dot_prod( dir_3, dir_1 ), + dir_1 ); + pnt_scale_and_add( dir_3, -pnt_dot_prod( dir_3, dir_2 ), + dir_2 ); + pnt_normalize( dir_3 ); + //printf( "__should be all close to zero: %g, %g, %g\n", + // pnt_dot_prod( dir_1, dir_2 ), + // pnt_dot_prod( dir_1, dir_3 ), + // pnt_dot_prod( dir_2, dir_3 ) ); + } + + void bound( const gdiam_point pnt ) { + gdiam_real prod_1, prod_2, prod_3; + + prod_1 = pnt_dot_prod( dir_1, pnt ); + prod_2 = pnt_dot_prod( dir_2, pnt ); + prod_3 = pnt_dot_prod( dir_3, pnt ); + + if ( ! f_init ) { + f_init = true; + low_1 = high_1 = prod_1; + low_2 = high_2 = prod_2; + low_3 = high_3 = prod_3; + return; + } + if ( prod_1 < low_1 ) + low_1 = prod_1; + if ( prod_2 < low_2 ) + low_2 = prod_2; + if ( prod_3 < low_3 ) + low_3 = prod_3; + + if ( prod_1 > high_1 ) + high_1 = prod_1; + if ( prod_2 > high_2 ) + high_2 = prod_2; + if ( prod_3 > high_3 ) + high_3 = prod_3; + } + + // compute the coordinates as if the bounding box is unit cube of + // the grid + void get_normalized_coordinates( gdiam_point in, + gdiam_point out ) { + out[ 0 ] = ( pnt_dot_prod( dir_1, in ) - low_1 ) / ( high_1 - low_1 ); + out[ 1 ] = ( pnt_dot_prod( dir_2, in ) - low_2 ) / ( high_2 - low_2 ); + out[ 2 ] = ( pnt_dot_prod( dir_3, in ) - low_3 ) / ( high_3 - low_3 ); + } + +}; + +GPointPair gdiam_approx_diam( gdiam_point * start, int size, + gdiam_real eps ); +GPointPair gdiam_approx_diam( gdiam_point * start, int size, + gdiam_real eps ); +gdiam_real gdiam_approx_diam( gdiam_real * start, int size, + gdiam_real eps ); +GPointPair gdiam_approx_diam_pair( gdiam_real * start, int size, + gdiam_real eps ); +GPointPair gdiam_approx_diam_pair_UDM( gdiam_real * start, int size, + gdiam_real eps ); +gdiam_bbox gdiam_approx_const_mvbb( gdiam_point * start, int size, + gdiam_real eps, + GBBox * p_ap_bbox ); +gdiam_point * gdiam_convert( gdiam_real * start, int size ); +gdiam_bbox gdiam_approx_mvbb( gdiam_point * start, int size, + gdiam_real eps ) ; +gdiam_bbox gdiam_approx_mvbb_grid( gdiam_point * start, int size, + int grid_size ); +gdiam_bbox gdiam_approx_mvbb_grid_sample( gdiam_point * start, int size, + int grid_size, int sample_size ); +gdiam_bbox gdiam_approx_mvbb_grid_sample( gdiam_real * start, int size, + int grid_size, int sample_size ); + + +void gdiam_generate_orthonormal_base( gdiam_point in, + gdiam_point out1, + gdiam_point out2 ); + +#if defined(__GNUC__) && !defined(__clang__) +# pragma GCC diagnostic pop /* end ignoring warnings */ +#elif defined(__clang__) +# pragma clang diagnostic pop /* end ignoring warnings */ +#endif + +#endif /* __GDIAM__H */ + + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/other/libgdiam/gdiam_test.cpp b/src/librt/gdiam/gdiam_test.cpp similarity index 71% rename from src/other/libgdiam/gdiam_test.cpp rename to src/librt/gdiam/gdiam_test.cpp index 05a8692d009..9af3956b934 100644 --- a/src/other/libgdiam/gdiam_test.cpp +++ b/src/librt/gdiam/gdiam_test.cpp @@ -4,19 +4,32 @@ * bounding box. * * Copyright 2000 Sariel Har-Peled (ssaarriieell@cs.uiuc.edu) + * https://sarielhp.org/research/papers/00/diameter/diam_prog.html * - * * the GNU General Public License as published by the Free - * Software Foundation; either version 2, or (at your option) - * any later version. + * Note: gdiam is available under multiple licenses - we make + * use of it under the MIT license: * - * or + * Permission is hereby granted, free of charge, to any person obtaining a copy of + * this software and associated documentation files (the "Software"), to deal in + * the Software without restriction, including without limitation the rights to + * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies + * of the Software, and to permit persons to whom the Software is furnished to do + * so, subject to the following conditions: * - * * the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1, or (at your option) - * any later version. + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. * * Code is based on the paper: - * A Practical Approach for Computing the Diameter of a Point-Set. + * A Practical Approach for Computing the Diameter of a + * Point-Set (in ACM Sym. on Computation Geometry SoCG 2001) * Sariel Har-Peled (http://www.uiuc.edu/~sariel) *--------------------------------------------------------------- * History: @@ -34,6 +47,7 @@ #include #include +#include "bu/app.h" #include "gdiam.hpp" /*--- Start of Code ---*/ @@ -137,6 +151,7 @@ void test_file( const char * file_name ) int main( int argc, char ** argv ) { + bu_setprogname(argv[0]); if ( argc == 1 ) { standard_test(); return 0; diff --git a/src/librt/globals.c b/src/librt/globals.c index 3ddaec26b7f..fab679df78e 100644 --- a/src/librt/globals.c +++ b/src/librt/globals.c @@ -1,7 +1,7 @@ /* G L O B A L S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/htbl.c b/src/librt/htbl.c index 330e60d4071..e1e11a88932 100644 --- a/src/librt/htbl.c +++ b/src/librt/htbl.c @@ -1,7 +1,7 @@ /* H T B L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/librt_private.h b/src/librt/librt_private.h index bbaafc50bc3..c66c302cf05 100644 --- a/src/librt/librt_private.h +++ b/src/librt/librt_private.h @@ -1,7 +1,7 @@ /* L I B R T _ P R I V A T E . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/ls.c b/src/librt/ls.c index 96702b01c48..6d8a153e146 100644 --- a/src/librt/ls.c +++ b/src/librt/ls.c @@ -1,7 +1,7 @@ /* L S . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/mater.c b/src/librt/mater.c index f777f1f006b..0ea55b68272 100644 --- a/src/librt/mater.c +++ b/src/librt/mater.c @@ -1,7 +1,7 @@ /* M A T E R . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/memalloc.c b/src/librt/memalloc.c index 39dc9f94c8a..a7c0b123bbc 100644 --- a/src/librt/memalloc.c +++ b/src/librt/memalloc.c @@ -1,7 +1,7 @@ /* M E M A L L O C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/mkbundle.c b/src/librt/mkbundle.c index 4e2a1e518f4..5bfe8bcdf67 100644 --- a/src/librt/mkbundle.c +++ b/src/librt/mkbundle.c @@ -1,7 +1,7 @@ /* M K B U N D L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/nurb_example.c b/src/librt/nurb_example.c index 370077b528c..9ebfbb9f235 100644 --- a/src/librt/nurb_example.c +++ b/src/librt/nurb_example.c @@ -1,7 +1,7 @@ /* N U R B _ E X A M P L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/op.c b/src/librt/op.c index 429d3896215..7d06df48f87 100644 --- a/src/librt/op.c +++ b/src/librt/op.c @@ -1,7 +1,7 @@ /* O P . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/pr.c b/src/librt/pr.c index c4d2e78db35..7efa3c6407a 100644 --- a/src/librt/pr.c +++ b/src/librt/pr.c @@ -1,7 +1,7 @@ /* P R . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/prcomb.c b/src/librt/prcomb.c index 0515464dcbf..a46b96dabe8 100644 --- a/src/librt/prcomb.c +++ b/src/librt/prcomb.c @@ -1,7 +1,7 @@ /* P R C O M B . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/prep.c b/src/librt/prep.c index 2c031947b10..04f4fc03c62 100644 --- a/src/librt/prep.c +++ b/src/librt/prep.c @@ -1,7 +1,7 @@ /* P R E P . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/annot/annot.c b/src/librt/primitives/annot/annot.c index 6f4c79915e0..abbce86686b 100644 --- a/src/librt/primitives/annot/annot.c +++ b/src/librt/primitives/annot/annot.c @@ -1,7 +1,7 @@ /* A N N O T . C * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/arb8/arb8.c b/src/librt/primitives/arb8/arb8.c index 187897d30b4..36429b27b7d 100644 --- a/src/librt/primitives/arb8/arb8.c +++ b/src/librt/primitives/arb8/arb8.c @@ -1,7 +1,7 @@ /* A R B 8 . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/arb8/arb8_brep.cpp b/src/librt/primitives/arb8/arb8_brep.cpp index 0f2f70de36b..959f7120c0c 100644 --- a/src/librt/primitives/arb8/arb8_brep.cpp +++ b/src/librt/primitives/arb8/arb8_brep.cpp @@ -1,7 +1,7 @@ /* A R B 8 _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/arb8/arb8_mirror.c b/src/librt/primitives/arb8/arb8_mirror.c index 805d731c920..2a0905e8521 100644 --- a/src/librt/primitives/arb8/arb8_mirror.c +++ b/src/librt/primitives/arb8/arb8_mirror.c @@ -1,7 +1,7 @@ /* A R B 8 _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/arb8/arb_edit.c b/src/librt/primitives/arb8/arb_edit.c index 60b0f5dafa3..e7f5c8dca6f 100644 --- a/src/librt/primitives/arb8/arb_edit.c +++ b/src/librt/primitives/arb8/arb_edit.c @@ -1,7 +1,7 @@ /* A R B _ E D I T . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/arbn/arbn.c b/src/librt/primitives/arbn/arbn.c index 28fbbd70bcc..de2bc16a0c5 100644 --- a/src/librt/primitives/arbn/arbn.c +++ b/src/librt/primitives/arbn/arbn.c @@ -1,7 +1,7 @@ /* A R B N . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -1169,13 +1169,14 @@ rt_arbn_get(struct bu_vls *logstr, const struct rt_db_internal *intern, const ch int rt_arbn_adjust(struct bu_vls *logstr, struct rt_db_internal *intern, int argc, const char **argv) { - struct rt_arbn_internal *arbn; - unsigned char *c; - int len; - size_t i, j; - long val; - fastf_t *new_planes; - fastf_t *array; + struct rt_arbn_internal *arbn = NULL; + unsigned char *c = NULL; + int len = 0; + size_t i = 0; + size_t j = 0; + long val = 0; + fastf_t *new_planes = NULL; + fastf_t *array = NULL; RT_CK_DB_INTERNAL(intern); diff --git a/src/librt/primitives/arbn/arbn_brep.cpp b/src/librt/primitives/arbn/arbn_brep.cpp index 3c0659d8d30..70c2ebba9eb 100644 --- a/src/librt/primitives/arbn/arbn_brep.cpp +++ b/src/librt/primitives/arbn/arbn_brep.cpp @@ -1,7 +1,7 @@ /* A R B N _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/arbn/arbn_mirror.c b/src/librt/primitives/arbn/arbn_mirror.c index a92313cbeca..e963fecb803 100644 --- a/src/librt/primitives/arbn/arbn_mirror.c +++ b/src/librt/primitives/arbn/arbn_mirror.c @@ -1,7 +1,7 @@ /* A R B N _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ars/ars.c b/src/librt/primitives/ars/ars.c index f5418058013..cd1f784f26c 100644 --- a/src/librt/primitives/ars/ars.c +++ b/src/librt/primitives/ars/ars.c @@ -1,7 +1,7 @@ /* A R S . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ars/ars_brep.cpp b/src/librt/primitives/ars/ars_brep.cpp index 28bb01e0a91..e5d97eead6a 100644 --- a/src/librt/primitives/ars/ars_brep.cpp +++ b/src/librt/primitives/ars/ars_brep.cpp @@ -1,7 +1,7 @@ /* A R S _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ars/ars_mirror.c b/src/librt/primitives/ars/ars_mirror.c index 78fe7c55f2f..3b092abe456 100644 --- a/src/librt/primitives/ars/ars_mirror.c +++ b/src/librt/primitives/ars/ars_mirror.c @@ -1,7 +1,7 @@ /* A R S _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/bot.c b/src/librt/primitives/bot/bot.c index 79600a56c09..ac40a20edd8 100644 --- a/src/librt/primitives/bot/bot.c +++ b/src/librt/primitives/bot/bot.c @@ -1,7 +1,7 @@ /* B O T . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -52,6 +52,8 @@ #include "./bot_edge.h" #include "../../librt_private.h" +//adding time only for now, delete later****** +//#include #define MAXHITS 128 @@ -422,30 +424,35 @@ rt_bot_prep_pieces(struct bot_specific *bot, int rt_bot_bbox(struct rt_db_internal *ip, point_t *min, point_t *max, const struct bn_tol *UNUSED(tol)) { struct rt_bot_internal *bot_ip; + size_t vert_index; size_t tri_index; - point_t p1, p2, p3; - size_t pt1, pt2, pt3; RT_CK_DB_INTERNAL(ip); bot_ip = (struct rt_bot_internal *)ip->idb_ptr; RT_BOT_CK_MAGIC(bot_ip); + struct bu_bitv *visit_vert = bu_bitv_new(bot_ip->num_vertices); + VSETALL((*min), INFINITY); VSETALL((*max), -INFINITY); + /* First Pass: coherently iterate through all faces of the BoT and + * mark vertices in a bit-vector that are referenced by a face. + */ for (tri_index = 0; tri_index < bot_ip->num_faces; tri_index++) { - pt1 = bot_ip->faces[tri_index*3]; - pt2 = bot_ip->faces[tri_index*3 + 1]; - pt3 = bot_ip->faces[tri_index*3 + 2]; - VMOVE(p1, &bot_ip->vertices[pt1*3]); - VMOVE(p2, &bot_ip->vertices[pt2*3]); - VMOVE(p3, &bot_ip->vertices[pt3*3]); - VMINMAX((*min), (*max), p1); - VMINMAX((*min), (*max), p2); - VMINMAX((*min), (*max), p3); - } - - /* Prevent the RPP from being 0 thickness */ + BU_BITSET(visit_vert, bot_ip->faces[tri_index*3 + X]); + BU_BITSET(visit_vert, bot_ip->faces[tri_index*3 + Y]); + BU_BITSET(visit_vert, bot_ip->faces[tri_index*3 + Z]); + } + /* Second Pass: check max and min of vertices marked */ + for(vert_index = 0; vert_index < bot_ip->num_vertices; vert_index++){ + if(BU_BITTEST(visit_vert,vert_index)){ + VMINMAX((*min), (*max), &bot_ip->vertices[vert_index*3]); + } + } + bu_bitv_free(visit_vert); + + /* Make sure the RPP created is not of zero volume */ if (NEAR_EQUAL((*min)[X], (*max)[X], SMALL_FASTF)) { (*min)[X] -= SMALL_FASTF; (*max)[X] += SMALL_FASTF; @@ -458,6 +465,7 @@ rt_bot_bbox(struct rt_db_internal *ip, point_t *min, point_t *max, const struct (*min)[Z] -= SMALL_FASTF; (*max)[Z] += SMALL_FASTF; } + return 0; } diff --git a/src/librt/primitives/bot/bot_brep.cpp b/src/librt/primitives/bot/bot_brep.cpp index d417efb621b..d7b2c9692b9 100644 --- a/src/librt/primitives/bot/bot_brep.cpp +++ b/src/librt/primitives/bot/bot_brep.cpp @@ -1,7 +1,7 @@ /* B O T _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/bot_edge.c b/src/librt/primitives/bot/bot_edge.c index 986319b1469..603ce34a7d8 100644 --- a/src/librt/primitives/bot/bot_edge.c +++ b/src/librt/primitives/bot/bot_edge.c @@ -1,7 +1,7 @@ /* B O T _ E D G E . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/bot_edge.h b/src/librt/primitives/bot/bot_edge.h index e29c0c16265..7cc48aa644c 100644 --- a/src/librt/primitives/bot/bot_edge.h +++ b/src/librt/primitives/bot/bot_edge.h @@ -1,7 +1,7 @@ /* B O T _ E D G E . H * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/bot_mirror.c b/src/librt/primitives/bot/bot_mirror.c index 0c6b90b75a3..205ebcf8f34 100644 --- a/src/librt/primitives/bot/bot_mirror.c +++ b/src/librt/primitives/bot/bot_mirror.c @@ -1,7 +1,7 @@ /* B O T _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/bot_oriented_bbox.cpp b/src/librt/primitives/bot/bot_oriented_bbox.cpp index 4e5bdec5797..f6b728f7b1e 100644 --- a/src/librt/primitives/bot/bot_oriented_bbox.cpp +++ b/src/librt/primitives/bot/bot_oriented_bbox.cpp @@ -1,7 +1,7 @@ /* B O T _ O R I E N T E D _ B B O X . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/bot_wireframe.cpp b/src/librt/primitives/bot/bot_wireframe.cpp index f560accc46f..50cd59c0b3e 100644 --- a/src/librt/primitives/bot/bot_wireframe.cpp +++ b/src/librt/primitives/bot/bot_wireframe.cpp @@ -1,7 +1,7 @@ /* B O T _ W I R E F R A M E . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/btg.c b/src/librt/primitives/bot/btg.c index 070ffca7e73..65890255f0c 100644 --- a/src/librt/primitives/bot/btg.c +++ b/src/librt/primitives/bot/btg.c @@ -1,7 +1,7 @@ /* B T G . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/btg.h b/src/librt/primitives/bot/btg.h index 6b0384bb299..aa243899c16 100644 --- a/src/librt/primitives/bot/btg.h +++ b/src/librt/primitives/bot/btg.h @@ -1,7 +1,7 @@ /* B T G . H * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/btgf.c b/src/librt/primitives/bot/btgf.c index 56d74103f96..e3852e3f826 100644 --- a/src/librt/primitives/bot/btgf.c +++ b/src/librt/primitives/bot/btgf.c @@ -1,7 +1,7 @@ /* B T G F . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/decimate.c b/src/librt/primitives/bot/decimate.c index 6f4b76066d0..f4deb98db52 100644 --- a/src/librt/primitives/bot/decimate.c +++ b/src/librt/primitives/bot/decimate.c @@ -1,7 +1,7 @@ /* D E C I M A T E . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/g_bot_include.c b/src/librt/primitives/bot/g_bot_include.c index fd7ae245e40..5cc448a5662 100644 --- a/src/librt/primitives/bot/g_bot_include.c +++ b/src/librt/primitives/bot/g_bot_include.c @@ -1,7 +1,7 @@ /* G _ B O T _ I N C L U D E . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/tie.c b/src/librt/primitives/bot/tie.c index 97ff124eaf8..dda93e11e36 100644 --- a/src/librt/primitives/bot/tie.c +++ b/src/librt/primitives/bot/tie.c @@ -1,7 +1,7 @@ /* T I E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/tie_kdtree.c b/src/librt/primitives/bot/tie_kdtree.c index 03cc20e070f..29755f99f67 100644 --- a/src/librt/primitives/bot/tie_kdtree.c +++ b/src/librt/primitives/bot/tie_kdtree.c @@ -1,7 +1,7 @@ /* T I E _ K D T R E E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bot/tieprivate.h b/src/librt/primitives/bot/tieprivate.h index ab5bc6597ae..c0c47813826 100644 --- a/src/librt/primitives/bot/tieprivate.h +++ b/src/librt/primitives/bot/tieprivate.h @@ -1,7 +1,7 @@ /* T I E P R I V A T E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/brep/brep.cpp b/src/librt/primitives/brep/brep.cpp index b84a305ad92..3bd9fe8b939 100644 --- a/src/librt/primitives/brep/brep.cpp +++ b/src/librt/primitives/brep/brep.cpp @@ -1,7 +1,7 @@ /* B R E P . C P P * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/brep/brep_debug.h b/src/librt/primitives/brep/brep_debug.h index 21f218a50ea..35527b8543d 100644 --- a/src/librt/primitives/brep/brep_debug.h +++ b/src/librt/primitives/brep/brep_debug.h @@ -1,7 +1,7 @@ /* B R E P _ D E B U G . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/brep/brep_local.h b/src/librt/primitives/brep/brep_local.h index c1dbd432de3..4ac465ecc1c 100644 --- a/src/librt/primitives/brep/brep_local.h +++ b/src/librt/primitives/brep/brep_local.h @@ -1,7 +1,7 @@ /* B R E P _ L O C A L . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bspline/bspline.cpp b/src/librt/primitives/bspline/bspline.cpp index 29a5954c12e..c3d02da5538 100644 --- a/src/librt/primitives/bspline/bspline.cpp +++ b/src/librt/primitives/bspline/bspline.cpp @@ -1,7 +1,7 @@ /* B S P L I N E . C P P * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bspline/bspline_brep.cpp b/src/librt/primitives/bspline/bspline_brep.cpp index da12c868b3b..c176894cbcd 100644 --- a/src/librt/primitives/bspline/bspline_brep.cpp +++ b/src/librt/primitives/bspline/bspline_brep.cpp @@ -1,7 +1,7 @@ /* B S P L I N E _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/bspline/bspline_mirror.c b/src/librt/primitives/bspline/bspline_mirror.c index 1447de2d51a..822e9efb5a2 100644 --- a/src/librt/primitives/bspline/bspline_mirror.c +++ b/src/librt/primitives/bspline/bspline_mirror.c @@ -1,7 +1,7 @@ /* B S P L I N E _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/cline/cline.c b/src/librt/primitives/cline/cline.c index 980505fc645..ea7b6de45f6 100644 --- a/src/librt/primitives/cline/cline.c +++ b/src/librt/primitives/cline/cline.c @@ -1,7 +1,7 @@ /* C L I N E . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/cline/cline_brep.cpp b/src/librt/primitives/cline/cline_brep.cpp index 75b52d1c835..fa647b53ec9 100644 --- a/src/librt/primitives/cline/cline_brep.cpp +++ b/src/librt/primitives/cline/cline_brep.cpp @@ -1,7 +1,7 @@ /* C L I N E _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/datum/datum.c b/src/librt/primitives/datum/datum.c index 8e831300339..fc397b845a3 100644 --- a/src/librt/primitives/datum/datum.c +++ b/src/librt/primitives/datum/datum.c @@ -1,7 +1,7 @@ /* D A T U M . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/datum/datum.h b/src/librt/primitives/datum/datum.h index 003633f6ffa..07e1feb45e1 100644 --- a/src/librt/primitives/datum/datum.h +++ b/src/librt/primitives/datum/datum.h @@ -1,7 +1,7 @@ /* D A T U M . H * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/dsp/dsp.c b/src/librt/primitives/dsp/dsp.c index cb0eeea97bf..72d6a5a70a2 100644 --- a/src/librt/primitives/dsp/dsp.c +++ b/src/librt/primitives/dsp/dsp.c @@ -1,7 +1,7 @@ /* D S P . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/dsp/dsp.h b/src/librt/primitives/dsp/dsp.h index e757a679fc5..3e0fc5ad883 100644 --- a/src/librt/primitives/dsp/dsp.h +++ b/src/librt/primitives/dsp/dsp.h @@ -1,7 +1,7 @@ /* D S P . H * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/dsp/dsp_brep.cpp b/src/librt/primitives/dsp/dsp_brep.cpp index af871908b69..d76d8c3d4e4 100644 --- a/src/librt/primitives/dsp/dsp_brep.cpp +++ b/src/librt/primitives/dsp/dsp_brep.cpp @@ -1,7 +1,7 @@ /* D S P _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -188,7 +188,7 @@ rt_dsp_brep(ON_Brep **b, const struct rt_db_internal *ip, const struct bn_tol *) ON_3dPoint *ctrlpt = new ON_3dPoint(p_ctrl); bezpoints1.Append(*ctrlpt); } - ON_BezierCurve s1_bez3d((const ON_3dPointArray)bezpoints1); + ON_BezierCurve s1_bez3d(bezpoints1); ON_NurbsCurve* s1_beznurb3d = ON_NurbsCurve::New(); s1_bez3d.GetNurbForm(*s1_beznurb3d); s1_beznurb3d->SetDomain(0.0, 1.0); @@ -238,7 +238,7 @@ rt_dsp_brep(ON_Brep **b, const struct rt_db_internal *ip, const struct bn_tol *) ON_3dPoint ctrlpt(p_ctrl); bezpoints2.Append(ctrlpt); } - ON_BezierCurve s2_bez3d((const ON_3dPointArray)bezpoints2); + ON_BezierCurve s2_bez3d(bezpoints2); ON_NurbsCurve* s2_beznurb3d = ON_NurbsCurve::New(); s2_bez3d.GetNurbForm(*s2_beznurb3d); s2_beznurb3d->SetDomain(0.0, 1.0); @@ -289,7 +289,7 @@ rt_dsp_brep(ON_Brep **b, const struct rt_db_internal *ip, const struct bn_tol *) ON_3dPoint ctrlpt(p_ctrl); bezpoints3.Append(ctrlpt); } - ON_BezierCurve s3_bez3d((const ON_3dPointArray)bezpoints3); + ON_BezierCurve s3_bez3d(bezpoints3); ON_NurbsCurve* s3_beznurb3d = ON_NurbsCurve::New(); s3_bez3d.GetNurbForm(*s3_beznurb3d); s3_beznurb3d->SetDomain(0.0, 1.0); @@ -339,7 +339,7 @@ rt_dsp_brep(ON_Brep **b, const struct rt_db_internal *ip, const struct bn_tol *) ON_3dPoint ctrlpt(p_ctrl); bezpoints4.Append(ctrlpt); } - ON_BezierCurve s4_bez3d((const ON_3dPointArray)bezpoints4); + ON_BezierCurve s4_bez3d(bezpoints4); ON_NurbsCurve* s4_beznurb3d = ON_NurbsCurve::New(); s4_bez3d.GetNurbForm(*s4_beznurb3d); s4_beznurb3d->SetDomain(0.0, 1.0); diff --git a/src/librt/primitives/dsp/dsp_mirror.c b/src/librt/primitives/dsp/dsp_mirror.c index d1840121f94..6b6abb2d59a 100644 --- a/src/librt/primitives/dsp/dsp_mirror.c +++ b/src/librt/primitives/dsp/dsp_mirror.c @@ -1,7 +1,7 @@ /* D S P _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ebm/ebm.c b/src/librt/primitives/ebm/ebm.c index a605a935a21..eea4d1ea042 100644 --- a/src/librt/primitives/ebm/ebm.c +++ b/src/librt/primitives/ebm/ebm.c @@ -1,7 +1,7 @@ /* E B M . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ebm/ebm_brep.cpp b/src/librt/primitives/ebm/ebm_brep.cpp index 0a73a2b503f..b3ba68c5b13 100644 --- a/src/librt/primitives/ebm/ebm_brep.cpp +++ b/src/librt/primitives/ebm/ebm_brep.cpp @@ -1,7 +1,7 @@ /* E B M _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ebm/ebm_mirror.c b/src/librt/primitives/ebm/ebm_mirror.c index 7ff5c951908..36276859f32 100644 --- a/src/librt/primitives/ebm/ebm_mirror.c +++ b/src/librt/primitives/ebm/ebm_mirror.c @@ -1,7 +1,7 @@ /* E B M _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ehy/ehy.c b/src/librt/primitives/ehy/ehy.c index 5b38e97502b..bf6b48ad58b 100644 --- a/src/librt/primitives/ehy/ehy.c +++ b/src/librt/primitives/ehy/ehy.c @@ -1,7 +1,7 @@ /* E H Y . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ehy/ehy_brep.cpp b/src/librt/primitives/ehy/ehy_brep.cpp index 46f9e74fbd6..4fd6aa0996d 100644 --- a/src/librt/primitives/ehy/ehy_brep.cpp +++ b/src/librt/primitives/ehy/ehy_brep.cpp @@ -1,7 +1,7 @@ /* E H Y _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ell/ell.c b/src/librt/primitives/ell/ell.c index 943c65984ec..cc91fb97b2a 100644 --- a/src/librt/primitives/ell/ell.c +++ b/src/librt/primitives/ell/ell.c @@ -1,7 +1,7 @@ /* E L L . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ell/ell_brep.cpp b/src/librt/primitives/ell/ell_brep.cpp index 9531c5b7a95..ca79f6088ec 100644 --- a/src/librt/primitives/ell/ell_brep.cpp +++ b/src/librt/primitives/ell/ell_brep.cpp @@ -1,7 +1,7 @@ /* E L L _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/ell/ell_mirror.c b/src/librt/primitives/ell/ell_mirror.c index 6cc8b5f6d8c..07636ba8c0a 100644 --- a/src/librt/primitives/ell/ell_mirror.c +++ b/src/librt/primitives/ell/ell_mirror.c @@ -1,7 +1,7 @@ /* E L L _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/epa/epa.c b/src/librt/primitives/epa/epa.c index 4ae4710af79..57d21154aee 100644 --- a/src/librt/primitives/epa/epa.c +++ b/src/librt/primitives/epa/epa.c @@ -1,7 +1,7 @@ /* E P A . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/epa/epa_brep.cpp b/src/librt/primitives/epa/epa_brep.cpp index 8a646b344a4..6eb184428c7 100644 --- a/src/librt/primitives/epa/epa_brep.cpp +++ b/src/librt/primitives/epa/epa_brep.cpp @@ -1,7 +1,7 @@ /* E P A _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/epa/epa_mirror.c b/src/librt/primitives/epa/epa_mirror.c index f9c650dad9b..4d0ae8c3d9d 100644 --- a/src/librt/primitives/epa/epa_mirror.c +++ b/src/librt/primitives/epa/epa_mirror.c @@ -1,7 +1,7 @@ /* E P A _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/eto/eto.c b/src/librt/primitives/eto/eto.c index 8c37dfa47d4..d33c0343ab2 100644 --- a/src/librt/primitives/eto/eto.c +++ b/src/librt/primitives/eto/eto.c @@ -1,7 +1,7 @@ /* E T O . C * BRL-CAD * - * Copyright (c) 1992-2020 United States Government as represented by + * Copyright (c) 1992-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/eto/eto_brep.cpp b/src/librt/primitives/eto/eto_brep.cpp index b15dbd14fcc..f1c61f8d113 100644 --- a/src/librt/primitives/eto/eto_brep.cpp +++ b/src/librt/primitives/eto/eto_brep.cpp @@ -1,7 +1,7 @@ /* E L L _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/eto/eto_mirror.c b/src/librt/primitives/eto/eto_mirror.c index 5db8cacfc78..89edb21366f 100644 --- a/src/librt/primitives/eto/eto_mirror.c +++ b/src/librt/primitives/eto/eto_mirror.c @@ -1,7 +1,7 @@ /* E T O _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/extrude/extrude.c b/src/librt/primitives/extrude/extrude.c index ca813f973ed..fb8f6c4880b 100644 --- a/src/librt/primitives/extrude/extrude.c +++ b/src/librt/primitives/extrude/extrude.c @@ -1,7 +1,7 @@ /* E X T R U D E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/extrude/extrude_brep.cpp b/src/librt/primitives/extrude/extrude_brep.cpp index b7155761abb..43e6f82d0cc 100644 --- a/src/librt/primitives/extrude/extrude_brep.cpp +++ b/src/librt/primitives/extrude/extrude_brep.cpp @@ -1,7 +1,7 @@ /* E X T R U D E _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/fixpt.h b/src/librt/primitives/fixpt.h index 48c7cee9a1d..e7c7b9317ba 100644 --- a/src/librt/primitives/fixpt.h +++ b/src/librt/primitives/fixpt.h @@ -1,7 +1,7 @@ /* F I X P T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/generic.c b/src/librt/primitives/generic.c index 7472438f9cb..dec8de85a9c 100644 --- a/src/librt/primitives/generic.c +++ b/src/librt/primitives/generic.c @@ -1,7 +1,7 @@ /* G E N E R I C . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/grip/grip.c b/src/librt/primitives/grip/grip.c index b167b73b90c..a24f3ea1f1d 100644 --- a/src/librt/primitives/grip/grip.c +++ b/src/librt/primitives/grip/grip.c @@ -1,7 +1,7 @@ /* G R I P . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/grip/grip_brep.cpp b/src/librt/primitives/grip/grip_brep.cpp index f4e1aec3d93..e2a179455bb 100644 --- a/src/librt/primitives/grip/grip_brep.cpp +++ b/src/librt/primitives/grip/grip_brep.cpp @@ -1,7 +1,7 @@ /* G R I P _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/grip/grip_mirror.c b/src/librt/primitives/grip/grip_mirror.c index 70ddbc652cb..99d660db854 100644 --- a/src/librt/primitives/grip/grip_mirror.c +++ b/src/librt/primitives/grip/grip_mirror.c @@ -1,7 +1,7 @@ /* G R I P _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/half/half.c b/src/librt/primitives/half/half.c index 2a80489856e..55cec9b768d 100644 --- a/src/librt/primitives/half/half.c +++ b/src/librt/primitives/half/half.c @@ -1,7 +1,7 @@ /* H A L F . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/half/half_brep.cpp b/src/librt/primitives/half/half_brep.cpp index 7e46bc5f2fe..be68bc9d0c5 100644 --- a/src/librt/primitives/half/half_brep.cpp +++ b/src/librt/primitives/half/half_brep.cpp @@ -1,7 +1,7 @@ /* H A L F _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/half/half_mirror.c b/src/librt/primitives/half/half_mirror.c index a476882d033..595fab92c5d 100644 --- a/src/librt/primitives/half/half_mirror.c +++ b/src/librt/primitives/half/half_mirror.c @@ -1,7 +1,7 @@ /* H A L F _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/hf/hf.c b/src/librt/primitives/hf/hf.c index daf767d6a12..7ecdffb30a0 100644 --- a/src/librt/primitives/hf/hf.c +++ b/src/librt/primitives/hf/hf.c @@ -1,7 +1,7 @@ /* H F . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/hf/hf_brep.cpp b/src/librt/primitives/hf/hf_brep.cpp index 04283557f5f..1aaae3ea7d5 100644 --- a/src/librt/primitives/hf/hf_brep.cpp +++ b/src/librt/primitives/hf/hf_brep.cpp @@ -1,7 +1,7 @@ /* H F _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/hrt/hrt.c b/src/librt/primitives/hrt/hrt.c index 52ccd88f8d2..307be7de468 100644 --- a/src/librt/primitives/hrt/hrt.c +++ b/src/librt/primitives/hrt/hrt.c @@ -1,7 +1,7 @@ /* H R T . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/hrt/hrt_mirror.c b/src/librt/primitives/hrt/hrt_mirror.c index 001378da30b..b0034a9f12c 100644 --- a/src/librt/primitives/hrt/hrt_mirror.c +++ b/src/librt/primitives/hrt/hrt_mirror.c @@ -1,7 +1,7 @@ /* H R T _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/hyp/hyp.c b/src/librt/primitives/hyp/hyp.c index 4528a294032..04fbb6c99f0 100644 --- a/src/librt/primitives/hyp/hyp.c +++ b/src/librt/primitives/hyp/hyp.c @@ -1,7 +1,7 @@ /* H Y P . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/hyp/hyp_brep.cpp b/src/librt/primitives/hyp/hyp_brep.cpp index cd480b5f749..467d7ee07d9 100644 --- a/src/librt/primitives/hyp/hyp_brep.cpp +++ b/src/librt/primitives/hyp/hyp_brep.cpp @@ -1,7 +1,7 @@ /* H Y P _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/hyp/hyp_mirror.c b/src/librt/primitives/hyp/hyp_mirror.c index b714ad15a65..2afa7cf92ae 100644 --- a/src/librt/primitives/hyp/hyp_mirror.c +++ b/src/librt/primitives/hyp/hyp_mirror.c @@ -1,7 +1,7 @@ /* H Y P _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/joint/joint.c b/src/librt/primitives/joint/joint.c index c9cc07f4762..8d7906d687f 100644 --- a/src/librt/primitives/joint/joint.c +++ b/src/librt/primitives/joint/joint.c @@ -1,7 +1,7 @@ /* J O I N T . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/joint/joint_brep.cpp b/src/librt/primitives/joint/joint_brep.cpp index fb8b8b0081b..dd5e7c0fbd8 100644 --- a/src/librt/primitives/joint/joint_brep.cpp +++ b/src/librt/primitives/joint/joint_brep.cpp @@ -1,7 +1,7 @@ /* J O I N T _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/joint/joint_mirror.c b/src/librt/primitives/joint/joint_mirror.c index b93b32c6e56..176c8d4938c 100644 --- a/src/librt/primitives/joint/joint_mirror.c +++ b/src/librt/primitives/joint/joint_mirror.c @@ -1,7 +1,7 @@ /* J O I N T _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/metaball/metaball.c b/src/librt/primitives/metaball/metaball.c index 964e36a5467..4ae7734a4dc 100644 --- a/src/librt/primitives/metaball/metaball.c +++ b/src/librt/primitives/metaball/metaball.c @@ -1,7 +1,7 @@ /* M E T A B A L L . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/metaball/metaball.h b/src/librt/primitives/metaball/metaball.h index edd4fd90fe4..aafc1594285 100644 --- a/src/librt/primitives/metaball/metaball.h +++ b/src/librt/primitives/metaball/metaball.h @@ -1,7 +1,7 @@ /* M E T A B A L L . H * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/metaball/metaball_tri.c b/src/librt/primitives/metaball/metaball_tri.c index 2a9a5af7103..fe16f7c0c0d 100644 --- a/src/librt/primitives/metaball/metaball_tri.c +++ b/src/librt/primitives/metaball/metaball_tri.c @@ -1,7 +1,7 @@ /* M E T A B A L L _ T R I . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/mirror.c b/src/librt/primitives/mirror.c index 977147bf6c3..9588be913ea 100644 --- a/src/librt/primitives/mirror.c +++ b/src/librt/primitives/mirror.c @@ -1,7 +1,7 @@ /* M I R R O R . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/nmg/nmg.c b/src/librt/primitives/nmg/nmg.c index 2fc97da895f..d53e02a5b3e 100644 --- a/src/librt/primitives/nmg/nmg.c +++ b/src/librt/primitives/nmg/nmg.c @@ -1,7 +1,7 @@ /* N M G . C * BRL-CAD * - * Copyright (c) 2005-2020 United States Government as represented by + * Copyright (c) 2005-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/nmg/nmg_brep.cpp b/src/librt/primitives/nmg/nmg_brep.cpp index 6328a69756a..2cb6bbe8223 100644 --- a/src/librt/primitives/nmg/nmg_brep.cpp +++ b/src/librt/primitives/nmg/nmg_brep.cpp @@ -1,7 +1,7 @@ /* N M G _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/nmg/nmg_mirror.c b/src/librt/primitives/nmg/nmg_mirror.c index f6f2ba0affe..394d5d35250 100644 --- a/src/librt/primitives/nmg/nmg_mirror.c +++ b/src/librt/primitives/nmg/nmg_mirror.c @@ -1,7 +1,7 @@ /* N M G _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/nmg/nmg_tri_mc.c b/src/librt/primitives/nmg/nmg_tri_mc.c index ba2ffcd1550..f4698e9bf02 100644 --- a/src/librt/primitives/nmg/nmg_tri_mc.c +++ b/src/librt/primitives/nmg/nmg_tri_mc.c @@ -1,7 +1,7 @@ /* N M G _ T R I _ M C . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_adjust.c b/src/librt/primitives/obj_adjust.c index b2c926e0897..8e60dc37a89 100644 --- a/src/librt/primitives/obj_adjust.c +++ b/src/librt/primitives/obj_adjust.c @@ -1,7 +1,7 @@ /* O B J _ A D J U S T . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_curve.c b/src/librt/primitives/obj_curve.c index 07968c98ca6..2151fd8def2 100644 --- a/src/librt/primitives/obj_curve.c +++ b/src/librt/primitives/obj_curve.c @@ -1,7 +1,7 @@ /* O B J _ C U R V E . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_describe.c b/src/librt/primitives/obj_describe.c index e81612a3bfb..9d5b89d9869 100644 --- a/src/librt/primitives/obj_describe.c +++ b/src/librt/primitives/obj_describe.c @@ -1,7 +1,7 @@ /* O B J _ D E S C R I B E . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_export.c b/src/librt/primitives/obj_export.c index a7fcf3fa68b..6ec23b3088b 100644 --- a/src/librt/primitives/obj_export.c +++ b/src/librt/primitives/obj_export.c @@ -1,7 +1,7 @@ /* O B J _ E X P O R T . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_free.c b/src/librt/primitives/obj_free.c index 9499c121a03..373c77c68d8 100644 --- a/src/librt/primitives/obj_free.c +++ b/src/librt/primitives/obj_free.c @@ -1,7 +1,7 @@ /* O B J _ F R E E . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_get.c b/src/librt/primitives/obj_get.c index 4b72a29bc6d..9ff677688ec 100644 --- a/src/librt/primitives/obj_get.c +++ b/src/librt/primitives/obj_get.c @@ -1,7 +1,7 @@ /* O B J _ G E T . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_ifree.c b/src/librt/primitives/obj_ifree.c index ff6502d14e7..cfad23bcee1 100644 --- a/src/librt/primitives/obj_ifree.c +++ b/src/librt/primitives/obj_ifree.c @@ -1,7 +1,7 @@ /* O B J _ I F R E E . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_import.c b/src/librt/primitives/obj_import.c index 3570ebba2da..71413895fed 100644 --- a/src/librt/primitives/obj_import.c +++ b/src/librt/primitives/obj_import.c @@ -1,7 +1,7 @@ /* O B J _ I M P O R T . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_make.c b/src/librt/primitives/obj_make.c index ffa7ff871d2..2e1bb633404 100644 --- a/src/librt/primitives/obj_make.c +++ b/src/librt/primitives/obj_make.c @@ -1,7 +1,7 @@ /* O B J _ M A K E . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_mirror.c b/src/librt/primitives/obj_mirror.c index 2eece3b5dc0..31cc60d9fea 100644 --- a/src/librt/primitives/obj_mirror.c +++ b/src/librt/primitives/obj_mirror.c @@ -1,7 +1,7 @@ /* O B J _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_norm.c b/src/librt/primitives/obj_norm.c index bcf4bcd29b1..953a1e3297f 100644 --- a/src/librt/primitives/obj_norm.c +++ b/src/librt/primitives/obj_norm.c @@ -1,7 +1,7 @@ /* O B J _ N O R M . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_params.c b/src/librt/primitives/obj_params.c index 5db7d080af4..fa9c1b341b4 100644 --- a/src/librt/primitives/obj_params.c +++ b/src/librt/primitives/obj_params.c @@ -1,7 +1,7 @@ /* O B J _ P A R A M S . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_plot.c b/src/librt/primitives/obj_plot.c index 2f8c1478068..3becbcefb51 100644 --- a/src/librt/primitives/obj_plot.c +++ b/src/librt/primitives/obj_plot.c @@ -1,7 +1,7 @@ /* O B J _ P L O T . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_prep.c b/src/librt/primitives/obj_prep.c index 39b0c42c182..6fe58fd542e 100644 --- a/src/librt/primitives/obj_prep.c +++ b/src/librt/primitives/obj_prep.c @@ -1,7 +1,7 @@ /* O B J _ P R E P . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_print.c b/src/librt/primitives/obj_print.c index 09016791d1f..4f70c17a84c 100644 --- a/src/librt/primitives/obj_print.c +++ b/src/librt/primitives/obj_print.c @@ -1,7 +1,7 @@ /* O B J _ P R I N T . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_shot.c b/src/librt/primitives/obj_shot.c index 75c966730c3..2c27bd096cd 100644 --- a/src/librt/primitives/obj_shot.c +++ b/src/librt/primitives/obj_shot.c @@ -1,7 +1,7 @@ /* O B J _ S H O T . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_tess.c b/src/librt/primitives/obj_tess.c index bf9900a3909..8aa8134d011 100644 --- a/src/librt/primitives/obj_tess.c +++ b/src/librt/primitives/obj_tess.c @@ -1,7 +1,7 @@ /* O B J _ T E S S . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_tnurb.c b/src/librt/primitives/obj_tnurb.c index 9a7653e155c..f912fd25d1c 100644 --- a/src/librt/primitives/obj_tnurb.c +++ b/src/librt/primitives/obj_tnurb.c @@ -1,7 +1,7 @@ /* O B J _ T N U R B . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_uv.c b/src/librt/primitives/obj_uv.c index 006137c05b1..c86ff8c4c3c 100644 --- a/src/librt/primitives/obj_uv.c +++ b/src/librt/primitives/obj_uv.c @@ -1,7 +1,7 @@ /* O B J _ U V . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_vshot.c b/src/librt/primitives/obj_vshot.c index 9d7dcd4f07d..b568e6d2ae4 100644 --- a/src/librt/primitives/obj_vshot.c +++ b/src/librt/primitives/obj_vshot.c @@ -1,7 +1,7 @@ /* O B J _ V S H O T . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/obj_xform.c b/src/librt/primitives/obj_xform.c index 4f2157087ba..85b56aff9fa 100644 --- a/src/librt/primitives/obj_xform.c +++ b/src/librt/primitives/obj_xform.c @@ -1,7 +1,7 @@ /* O B J _ X F O R M . C * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/part/part.c b/src/librt/primitives/part/part.c index bd21c8842a1..84b963615f4 100644 --- a/src/librt/primitives/part/part.c +++ b/src/librt/primitives/part/part.c @@ -1,7 +1,7 @@ /* P A R T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/part/part_brep.cpp b/src/librt/primitives/part/part_brep.cpp index fe4b6899fba..f3116ae0044 100644 --- a/src/librt/primitives/part/part_brep.cpp +++ b/src/librt/primitives/part/part_brep.cpp @@ -1,7 +1,7 @@ /* P A R T _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/part/part_mirror.c b/src/librt/primitives/part/part_mirror.c index b3bde0afb2d..2264e1f7e5b 100644 --- a/src/librt/primitives/part/part_mirror.c +++ b/src/librt/primitives/part/part_mirror.c @@ -1,7 +1,7 @@ /* P A R T _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/pipe/pipe.c b/src/librt/primitives/pipe/pipe.c index 737f6041a32..09650b10c15 100644 --- a/src/librt/primitives/pipe/pipe.c +++ b/src/librt/primitives/pipe/pipe.c @@ -1,7 +1,7 @@ /* P I P E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/pipe/pipe_brep.cpp b/src/librt/primitives/pipe/pipe_brep.cpp index 756bfdb3867..f9d0492bf73 100644 --- a/src/librt/primitives/pipe/pipe_brep.cpp +++ b/src/librt/primitives/pipe/pipe_brep.cpp @@ -1,7 +1,7 @@ /* P I P E _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/pipe/pipe_mirror.c b/src/librt/primitives/pipe/pipe_mirror.c index 4117e03e1c0..c69f6281434 100644 --- a/src/librt/primitives/pipe/pipe_mirror.c +++ b/src/librt/primitives/pipe/pipe_mirror.c @@ -1,7 +1,7 @@ /* P I P E _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/pnts/pnts.c b/src/librt/primitives/pnts/pnts.c index 7ea079c404e..9ee304fe9b9 100644 --- a/src/librt/primitives/pnts/pnts.c +++ b/src/librt/primitives/pnts/pnts.c @@ -1,7 +1,7 @@ /* P N T S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/pnts/pnts_brep.cpp b/src/librt/primitives/pnts/pnts_brep.cpp index b9cde8006a2..d0f41f7d139 100644 --- a/src/librt/primitives/pnts/pnts_brep.cpp +++ b/src/librt/primitives/pnts/pnts_brep.cpp @@ -1,7 +1,7 @@ /* P N T S _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/poly/poly.c b/src/librt/primitives/poly/poly.c index b0877c1b6a2..2ea5ee3c67d 100644 --- a/src/librt/primitives/poly/poly.c +++ b/src/librt/primitives/poly/poly.c @@ -1,7 +1,7 @@ /* P O L Y . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/poly/poly_brep.cpp b/src/librt/primitives/poly/poly_brep.cpp index 3cd5adea5c0..e4509792a0e 100644 --- a/src/librt/primitives/poly/poly_brep.cpp +++ b/src/librt/primitives/poly/poly_brep.cpp @@ -1,7 +1,7 @@ /* P O L Y _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/poly/poly_mirror.c b/src/librt/primitives/poly/poly_mirror.c index 955a787a0d6..879dccb3114 100644 --- a/src/librt/primitives/poly/poly_mirror.c +++ b/src/librt/primitives/poly/poly_mirror.c @@ -1,7 +1,7 @@ /* P O L Y _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/primitive_util.c b/src/librt/primitives/primitive_util.c index a4decc8b3ab..0e3828d7371 100644 --- a/src/librt/primitives/primitive_util.c +++ b/src/librt/primitives/primitive_util.c @@ -1,7 +1,7 @@ /* P R I M I T I V E _ U T I L . C * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -555,8 +555,7 @@ clt_get_program(cl_context context, cl_device_id device, cl_uint count, const ch programs = (cl_program*)bu_calloc(count, sizeof(cl_program), "programs"); for (i=0; idegree + 1); + ON_3dPointArray bezpoints(bsg->degree + 1); for (int j = 0; j < bsg->degree + 1; j++) { bezpoints.Append((*b)->m_V[bsg->ctl_points[j]].Point()); } - ON_BezierCurve bez3d = ON_BezierCurve((const ON_3dPointArray)bezpoints); + ON_BezierCurve bez3d = ON_BezierCurve(bezpoints); ON_NurbsCurve* beznurb3d = ON_NurbsCurve::New(); bez3d.GetNurbForm(*beznurb3d); beznurb3d->SetDomain(0.0, 1.0); diff --git a/src/librt/primitives/rhc/rhc.c b/src/librt/primitives/rhc/rhc.c index d84d907dba8..43b000feb69 100644 --- a/src/librt/primitives/rhc/rhc.c +++ b/src/librt/primitives/rhc/rhc.c @@ -1,7 +1,7 @@ /* R H C . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/rhc/rhc_brep.cpp b/src/librt/primitives/rhc/rhc_brep.cpp index 77679d88804..1df9cc4d89a 100644 --- a/src/librt/primitives/rhc/rhc_brep.cpp +++ b/src/librt/primitives/rhc/rhc_brep.cpp @@ -1,7 +1,7 @@ /* R H C _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/rhc/rhc_mirror.c b/src/librt/primitives/rhc/rhc_mirror.c index 3d21f79a80e..58c578c397f 100644 --- a/src/librt/primitives/rhc/rhc_mirror.c +++ b/src/librt/primitives/rhc/rhc_mirror.c @@ -1,7 +1,7 @@ /* R H C _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/rpc/rpc.c b/src/librt/primitives/rpc/rpc.c index 0a7367fd923..a7838c0ddee 100644 --- a/src/librt/primitives/rpc/rpc.c +++ b/src/librt/primitives/rpc/rpc.c @@ -1,7 +1,7 @@ /* R P C . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/rpc/rpc_brep.cpp b/src/librt/primitives/rpc/rpc_brep.cpp index 697de486741..63eeec0272e 100644 --- a/src/librt/primitives/rpc/rpc_brep.cpp +++ b/src/librt/primitives/rpc/rpc_brep.cpp @@ -1,7 +1,7 @@ /* R P C _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/rpc/rpc_mirror.c b/src/librt/primitives/rpc/rpc_mirror.c index 681cf4e0a0c..67d43ce15fb 100644 --- a/src/librt/primitives/rpc/rpc_mirror.c +++ b/src/librt/primitives/rpc/rpc_mirror.c @@ -1,7 +1,7 @@ /* R P C _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/script/script.c b/src/librt/primitives/script/script.c index af18109c55f..ad3d2e2326c 100644 --- a/src/librt/primitives/script/script.c +++ b/src/librt/primitives/script/script.c @@ -1,7 +1,7 @@ /* S C R I P T . C * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/sketch/sketch.c b/src/librt/primitives/sketch/sketch.c index 8dc8e1110d6..699ae70affd 100644 --- a/src/librt/primitives/sketch/sketch.c +++ b/src/librt/primitives/sketch/sketch.c @@ -1,7 +1,7 @@ /* S K E T C H . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/sketch/sketch_brep.cpp b/src/librt/primitives/sketch/sketch_brep.cpp index ed1f423ced6..ba7f24351a3 100644 --- a/src/librt/primitives/sketch/sketch_brep.cpp +++ b/src/librt/primitives/sketch/sketch_brep.cpp @@ -1,7 +1,7 @@ /* S K E T C H _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -201,7 +201,7 @@ rt_sketch_brep(ON_Brep **b, const struct rt_db_internal *ip, const struct bn_tol for (int j = 0; j < bsg->degree + 1; j++) { bezpoints.Append((*b)->m_V[bsg->ctl_points[j]].Point()); } - ON_BezierCurve bez3d = ON_BezierCurve((const ON_3dPointArray)bezpoints); + ON_BezierCurve bez3d = ON_BezierCurve(bezpoints); ON_NurbsCurve* beznurb3d = ON_NurbsCurve::New(); bez3d.GetNurbForm(*beznurb3d); beznurb3d->SetDomain(0.0, 1.0); diff --git a/src/librt/primitives/sketch/sketch_tess.cpp b/src/librt/primitives/sketch/sketch_tess.cpp index 86f6d66bc19..ca699e8f764 100644 --- a/src/librt/primitives/sketch/sketch_tess.cpp +++ b/src/librt/primitives/sketch/sketch_tess.cpp @@ -1,7 +1,7 @@ /* S K E T C H _ T E S S . C * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/sph/sph.c b/src/librt/primitives/sph/sph.c index dc69398e65d..beff785b00c 100644 --- a/src/librt/primitives/sph/sph.c +++ b/src/librt/primitives/sph/sph.c @@ -1,7 +1,7 @@ /* S P H . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/sph/sph_brep.cpp b/src/librt/primitives/sph/sph_brep.cpp index e199c952704..385581e44d0 100644 --- a/src/librt/primitives/sph/sph_brep.cpp +++ b/src/librt/primitives/sph/sph_brep.cpp @@ -1,7 +1,7 @@ /* S P H _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/submodel/submodel.c b/src/librt/primitives/submodel/submodel.c index ff946fe6dd6..ac9f6d266dd 100644 --- a/src/librt/primitives/submodel/submodel.c +++ b/src/librt/primitives/submodel/submodel.c @@ -1,7 +1,7 @@ /* S U B M O D E L . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/superell/superell.c b/src/librt/primitives/superell/superell.c index 59786d69d7a..8d94e6639cf 100644 --- a/src/librt/primitives/superell/superell.c +++ b/src/librt/primitives/superell/superell.c @@ -1,7 +1,7 @@ /* S U P E R E L L . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/superell/superell_brep.cpp b/src/librt/primitives/superell/superell_brep.cpp index fda167fbbc6..d6ddd82b9a1 100644 --- a/src/librt/primitives/superell/superell_brep.cpp +++ b/src/librt/primitives/superell/superell_brep.cpp @@ -1,7 +1,7 @@ /* S U P E R E L L _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/superell/superell_mirror.c b/src/librt/primitives/superell/superell_mirror.c index 6ba8c5094e7..f2cd7f189bf 100644 --- a/src/librt/primitives/superell/superell_mirror.c +++ b/src/librt/primitives/superell/superell_mirror.c @@ -1,7 +1,7 @@ /* S U P E R E L L _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/table.cpp b/src/librt/primitives/table.cpp index d29283e9c07..b61d4014cf6 100644 --- a/src/librt/primitives/table.cpp +++ b/src/librt/primitives/table.cpp @@ -1,7 +1,7 @@ /* T A B L E . C P P * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/tgc/tgc.c b/src/librt/primitives/tgc/tgc.c index 7f5be204986..66bc52efc4a 100644 --- a/src/librt/primitives/tgc/tgc.c +++ b/src/librt/primitives/tgc/tgc.c @@ -1,7 +1,7 @@ /* T G C . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/tgc/tgc_brep.cpp b/src/librt/primitives/tgc/tgc_brep.cpp index 4ccb8a9e910..51f5e8e0694 100644 --- a/src/librt/primitives/tgc/tgc_brep.cpp +++ b/src/librt/primitives/tgc/tgc_brep.cpp @@ -1,7 +1,7 @@ /* T G C _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/tgc/tgc_mirror.c b/src/librt/primitives/tgc/tgc_mirror.c index f02eefad058..a0b6209ad01 100644 --- a/src/librt/primitives/tgc/tgc_mirror.c +++ b/src/librt/primitives/tgc/tgc_mirror.c @@ -1,7 +1,7 @@ /* T G C _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/tor/tor.c b/src/librt/primitives/tor/tor.c index 9d89f1ae819..2443e7e03d8 100644 --- a/src/librt/primitives/tor/tor.c +++ b/src/librt/primitives/tor/tor.c @@ -1,7 +1,7 @@ /* T O R . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/tor/tor_brep.cpp b/src/librt/primitives/tor/tor_brep.cpp index 9c3208f1451..078df9f2f36 100644 --- a/src/librt/primitives/tor/tor_brep.cpp +++ b/src/librt/primitives/tor/tor_brep.cpp @@ -1,7 +1,7 @@ /* T O R _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/tor/tor_mirror.c b/src/librt/primitives/tor/tor_mirror.c index e0110df74ed..57acc17cfb1 100644 --- a/src/librt/primitives/tor/tor_mirror.c +++ b/src/librt/primitives/tor/tor_mirror.c @@ -1,7 +1,7 @@ /* T O R _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/vol/vol.c b/src/librt/primitives/vol/vol.c index 3b297b9b6e5..86c75010147 100644 --- a/src/librt/primitives/vol/vol.c +++ b/src/librt/primitives/vol/vol.c @@ -1,7 +1,7 @@ /* V O L . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -65,7 +65,9 @@ struct rt_vol_specific { #define VOL_O(m) bu_offsetof(struct rt_vol_internal, m) const struct bu_structparse rt_vol_parse[] = { - {"%s", RT_VOL_NAME_LEN, "file", bu_offsetof(struct rt_vol_internal, file), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, + {"%s", RT_VOL_NAME_LEN, "file", bu_offsetof(struct rt_vol_internal, name), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, + {"%s", RT_VOL_NAME_LEN, "name", bu_offsetof(struct rt_vol_internal, name), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, + {"%c", 1, "src", VOL_O(datasrc), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, {"%d", 1, "w", VOL_O(xdim), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, {"%d", 1, "n", VOL_O(ydim), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, {"%d", 1, "d", VOL_O(zdim), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, @@ -79,7 +81,8 @@ const struct bu_structparse rt_vol_parse[] = { extern void rt_vol_plate(point_t a, point_t b, point_t c, point_t d, mat_t mat, struct bu_list *vhead, struct rt_vol_internal *vip); - +extern int rt_retrieve_binunif(struct rt_db_internal *intern, const struct db_i *dbip, const char *name); +extern int rt_binunif_describe(struct bu_vls *str, const struct rt_db_internal *ip, int verbose, double mm2local); /* * Codes to represent surface normals. * In a bitmap, there are only 4 possible normals. @@ -115,7 +118,6 @@ extern void rt_vol_plate(point_t a, point_t b, point_t c, point_t d, static int rt_vol_normtab[3] = { NORM_XPOS, NORM_YPOS, NORM_ZPOS }; - /** * Transform the ray into local coordinates of the volume ("ideal space"). * Step through the 3-D array, in local coordinates. @@ -472,7 +474,7 @@ rt_vol_import4(struct rt_db_internal *ip, const struct bu_external *ep, const fa bu_vls_free(&str); /* Check for reasonable values */ - if (vip->file[0] == '\0' || vip->xdim < 1 || + if (vip->name[0] == '\0' || vip->xdim < 1 || vip->ydim < 1 || vip->zdim < 1 || vip->mat[15] <= 0.0 || vip->hi > 255) { bu_struct_print("Unreasonable VOL parameters", rt_vol_parse, @@ -492,8 +494,8 @@ rt_vol_import4(struct rt_db_internal *ip, const struct bu_external *ep, const fa vip->map = (unsigned char *)bu_calloc(1, nbytes, "vol_import4 bitmap"); bu_semaphore_acquire(BU_SEM_SYSCALL); /* lock */ - if ((fp = fopen(vip->file, "rb")) == NULL) { - perror(vip->file); + if ((fp = fopen(vip->name, "rb")) == NULL) { + perror(vip->name); bu_semaphore_release(BU_SEM_SYSCALL); /* unlock */ return -1; } @@ -508,7 +510,7 @@ rt_vol_import4(struct rt_db_internal *ip, const struct bu_external *ep, const fa bu_semaphore_release(BU_SEM_SYSCALL); /* unlock */ if (ret < 1) { bu_log("rt_vol_import4(%s): Unable to read whole VOL, y=%zu, z=%zu\n", - vip->file, y, z); + vip->name, y, z); bu_semaphore_acquire(BU_SEM_SYSCALL); /* lock */ fclose(fp); bu_semaphore_release(BU_SEM_SYSCALL); /* unlock */ @@ -611,6 +613,163 @@ vol_from_file(const char *file, size_t xdim, size_t ydim, size_t zdim, unsigned } +/** + * Read VOL data from external file + * Returns : + * 0 success + * !0 fail + */ +static int +vol_file_data(struct rt_vol_internal *vip) +{ + size_t nbytes; + + size_t bytes = vip->xdim * vip->ydim * vip->zdim; + nbytes = vol_from_file(vip->name, vip->xdim, vip->ydim, vip->zdim, &vip->map); + if (nbytes != bytes) { + bu_log("WARNING: unexpected VOL bytes (read %zu, expected %zu) in %s\n", nbytes, bytes, vip->name); + } + + return 0; +} + + +/** + * Read VOL data from in database object + * Returns : + * 0 success + * !0 fail + */ +static int +get_obj_data(struct rt_vol_internal *vip, const struct db_i *dbip) +{ + struct rt_binunif_internal *bip; + int ret; + int nbytes; + + BU_ALLOC(vip->bip, struct rt_db_internal); + + ret = rt_retrieve_binunif(vip->bip, dbip, vip->name); + if (ret) + return -1; + + if (RT_G_DEBUG & RT_DEBUG_HF) { + bu_log("db_internal magic: 0x%08x major: %d minor: %d\n", + vip->bip->idb_magic, + vip->bip->idb_major_type, + vip->bip->idb_minor_type); + } + + bip = (struct rt_binunif_internal *)vip->bip->idb_ptr; + + if (RT_G_DEBUG & RT_DEBUG_HF) + bu_log("binunif magic: 0x%08x type: %d count:%zu data[0]:%u\n", + bip->magic, bip->type, bip->count, bip->u.uint8[0]); + + if (bip->type != DB5_MINORTYPE_BINU_8BITINT_U + || (size_t)bip->count != (size_t)(vip->xdim*vip->ydim*vip->zdim)) + { + size_t i = 0; + size_t size; + struct bu_vls binudesc = BU_VLS_INIT_ZERO; + rt_binunif_describe(&binudesc, vip->bip, 0, dbip->dbi_base2local); + + /* skip the first title line*/ + size = bu_vls_strlen(&binudesc); + while (size > 0 && i < size && bu_vls_cstr(&binudesc)[0] != '\n') { + bu_vls_nibble(&binudesc, 1); + } + if (bu_vls_cstr(&binudesc)[0] == '\n') + bu_vls_nibble(&binudesc, 1); + + bu_log("ERROR: Binary object '%s' has invalid data (expected type %d, found %d).\n" + " Expecting %zu 8-bit unsigned char (nuc) integer data values.\n" + " Encountered %s\n", + vip->name, + DB5_MINORTYPE_BINU_8BITINT_U, + bip->type, + (size_t)(vip->xdim*vip->ydim*vip->zdim), + bu_vls_cstr(&binudesc)); + return -2; + } + + nbytes = (vip->xdim+VOL_XWIDEN*2)*(vip->ydim+VOL_YWIDEN*2)*(vip->zdim+VOL_ZWIDEN*2); + + size_t y, z; + if (!vip->map) { + unsigned char* cp; + + vip->map = (unsigned char *)bu_calloc(1, nbytes, "vol_import4 bitmap"); + cp = (unsigned char *)bip->u.uint8; + + for (z = 0; z < vip->zdim; z++) { + for (y = 0; y < vip->ydim; y++) { + void *data = &VOLMAP(vip->map, vip->xdim, vip->ydim, 0, y, z); + + memcpy(data, cp, vip->xdim); + cp+= vip->xdim; + } + } + } + return 0; +} + +/** + * Retrieve VOL data from data source + * Returns : + * 0 success + * !0 fail + */ +static int +get_vol_data(struct rt_vol_internal *vip, const mat_t mat, const struct db_i *dbip) +{ + mat_t tmp; + char *p; + + /* Apply Modelling transform */ + bn_mat_mul(tmp, mat, vip->mat); + MAT_COPY(vip->mat, tmp); + p = vip->name; + + switch (vip->datasrc) { +case RT_VOL_SRC_FILE: + /* Retrieve the data from an external file */ + if (RT_G_DEBUG & RT_DEBUG_HF) + bu_log("getting data from file \"%s\"\n", p); + + if(vol_file_data(vip) != 0) { + return 1; + p = "file"; + } + else { + return 0; + } + break; +case RT_VOL_SRC_OBJ: + /* Retrieve the data from an internal db object */ + if (RT_G_DEBUG & RT_DEBUG_HF) + bu_log("getting data from object \"%s\"\n", p); + + if (get_obj_data(vip, dbip) != 0) { + p = "object"; + return 1; + } else { + RT_CK_DB_INTERNAL(vip->bip); + RT_CK_BINUNIF(vip->bip->idb_ptr); + return 0; + } + break; +default: +bu_log("%s:%d Odd vol data src '%c' s/b '%c' or '%c'\n", + __FILE__, __LINE__, vip->datasrc, + RT_VOL_SRC_FILE, RT_VOL_SRC_OBJ); + } + + bu_log("%s", dbip->dbi_filename); + return 0; //temporary +} + + /** * Read in the information from the string solid record. * Then, as a service to the application, read in the bitmap @@ -621,7 +780,6 @@ rt_vol_import5(struct rt_db_internal *ip, const struct bu_external *ep, const fa { register struct rt_vol_internal *vip; struct bu_vls str = BU_VLS_INIT_ZERO; - size_t nbytes; mat_t tmat; if (dbip) RT_CK_DBI(dbip); @@ -651,9 +809,8 @@ rt_vol_import5(struct rt_db_internal *ip, const struct bu_external *ep, const fa return -2; } bu_vls_free(&str); - /* Check for reasonable values */ - if (vip->file[0] == '\0' + if (vip->name[0] == '\0' || vip->xdim < 1 || vip->ydim < 1 || vip->zdim < 1 || vip->mat[15] <= 0.0 || vip->hi > 255) { @@ -668,15 +825,8 @@ rt_vol_import5(struct rt_db_internal *ip, const struct bu_external *ep, const fa bn_mat_mul(tmat, mat, vip->mat); MAT_COPY(vip->mat, tmat); - if (bu_file_exists(vip->file, NULL)) { - size_t bytes = vip->xdim * vip->ydim * vip->zdim; - nbytes = vol_from_file(vip->file, vip->xdim, vip->ydim, vip->zdim, &vip->map); - if (nbytes != bytes) { - bu_log("WARNING: unexpected VOL bytes (read %zu, expected %zu) in %s\n", nbytes, bytes, vip->file); - } - } else { - bu_log("WARNING: VOL data file missing [%s]\n", vip->file); - } + if (get_vol_data(vip, mat, dbip) == 1) + bu_log("Couldn't find the associated file/object %s",vip->name); return 0; } @@ -735,10 +885,18 @@ rt_vol_describe(struct bu_vls *str, const struct rt_db_internal *ip, int UNUSED( /* pretty-print dimensions in local, not storage (mm) units */ VSCALE(local, vip->cellsize, mm2local); + if (vip->datasrc == RT_VOL_SRC_FILE) { bu_vls_printf(&substr, "\tfile=\"%s\"\n\tw=%u n=%u d=%u\n\tlo=%u hi=%u\n\tsize=%g,%g,%g\n", - vip->file, + vip->name, vip->xdim, vip->ydim, vip->zdim, vip->lo, vip->hi, V3INTCLAMPARGS(local)); + } else { + bu_vls_printf(&substr, "\tobject name=\"%s\"\n\tw=%u n=%u d=%u\n\tlo=%u hi=%u\n\tsize=%g,%g,%g\n", + vip->name, + vip->xdim, vip->ydim, vip->zdim, vip->lo, vip->hi, + V3INTCLAMPARGS(local)); + } + bu_vls_vlscat(str, &substr); bu_vls_strcat(str, "\tmat="); @@ -868,7 +1026,7 @@ rt_vol_print(register const struct soltab *stp) register const struct rt_vol_specific *volp = (struct rt_vol_specific *)stp->st_specific; - bu_log("vol file = %s\n", volp->vol_i.file); + bu_log("vol file = %s\n", volp->vol_i.name); bu_log("dimensions = (%u, %u, %u)\n", volp->vol_i.xdim, volp->vol_i.ydim, volp->vol_i.zdim); diff --git a/src/librt/primitives/vol/vol_brep.cpp b/src/librt/primitives/vol/vol_brep.cpp index 597703d83d0..227e9cbaec4 100644 --- a/src/librt/primitives/vol/vol_brep.cpp +++ b/src/librt/primitives/vol/vol_brep.cpp @@ -1,7 +1,7 @@ /* V O L _ B R E P . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/vol/vol_mirror.c b/src/librt/primitives/vol/vol_mirror.c index ead8110e5b6..989cd02423e 100644 --- a/src/librt/primitives/vol/vol_mirror.c +++ b/src/librt/primitives/vol/vol_mirror.c @@ -1,7 +1,7 @@ /* V O L _ M I R R O R . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/xxx/xxx.c b/src/librt/primitives/xxx/xxx.c index 81ad3dc0ae2..17e8774770b 100644 --- a/src/librt/primitives/xxx/xxx.c +++ b/src/librt/primitives/xxx/xxx.c @@ -1,7 +1,7 @@ /* X X X . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/primitives/xxx/xxx.h b/src/librt/primitives/xxx/xxx.h index 779fa891e70..88af4ffebd1 100644 --- a/src/librt/primitives/xxx/xxx.h +++ b/src/librt/primitives/xxx/xxx.h @@ -1,7 +1,7 @@ /* X X X . H * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/raydebug.tcl b/src/librt/raydebug.tcl index e319ce62d45..5a7d82dd137 100755 --- a/src/librt/raydebug.tcl +++ b/src/librt/raydebug.tcl @@ -2,7 +2,7 @@ # R A Y D E B U G . T C L # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # Redistribution and use in source and binary forms, with or without diff --git a/src/librt/reduce.c b/src/librt/reduce.c index c2517d03d95..ad8148f7c86 100644 --- a/src/librt/reduce.c +++ b/src/librt/reduce.c @@ -1,7 +1,7 @@ /* R E D U C E . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/reduce_db.cpp b/src/librt/reduce_db.cpp index 5f30b736950..1e714c51c0d 100644 --- a/src/librt/reduce_db.cpp +++ b/src/librt/reduce_db.cpp @@ -1,7 +1,7 @@ /* R E D U C E _ D B . C P P * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/regionfix.c b/src/librt/regionfix.c index 759a034be7c..d70b8b6c862 100644 --- a/src/librt/regionfix.c +++ b/src/librt/regionfix.c @@ -1,7 +1,7 @@ /* R E G I O N F I X . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/roots.c b/src/librt/roots.c index 085f25a5c8f..8c574a15756 100644 --- a/src/librt/roots.c +++ b/src/librt/roots.c @@ -1,7 +1,7 @@ /* R O O T S . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/search.c b/src/librt/search.c index 87e068a01c2..ce9682befc6 100644 --- a/src/librt/search.c +++ b/src/librt/search.c @@ -1,7 +1,7 @@ /* S E A R C H . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -152,8 +152,7 @@ struct list_client_data_t { */ HIDDEN void db_fullpath_list_subtree(struct db_full_path *path, int curr_bool, union tree *tp, - void (*traverse_func) (struct db_full_path *path, - void *), + void (*traverse_func) (struct db_full_path *path, void *), void *client_data) { struct directory *dp; @@ -228,8 +227,7 @@ db_fullpath_list_subtree(struct db_full_path *path, int curr_bool, union tree *t * processing and filtering by the search routines. */ HIDDEN void -db_fullpath_list(struct db_full_path *path, - void *client_data) +db_fullpath_list(struct db_full_path *path, void *client_data) { struct directory *dp; struct list_client_data_t *lcd= (struct list_client_data_t *)client_data; @@ -338,7 +336,8 @@ c_not(char *UNUSED(ignore), char ***UNUSED(ignored), int UNUSED(unused), struct HIDDEN int -find_execute_nested_plans(struct db_i *dbip, struct bu_ptbl *results, struct db_node_t *db_node, struct db_plan_t *plan) { +find_execute_nested_plans(struct db_i *dbip, struct bu_ptbl *results, struct db_node_t *db_node, struct db_plan_t *plan) +{ struct db_plan_t *p = NULL; int state = 0; for (p = plan; p && (state = (p->eval)(p, db_node, dbip, results)); p = p->next) @@ -526,7 +525,6 @@ f_iname(struct db_plan_t *plan, struct db_node_t *db_node, struct db_i *UNUSED(d int ret = 0; dp = DB_FULL_PATH_CUR_DIR(db_node->path); - if (!dp) { db_node->matched_filters = 0; return 0; @@ -619,7 +617,8 @@ c_iregex(char *pattern, char ***UNUSED(ignored), int UNUSED(unused), struct db_p HIDDEN int -string_to_name_and_val(const char *in, struct bu_vls *name, struct bu_vls *value) { +string_to_name_and_val(const char *in, struct bu_vls *name, struct bu_vls *value) +{ size_t equalpos = 0; int checkval = 0; @@ -1104,12 +1103,15 @@ f_type(struct db_plan_t *plan, struct db_node_t *db_node, struct db_i *dbip, str /* Match anything that doesn't define a 2D or 3D shape - unfortunately, this list will have to * be updated manually unless/until some functionality is added to generate it */ if (!bu_path_match(plan->p_un._type_data, "shape", 0) && - intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_COMBINATION && intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_ANNOT && - intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_SCRIPT && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_COMBINATION && intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_CONSTRAINT && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_DATUM && intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_GRIP && - intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_JOINT + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_JOINT && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_PNTS && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_SCRIPT && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_SUBMODEL ) { type_match = 1; } @@ -1132,6 +1134,36 @@ f_type(struct db_plan_t *plan, struct db_node_t *db_node, struct db_i *dbip, str } } + if (!bu_path_match(plan->p_un._type_data, "volume", 0) && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_ANNOT && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_COMBINATION && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_CONSTRAINT && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_DATUM && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_GRIP && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_JOINT && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_PNTS && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_SCRIPT && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_SUBMODEL && + intern.idb_minor_type != DB5_MINORTYPE_BRLCAD_SKETCH) { + switch (intern.idb_minor_type) { + case DB5_MINORTYPE_BRLCAD_BOT: + bot_ip = (struct rt_bot_internal *)intern.idb_ptr; + if (bot_ip->mode == RT_BOT_SOLID) { + type_match = 1; + } + break; + case DB5_MINORTYPE_BRLCAD_BREP: + if (!rt_brep_plate_mode(&intern)) { + type_match = 1; + } + break; + default: + type_match = 1; + break; + } + } + + rt_db_free_internal(&intern); return_label: @@ -1171,7 +1203,8 @@ f_size(struct db_plan_t *plan, struct db_node_t *db_node, struct db_i *UNUSED(db struct bu_vls value = BU_VLS_INIT_ZERO; dp = DB_FULL_PATH_CUR_DIR(db_node->path); - if (!dp) return 0; + if (!dp) + return 0; /* Check for unescaped >, < or = characters. If present, the * attribute must not only be present but the value assigned to @@ -1407,10 +1440,12 @@ f_exec(struct db_plan_t *plan, struct db_node_t *db_node, struct db_i *UNUSED(db { /* TODO make this faster by storing the individual "subholes" so they don't have to be recalculated */ int ret, hole_i, char_i, plain_begin, plain_len; - char **originals = NULL; char **filleds = NULL; + char **originals = NULL; char *name; - size_t name_len, filled_len, old_filled_len; + size_t filled_len = 0; + size_t name_len = 0; + size_t old_filled_len = 0; if (0 < plan->p_un.ex._e_nholes) { originals = (char **)bu_calloc(plan->p_un.ex._e_nholes, sizeof(char *), "f_exec originals"); @@ -1426,7 +1461,8 @@ f_exec(struct db_plan_t *plan, struct db_node_t *db_node, struct db_i *UNUSED(db } else { name = db_path_to_string(db_node->path); } - name_len = strlen(name); + if (name) + name_len = strlen(name); for (hole_i=0; hole_ip_un.ex._e_nholes; hole_i++) { plain_begin = 0; @@ -1712,11 +1748,13 @@ c_path(char *pattern, char ***UNUSED(ignored), int UNUSED(unused), struct db_pla HIDDEN int f_print(struct db_plan_t *UNUSED(plan), struct db_node_t *db_node, struct db_i *UNUSED(dbip), struct bu_ptbl *results) { - if (!results) + if (!results || !db_node) return 1; if (db_node->flags & DB_SEARCH_FLAT || db_node->flags & DB_SEARCH_RETURN_UNIQ_DP) { - bu_ptbl_ins_unique(results, (long *)DB_FULL_PATH_CUR_DIR(db_node->path)); + long *dbfp = (long *)DB_FULL_PATH_CUR_DIR(db_node->path); + if (dbfp) + bu_ptbl_ins_unique(results, dbfp); } else { struct db_full_path *new_entry; BU_ALLOC(new_entry, struct db_full_path); @@ -2365,7 +2403,8 @@ db_search_form_plan(char **argv, HIDDEN void -find_execute_plans(struct db_i *dbip, struct bu_ptbl *results, struct db_node_t *db_node, struct db_plan_t *plan) { +find_execute_plans(struct db_i *dbip, struct bu_ptbl *results, struct db_node_t *db_node, struct db_plan_t *plan) +{ struct db_plan_t *p; for (p = plan; p && (p->eval)(p, db_node, dbip, results); p = p->next) ; diff --git a/src/librt/search.h b/src/librt/search.h index 4bfce21e6b4..6dcb89aeb5c 100644 --- a/src/librt/search.h +++ b/src/librt/search.h @@ -1,7 +1,7 @@ /* S E A R C H . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/shoot.c b/src/librt/shoot.c index a85f7cbb1f2..cd81344af6c 100644 --- a/src/librt/shoot.c +++ b/src/librt/shoot.c @@ -1,7 +1,7 @@ /* S H O O T . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/test_bot2nurbs.cpp b/src/librt/test_bot2nurbs.cpp index 4995c7e5120..16afc6e920d 100644 --- a/src/librt/test_bot2nurbs.cpp +++ b/src/librt/test_bot2nurbs.cpp @@ -1,7 +1,7 @@ /* T E S T _ B O T 2 N U R B S . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/test_brepreport.cpp b/src/librt/test_brepreport.cpp index a921d0822b7..1460ba99056 100644 --- a/src/librt/test_brepreport.cpp +++ b/src/librt/test_brepreport.cpp @@ -1,7 +1,7 @@ /* T E S T _ B R E P R E P O R T . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/test_dbio.c b/src/librt/test_dbio.c index 74e932e4a44..2966763b2b7 100644 --- a/src/librt/test_dbio.c +++ b/src/librt/test_dbio.c @@ -1,7 +1,7 @@ /* T E S T _ D B I O . C * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/src/librt/test_nurbsfit.cpp b/src/librt/test_nurbsfit.cpp index d211fcf03a0..00f1c501be1 100644 --- a/src/librt/test_nurbsfit.cpp +++ b/src/librt/test_nurbsfit.cpp @@ -1,7 +1,7 @@ /* T E S T _ N U R B S F I T . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/test_root3-subd.cpp b/src/librt/test_root3-subd.cpp index 37358810ca7..66104198a16 100644 --- a/src/librt/test_root3-subd.cpp +++ b/src/librt/test_root3-subd.cpp @@ -1,7 +1,7 @@ /* T E S T _ R O O T 3 - S U B D . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/CMakeLists.txt b/src/librt/tests/CMakeLists.txt index 12caf168e67..00f959a9be8 100644 --- a/src/librt/tests/CMakeLists.txt +++ b/src/librt/tests/CMakeLists.txt @@ -1,34 +1,34 @@ BRLCAD_ADDEXEC(bundle bundle.c "librt" TEST) -add_test(NAME rt_bundle COMMAND bundle) +BRLCAD_ADD_TEST(NAME rt_bundle COMMAND bundle) set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/bundle.plot3") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/bundle.plot3") BRLCAD_ADDEXEC(rt_pattern rt_pattern.c "librt" TEST) -add_test(NAME rt_pattern_5 COMMAND rt_pattern 5) +BRLCAD_ADD_TEST(NAME rt_pattern_5 COMMAND rt_pattern 5) set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_BINARY_DIR}/rt_pattern_test_5.plot3") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/rt_pattern_test_5.plot3") BRLCAD_ADDEXEC(rt_dvec dvec.cpp "librt" NO_STRICT TEST) -add_test(NAME rt_dvec COMMAND rt_dvec) +BRLCAD_ADD_TEST(NAME rt_dvec COMMAND rt_dvec) BRLCAD_ADDEXEC(rt_ssi ssi.cpp "librt" TEST) # disabled prior to 7.22.2 release due to unresolved failures in the implementation -# add_test(NAME rt_ssi COMMAND rt_ssi) +# BRLCAD_ADD_TEST(NAME rt_ssi COMMAND rt_ssi) # NURBS testing BRLCAD_ADDEXEC(rt_nurbs_tester nurbs_tests.cpp "librt;libbrep;libbu" TEST) # disabled prior to 7.22.2 release due to unresolved failures in the implementation -#add_test(NAME NURBS-get_closest_point-distinct_points nurbs_tester ${CMAKE_CURRENT_SOURCE_DIR}/nurbs_surfaces.g 1) +#BRLCAD_ADD_TEST(NAME NURBS-get_closest_point-distinct_points nurbs_tester ${CMAKE_CURRENT_SOURCE_DIR}/nurbs_surfaces.g 1) # diff testing BRLCAD_ADDEXEC(rt_diff diff.c "librt" TEST) if(BRLCAD_ENABLE_BINARY_ATTRIBUTES) BRLCAD_ADDEXEC(rt_binary_attribute binary_attribute.c "librt" TEST) - add_test(NAME rt_binary_attribute COMMAND rt_binary_attribute) + BRLCAD_ADD_TEST(NAME rt_binary_attribute COMMAND rt_binary_attribute) endif(BRLCAD_ENABLE_BINARY_ATTRIBUTES) # size testing @@ -39,13 +39,13 @@ BRLCAD_ADDEXEC(rt_datum rt_datum.c "librt" TEST) BRLCAD_ADDEXEC(rt_cache cache.cpp "librt" TEST) -add_test(NAME rt_cache_serial_single_object COMMAND rt_cache 1) -add_test(NAME rt_cache_parallel_single_object COMMAND rt_cache 2) -add_test(NAME rt_cache_serial_multiple_identical_objects COMMAND rt_cache 3 10) -add_test(NAME rt_cache_parallel_multiple_identical_objects COMMAND rt_cache 4 10) -add_test(NAME rt_cache_serial_multiple_different_objects COMMAND rt_cache 5 10) -add_test(NAME rt_cache_parallel_multiple_different_objects COMMAND rt_cache 6 10) -add_test(NAME rt_cache_parallel_multiple_different_objects_hierarchy_1 COMMAND rt_cache 7 10) +BRLCAD_ADD_TEST(NAME rt_cache_serial_single_object COMMAND rt_cache 1) +BRLCAD_ADD_TEST(NAME rt_cache_parallel_single_object COMMAND rt_cache 2) +BRLCAD_ADD_TEST(NAME rt_cache_serial_multiple_identical_objects COMMAND rt_cache 3 10) +BRLCAD_ADD_TEST(NAME rt_cache_parallel_multiple_identical_objects COMMAND rt_cache 4 10) +BRLCAD_ADD_TEST(NAME rt_cache_serial_multiple_different_objects COMMAND rt_cache 5 10) +BRLCAD_ADD_TEST(NAME rt_cache_parallel_multiple_different_objects COMMAND rt_cache 6 10) +BRLCAD_ADD_TEST(NAME rt_cache_parallel_multiple_different_objects_hierarchy_1 COMMAND rt_cache 7 10) set(distcheck_files CMakeLists.txt diff --git a/src/librt/tests/binary_attribute.c b/src/librt/tests/binary_attribute.c index a5a05bc57a4..e3061cf0ca4 100644 --- a/src/librt/tests/binary_attribute.c +++ b/src/librt/tests/binary_attribute.c @@ -1,7 +1,7 @@ /* T E S T _ B I N A R Y _ A T T R I B U T E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/bundle.c b/src/librt/tests/bundle.c index a90218baeea..0ec8305b22c 100644 --- a/src/librt/tests/bundle.c +++ b/src/librt/tests/bundle.c @@ -1,7 +1,7 @@ /* T E S T _ B U N D L E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/cache.cpp b/src/librt/tests/cache.cpp index 525dabd3c49..b882c291bb1 100644 --- a/src/librt/tests/cache.cpp +++ b/src/librt/tests/cache.cpp @@ -1,7 +1,7 @@ /* C A C H E . C P P * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/db5_size.c b/src/librt/tests/db5_size.c index ba39f0b1e96..84f2f8f94ab 100644 --- a/src/librt/tests/db5_size.c +++ b/src/librt/tests/db5_size.c @@ -1,7 +1,7 @@ /* D B 5 _ S I Z E . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/diff.c b/src/librt/tests/diff.c index defeaa4b162..8659a2aa82c 100644 --- a/src/librt/tests/diff.c +++ b/src/librt/tests/diff.c @@ -1,7 +1,7 @@ /* T E S T _ D I F F . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/dvec.cpp b/src/librt/tests/dvec.cpp index 51e38411512..a5050b91ce8 100644 --- a/src/librt/tests/dvec.cpp +++ b/src/librt/tests/dvec.cpp @@ -1,7 +1,7 @@ /* T E S T _ D V E C . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/nurbs_tests.cpp b/src/librt/tests/nurbs_tests.cpp index 9dd693155cc..cdb79057fb9 100644 --- a/src/librt/tests/nurbs_tests.cpp +++ b/src/librt/tests/nurbs_tests.cpp @@ -1,7 +1,7 @@ /* N U R B S _ T E S T S . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/rt_datum.c b/src/librt/tests/rt_datum.c index b82339d18cb..eb7ffd8c908 100644 --- a/src/librt/tests/rt_datum.c +++ b/src/librt/tests/rt_datum.c @@ -1,7 +1,7 @@ /* R T _ D A T U M . C * BRL-CAD * - * Copyright (c) 2018-2020 United States Government as represented by + * Copyright (c) 2018-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/rt_pattern.c b/src/librt/tests/rt_pattern.c index 0c4c77ecce9..2fcf4981b6f 100644 --- a/src/librt/tests/rt_pattern.c +++ b/src/librt/tests/rt_pattern.c @@ -1,7 +1,7 @@ /* R T _ P A T T E R N . C * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tests/ssi.cpp b/src/librt/tests/ssi.cpp index 46e4c808834..e816d791ef6 100644 --- a/src/librt/tests/ssi.cpp +++ b/src/librt/tests/ssi.cpp @@ -1,7 +1,7 @@ /* T E S T _ S S I . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/timer-nt.c b/src/librt/timer-nt.c deleted file mode 100644 index b9e47155c81..00000000000 --- a/src/librt/timer-nt.c +++ /dev/null @@ -1,107 +0,0 @@ -/* T I M E R - N T . C - * BRL-CAD - * - * Copyright (c) 2004-2020 United States Government as represented by - * the U.S. Army Research Laboratory. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this file; see the file named COPYING for more - * information. - */ - -#include "common.h" - -#include -#include -#include "bio.h" - -#include "vmath.h" -#include "raytrace.h" - -/* Standard System V stuff */ -static clock_t start; -time_t time0; - - -void -rt_prep_timer(void) -{ - start = clock(); - time(&time0); -} - - -double -rt_get_timer(struct bu_vls *vp, double *elapsed) -{ - time_t now; - double user_cpu_secs; - double sys_cpu_secs; - double elapsed_secs; - double percent; - clock_t finish; - - /* Real time. 1 second resolution. */ - (void)time(&now); - elapsed_secs = difftime(now, time0); - - finish = clock(); - sys_cpu_secs = (double)(finish - start); - sys_cpu_secs /= CLOCKS_PER_SEC; - - user_cpu_secs = sys_cpu_secs; - - if (user_cpu_secs < 0.00001) user_cpu_secs = 0.00001; - if (elapsed_secs < 0.00001) elapsed_secs = user_cpu_secs; /* It can't be any less! */ - - if (elapsed) *elapsed = elapsed_secs; - - if (vp) { - percent = user_cpu_secs/elapsed_secs*100.0; - BU_CK_VLS(vp); - bu_vls_printf(vp, - "%g user + %g sys in %g elapsed secs (%g%%)", - user_cpu_secs, sys_cpu_secs, elapsed_secs, percent); - } - return user_cpu_secs; -} - - -double -rt_read_timer(char *str, int len) -{ - struct bu_vls vls = BU_VLS_INIT_ZERO; - double cpu; - int todo; - - if (!str) - return rt_get_timer((struct bu_vls *)0, (double *)0); - - cpu = rt_get_timer(&vls, (double *)0); - todo = bu_vls_strlen(&vls); - if (todo > len) - todo = len; - bu_strlcpy(str, bu_vls_addr(&vls), todo); - - return cpu; -} - - -/* - * Local Variables: - * mode: C - * tab-width: 8 - * indent-tabs-mode: t - * c-file-style: "stroustrup" - * End: - * ex: shiftwidth=4 tabstop=8 - */ diff --git a/src/librt/timer.cpp b/src/librt/timer.cpp new file mode 100644 index 00000000000..de7ff73a234 --- /dev/null +++ b/src/librt/timer.cpp @@ -0,0 +1,125 @@ +/* T I M E R . C P P + * BRL-CAD + * + * Copyright (c) 1985-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ + +#include "common.h" +#include "bio.h" +#include +#include +#include +#include +#include "bu/log.h" +#include "bu/str.h" +#include "bu/vls.h" +#include "rt/timer.h" + +#ifdef HAVE_GETPROCESSTIMES +static double time_cpu; /* Time at which timing started */ +#else +static std::clock_t time_cpu; /* Time at which timing started */ +#endif +static std::chrono::steady_clock::time_point time_wall; + +void +rt_prep_timer(void) +{ +#ifdef HAVE_GETPROCESSTIMES + FILETIME a,b,c,d; + time_cpu = 0.0; + if (!GetProcessTimes(GetCurrentProcess(),&a,&b,&c,&d)) { + bu_log("Warning - could not initialize RT timer!\n"); + return; + } + /* https://stackoverflow.com/a/17440673 */ + time_cpu = (double)(d.dwLowDateTime | ((unsigned long long)d.dwHighDateTime << 32)) * 0.0000001; +#else + time_cpu = std::clock(); +#endif + time_wall = std::chrono::steady_clock::now(); +} + +double +rt_get_timer(struct bu_vls *vp, double *elapsed) +{ + + double user_cpu_secs; + double elapsed_secs; + +#ifdef HAVE_GETPROCESSTIMES + FILETIME a,b,c,d; + double time1 = DBL_MAX; + if (!GetProcessTimes(GetCurrentProcess(),&a,&b,&c,&d)) { + bu_log("Warning - could not initialize RT timer!\n"); + return DBL_MAX; + } + /* https://stackoverflow.com/a/17440673 */ + time1 = (double)(d.dwLowDateTime | ((unsigned long long)d.dwHighDateTime << 32)) * 0.0000001; + user_cpu_secs = time1 - time_cpu; +#else + std::clock_t time1 = std::clock(); + user_cpu_secs = (double)(time1 - time_cpu)/CLOCKS_PER_SEC; +#endif + + std::chrono::steady_clock::time_point wall_now = std::chrono::steady_clock::now(); + elapsed_secs = std::chrono::duration_cast(wall_now - time_wall).count(); + elapsed_secs = elapsed_secs / 1e6; + + if (elapsed) *elapsed = elapsed_secs; + + if (vp) { + std::stringstream ss; + ss << std::fixed << std::setprecision(5) << elapsed_secs; + std::string sstr = ss.str(); + bu_vls_printf(vp, "cpu = %g sec, elapsed = %s sec\n", user_cpu_secs, sstr.c_str()); + } + + return user_cpu_secs; +} + +double +rt_read_timer(char *str, int len) +{ + struct bu_vls vls = BU_VLS_INIT_ZERO; + double cpu; + int todo; + + if (!str) + return rt_get_timer((struct bu_vls *)0, (double *)0); + + cpu = rt_get_timer(&vls, (double *)0); + todo = bu_vls_strlen(&vls); + + /* Whatever the vls length is, we're not writing more + * content than the str length supplied by the caller */ + todo = (todo > len) ? len : todo; + + bu_strlcpy(str, bu_vls_addr(&vls), todo); + + return cpu; +} + + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 diff --git a/src/librt/timer42.c b/src/librt/timer42.c deleted file mode 100644 index 9bcc0a6b75b..00000000000 --- a/src/librt/timer42.c +++ /dev/null @@ -1,249 +0,0 @@ -/* T I M E R 4 2 . C - * BRL-CAD - * - * Copyright (c) 1985-2020 United States Government as represented by - * the U.S. Army Research Laboratory. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this file; see the file named COPYING for more - * information. - */ - -#include "common.h" - -#include -#include -#include - -#include "bresource.h" - -#include "vmath.h" -#include "raytrace.h" - -#ifndef HAVE_DECL_GETTIMEOFDAY -extern int gettimeofday(struct timeval *, void *); -#endif - - -static struct timeval time0; /* Time at which timing started */ -static struct rusage ru0; /* Resource utilization at the start */ -static struct rusage ru0c; /* Resource utilization at the start */ - -static void prusage(register struct rusage *r0, register struct rusage *r1, struct timeval *e, struct timeval *b, struct bu_vls *vp); -static void tvsub(struct timeval *tdiff, struct timeval *t1, struct timeval *t0); -static void psecs(long int l, struct bu_vls *vp); - - -void -rt_prep_timer(void) -{ - gettimeofday(&time0, (struct timezone *)0); - getrusage(RUSAGE_SELF, &ru0); - getrusage(RUSAGE_CHILDREN, &ru0c); -} - - -double -rt_get_timer(struct bu_vls *vp, double *elapsed) -{ - struct timeval timedol; - struct rusage ru1; - struct rusage ru1c; - struct timeval td; - double user_cpu_secs; - double elapsed_secs; - - - getrusage(RUSAGE_SELF, &ru1); - getrusage(RUSAGE_CHILDREN, &ru1c); - gettimeofday(&timedol, (struct timezone *)0); - - elapsed_secs = (timedol.tv_sec - time0.tv_sec) + - (timedol.tv_usec - time0.tv_usec)/1000000.0; - - tvsub(&td, &ru1.ru_utime, &ru0.ru_utime); - user_cpu_secs = td.tv_sec + ((double)td.tv_usec) / 1000000.0; - - tvsub(&td, &ru1c.ru_utime, &ru0c.ru_utime); - user_cpu_secs += td.tv_sec + ((double)td.tv_usec) / 1000000.0; - - if (user_cpu_secs < 0.00001) user_cpu_secs = 0.00001; - if (elapsed_secs < 0.00001) elapsed_secs = user_cpu_secs; /* It can't be any less! */ - - if (elapsed) *elapsed = elapsed_secs; - - if (vp) { - bu_vls_printf(vp, "cpu = %g sec, elapsed = %g sec\n", - user_cpu_secs, elapsed_secs); - bu_vls_strcat(vp, " parent: "); - prusage(&ru0, &ru1, &timedol, &time0, vp); - bu_vls_strcat(vp, "\n children: "); - prusage(&ru0c, &ru1c, &timedol, &time0, vp); - } - - return user_cpu_secs; -} - - -static void -prusage(register struct rusage *r0, register struct rusage *r1, struct timeval *e, struct timeval *b, struct bu_vls *vp) -{ - struct timeval tdiff; - time_t t; - char *cp; - int ms; - - BU_CK_VLS(vp); - - t = (r1->ru_utime.tv_sec-r0->ru_utime.tv_sec)*100+ - (r1->ru_utime.tv_usec-r0->ru_utime.tv_usec)/10000+ - (r1->ru_stime.tv_sec-r0->ru_stime.tv_sec)*100+ - (r1->ru_stime.tv_usec-r0->ru_stime.tv_usec)/10000; - ms = (e->tv_sec-b->tv_sec)*100 + (e->tv_usec-b->tv_usec)/10000; - - cp = "%Uuser %Ssys %Ereal %P %Xi+%Dd %Mmaxrss %F+%Rpf %Ccsw"; - for (; *cp; cp++) { - if (*cp != '%') - bu_vls_putc(vp, *cp); - else if (cp[1]) switch (*++cp) { - case 'E': - psecs(ms / 100, vp); - break; - - case 'P': - bu_vls_printf(vp, "%d%%", (int) (t*100 / ((ms ? ms : 1)))); - break; - - case 'U': - tvsub(&tdiff, &r1->ru_utime, &r0->ru_utime); - bu_vls_printf(vp, "%ld.%01ld", (long)tdiff.tv_sec, (long)(tdiff.tv_usec/100000)); - break; - - case 'S': - tvsub(&tdiff, &r1->ru_stime, &r0->ru_stime); - bu_vls_printf(vp, "%ld.%01ld", (long)tdiff.tv_sec, (long)(tdiff.tv_usec/100000)); - break; - -#ifndef _POSIX_C_SOURCE - - case 'W': - { - int i = r1->ru_nswap - r0->ru_nswap; - bu_vls_printf(vp, "%d", i); - break; - } - - case 'X': - bu_vls_printf(vp, "%ld", (long)(t == 0 ? 0 : (r1->ru_ixrss-r0->ru_ixrss)/t)); - break; - - case 'D': - bu_vls_printf(vp, "%ld", (long)(t == 0 ? 0 : (r1->ru_idrss+r1->ru_isrss-(r0->ru_idrss+r0->ru_isrss))/t)); - break; - - case 'K': - bu_vls_printf(vp, "%ld", (long)(t == 0 ? 0 : ((r1->ru_ixrss+r1->ru_isrss+r1->ru_idrss) - (r0->ru_ixrss+r0->ru_idrss+r0->ru_isrss))/t)); - break; - - case 'M': - bu_vls_printf(vp, "%ld", (long)(r1->ru_maxrss/2)); - break; - - case 'F': - bu_vls_printf(vp, "%ld", (long)(r1->ru_majflt-r0->ru_majflt)); - break; - - case 'R': - bu_vls_printf(vp, "%ld", (long)(r1->ru_minflt-r0->ru_minflt)); - break; - - case 'I': - bu_vls_printf(vp, "%ld", (long)(r1->ru_inblock-r0->ru_inblock)); - break; - - case 'O': - bu_vls_printf(vp, "%ld", (long)(r1->ru_oublock-r0->ru_oublock)); - break; - - case 'C': - bu_vls_printf(vp, "%ld+%ld", (long)(r1->ru_nvcsw-r0->ru_nvcsw), (long)(r1->ru_nivcsw-r0->ru_nivcsw)); - break; - -#endif /* _POSIX_C_SOURCE */ - - } - } -} - - -static void -tvsub(struct timeval *tdiff, struct timeval *t1, struct timeval *t0) -{ - - tdiff->tv_sec = t1->tv_sec - t0->tv_sec; - tdiff->tv_usec = t1->tv_usec - t0->tv_usec; - if (tdiff->tv_usec < 0) - tdiff->tv_sec--, tdiff->tv_usec += 1000000; -} - - -static void -psecs(long int l, struct bu_vls *vp) -{ - register int i; - - i = l / 3600; - if (i) { - register int j; - bu_vls_printf(vp, "%d:", i); - i = l % 3600; - j = i / 60; - bu_vls_printf(vp, "%d%d", j / 10, j % 10); - } else { - i = l; - bu_vls_printf(vp, "%d", i / 60); - } - i = i % 60; - bu_vls_printf(vp, ":%d%d", i / 10, i % 10); -} - - -double -rt_read_timer(char *str, int len) -{ - struct bu_vls vls = BU_VLS_INIT_ZERO; - double cpu; - int todo; - - if (!str) - return rt_get_timer((struct bu_vls *)0, (double *)0); - - cpu = rt_get_timer(&vls, (double *)0); - todo = bu_vls_strlen(&vls); - - if (todo > len) - todo = len; - bu_strlcpy(str, bu_vls_addr(&vls), todo); - - return cpu; -} - - -/* - * Local Variables: - * mode: C - * tab-width: 8 - * indent-tabs-mode: t - * c-file-style: "stroustrup" - * End: - * ex: shiftwidth=4 tabstop=8 - */ diff --git a/src/librt/timerunix.c b/src/librt/timerunix.c deleted file mode 100644 index c9215161aa0..00000000000 --- a/src/librt/timerunix.c +++ /dev/null @@ -1,136 +0,0 @@ -/* T I M E R U N I X . C - * BRL-CAD - * - * Copyright (c) 1985-2020 United States Government as represented by - * the U.S. Army Research Laboratory. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public License - * version 2.1 as published by the Free Software Foundation. - * - * This library is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this file; see the file named COPYING for more - * information. - */ - - -#include "common.h" - -#include -#ifdef HAVE_MEMORY_H -#include -#endif -#include -#include -#include - -#ifdef HAVE_SYS_MACHD_H -# include -#endif - -#include "bu/vls.h" -#include "bu/str.h" - -#ifndef HAVE_DECL_TIME -time_t time(time_t *); -#endif - - -#ifndef HZ -/* It's not always in sys/param.h; if not, guess */ -# define HZ 60 -# define DEFAULT_HZ yes -#endif - - -/* Standard System V stuff */ -static time_t time0; -static struct tms tms0; - -void -rt_prep_timer(void) -{ - (void)time(&time0); - (void)times(&tms0); -} - - -double -rt_get_timer(struct bu_vls *vp, double *elapsed) -{ - time_t now; - double user_cpu_secs; - double sys_cpu_secs; - double elapsed_secs; - double percent; - struct tms tmsnow; - - /* Real time. 1 second resolution. */ - (void)time(&now); - elapsed_secs = now-time0; - - /* CPU time */ - (void)times(&tmsnow); - user_cpu_secs = (tmsnow.tms_utime + tmsnow.tms_cutime) - - (tms0.tms_utime + tms0.tms_cutime); - user_cpu_secs /= HZ; - sys_cpu_secs = (tmsnow.tms_stime + tmsnow.tms_cstime) - - (tms0.tms_stime + tms0.tms_cstime); - sys_cpu_secs /= HZ; - if (user_cpu_secs < 0.00001) user_cpu_secs = 0.00001; - if (elapsed_secs < 0.00001) elapsed_secs = user_cpu_secs; /* It can't be any less! */ - - if (elapsed) *elapsed = elapsed_secs; - - if (vp) { - percent = user_cpu_secs/elapsed_secs*100.0; - BU_CK_VLS(vp); -#ifdef DEFAULT_HZ - bu_vls_printf(vp, - "%g user + %g sys in %g elapsed secs (%g%%) WARNING: HZ=60 assumed, fix librt/timerunix.c", - user_cpu_secs, sys_cpu_secs, elapsed_secs, percent); -#else - bu_vls_printf(vp, - "%g user + %g sys in %g elapsed secs (%g%%)", - user_cpu_secs, sys_cpu_secs, elapsed_secs, percent); -#endif - } - return user_cpu_secs; -} - - -double -rt_read_timer(char *str, int len) -{ - struct bu_vls vls = BU_VLS_INIT_ZERO; - double cpu; - int todo; - - if (!str) - return rt_get_timer((struct bu_vls *)0, (double *)0); - - cpu = rt_get_timer(&vls, (double *)0); - todo = bu_vls_strlen(&vls); - - if (todo > len) - todo = len; - bu_strlcpy(str, bu_vls_addr(&vls), todo); - - return cpu; -} - - -/* - * Local Variables: - * mode: C - * tab-width: 8 - * indent-tabs-mode: t - * c-file-style: "stroustrup" - * End: - * ex: shiftwidth=4 tabstop=8 - */ diff --git a/src/librt/tol.c b/src/librt/tol.c index 4198e6d33db..3860d4548b3 100644 --- a/src/librt/tol.c +++ b/src/librt/tol.c @@ -1,7 +1,7 @@ /* T O L . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/transform.c b/src/librt/transform.c index 7f677866ce1..59058875404 100644 --- a/src/librt/transform.c +++ b/src/librt/transform.c @@ -1,7 +1,7 @@ /* T R A N S F O R M . C * BRL-CAD * - * Copyright (c) 2006-2020 United States Government as represented by + * Copyright (c) 2006-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/tree.c b/src/librt/tree.c index 07ac42443f5..0c6a0026f94 100644 --- a/src/librt/tree.c +++ b/src/librt/tree.c @@ -1,7 +1,7 @@ /* T R E E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/uv.c b/src/librt/uv.c index 4f96f4fc6eb..5d2b33168b9 100644 --- a/src/librt/uv.c +++ b/src/librt/uv.c @@ -1,7 +1,7 @@ /* U V . C * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/uvpoints.cpp b/src/librt/uvpoints.cpp index 674be56122a..8b82f7a32af 100644 --- a/src/librt/uvpoints.cpp +++ b/src/librt/uvpoints.cpp @@ -1,7 +1,7 @@ /* U V P O I N T S . C P P * BRL-CAD * - * Copyright (c) 2010-2020 United States Government as represented by + * Copyright (c) 2010-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/other/libvds/COPYING b/src/librt/vds/COPYING similarity index 100% rename from src/other/libvds/COPYING rename to src/librt/vds/COPYING diff --git a/src/other/libvds/README b/src/librt/vds/README similarity index 100% rename from src/other/libvds/README rename to src/librt/vds/README diff --git a/src/other/libvds/vds.c b/src/librt/vds/vds.c similarity index 83% rename from src/other/libvds/vds.c rename to src/librt/vds/vds.c index 1372278c985..5962ab89fc0 100644 --- a/src/other/libvds/vds.c +++ b/src/librt/vds/vds.c @@ -1,3 +1,35 @@ +/***************************************************************************\ + + Copyright 1999 The University of Virginia. + All Rights Reserved. + + Permission to use, copy, modify and distribute this software and its + documentation without fee, and without a written agreement, is + hereby granted, provided that the above copyright notice and the + complete text of this comment appear in all copies, and provided that + the University of Virginia and the original authors are credited in + any publications arising from the use of this software. + + IN NO EVENT SHALL THE UNIVERSITY OF VIRGINIA OR THE AUTHOR OF THIS + SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, + INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING + OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE + UNIVERSITY OF VIRGINIA AND/OR THE AUTHOR OF THIS SOFTWARE HAVE BEEN + ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + The author of the vdslib software library may be contacted at: + + US Mail: Dr. David Patrick Luebke + Department of Computer Science + Thornton Hall, University of Virginia + Charlottesville, VA 22903 + +Phone: (804)924-1021 + +EMail: luebke@cs.virginia.edu + +\*****************************************************************************/ + /** * @memo Routines for constructing the VDSlib vertex tree. * @name Building the vertex tree @@ -45,12 +77,13 @@ */ /*@{*/ -#include +#include "common.h" #include #include #include #include +#include "vmath.h" #include "vds.h" #define MAJOR 1 @@ -66,7 +99,6 @@ #define VDS_DEBUG(x) printf x #else #define VDS_DEBUG(x) -#define NDEBUG /* disable asserts */ #endif /** @@ -135,68 +167,68 @@ extern void vdsComputeTriNodes(vdsNode *node, vdsNode *root); extern "C" { #endif -#define VEC3_EQUAL(a,b) ((a)[0]==(b)[0]&&(a)[1]==(b)[1]&&(a)[2]==(b)[2]) +#define VEC3_EQUAL(a,b) (NEAR_EQUAL((a)[0],(b)[0], SMALL_FASTF) && NEAR_EQUAL((a)[1],(b)[1], SMALL_FASTF) && NEAR_EQUAL((a)[2],(b)[2],SMALL_FASTF)) #define VEC3_COPY(dst,src) ((dst)[0]=(src)[0], \ - (dst)[1]=(src)[1], \ - (dst)[2]=(src)[2]) + (dst)[1]=(src)[1], \ + (dst)[2]=(src)[2]) #define VEC3_ADD(dst,a,b) {(dst)[0]=(a)[0]+(b)[0];\ - (dst)[1]=(a)[1]+(b)[1];\ - (dst)[2]=(a)[2]+(b)[2];} + (dst)[1]=(a)[1]+(b)[1];\ + (dst)[2]=(a)[2]+(b)[2];} #define VEC3_SUBTRACT(dst,a,b) {(dst)[0]=(a)[0]-(b)[0];\ - (dst)[1]=(a)[1]-(b)[1];\ - (dst)[2]=(a)[2]-(b)[2];} + (dst)[1]=(a)[1]-(b)[1];\ + (dst)[2]=(a)[2]-(b)[2];} #define VEC3_SCALE(dst,scal,vec) {(dst)[0]=(vec)[0]*(scal);\ - (dst)[1]=(vec)[1]*(scal);\ - (dst)[2]=(vec)[2]*(scal);} + (dst)[1]=(vec)[1]*(scal);\ + (dst)[2]=(vec)[2]*(scal);} #define VEC3_AVERAGE(dst,a,b) {(dst)[0]=((a)[0]+(b)[0])/2.0;\ - (dst)[1]=((a)[1]+(b)[1])/2.0;\ - (dst)[2]=((a)[2]+(b)[2])/2.0;} + (dst)[1]=((a)[1]+(b)[1])/2.0;\ + (dst)[2]=((a)[2]+(b)[2])/2.0;} #define VEC3_DOT(_v0, _v1) ((_v0)[0] * (_v1)[0] + \ - (_v0)[1] * (_v1)[1] + \ - (_v0)[2] * (_v1)[2]) + (_v0)[1] * (_v1)[1] + \ + (_v0)[2] * (_v1)[2]) #define VEC3_CROSS(dst,a,b) {(dst)[0]=(a)[1]*(b)[2]-(a)[2]*(b)[1];\ - (dst)[1]=(a)[2]*(b)[0]-(a)[0]*(b)[2];\ - (dst)[2]=(a)[0]*(b)[1]-(a)[1]*(b)[0];} + (dst)[1]=(a)[2]*(b)[0]-(a)[0]*(b)[2];\ + (dst)[2]=(a)[0]*(b)[1]-(a)[1]*(b)[0];} #define VEC3_LENGTH_SQUARED(v) ((v)[0]*(v)[0] + (v)[1]*(v)[1] + (v)[2]*(v)[2]) #define VEC3_LENGTH(v) (sqrt(VEC3_LENGTH_SQUARED(v))) #define VEC3_DISTANCE_SQUARED(a,b) (((a)[0]-(b)[0])*((a)[0]-(b)[0]) + \ - ((a)[1]-(b)[1])*((a)[1]-(b)[1]) + \ - ((a)[2]-(b)[2])*((a)[2]-(b)[2])) + ((a)[1]-(b)[1])*((a)[1]-(b)[1]) + \ + ((a)[2]-(b)[2])*((a)[2]-(b)[2])) #define VEC3_DISTANCE(a,b) (sqrt(VEC3_DISTANCE_SQUARED((a),(b)))) #define VEC3_NORMALIZE(v) {static vdsFloat _n; \ - _n = 1.0/sqrt((v)[0]*(v)[0] + \ - (v)[1]*(v)[1] + \ - (v)[2]*(v)[2]); \ - (v)[0]*=_n; \ - (v)[1]*=_n; \ - (v)[2]*=_n;} + _n = 1.0/sqrt((v)[0]*(v)[0] + \ + (v)[1]*(v)[1] + \ + (v)[2]*(v)[2]); \ + (v)[0]*=_n; \ + (v)[1]*=_n; \ + (v)[2]*=_n;} #define VEC3_FIND_MAX(dst,a,b) {(dst)[0]=(a)[0]>(b)[0]?(a)[0]:(b)[0];\ - (dst)[1]=(a)[1]>(b)[1]?(a)[1]:(b)[1];\ - (dst)[2]=(a)[2]>(b)[2]?(a)[2]:(b)[2];} + (dst)[1]=(a)[1]>(b)[1]?(a)[1]:(b)[1];\ + (dst)[2]=(a)[2]>(b)[2]?(a)[2]:(b)[2];} #define VEC3_FIND_MIN(dst,a,b) {(dst)[0]=(a)[0]<(b)[0]?(a)[0]:(b)[0];\ - (dst)[1]=(a)[1]<(b)[1]?(a)[1]:(b)[1];\ - (dst)[2]=(a)[2]<(b)[2]?(a)[2]:(b)[2];} + (dst)[1]=(a)[1]<(b)[1]?(a)[1]:(b)[1];\ + (dst)[2]=(a)[2]<(b)[2]?(a)[2]:(b)[2];} #define BYTE3_EQUAL(a,b) ((a)[0]==(b)[0]&&(a)[1]==(b)[1]&&(a)[2]==(b)[2]) #define BYTE3_COPY(dst,src) ((dst)[0]=(src)[0], \ - (dst)[1]=(src)[1], \ - (dst)[2]=(src)[2]) + (dst)[1]=(src)[1], \ + (dst)[2]=(src)[2]) #ifdef __cplusplus } @@ -220,7 +252,6 @@ static int openflag = 0; */ void vdsBeginVertexTree() { - assert(openflag == 0); openflag = 1; } @@ -230,7 +261,6 @@ void vdsBeginVertexTree() */ void vdsBeginGeometry() { - assert(openflag == 1); maxnodes = 1024; nodearray = (vdsNode *) calloc(maxnodes, sizeof(vdsNode)); vdsNumnodes = 0; @@ -252,7 +282,6 @@ void vdsBeginGeometry() */ vdsNode *vdsEndGeometry() { - assert(openflag == 1); /* Tighten nodearray and triarray to free up unused memory */ nodearray = (vdsNode *) realloc(nodearray, vdsNumnodes * sizeof(vdsNode)); triarray = (vdsTri *) realloc(triarray, vdsNumtris * sizeof(vdsTri)); @@ -297,7 +326,6 @@ void vdsNewObject() */ vdsNode *vdsAddNode(vdsFloat x, vdsFloat y, vdsFloat z) { - assert(openflag == 1); nodearray[vdsNumnodes].coord[0] = x; nodearray[vdsNumnodes].coord[1] = y; nodearray[vdsNumnodes].coord[2] = z; @@ -330,16 +358,12 @@ vdsNode *vdsAddNode(vdsFloat x, vdsFloat y, vdsFloat z) * and vdsEndGeometry(). */ vdsTri *vdsAddTri(int v0, int v1, int v2, - vdsVec3 n0, vdsVec3 n1, vdsVec3 n2, - vdsByte3 c0, vdsByte3 c1, vdsByte3 c2) + vdsVec3 n0, vdsVec3 n1, vdsVec3 n2, + vdsByte3 c0, vdsByte3 c1, vdsByte3 c2) { - assert(openflag == 1); triarray[vdsNumtris].corners[0].index = v0 + curroffset; triarray[vdsNumtris].corners[1].index = v1 + curroffset; triarray[vdsNumtris].corners[2].index = v2 + curroffset; - assert(v0 + curroffset < vdsNumnodes); /* Sanity check */ - assert(v1 + curroffset < vdsNumnodes); /* Sanity check */ - assert(v2 + curroffset < vdsNumnodes); /* Sanity check */ VEC3_COPY(triarray[vdsNumtris].normal[0], n0); VEC3_COPY(triarray[vdsNumtris].normal[1], n1); VEC3_COPY(triarray[vdsNumtris].normal[2], n2); @@ -365,23 +389,21 @@ vdsTri *vdsAddTri(int v0, int v1, int v2, * @param nnodes The number of nodes being merged * @param nodes Nodes being merged (it is an error if any of these * nodes already has a parent node) - * @param XYZ The coordinates of the new node's repvert + * @param x The X coordinate of the new node's repvert + * @param y The Y coordinate of the new node's repvert + * @param z The Z coordinate of the new node's repvert * @return A pointer to the newly created parent node. NOTE: * This pointer is only valid until the vdsEndVertexTree() call. */ vdsNode *vdsClusterNodes(int nnodes, vdsNode **nodes, - vdsFloat x, vdsFloat y, vdsFloat z) + vdsFloat x, vdsFloat y, vdsFloat z) { int i; vdsNode *parent = (vdsNode *) calloc(1, sizeof(vdsNode)); - assert(nnodes <= VDS_MAXDEGREE); - assert(nodes[0] != NULL); parent->children = nodes[0]; parent->children->parent = parent; for (i = 1; i < nnodes; i++) { - assert(nodes[i] != NULL); - assert(nodes[i]->parent == NULL); nodes[i]->parent = parent; nodes[i - 1]->sibling = nodes[i]; } @@ -393,76 +415,6 @@ vdsNode *vdsClusterNodes(int nnodes, vdsNode **nodes, return parent; } -/* - * Function: idEqual - * Description: Returns 1 if the two given vdsNodeIds are equal, 0 otherwise - */ -static int idEqual(vdsNodeId n1, vdsNodeId n2) -{ - if (n1.depth != n2.depth) { - return 0; - } else { - if (n1.path != n2.path) { - return 0; - } else { - return 1; - } - } -} - -/* - * Function: assignNodeIds - * Description: Recursively descends vertex tree, assigning node paths & depths - * and initializing node->status to Inactive (since 0 == Boundary - * for speed reasons). - * Arguments: node - the node rooting the given subtree - * nodeId - the node id of the given node - * idArray - array in which we put ids of leaf nodes - */ -static int assignNodeIds(vdsNode *node, vdsNodeId nodeId, vdsNodeId *idArray) -{ - int i, j; - vdsNode *child; - vdsNodeId childId; - static int maxdepth = 0; - static int maxdegree = 0; - - node->status = Inactive; - node->depth = nodeId.depth; - j = 0; - child = node->children; - while (child != NULL) { - childId.depth = nodeId.depth + 1; - PATH_COPY(childId.path, nodeId.path); - PATH_SET_BRANCH(childId.path, nodeId.depth, j); - - assignNodeIds(child, childId, idArray); - j++; - child = child->sibling; - } - /* - * If this is a leaf node (i.e., a vertex in original model) store its - * NodeId in idArray[]. Later we will convert tri->corners to reference - * these nodes by NodeId rather than index in nodearray[]. - */ - if (j == 0) { - int index = node - nodearray; /* pointer arithmetic */ - - assert(index < vdsNumnodes); - idArray[index] = nodeId; - } - if (j > maxdegree) { - maxdegree = j; - } - if (nodeId.depth > maxdepth) { - maxdepth = nodeId.depth; - } - assert (maxdegree <= VDS_MAXDEGREE); - assert(maxdepth <= VDS_MAXDEPTH); - - return maxdepth; -} - /* * Function: verifyRootedTree * Description: Verifies that all the leaf nodes in nodearray belong to a @@ -597,102 +549,6 @@ static vdsNode *moveTrisToNodes(vdsNode *N) return N; } -/* - * Function: computeInternalBounds - * Description: Recursively descends the vertex tree, computing each node's - * bounding sphere from its children's bounds. - * Algorithm: Computes the center of the new bounding sphere by averaging - * the centers of the child spheres. For each child sphere, - * find the distance from its center to the averaged parent - * center, plus the radius of the child sphere. The maximum of - * these is used as the radius for the parent sphere. - * XXX: This is certainly suboptimal. Perhaps I should modify and use - * the Graphics Gems code for finding tightly-enclosing spheres? - */ -static void computeInternalBounds(vdsNode *node) -{ - vdsNode *child = node->children; - int numchildren = 0; - vdsFloat maxdist = 0; - vdsVec3 center = {0, 0, 0}; - - /* If node is a leaf, just return */ - if (child == NULL) { - return; - } - - while (child != NULL) { - computeInternalBounds(child); /* Recurse to compute child sphere */ - VEC3_ADD(center, center, child->bound.center); - child = child->sibling; - numchildren++; - } - VEC3_SCALE(center, 1.0 / (vdsFloat)numchildren, center); - child = node->children; - while (child != NULL) { - vdsFloat dist = - VEC3_DISTANCE(center, child->bound.center) + child->bound.radius; - if (dist > maxdist) { - maxdist = dist; - } - child = child->sibling; - } - VEC3_COPY(node->bound.center, center); - node->bound.radius = maxdist; -} - -/* Recursively assign bounding volumes to each node. - * - * Algorithm: For the moment, uses a very simple, crude way of estimating - * bounding spheres: spins through triarray and for each leaf - * node, computes an axis-aligned bounding box that completely - * contains all triangles associated with that node. From this - * AABB bounding spheres are calculated for each leaf node, then - * a recursive postorder traversal builds bounding spheres for - * the internal nodes of the vertex tree. - */ -static void assignNodeBounds(vdsNode *root) -{ - typedef struct { - vdsVec3 min, max; - } Box; - Box *boxes; - int i, j, k; - - boxes = (Box *) malloc(vdsNumnodes * sizeof(Box)); - for (i = 0; i < vdsNumnodes; i++) { - VEC3_COPY(boxes[i].min, nodearray[i].coord); - VEC3_COPY(boxes[i].max, nodearray[i].coord); - } - for (i = 0; i < vdsNumtris; i++) { /* iterate over tris */ - vdsTri *t = &triarray[i]; - vdsNode *c0 = &nodearray[t->corners[0].index]; - vdsNode *c1 = &nodearray[t->corners[1].index]; - vdsNode *c2 = &nodearray[t->corners[2].index]; - - for (j = 0; j < 3; j++) { /* iterate over corners of tri */ - int cindex = t->corners[j].index; - vdsNode *corner = &nodearray[cindex]; - /* Some effort wasted here testing each corner against itself: */ - VEC3_FIND_MAX(boxes[cindex].max, boxes[cindex].max, c0->coord); - VEC3_FIND_MIN(boxes[cindex].min, boxes[cindex].min, c0->coord); - VEC3_FIND_MAX(boxes[cindex].max, boxes[cindex].max, c1->coord); - VEC3_FIND_MIN(boxes[cindex].min, boxes[cindex].min, c1->coord); - VEC3_FIND_MAX(boxes[cindex].max, boxes[cindex].max, c2->coord); - VEC3_FIND_MIN(boxes[cindex].min, boxes[cindex].min, c2->coord); - } - } - /* Calculate bounding spheres from leaf nodes' bounding boxes */ - for (i = 0; i < vdsNumnodes; i++) { - vdsNode *N = &nodearray[i]; - - VEC3_AVERAGE(N->bound.center, boxes[i].min, boxes[i].max); - N->bound.radius = VEC3_DISTANCE(boxes[i].min, boxes[i].max) / 2.0; - } - free(boxes); - /* Recursively calculate internal node bounds from leaf bounds */ - computeInternalBounds(root); -} /** Finalize the VDS vertex tree. * After all geometry has been added and all leaf nodes (created @@ -717,19 +573,21 @@ static void assignNodeBounds(vdsNode *root) vdsNode *vdsEndVertexTree() { vdsNode *root; +#ifdef VDS_DEBUGPRINT vdsNodeId rootId = {0, 0}; +#endif vdsNodeId *ids; - int maxdepth; - int i, j; + int i; - assert(openflag == 1); root = &nodearray[0]; while (root->parent != NULL) { root = root->parent; } VDS_DEBUG(("Assigning node ids...")); ids = (vdsNodeId *) calloc(vdsNumnodes, sizeof(vdsNodeId)); - maxdepth = assignNodeIds(root, rootId, ids); +#ifdef VDS_DEBUGPRINT + int maxdepth = assignNodeIds(root, rootId, ids); +#endif VDS_DEBUG(("Done.\n")); VDS_DEBUG(("Verifying that all nodes form a single rooted tree...")); verifyRootedTree(root); @@ -752,17 +610,9 @@ vdsNode *vdsEndVertexTree() c1 = T->corners[1].index; c2 = T->corners[2].index; - assert(c0 < vdsNumnodes && c0 >= 0); - assert(c1 < vdsNumnodes && c1 >= 0); - assert(c2 < vdsNumnodes && c2 >= 0); - T->corners[0].id = ids[c0]; T->corners[1].id = ids[c1]; T->corners[2].id = ids[c2]; - - assert(! idEqual(T->corners[0].id, T->corners[1].id) && - ! idEqual(T->corners[1].id, T->corners[2].id) && - ! idEqual(T->corners[2].id, T->corners[0].id)); } free(ids); VDS_DEBUG(("Done.\n")); @@ -770,7 +620,7 @@ vdsNode *vdsEndVertexTree() computeSubtris(root); VDS_DEBUG(("Done.\n")); VDS_DEBUG(("Reallocating nodes and copying triangles into node->subtris " - "fields...")); + "fields...")); root = moveTrisToNodes(root); /* Note: reallocates all nodes */ free(nodearray); VDS_DEBUG(("Done.\n")); @@ -779,8 +629,9 @@ vdsNode *vdsEndVertexTree() free(triarray); /* nodearray still holds leaf nodes */ root->status = Boundary; /* root initially on boundary */ root->next = root->prev = root; /* root always on boundary path */ +#ifdef VDS_DEBUGPRINT VDS_DEBUG(("Done.\nVertex tree complete! Maximum depth = %d\n", maxdepth)); - +#endif openflag = 0; return root; } @@ -809,13 +660,13 @@ vdsNode *vdsEndVertexTree() The author of the vdslib software library may be contacted at: US Mail: Dr. David Patrick Luebke - Department of Computer Science - Thornton Hall, University of Virginia - Charlottesville, VA 22903 + Department of Computer Science + Thornton Hall, University of Virginia + Charlottesville, VA 22903 - Phone: (804)924-1021 +Phone: (804)924-1021 - EMail: luebke@cs.virginia.edu +EMail: luebke@cs.virginia.edu \*****************************************************************************/ /* @@ -847,11 +698,9 @@ vdsNode *vdsClusterOctree(vdsNode **nodes, int nnodes, int depth) int i, j; vdsVec3 min, max, center, average = {0, 0, 0}; - assert(depth < VDS_MAXDEPTH); /* Overestimate array size needs for childnodes now; shrink later */ for (i = 0; i < 8; i++) { childnodes[i] = (vdsNode **) malloc(sizeof(vdsNode *) * nnodes); - assert(childnodes[i] != NULL); } /* Find the min and max bounds of nodes, and accumulate average coord */ VEC3_COPY(min, nodes[0]->coord); @@ -897,7 +746,7 @@ vdsNode *vdsClusterOctree(vdsNode **nodes, int nnodes, int depth) /* Resize childnodes arrays to use only as much space as necessary */ for (i = 0; i < 8; i++) { childnodes[i] = (vdsNode **) - realloc(childnodes[i], sizeof(vdsNode *) * nchildnodes[i]); + realloc(childnodes[i], sizeof(vdsNode *) * nchildnodes[i]); } /* Recurse or store non-empty children */ for (i = 0; i < 8; i++) { @@ -914,7 +763,7 @@ vdsNode *vdsClusterOctree(vdsNode **nodes, int nnodes, int depth) } /* Finally, cluster nonempty children; this node is the resulting parent */ thisnode = vdsClusterNodes(nchildren, children, - average[0], average[1], average[2]); + average[0], average[1], average[2]); for (i = 0; i < 8; i++) { if (nchildnodes[i]) { free(childnodes[i]); @@ -1057,16 +906,11 @@ void vdsFoldNode(vdsNode *node) vdsTri *t; int i; - assert(node->status == Active); - /* Activate node and deactivate children */ node->status = Boundary; child = node->children; - assert(child != NULL); prev = child->prev; /* Set prev to first child's prev */ while (child != NULL) { - assert(child->status == Boundary); - child->status = Inactive; next = child->next; /* Set next to last child's next */ child = child->sibling; /* Advance to next child */ @@ -1103,8 +947,6 @@ void vdsUnfoldNode(vdsNode *node) vdsTri *t; int i; - assert(node->status == Boundary); - if (child == NULL) { return; /* Node is a leaf, leave on boundary */ } @@ -1117,7 +959,6 @@ void vdsUnfoldNode(vdsNode *node) prev->next = child; prev = child; - assert(child->status == Inactive); child->status = Boundary; child = child->sibling; /* Advance to next child */ } @@ -1146,7 +987,6 @@ void vdsFoldSubtree(vdsNode *node) { vdsNode *child = node->children; - assert(node->status == Active); while (child != NULL) { if (child->status == Active) { vdsFoldSubtree(child); @@ -1172,7 +1012,6 @@ void vdsUnfoldAncestors(vdsNode *node) { vdsNode *parent = node->parent; - assert(node->status == Inactive); if (parent != NULL) { if (parent->status == Boundary) { vdsUnfoldNode(parent); @@ -1228,7 +1067,6 @@ void vdsAdjustTreeBoundary(vdsNode *root, vdsFoldCriterion foldtest, void *udata current = current->children; } else { /* No folds or unfolds, move on to next node on the boundary */ - assert(current->next != NULL); current = current->next; } } while (current != root); @@ -1241,7 +1079,8 @@ void vdsAdjustTreeBoundary(vdsNode *root, vdsFoldCriterion foldtest, void *udata * determine whether to fold or unfold nodes. * * @param node the root of the (sub)tree to be adjusted - * @param foldtest() returns 1 if node should be folded, 0 otherwise + * @param foldtest returns 1 if node should be folded, 0 otherwise + * @param udata user data */ void vdsAdjustTreeTopDown(vdsNode *node, vdsFoldCriterion foldtest, void *udata) { @@ -1293,13 +1132,13 @@ void vdsAdjustTreeTopDown(vdsNode *node, vdsFoldCriterion foldtest, void *udata) The author of the vdslib software library may be contacted at: US Mail: Dr. David Patrick Luebke - Department of Computer Science - Thornton Hall, University of Virginia - Charlottesville, VA 22903 + Department of Computer Science + Thornton Hall, University of Virginia + Charlottesville, VA 22903 - Phone: (804)924-1021 +Phone: (804)924-1021 - EMail: luebke@cs.virginia.edu +EMail: luebke@cs.virginia.edu \*****************************************************************************/ /** @@ -1342,7 +1181,6 @@ static vdsNode *firstActiveAncestor(vdsNodeId id, vdsNode *proxy) proxy = proxy->sibling; whichchild --; } - assert(proxy != NULL); } return proxy; /* proxy->status is now Boundary */ } @@ -1389,7 +1227,7 @@ void vdsUpdateTriProxies(vdsTri *t) * of a node. NULL if the node is to be assumed visible. */ void vdsRenderTree(vdsNode *node, vdsRenderFunction render, - vdsVisibilityFunction visible, void *udata) + vdsVisibilityFunction visible, void *udata) { vdsNode *child; @@ -1440,13 +1278,13 @@ void vdsRenderTree(vdsNode *node, vdsRenderFunction render, The author of the vdslib software library may be contacted at: US Mail: Dr. David Patrick Luebke - Department of Computer Science - Thornton Hall, University of Virginia - Charlottesville, VA 22903 + Department of Computer Science + Thornton Hall, University of Virginia + Charlottesville, VA 22903 - Phone: (804)924-1021 +Phone: (804)924-1021 - EMail: luebke@cs.virginia.edu +EMail: luebke@cs.virginia.edu \*****************************************************************************/ /** @@ -1475,7 +1313,6 @@ vdsNode *vdsFindNode(vdsNodeId id, vdsNode *root) tmp = tmp->children; while (whichchild > 0) { - assert(tmp != NULL); tmp = tmp->sibling; --whichchild; } @@ -1503,7 +1340,6 @@ vdsNodeId vdsFindCommonId(vdsNodeId id1, vdsNodeId id2, int maxdepth) maxcommondepth = (id1.depth < id2.depth) ? id1.depth : id2.depth; maxcommondepth = (maxdepth < maxcommondepth) ? maxdepth : maxcommondepth; - assert(maxcommondepth <= VDS_MAXDEPTH); common.depth = 0; for (i = 0; i < maxcommondepth; i++) { @@ -1577,28 +1413,6 @@ void vdsPrintNodeId(const vdsNodeId *id) } } -/** Print a vdsNodeID to a string. - * Prints the node ID (depth & path down the vertex tree) in - * human-readable form to the given string str. The caller - * must ensure that str points to VDS_MAXDEPTH+1 allocated - * bytes. The returned str is null-terminated. - */ -void vdsSprintNodeId(char *str, const vdsNodeId *id) -{ - int i; - vdsNodePath tmppath = id->path; - - if (id->depth == 0) { - strcpy(str, ""); - } else { - for (i = 0; i < id->depth; i++) { - str[i] = (tmppath & VDS_BITMASK) + '0'; - tmppath >>= VDS_NUMBITS; - } - str[i] = '\0'; - } -} - /** Gather statistics for a vertex tree. * Recursively counts the number of nodes, the number of * leaf nodes (i.e., vertices from the original model), and the @@ -1695,13 +1509,13 @@ void vdsFreeTree(vdsNode *node) The author of the vdslib software library may be contacted at: US Mail: Dr. David Patrick Luebke - Department of Computer Science - Thornton Hall, University of Virginia - Charlottesville, VA 22903 + Department of Computer Science + Thornton Hall, University of Virginia + Charlottesville, VA 22903 - Phone: (804)924-1021 +Phone: (804)924-1021 - EMail: luebke@cs.virginia.edu +EMail: luebke@cs.virginia.edu \*****************************************************************************/ /** @@ -1739,16 +1553,15 @@ vdsNode *vdsReadTree(FILE *f, vdsNodeDataReader readdata) { int major, minor; int numnodes, numverts, numtris; - vdsNode *root, *currentnode, *lastnode, *parent; + vdsNode *root; - assert(f != NULL); if (fscanf(f, "VDS Vertex Tree file format version %d.%d\n", - &major, &minor) != 2) { + &major, &minor) != 2) { fprintf(stderr, "Error reading line 1 of input file.\n"); exit(1); } if (fscanf(f, "Total nodes: %d\nVertices: %d\nTriangles: %d\n", - &numnodes, &numverts, &numtris) != 3) { + &numnodes, &numverts, &numtris) != 3) { fprintf(stderr, "Error reading lines 2-4 of input file.\n"); exit(1); } @@ -1774,7 +1587,6 @@ static vdsNode *readChildren(FILE *f, vdsNode *parent, vdsNodeDataReader get) { vdsNode *node, *firstnode; - assert(parent != NULL); firstnode = readNode(f, get); node = firstnode; while (node != NULL) { @@ -1808,16 +1620,14 @@ static vdsNode *readNode(FILE *f, vdsNodeDataReader getdata) int numchildren, numsubtris; node = (vdsNode *) calloc(1, sizeof(vdsNode)); - assert(node != NULL); node->status = Inactive; - fread(&node->bound, sizeof(vdsBoundingVolume), 1, f); - fread(&node->coord, sizeof(vdsVec3), 1, f); - fread(&numchildren, sizeof(numchildren), 1, f); - assert(numchildren <= VDS_MAXDEGREE); + if (!fread(&node->bound, sizeof(vdsBoundingVolume), 1, f)) return node; + if (!fread(&node->coord, sizeof(vdsVec3), 1, f)) return node; + if (!fread(&numchildren, sizeof(numchildren), 1, f)) return node; /* if numchildren is 0, set node->children NULL, otherwise to non-NULL */ node->children = (numchildren == 0 ? NULL : (vdsNode *) 0x1); /* Read sibling pointer (actually we just care if it's NULL or not) */ - fread(&node->sibling, sizeof(node->sibling), 1, f); + if (!fread(&node->sibling, sizeof(node->sibling), 1, f)) return node; /* * We can read and write the triangles directly to the binary file, at * the expense of re-running vdsComputeTriNodes() afterwards. Also, @@ -1825,14 +1635,14 @@ static vdsNode *readNode(FILE *f, vdsNodeDataReader getdata) * that we are locked to a particular architecture/compiler's memory * alignment...not very portable. */ - fread(&numsubtris, sizeof(numsubtris), 1, f); + if (!fread(&numsubtris, sizeof(numsubtris), 1, f)) return node; node->nsubtris = numsubtris; node = (vdsNode *) realloc(node, sizeof(vdsNode) + - numsubtris * sizeof(vdsTri)); - fread(&node->subtris[0], sizeof(vdsTri), numsubtris, f); + numsubtris * sizeof(vdsTri)); + if (!fread(&node->subtris[0], sizeof(vdsTri), numsubtris, f)) return node; /* Now get the associated node data if user has provided a function */ if (getdata == NULL) { - fread(&node->data, sizeof(vdsNodeData), 1, f); + if (!fread(&node->data, sizeof(vdsNodeData), 1, f)) return node; } else { node->data = getdata(f); } @@ -1854,9 +1664,7 @@ static vdsNode *readNode(FILE *f, vdsNodeDataReader getdata) void vdsWriteTree(FILE *f, vdsNode *root, vdsNodeDataWriter writedata) { int numnodes, numverts, numtris; - vdsNode *child; - assert(f != NULL); fprintf(f, "VDS Vertex Tree file format version %d.%d\n", MAJOR, MINOR); vdsStatTree(root, &numnodes, &numverts, &numtris); fprintf(f, "Total nodes: %d\n", numnodes); @@ -1900,7 +1708,7 @@ static void writeChildren(FILE *f, vdsNode *parent, vdsNodeDataWriter put) static void writeNode(FILE *f, vdsNode *node, vdsNodeDataWriter putdata) { vdsNode *child; - int i, numchildren = 0, numsubtris = node->nsubtris; + int numchildren = 0, numsubtris = node->nsubtris; fwrite(&node->bound, sizeof(vdsBoundingVolume), 1, f); fwrite(&node->coord, sizeof(vdsVec3), 1, f); @@ -1909,7 +1717,6 @@ static void writeNode(FILE *f, vdsNode *node, vdsNodeDataWriter putdata) numchildren ++; child = child->sibling; } - assert(numchildren <= VDS_MAXDEGREE); fwrite(&numchildren, sizeof(numchildren), 1, f); /* Write the sibling pointer (actually we just care if it's NULL or not) */ fwrite(&node->sibling, sizeof(node->sibling), 1, f); @@ -1925,34 +1732,13 @@ static void writeNode(FILE *f, vdsNode *node, vdsNodeDataWriter putdata) } /*@}*/ -/***************************************************************************\ - Copyright 1999 The University of Virginia. - All Rights Reserved. - - Permission to use, copy, modify and distribute this software and its - documentation without fee, and without a written agreement, is - hereby granted, provided that the above copyright notice and the - complete text of this comment appear in all copies, and provided that - the University of Virginia and the original authors are credited in - any publications arising from the use of this software. - - IN NO EVENT SHALL THE UNIVERSITY OF VIRGINIA OR THE AUTHOR OF THIS - SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, - INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, ARISING - OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE - UNIVERSITY OF VIRGINIA AND/OR THE AUTHOR OF THIS SOFTWARE HAVE BEEN - ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - The author of the vdslib software library may be contacted at: - - US Mail: Dr. David Patrick Luebke - Department of Computer Science - Thornton Hall, University of Virginia - Charlottesville, VA 22903 - - Phone: (804)924-1021 - - EMail: luebke@cs.virginia.edu - -\*****************************************************************************/ +/* + * Local Variables: + * tab-width: 8 + * mode: C + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/other/libvds/vds.h b/src/librt/vds/vds.h similarity index 80% rename from src/other/libvds/vds.h rename to src/librt/vds/vds.h index 2d5b9a90a5b..ac06b533a8f 100644 --- a/src/other/libvds/vds.h +++ b/src/librt/vds/vds.h @@ -1,3 +1,36 @@ +/***************************************************************************\ + + Copyright 1999 The University of Virginia. + All Rights Reserved. + + Permission to use, copy, modify and distribute this software and its + documentation without fee, and without a written agreement, is + hereby granted, provided that the above copyright notice and the + complete text of this comment appear in all copies, and provided that + the University of Virginia and the original authors are credited in + any publications arising from the use of this software. + + IN NO EVENT SHALL THE UNIVERSITY OF VIRGINIA + OR THE AUTHOR OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, + INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING + LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS + DOCUMENTATION, EVEN IF THE UNIVERSITY OF VIRGINIA AND/OR THE + AUTHOR OF THIS SOFTWARE HAVE BEEN ADVISED OF THE POSSIBILITY OF + SUCH DAMAGES. + + The author of the vdslib software library may be contacted at: + + US Mail: Dr. David Patrick Luebke + Department of Computer Science + Thornton Hall, University of Virginia + Charlottesville, VA 22903 + +Phone: (804)924-1021 + +EMail: luebke@cs.virginia.edu + +\*****************************************************************************/ + /** * Note: This is just an unofficial overview of the basics of what libvds * is/does and how to use it. It is not guaranteed to be complete or accurate! @@ -72,30 +105,6 @@ #ifndef _VDS_H #define _VDS_H -#ifdef __cplusplus -extern "C" { -#endif - -#if defined(_WIN32) -# define COMPILER_DLLEXPORT __declspec(dllexport) -# define COMPILER_DLLIMPORT __declspec(dllimport) -#else -# define COMPILER_DLLEXPORT __attribute__ ((visibility ("default"))) -# define COMPILER_DLLIMPORT __attribute__ ((visibility ("default"))) -#endif - -#ifndef VDS_EXPORT -# if defined(VDS_DLL_EXPORTS) && defined(VDS_DLL_IMPORTS) -# error "Only VDS_DLL_EXPORTS or VDS_DLL_IMPORTS can be defined, not both." -# elif defined(VDS_DLL_EXPORTS) -# define VDS_EXPORT COMPILER_DLLEXPORT -# elif defined(VDS_DLL_IMPORTS) -# define VDS_EXPORT COMPILER_DLLIMPORT -# else -# define VDS_EXPORT -# endif -#endif - #include /** VDS_MAXDEGREE defines the maximum degree of vertex tree nodes */ @@ -177,9 +186,9 @@ typedef union { */ typedef struct _vdsTri { vdsTriCorner corners[3]; /* leaf nodes corresponding to * - * 3 original corner vertices */ + * 3 original corner vertices */ struct _vdsNode *proxies[3]; /* nodes representing corners; * - * i.e., the FAA of each corner */ + * i.e., the FAA of each corner */ struct _vdsNode *node; /* smallest node containing tri */ vdsVec3 normal[3]; /* normal for the tri */ vdsByte3 color[3]; /* RGB for the tri's corners */ @@ -199,10 +208,10 @@ typedef struct _vdsNode { vdsNodeStatus status; /* is node currently active? */ vdsBoundingVolume bound; /* bounding volume of triangles * - * supported by the node */ + * supported by the node */ vdsVec3 coord; /* coordinate of node's proxy */ vdsTri *vistris; /* linked list of visible tris * - * contained by this node */ + * contained by this node */ vdsNodeData data; /* auxiliary node data */ struct _vdsNode *next; /* next node in boundary path */ struct _vdsNode *prev; /* prev node in boundary path */ @@ -241,44 +250,44 @@ typedef vdsNodeData (*vdsNodeDataReader) (FILE *f); */ /* Routines for maintaining the vertex tree (dynamic.c) */ -VDS_EXPORT extern void vdsAdjustTreeBoundary(vdsNode *, vdsFoldCriterion, void *); -VDS_EXPORT extern void vdsAdjustTreeTopDown(vdsNode *, vdsFoldCriterion, void *); +extern void vdsAdjustTreeBoundary(vdsNode *, vdsFoldCriterion, void *); +extern void vdsAdjustTreeTopDown(vdsNode *, vdsFoldCriterion, void *); /* Low-level vertex tree maintainance routines; not need by most users: */ -VDS_EXPORT extern void vdsFoldNode(vdsNode *); -VDS_EXPORT extern void vdsUnfoldNode(vdsNode *); -VDS_EXPORT extern void vdsFoldSubtree(vdsNode *); +extern void vdsFoldNode(vdsNode *); +extern void vdsUnfoldNode(vdsNode *); +extern void vdsFoldSubtree(vdsNode *); /* Routines for rendering the vertex tree (render.c) */ -VDS_EXPORT extern void vdsUpdateTriProxies(vdsTri *t); -VDS_EXPORT extern void vdsRenderTree(vdsNode *node, vdsRenderFunction render, - vdsVisibilityFunction visible, void *udata); +extern void vdsUpdateTriProxies(vdsTri *t); +extern void vdsRenderTree(vdsNode *node, vdsRenderFunction render, + vdsVisibilityFunction visible, void *udata); /* Routines for building the vertex tree (build.c) */ -VDS_EXPORT extern void vdsBeginVertexTree(); -VDS_EXPORT extern void vdsBeginGeometry(); -VDS_EXPORT extern vdsNode *vdsAddNode(vdsFloat x, vdsFloat y, vdsFloat z); -VDS_EXPORT extern vdsTri *vdsAddTri(int v0, int v1, int v2, - vdsVec3 n0, vdsVec3 n1, vdsVec3 n2, - vdsByte3 c0, vdsByte3 c1, vdsByte3 c2); -VDS_EXPORT extern void vdsNewObject(); -VDS_EXPORT extern vdsNode *vdsEndGeometry(); -VDS_EXPORT extern vdsNode *vdsClusterNodes(int nnodes, vdsNode **nodes, - vdsFloat x, vdsFloat y, vdsFloat z); -VDS_EXPORT extern vdsNode *vdsEndVertexTree(); +extern void vdsBeginVertexTree(); +extern void vdsBeginGeometry(); +extern vdsNode *vdsAddNode(vdsFloat x, vdsFloat y, vdsFloat z); +extern vdsTri *vdsAddTri(int v0, int v1, int v2, + vdsVec3 n0, vdsVec3 n1, vdsVec3 n2, + vdsByte3 c0, vdsByte3 c1, vdsByte3 c2); +extern void vdsNewObject(); +extern vdsNode *vdsEndGeometry(); +extern vdsNode *vdsClusterNodes(int nnodes, vdsNode **nodes, + vdsFloat x, vdsFloat y, vdsFloat z); +extern vdsNode *vdsEndVertexTree(); /* Routines for reading and writing the vertex tree (file.c) */ -VDS_EXPORT extern vdsNode *vdsReadTree(FILE *f, vdsNodeDataReader readdata); -VDS_EXPORT extern void vdsWriteTree(FILE *f, vdsNode *root, vdsNodeDataWriter writedata); +extern vdsNode *vdsReadTree(FILE *f, vdsNodeDataReader readdata); +extern void vdsWriteTree(FILE *f, vdsNode *root, vdsNodeDataWriter writedata); /* Assorted useful routines (util.c) */ -VDS_EXPORT extern vdsNode *vdsFindNode(vdsNodeId id, vdsNode *root); -VDS_EXPORT extern void vdsPrintNodeId(const vdsNodeId *id); -VDS_EXPORT extern void vdsSprintNodeId(char *str, const vdsNodeId *id); -VDS_EXPORT extern void vdsStatTree(vdsNode *root, int *nodes, int *leaves, int *tris); -VDS_EXPORT extern void vdsFreeTree(vdsNode *node); +extern vdsNode *vdsFindNode(vdsNodeId id, vdsNode *root); +extern void vdsPrintNodeId(const vdsNodeId *id); +extern void vdsSprintNodeId(char *str, const vdsNodeId *id); +extern void vdsStatTree(vdsNode *root, int *nodes, int *leaves, int *tris); +extern void vdsFreeTree(vdsNode *node); /* (cluster.c) */ -VDS_EXPORT extern vdsNode *vdsClusterOctree(vdsNode **nodes, int nnodes, int depth); +extern vdsNode *vdsClusterOctree(vdsNode **nodes, int nnodes, int depth); /* * The following macros relate to the maximum degree of the vertex tree, @@ -312,42 +321,16 @@ VDS_EXPORT extern vdsNode *vdsClusterOctree(vdsNode **nodes, int nnodes, int dep # error "Only values of 2, 4, and 8 supported for VDS_MAXDEGREE" #endif -#ifdef __cplusplus -} -#endif - #endif /* _VDS_H */ /*@}*/ -/***************************************************************************\ - - Copyright 1999 The University of Virginia. - All Rights Reserved. - - Permission to use, copy, modify and distribute this software and its - documentation without fee, and without a written agreement, is - hereby granted, provided that the above copyright notice and the - complete text of this comment appear in all copies, and provided that - the University of Virginia and the original authors are credited in - any publications arising from the use of this software. - - IN NO EVENT SHALL THE UNIVERSITY OF VIRGINIA - OR THE AUTHOR OF THIS SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, - INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING - LOST PROFITS, ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS - DOCUMENTATION, EVEN IF THE UNIVERSITY OF VIRGINIA AND/OR THE - AUTHOR OF THIS SOFTWARE HAVE BEEN ADVISED OF THE POSSIBILITY OF - SUCH DAMAGES. - - The author of the vdslib software library may be contacted at: - - US Mail: Dr. David Patrick Luebke - Department of Computer Science - Thornton Hall, University of Virginia - Charlottesville, VA 22903 - - Phone: (804)924-1021 - EMail: luebke@cs.virginia.edu - -\*****************************************************************************/ +/* + * Local Variables: + * tab-width: 8 + * mode: C + * indent-tabs-mode: t + * c-file-style: "stroustrup" + * End: + * ex: shiftwidth=4 tabstop=8 + */ diff --git a/src/librt/vers.c b/src/librt/vers.c index f2dccacae65..25c042f0e56 100644 --- a/src/librt/vers.c +++ b/src/librt/vers.c @@ -1,7 +1,7 @@ /* V E R S . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/vlist.c b/src/librt/vlist.c index 36f044ac6d5..a8aa422c908 100644 --- a/src/librt/vlist.c +++ b/src/librt/vlist.c @@ -1,7 +1,7 @@ /* V L I S T . C * BRL-CAD * - * Copyright (c) 1992-2020 United States Government as represented by + * Copyright (c) 1992-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/vshoot.c b/src/librt/vshoot.c index c64f4ccd31e..bd6d4929143 100644 --- a/src/librt/vshoot.c +++ b/src/librt/vshoot.c @@ -1,7 +1,7 @@ /* V S H O O T . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/librt/wdb.c b/src/librt/wdb.c index e0b28656a3a..6b8ceba87fa 100644 --- a/src/librt/wdb.c +++ b/src/librt/wdb.c @@ -1,7 +1,7 @@ /* W D B . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/CMakeLists.txt b/src/libtclcad/CMakeLists.txt index 4d4696675cd..5a92196ec5e 100644 --- a/src/libtclcad/CMakeLists.txt +++ b/src/libtclcad/CMakeLists.txt @@ -2,6 +2,7 @@ set(LIBTCLCAD_SRCS auto_path.c bn.c bu.c + command_io.cpp commands.c cmdhist.c dm.c @@ -63,15 +64,11 @@ if (BRLCAD_ENABLE_TCL) libbn libbu ${TCL_LIBRARY} - ${ITCL_LIBRARY} ${TCLCAD_XLIBS} ) if (TK_LIBRARY) set(TCLCAD_LIBS ${TCLCAD_LIBS} ${TK_LIBRARY}) endif (TK_LIBRARY) - if (ITK_LIBRARY) - set(TCLCAD_LIBS ${TCLCAD_LIBS} ${ITK_LIBRARY}) - endif (ITK_LIBRARY) BRLCAD_ADDLIB(libtclcad "${LIBTCLCAD_SRCS}" "${TCLCAD_LIBS}") set_target_properties(libtclcad PROPERTIES VERSION 20.0.1 SOVERSION 20) @@ -85,6 +82,13 @@ if (BRLCAD_ENABLE_TCL) # For anyone to do anything with tclcad, we need the libged plugins add_dependencies(libtclcad ged_plugins) + set(STAGE_TGTS tcl_stage tk_stage itcl_stage itk_stage iwidgets_stage) + foreach(tgt ${STAGE_TGTS}) + if (TARGET ${tgt}) + add_dependencies(libtclcad ${tgt}) + endif (TARGET ${tgt}) + endforeach(tgt ${STAGE_TGTS}) + endif (BRLCAD_ENABLE_TCL) set(tclcad_ignore_files diff --git a/src/libtclcad/auto_path.c b/src/libtclcad/auto_path.c index 5aa5594c4ac..a29c9347506 100644 --- a/src/libtclcad/auto_path.c +++ b/src/libtclcad/auto_path.c @@ -1,7 +1,7 @@ /* A U T O _ P A T H . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -37,250 +37,280 @@ #endif #include "bu/app.h" +#include "bu/path.h" +#include "bu/ptbl.h" #include "tclcad.h" #define MAX_BUF 2048 -/* Appends a new path to the path list, preceded by BU_PATH_SEPARATOR. - * - * The path is specified as a sequence of string arguments, one per - * directory, terminated by a (const char *)NULL argument. - * - * BU_DIR_SEPARATOR is inserted between the string arguments (but not - * before or after the path). - */ -static void -join_path(struct bu_vls *path_list, ...) -{ - va_list ap; - const char *dir; - - bu_vls_putc(path_list, BU_PATH_SEPARATOR); - - va_start(ap, path_list); - - dir = va_arg(ap, const char *); - while (dir != NULL) { - bu_vls_printf(path_list, "%s", dir); - - dir = va_arg(ap, const char *); - if (dir != NULL) { - bu_vls_putc(path_list, BU_DIR_SEPARATOR); - } - } - va_end(ap); -} - /** * Set up the Tcl auto_path for locating various necessary BRL-CAD * scripting resources. Detect whether the current invocation is from * an installed binary or not and append to the auto_path accordingly * for where the needed tclscript resources should be found. - * - ** installed invocation paths - * BRLCAD_ROOT/lib/tclTCL_VERSION/init.tcl - * BRLCAD_ROOT/lib/tclTK_VERSION/tk.tcl - * BRLCAD_ROOT/lib/itclITCL_VERSION/itcl.tcl - * BRLCAD_ROOT/lib/itkITCL_VERSION/itk.tcl - * BRLCAD_ROOT/lib/iwidgetsIWIDGETS_VERSION/iwidgets.tcl - * BRLCAD_ROOT/share/tclscripts/pkgIndex.tcl and subdirs - * - * if TCLCAD_LIBRARY_PATH is set - * append to search path - * get installation directory and invocation path - * if being run from installation directory - * add installation paths to search path - * if being run from source directory - * add source paths to search path - * add installation paths to search path */ void tclcad_auto_path(Tcl_Interp *interp) { - struct bu_vls auto_path = BU_VLS_INIT_ZERO; - struct bu_vls lappend = BU_VLS_INIT_ZERO; - const char *library_path = NULL; - - struct bu_vls root_buf = BU_VLS_INIT_ZERO; - const char *root = NULL; - const char *data = NULL; - char buffer[MAX_BUF] = {0}; - - const char *which_argv = NULL; - const char *srcpath = NULL; - int from_installed = 0; - - int found_init_tcl = 0; - int found_tk_tcl = 0; - int found_itcl_tcl = 0; - int found_itk_tcl = 0; - - char pathsep[2] = { BU_PATH_SEPARATOR, '\0' }; - - struct bu_vls initpath = BU_VLS_INIT_ZERO; - struct bu_vls tcl = BU_VLS_INIT_ZERO; - struct bu_vls itcl = BU_VLS_INIT_ZERO; -#ifdef HAVE_TK - struct bu_vls tk = BU_VLS_INIT_ZERO; - struct bu_vls itk = BU_VLS_INIT_ZERO; - struct bu_vls iwidgets = BU_VLS_INIT_ZERO; -#endif if (!interp) { /* nothing to do */ return; } + /* Used for getenv calls */ + const char *env = NULL; + + /* If we are using an external Tcl, we need the * location of its init file */ - bu_vls_trunc(&initpath, 0); + int tcl_set = 0; #ifdef TCL_SYSTEM_INITTCL_PATH + struct bu_vls initpath = BU_VLS_INIT_ZERO; bu_vls_printf(&initpath, "set tcl_library {%s}", TCL_SYSTEM_INITTCL_PATH); if (Tcl_Eval(interp, bu_vls_addr(&initpath))) { - bu_log("Problem initializaing tcl_library to system init.tcl path: Tcl_Eval ERROR:\n%s\n", Tcl_GetStringResult(interp)); + bu_log("Problem initializing tcl_library to system init.tcl path: Tcl_Eval ERROR:\n%s\n", Tcl_GetStringResult(interp)); + } else { + tcl_set = 1; } + bu_vls_free(&initpath); #endif - bu_vls_printf(&tcl, "tcl%s", TCL_VERSION); - bu_vls_printf(&itcl, "itcl%s", ITCL_VERSION); -#ifdef HAVE_TK - bu_vls_printf(&tk, "tk%s", TK_VERSION); - bu_vls_printf(&itk, "itk%s", ITCL_VERSION); - bu_vls_printf(&iwidgets, "iwidgets%s", IWIDGETS_VERSION); -#endif - - root = bu_brlcad_root("", 1); - bu_vls_printf(&root_buf, "%s", root); - root = bu_vls_addr(&root_buf); - data = bu_brlcad_root("share", 1); - - /* determine if TCLCAD_LIBRARY_PATH is set */ - library_path = getenv("TCLCAD_LIBRARY_PATH"); - if (library_path) { - /* it is set, set auto_path. limit buf just because. */ - bu_vls_strncat(&auto_path, library_path, MAX_BUF); + struct bu_ptbl paths = BU_PTBL_INIT_ZERO; + + /* If TCLCAD_LIBRARY_PATH is set, add to active paths. */ + env = getenv("TCLCAD_LIBRARY_PATH"); + if (env) { + struct bu_vls buffer = BU_VLS_INIT_ZERO; + /* limit path length from env var for sanity */ + bu_vls_strncat(&buffer, env, MAX_BUF); + const char *p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&paths, (long *)p); + bu_vls_free(&buffer); } - /* make sure tcl_library path is in the auto_path */ - snprintf(buffer, MAX_BUF, "set tcl_library"); - Tcl_Eval(interp, buffer); - bu_vls_strncat(&auto_path, Tcl_GetStringResult(interp), MAX_BUF); - - /* get string of invocation binary */ - which_argv = bu_which(bu_argv0_full_path()); - if (!which_argv) { - which_argv = bu_argv0_full_path(); + /* See if user set ITCL_LIBRARY override */ + int itcl_set = 0; + env = getenv("ITCL_LIBRARY"); + if (env) { + struct bu_vls buffer = BU_VLS_INIT_ZERO; + bu_vls_strncat(&buffer, env, MAX_BUF); + bu_vls_printf(&buffer, "%citcl.tcl", BU_DIR_SEPARATOR); + if (bu_file_exists(bu_vls_cstr(&buffer), NULL)) { + const char *p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&paths, (long *)p); + itcl_set = 1; + } else { + bu_log("Warning: ITCL_LIBRARY environment variable is set to %s, but file itcl.tcl is not found in that directory, skipping.\n", env); + } + bu_vls_free(&buffer); } - /* get name of installation binary */ - snprintf(buffer, MAX_BUF, "%s%cbin%c%s", root, BU_DIR_SEPARATOR, BU_DIR_SEPARATOR, bu_getprogname()); + /* See if user set ITK_LIBRARY override */ + int itk_set = 0; + env = getenv("ITK_LIBRARY"); + if (env) { + struct bu_vls buffer = BU_VLS_INIT_ZERO; + bu_vls_strncat(&buffer, env, MAX_BUF); + bu_vls_printf(&buffer, "%citk.tcl", BU_DIR_SEPARATOR); + if (bu_file_exists(bu_vls_cstr(&buffer), NULL)) { + const char *p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&paths, (long *)p); + } else { + bu_log("Warning: ITK_LIBRARY environment variable is set to %s, but file itk.tcl is not found in that directory, skipping.\n", env); + } + bu_vls_free(&buffer); + } - /* are we running from an installed binary? if so add to path */ - if (bu_file_exists(buffer, NULL) && bu_file_same(buffer, which_argv)) { - from_installed = 1; - join_path(&auto_path, root, "lib", NULL); - join_path(&auto_path, root, "lib", bu_vls_addr(&tcl), NULL); -#ifdef HAVE_TK - join_path(&auto_path, root, "lib", bu_vls_addr(&tk), NULL); -#endif - join_path(&auto_path, root, "lib", bu_vls_addr(&itcl), NULL); -#ifdef HAVE_TK - join_path(&auto_path, root, "lib", bu_vls_addr(&itk), NULL); - join_path(&auto_path, root, "lib", bu_vls_addr(&iwidgets), NULL); -#endif - join_path(&auto_path, data, "tclscripts", NULL); - join_path(&auto_path, data, "tclscripts", "lib", NULL); - join_path(&auto_path, data, "tclscripts", "util", NULL); - join_path(&auto_path, data, "tclscripts", "mged", NULL); - join_path(&auto_path, data, "tclscripts", "geometree", NULL); - join_path(&auto_path, data, "tclscripts", "graph", NULL); - join_path(&auto_path, data, "tclscripts", "rtwizard", NULL); - join_path(&auto_path, data, "tclscripts", "archer", NULL); - join_path(&auto_path, data, "tclscripts", "boteditor", NULL); - join_path(&auto_path, data, "tclscripts", "checker", NULL); - join_path(&auto_path, data, "tclscripts", "lod", NULL); + /* If tcl_library is defined in the interp, capture it for addition */ + { + struct bu_vls buffer = BU_VLS_INIT_ZERO; + /* limit path length from env var for sanity */ + bu_vls_sprintf(&buffer, "set tcl_library"); + Tcl_Eval(interp, bu_vls_cstr(&buffer)); + bu_vls_sprintf(&buffer, "%s", Tcl_GetStringResult(interp)); + if (bu_vls_strlen(&buffer)) { + const char *p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&paths, (long *)p); + } + bu_vls_free(&buffer); } - /* be sure to check installation paths even if we aren't running from there */ - if (!from_installed) { - join_path(&auto_path, root, "lib", NULL); - join_path(&auto_path, root, "lib", bu_vls_addr(&tcl), NULL); -#ifdef HAVE_TK - join_path(&auto_path, root, "lib", bu_vls_addr(&tk), NULL); + /* Set up the subdirectories of interest. Some are static, but some are + * version specific - we construct a table of all of them for easier + * use in subsequent testing. */ + struct bu_ptbl lib_subpaths = BU_PTBL_INIT_ZERO; + struct bu_ptbl data_subpaths = BU_PTBL_INIT_ZERO; + { + const char *p = NULL; + struct bu_vls buffer = BU_VLS_INIT_ZERO; + + bu_vls_sprintf(&buffer, "tcl%s", TCL_VERSION); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&lib_subpaths, (long *)p); + +#ifdef ITCL_VERSION + bu_vls_sprintf(&buffer, "itcl%s", ITCL_VERSION); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&lib_subpaths, (long *)p); #endif - join_path(&auto_path, root, "lib", bu_vls_addr(&itcl), NULL); + #ifdef HAVE_TK - join_path(&auto_path, root, "lib", bu_vls_addr(&itk), NULL); - join_path(&auto_path, root, "lib", bu_vls_addr(&iwidgets), NULL); + bu_vls_sprintf(&buffer, "tk%s", TK_VERSION); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&lib_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "itk%s", ITK_VERSION); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&lib_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "Iwidgets%s", IWIDGETS_VERSION); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&lib_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "Tkhtml3.0"); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&lib_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "Tktable2.10"); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&lib_subpaths, (long *)p); #endif - join_path(&auto_path, data, "tclscripts", NULL); - join_path(&auto_path, data, "tclscripts", "lib", NULL); - join_path(&auto_path, data, "tclscripts", "util", NULL); - join_path(&auto_path, data, "tclscripts", "mged", NULL); - join_path(&auto_path, data, "tclscripts", "geometree", NULL); - join_path(&auto_path, data, "tclscripts", "graph", NULL); - join_path(&auto_path, data, "tclscripts", "rtwizard", NULL); - join_path(&auto_path, data, "tclscripts", "archer", NULL); - join_path(&auto_path, data, "tclscripts", "boteditor", NULL); - join_path(&auto_path, data, "tclscripts", "checker", NULL); - join_path(&auto_path, data, "tclscripts", "lod", NULL); - } - /* printf("AUTO_PATH IS %s\n", bu_vls_addr(&auto_path)); */ + bu_vls_sprintf(&buffer, "tclscripts"); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); - /* see if user already set ITCL_LIBRARY override */ - library_path = getenv("ITCL_LIBRARY"); - if (!found_itcl_tcl && library_path) { - snprintf(buffer, MAX_BUF, "%s%citcl.tcl", library_path, BU_DIR_SEPARATOR); - if (bu_file_exists(buffer, NULL)) { - found_itcl_tcl=1; - } + bu_vls_sprintf(&buffer, "tclscripts%clib", BU_DIR_SEPARATOR); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "tclscripts%cutil", BU_DIR_SEPARATOR); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "tclscripts%cmged", BU_DIR_SEPARATOR); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "tclscripts%cgeometree", BU_DIR_SEPARATOR); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "tclscripts%crtwizard", BU_DIR_SEPARATOR); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "tclscripts%carcher", BU_DIR_SEPARATOR); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "tclscripts%cboteditor", BU_DIR_SEPARATOR); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "tclscripts%cchecker", BU_DIR_SEPARATOR); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); + + bu_vls_sprintf(&buffer, "tclscripts%clod", BU_DIR_SEPARATOR); + p = bu_strdup(bu_vls_cstr(&buffer)); + bu_ptbl_ins(&data_subpaths, (long *)p); + + bu_vls_free(&buffer); } - /* see if user already set ITK_LIBRARY override */ - library_path = getenv("ITK_LIBRARY"); - if (!found_itk_tcl && library_path) { - snprintf(buffer, MAX_BUF, "%s%citk.tcl", library_path, BU_DIR_SEPARATOR); - if (bu_file_exists(buffer, NULL)) { - found_itk_tcl=1; + // First off, see what's in BU_DIR_LIB. + char libdir[MAXPATHLEN] = {0}; + bu_dir(libdir, MAXPATHLEN, BU_DIR_LIB, NULL); + { + struct bu_vls lib_path = BU_VLS_INIT_ZERO; + struct bu_ptbl found_subpaths = BU_PTBL_INIT_ZERO; + if (strlen(libdir)) { + // Have a library directory, see what's in it + for (size_t i = 0; i < BU_PTBL_LEN(&lib_subpaths); i++) { + const char *fname = (const char *)BU_PTBL_GET(&lib_subpaths, i); + bu_vls_sprintf(&lib_path, "%s%c%s", libdir, BU_DIR_SEPARATOR, fname); + if (bu_file_exists(bu_vls_cstr(&lib_path), NULL)) { + // Have a path + const char *p = bu_strdup(bu_vls_cstr(&lib_path)); + bu_ptbl_ins(&paths, (long *)p); + bu_ptbl_ins(&found_subpaths, (long *)fname); + } + } + // Clear anything we found out of lib_subpaths - we don't need or + // want to find it again. The more local to the install, the + // better... + for (size_t i = 0; i < BU_PTBL_LEN(&found_subpaths); i++) { + bu_ptbl_rm(&lib_subpaths, BU_PTBL_GET(&found_subpaths, i)); + // Since lib_subpaths cleanup won't be seeing this string, + // we need to free it now. + char *str = (char *)BU_PTBL_GET(&found_subpaths, i); + bu_free(str, "subpath string"); + } } + bu_vls_free(&lib_path); + bu_ptbl_free(&found_subpaths); } - /* iterate over the auto_path list and modify the real Tcl auto_path */ - for (srcpath = strtok(bu_vls_addr(&auto_path), pathsep); - srcpath; - srcpath = strtok(NULL, pathsep)) { + // Now that we've looked for the libs, handle the data dirs. + char datadir[MAXPATHLEN] = {0}; + bu_dir(datadir, MAXPATHLEN, BU_DIR_DATA, NULL); + if (strlen(datadir)) { + // Have a directory, see what's in it + struct bu_vls data_path = BU_VLS_INIT_ZERO; + for (size_t i = 0; i < BU_PTBL_LEN(&data_subpaths); i++) { + const char *fname = (const char *)BU_PTBL_GET(&data_subpaths, i); + bu_vls_sprintf(&data_path, "%s%c%s", datadir, BU_DIR_SEPARATOR, fname); + if (bu_file_exists(bu_vls_cstr(&data_path), NULL)) { + // Have a path + const char *p = bu_strdup(bu_vls_cstr(&data_path)); + bu_ptbl_ins(&paths, (long *)p); + } else { + bu_log("Warning: data path %s is not present in directory %s\n", fname, datadir); + } + } + bu_vls_free(&data_path); + } + /* Iterate over the paths set and modify the real Tcl auto_path */ + int tk_set = 0; + for (size_t i = 0; i < BU_PTBL_LEN(&paths); i++) { + const char *path = (const char *)BU_PTBL_GET(&paths, i); /* make sure it exists before appending */ - if (bu_file_exists(srcpath, NULL)) { - /* printf("APPENDING: %s\n", srcpath); */ - bu_vls_sprintf(&lappend, "lappend auto_path {%s}", srcpath); + if (bu_file_exists(path, NULL)) { + //printf("APPENDING: %s\n", path); + struct bu_vls lappend = BU_VLS_INIT_ZERO; + bu_vls_sprintf(&lappend, "lappend auto_path {%s}", path); (void)Tcl_Eval(interp, bu_vls_addr(&lappend)); + bu_vls_free(&lappend); } else { - /* printf("NOT APPENDING: %s\n", srcpath); */ + //printf("NOT APPENDING: %s\n", path); continue; } + /* Look for a number of special case initializations */ + + struct bu_vls buffer = BU_VLS_INIT_ZERO; /* specifically look for init.tcl so we can set tcl_library */ - if (!found_init_tcl) { - snprintf(buffer, MAX_BUF, "%s%cinit.tcl", srcpath, BU_DIR_SEPARATOR); - if (bu_file_exists(buffer, NULL)) { + if (!tcl_set) { + bu_vls_sprintf(&buffer, "%s%cinit.tcl", path, BU_DIR_SEPARATOR); + if (bu_file_exists(bu_vls_cstr(&buffer), NULL)) { /* this really sets it */ - snprintf(buffer, MAX_BUF, "set tcl_library {%s}", srcpath); - if (Tcl_Eval(interp, buffer)) { + bu_vls_sprintf(&buffer, "set tcl_library {%s}", path); + if (Tcl_Eval(interp, bu_vls_cstr(&buffer))) { bu_log("Tcl_Eval ERROR:\n%s\n", Tcl_GetStringResult(interp)); } else { - found_init_tcl=1; + tcl_set=1; } - /* extra measures necessary for "create interp": - * determine if TCL_LIBRARY is set, and set it if not. - */ - library_path = getenv("TCL_LIBRARY"); - if (!library_path) { + /* extra measures necessary for "create interp": determine if + * TCL_LIBRARY is set, and set it if not. */ + env = getenv("TCL_LIBRARY"); + if (!env) { /* this REALLY sets it */ - snprintf(buffer, MAX_BUF, "set env(TCL_LIBRARY) {%s}", srcpath); - if (Tcl_Eval(interp, buffer)) { + bu_vls_sprintf(&buffer, "set env(TCL_LIBRARY) {%s}", path); + if (Tcl_Eval(interp, bu_vls_cstr(&buffer))) { bu_log("Tcl_Eval ERROR:\n%s\n", Tcl_GetStringResult(interp)); } } @@ -288,59 +318,65 @@ tclcad_auto_path(Tcl_Interp *interp) } /* specifically look for tk.tcl so we can set tk_library */ - if (!found_tk_tcl) { - snprintf(buffer, MAX_BUF, "%s%ctk.tcl", srcpath, BU_DIR_SEPARATOR); - if (bu_file_exists(buffer, NULL)) { + if (!tk_set) { + bu_vls_sprintf(&buffer, "%s%ctk.tcl", path, BU_DIR_SEPARATOR); + if (bu_file_exists(bu_vls_cstr(&buffer), NULL)) { /* this really sets it */ - snprintf(buffer, MAX_BUF, "set tk_library {%s}", srcpath); - if (Tcl_Eval(interp, buffer)) { + bu_vls_sprintf(&buffer, "set tk_library {%s}", path); + if (Tcl_Eval(interp, bu_vls_cstr(&buffer))) { bu_log("Tcl_Eval ERROR:\n%s\n", Tcl_GetStringResult(interp)); } else { - found_tk_tcl=1; + tk_set=1; } } } /* specifically look for itcl.tcl so we can set ITCL_LIBRARY */ - if (!found_itcl_tcl) { - snprintf(buffer, MAX_BUF, "%s%citcl.tcl", srcpath, BU_DIR_SEPARATOR); - if (bu_file_exists(buffer, NULL)) { + if (!itcl_set) { + bu_vls_sprintf(&buffer, "%s%citcl.tcl", path, BU_DIR_SEPARATOR); + if (bu_file_exists(bu_vls_cstr(&buffer), NULL)) { /* this really sets it */ - snprintf(buffer, MAX_BUF, "set env(ITCL_LIBRARY) {%s}", srcpath); - if (Tcl_Eval(interp, buffer)) { + bu_vls_sprintf(&buffer, "set env(ITCL_LIBRARY) {%s}", path); + if (Tcl_Eval(interp, bu_vls_cstr(&buffer))) { bu_log("Tcl_Eval ERROR:\n%s\n", Tcl_GetStringResult(interp)); } else { - found_itcl_tcl=1; + itcl_set=1; } } } /* specifically look for itk.tcl so we can set ITK_LIBRARY */ - if (!found_itk_tcl) { - snprintf(buffer, MAX_BUF, "%s%citk.tcl", srcpath, BU_DIR_SEPARATOR); - if (bu_file_exists(buffer, NULL)) { + if (!itk_set) { + bu_vls_sprintf(&buffer, "%s%citk.tcl", path, BU_DIR_SEPARATOR); + if (bu_file_exists(bu_vls_cstr(&buffer), NULL)) { /* this really sets it */ - snprintf(buffer, MAX_BUF, "set env(ITK_LIBRARY) {%s}", srcpath); - if (Tcl_Eval(interp, buffer)) { + bu_vls_sprintf(&buffer, "set env(ITK_LIBRARY) {%s}", path); + if (Tcl_Eval(interp, bu_vls_cstr(&buffer))) { bu_log("Tcl_Eval ERROR:\n%s\n", Tcl_GetStringResult(interp)); } else { - found_itk_tcl=1; + itk_set=1; } } } + + bu_vls_free(&buffer); } - which_argv = NULL; - bu_vls_free(&tcl); - bu_vls_free(&itcl); -#ifdef HAVE_TK - bu_vls_free(&tk); - bu_vls_free(&itk); - bu_vls_free(&iwidgets); -#endif - bu_vls_free(&auto_path); - bu_vls_free(&lappend); - bu_vls_free(&root_buf); + for (size_t i = 0; i < BU_PTBL_LEN(&lib_subpaths); i++) { + char *str = (char *)BU_PTBL_GET(&lib_subpaths, i); + bu_free(str, "subpath string"); + } + bu_ptbl_free(&lib_subpaths); + for (size_t i = 0; i < BU_PTBL_LEN(&data_subpaths); i++) { + char *str = (char *)BU_PTBL_GET(&data_subpaths, i); + bu_free(str, "subpath string"); + } + bu_ptbl_free(&data_subpaths); + for (size_t i = 0; i < BU_PTBL_LEN(&paths); i++) { + char *str = (char *)BU_PTBL_GET(&paths, i); + bu_free(str, "subpath string"); + } + bu_ptbl_free(&paths); return; } diff --git a/src/libtclcad/bn.c b/src/libtclcad/bn.c index 06233dcde48..57606084be9 100644 --- a/src/libtclcad/bn.c +++ b/src/libtclcad/bn.c @@ -1,7 +1,7 @@ /* B N . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libtclcad/bu.c b/src/libtclcad/bu.c index 995ae8b0c25..59300052e8b 100644 --- a/src/libtclcad/bu.c +++ b/src/libtclcad/bu.c @@ -1,7 +1,7 @@ /* B U . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -391,8 +391,37 @@ tcl_bu_brlcad_dir(void *clientData, bu_log("Usage: bu_brlcad_dir dirkey\n"); return BRLCAD_ERROR; } - Tcl_AppendResult(interp, bu_brlcad_dir(argv[1], 1), NULL); - return BRLCAD_OK; + if (BU_STR_EQUAL(argv[1], "bin")) { + Tcl_AppendResult(interp, bu_dir(NULL, 0, BU_DIR_BIN, NULL), NULL); + return BRLCAD_OK; + } + if (BU_STR_EQUAL(argv[1], "lib")) { + Tcl_AppendResult(interp, bu_dir(NULL, 0, BU_DIR_LIB, NULL), NULL); + return BRLCAD_OK; + } + if (BU_STR_EQUAL(argv[1], "include")) { + Tcl_AppendResult(interp, bu_dir(NULL, 0, BU_DIR_INCLUDE, NULL), NULL); + return BRLCAD_OK; + } + if (BU_STR_EQUAL(argv[1], "data")) { + Tcl_AppendResult(interp, bu_dir(NULL, 0, BU_DIR_DATA, NULL), NULL); + return BRLCAD_OK; + } + if (BU_STR_EQUAL(argv[1], "share")) { + Tcl_AppendResult(interp, bu_dir(NULL, 0, BU_DIR_DATA, NULL), NULL); + return BRLCAD_OK; + } + if (BU_STR_EQUAL(argv[1], "doc")) { + Tcl_AppendResult(interp, bu_dir(NULL, 0, BU_DIR_DOC, NULL), NULL); + return BRLCAD_OK; + } + + if (BU_STR_EQUAL(argv[1], "man")) { + Tcl_AppendResult(interp, bu_dir(NULL, 0, BU_DIR_MAN, NULL), NULL); + return BRLCAD_OK; + } + + return BRLCAD_ERROR; } /** @@ -414,7 +443,19 @@ tcl_bu_brlcad_root(void *clientData, bu_log("Usage: bu_brlcad_root subdir\n"); return BRLCAD_ERROR; } - Tcl_AppendResult(interp, bu_brlcad_root(argv[1], 1), NULL); + if (argv[1][0] == '/') { + Tcl_AppendResult(interp, argv[1], NULL); + return BRLCAD_OK; + } + const char *bdir = bu_dir(NULL, 0, BU_DIR_BIN, NULL); + struct bu_vls wpath = BU_VLS_INIT_ZERO; + if (!bu_path_component(&wpath, bdir, BU_PATH_DIRNAME)) { + bu_vls_free(&wpath); + return BRLCAD_ERROR; + } + const char *npath = bu_dir(NULL, 0, bu_vls_cstr(&wpath), argv[1], NULL); + Tcl_AppendResult(interp, npath, NULL); + bu_vls_free(&wpath); return BRLCAD_OK; } diff --git a/src/libtclcad/cmdhist.c b/src/libtclcad/cmdhist.c index 8bd21bade17..f36b3c3aa43 100644 --- a/src/libtclcad/cmdhist.c +++ b/src/libtclcad/cmdhist.c @@ -1,7 +1,7 @@ /* C M D H I S T . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/command_io.cpp b/src/libtclcad/command_io.cpp new file mode 100644 index 00000000000..273e7bb0b9b --- /dev/null +++ b/src/libtclcad/command_io.cpp @@ -0,0 +1,223 @@ +/* C O M M A N D _ I O . C P P + * BRL-CAD + * + * Copyright (c) 2000-2021 United States Government as represented by + * the U.S. Army Research Laboratory. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public License + * version 2.1 as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this file; see the file named COPYING for more + * information. + */ +/** @addtogroup libtclcad */ +/** @{ */ +/** @file libtclcad/command_io.cpp + * + * I/O callbacks for libtclcad. + * + */ +/** @} */ + +#include "common.h" + +#include + +extern "C" { + +#include "tcl.h" +#ifdef HAVE_TK +# include "tk.h" +#endif + +#include "bu/malloc.h" +#include "tclcad.h" + + /* Private headers */ +#include "./tclcad_private.h" + +} + +struct tclcad_process_channels { + Tcl_Channel cstdin; + Tcl_Channel cstdout; + Tcl_Channel cstderr; +}; + +struct tclcad_io_data * +tclcad_create_io_data() +{ + struct tclcad_io_data *d; + BU_GET(d, struct tclcad_io_data); + d->state = new std::map; + return d; +} + +TCLCAD_EXPORT void +tclcad_destroy_io_data(struct tclcad_io_data *d) +{ + std::map *s = (std::map *)d->state; + delete s; + BU_PUT(d, struct tclcad_io_data); +} + +/* Wrappers for setting up/tearing down IO handler */ +#ifndef _WIN32 +void +tclcad_create_io_handler(struct ged_subprocess *p, bu_process_io_t d, ged_io_func_t callback, void *data) +{ + if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data) + return; + int *fdp = (int *)bu_process_fd(p->p, d); + if (fdp) { + struct tclcad_io_data *t_iod = (struct tclcad_io_data *)p->gedp->ged_io_data; + Tcl_CreateFileHandler(*fdp, t_iod->io_mode, callback, (ClientData)data); + switch (d) { + case BU_PROCESS_STDIN: + p->stdin_active = 1; + break; + case BU_PROCESS_STDOUT: + p->stdout_active = 1; + break; + case BU_PROCESS_STDERR: + p->stderr_active = 1; + break; + } + } +} + + +void +tclcad_delete_io_handler(struct ged_subprocess *p, bu_process_io_t d) +{ + if (!p) return; + int *fdp = (int *)bu_process_fd(p->p, d); + if (fdp) { + Tcl_DeleteFileHandler(*fdp); + close(*fdp); + } + switch (d) { + case BU_PROCESS_STDIN: + p->stdin_active = 0; + break; + case BU_PROCESS_STDOUT: + p->stdout_active = 0; + break; + case BU_PROCESS_STDERR: + p->stderr_active = 0; + break; + } +} + + +#else +void +tclcad_create_io_handler(struct ged_subprocess *p, bu_process_io_t d, ged_io_func_t callback, void *data) +{ + if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data) + return; + struct tclcad_io_data *t_iod = (struct tclcad_io_data *)p->gedp->ged_io_data; + std::map *pmap = (std::map *)t_iod->state; + struct tclcad_process_channels *pchan = NULL; + if (pmap->find(p) == pmap->end()) { + BU_GET(pchan, struct tclcad_process_channels); + pchan->cstdin = NULL; + pchan->cstdout = NULL; + pchan->cstderr = NULL; + (*pmap)[p] = pchan; + } else { + pchan = (*pmap)[p]; + } + + HANDLE *fdp = (HANDLE *)bu_process_fd(p->p, d); + if (fdp) { + switch (d) { + case BU_PROCESS_STDIN: + p->stdin_active = 1; + if (!pchan->cstdin) { + pchan->cstdin = Tcl_MakeFileChannel(*fdp, t_iod->io_mode); + Tcl_CreateChannelHandler(pchan->cstdin, t_iod->io_mode, callback, (ClientData)data); + } + break; + case BU_PROCESS_STDOUT: + p->stdout_active = 1; + if (!pchan->cstdout) { + pchan->cstdout = Tcl_MakeFileChannel(*fdp, t_iod->io_mode); + Tcl_CreateChannelHandler(pchan->cstdout, t_iod->io_mode, callback, (ClientData)data); + } + break; + case BU_PROCESS_STDERR: + p->stderr_active = 1; + if (!pchan->cstderr) { + pchan->cstderr = Tcl_MakeFileChannel(*fdp, t_iod->io_mode); + Tcl_CreateChannelHandler(pchan->cstderr, t_iod->io_mode, callback, (ClientData)data); + } + break; + } + } +} + + +void +tclcad_delete_io_handler(struct ged_subprocess *p, bu_process_io_t d) +{ + if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data) + return; + struct tclcad_io_data *t_iod = (struct tclcad_io_data *)p->gedp->ged_io_data; + std::map *pmap = (std::map *)t_iod->state; + struct tclcad_process_channels *pchan = NULL; + if (!pmap || pmap->find(p) == pmap->end()) { + return; + } + pchan = (*pmap)[p]; + if (!pchan->cstdin && !pchan->cstdout && !pchan->cstderr) { + // All subprocess channels destroyed; we're done with the I/O from this subprocess, clean up + BU_PUT(pchan, struct tclcad_process_channels); + pmap->erase(p); + } + + switch (d) { + case BU_PROCESS_STDIN: + if (p->stdin_active && pchan->cstdin) { + Tcl_DeleteChannelHandler(pchan->cstdin, NULL, (ClientData)NULL); + Tcl_Close(t_iod->interp, pchan->cstdin); + pchan->cstdin = NULL; + } + p->stdin_active = 0; + break; + case BU_PROCESS_STDOUT: + if (p->stdout_active && pchan->cstdout) { + Tcl_DeleteChannelHandler(pchan->cstdout, NULL, (ClientData)NULL); + Tcl_Close(t_iod->interp, pchan->cstdout); + pchan->cstdout = NULL; + } + p->stdout_active = 0; + break; + case BU_PROCESS_STDERR: + if (p->stderr_active && pchan->cstderr) { + Tcl_DeleteChannelHandler(pchan->cstderr, NULL, (ClientData)NULL); + Tcl_Close(t_iod->interp, pchan->cstderr); + pchan->cstderr = NULL; + } + p->stderr_active = 0; + break; + } +} +#endif + +// Local Variables: +// tab-width: 8 +// mode: C++ +// c-basic-offset: 4 +// indent-tabs-mode: t +// c-file-style: "stroustrup" +// End: +// ex: shiftwidth=4 tabstop=8 + diff --git a/src/libtclcad/commands.c b/src/libtclcad/commands.c index 738270b6165..6ebaf298cb6 100644 --- a/src/libtclcad/commands.c +++ b/src/libtclcad/commands.c @@ -1,7 +1,7 @@ -/* T C L C A D _ O B J . C +/* C O M M A N D S . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -19,7 +19,7 @@ */ /** @addtogroup libtclcad */ /** @{ */ -/** @file libtclcad/tclcad_obj.c +/** @file libtclcad/commands.c * * A quasi-object-oriented database interface. * @@ -31,7 +31,6 @@ #include "common.h" - #include #include #include @@ -70,9 +69,6 @@ #include "icv/crop.h" #include "dm.h" -#if defined(HAVE_WINDOWS_H) -# include -#endif #ifdef HAVE_GL_GL_H # include #endif @@ -86,444 +82,449 @@ #include "./tclcad_private.h" #include "./view/view.h" - HIDDEN int to_base2local(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_bg(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_bounds(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_configure(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_constrain_rmode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_constrain_tmode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_copy(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_data_move(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_data_move_func(struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage); + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage); HIDDEN int to_data_move_object_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_data_move_object_mode_func(struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage); + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage); HIDDEN int to_data_move_point_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_data_move_point_mode_func(struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage); + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage); HIDDEN int to_data_pick(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_data_pick_func(struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage); + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage); HIDDEN int to_data_vZ(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); +HIDDEN int to_dplot(struct ged *gedp, + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_dlist_on(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_bot_edge_split(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_bot_face_split(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_fontsize(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_fit_png_image(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_init_view_bindings(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_delete_view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_handle_expose(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_hide_view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_idle_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_light(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_list_views(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_local2base(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_lod(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_make(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_mirror(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_edit_motion_delta_callback(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_more_args_callback(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_move_arb_edge_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_move_arb_face_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_bot_move_pnt(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_bot_move_pnts(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_bot_move_pnt_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_bot_move_pnts_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_metaball_move_pnt_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_pipe_move_pnt_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_move_pnt_common(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_new_view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_orotate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_oscale_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_otranslate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_paint_rect_area(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); #ifdef HAVE_GL_GL_H HIDDEN int to_pix(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_png(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); #endif HIDDEN int to_rect_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_rotate_arb_face_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_rotate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_rt_end_callback(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_rt_gettrees(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_protate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_pscale_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_ptranslate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_data_scale_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_scale_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_screen2model(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_screen2view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_set_coord(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_snap_view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_translate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_transparency(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_view_callback(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_view_win_size(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_view2screen(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_vmake(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_vslew(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_zbuffer(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); HIDDEN int to_zclip(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *usage, - int maxargs); + int argc, + const char *argv[], + ged_func_ptr func, + const char *usage, + int maxargs); /* Utility Functions */ @@ -539,8 +540,8 @@ typedef int (*to_wrapper_func_ptr)(struct ged *, int, const char *[], ged_func_p struct to_cmdtab { - char *to_name; - char *to_usage; + const char *to_name; + const char *to_usage; int to_maxargs; to_wrapper_func_ptr to_wrapper_func; ged_func_ptr to_func; @@ -604,6 +605,7 @@ static struct to_cmdtab ged_cmds[] = { {"debugnmg", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_debugnmg}, {"decompose", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_decompose}, {"delay", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_delay}, + {"dplot", "dplot_logfile", 1, to_dplot, ged_dplot}, {"metaball_delete_pnt", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_metaball_delete_pnt}, {"pipe_delete_pnt", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_pipe_delete_pnt}, {"dir2ae", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_dir2ae}, @@ -705,6 +707,7 @@ static struct to_cmdtab ged_cmds[] = { {"nmg_collapse", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_nmg_collapse}, {"nmg_fix_normals", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_nmg_fix_normals}, {"nmg_simplify", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_nmg_simplify}, + {"npush", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_npush}, {"ocenter", (char *)0, TO_UNLIMITED, to_pass_through_func, ged_ocenter}, {"open", (char *)0, TO_UNLIMITED, to_pass_through_and_refresh_func, ged_reopen}, {"orient", "quat", 6, to_view_func_plus, ged_orient}, @@ -972,10 +975,10 @@ Ged_Init(Tcl_Interp *interp) BU_LIST_INIT(&HeadTclcadObj.l); (void)Tcl_CreateCommand(interp, (const char *)"go_open", to_open_tcl, - (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); + (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); (void)Tcl_CreateCommand(interp, (const char *)"dm_list", dm_list_tcl, - (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); + (ClientData)NULL, (Tcl_CmdDeleteProc *)NULL); (void)library_initialized(1); @@ -994,11 +997,11 @@ Ged_Init(Tcl_Interp *interp) */ HIDDEN int to_cmd(ClientData clientData, - Tcl_Interp *interp, - int argc, - char **argv) + Tcl_Interp *interp, + int argc, + char **argv) { - register struct to_cmdtab *ctp; + struct to_cmdtab *ctp; struct tclcad_obj *top = (struct tclcad_obj *)clientData; Tcl_DString ds; int ret = GED_ERROR; @@ -1139,7 +1142,8 @@ to_deleteProc(ClientData clientData) } if (top->to_gedp->ged_io_data) { struct tclcad_io_data *t_iod = (struct tclcad_io_data *)top->to_gedp->ged_io_data; - BU_PUT(t_iod, struct tclcad_io_data); + tclcad_destroy_io_data(t_iod); + top->to_gedp->ged_io_data = NULL; } // Got the libtclcad cleanup done, have libged do its up. @@ -1159,8 +1163,8 @@ to_deleteProc(ClientData clientData) */ int to_create_cmd(Tcl_Interp *interp, - struct tclcad_obj *top, /* pointer to object */ - const char *oname) /* object name */ + struct tclcad_obj *top, /* pointer to object */ + const char *oname) /* object name */ { if (top == TCLCAD_OBJ_NULL) { Tcl_AppendResult(interp, "to_create_cmd ", oname, " failed", NULL); @@ -1170,7 +1174,7 @@ to_create_cmd(Tcl_Interp *interp, /* Instantiate the newprocname, with clientData of top */ /* Beware, returns a "token", not TCL_OK. */ (void)Tcl_CreateCommand(interp, oname, (Tcl_CmdProc *)to_cmd, - (ClientData)top, to_deleteProc); + (ClientData)top, to_deleteProc); /* Return new function name as result */ Tcl_AppendResult(interp, oname, (char *)NULL); @@ -1178,91 +1182,6 @@ to_create_cmd(Tcl_Interp *interp, return TCL_OK; } - -/* Wrappers for setting up/tearing down IO handler */ -#ifndef _WIN32 -void -tclcad_create_io_handler(struct ged_subprocess *p, bu_process_io_t d, ged_io_func_t callback, void *data) -{ - if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data) - return; - int *fdp = (int *)bu_process_fd(p->p, d); - if (fdp) { - struct tclcad_io_data *t_iod = (struct tclcad_io_data *)p->gedp->ged_io_data; - Tcl_CreateFileHandler(*fdp, t_iod->io_mode, callback, (ClientData)data); - } -} - - -void -tclcad_delete_io_handler(struct ged_subprocess *p, bu_process_io_t d) -{ - if (!p) return; - int *fdp = (int *)bu_process_fd(p->p, d); - if (fdp) { - Tcl_DeleteFileHandler(*fdp); - close(*fdp); - } -} - - -#else -void -tclcad_create_io_handler(struct ged_subprocess *p, bu_process_io_t d, ged_io_func_t callback, void *data) -{ - if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data) - return; - struct tclcad_io_data *t_iod = (struct tclcad_io_data *)p->gedp->ged_io_data; - HANDLE *fdp = (HANDLE *)bu_process_fd(p->p, d); - if (fdp) { - switch (d) { - case BU_PROCESS_STDIN: - t_iod->chan_stdin = Tcl_MakeFileChannel(*fdp, t_iod->io_mode); - Tcl_CreateChannelHandler(t_iod->chan_stdin, t_iod->io_mode, callback, (ClientData)data); - break; - case BU_PROCESS_STDOUT: - t_iod->chan_stdout = Tcl_MakeFileChannel(*fdp, t_iod->io_mode); - Tcl_CreateChannelHandler(t_iod->chan_stdout, t_iod->io_mode, callback, (ClientData)data); - break; - case BU_PROCESS_STDERR: - t_iod->chan_stderr = Tcl_MakeFileChannel(*fdp, t_iod->io_mode); - Tcl_CreateChannelHandler(t_iod->chan_stderr, t_iod->io_mode, callback, (ClientData)data); - break; - } - } -} - - -void -tclcad_delete_io_handler(struct ged_subprocess *p, bu_process_io_t d) -{ - if (!p || !p->p || !p->gedp || !p->gedp->ged_io_data) - return; - struct tclcad_io_data *t_iod = (struct tclcad_io_data *)p->gedp->ged_io_data; - switch (d) { - case BU_PROCESS_STDIN: - if (t_iod->chan_stdin) { - Tcl_DeleteChannelHandler(t_iod->chan_stdin, NULL, (ClientData)NULL); - Tcl_Close(t_iod->interp, t_iod->chan_stdin); - } - break; - case BU_PROCESS_STDOUT: - if (t_iod->chan_stdout) { - Tcl_DeleteChannelHandler(t_iod->chan_stdout, NULL, (ClientData)NULL); - Tcl_Close(t_iod->interp, t_iod->chan_stdout); - } - break; - case BU_PROCESS_STDERR: - if (t_iod->chan_stderr) { - Tcl_DeleteChannelHandler(t_iod->chan_stderr, NULL, (ClientData)NULL); - Tcl_Close(t_iod->interp, t_iod->chan_stderr); - } - break; - } -} -#endif - - /** * @brief * A TCL interface to wdb_fopen() and wdb_dbopen(). @@ -1286,9 +1205,9 @@ tclcad_delete_io_handler(struct ged_subprocess *p, bu_process_io_t d) */ int to_open_tcl(ClientData UNUSED(clientData), - Tcl_Interp *interp, - int argc, - const char **argv) + Tcl_Interp *interp, + int argc, + const char **argv) { struct tclcad_obj *top = NULL; struct ged *gedp = NULL; @@ -1304,15 +1223,15 @@ to_open_tcl(ClientData UNUSED(clientData), if (argc < 3 || 4 < argc) { Tcl_AppendResult(interp, "\ -Usage: go_open\n\ - go_open newprocname file filename\n\ - go_open newprocname disk $dbip\n\ - go_open newprocname disk_append $dbip\n\ - go_open newprocname inmem $dbip\n\ - go_open newprocname inmem_append $dbip\n\ - go_open newprocname db filename\n\ - go_open newprocname filename\n", - NULL); + Usage: go_open\n\ + go_open newprocname file filename\n\ + go_open newprocname disk $dbip\n\ + go_open newprocname disk_append $dbip\n\ + go_open newprocname inmem $dbip\n\ + go_open newprocname inmem_append $dbip\n\ + go_open newprocname db filename\n\ + go_open newprocname filename\n", + NULL); return TCL_ERROR; } @@ -1339,8 +1258,7 @@ Usage: go_open\n\ gedp->ged_interp = (void *)interp; /* Set the Tcl specific I/O handlers for asynchronous subprocess I/O */ - struct tclcad_io_data *t_iod; - BU_GET(t_iod, struct tclcad_io_data); + struct tclcad_io_data *t_iod = tclcad_create_io_data(); t_iod->io_mode = TCL_READABLE; t_iod->interp = interp; gedp->ged_io_data = (void *)t_iod; @@ -1388,11 +1306,11 @@ Usage: go_open\n\ HIDDEN int to_base2local(struct ged *gedp, - int UNUSED(argc), - const char *UNUSED(argv[]), - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int UNUSED(argc), + const char *UNUSED(argv[]), + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -1405,11 +1323,11 @@ to_base2local(struct ged *gedp, HIDDEN int to_bg(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int r, g, b; @@ -1438,23 +1356,23 @@ to_bg(struct ged *gedp, unsigned char *dm_bg = dm_get_bg((struct dm *)gdvp->dmp); if (dm_bg) { bu_vls_printf(gedp->ged_result_str, "%d %d %d", - dm_bg[0], - dm_bg[1], - dm_bg[2]); + dm_bg[0], + dm_bg[1], + dm_bg[2]); } return GED_OK; } /* set background color */ if (bu_sscanf(argv[2], "%d", &r) != 1 || - bu_sscanf(argv[3], "%d", &g) != 1 || - bu_sscanf(argv[4], "%d", &b) != 1) + bu_sscanf(argv[3], "%d", &g) != 1 || + bu_sscanf(argv[4], "%d", &b) != 1) goto bad_color; /* validate color */ if (r < 0 || 255 < r || - g < 0 || 255 < g || - b < 0 || 255 < b) + g < 0 || 255 < g || + b < 0 || 255 < b) goto bad_color; (void)dm_make_current((struct dm *)gdvp->dmp); @@ -1472,11 +1390,11 @@ to_bg(struct ged *gedp, HIDDEN int to_bounds(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { fastf_t bounds[6]; @@ -1509,16 +1427,16 @@ to_bounds(struct ged *gedp, vect_t *cmax = dm_get_clipmax((struct dm *)gdvp->dmp); if (cmin && cmax) { bu_vls_printf(gedp->ged_result_str, "%g %g %g %g %g %g", - (*cmin)[X], (*cmax)[X], (*cmin)[Y], (*cmax)[Y], (*cmin)[Z], (*cmax)[Z]); + (*cmin)[X], (*cmax)[X], (*cmin)[Y], (*cmax)[Y], (*cmin)[Z], (*cmax)[Z]); } return GED_OK; } /* set window bounds */ if (bu_sscanf(argv[2], "%lf %lf %lf %lf %lf %lf", - &scan[0], &scan[1], - &scan[2], &scan[3], - &scan[4], &scan[5]) != 6) { + &scan[0], &scan[1], + &scan[2], &scan[3], + &scan[4], &scan[5]) != 6) { bu_vls_printf(gedp->ged_result_str, "%s: invalid bounds - %s", argv[0], argv[2]); return GED_ERROR; } @@ -1545,11 +1463,11 @@ to_bounds(struct ged *gedp, HIDDEN int to_configure(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int status; @@ -1578,7 +1496,7 @@ to_configure(struct ged *gedp, { char cdimX[32]; char cdimY[32]; - char *av[5]; + const char *av[5]; snprintf(cdimX, 32, "%d", dm_get_width((struct dm *)gdvp->dmp)); snprintf(cdimY, 32, "%d", dm_get_height((struct dm *)gdvp->dmp)); @@ -1604,11 +1522,11 @@ to_configure(struct ged *gedp, HIDDEN int to_constrain_rmode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -1636,14 +1554,14 @@ to_constrain_rmode(struct ged *gedp, } if ((argv[2][0] != 'x' && - argv[2][0] != 'y' && - argv[2][0] != 'z') || argv[2][1] != '\0') { + argv[2][0] != 'y' && + argv[2][0] != 'z') || argv[2][1] != '\0') { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_OK; } if (bu_sscanf(argv[3], "%lf", &x) != 1 || - bu_sscanf(argv[4], "%lf", &y) != 1) { + bu_sscanf(argv[4], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -1655,10 +1573,10 @@ to_constrain_rmode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_constrain_rot %s %s %%x %%y}; break", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -1669,11 +1587,11 @@ to_constrain_rmode(struct ged *gedp, HIDDEN int to_constrain_tmode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -1701,14 +1619,14 @@ to_constrain_tmode(struct ged *gedp, } if ((argv[2][0] != 'x' && - argv[2][0] != 'y' && - argv[2][0] != 'z') || argv[2][1] != '\0') { + argv[2][0] != 'y' && + argv[2][0] != 'z') || argv[2][1] != '\0') { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_OK; } if (bu_sscanf(argv[3], "%lf", &x) != 1 || - bu_sscanf(argv[4], "%lf", &y) != 1) { + bu_sscanf(argv[4], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -1719,10 +1637,10 @@ to_constrain_tmode(struct ged *gedp, if (dm_get_pathname((struct dm *)gdvp->dmp)) { bu_vls_printf(&bindings, "bind %s {%s mouse_constrain_trans %s %s %%x %%y}; break", - bu_vls_addr(dm_get_pathname((struct dm *)gdvp->dmp)), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name), - argv[2]); + bu_vls_addr(dm_get_pathname((struct dm *)gdvp->dmp)), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name), + argv[2]); Tcl_Eval(current_top->to_interp, bu_vls_addr(&bindings)); } bu_vls_free(&bindings); @@ -1742,7 +1660,7 @@ to_copy(struct ged *gedp, struct ged *from_gedp = GED_NULL; struct ged *to_gedp = GED_NULL; int ret; - char *cp; + const char *cp; struct tclcad_obj *top; struct bu_vls db_vls = BU_VLS_INIT_ZERO; struct bu_vls from_vls = BU_VLS_INIT_ZERO; @@ -1829,17 +1747,17 @@ to_copy(struct ged *gedp, if (from_gedp == to_gedp) { ret = ged_dbcopy(from_gedp, to_gedp, - bu_vls_addr(&from_vls), - bu_vls_addr(&to_vls), - fflag); + bu_vls_addr(&from_vls), + bu_vls_addr(&to_vls), + fflag); if (ret != GED_OK && from_gedp != gedp) bu_vls_strcpy(gedp->ged_result_str, bu_vls_addr(from_gedp->ged_result_str)); } else { ret = ged_dbcopy(from_gedp, to_gedp, - bu_vls_addr(&from_vls), - bu_vls_addr(&to_vls), - fflag); + bu_vls_addr(&from_vls), + bu_vls_addr(&to_vls), + fflag); if (ret != GED_OK) { if (bu_vls_strlen(from_gedp->ged_result_str)) { @@ -1859,11 +1777,11 @@ to_copy(struct ged *gedp, int go_data_move(Tcl_Interp *UNUSED(interp), - struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage) + struct ged *gedp, + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -1894,11 +1812,11 @@ go_data_move(Tcl_Interp *UNUSED(interp), */ HIDDEN int to_data_move(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -1928,10 +1846,10 @@ to_data_move(struct ged *gedp, HIDDEN int to_data_move_func(struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage) + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage) { int mx, my; int width, height; @@ -1972,8 +1890,8 @@ to_data_move_func(struct ged *gedp, /* Silently ignore */ if (i >= gdpsp->gdps_polygons.num_polygons || - j >= gdpsp->gdps_polygons.polygon[i].num_contours || - k >= gdpsp->gdps_polygons.polygon[i].contour[j].num_points) + j >= gdpsp->gdps_polygons.polygon[i].num_contours || + k >= gdpsp->gdps_polygons.polygon[i].contour[j].num_points) return GED_OK; /* This section is for moving more than a single point on a contour */ @@ -1996,8 +1914,8 @@ to_data_move_func(struct ged *gedp, for (c = 0; c < gdpsp->gdps_polygons.polygon[p].num_contours; ++c) { for (k = 0; k < gdpsp->gdps_polygons.polygon[p].contour[c].num_points; ++k) { VADD2(gdpsp->gdps_polygons.polygon[p].contour[c].point[k], - gdpsp->gdps_polygons.polygon[p].contour[c].point[k], - diff); + gdpsp->gdps_polygons.polygon[p].contour[c].point[k], + diff); } } } @@ -2005,8 +1923,8 @@ to_data_move_func(struct ged *gedp, /* Move only the contour. */ for (k = 0; k < gdpsp->gdps_polygons.polygon[i].contour[j].num_points; ++k) { VADD2(gdpsp->gdps_polygons.polygon[i].contour[j].point[k], - gdpsp->gdps_polygons.polygon[i].contour[j].point[k], - diff); + gdpsp->gdps_polygons.polygon[i].contour[j].point[k], + diff); } } } else { @@ -2262,11 +2180,11 @@ to_data_move_func(struct ged *gedp, int go_data_move_object_mode(Tcl_Interp *UNUSED(interp), - struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage) + struct ged *gedp, + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -2294,11 +2212,11 @@ go_data_move_object_mode(Tcl_Interp *UNUSED(interp), HIDDEN int to_data_move_object_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -2328,17 +2246,17 @@ to_data_move_object_mode(struct ged *gedp, HIDDEN int to_data_move_object_mode_func(struct ged *gedp, - struct bview *gdvp, - int UNUSED(argc), - const char *argv[], - const char *usage) + struct bview *gdvp, + int UNUSED(argc), + const char *argv[], + const char *usage) { int x, y; gedp->ged_gvp = gdvp; if (bu_sscanf(argv[1], "%d", &x) != 1 || - bu_sscanf(argv[2], "%d", &y) != 1) { + bu_sscanf(argv[2], "%d", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -2354,11 +2272,11 @@ to_data_move_object_mode_func(struct ged *gedp, int go_data_move_point_mode(Tcl_Interp *UNUSED(interp), - struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage) + struct ged *gedp, + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -2386,11 +2304,11 @@ go_data_move_point_mode(Tcl_Interp *UNUSED(interp), HIDDEN int to_data_move_point_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -2420,17 +2338,17 @@ to_data_move_point_mode(struct ged *gedp, HIDDEN int to_data_move_point_mode_func(struct ged *gedp, - struct bview *gdvp, - int UNUSED(argc), - const char *argv[], - const char *usage) + struct bview *gdvp, + int UNUSED(argc), + const char *argv[], + const char *usage) { int x, y; gedp->ged_gvp = gdvp; if (bu_sscanf(argv[1], "%d", &x) != 1 || - bu_sscanf(argv[2], "%d", &y) != 1) { + bu_sscanf(argv[2], "%d", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -2446,10 +2364,10 @@ to_data_move_point_mode_func(struct ged *gedp, int go_data_pick(struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage) + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -2477,11 +2395,11 @@ go_data_pick(struct ged *gedp, HIDDEN int to_data_pick(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -2511,35 +2429,35 @@ to_data_pick(struct ged *gedp, HIDDEN int to_data_pick_func(struct ged *gedp, - struct bview *gdvp, - int argc, - const char *argv[], - const char *usage) + struct bview *gdvp, + int argc, + const char *argv[], + const char *usage) { int mx, my, width, height; fastf_t cx, cy; fastf_t vx, vy; fastf_t sf; point_t dpoint, vpoint; - register int i; + int i; fastf_t top_z = -MAX_FASTF; point_t top_point = VINIT_ZERO; size_t top_i = 0; size_t top_j = 0; size_t top_k = 0; int found_top = 0; - char *top_data_str = NULL; - char *top_data_label = NULL; + const char *top_data_str = NULL; + const char *top_data_label = NULL; static fastf_t tol = 0.015; - static char *data_polygons_str = "data_polygons"; - static char *data_labels_str = "data_labels"; - static char *sdata_labels_str = "sdata_labels"; - static char *data_lines_str = "data_lines"; - static char *sdata_lines_str = "sdata_lines"; - static char *data_arrows_str = "data_arrows"; - static char *sdata_arrows_str = "sdata_arrows"; - static char *data_axes_str = "data_axes"; - static char *sdata_axes_str = "sdata_axes"; + static const char *data_polygons_str = "data_polygons"; + static const char *data_labels_str = "data_labels"; + static const char *sdata_labels_str = "sdata_labels"; + static const char *data_lines_str = "data_lines"; + static const char *sdata_lines_str = "sdata_lines"; + static const char *data_arrows_str = "data_arrows"; + static const char *sdata_arrows_str = "sdata_arrows"; + static const char *data_axes_str = "data_axes"; + static const char *sdata_axes_str = "sdata_axes"; if (argc == 2) { if (bu_sscanf(argv[1], "%d %d", &mx, &my) != 2) @@ -2562,8 +2480,8 @@ to_data_pick_func(struct ged *gedp, /* check for polygon points */ if (gdvp->gv_data_polygons.gdps_draw && - gdvp->gv_data_polygons.gdps_polygons.num_polygons) { - register size_t si, sj, sk; + gdvp->gv_data_polygons.gdps_polygons.num_polygons) { + size_t si, sj, sk; bview_data_polygon_state *gdpsp = &gdvp->gv_data_polygons; @@ -2580,7 +2498,7 @@ to_data_pick_func(struct ged *gedp, maxY = vpoint[Y] + tol; if (minX < vx && vx < maxX && - minY < vy && vy < maxY) { + minY < vy && vy < maxY) { if (!found_top || top_z < vpoint[Z]) { top_z = vpoint[Z]; top_data_str = data_polygons_str; @@ -2596,13 +2514,13 @@ to_data_pick_func(struct ged *gedp, if (found_top) { bu_vls_printf(gedp->ged_result_str, "%s {%zu %zu %zu} {%lf %lf %lf}", - top_data_str, top_i, top_j, top_k, V3ARGS(top_point)); + top_data_str, top_i, top_j, top_k, V3ARGS(top_point)); return GED_OK; } /* check for label points */ if (gdvp->gv_data_labels.gdls_draw && - gdvp->gv_data_labels.gdls_num_labels) { + gdvp->gv_data_labels.gdls_num_labels) { struct bview_data_label_state *gdlsp = &gdvp->gv_data_labels; for (i = 0; i < gdlsp->gdls_num_labels; ++i) { @@ -2618,7 +2536,7 @@ to_data_pick_func(struct ged *gedp, maxY = vpoint[Y] + (2 * tol); if (minX < vx && vx < maxX && - minY < vy && vy < maxY) { + minY < vy && vy < maxY) { if (!found_top || top_z < vpoint[Z]) { top_z = vpoint[Z]; top_data_str = data_labels_str; @@ -2633,7 +2551,7 @@ to_data_pick_func(struct ged *gedp, /* check for selected label points */ if (gdvp->gv_sdata_labels.gdls_draw && - gdvp->gv_sdata_labels.gdls_num_labels) { + gdvp->gv_sdata_labels.gdls_num_labels) { struct bview_data_label_state *gdlsp = &gdvp->gv_sdata_labels; for (i = 0; i < gdlsp->gdls_num_labels; ++i) { @@ -2649,7 +2567,7 @@ to_data_pick_func(struct ged *gedp, maxY = vpoint[Y] + (2 * tol); if (minX < vx && vx < maxX && - minY < vy && vy < maxY) { + minY < vy && vy < maxY) { if (!found_top || top_z < vpoint[Z]) { top_z = vpoint[Z]; top_data_str = sdata_labels_str; @@ -2664,13 +2582,13 @@ to_data_pick_func(struct ged *gedp, if (found_top) { bu_vls_printf(gedp->ged_result_str, "%s %zu {{%s} {%lf %lf %lf}}", - top_data_str, top_i, top_data_label, V3ARGS(top_point)); + top_data_str, top_i, top_data_label, V3ARGS(top_point)); return GED_OK; } /* check for line points */ if (gdvp->gv_data_lines.gdls_draw && - gdvp->gv_data_lines.gdls_num_points) { + gdvp->gv_data_lines.gdls_num_points) { struct bview_data_line_state *gdlsp = &gdvp->gv_data_lines; for (i = 0; i < gdlsp->gdls_num_points; ++i) { @@ -2685,7 +2603,7 @@ to_data_pick_func(struct ged *gedp, minY = vpoint[Y] - tol; maxY = vpoint[Y] + tol; if (minX < vx && vx < maxX && - minY < vy && vy < maxY) { + minY < vy && vy < maxY) { if (top_z < vpoint[Z]) { top_z = vpoint[Z]; top_data_str = data_lines_str; @@ -2701,7 +2619,7 @@ to_data_pick_func(struct ged *gedp, /* check for selected line points */ if (gdvp->gv_sdata_lines.gdls_draw && - gdvp->gv_sdata_lines.gdls_num_points) { + gdvp->gv_sdata_lines.gdls_num_points) { struct bview_data_line_state *gdlsp = &gdvp->gv_sdata_lines; for (i = 0; i < gdlsp->gdls_num_points; ++i) { @@ -2716,7 +2634,7 @@ to_data_pick_func(struct ged *gedp, minY = vpoint[Y] - tol; maxY = vpoint[Y] + tol; if (minX < vx && vx < maxX && - minY < vy && vy < maxY) { + minY < vy && vy < maxY) { if (!found_top || top_z < vpoint[Z]) { top_z = vpoint[Z]; top_data_str = sdata_lines_str; @@ -2730,13 +2648,13 @@ to_data_pick_func(struct ged *gedp, if (found_top) { bu_vls_printf(gedp->ged_result_str, "%s %zu {%lf %lf %lf}", - top_data_str, top_i, V3ARGS(top_point)); + top_data_str, top_i, V3ARGS(top_point)); return GED_OK; } /* check for arrow points */ if (gdvp->gv_data_arrows.gdas_draw && - gdvp->gv_data_arrows.gdas_num_points) { + gdvp->gv_data_arrows.gdas_num_points) { struct bview_data_arrow_state *gdasp = &gdvp->gv_data_arrows; for (i = 0; i < gdasp->gdas_num_points; ++i) { @@ -2751,7 +2669,7 @@ to_data_pick_func(struct ged *gedp, minY = vpoint[Y] - tol; maxY = vpoint[Y] + tol; if (minX < vx && vx < maxX && - minY < vy && vy < maxY) { + minY < vy && vy < maxY) { if (!found_top || top_z < vpoint[Z]) { top_z = vpoint[Z]; top_data_str = data_arrows_str; @@ -2765,7 +2683,7 @@ to_data_pick_func(struct ged *gedp, /* check for selected arrow points */ if (gdvp->gv_sdata_arrows.gdas_draw && - gdvp->gv_sdata_arrows.gdas_num_points) { + gdvp->gv_sdata_arrows.gdas_num_points) { struct bview_data_arrow_state *gdasp = &gdvp->gv_sdata_arrows; for (i = 0; i < gdasp->gdas_num_points; ++i) { @@ -2780,7 +2698,7 @@ to_data_pick_func(struct ged *gedp, minY = vpoint[Y] - tol; maxY = vpoint[Y] + tol; if (minX < vx && vx < maxX && - minY < vy && vy < maxY) { + minY < vy && vy < maxY) { if (!found_top || top_z < vpoint[Z]) { top_z = vpoint[Z]; top_data_str = sdata_arrows_str; @@ -2794,13 +2712,13 @@ to_data_pick_func(struct ged *gedp, if (found_top) { bu_vls_printf(gedp->ged_result_str, "%s %zu {%lf %lf %lf}", - top_data_str, top_i, V3ARGS(top_point)); + top_data_str, top_i, V3ARGS(top_point)); return GED_OK; } /* check for axes points */ if (gdvp->gv_data_axes.draw && - gdvp->gv_data_axes.num_points) { + gdvp->gv_data_axes.num_points) { struct bview_data_axes_state *gdasp = &gdvp->gv_data_axes; for (i = 0; i < gdasp->num_points; ++i) { @@ -2815,7 +2733,7 @@ to_data_pick_func(struct ged *gedp, minY = vpoint[Y] - tol; maxY = vpoint[Y] + tol; if (minX < vx && vx < maxX && - minY < vy && vy < maxY) { + minY < vy && vy < maxY) { if (!found_top || top_z < vpoint[Z]) { top_z = vpoint[Z]; top_i = i; @@ -2829,7 +2747,7 @@ to_data_pick_func(struct ged *gedp, /* check for selected axes points */ if (gdvp->gv_sdata_axes.draw && - gdvp->gv_sdata_axes.num_points) { + gdvp->gv_sdata_axes.num_points) { struct bview_data_axes_state *gdasp = &gdvp->gv_sdata_axes; for (i = 0; i < gdasp->num_points; ++i) { @@ -2844,7 +2762,7 @@ to_data_pick_func(struct ged *gedp, minY = vpoint[Y] - tol; maxY = vpoint[Y] + tol; if (minX < vx && vx < maxX && - minY < vy && vy < maxY) { + minY < vy && vy < maxY) { if (!found_top || top_z < vpoint[Z]) { top_z = vpoint[Z]; top_i = i; @@ -2858,7 +2776,7 @@ to_data_pick_func(struct ged *gedp, if (found_top) bu_vls_printf(gedp->ged_result_str, "%s %zu {%lf %lf %lf}", - top_data_str, top_i, V3ARGS(top_point)); + top_data_str, top_i, V3ARGS(top_point)); return GED_OK; @@ -2870,11 +2788,11 @@ to_data_pick_func(struct ged *gedp, HIDDEN int to_data_vZ(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* must be double for scanf */ double vZ; @@ -2926,253 +2844,253 @@ to_init_default_bindings(struct bview *gdvp) struct bu_vls *pathvls = dm_get_pathname((struct dm *)gdvp->dmp); if (pathvls) { bu_vls_printf(&bindings, "bind %s {%s configure %s; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {focus %s; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(pathvls)); + bu_vls_addr(pathvls), + bu_vls_addr(pathvls)); bu_vls_printf(&bindings, "bind %s {%s handle_expose %s %%c; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "catch {wm protocol %s WM_DELETE_WINDOW {%s delete_view %s; break}}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); /* Mouse Bindings */ bu_vls_printf(&bindings, "bind %s <2> {%s vslew %s %%x %%y; focus %s; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name), - bu_vls_addr(pathvls)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name), + bu_vls_addr(pathvls)); bu_vls_printf(&bindings, "bind %s <1> {%s zoom %s 0.5; focus %s; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name), - bu_vls_addr(pathvls)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name), + bu_vls_addr(pathvls)); bu_vls_printf(&bindings, "bind %s <3> {%s zoom %s 2.0; focus %s; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name), - bu_vls_addr(pathvls)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name), + bu_vls_addr(pathvls)); bu_vls_printf(&bindings, "bind %s <4> {%s zoom %s 1.1; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s <5> {%s zoom %s 0.9; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {if {%%D < 0} {%s zoom %s 0.9} else {%s zoom %s 1.1}; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); /* Idle Mode */ bu_vls_printf(&bindings, "bind %s {%s idle_mode %s}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s idle_mode %s}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s idle_mode %s}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s idle_mode %s}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s idle_mode %s}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s idle_mode %s; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s idle_mode %s; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); /* Rotate Mode */ bu_vls_printf(&bindings, "bind %s {%s idle_mode %s}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s rotate_mode %s %%x %%y}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s rotate_mode %s %%x %%y}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s rotate_mode %s %%x %%y}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); /* Translate Mode */ bu_vls_printf(&bindings, "bind %s {%s idle_mode %s}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s translate_mode %s %%x %%y}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s translate_mode %s %%x %%y}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s translate_mode %s %%x %%y}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); /* Scale Mode */ bu_vls_printf(&bindings, "bind %s {%s idle_mode %s}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s scale_mode %s %%x %%y}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s scale_mode %s %%x %%y}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s scale_mode %s %%x %%y}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); /* Constrained Rotate Mode */ bu_vls_printf(&bindings, "bind %s {%s idle_mode %s}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s constrain_rmode %s x %%x %%y; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s constrain_rmode %s y %%x %%y; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s constrain_rmode %s z %%x %%y; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); /* Constrained Translate Mode */ bu_vls_printf(&bindings, "bind %s {%s idle_mode %s; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s constrain_tmode %s x %%x %%y; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s constrain_tmode %s y %%x %%y; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s constrain_tmode %s z %%x %%y; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); /* Key Bindings */ bu_vls_printf(&bindings, "bind %s 3 {%s aet %s 35 25; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s 4 {%s aet %s 45 45; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s f {%s aet %s 0 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s F {%s aet %s 0 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s R {%s aet %s 180 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s r {%s aet %s 270 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s l {%s aet %s 90 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s L {%s aet %s 90 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s t {%s aet %s 270 90; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s T {%s aet %s 270 90; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s b {%s aet %s 270 -90; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s B {%s aet %s 270 -90; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s + {%s zoom %s 2.0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s = {%s zoom %s 2.0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s _ {%s zoom %s 0.5; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s - {%s zoom %s 0.5; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s rot %s -v 0 1 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s rot %s -v 0 -1 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s rot %s -v 1 0 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); bu_vls_printf(&bindings, "bind %s {%s rot %s -v -1 0 0; break}; ", - bu_vls_addr(pathvls), - bu_vls_addr(¤t_top->to_gedp->go_name), - bu_vls_addr(&gdvp->gv_name)); + bu_vls_addr(pathvls), + bu_vls_addr(¤t_top->to_gedp->go_name), + bu_vls_addr(&gdvp->gv_name)); Tcl_Eval(current_top->to_interp, bu_vls_addr(&bindings)); } @@ -3183,11 +3101,11 @@ to_init_default_bindings(struct bview *gdvp) HIDDEN int to_dlist_on(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { struct tclcad_ged_data *tgd = (struct tclcad_ged_data *)current_top->to_gedp->u_data; int on; @@ -3217,14 +3135,152 @@ to_dlist_on(struct ged *gedp, return GED_OK; } +HIDDEN int +to_dplot(struct ged *gedp, + int argc, + const char *argv[], + ged_func_ptr func, + const char *UNUSED(usage), + int UNUSED(maxargs)) +{ + int ac; + int ret; + char *av[256]; + struct bu_vls callback_cmd = BU_VLS_INIT_ZERO; + struct bu_vls temp = BU_VLS_INIT_ZERO; + struct bu_vls result_copy = BU_VLS_INIT_ZERO; + struct bview *gdvp; + struct tclcad_ged_data *tgd = (struct tclcad_ged_data *)current_top->to_gedp->u_data; + const char *who_av[3] = {"who", "b", NULL}; + int first = 1; + int aflag = 0; + + /* copy all args */ + ac = argc; + for (int i = 0; i < ac; ++i) + av[i] = bu_strdup((char *)argv[i]); + av[ac] = (char *)0; + + /* check for displayed objects */ + ret = ged_who(gedp, 2, (const char **)who_av); + if (ret == GED_OK && strlen(bu_vls_addr(gedp->ged_result_str)) == 0) + aflag = 1; + bu_vls_trunc(gedp->ged_result_str, 0); + + while ((ret = (*func)(gedp, ac, (const char **)av)) & GED_MORE) { + int ac_more; + const char **avmp; + const char **av_more = NULL; + + /* save result string */ + bu_vls_substr(&result_copy, gedp->ged_result_str, 0, bu_vls_strlen(gedp->ged_result_str)); + bu_vls_trunc(gedp->ged_result_str, 0); + + ret = ged_who(gedp, 1, (const char **)who_av); + if (ret == GED_OK && strlen(bu_vls_addr(gedp->ged_result_str)) == 0) + aflag = 1; + + bu_vls_trunc(gedp->ged_result_str, 0); + + for (size_t i = 0; i < BU_PTBL_LEN(¤t_top->to_gedp->ged_views); i++) { + gdvp = (struct bview *)BU_PTBL_GET(¤t_top->to_gedp->ged_views, i); + if (to_is_viewable(gdvp)) { + gedp->ged_gvp->gv_x_samples = dm_get_width((struct dm *)gdvp->dmp); + gedp->ged_gvp->gv_y_samples = dm_get_height((struct dm *)gdvp->dmp); + } + } + + if (first && aflag) { + first = 0; + to_autoview_all_views(current_top); + } else { + to_refresh_all_views(current_top); + } + /* restore result string */ + bu_vls_substr(gedp->ged_result_str, &result_copy, 0, bu_vls_strlen(&result_copy)); + bu_vls_free(&result_copy); + + if (0 < bu_vls_strlen(&tgd->go_more_args_callback)) { + bu_vls_trunc(&callback_cmd, 0); + bu_vls_printf(&callback_cmd, "%s [string range {%s} 0 end]", + bu_vls_addr(&tgd->go_more_args_callback), + bu_vls_addr(gedp->ged_result_str)); + + if (Tcl_Eval(current_top->to_interp, bu_vls_addr(&callback_cmd)) != TCL_OK) { + bu_vls_trunc(gedp->ged_result_str, 0); + bu_vls_printf(gedp->ged_result_str, "%s", Tcl_GetStringResult(current_top->to_interp)); + Tcl_ResetResult(current_top->to_interp); + return GED_ERROR; + } + + bu_vls_trunc(&temp, 0); + bu_vls_printf(&temp, "%s", Tcl_GetStringResult(current_top->to_interp)); + Tcl_ResetResult(current_top->to_interp); + } else { + bu_log("\r%s", bu_vls_addr(gedp->ged_result_str)); + bu_vls_trunc(&temp, 0); + if (bu_vls_gets(&temp, stdin) < 0) { + break; + } + } + + if (Tcl_SplitList(current_top->to_interp, bu_vls_addr(&temp), &ac_more, &av_more) != TCL_OK) { + continue; + } + + if (ac_more < 1) { + /* space has still been allocated */ + Tcl_Free((char *)av_more); + + continue; + } + + /* skip first element if empty */ + avmp = av_more; + if (*avmp[0] == '\0') { + --ac_more; + ++avmp; + } + + /* ignore last element if empty */ + if (*avmp[ac_more-1] == '\0') + --ac_more; + + /* copy additional args */ + for (int i = 0; i < ac_more; ++i) + av[ac++] = bu_strdup(avmp[i]); + av[ac+1] = (char *)0; + + Tcl_Free((char *)av_more); + } + + for (size_t i = 0; i < BU_PTBL_LEN(¤t_top->to_gedp->ged_views); i++) { + gdvp = (struct bview *)BU_PTBL_GET(¤t_top->to_gedp->ged_views, i); + if (to_is_viewable(gdvp)) { + gedp->ged_gvp->gv_x_samples = dm_get_width((struct dm *)gdvp->dmp); + gedp->ged_gvp->gv_y_samples = dm_get_height((struct dm *)gdvp->dmp); + } + } + to_refresh_all_views(current_top); + + bu_vls_free(&callback_cmd); + bu_vls_free(&temp); + + bu_vls_printf(gedp->ged_result_str, "BUILT_BY_MORE_ARGS"); + for (int i = 0; i < ac; ++i) { + bu_vls_printf(gedp->ged_result_str, "%s ", av[i]); + bu_free((void *)av[i], "to_more_args_func"); + } + return GED_OK; +} HIDDEN int to_fontsize(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int fontsize; @@ -3273,11 +3329,11 @@ to_fontsize(struct ged *gedp, HIDDEN int to_fit_png_image(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { icv_image_t *img; size_t i_w, i_n; @@ -3297,9 +3353,9 @@ to_fit_png_image(struct ged *gedp, } if (argc != 6 || - bu_sscanf(argv[2], "%zu", &o_w_requested) != 1 || - bu_sscanf(argv[3], "%zu", &o_n_requested) != 1 || - bu_sscanf(argv[4], "%lf", &sf) != 1) { + bu_sscanf(argv[2], "%zu", &o_w_requested) != 1 || + bu_sscanf(argv[3], "%zu", &o_n_requested) != 1 || + bu_sscanf(argv[4], "%lf", &sf) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -3379,11 +3435,11 @@ to_fit_png_image(struct ged *gedp, HIDDEN int to_init_view_bindings(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -3413,11 +3469,11 @@ to_init_view_bindings(struct ged *gedp, HIDDEN int to_delete_view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -3445,11 +3501,11 @@ to_delete_view(struct ged *gedp, HIDDEN int to_handle_expose(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int count; @@ -3463,7 +3519,7 @@ to_handle_expose(struct ged *gedp, } if (argc != 3 || - bu_sscanf(argv[2], "%d", &count) != 1) { + bu_sscanf(argv[2], "%d", &count) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s, argv[2] - %s", argv[0], usage, argv[2]); return GED_ERROR; } @@ -3478,11 +3534,11 @@ to_handle_expose(struct ged *gedp, HIDDEN int to_hide_view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int hide_view; @@ -3565,9 +3621,9 @@ redraw_edited_paths(struct bu_hash_tbl *t, void *udata) struct tclcad_view_data *tvd = (struct tclcad_view_data *)data->gdvp->u_data; bu_vls_printf(&tcl_cmd, "%s otranslate %s %s %s", - bu_vls_addr(&tvd->gdv_edit_motion_delta_callback), - bu_vls_addr(&tran_x_vls), bu_vls_addr(&tran_y_vls), - bu_vls_addr(&tran_z_vls)); + bu_vls_addr(&tvd->gdv_edit_motion_delta_callback), + bu_vls_addr(&tran_x_vls), bu_vls_addr(&tran_y_vls), + bu_vls_addr(&tran_z_vls)); tvd->gdv_edit_motion_delta_callback_cnt++; if (tvd->gdv_edit_motion_delta_callback_cnt > 1) { bu_log("Warning - recursive gdv_edit_motion_delta_callback call\n"); @@ -3615,11 +3671,11 @@ redraw_edited_paths(struct bu_hash_tbl *t, void *udata) HIDDEN int to_idle_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int mode, need_refresh = 0; struct redraw_edited_path_data data; @@ -3648,10 +3704,10 @@ to_idle_mode(struct ged *gedp, mode = gdvp->gv_mode; if (gdvp->gv_adaptive_plot && - gdvp->gv_redraw_on_zoom && - mode == TCLCAD_SCALE_MODE) + gdvp->gv_redraw_on_zoom && + mode == TCLCAD_SCALE_MODE) { - char *av[] = {"redraw", NULL}; + const char *av[] = {"redraw", NULL}; ged_redraw(gedp, 1, (const char **)av); @@ -3659,7 +3715,7 @@ to_idle_mode(struct ged *gedp, } if (mode != TCLCAD_POLY_CONTOUR_MODE || - gdvp->gv_data_polygons.gdps_cflag == 0) + gdvp->gv_data_polygons.gdps_cflag == 0) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -3672,10 +3728,10 @@ to_idle_mode(struct ged *gedp, } if (gdvp->gv_grid.snap && - (mode == TCLCAD_TRANSLATE_MODE || - mode == TCLCAD_CONSTRAINED_TRANSLATE_MODE)) + (mode == TCLCAD_TRANSLATE_MODE || + mode == TCLCAD_CONSTRAINED_TRANSLATE_MODE)) { - char *av[3]; + const char *av[3]; gedp->ged_gvp = gdvp; av[0] = "grid"; @@ -3722,11 +3778,11 @@ to_idle_mode(struct ged *gedp, HIDDEN int to_light(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int light; @@ -3775,11 +3831,11 @@ to_light(struct ged *gedp, HIDDEN int to_list_views(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { struct bview *gdvp; @@ -3802,11 +3858,11 @@ to_list_views(struct ged *gedp, HIDDEN int to_local2base(struct ged *gedp, - int UNUSED(argc), - const char *UNUSED(argv[]), - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int UNUSED(argc), + const char *UNUSED(argv[]), + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -3819,11 +3875,11 @@ to_local2base(struct ged *gedp, HIDDEN int to_lod(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr func, + const char *UNUSED(usage), + int UNUSED(maxargs)) { struct bview *gdvp; @@ -3846,7 +3902,7 @@ to_make(struct ged *gedp, int UNUSED(maxargs)) { int ret; - char *av[3]; + const char *av[3]; ret = ged_make(gedp, argc, argv); @@ -3863,14 +3919,14 @@ to_make(struct ged *gedp, HIDDEN int to_mirror(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { int ret; - char *av[3]; + const char *av[3]; ret = ged_mirror(gedp, argc, argv); @@ -3887,13 +3943,13 @@ to_mirror(struct ged *gedp, HIDDEN int to_edit_motion_delta_callback(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { - register int i; + int i; /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -3930,13 +3986,13 @@ to_edit_motion_delta_callback(struct ged *gedp, HIDDEN int to_more_args_callback(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { - register int i; + int i; struct tclcad_ged_data *tgd = (struct tclcad_ged_data *)current_top->to_gedp->u_data; /* initialize result */ @@ -3960,9 +4016,9 @@ to_more_args_callback(struct ged *gedp, HIDDEN int to_view_cmd(ClientData UNUSED(clientData), - Tcl_Interp *UNUSED(interp), - int UNUSED(argc), - char **UNUSED(argv)) + Tcl_Interp *UNUSED(interp), + int UNUSED(argc), + char **UNUSED(argv)) { return TCL_OK; } @@ -3970,11 +4026,11 @@ to_view_cmd(ClientData UNUSED(clientData), HIDDEN int to_move_arb_edge_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -4002,7 +4058,7 @@ to_move_arb_edge_mode(struct ged *gedp, } if (bu_sscanf(argv[4], "%lf", &x) != 1 || - bu_sscanf(argv[5], "%lf", &y) != 1) { + bu_sscanf(argv[5], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -4014,11 +4070,11 @@ to_move_arb_edge_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname) { bu_vls_printf(&bindings, "bind %s {%s mouse_move_arb_edge %s %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2], - argv[3]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2], + argv[3]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -4029,11 +4085,11 @@ to_move_arb_edge_mode(struct ged *gedp, HIDDEN int to_move_arb_face_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -4061,7 +4117,7 @@ to_move_arb_face_mode(struct ged *gedp, } if (bu_sscanf(argv[4], "%lf", &x) != 1 || - bu_sscanf(argv[5], "%lf", &y) != 1) { + bu_sscanf(argv[5], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -4073,11 +4129,11 @@ to_move_arb_face_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_move_arb_face %s %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2], - argv[3]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2], + argv[3]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -4088,16 +4144,16 @@ to_move_arb_face_mode(struct ged *gedp, HIDDEN int to_bot_move_pnt(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { int ret; if ((ret = ged_bot_move_pnt(gedp, argc, argv)) == GED_OK) { - char *av[3]; + const char *av[3]; int i; if (argc == 4) @@ -4119,16 +4175,16 @@ to_bot_move_pnt(struct ged *gedp, HIDDEN int to_bot_move_pnts(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { int ret; if ((ret = ged_bot_move_pnts(gedp, argc, argv)) == GED_OK) { - char *av[3]; + const char *av[3]; av[0] = "draw"; av[1] = (char *)argv[1]; @@ -4144,11 +4200,11 @@ to_bot_move_pnts(struct ged *gedp, HIDDEN int to_bot_move_pnt_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -4176,7 +4232,7 @@ to_bot_move_pnt_mode(struct ged *gedp, } if (bu_sscanf(argv[4], "%lf", &x) != 1 || - bu_sscanf(argv[5], "%lf", &y) != 1) { + bu_sscanf(argv[5], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -4188,11 +4244,11 @@ to_bot_move_pnt_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_bot_move_pnt -r %s %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2], - argv[3]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2], + argv[3]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -4203,13 +4259,13 @@ to_bot_move_pnt_mode(struct ged *gedp, HIDDEN int to_bot_move_pnts_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { - register int i; + int i; struct bu_vls bindings = BU_VLS_INIT_ZERO; /* must be double for scanf */ @@ -4236,7 +4292,7 @@ to_bot_move_pnts_mode(struct ged *gedp, } if (bu_sscanf(argv[2], "%lf", &x) != 1 || - bu_sscanf(argv[3], "%lf", &y) != 1) { + bu_sscanf(argv[3], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -4266,11 +4322,11 @@ to_bot_move_pnts_mode(struct ged *gedp, HIDDEN int to_metaball_move_pnt_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -4298,7 +4354,7 @@ to_metaball_move_pnt_mode(struct ged *gedp, } if (bu_sscanf(argv[4], "%lf", &x) != 1 || - bu_sscanf(argv[5], "%lf", &y) != 1) { + bu_sscanf(argv[5], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -4310,11 +4366,11 @@ to_metaball_move_pnt_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_metaball_move_pnt %s %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2], - argv[3]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2], + argv[3]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -4325,11 +4381,11 @@ to_metaball_move_pnt_mode(struct ged *gedp, HIDDEN int to_pipe_move_pnt_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -4357,7 +4413,7 @@ to_pipe_move_pnt_mode(struct ged *gedp, } if (bu_sscanf(argv[4], "%lf", &x) != 1 || - bu_sscanf(argv[5], "%lf", &y) != 1) { + bu_sscanf(argv[5], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -4369,11 +4425,11 @@ to_pipe_move_pnt_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_pipe_move_pnt %s %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2], - argv[3]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2], + argv[3]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -4384,16 +4440,16 @@ to_pipe_move_pnt_mode(struct ged *gedp, HIDDEN int to_move_pnt_common(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr func, - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr func, + const char *UNUSED(usage), + int UNUSED(maxargs)) { int ret; if ((ret = (*func)(gedp, argc, argv)) == GED_OK) { - char *av[3]; + const char *av[3]; int i; if (argc == 4) @@ -4415,11 +4471,11 @@ to_move_pnt_common(struct ged *gedp, HIDDEN int to_new_view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bview *new_gdvp; HIDDEN const int name_index = 1; @@ -4549,19 +4605,19 @@ to_new_view(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)new_gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&event_vls, "event generate %s ; %s autoview %s", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&new_gdvp->gv_name)); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&new_gdvp->gv_name)); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&event_vls)); } bu_vls_free(&event_vls); if (pathname && bu_vls_strlen(pathname)) { (void)Tcl_CreateCommand(current_top->to_interp, - bu_vls_cstr(pathname), - (Tcl_CmdProc *)to_view_cmd, - (ClientData)new_gdvp, - NULL); + bu_vls_cstr(pathname), + (Tcl_CmdProc *)to_view_cmd, + (ClientData)new_gdvp, + NULL); } bu_vls_printf(gedp->ged_result_str, "%s", bu_vls_cstr(&new_gdvp->gv_name)); @@ -4571,11 +4627,11 @@ to_new_view(struct ged *gedp, HIDDEN int to_orotate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -4603,7 +4659,7 @@ to_orotate_mode(struct ged *gedp, } if (bu_sscanf(argv[3], "%lf", &x) != 1 || - bu_sscanf(argv[4], "%lf", &y) != 1) { + bu_sscanf(argv[4], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -4615,10 +4671,10 @@ to_orotate_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_orotate %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -4629,11 +4685,11 @@ to_orotate_mode(struct ged *gedp, HIDDEN int to_oscale_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -4661,7 +4717,7 @@ to_oscale_mode(struct ged *gedp, } if (bu_sscanf(argv[3], "%lf", &x) != 1 || - bu_sscanf(argv[4], "%lf", &y) != 1) { + bu_sscanf(argv[4], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -4673,10 +4729,10 @@ to_oscale_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_oscale %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -4688,11 +4744,11 @@ to_oscale_mode(struct ged *gedp, /* to_model_delta_mode */ HIDDEN int to_otranslate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -4720,7 +4776,7 @@ to_otranslate_mode(struct ged *gedp, } if (bu_sscanf(argv[3], "%lf", &x) != 1 || - bu_sscanf(argv[4], "%lf", &y) != 1) { + bu_sscanf(argv[4], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -4732,10 +4788,10 @@ to_otranslate_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_otranslate %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -4746,11 +4802,11 @@ to_otranslate_mode(struct ged *gedp, HIDDEN int to_paint_rect_area(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* initialize result */ @@ -4776,7 +4832,7 @@ to_paint_rect_area(struct ged *gedp, struct tclcad_view_data *tvd = (struct tclcad_view_data *)gdvp->u_data; (void)fb_refresh(tvd->gdv_fbs.fbs_fbp, gdvp->gv_rect.pos[X], gdvp->gv_rect.pos[Y], - gdvp->gv_rect.dim[X], gdvp->gv_rect.dim[Y]); + gdvp->gv_rect.dim[X], gdvp->gv_rect.dim[Y]); (void)dm_set_depth_mask((struct dm *)gdvp->dmp, 1); @@ -4787,11 +4843,11 @@ to_paint_rect_area(struct ged *gedp, #ifdef HAVE_GL_GL_H HIDDEN int to_pix(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { FILE *fp = NULL; unsigned char *scanline; @@ -4831,8 +4887,8 @@ to_pix(struct ged *gedp, if ((fp = fopen(argv[2], "wb")) == NULL) { bu_vls_printf(gedp->ged_result_str, - "%s: cannot open \"%s\" for writing.", - argv[0], argv[2]); + "%s: cannot open \"%s\" for writing.", + argv[0], argv[2]); return GED_ERROR; } @@ -4869,11 +4925,11 @@ to_pix(struct ged *gedp, HIDDEN int to_png(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { png_structp png_p; png_infop info_p; @@ -4916,8 +4972,8 @@ to_png(struct ged *gedp, if ((fp = fopen(argv[2], "wb")) == NULL) { bu_vls_printf(gedp->ged_result_str, - "%s: cannot open \"%s\" for writing.", - argv[0], argv[2]); + "%s: cannot open \"%s\" for writing.", + argv[0], argv[2]); return GED_ERROR; } @@ -4957,8 +5013,8 @@ to_png(struct ged *gedp, png_set_filter(png_p, 0, PNG_FILTER_NONE); png_set_compression_level(png_p, 9); png_set_IHDR(png_p, info_p, width, height, bits_per_channel, - PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, - PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); + PNG_COLOR_TYPE_RGB, PNG_INTERLACE_NONE, + PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); png_set_gAMA(png_p, info_p, 0.5); png_write_info(png_p, info_p); png_write_image(png_p, rows); @@ -4975,15 +5031,15 @@ to_png(struct ged *gedp, HIDDEN int to_rect_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int ac; int x, y; - char *av[5]; + const char *av[5]; struct bu_vls bindings = BU_VLS_INIT_ZERO; struct bu_vls x_vls = BU_VLS_INIT_ZERO; struct bu_vls y_vls = BU_VLS_INIT_ZERO; @@ -5011,7 +5067,7 @@ to_rect_mode(struct ged *gedp, gedp->ged_gvp = gdvp; if (bu_sscanf(argv[2], "%d", &x) != 1 || - bu_sscanf(argv[3], "%d", &y) != 1) { + bu_sscanf(argv[3], "%d", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5047,9 +5103,9 @@ to_rect_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_rect %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name)); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name)); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -5062,11 +5118,11 @@ to_rect_mode(struct ged *gedp, HIDDEN int to_rotate_arb_face_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -5094,7 +5150,7 @@ to_rotate_arb_face_mode(struct ged *gedp, } if (bu_sscanf(argv[5], "%lf", &x) != 1 || - bu_sscanf(argv[6], "%lf", &y) != 1) { + bu_sscanf(argv[6], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5106,12 +5162,12 @@ to_rotate_arb_face_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_rotate_arb_face %s %s %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2], - argv[3], - argv[4]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2], + argv[3], + argv[4]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -5122,11 +5178,11 @@ to_rotate_arb_face_mode(struct ged *gedp, HIDDEN int to_rotate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -5154,7 +5210,7 @@ to_rotate_mode(struct ged *gedp, } if (bu_sscanf(argv[2], "%lf", &x) != 1 || - bu_sscanf(argv[3], "%lf", &y) != 1) { + bu_sscanf(argv[3], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5166,9 +5222,9 @@ to_rotate_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_rot %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name)); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name)); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -5199,13 +5255,13 @@ to_deleteProc_rt(ClientData clientData) HIDDEN int to_rt_end_callback(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { - register int i; + int i; struct tclcad_ged_data *tgd = (struct tclcad_ged_data *)current_top->to_gedp->u_data; /* initialize result */ @@ -5238,11 +5294,11 @@ to_rt_end_callback(struct ged *gedp, */ int to_rt_gettrees(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct application *ap; char *newprocname; @@ -5274,7 +5330,7 @@ to_rt_gettrees(struct ged *gedp, /* Instantiate the proc, with clientData of wdb */ /* Beware, returns a "token", not TCL_OK. */ (void)Tcl_CreateCommand(current_top->to_interp, newprocname, tclcad_rt, - (ClientData)ap, to_deleteProc_rt); + (ClientData)ap, to_deleteProc_rt); /* Return new function name as result */ bu_vls_printf(gedp->ged_result_str, "%s", newprocname); @@ -5285,11 +5341,11 @@ to_rt_gettrees(struct ged *gedp, HIDDEN int to_protate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -5317,7 +5373,7 @@ to_protate_mode(struct ged *gedp, } if (bu_sscanf(argv[4], "%lf", &x) != 1 || - bu_sscanf(argv[5], "%lf", &y) != 1) { + bu_sscanf(argv[5], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5329,11 +5385,11 @@ to_protate_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_protate %s %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2], - argv[3]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2], + argv[3]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -5344,11 +5400,11 @@ to_protate_mode(struct ged *gedp, HIDDEN int to_pscale_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -5376,7 +5432,7 @@ to_pscale_mode(struct ged *gedp, } if (bu_sscanf(argv[4], "%lf", &x) != 1 || - bu_sscanf(argv[5], "%lf", &y) != 1) { + bu_sscanf(argv[5], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5388,11 +5444,11 @@ to_pscale_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_pscale %s %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2], - argv[3]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2], + argv[3]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -5403,11 +5459,11 @@ to_pscale_mode(struct ged *gedp, HIDDEN int to_ptranslate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -5435,7 +5491,7 @@ to_ptranslate_mode(struct ged *gedp, } if (bu_sscanf(argv[4], "%lf", &x) != 1 || - bu_sscanf(argv[5], "%lf", &y) != 1) { + bu_sscanf(argv[5], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5447,11 +5503,11 @@ to_ptranslate_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_ptranslate %s %s %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name), - argv[2], - argv[3]); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name), + argv[2], + argv[3]); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -5462,11 +5518,11 @@ to_ptranslate_mode(struct ged *gedp, HIDDEN int to_data_scale_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -5494,7 +5550,7 @@ to_data_scale_mode(struct ged *gedp, } if (bu_sscanf(argv[2], "%lf", &x) != 1 || - bu_sscanf(argv[3], "%lf", &y) != 1) { + bu_sscanf(argv[3], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5506,9 +5562,9 @@ to_data_scale_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_data_scale %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name)); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name)); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -5519,11 +5575,11 @@ to_data_scale_mode(struct ged *gedp, HIDDEN int to_scale_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -5551,7 +5607,7 @@ to_scale_mode(struct ged *gedp, } if (bu_sscanf(argv[2], "%lf", &x) != 1 || - bu_sscanf(argv[3], "%lf", &y) != 1) { + bu_sscanf(argv[3], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5563,9 +5619,9 @@ to_scale_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_scale %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name)); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name)); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -5576,11 +5632,11 @@ to_scale_mode(struct ged *gedp, HIDDEN int to_screen2model(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { point_t view; point_t model; @@ -5609,7 +5665,7 @@ to_screen2model(struct ged *gedp, } if (bu_sscanf(argv[2], "%lf", &x) != 1 || - bu_sscanf(argv[3], "%lf", &y) != 1) { + bu_sscanf(argv[3], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5627,11 +5683,11 @@ to_screen2model(struct ged *gedp, HIDDEN int to_screen2view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { point_t view; @@ -5659,7 +5715,7 @@ to_screen2view(struct ged *gedp, } if (bu_sscanf(argv[2], "%lf", &x) != 1 || - bu_sscanf(argv[3], "%lf", &y) != 1) { + bu_sscanf(argv[3], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5676,11 +5732,11 @@ to_screen2view(struct ged *gedp, HIDDEN int to_set_coord(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -5722,11 +5778,11 @@ to_set_coord(struct ged *gedp, HIDDEN int to_snap_view(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { fastf_t fvx, fvy; @@ -5754,7 +5810,7 @@ to_snap_view(struct ged *gedp, } if (bu_sscanf(argv[2], "%lf", &vx) != 1 || - bu_sscanf(argv[3], "%lf", &vy) != 1) { + bu_sscanf(argv[3], "%lf", &vy) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5784,16 +5840,16 @@ to_snap_view(struct ged *gedp, HIDDEN int to_bot_edge_split(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { int ret; if ((ret = ged_bot_edge_split(gedp, argc, argv)) == GED_OK) { - char *av[3]; + const char *av[3]; struct bu_vls save_result; bu_vls_init(&save_result); @@ -5816,16 +5872,16 @@ to_bot_edge_split(struct ged *gedp, HIDDEN int to_bot_face_split(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *UNUSED(usage), - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *UNUSED(usage), + int UNUSED(maxargs)) { int ret; if ((ret = ged_bot_face_split(gedp, argc, argv)) == GED_OK) { - char *av[3]; + const char *av[3]; struct bu_vls save_result; bu_vls_init(&save_result); @@ -5848,11 +5904,11 @@ to_bot_face_split(struct ged *gedp, HIDDEN int to_translate_mode(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { struct bu_vls bindings = BU_VLS_INIT_ZERO; @@ -5880,7 +5936,7 @@ to_translate_mode(struct ged *gedp, } if (bu_sscanf(argv[2], "%lf", &x) != 1 || - bu_sscanf(argv[3], "%lf", &y) != 1) { + bu_sscanf(argv[3], "%lf", &y) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -5892,9 +5948,9 @@ to_translate_mode(struct ged *gedp, struct bu_vls *pathname = dm_get_pathname((struct dm *)gdvp->dmp); if (pathname && bu_vls_strlen(pathname)) { bu_vls_printf(&bindings, "bind %s {%s mouse_trans %s %%x %%y}", - bu_vls_cstr(pathname), - bu_vls_cstr(¤t_top->to_gedp->go_name), - bu_vls_cstr(&gdvp->gv_name)); + bu_vls_cstr(pathname), + bu_vls_cstr(¤t_top->to_gedp->go_name), + bu_vls_cstr(&gdvp->gv_name)); Tcl_Eval(current_top->to_interp, bu_vls_cstr(&bindings)); } bu_vls_free(&bindings); @@ -5905,11 +5961,11 @@ to_translate_mode(struct ged *gedp, HIDDEN int to_transparency(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int transparency; @@ -5957,13 +6013,13 @@ to_transparency(struct ged *gedp, HIDDEN int to_view_callback(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { - register int i; + int i; /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -6000,11 +6056,11 @@ to_view_callback(struct ged *gedp, HIDDEN int to_view_win_size(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int width, height; @@ -6060,11 +6116,11 @@ to_view_win_size(struct ged *gedp, HIDDEN int to_view2screen(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int width, height; fastf_t x, y; @@ -6112,11 +6168,11 @@ to_view2screen(struct ged *gedp, HIDDEN int to_vmake(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { /* initialize result */ bu_vls_trunc(gedp->ged_result_str, 0); @@ -6140,7 +6196,7 @@ to_vmake(struct ged *gedp, { int ret; - char *av[8]; + const char *av[8]; char center[512]; char scale[128]; @@ -6175,15 +6231,15 @@ to_vmake(struct ged *gedp, HIDDEN int to_vslew(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int ret, width, height; int ac; - char *av[3]; + const char *av[3]; fastf_t xpos2, ypos2; fastf_t sf; struct bu_vls slew_vec = BU_VLS_INIT_ZERO; @@ -6212,7 +6268,7 @@ to_vslew(struct ged *gedp, } if (bu_sscanf(argv[2], "%lf", &xpos1) != 1 || - bu_sscanf(argv[3], "%lf", &ypos1) != 1) { + bu_sscanf(argv[3], "%lf", &ypos1) != 1) { bu_vls_printf(gedp->ged_result_str, "Usage: %s %s", argv[0], usage); return GED_ERROR; } @@ -6267,11 +6323,11 @@ to_vslew(struct ged *gedp, HIDDEN int to_zbuffer(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int zbuffer; @@ -6322,11 +6378,11 @@ to_zbuffer(struct ged *gedp, HIDDEN int to_zclip(struct ged *gedp, - int argc, - const char *argv[], - ged_func_ptr UNUSED(func), - const char *usage, - int UNUSED(maxargs)) + int argc, + const char *argv[], + ged_func_ptr UNUSED(func), + const char *usage, + int UNUSED(maxargs)) { int zclip; @@ -6381,7 +6437,7 @@ HIDDEN void to_create_vlist_callback_solid(struct solid *sp) { struct bview *gdvp; - register int first = 1; + int first = 1; struct tclcad_ged_data *tgd = (struct tclcad_ged_data *)current_top->to_gedp->u_data; @@ -6402,9 +6458,9 @@ to_create_vlist_callback_solid(struct solid *sp) (void)dm_set_fg((struct dm *)gdvp->dmp, 255, 255, 255, 0, sp->s_transparency); else (void)dm_set_fg((struct dm *)gdvp->dmp, - (unsigned char)sp->s_color[0], - (unsigned char)sp->s_color[1], - (unsigned char)sp->s_color[2], 0, sp->s_transparency); + (unsigned char)sp->s_color[0], + (unsigned char)sp->s_color[1], + (unsigned char)sp->s_color[2], 0, sp->s_transparency); if (sp->s_hiddenLine) { (void)dm_draw_vlist_hidden_line((struct dm *)gdvp->dmp, (struct bn_vlist *)&sp->s_vlist); @@ -6455,7 +6511,7 @@ to_rt_end_callback_internal(int aborted) bu_log("Warning - recursive go_rt_end_callback call\n"); } bu_vls_printf(&callback_cmd, "%s %d", - bu_vls_addr(&tgd->go_rt_end_callback), aborted); + bu_vls_addr(&tgd->go_rt_end_callback), aborted); Tcl_Eval(current_top->to_interp, bu_vls_addr(&callback_cmd)); tgd->go_rt_end_callback_cnt--; } @@ -6478,8 +6534,8 @@ to_output_handler(struct ged *gedp, char *line) int go_run_tclscript(Tcl_Interp *interp, - const char *tclscript, - struct bu_vls *result_str) + const char *tclscript, + struct bu_vls *result_str) { int ret; @@ -6496,8 +6552,8 @@ go_run_tclscript(Tcl_Interp *interp, struct application * to_rt_gettrees_application(struct ged *gedp, - int argc, - const char *argv[]) + int argc, + const char *argv[]) { struct rt_i *rtip; struct application *ap; @@ -6559,10 +6615,11 @@ to_rt_gettrees_application(struct ged *gedp, } + /* * Local Variables: - * mode: C * tab-width: 8 + * mode: C * indent-tabs-mode: t * c-file-style: "stroustrup" * End: diff --git a/src/libtclcad/dm.c b/src/libtclcad/dm.c index bad9b2ef5f0..864c861db46 100644 --- a/src/libtclcad/dm.c +++ b/src/libtclcad/dm.c @@ -1,7 +1,7 @@ /* D M . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/eval.c b/src/libtclcad/eval.c index 2aefa7671a2..b0469d585c9 100644 --- a/src/libtclcad/eval.c +++ b/src/libtclcad/eval.c @@ -1,7 +1,7 @@ /* E V A L . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/fb.c b/src/libtclcad/fb.c index 5ddae4ee6e7..03dd0eb5b32 100644 --- a/src/libtclcad/fb.c +++ b/src/libtclcad/fb.c @@ -1,7 +1,7 @@ /* F B . C * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/fbserv.c b/src/libtclcad/fbserv.c index 91de4e46b56..a2faf182697 100644 --- a/src/libtclcad/fbserv.c +++ b/src/libtclcad/fbserv.c @@ -1,7 +1,7 @@ /* F B S E R V . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/global.c b/src/libtclcad/global.c index 02771d07fbe..10a8d11aec1 100644 --- a/src/libtclcad/global.c +++ b/src/libtclcad/global.c @@ -1,7 +1,7 @@ /* G L O B A L . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/init.c b/src/libtclcad/init.c index eade9d9332d..1717c91edb8 100644 --- a/src/libtclcad/init.c +++ b/src/libtclcad/init.c @@ -1,7 +1,7 @@ /* I N I T . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -34,6 +34,9 @@ #endif #include "vmath.h" +#include "bu/app.h" +#include "bu/path.h" +#include "bu/vls.h" #include "bn.h" #include "dm.h" #include "raytrace.h" @@ -87,13 +90,38 @@ tclcad_init(Tcl_Interp *interp, int init_gui, struct bu_vls *tlog) if (library_initialized(0)) return TCL_OK; + /* Tcl_Init needs init.tcl. It can be tricky to find init.tcl - help out, + * if we can. Per the Tcl_Init() definition in generic/tclInterp.c in the + * Tcl source code, setting tcl_library is the recommended way for embedding + * applications to assist Tcl_Init in finding this file... */ + char libdir[MAXPATHLEN] = {0}; + bu_dir(libdir, MAXPATHLEN, BU_DIR_LIB, NULL); + if (strlen(libdir)) { + struct bu_vls lib_path = BU_VLS_INIT_ZERO; + bu_vls_sprintf(&lib_path, "%s%ctcl%s/init.tcl", libdir, BU_DIR_SEPARATOR, TCL_VERSION); + if (bu_file_exists(bu_vls_cstr(&lib_path), NULL)) { + struct bu_vls initpath = BU_VLS_INIT_ZERO; + bu_vls_sprintf(&lib_path, "%s%ctcl%s", libdir, BU_DIR_SEPARATOR, TCL_VERSION); + bu_vls_printf(&initpath, "set tcl_library {%s}", bu_vls_cstr(&lib_path)); + if (Tcl_Eval(interp, bu_vls_addr(&initpath))) { + bu_log("Problem initializing tcl_library to init.tcl path: Tcl_Eval ERROR:\n%s\n", Tcl_GetStringResult(interp)); + } + bu_vls_free(&initpath); + } + bu_vls_free(&lib_path); + } + if (Tcl_Init(interp) == TCL_ERROR) { + if (tlog) + bu_vls_printf(tlog, "Tcl init ERROR:\n%s\n", Tcl_GetStringResult(interp)); return TCL_ERROR; } if (init_gui) { #ifdef HAVE_TK if (Tk_Init(interp) == TCL_ERROR) { + if (tlog) + bu_vls_printf(tlog, "Tk init ERROR:\n%s\n", Tcl_GetStringResult(interp)); return TCL_ERROR; } #endif @@ -103,7 +131,7 @@ tclcad_init(Tcl_Interp *interp, int init_gui, struct bu_vls *tlog) tclcad_auto_path(interp); /* Initialize [incr Tcl] */ - if (Tcl_Eval(interp, "package require Itcl") != TCL_OK) { + if (Tcl_Eval(interp, "package require Itcl 3") != TCL_OK) { if (tlog) bu_vls_printf(tlog, "Itcl init ERROR:\n%s\n", Tcl_GetStringResult(interp)); return TCL_ERROR; @@ -112,7 +140,7 @@ tclcad_init(Tcl_Interp *interp, int init_gui, struct bu_vls *tlog) /* Initialize [incr Tk] */ if (init_gui) { #ifdef HAVE_TK - if (Tcl_Eval(interp, "package require Itk") != TCL_OK) { + if (Tcl_Eval(interp, "package require Itk 3") != TCL_OK) { if (tlog) bu_vls_printf(tlog, "Itk init ERROR:\n%s\n", Tcl_GetStringResult(interp)); return TCL_ERROR; diff --git a/src/libtclcad/mouse.c b/src/libtclcad/mouse.c index 07dfa63906c..483284ff1a8 100644 --- a/src/libtclcad/mouse.c +++ b/src/libtclcad/mouse.c @@ -1,7 +1,7 @@ /* M O U S E . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/polygons.c b/src/libtclcad/polygons.c index c61a5e897bf..0aad7743126 100644 --- a/src/libtclcad/polygons.c +++ b/src/libtclcad/polygons.c @@ -1,7 +1,7 @@ /* P O L Y G O N S . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/rt.c b/src/libtclcad/rt.c index 3d81fe52d6b..1c4f2165a02 100644 --- a/src/libtclcad/rt.c +++ b/src/libtclcad/rt.c @@ -1,7 +1,7 @@ /* R T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/libtclcad/tclcad_private.h b/src/libtclcad/tclcad_private.h index 20b2e9fab9a..a8d8d8fb440 100644 --- a/src/libtclcad/tclcad_private.h +++ b/src/libtclcad/tclcad_private.h @@ -1,7 +1,7 @@ /* T C L C A D _ P R I V A T E . H * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/tkImgFmtPIX.c b/src/libtclcad/tkImgFmtPIX.c index d117ad6ada8..57c28cee2bc 100644 --- a/src/libtclcad/tkImgFmtPIX.c +++ b/src/libtclcad/tkImgFmtPIX.c @@ -1,7 +1,7 @@ /* T K I M G F M T P I X . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/src/libtclcad/view/arrows.c b/src/libtclcad/view/arrows.c index e8b47e38ea2..b19b05ec0a3 100644 --- a/src/libtclcad/view/arrows.c +++ b/src/libtclcad/view/arrows.c @@ -1,7 +1,7 @@ /* A R R O W S . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/view/autoview.c b/src/libtclcad/view/autoview.c index f8fee4c895f..b25f4e40f74 100644 --- a/src/libtclcad/view/autoview.c +++ b/src/libtclcad/view/autoview.c @@ -1,7 +1,7 @@ /* A U T O V I E W . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/view/axes.c b/src/libtclcad/view/axes.c index 57ab541cb64..87f4b5e5951 100644 --- a/src/libtclcad/view/axes.c +++ b/src/libtclcad/view/axes.c @@ -1,7 +1,7 @@ /* A X E S . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/view/draw.c b/src/libtclcad/view/draw.c index dc61938e380..e9b8364f905 100644 --- a/src/libtclcad/view/draw.c +++ b/src/libtclcad/view/draw.c @@ -1,7 +1,7 @@ /* D R A W . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/view/faceplate.c b/src/libtclcad/view/faceplate.c index 2981ba32eb7..b74b15ab7c7 100644 --- a/src/libtclcad/view/faceplate.c +++ b/src/libtclcad/view/faceplate.c @@ -1,7 +1,7 @@ /* F A C E P L A T E . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/view/labels.c b/src/libtclcad/view/labels.c index da4a07744bd..b1148f3dcc9 100644 --- a/src/libtclcad/view/labels.c +++ b/src/libtclcad/view/labels.c @@ -1,7 +1,7 @@ /* L A B E L S . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/view/lines.c b/src/libtclcad/view/lines.c index 31f974cecda..2b76fdac61b 100644 --- a/src/libtclcad/view/lines.c +++ b/src/libtclcad/view/lines.c @@ -1,7 +1,7 @@ /* L I N E S . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/view/refresh.c b/src/libtclcad/view/refresh.c index 3b2a67a15da..17bc9564c1c 100644 --- a/src/libtclcad/view/refresh.c +++ b/src/libtclcad/view/refresh.c @@ -1,7 +1,7 @@ /* R E F R E S H . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/view/util.c b/src/libtclcad/view/util.c index e005e8523f9..88057872e97 100644 --- a/src/libtclcad/view/util.c +++ b/src/libtclcad/view/util.c @@ -1,7 +1,7 @@ /* T C L C A D _ V I E W S . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/view/view.h b/src/libtclcad/view/view.h index 9a7d8f18680..4503c64ff30 100644 --- a/src/libtclcad/view/view.h +++ b/src/libtclcad/view/view.h @@ -1,7 +1,7 @@ /* V I E W . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtclcad/wrapper.c b/src/libtclcad/wrapper.c index fb0f1cdd4e6..03a7afa2718 100644 --- a/src/libtclcad/wrapper.c +++ b/src/libtclcad/wrapper.c @@ -1,7 +1,7 @@ /* W R A P P E R . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libtermio/termio.c b/src/libtermio/termio.c index 357e3f669c6..fd67ad52685 100644 --- a/src/libtermio/termio.c +++ b/src/libtermio/termio.c @@ -1,7 +1,7 @@ /* T E R M I O . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/annot.c b/src/libwdb/annot.c index 72f6f0360d0..0b8046fc11d 100644 --- a/src/libwdb/annot.c +++ b/src/libwdb/annot.c @@ -1,7 +1,7 @@ /* A N N O T . C * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/arbn.c b/src/libwdb/arbn.c index 316b870a217..aa94dc31e90 100644 --- a/src/libwdb/arbn.c +++ b/src/libwdb/arbn.c @@ -1,7 +1,7 @@ /* A R B N . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/ars.c b/src/libwdb/ars.c index b7ddd8d403c..e3f70d5470d 100644 --- a/src/libwdb/ars.c +++ b/src/libwdb/ars.c @@ -1,7 +1,7 @@ /* A R S . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/bot.c b/src/libwdb/bot.c index 67ee9468429..f1db5dd2d7d 100644 --- a/src/libwdb/bot.c +++ b/src/libwdb/bot.c @@ -1,7 +1,7 @@ /* B O T . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/brep.cpp b/src/libwdb/brep.cpp index 1a386594ef3..b830c7fb0f9 100644 --- a/src/libwdb/brep.cpp +++ b/src/libwdb/brep.cpp @@ -1,7 +1,7 @@ /* B R E P . C P P * BRL-CAD * - * Copyright (c) 1987-2020 United States Government as represented by + * Copyright (c) 1987-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/cline.c b/src/libwdb/cline.c index f60edbb23a8..5b167c83d30 100644 --- a/src/libwdb/cline.c +++ b/src/libwdb/cline.c @@ -1,7 +1,7 @@ /* C L I N E . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/constraint.c b/src/libwdb/constraint.c index fcb304889a8..e3cf87f0c00 100644 --- a/src/libwdb/constraint.c +++ b/src/libwdb/constraint.c @@ -1,7 +1,7 @@ /* C O N S T R A I N T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/datum.c b/src/libwdb/datum.c index 05df0fb02b7..2f9b8c05543 100644 --- a/src/libwdb/datum.c +++ b/src/libwdb/datum.c @@ -1,7 +1,7 @@ /* D A T U M . C * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/dsp.c b/src/libwdb/dsp.c index b98daf9f4bf..e50085cfe5d 100644 --- a/src/libwdb/dsp.c +++ b/src/libwdb/dsp.c @@ -1,7 +1,7 @@ /* D S P . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/dynamic_geometry.c b/src/libwdb/dynamic_geometry.c index d3761755855..98afdd909f5 100644 --- a/src/libwdb/dynamic_geometry.c +++ b/src/libwdb/dynamic_geometry.c @@ -1,7 +1,7 @@ /* D Y N A M I C _ G E O M E T R Y . C * BRL-CAD * - * Copyright (c) 2003-2020 United States Government as represented by + * Copyright (c) 2003-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/ebm.c b/src/libwdb/ebm.c index 5f0880c7eb1..7e16a084fe1 100644 --- a/src/libwdb/ebm.c +++ b/src/libwdb/ebm.c @@ -1,7 +1,7 @@ /* E B M . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/export.c b/src/libwdb/export.c index 472006d9ff5..c88407c5b10 100644 --- a/src/libwdb/export.c +++ b/src/libwdb/export.c @@ -1,7 +1,7 @@ /* E X P O R T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/extrude.c b/src/libwdb/extrude.c index 32da9cc1a36..339112bb8d1 100644 --- a/src/libwdb/extrude.c +++ b/src/libwdb/extrude.c @@ -1,7 +1,7 @@ /* E X T R U D E . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/id.c b/src/libwdb/id.c index 8f2ce545c30..eb289542364 100644 --- a/src/libwdb/id.c +++ b/src/libwdb/id.c @@ -1,7 +1,7 @@ /* I D . C * BRL-CAD * - * Copyright (c) 1987-2020 United States Government as represented by + * Copyright (c) 1987-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/mater.c b/src/libwdb/mater.c index 887b5a54346..68b6098a039 100644 --- a/src/libwdb/mater.c +++ b/src/libwdb/mater.c @@ -1,7 +1,7 @@ /* M A T E R . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/nmg.c b/src/libwdb/nmg.c index 79e93e3fb1e..22a00592e55 100644 --- a/src/libwdb/nmg.c +++ b/src/libwdb/nmg.c @@ -1,7 +1,7 @@ /* N M G . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/nurb.c b/src/libwdb/nurb.c index 504516b41fd..119362b0932 100644 --- a/src/libwdb/nurb.c +++ b/src/libwdb/nurb.c @@ -1,7 +1,7 @@ /* N U R B . C * BRL-CAD * - * Copyright (c) 1987-2020 United States Government as represented by + * Copyright (c) 1987-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/pipe.c b/src/libwdb/pipe.c index 816f9470393..e77d0c5c147 100644 --- a/src/libwdb/pipe.c +++ b/src/libwdb/pipe.c @@ -1,7 +1,7 @@ /* P I P E . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/reg.c b/src/libwdb/reg.c index 11551e2acf8..6430bb287a7 100644 --- a/src/libwdb/reg.c +++ b/src/libwdb/reg.c @@ -1,7 +1,7 @@ /* R E G . C * BRL-CAD * - * Copyright (c) 1987-2020 United States Government as represented by + * Copyright (c) 1987-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/script.c b/src/libwdb/script.c index 88d3d226c91..190fb8ab5c0 100644 --- a/src/libwdb/script.c +++ b/src/libwdb/script.c @@ -1,7 +1,7 @@ /* S C R I P T . C * BRL-CAD * - * Copyright (c) 2017-2020 United States Government as represented by + * Copyright (c) 2017-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/sketch.c b/src/libwdb/sketch.c index 0a104075ad7..dd6673265a5 100644 --- a/src/libwdb/sketch.c +++ b/src/libwdb/sketch.c @@ -1,7 +1,7 @@ /* S K E T C H . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/submodel.c b/src/libwdb/submodel.c index 622803fec4b..086bdf0cd85 100644 --- a/src/libwdb/submodel.c +++ b/src/libwdb/submodel.c @@ -1,7 +1,7 @@ /* S U B M O D E L . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/units.c b/src/libwdb/units.c index eae70a593e2..103ffd98748 100644 --- a/src/libwdb/units.c +++ b/src/libwdb/units.c @@ -1,7 +1,7 @@ /* U N I T S . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/libwdb/vol.c b/src/libwdb/vol.c index 9be9b64bd1b..663ae53cb4b 100644 --- a/src/libwdb/vol.c +++ b/src/libwdb/vol.c @@ -1,7 +1,7 @@ /* V O L . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -35,8 +35,9 @@ int -mk_vol(struct rt_wdb *fp, const char *name, const char *file, size_t xdim, size_t ydim, size_t zdim, size_t lo, size_t hi, const fastf_t *cellsize, const matp_t mat) - /* name of file containing bitmap */ +mk_vol(struct rt_wdb *fp, const char *name, char datasrc, const char *file, size_t xdim, size_t ydim, size_t zdim, size_t lo, size_t hi, const fastf_t *cellsize, const matp_t mat) + /* type of data source */ + /* name of file/object containing bitmap */ /* X dimension of file (w cells) */ /* Y dimension of file (n cells) */ /* Z dimension of file (d cells) */ @@ -49,7 +50,8 @@ mk_vol(struct rt_wdb *fp, const char *name, const char *file, size_t xdim, size_ BU_ALLOC(vol, struct rt_vol_internal); vol->magic = RT_VOL_INTERNAL_MAGIC; - bu_strlcpy(vol->file, file, RT_VOL_NAME_LEN); + vol->datasrc = datasrc; + bu_strlcpy(vol->name, file, RT_VOL_NAME_LEN); vol->xdim = xdim; vol->ydim = ydim; vol->zdim = zdim; diff --git a/src/libwdb/wdb.c b/src/libwdb/wdb.c index 5162b819343..09636887b7d 100644 --- a/src/libwdb/wdb.c +++ b/src/libwdb/wdb.c @@ -1,7 +1,7 @@ /* W D B . C * BRL-CAD * - * Copyright (c) 1987-2020 United States Government as represented by + * Copyright (c) 1987-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/mged/CMakeLists.txt b/src/mged/CMakeLists.txt index b48aa64fc4c..5d4ce6d9ed5 100644 --- a/src/mged/CMakeLists.txt +++ b/src/mged/CMakeLists.txt @@ -54,7 +54,7 @@ if (HAVE_WINDOWS_H) endif (HAVE_WINDOWS_H) -set(mged_libs libtclcad libged libwdb libdm libnmg ${ITCL_LIBRARY} ${ITK_LIBRARY} ${WS2_32_LIBRARY} ${OPENGL32_LIBRARY}) +set(mged_libs libtclcad libged libwdb libdm libnmg ${WS2_32_LIBRARY} ${OPENGL32_LIBRARY}) if(TARGET libtermio) set(mged_libs ${mged_libs} libtermio) endif(TARGET libtermio) diff --git a/src/mged/adc.c b/src/mged/adc.c index 2d298ca30c4..f003e48c91a 100644 --- a/src/mged/adc.c +++ b/src/mged/adc.c @@ -1,7 +1,7 @@ /* A D C . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/arbs.c b/src/mged/arbs.c index 1be9fd43cff..1625f19694c 100644 --- a/src/mged/arbs.c +++ b/src/mged/arbs.c @@ -1,7 +1,7 @@ /* A R B S . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/attach.c b/src/mged/attach.c index c696beb89c0..a7dbe7bd219 100644 --- a/src/mged/attach.c +++ b/src/mged/attach.c @@ -1,7 +1,7 @@ /* A T T A C H . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -68,7 +68,7 @@ static fastf_t windowbounds[6] = { XMIN, XMAX, YMIN, YMAX, (int)GED_MIN, (int)GE void set_curr_dm(struct mged_dm *nc) { mged_curr_dm = nc; - if (nc != MGED_DM_NULL) { + if (nc != MGED_DM_NULL && nc->dm_view_state) { GEDP->ged_gvp = nc->dm_view_state->vs_gvp; GEDP->ged_gvp->gv_grid = *nc->dm_grid_state; /* struct copy */ } else { @@ -155,7 +155,6 @@ int release(char *name, int need_close) { struct mged_dm *save_dm_list = MGED_DM_NULL; - struct bu_vls *cpathname = dm_get_pathname(DMP); struct bu_vls *pathname = NULL; if (name != NULL) { @@ -166,6 +165,9 @@ release(char *name, int need_close) for (size_t i = 0; i < BU_PTBL_LEN(&active_dm_set); i++) { struct mged_dm *m_dmp = (struct mged_dm *)BU_PTBL_GET(&active_dm_set, i); + if (!m_dmp || !m_dmp->dm_dmp) + continue; + pathname = dm_get_pathname(m_dmp->dm_dmp); if (!BU_STR_EQUAL(name, bu_vls_cstr(pathname))) continue; @@ -183,7 +185,7 @@ release(char *name, int need_close) Tcl_AppendResult(INTERP, "release: ", name, " not found\n", (char *)NULL); return TCL_ERROR; } - } else if (BU_STR_EQUAL("nu", bu_vls_cstr(cpathname))) + } else if (DMP && BU_STR_EQUAL("nu", bu_vls_cstr(dm_get_pathname(DMP)))) return TCL_OK; /* Ignore */ if (fbp) { @@ -494,54 +496,59 @@ mged_attach(const char *wp_name, int argc, const char *argv[]) } +#define MAX_ATTACH_RETRIES 100 + void get_attached(void) { - int inflimit = 1000; + char *tok; + int inflimit = MAX_ATTACH_RETRIES; int ret; - struct bu_vls type = BU_VLS_INIT_ZERO; + struct bu_vls avail_types = BU_VLS_INIT_ZERO; + struct bu_vls wanted_type = BU_VLS_INIT_ZERO; + struct bu_vls prompt = BU_VLS_INIT_ZERO; - struct bu_vls type_msg = BU_VLS_INIT_ZERO; - struct bu_vls dm_types = BU_VLS_INIT_ZERO; - dm_list_types(&dm_types, " "); - char **dms = (char **)bu_calloc(bu_vls_strlen(&dm_types), sizeof(char *), "dm name array"); - int nargc = bu_argv_from_string(dms, bu_vls_strlen(&dm_types), bu_vls_addr(&dm_types)); + const char *DELIM = " "; + + dm_list_types(&avail_types, DELIM); - bu_vls_sprintf(&type_msg, "attach (nu"); - for (int i = 0; i < nargc; i++) { - if (BU_STR_EQUAL(dms[i], "nu")) + bu_vls_sprintf(&prompt, "attach (nu"); + for (tok = strtok(bu_vls_addr(&avail_types), " "); tok; tok = strtok(NULL, " ")) { + if (BU_STR_EQUAL(tok, "nu")) continue; - if (BU_STR_EQUAL(dms[i], "plot")) + if (BU_STR_EQUAL(tok, "plot")) continue; - if (BU_STR_EQUAL(dms[i], "postscript")) + if (BU_STR_EQUAL(tok, "postscript")) continue; - bu_vls_printf(&type_msg, " %s", dms[i]); + bu_vls_printf(&prompt, " %s", tok); } - bu_vls_printf(&type_msg, ")[nu]? "); - bu_free(dms, "array"); - bu_vls_free(&dm_types); + bu_vls_printf(&prompt, ")[nu]? "); + + bu_vls_free(&avail_types); while (inflimit > 0) { - bu_log("%s", bu_vls_cstr(&type_msg)); + bu_log("%s", bu_vls_cstr(&prompt)); - ret = bu_vls_gets(&type, stdin); + ret = bu_vls_gets(&wanted_type, stdin); if (ret < 0) { /* handle EOF */ bu_log("\n"); - bu_vls_free(&type); + bu_vls_free(&wanted_type); + bu_vls_free(&prompt); return; } - if (bu_vls_strlen(&type) == 0 || BU_STR_EQUAL(bu_vls_addr(&type), "nu")) { + if (bu_vls_strlen(&wanted_type) == 0 || BU_STR_EQUAL(bu_vls_addr(&wanted_type), "nu")) { /* Nothing more to do. */ - bu_vls_free(&type); + bu_vls_free(&wanted_type); + bu_vls_free(&prompt); return; } /* trim whitespace before comparisons (but not before checking empty) */ - bu_vls_trimspace(&type); + bu_vls_trimspace(&wanted_type); - if (dm_valid_type(bu_vls_cstr(&type), NULL)) { + if (dm_valid_type(bu_vls_cstr(&wanted_type), NULL)) { break; } @@ -549,23 +556,23 @@ get_attached(void) inflimit--; } - bu_vls_free(&type_msg); + bu_vls_free(&prompt); if (inflimit <= 0) { bu_log("\nInfinite loop protection, attach aborted!\n"); - bu_vls_free(&type); + bu_vls_free(&wanted_type); return; } - bu_log("Starting an %s display manager\n", bu_vls_cstr(&type)); + bu_log("Starting an %s display manager\n", bu_vls_cstr(&wanted_type)); int argc = 1; const char *argv[3]; argv[0] = ""; argv[1] = ""; argv[2] = (char *)NULL; - (void)mged_attach(bu_vls_cstr(&type), argc, argv); - bu_vls_free(&type); + (void)mged_attach(bu_vls_cstr(&wanted_type), argc, argv); + bu_vls_free(&wanted_type); } diff --git a/src/mged/axes.c b/src/mged/axes.c index 89b12b94e96..9944e2b9c76 100644 --- a/src/mged/axes.c +++ b/src/mged/axes.c @@ -1,7 +1,7 @@ /* A X E S . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/bool_rewrite.c b/src/mged/bool_rewrite.c index 2d3bea0e218..e1da73edd7f 100644 --- a/src/mged/bool_rewrite.c +++ b/src/mged/bool_rewrite.c @@ -1,7 +1,7 @@ /* B O O L _ R E W R I T E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/buttons.c b/src/mged/buttons.c index 3585576d7d0..f7e13d1151c 100644 --- a/src/mged/buttons.c +++ b/src/mged/buttons.c @@ -1,7 +1,7 @@ /* B U T T O N S . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/cad_boundp.c b/src/mged/cad_boundp.c index 0dddeece503..36a806fe72f 100644 --- a/src/mged/cad_boundp.c +++ b/src/mged/cad_boundp.c @@ -1,7 +1,7 @@ /* C A D _ B O U N D P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/cad_parea.c b/src/mged/cad_parea.c index b418648a613..a9092db4a59 100644 --- a/src/mged/cad_parea.c +++ b/src/mged/cad_parea.c @@ -1,7 +1,7 @@ /* C A D _ P A R E A . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/chgmodel.c b/src/mged/chgmodel.c index 525e7b0bbd4..c52187a7f5c 100644 --- a/src/mged/chgmodel.c +++ b/src/mged/chgmodel.c @@ -1,7 +1,7 @@ /* C H G M O D E L . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/chgtree.c b/src/mged/chgtree.c index bcf42858413..f7a52390562 100644 --- a/src/mged/chgtree.c +++ b/src/mged/chgtree.c @@ -1,7 +1,7 @@ /* C H G T R E E . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/chgview.c b/src/mged/chgview.c index fea5f4b80cb..c288e0fb24d 100644 --- a/src/mged/chgview.c +++ b/src/mged/chgview.c @@ -1,7 +1,7 @@ /* C H G V I E W . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/clone.c b/src/mged/clone.c index 8cc1174b80a..1fbe095a394 100644 --- a/src/mged/clone.c +++ b/src/mged/clone.c @@ -1,7 +1,7 @@ /* C L O N E . C * BRL-CAD * - * Copyright (c) 2005-2020 United States Government as represented by + * Copyright (c) 2005-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/cmd.c b/src/mged/cmd.c index c07adfc55f9..5301cc0c54c 100644 --- a/src/mged/cmd.c +++ b/src/mged/cmd.c @@ -1,7 +1,7 @@ /* C M D . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -1780,7 +1780,6 @@ cmd_search(ClientData UNUSED(clientData), Tcl_Interp *interpreter, int argc, con } - /** * "tol" displays current settings * "tol abs #" sets absolute tolerance. # > 0.0 diff --git a/src/mged/cmd.h b/src/mged/cmd.h index 7e7a6ff6d0a..df955822512 100644 --- a/src/mged/cmd.h +++ b/src/mged/cmd.h @@ -1,7 +1,7 @@ /* C M D . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -90,6 +90,7 @@ extern int cmd_setview(ClientData, Tcl_Interp *, int, const char *[]); extern int cmd_shaded_mode(ClientData, Tcl_Interp *, int, const char *[]); extern int cmd_size(ClientData, Tcl_Interp *, int, const char *[]); extern int cmd_ged_simulate_wrapper(ClientData, Tcl_Interp *, int, const char *[]); +extern int cmd_stat(ClientData, Tcl_Interp *, int, const char *[]); extern int cmd_stub(ClientData, Tcl_Interp *, int, const char *[]); extern int cmd_stuff_str(ClientData, Tcl_Interp *, int, const char *[]); extern int cmd_tk(ClientData, Tcl_Interp *, int, const char *[]); diff --git a/src/mged/color_scheme.c b/src/mged/color_scheme.c index ab5b13a7b5c..93ebb6f6bc9 100644 --- a/src/mged/color_scheme.c +++ b/src/mged/color_scheme.c @@ -1,7 +1,7 @@ /* C O L O R _ S C H E M E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/columns.c b/src/mged/columns.c index 5c79881e634..efa5bdf13e9 100644 --- a/src/mged/columns.c +++ b/src/mged/columns.c @@ -1,7 +1,7 @@ /* C O L U M N S . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/comb_bool.h b/src/mged/comb_bool.h index 6bab5d4bc44..79f95756747 100644 --- a/src/mged/comb_bool.h +++ b/src/mged/comb_bool.h @@ -1,7 +1,7 @@ /* C O M B _ B O O L . H * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/comb_bool_parse.y b/src/mged/comb_bool_parse.y index 228fc556b60..0e41bc76b96 100644 --- a/src/mged/comb_bool_parse.y +++ b/src/mged/comb_bool_parse.y @@ -1,7 +1,7 @@ /* C O M B _ B O O L _ P A R S E . Y * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/mged/comb_bool_scan.l b/src/mged/comb_bool_scan.l index 86682e658fa..4a17892bd10 100644 --- a/src/mged/comb_bool_scan.l +++ b/src/mged/comb_bool_scan.l @@ -1,7 +1,7 @@ /* C O M B _ B O O L _ S C A N . L * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/mged/dm-generic.c b/src/mged/dm-generic.c index cc422767f8a..a5dd01754a1 100644 --- a/src/mged/dm-generic.c +++ b/src/mged/dm-generic.c @@ -1,7 +1,7 @@ /* D M - G E N E R I C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/dodraw.c b/src/mged/dodraw.c index d28bf546630..89c7cc4c585 100644 --- a/src/mged/dodraw.c +++ b/src/mged/dodraw.c @@ -1,7 +1,7 @@ /* D O D R A W . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -74,7 +74,7 @@ static void mged_bound_solid(struct solid *sp) { point_t bmin, bmax; - int length = 0; + size_t length = 0; int cmd; VSET(bmin, INFINITY, INFINITY, INFINITY); VSET(bmax, -INFINITY, -INFINITY, -INFINITY); @@ -87,7 +87,7 @@ mged_bound_solid(struct solid *sp) bu_vls_free(&tmp_vls); } - sp->s_vlen = length; + sp->s_vlen = (int)length; sp->s_center[X] = (bmin[X] + bmax[X]) * 0.5; sp->s_center[Y] = (bmin[Y] + bmax[Y]) * 0.5; sp->s_center[Z] = (bmin[Z] + bmax[Z]) * 0.5; diff --git a/src/mged/doevent.c b/src/mged/doevent.c index 499f152b713..3db6878d25a 100644 --- a/src/mged/doevent.c +++ b/src/mged/doevent.c @@ -1,7 +1,7 @@ /* D O E V E N T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/dozoom.c b/src/mged/dozoom.c index a35f237d67a..ff5b3262fa3 100644 --- a/src/mged/dozoom.c +++ b/src/mged/dozoom.c @@ -1,7 +1,7 @@ /* D O Z O O M . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/edarb.c b/src/mged/edarb.c index b9774cfc1b7..c3dc3f043be 100644 --- a/src/mged/edarb.c +++ b/src/mged/edarb.c @@ -1,7 +1,7 @@ /* E D A R B . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/edars.c b/src/mged/edars.c index 3fe3a7f26b8..ed3171e8bed 100644 --- a/src/mged/edars.c +++ b/src/mged/edars.c @@ -1,7 +1,7 @@ /* E D A R S . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/edpipe.c b/src/mged/edpipe.c index 793479af756..990988ab423 100644 --- a/src/mged/edpipe.c +++ b/src/mged/edpipe.c @@ -1,7 +1,7 @@ /* E D P I P E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/edsol.c b/src/mged/edsol.c index 27cb07592a3..c1210188acf 100644 --- a/src/mged/edsol.c +++ b/src/mged/edsol.c @@ -1,7 +1,7 @@ /* E D S O L . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -4135,14 +4135,14 @@ sedit(void) RT_VOL_CK_MAGIC(vol); if (inpara == 3) { - if (stat(vol->file, &stat_buf)) { - Tcl_AppendResult(INTERP, "Cannot get status of file ", vol->file, (char *)NULL); + if (stat(vol->name, &stat_buf)) { + Tcl_AppendResult(INTERP, "Cannot get status of file ", vol->name, (char *)NULL); mged_print_result(TCL_ERROR); return; } need_size = es_para[0] * es_para[1] * es_para[2] * sizeof(unsigned char); if (stat_buf.st_size < need_size) { - Tcl_AppendResult(INTERP, "File (", vol->file, + Tcl_AppendResult(INTERP, "File (", vol->name, ") is too small, set file name first", (char *)NULL); mged_print_result(TCL_ERROR); return; @@ -4220,7 +4220,7 @@ sedit(void) RT_VOL_CK_MAGIC(vol); - fname = get_file_name(vol->file); + fname = get_file_name(vol->name); if (fname) { struct bu_vls message = BU_VLS_INIT_ZERO; @@ -4239,7 +4239,7 @@ sedit(void) mged_print_result(TCL_ERROR); return; } - bu_strlcpy(vol->file, fname, RT_VOL_NAME_LEN); + bu_strlcpy(vol->name, fname, RT_VOL_NAME_LEN); } break; diff --git a/src/mged/facedef.c b/src/mged/facedef.c index 3fe82006a59..bb7caac298c 100644 --- a/src/mged/facedef.c +++ b/src/mged/facedef.c @@ -1,7 +1,7 @@ /* F A C E D E F . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/fbserv.c b/src/mged/fbserv.c index bf7ae29b3bc..3f0a942923d 100644 --- a/src/mged/fbserv.c +++ b/src/mged/fbserv.c @@ -1,7 +1,7 @@ /* F B S E R V . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/grid.c b/src/mged/grid.c index 7d994c496ed..8d1de87c5b0 100644 --- a/src/mged/grid.c +++ b/src/mged/grid.c @@ -1,7 +1,7 @@ /* G R I D . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/history.c b/src/mged/history.c index 2ff7b094240..e3643d862c2 100644 --- a/src/mged/history.c +++ b/src/mged/history.c @@ -1,7 +1,7 @@ /* H I S T O R Y . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/htmlLibraryUi.h b/src/mged/htmlLibraryUi.h index ff5d0e1e397..39935d5db9e 100644 --- a/src/mged/htmlLibraryUi.h +++ b/src/mged/htmlLibraryUi.h @@ -1,7 +1,7 @@ /* H T M L L I B R A R Y U I . H * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/mater.c b/src/mged/mater.c index 6bd0a36a730..f1f4f9a4f5a 100644 --- a/src/mged/mater.c +++ b/src/mged/mater.c @@ -1,7 +1,7 @@ /* M A T E R . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/menu.c b/src/mged/menu.c index f6785841cde..57f0261b7ff 100644 --- a/src/mged/menu.c +++ b/src/mged/menu.c @@ -1,7 +1,7 @@ /* M E N U . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/menu.h b/src/mged/menu.h index 186a1055958..6dfa91f639f 100644 --- a/src/mged/menu.h +++ b/src/mged/menu.h @@ -1,7 +1,7 @@ /* M E N U . H * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/mged/mged.c b/src/mged/mged.c index 3cd1bc918e9..d7137a43dd1 100644 --- a/src/mged/mged.c +++ b/src/mged/mged.c @@ -1,7 +1,7 @@ /* M G E D . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -49,6 +49,10 @@ # include #endif +#ifdef HAVE_WINDOWS_H +# include /* For chdir */ +#endif + #include "bio.h" #include "bsocket.h" @@ -1112,6 +1116,15 @@ main(int argc, char *argv[]) } } + /* Change the working directory to BU_DIR_HOME if we are invoking + * without any arguments. */ + if (argc == 1) { + const char *homed = bu_dir(NULL, 0, BU_DIR_HOME, NULL); + if (homed && chdir(homed)) { + bu_exit(1, "Failed to change working directory to \"%s\" ", homed); + } + } + /* skip the args and invocation name */ argc -= bu_optind; argv += bu_optind; @@ -1474,9 +1487,9 @@ main(int argc, char *argv[]) status = Tcl_Eval(INTERP, bu_vls_addr(&vls)); } else { Tcl_DString temp; - const char *archer = bu_brlcad_root("share/tclscripts/archer/archer_launch.tcl", 1); const char *archer_trans; Tcl_DStringInit(&temp); + const char *archer = bu_dir(NULL, 0, BU_DIR_DATA, "tclscripts", "archer", "archer_launch.tcl", NULL); archer_trans = Tcl_TranslateFileName(INTERP, archer, &temp); tclcad_set_argv(INTERP, argc, (const char **)argv); status = Tcl_EvalFile(INTERP, archer_trans); @@ -2507,8 +2520,9 @@ mged_finish(int exitcode) Tcl_Release((ClientData)INTERP); ged_close(GEDP); - if (GEDP->ged_io_data) - BU_PUT(GEDP->ged_io_data, struct tclcad_io_data); + if (GEDP->ged_io_data) { + tclcad_destroy_io_data((struct tclcad_io_data *)GEDP->ged_io_data); + } if (GEDP) BU_PUT(GEDP, struct ged); @@ -2732,6 +2746,14 @@ f_opendb(ClientData clientData, Tcl_Interp *interpreter, int argc, const char *a } else { /* Opened existing database file */ + /* If dbi_version < 0, file isn't a valid .g file - don't proceed */ + if (DBIP->dbi_version < 0) { + bu_free(DBIP->dbi_filename, "free filename"); + DBIP = DBI_NULL; + Tcl_AppendResult(interpreter, "opendb: ", argv[1], " is not a valid database\n", (char *)NULL); + return TCL_ERROR; + } + /* Scan geometry database and build in-memory directory */ (void)db_dirbuild(DBIP); } @@ -2804,8 +2826,7 @@ f_opendb(ClientData clientData, Tcl_Interp *interpreter, int argc, const char *a GEDP->ged_delete_io_handler = &tclcad_delete_io_handler; GEDP->ged_interp = (void *)interpreter; GEDP->ged_interp_eval = &mged_db_search_callback; - struct tclcad_io_data *t_iod; - BU_GET(t_iod, struct tclcad_io_data); + struct tclcad_io_data *t_iod = tclcad_create_io_data(); t_iod->io_mode = TCL_READABLE; t_iod->interp = interpreter; GEDP->ged_io_data = t_iod; @@ -2870,7 +2891,7 @@ f_opendb(ClientData clientData, Tcl_Interp *interpreter, int argc, const char *a /* Perhaps do something special with the GUI */ bu_vls_trunc(&cmd, 0); - bu_vls_printf(&cmd, "opendb_callback %s", DBIP->dbi_filename); + bu_vls_printf(&cmd, "opendb_callback {%s}", DBIP->dbi_filename); (void)Tcl_Eval(interpreter, bu_vls_addr(&cmd)); bu_vls_strcpy(&cmd, "local2base"); @@ -2951,8 +2972,9 @@ f_closedb(ClientData clientData, Tcl_Interp *interpreter, int argc, const char * Tcl_Eval(interpreter, "rename " MGED_DB_NAME " \"\"; rename .inmem \"\""); /* close the geometry instance */ - if (GEDP->ged_io_data) - BU_PUT(GEDP->ged_io_data, struct tclcad_io_data); + if (GEDP->ged_io_data) { + tclcad_destroy_io_data((struct tclcad_io_data *)GEDP->ged_io_data); + } ged_close(GEDP); BU_PUT(GEDP, struct ged); @@ -2968,8 +2990,7 @@ f_closedb(ClientData clientData, Tcl_Interp *interpreter, int argc, const char * GEDP->ged_delete_io_handler = &tclcad_delete_io_handler; GEDP->ged_interp = (void *)interpreter; GEDP->ged_interp_eval = &mged_db_search_callback; - struct tclcad_io_data *t_iod; - BU_GET(t_iod, struct tclcad_io_data); + struct tclcad_io_data *t_iod = tclcad_create_io_data(); t_iod->io_mode = TCL_READABLE; t_iod->interp = interpreter; GEDP->ged_io_data = t_iod; diff --git a/src/mged/mged.h b/src/mged/mged.h index 47941696526..6317be235ca 100644 --- a/src/mged/mged.h +++ b/src/mged/mged.h @@ -1,7 +1,7 @@ /* M G E D . H * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/mged_dm.h b/src/mged/mged_dm.h index 43edaa61c39..e6dc553417e 100644 --- a/src/mged/mged_dm.h +++ b/src/mged/mged_dm.h @@ -1,7 +1,7 @@ /* M G E D _ D M . H * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/mover.c b/src/mged/mover.c index 2911d628cd2..6abd115a7c1 100644 --- a/src/mged/mover.c +++ b/src/mged/mover.c @@ -1,7 +1,7 @@ /* M O V E R . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/overlay.c b/src/mged/overlay.c index 25fa4a4d126..d72c88a73f9 100644 --- a/src/mged/overlay.c +++ b/src/mged/overlay.c @@ -1,7 +1,7 @@ /* O V E R L A Y . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/plot.c b/src/mged/plot.c index 86bf9e327fd..29b39d97ed2 100644 --- a/src/mged/plot.c +++ b/src/mged/plot.c @@ -1,7 +1,7 @@ /* P L O T . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -151,7 +151,7 @@ f_area(ClientData UNUSED(clientData), Tcl_Interp *interp, int argc, const char * } if ((pid1 = fork()) == 0) { - const char *cad_boundp = bu_brlcad_root("bin/cad_boundp", 1); + const char *cad_boundp = bu_dir(NULL, 0, BU_DIR_BIN, "cad_boundp", BU_DIR_EXT, NULL); dup2(fd1[0], fileno(stdin)); dup2(fd2[1], fileno(stdout)); @@ -167,7 +167,7 @@ f_area(ClientData UNUSED(clientData), Tcl_Interp *interp, int argc, const char * } if ((pid2 = fork()) == 0) { - const char *cad_parea = bu_brlcad_root("bin/cad_parea", 1); + const char *cad_parea = bu_dir(NULL, 0, BU_DIR_BIN, "cad_parea", BU_DIR_EXT, NULL); dup2(fd2[0], fileno(stdin)); dup2(fd3[1], fileno(stdout)); diff --git a/src/mged/predictor.c b/src/mged/predictor.c index 11ee2dbe986..202dcf6a629 100644 --- a/src/mged/predictor.c +++ b/src/mged/predictor.c @@ -1,7 +1,7 @@ /* P R E D I C T O R . C * BRL-CAD * - * Copyright (c) 1992-2020 United States Government as represented by + * Copyright (c) 1992-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/qray.h b/src/mged/qray.h index f8268c9668c..1404ce1acf8 100644 --- a/src/mged/qray.h +++ b/src/mged/qray.h @@ -1,7 +1,7 @@ /* Q R A Y . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/rect.c b/src/mged/rect.c index b2c26b89f9d..b82f57f2392 100644 --- a/src/mged/rect.c +++ b/src/mged/rect.c @@ -1,7 +1,7 @@ /* R E C T . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/red.c b/src/mged/red.c index 365d1ba3a61..e7b5574cd08 100644 --- a/src/mged/red.c +++ b/src/mged/red.c @@ -1,7 +1,7 @@ /* R E D . C * BRL-CAD * - * Copyright (c) 1992-2020 United States Government as represented by + * Copyright (c) 1992-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/rtif.c b/src/mged/rtif.c index 6e2b9153d5d..836192eecc4 100644 --- a/src/mged/rtif.c +++ b/src/mged/rtif.c @@ -1,7 +1,7 @@ /* R T I F . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/scroll.c b/src/mged/scroll.c index c24daf9927b..2dbafc7b27a 100644 --- a/src/mged/scroll.c +++ b/src/mged/scroll.c @@ -1,7 +1,7 @@ /* S C R O L L . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/scroll.h b/src/mged/scroll.h index aaf6c5b56ba..afd9dee243d 100644 --- a/src/mged/scroll.h +++ b/src/mged/scroll.h @@ -1,7 +1,7 @@ /* S C R O L L . H * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/sedit.h b/src/mged/sedit.h index 1028df7308d..512d926a652 100644 --- a/src/mged/sedit.h +++ b/src/mged/sedit.h @@ -1,7 +1,7 @@ /* S E D I T . H * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/set.c b/src/mged/set.c index aa8e8b463f9..d9d7b5b4c8f 100644 --- a/src/mged/set.c +++ b/src/mged/set.c @@ -1,7 +1,7 @@ /* S E T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -97,6 +97,7 @@ struct _mged_variables default_mged_variables = { #define MV_O(_m) bu_offsetof(struct _mged_variables, _m) #define LINE RT_MAXLINE struct bu_structparse mged_vparse[] = { + {"%d", 1, "rc", MV_O(mv_rc), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, {"%d", 1, "autosize", MV_O(mv_autosize), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, {"%d", 1, "rateknobs", MV_O(mv_rateknobs), BU_STRUCTPARSE_FUNC_NULL, NULL, NULL }, {"%d", 1, "sliders", MV_O(mv_sliders), set_scroll_private, NULL, NULL }, @@ -293,7 +294,7 @@ f_set(ClientData UNUSED(clientData), Tcl_Interp *interp, int argc, const char *a } mged_vls_struct_parse_old(&vls, "mged variables", mged_vparse, - (char *)&mged_variables, argc, argv); + (char *)mged_variables, argc, argv); Tcl_AppendResult(interp, bu_vls_addr(&vls), (char *)NULL); bu_vls_free(&vls); @@ -425,7 +426,7 @@ set_dlist(const struct bu_structparse *UNUSED(sdp), } /* found a dlp2 that is actively using dlp1's display lists */ - if (dlp2->dm_mged_variables->mv_dlist) { + if (dlp2 && dlp2->dm_mged_variables->mv_dlist) { dlp2 = m_dmp; break; } diff --git a/src/mged/setup.c b/src/mged/setup.c index 8b02de0d193..e93f93f3701 100644 --- a/src/mged/setup.c +++ b/src/mged/setup.c @@ -1,7 +1,7 @@ /* S E T U P . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -235,6 +235,7 @@ static struct cmdtab mged_cmdtab[] = { {"nmg_fix_normals", cmd_ged_plain_wrapper, ged_nmg_fix_normals}, {"nmg_simplify", cmd_ged_plain_wrapper, ged_nmg_simplify}, {"nmg", cmd_ged_plain_wrapper, ged_nmg}, + {"npush", cmd_ged_plain_wrapper, ged_npush}, {"o_rotate", f_be_o_rotate, GED_FUNC_PTR_NULL}, {"o_scale", f_be_o_scale, GED_FUNC_PTR_NULL}, {"oed", cmd_oed, GED_FUNC_PTR_NULL}, @@ -334,6 +335,7 @@ static struct cmdtab mged_cmdtab[] = { {"solids_on_ray", cmd_ged_plain_wrapper, ged_solids_on_ray}, {"srot", f_be_s_rotate, GED_FUNC_PTR_NULL}, {"sscale", f_be_s_scale, GED_FUNC_PTR_NULL}, + {"stat", cmd_ged_plain_wrapper, ged_stat}, {"status", f_status, GED_FUNC_PTR_NULL}, {"stuff_str", cmd_stuff_str, GED_FUNC_PTR_NULL}, {"summary", cmd_ged_plain_wrapper, ged_summary}, @@ -425,7 +427,7 @@ mged_setup(Tcl_Interp **interpreter) { struct bu_vls str = BU_VLS_INIT_ZERO; struct bu_vls tlog = BU_VLS_INIT_ZERO; - const char *name = bu_argv0_full_path(); + const char *name = bu_dir(NULL, 0, BU_DIR_BIN, bu_getprogname(), BU_DIR_EXT, NULL); /* locate our run-time binary (must be called before Tcl_CreateInterp()) */ if (name) { diff --git a/src/mged/share.c b/src/mged/share.c index e423acf55f9..135bf61ac1f 100644 --- a/src/mged/share.c +++ b/src/mged/share.c @@ -1,7 +1,7 @@ /* S H A R E . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/tedit.c b/src/mged/tedit.c index a0657f4d5c2..58615709fc2 100644 --- a/src/mged/tedit.c +++ b/src/mged/tedit.c @@ -1,7 +1,7 @@ /* T E D I T . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/titles.c b/src/mged/titles.c index 719dc386b3c..2fb2f7d7d73 100644 --- a/src/mged/titles.c +++ b/src/mged/titles.c @@ -1,7 +1,7 @@ /* T I T L E S . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/titles.h b/src/mged/titles.h index 6d75d1798af..0ede2ba9607 100644 --- a/src/mged/titles.h +++ b/src/mged/titles.h @@ -1,7 +1,7 @@ /* T I T L E S . H * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/track.c b/src/mged/track.c index 301a08b26a9..e448a439626 100644 --- a/src/mged/track.c +++ b/src/mged/track.c @@ -1,7 +1,7 @@ /* T R A C K . C * BRL-CAD * - * Copyright (c) 1994-2020 United States Government as represented by + * Copyright (c) 1994-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/update.c b/src/mged/update.c index a1bce16c3a7..2fe116c8650 100644 --- a/src/mged/update.c +++ b/src/mged/update.c @@ -1,7 +1,7 @@ /* U P D A T E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/usepen.c b/src/mged/usepen.c index 6ada718d518..7cb495656a6 100644 --- a/src/mged/usepen.c +++ b/src/mged/usepen.c @@ -1,7 +1,7 @@ /* U S E P E N . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/utility1.c b/src/mged/utility1.c index cff776d6abf..e7f06dd8ee2 100644 --- a/src/mged/utility1.c +++ b/src/mged/utility1.c @@ -1,7 +1,7 @@ /* U T I L I T Y 1 . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/vparse.c b/src/mged/vparse.c index fd745ec9664..18a0643af77 100644 --- a/src/mged/vparse.c +++ b/src/mged/vparse.c @@ -1,7 +1,7 @@ /* V P A R S E . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/mged/wdb_obj.c b/src/mged/wdb_obj.c index 3d9ec3cfcfd..af306448846 100644 --- a/src/mged/wdb_obj.c +++ b/src/mged/wdb_obj.c @@ -1,7 +1,7 @@ /* W D B _ O B J . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/nirt/bsphere.c b/src/nirt/bsphere.c index c4719accd51..ef0427e0a45 100644 --- a/src/nirt/bsphere.c +++ b/src/nirt/bsphere.c @@ -1,7 +1,7 @@ /* B S P H E R E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/command.c b/src/nirt/command.c index a73d1807c4c..ca6ec13460b 100644 --- a/src/nirt/command.c +++ b/src/nirt/command.c @@ -1,7 +1,7 @@ /* C O M M A N D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/conversion.c b/src/nirt/conversion.c index 1a13dcbb3a1..95cfc0b74e0 100644 --- a/src/nirt/conversion.c +++ b/src/nirt/conversion.c @@ -1,7 +1,7 @@ /* C O N V E R S I O N . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/if.c b/src/nirt/if.c index e5dd47da38d..1d68ac6d9aa 100644 --- a/src/nirt/if.c +++ b/src/nirt/if.c @@ -1,7 +1,7 @@ /* I F . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/interact.c b/src/nirt/interact.c index 0db8a5f7649..1ecd5d7748e 100644 --- a/src/nirt/interact.c +++ b/src/nirt/interact.c @@ -1,7 +1,7 @@ /* I N T E R A C T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/main.cpp b/src/nirt/main.cpp index 61ed61fe542..8745f135606 100644 --- a/src/nirt/main.cpp +++ b/src/nirt/main.cpp @@ -1,7 +1,7 @@ /* M A I N . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -151,7 +151,7 @@ list_formats(struct nirt_io_data *io_data, char ***names) struct bu_vls fl = BU_VLS_INIT_ZERO; /* get a nirt directory listing */ - bu_vls_printf(&nfp, "%s", bu_brlcad_root("share/nirt", 0)); + bu_vls_printf(&nfp, "%s", bu_dir(NULL, 0, BU_DIR_DATA, "nirt", NULL)); files = bu_file_list(bu_vls_addr(&nfp), suffix, &filearray); if (names) *names = filearray; @@ -233,7 +233,7 @@ enqueue_format(struct bu_vls *msg, size_t argc, const char **argv, void *set_var if (!file.is_open()) { struct bu_vls str = BU_VLS_INIT_ZERO; - bu_vls_printf(&str, "%s/%s.nrt", bu_brlcad_root("share/nirt", 0), argv[0]); + bu_vls_printf(&str, "%s/%s.nrt", bu_dir(NULL, 0, BU_DIR_DATA, "nirt", NULL), argv[0]); file.open(bu_vls_addr(&str)); bu_vls_free(&str); @@ -644,7 +644,7 @@ main(int argc, const char **argv) bu_vls_printf(&launch_cmd, "%s", argv[argc-1]); } - /* Let bu_brlcad_root and friends know where we are */ + /* Let libbu know where we are */ bu_setprogname(argv[0]); argv++; argc--; diff --git a/src/nirt/nirt.c b/src/nirt/nirt.c index 158480c87ea..307a3f0f431 100644 --- a/src/nirt/nirt.c +++ b/src/nirt/nirt.c @@ -1,7 +1,7 @@ /* N I R T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -144,7 +144,7 @@ listformats(char ***names) struct bu_vls vlsfileline = BU_VLS_INIT_ZERO; /* get a nirt directory listing */ - bu_vls_printf(&nirtfilespath, "%s", bu_brlcad_root("share/nirt", 0)); + bu_vls_printf(&nirtfilespath, "%s", bu_dir(NULL, 0, BU_DIR_DATA, "nirt", NULL)); files = bu_file_list(bu_vls_addr(&nirtfilespath), suffix, &filearray); if (names) *names = filearray; @@ -258,7 +258,7 @@ enqueue_script(struct bu_list *qp, int type, char *string) cfPtr = fopen(bu_vls_addr(&str), "rb"); if (cfPtr == NULL) { bu_vls_trunc(&str, 0); - bu_vls_printf(&str, "%s/%s.nrt", bu_brlcad_root("share/nirt", 0), string); + bu_vls_printf(&str, "%s/%s.nrt", bu_dir(NULL, 0, BU_DIR_DATA, "nirt", NULL), string); cfPtr = fopen(bu_vls_addr(&str), "rb"); if (cfPtr != NULL) { fclose(cfPtr); diff --git a/src/nirt/nirt.h b/src/nirt/nirt.h index d014016a526..c3d96dc44be 100644 --- a/src/nirt/nirt.h +++ b/src/nirt/nirt.h @@ -1,7 +1,7 @@ /* N I R T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/parse_fmt.c b/src/nirt/parse_fmt.c index b7f250c43e4..d9611926e83 100644 --- a/src/nirt/parse_fmt.c +++ b/src/nirt/parse_fmt.c @@ -1,7 +1,7 @@ /* P A R S E _ F M T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/read_mat.c b/src/nirt/read_mat.c index 008f3057e4c..a2765bc9cc8 100644 --- a/src/nirt/read_mat.c +++ b/src/nirt/read_mat.c @@ -1,7 +1,7 @@ /* R E A D _ M A T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/showshot.c b/src/nirt/showshot.c index a23a27b5b39..f03b25e94e2 100644 --- a/src/nirt/showshot.c +++ b/src/nirt/showshot.c @@ -1,7 +1,7 @@ /* S H O W S H O T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/str_manip.c b/src/nirt/str_manip.c index e2ee8f077a7..682c6d60bbb 100644 --- a/src/nirt/str_manip.c +++ b/src/nirt/str_manip.c @@ -1,7 +1,7 @@ /* S T R _ M A N I P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/nirt/usrfmt.h b/src/nirt/usrfmt.h index c40bc7886bd..c5d8e5fd3ff 100644 --- a/src/nirt/usrfmt.h +++ b/src/nirt/usrfmt.h @@ -1,7 +1,7 @@ /* U S R F M T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/other/CMakeLists.txt b/src/other/CMakeLists.txt index 585c7763e08..e5b91f0262a 100644 --- a/src/other/CMakeLists.txt +++ b/src/other/CMakeLists.txt @@ -119,6 +119,7 @@ AUTO. set(REGEX_PREFIX_STR "brl_") THIRD_PARTY(libregex REGEX regex regex_DESCRIPTION ALIASES ENABLE_REGEX) BRLCAD_INCLUDE_FILE(regex.h HAVE_REGEX_H) +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libregex/regex.h") SetTargetFolder(regex "Third Party Libraries") SetTargetFolder(regex-static "Third Party Libraries") if (NOT BRLCAD_REGEX_BUILD) @@ -143,6 +144,8 @@ first for a system version if BRLCAD_BUNDLED_LIBS is also AUTO. set(Z_PREFIX_STR "brl_") THIRD_PARTY(libz ZLIB zlib zlib_DESCRIPTION ALIASES ENABLE_ZLIB ENABLE_LIBZ) DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libz/CTestTestfile.cmake") +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libz/zconf.h") +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libz/zlib.h") SetTargetFolder(zlib "Third Party Libraries") SetTargetFolder(zlib-static "Third Party Libraries") SetTargetFolder(example "Third Party Executables") @@ -243,10 +246,16 @@ DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libpng/libpng.pc") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libpng/libpng-config") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libpng/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libpng/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}") +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libpng/libpng16-config") +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libpng/libpng16.pc") +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libpng/scripts/genchk.cmake") +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libpng/scripts/genout.cmake") +DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/libpng/scripts/gensrc.cmake") DISTCLEAN(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libpng.pc) DISTCLEAN(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libpng-config) DISTCLEAN(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libpng${CMAKE_SHARED_LIBRARY_SUFFIX}) DISTCLEAN(${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/libpng${CMAKE_STATIC_LIBRARY_SUFFIX}) + # Other PNG options to mark as advanced mark_as_advanced(PNGARG) mark_as_advanced(PNG_DEBUG) @@ -288,6 +297,7 @@ if(BRLCAD_UTAHRLE_BUILD) SetTargetFolder(utahrle "Third Party Libraries") SetTargetFolder(utahrle-static "Third Party Libraries") set(UTAHRLE_INCLUDE_DIR "${BRLCAD_SOURCE_DIR}/src/other/libutahrle/include" CACHE STRING "directory with rle.h header" FORCE) + set(UTAHRLE_INCLUDE_DIRS "${UTAH_INCLUDE_DIR}" CACHE STRING "directory with rle.h header" FORCE) set(BRLCAD_UTAHRLE_INCLUDE_DIR "${UTAHRLE_INCLUDE_DIR}" CACHE STRING "directory with rle.h header" FORCE) mark_as_advanced(UTAHRLE_INCLUDE_DIR) mark_as_advanced(BRLCAD_UTAHRLE_INCLUDE_DIR) @@ -332,6 +342,11 @@ endif(BRLCAD_ENABLE_AQUA) TCL_RESET_VARS() TK_RESET_VARS() +# The new FindTCL needs to be told to look for Tk +if(BRLCAD_ENABLE_TK) + set(TCL_ENABLE_TK ON) +endif(BRLCAD_ENABLE_TK) + set(tcl_DESCRIPTION " Option for enabling and disabling compilation of the Tcl library provided with BRL-CAD's source code. Default is AUTO, responsive to @@ -364,6 +379,18 @@ if(BRLCAD_TCL_BUILD) # Let Distclean know it will have work to do DISTCLEAN("${CMAKE_BINARY_DIR}/${LIB_DIR}/tcl8") DISTCLEAN("${CMAKE_BINARY_DIR}/${LIB_DIR}/tcl8.6") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tcl.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tclDecls.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tclOO.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tclOODecls.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tclPlatDecls.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tclTomMath.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tclTomMathDecls.h") + + # Files generated on the Mac + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/tcl/Tcl-Info.plist") + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/tcl/Tclsh-Info.plist") + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/tcl/include/tclConfig.h") # Group the targets in Visual Studio project files SetTargetFolder(tclsh "Third Party Executables") @@ -453,14 +480,19 @@ if(BRLCAD_TK_BUILD) DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/tk/doc/man3") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/tk/doc/mann") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/tk/library/Makefile") + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/tk/wish.exe.manifest") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/tk/pkgIndex.tcl") DISTCLEAN("${CMAKE_BINARY_DIR}/${LIB_DIR}/tk8.6") DISTCLEAN("${CMAKE_BINARY_DIR}/${LIB_DIR}/tk8.6.10") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tk.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tkDecls.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/tkPlatDecls.h") # Group the targets in Visual Studio project files SetTargetFolder(wish "Third Party Executables") SetTargetFolder(tk "Third Party Libraries") SetTargetFolder(tkstub "Third Party Libraries") + SetTargetFolder(Tk_pkgIndex "Third Party Libraries") elseif(BRLCAD_ENABLE_TK) @@ -531,7 +563,11 @@ if(BRLCAD_ITCL_BUILD) set(ITCL_LIBRARY itcl CACHE STRING "ITCL_LIBRARY" FORCE) set(ITCL_STUB_LIBRARY itclstub CACHE STRING "ITCL_STUB_LIBRARY" FORCE) set(ITCL_VERSION "${ITCL_VER}" CACHE STRING "ITCL_VERSION" FORCE) - DISTCLEAN("${CMAKE_BINARY_DIR}/lib/itcl${ITCL_VER}") + DISTCLEAN("${CMAKE_BINARY_DIR}/${LIB_DIR}/itcl${ITCL_VER}") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/itcl.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/itclDecls.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/itclInt.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/itclIntDecls.h") SetTargetFolder(itcl "Third Party Libraries") SetTargetFolder(itclstub "Third Party Libraries") SetTargetFolder(itcl_pkgIndex "Third Party Libraries") @@ -564,7 +600,9 @@ if(BRLCAD_ITK_BUILD) # does not handle C library settings. set(ITK_LIBRARY itk CACHE STRING "ITK_LIBRARY" FORCE) set(ITK_VERSION "3.4" CACHE STRING "ITK_VERSION" FORCE) - DISTCLEAN("${CMAKE_BINARY_DIR}/lib/itk${ITK_VER}") + DISTCLEAN("${CMAKE_BINARY_DIR}/${LIB_DIR}/itk${ITK_VER}") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/itk.h") + DISTCLEAN("${CMAKE_BINARY_DIR}/${INCLUDE_DIR}/itkDecls.h") else(BRLCAD_ITK_BUILD) # We have Itcl/Itk packages AND Itcl/Itk libraries - we're good. set(ITK_VERSION "${ITCL_VERSION}" CACHE STRING "ITK_VERSION" FORCE) @@ -575,6 +613,7 @@ else(BRLCAD_ITK_BUILD) endif(BRLCAD_ITK_BUILD) mark_as_advanced(ITK_VERSION) mark_as_advanced(ITK_LIBRARY) +CONFIG_H_APPEND(BRLCAD "#cmakedefine ITK_VERSION \"${ITK_VERSION}\"\n") set(iwidgets_ALIASES ENABLE_IWIDGETS) set(iwidgets_DESCRIPTION " @@ -591,6 +630,7 @@ THIRD_PARTY_TCL_PACKAGE(Iwidgets iwidgets "${TK_WISH}" "tcl;tk;itcl;itk" "BRLCAD if(BRLCAD_IWIDGETS_BUILD) set(IWIDGETS_VERSION "${IWIDGETS_VER}" CACHE STRING "IWIDGETS_VERSION" FORCE) DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/iwidgets/pkgIndex.tcl") + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/iwidgets/iwidgets.tcl") DISTCLEAN("${CMAKE_BINARY_DIR}/lib/Iwidgets${IWIDGETS_VER}") ELSE(BRLCAD_IWIDGETS_BUILD) set(IWIDGETS_VERSION "${IWIDGETS_PACKAGE_VERSION}" CACHE STRING "IWIDGETS_VERSION" FORCE) @@ -673,21 +713,6 @@ if(BRLCAD_OPENNURBS_BUILD) BRLCAD_MANAGE_FILES(openNURBS_headers ${INCLUDE_DIR}/openNURBS) endif(BRLCAD_OPENNURBS_BUILD) -# Screened Poisson Reconstruction Library -set(spsr_DESCRIPTION " -Option for enabling and disabling compilation of the Screened Poisson -Surface Reconstruction library provided with BRL-CAD's source code. -Default is AUTO, responsive to the toplevel BRLCAD_BUNDLED_LIBS option -and testing first for a system version if BRLCAD_BUNDLED_LIBS is also AUTO. -") -THIRD_PARTY(libspsr SPSR SPSR spsr_DESCRIPTION ALIASES - ENABLE_SPSR FLAGS NOSYS) -if(BRLCAD_SPSR_BUILD) - SetTargetFolder(PoissonRecon "Third Party Executables") - SetTargetFolder(SurfaceTrimmer "Third Party Executables") - SetTargetFolder(SPSR "Third Party Libraries") - SetTargetFolder(SPSR-static "Third Party Libraries") -endif(BRLCAD_SPSR_BUILD) if(BRLCAD_ENABLE_BINARY_ATTRIBUTES) #=== LIBBSON ================================================== @@ -736,8 +761,9 @@ set(IS_SUBBUILD ON) set(SC_BUILD_SCHEMAS "" CACHE STRING "Disable schema builds for BRL-CAD" FORCE) # Lots of "libraries" associated with stepcode - use "stepcode" as the # stand-in for the build target var. -THIRD_PARTY(stepcode SC stepcode sc_DESCRIPTION REQUIRED_VARS LEMON_EXECUTABLE - PERPLEX_EXECUTABLE BRLCAD_LEVEL3 ALIASES ${sc_ALIASES} RESET_VARS +THIRD_PARTY(stepcode SC stepcode sc_DESCRIPTION + REQUIRED_VARS LEMON_EXECUTABLE PERPLEX_EXECUTABLE BRLCAD_LEVEL3 BRLCAD_ENABLE_STEP + ALIASES ${sc_ALIASES} RESET_VARS EXP2CXX_EXEC EXP2CXX_EXECUTABLE_TARGET FLAGS NOSYS) if(BRLCAD_SC_BUILD) set(EXP2CXX_EXEC exp2cxx CACHE STRING "Express to C++ executable" FORCE) @@ -745,8 +771,11 @@ if(BRLCAD_SC_BUILD) mark_as_advanced(EXP2CXX_EXEC) mark_as_advanced(EXP2CXX_EXECUTABLE_TARGET) DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/stepcode/include/sc_cf.h.in") + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/stepcode/include/sc_cf.h") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/stepcode/include/sc_version_string.h") DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/stepcode/src/express/ExpParser_expparse/expparse.y") + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/stepcode/src/express/express_md5gen.cmake") + DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/stepcode/src/express/express_verify.cmake") endif(BRLCAD_SC_BUILD) set(IS_SUBBUILD ${IS_SUBBUILD_STASH}) mark_as_advanced(SC_BUILD_TYPE) @@ -796,25 +825,6 @@ if(BRLCAD_ENABLE_GECODE) endif(BRLCAD_GECODE_BUILD) endif(BRLCAD_ENABLE_GECODE) -# VDSlib - A View-Dependent Simplification and Rendering Library For -# the moment, this is marked NOSYS - it's possible that some Debian -# systems would have 0.9 of vdslib installed, but it's unmaintained -# and we're likely to be making changes. If our own copy of VDSlib -# ever spins back off into its own project, revisit the NOSYS -set(libvds_DESCRIPTION " -Option for enabling and disabling compilation of the libvds triangle -simplification library provided with BRL-CAD's source code. Default -is AUTO, responsive to the toplevel BRLCAD_BUNDLED_LIBS option and -testing first for a system version if BRLCAD_BUNDLED_LIBS is also -AUTO. -") -THIRD_PARTY(libvds VDS vds libvds_DESCRIPTION ALIASES ENABLE_VDS FLAGS NOSYS) -set(LIBVDS_INCLUDE_DIR "${BRLCAD_SOURCE_DIR}/src/other/libvds" CACHE STRING "Directory containing libvds headers." FORCE) -mark_as_advanced(LIBVDS_INCLUDE_DIR) -SetTargetFolder(vds "Third Party Libraries") -SetTargetFolder(vds-static "Third Party Libraries") - - # OpenSceneGraph Libraries set(openscenegraph_DESCRIPTION " Option for enabling and disabling compilation of the OpenSceneGraph @@ -861,22 +871,6 @@ else(BRLCAD_OSG_BUILD) endif (BRLCAD_ENABLE_OSG) endif(BRLCAD_OSG_BUILD) -# gdiam -set(gdiam_DESCRIPTION " -Option for enabling and disabling compilation of the libgdiam approximate -tight bounding box library provided with BRL-CAD's source code. Default -is AUTO, responsive to the toplevel BRLCAD_BUNDLED_LIBS option and -testing first for a system version if BRLCAD_BUNDLED_LIBS is also -AUTO. -") -THIRD_PARTY(libgdiam GDIAM gdiam gdiam_DESCRIPTION ALIASES ENABLE_GDIAM FLAGS NOSYS) -set(LIBGDIAM_INCLUDE_DIR "${BRLCAD_SOURCE_DIR}/src/other/libgdiam" CACHE STRING "Directory containing libgdiam headers." FORCE) -mark_as_advanced(LIBGDIAM_INCLUDE_DIR) -SetTargetFolder(gdiam "Third Party Libraries") -SetTargetFolder(gdiam-static "Third Party Libraries") -mark_as_advanced(GDIAM_LIBRARIES) -mark_as_advanced(GDIAM_INCLUDE_DIRS) - # Adaptagrams is not yet integrated as a src/other subbuild, but there # is code that will make use of it if it is available. If that code # becomes sufficiently useful, Adaptagrams will be integrated. In the @@ -894,12 +888,26 @@ mark_as_advanced(GDIAM_INCLUDE_DIRS) #endif(BRLCAD_LEVEL2) # Poly2Tri CDT library +# Note - this really should be embedded as part of libbg - it is simple, can be +# compiled as part of libbg with a few source adjustments, and there is an API +# for this feature exposed by libbg. The only reason it is still maintained as +# a separate library is the fast cdt feature of libbrep, which is using this +# API directly instead of going through libbg. Care will have to be taken when +# making that shift, and it may even be that we'll discover a need to adjust the +# libbg API in doing so to avoid performance issues. We should eventually +# address those issues though, if for no other reason than to discourage other +# direct uses of this API instead of bg_nested_polygon_triangulate. +# +# May also want to investigate https://github.com/MetricPanda/fast-poly2tri, but +# the removal of Steiner point insertion would probably need to be addressed... add_subdirectory(poly2tri) include("${CMAKE_CURRENT_SOURCE_DIR}/poly2tri.dist") CMAKEFILES_IN_DIR(poly2tri_ignore_files poly2tri) DISTCLEAN("${CMAKE_CURRENT_SOURCE_DIR}/poly2tri/Makefile") set(P2T_LIBRARY "poly2tri" CACHE STRING "Poly2Tri library" FORCE) +set(POLY2TRI_LIBRARIES "poly2tri" CACHE STRING "Poly2Tri library" FORCE) set(P2T_INCLUDE_DIR "${BRLCAD_SOURCE_DIR}/src/other/poly2tri" CACHE STRING "Directory containing poly2tri header" FORCE) +set(POLY2TRI_INCLUDE_DIRS "${BRLCAD_SOURCE_DIR}/src/other/poly2tri" CACHE STRING "Directory containing poly2tri header" FORCE) SetTargetFolder(poly2tri "Third Party Libraries") SetTargetFolder(poly2tri-static "Third Party Libraries") mark_as_advanced(P2T_LIBRARY) @@ -965,6 +973,9 @@ if(BRLCAD_GDAL_BUILD) DISTCLEAN("${CMAKE_CURRENT_BINARY_DIR}/gdal/cpl_config.h") SetTargetFolder(gdal "Third Party Libraries/GDAL") SetTargetFolder(gdal-static "Third Party Libraries/GDAL") +else(BRLCAD_GDAL_BUILD) + set(GDAL_INCLUDE_DIR "${GDAL_INCLUDE_DIRS}" CACHE STRING "libgdal includes" FORCE) + set(GDAL_LIBRARIES "${GDAL_LIBRARY}" CACHE STRING "libgdal" FORCE) endif(BRLCAD_GDAL_BUILD) mark_as_advanced(GDAL_CONFIG) mark_as_advanced(GDAL_INCLUDE_DIR) diff --git a/src/other/gct/CMakeLists.txt b/src/other/gct/CMakeLists.txt index 7082c88a704..e58c912992b 100644 --- a/src/other/gct/CMakeLists.txt +++ b/src/other/gct/CMakeLists.txt @@ -1,5 +1,5 @@ # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(GCT) @@ -27,9 +27,10 @@ if (NOT PROBE_PTHREAD_H) CHECK_INCLUDE_FILE(pthread.h PROBE_PTHREAD_H_CLOCKID_T) if (PROBE_PTHREAD_H_CLOCKID_T) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Dclockid_t=clock_t -pthread") - set(THREADS_PREFER_PTHREAD_FLAG TRUE) endif (PROBE_PTHREAD_H_CLOCKID_T) endif (NOT PROBE_PTHREAD_H) + +set(THREADS_PREFER_PTHREAD_FLAG TRUE) set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads) diff --git a/src/other/gdal/CMakeLists.txt b/src/other/gdal/CMakeLists.txt index 7d802531a1a..505b288bb74 100644 --- a/src/other/gdal/CMakeLists.txt +++ b/src/other/gdal/CMakeLists.txt @@ -35,7 +35,7 @@ # SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # Set CMake project name project(GDAL) @@ -234,11 +234,13 @@ if (NOT PROBE_PTHREAD_H) if (PROBE_PTHREAD_H_CLOCKID_T) set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Dclockid_t=clock_t -pthread") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Dclockid_t=clock_t -pthread") - set(THREADS_PREFER_PTHREAD_FLAG TRUE) endif (PROBE_PTHREAD_H_CLOCKID_T) endif (NOT PROBE_PTHREAD_H) + +set(THREADS_PREFER_PTHREAD_FLAG TRUE) set(CMAKE_THREAD_PREFER_PTHREAD TRUE) find_package(Threads) + if(CMAKE_USE_PTHREADS_INIT) set(CPL_MULTIPROC_PTHREAD 1) include(CheckSymbolExists) @@ -358,7 +360,7 @@ foreach(frmt ${OGR_FORMATS}) set_target_properties(ogr_frmt_${frmt} PROPERTIES FOLDER "Third Party Libraries/GDAL") endforeach(frmt ${OGR_FORMATS}) -set(gdal_libs ${PROJ4_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT}) +set(gdal_libs ${PROJ4_LIBRARIES} ${PNG_LIBRARIES} ${ZLIB_LIBRARIES} Threads::Threads) set(lib_list M DL ICONV) foreach(ll ${lib_list}) if(${ll}_LIBRARY) diff --git a/src/other/itcl3/CMakeLists.txt b/src/other/itcl3/CMakeLists.txt index 967b30278b3..440e2b7f0dd 100644 --- a/src/other/itcl3/CMakeLists.txt +++ b/src/other/itcl3/CMakeLists.txt @@ -37,7 +37,7 @@ # ******************************************************************* # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(ITCL) diff --git a/src/other/itk3/CMakeLists.txt b/src/other/itk3/CMakeLists.txt index 6a5fbb5c5a4..68416143824 100644 --- a/src/other/itk3/CMakeLists.txt +++ b/src/other/itk3/CMakeLists.txt @@ -37,7 +37,7 @@ # ******************************************************************* # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(ITK) diff --git a/src/other/iwidgets/CMakeLists.txt b/src/other/iwidgets/CMakeLists.txt index 436693957e5..b0c36abbcea 100644 --- a/src/other/iwidgets/CMakeLists.txt +++ b/src/other/iwidgets/CMakeLists.txt @@ -34,7 +34,7 @@ # ******************************************************************* # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) project(IWIDGETS) diff --git a/src/other/libbson/CMakeLists.txt b/src/other/libbson/CMakeLists.txt index d4ff1b90942..4e371a4db63 100644 --- a/src/other/libbson/CMakeLists.txt +++ b/src/other/libbson/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.12) project (libbson) diff --git a/src/other/libgdiam.dist b/src/other/libgdiam.dist deleted file mode 100644 index 33b89535f6d..00000000000 --- a/src/other/libgdiam.dist +++ /dev/null @@ -1,8 +0,0 @@ -set(libgdiam_ignore_files -CMakeLists.txt -LICENSE.MIT -README -gdiam.cpp -gdiam.hpp -gdiam_test.cpp -) diff --git a/src/other/libgdiam/CMakeLists.txt b/src/other/libgdiam/CMakeLists.txt deleted file mode 100644 index 47e905bcf0e..00000000000 --- a/src/other/libgdiam/CMakeLists.txt +++ /dev/null @@ -1,69 +0,0 @@ -# Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) - -# Set CMake project name -project(GDIAM) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) - -if (NOT BIN_DIR) - set(BIN_DIR bin) -endif (NOT BIN_DIR) - -if (NOT INCLUDE_DIR) - set(INCLUDE_DIR include) -endif (NOT INCLUDE_DIR) - -if (NOT DEFINED LIB_DIR) - set(LIB_DIR lib) -endif (NOT DEFINED LIB_DIR) - -add_definitions(-DGDIAM_QUIET) - -add_library(gdiam SHARED gdiam.cpp) -install(TARGETS gdiam - RUNTIME DESTINATION ${BIN_DIR} - LIBRARY DESTINATION ${LIB_DIR} - ARCHIVE DESTINATION ${LIB_DIR}) - -if (MSVC) - set_property(TARGET gdiam APPEND PROPERTY COMPILE_DEFINITIONS "GDIAM_DLL_EXPORTS") -endif (MSVC) - -if (BUILD_STATIC_LIBS) - add_library(gdiam-static STATIC gdiam.cpp) - if (CMAKE_CL_64) - set_target_properties(gdiam-static PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64") - endif (CMAKE_CL_64) - if (MSVC) - # msvc does not append 'lib' - do it here to have consistent name - set_target_properties(gdiam-static PROPERTIES PREFIX "lib") - else (MSVC) - set_target_properties(gdiam-static PROPERTIES OUTPUT_NAME "gdiam") - endif (MSVC) - install(TARGETS gdiam-static - RUNTIME DESTINATION ${BIN_DIR} - LIBRARY DESTINATION ${LIB_DIR} - ARCHIVE DESTINATION ${LIB_DIR}) -endif (BUILD_STATIC_LIBS) - -if (NOT SKIP_INSTALL_HEADERS) -install(FILES gdiam.hpp DESTINATION ${INCLUDE_DIR}) -endif (NOT SKIP_INSTALL_HEADERS) - -if (ENABLE_GDIAM_TESTING) - # Enable ctest - ENABLE_TESTING() - - add_executable(gdiam_test gdiam_test.cpp) - target_link_libraries(gdiam_test gdiam) - - add_test(unit_cube_test gdiam_test) -endif (ENABLE_GDIAM_TESTING) - -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 diff --git a/src/other/libgdiam/gdiam.hpp b/src/other/libgdiam/gdiam.hpp deleted file mode 100644 index e11ec556bd9..00000000000 --- a/src/other/libgdiam/gdiam.hpp +++ /dev/null @@ -1,728 +0,0 @@ -/*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=* - * gdiam.hpp - - * Implmeents an algorithm for computing a diameter, - * - * Copyright 2001 Sariel Har-Peled (ssaarriieell@cs.uiuc.edu) - * - * * the GNU General Public License as published by the Free - * Software Foundation; either version 2, or (at your option) - * any later version. - * - * or - * - * * the GNU Lesser General Public License as published by the Free - * Software Foundation; either version 2.1, or (at your option) - * any later version. - * - * - * Code is based on the paper: - * A Practical Approach for Computing the Diameter of a Point-Set. - * Sariel Har-Peled (http://www.uiuc.edu/~sariel) -\*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*/ - -#ifndef __GDIAM__H -#define __GDIAM__H - -/* for g++ to quell warnings */ -#if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)) -# pragma GCC diagnostic push /* start new diagnostic pragma */ -# pragma GCC diagnostic ignored "-Wfloat-equal" -#elif (defined(__clang__) && (__clang_major__ > 2 || (__clang_major__ == 2 && __clang_minor__ >= 8))) -# pragma clang diagnostic push /* start new diagnostic pragma */ -# pragma clang diagnostic ignored "-Wfloat-equal" -#endif - -#if defined(_WIN32) -# define COMPILER_DLLEXPORT __declspec(dllexport) -# define COMPILER_DLLIMPORT __declspec(dllimport) -#else -# define COMPILER_DLLEXPORT __attribute__ ((visibility ("default"))) -# define COMPILER_DLLIMPORT __attribute__ ((visibility ("default"))) -#endif - -#ifndef GDIAM_EXPORT -# if defined(GDIAM_DLL_EXPORTS) && defined(GDIAM_DLL_IMPORTS) -# error "Only GDIAM_DLL_EXPORTS or GDIAM_DLL_IMPORTS can be defined, not both." -# elif defined(GDIAM_DLL_EXPORTS) -# define GDIAM_EXPORT COMPILER_DLLEXPORT -# elif defined(GDIAM_DLL_IMPORTS) -# define GDIAM_EXPORT COMPILER_DLLIMPORT -# else -# define GDIAM_EXPORT -# endif -#endif - -#define GDIAM_FLOAT_ZERO(val) (((val) > -1.0e-37) && ((val) < 1.0e-37)) - -#define GDIAM_DIM 3 -typedef double gdiam_real; -typedef gdiam_real gdiam_point_t[ GDIAM_DIM ]; -typedef gdiam_real gdiam_point_2d_t[ 2 ]; -typedef gdiam_real * gdiam_point_2d; -typedef gdiam_real * gdiam_point; -typedef const gdiam_real * gdiam_point_cnt; - -#ifndef __MINMAX_DEFINED -#define __MINMAX_DEFINED - -#include -#include -#define min std::min -#define max std::max - -#endif /* MIN_MAX */ - -template -inline void gdiam_exchange( T & a, T & b ) -{ - T tmp = a; - - a = b; - b = tmp; -} - -inline gdiam_real pnt_length( const gdiam_point pnt ) -{ - return sqrt( pnt[ 0 ] * pnt[ 0 ] + pnt[ 1 ] * pnt[ 1 ] - + pnt[ 2 ] * pnt[ 2 ] ); -} - -inline void pnt_normalize( gdiam_point pnt ) -{ - gdiam_real len = pnt_length( pnt ); - if ( GDIAM_FLOAT_ZERO(len) ) - return; - - pnt[ 0 ] /= len; - pnt[ 1 ] /= len; - pnt[ 2 ] /= len; -} - -inline void pnt_copy( gdiam_point_t dest, - gdiam_point_t src ) - { - dest[ 0 ] = src[ 0 ]; - dest[ 1 ] = src[ 1 ]; - dest[ 2 ] = src[ 2 ]; - } -inline void pnt_zero( gdiam_point dst ) { - dst[ 0 ] = dst[ 1 ] = dst[ 2 ] = 0; -} -inline void pnt_dump( gdiam_point_cnt pnt ) { - printf( "(%g, %g, %g)\n", pnt[ 0 ], pnt[ 1 ], pnt[ 2 ] ); -} - - -inline gdiam_real pnt_dot_prod( gdiam_point_cnt a, - gdiam_point_cnt b ) -{ - return a[ 0 ] * b[ 0 ] - + a[ 1 ] * b[ 1 ] - + a[ 2 ] * b[ 2 ]; -} - -inline void pnt_cross_prod( const gdiam_point a, - const gdiam_point b, - const gdiam_point out ) -{ - out[ 0 ] = a[ 1 ] * b[ 2 ] - a[ 2 ] * b[ 1 ]; - out[ 1 ] = - ( a[ 0 ] * b[ 2 ] - a[ 2 ] * b[ 0 ] ); - out[ 2 ] = a[ 0 ] * b[ 1 ] - a[ 1 ] * b[ 0 ]; -} - - -inline gdiam_real pnt_distance_2d( gdiam_point_2d p, - gdiam_point_2d q ) -{ - gdiam_real valx = (p[ 0 ] - q[ 0 ]); - gdiam_real valy = (p[ 1 ] - q[ 1 ]); - - return sqrt( valx * valx + valy * valy ); -} - - -inline gdiam_real pnt_distance( gdiam_point p, gdiam_point q ) -{ - gdiam_real valx = (p[ 0 ] - q[ 0 ]); - gdiam_real valy = (p[ 1 ] - q[ 1 ]); - gdiam_real valz = (p[ 2 ] - q[ 2 ]); - - return sqrt( valx * valx + valy * valy + valz * valz ); -} - -inline gdiam_real pnt_distance( gdiam_point p, gdiam_point q, - gdiam_point_cnt dir ) -{ - gdiam_real valx = (p[ 0 ] - q[ 0 ]); - gdiam_real valy = (p[ 1 ] - q[ 1 ]); - gdiam_real valz = (p[ 2 ] - q[ 2 ]); - - gdiam_real len, proj_len; - - len = sqrt( valx * valx + valy * valy + valz * valz ); - - proj_len = dir[ 0 ] * valx + dir[ 1 ] * valy + dir[ 2 ] * valz; - - return sqrt( len * len - proj_len * proj_len ); -} - -inline void pnt_init( gdiam_point pnt, - gdiam_real x, - gdiam_real y, - gdiam_real z ) -{ - pnt[ 0 ] = x; - pnt[ 1 ] = y; - pnt[ 2 ] = z; -} - - -inline void pnt_init_normalize( gdiam_point pnt, - gdiam_real x, - gdiam_real y, - gdiam_real z ) -{ - pnt[ 0 ] = x; - pnt[ 1 ] = y; - pnt[ 2 ] = z; - - pnt_normalize( pnt ); -} - -inline bool pnt_isEqual( const gdiam_point p, - const gdiam_point q ) -{ - // Assuming here the GDIAM_DIM == 3 !!!! - return ( ( GDIAM_FLOAT_ZERO(p[0] - q[0]) ) - && ( GDIAM_FLOAT_ZERO(p[0] - q[0]) ) - && ( GDIAM_FLOAT_ZERO(p[0] - q[0]) ) ); -} - -inline void pnt_scale_and_add( gdiam_point dest, - gdiam_real coef, - gdiam_point_cnt vec ) { - dest[ 0 ] += coef * vec[ 0 ]; - dest[ 1 ] += coef * vec[ 1 ]; - dest[ 2 ] += coef * vec[ 2 ]; -} - -class GPointPair -{ -public: - gdiam_real distance; - gdiam_point p, q; - - GPointPair() : p(), q() { - distance = 0.0; - } - - void init( const gdiam_point _p, - const gdiam_point _q ) { - p = _p; - q = _q; - distance = pnt_distance( p, q ); - } - void init( const gdiam_point _p, - const gdiam_point _q, - const gdiam_point proj ) { - p = _p; - q = _q; - distance = pnt_distance( p, q, proj ); - } - - void init( const gdiam_point pnt ) { - distance = 0; - p = q = pnt; - } - - void update_diam_simple( const gdiam_point _p, const gdiam_point _q ) { - gdiam_real new_dist; - - new_dist = pnt_distance( _p, _q ); - if ( new_dist <= distance ) - return; - - //printf( "new_dist: %g\n", new_dist ); - distance = new_dist; - p = _p; - q = _q; - } - void update_diam_simple( const gdiam_point _p, const gdiam_point _q, - const gdiam_point dir ) { - gdiam_real new_dist; - - new_dist = pnt_distance( _p, _q, dir ); - if ( new_dist <= distance ) - return; - - distance = new_dist; - p = _p; - q = _q; - } - - void update_diam( const gdiam_point _p, const gdiam_point _q ) { - //update_diam_simple( p, _p ); - //update_diam_simple( p, _q ); - //update_diam_simple( q, _p ); - //update_diam_simple( q, _q ); - update_diam_simple( _p, _q ); - } - void update_diam( const gdiam_point _p, const gdiam_point _q, - const gdiam_point dir ) { - //update_diam_simple( p, _p ); - //update_diam_simple( p, _q ); - //update_diam_simple( q, _p ); - //update_diam_simple( q, _q ); - update_diam_simple( _p, _q, dir ); - } - - - void update_diam( GPointPair & pp ) { - //update_diam_simple( p, pp.p ); - //update_diam_simple( p, pp.q ); - //update_diam_simple( q, pp.p ); - //update_diam_simple( q, pp.q ); - update_diam_simple( pp.p, pp.q ); - } -}; - - - - -class GBBox { -private: - gdiam_real min_coords[ GDIAM_DIM ]; - gdiam_real max_coords[ GDIAM_DIM ]; - -public: - void init( const GBBox & a, - const GBBox & b ) { - for (int ind = 0; ind < GDIAM_DIM; ind++ ) { - min_coords[ ind ] = min( a.min_coords[ ind ], - b.min_coords[ ind ] ); - max_coords[ ind ] = max( a.max_coords[ ind ], - b.max_coords[ ind ] ); - } - } - void dump() const { - gdiam_real prod, diff; - - prod = 1.0; - printf( "__________________________________________\n" ); - for (int ind = 0; ind < GDIAM_DIM; ind++ ) { - printf( "%d: [%g...%g]\n", ind, min_coords[ ind ], - max_coords[ ind ] ); - diff = max_coords[ ind ] - min_coords[ ind ]; - prod *= diff; - } - printf( "volume = %g\n", prod ); - printf( "\\__________________________________________\n" ); - } - - void center( gdiam_point out ) const { - for (int ind = 0; ind < GDIAM_DIM; ind++ ) { - out[ ind ] = ( min_coords[ ind ] + max_coords[ ind ] ) / 2.0; - } - } - - gdiam_real volume() const { - gdiam_real prod, val; - - prod = 1; - for ( int ind = 0; ind < GDIAM_DIM; ind++ ) { - val = length_dim( ind ); - prod *= val; - } - - return prod; - } - void init() { - for (int ind = 0; ind < GDIAM_DIM; ind++ ) { - min_coords[ ind ] = 1e20; - max_coords[ ind ] = -1e20; - } - } - /* - void dump() const { - printf( "---(" ); - for (int ind = 0; ind < GDIAM_DIM; ind++ ) { - printf( "[%g, %g] ", - min_coords[ ind ], - max_coords[ ind ] ); - } - printf( ")\n" ); - }*/ - - const gdiam_real & min_coord( int coord ) const { - return min_coords[ coord ]; - } - const gdiam_real & max_coord( int coord ) const { - return max_coords[ coord ]; - } - - void bound( const gdiam_point pnt ) { - //cout << "bounding: " << pnt << "\n"; - for ( int ind = 0; ind < GDIAM_DIM; ind++ ) { - if ( pnt[ ind ] < min_coords[ ind ] ) - min_coords[ ind ] = pnt[ ind ]; - if ( pnt[ ind ] > max_coords[ ind ] ) - max_coords[ ind ] = pnt[ ind ]; - } - } - - gdiam_real length_dim( int dim ) const { - return max_coords[ dim ] - min_coords[ dim ]; - } - int getLongestDim() const { - int dim = 0; - gdiam_real len = length_dim( 0 ); - - for ( int ind = 1; ind < GDIAM_DIM; ind++ ) - if ( length_dim( ind ) > len ) { - len = length_dim( ind ); - dim = ind; - } - - return dim; - } - gdiam_real getLongestEdge() const { - return length_dim( getLongestDim() ); - } - - gdiam_real get_diam() const - { - gdiam_real sum, val; - - sum = 0; - for ( int ind = 0; ind < GDIAM_DIM; ind++ ) { - val = length_dim( ind ); - sum += val * val; - } - - return sqrt( sum ); - } - - // in the following we assume that the length of dir is ONE!!! - // Note that the following is an overestaime - the diameter of - // projection of a cube, is bounded by the length of projections - // of its edges.... - gdiam_real get_diam_proj( gdiam_point dir ) const - { - gdiam_real sum, coord; - gdiam_real prod, val; - - //printf( "get_diam_proj: " ); - sum = 0; - for ( int ind = 0; ind < GDIAM_DIM; ind++ ) { - coord = length_dim( ind ); - //printf( "coord[%d]: %g\n",ind, coord ); - prod = coord * dir [ ind ]; - val = coord * coord - prod * prod; - assert( val >= 0 ); - sum += sqrt( val ); - } - //printf( "sum: %g, %g\n", sum, get_diam() ); - - // sum = squard diameter of the bounding box - // prod = length of projection of the diameter of cube on the - // direction. - - return get_diam(); - } - - gdiam_real get_min_coord( int dim ) const { - return min_coords[ dim ]; - } - gdiam_real get_max_coord( int dim ) const { - return max_coords[ dim ]; - } -}; - - -// gdiam_bbox is the famous - arbitrary orieted bounding box -class gdiam_bbox -{ -private: - gdiam_point_t dir_1, dir_2, dir_3; - - gdiam_real low_1, high_1; - gdiam_real low_2, high_2; - gdiam_real low_3, high_3; - bool f_init; - -public: - gdiam_bbox() { - f_init = false; - } - - gdiam_real volume() const { - gdiam_real len1, len2, len3; - - len1 = ( high_1 - low_1 ); - len2 = ( high_2 - low_2 ); - len3 = ( high_3 - low_3 ); - - return len1 * len2 * len3; - } - - - void set_third_dim_longest() { - gdiam_point_t pnt_tmp; - - if ( ( high_1 - low_1 ) > ( high_3 - low_3 ) ) { - gdiam_exchange( high_1, high_3 ); - gdiam_exchange( low_1, low_3 ); - - memcpy( pnt_tmp, dir_1, sizeof( dir_1 ) ); - //pnt_tmp = dir_1; - memcpy( dir_1, dir_3, sizeof( dir_3) ); - //dir_1 = dir_3; - memcpy( dir_3, pnt_tmp, sizeof( dir_3 ) ); - //dir_3 = pnt_tmp; - } - if ( ( high_2 - low_2 ) > ( high_3 - low_3 ) ) { - gdiam_exchange( high_2, high_3 ); - gdiam_exchange( low_2, low_3 ); - - pnt_copy( pnt_tmp, dir_2 ); - pnt_copy( dir_2, dir_3 ); - pnt_copy( dir_3, pnt_tmp ); - } - } - - gdiam_point get_dir( int ind ) { - if ( ind == 0 ) - return dir_1; - if ( ind == 1 ) - return dir_2; - if ( ind == 2 ) - return dir_3; - - assert( false ); - - return NULL; - } - - void combine( gdiam_point out, - double a_coef, double b_coef, - double c_coef ) { - for ( int ind = 0; ind < GDIAM_DIM; ind++ ) - out[ ind ] = a_coef * dir_1[ ind ] - + b_coef * dir_2[ ind ] - + c_coef * dir_3[ ind ]; - } - - void get_vertex( double sel1, double sel2, double sel3, double *p_x, double *p_y, double *p_z ) { - gdiam_real coef1, coef2, coef3; - gdiam_point_t pnt; - - coef1 = low_1 + sel1 * ( high_1 - low_1 ); - coef2 = low_2 + sel2 * ( high_2 - low_2 ); - coef3 = low_3 + sel3 * ( high_3 - low_3 ); - - pnt_zero( pnt ); - pnt_scale_and_add( pnt, coef1, dir_1 ); - pnt_scale_and_add( pnt, coef2, dir_2 ); - pnt_scale_and_add( pnt, coef3, dir_3 ); - - (*p_x) = pnt[0]; - (*p_y) = pnt[1]; - (*p_z) = pnt[2]; - - } - - - void dump_vertex( double sel1, double sel2, double sel3 ) const { - gdiam_real coef1, coef2, coef3; - - //printf( "selection: (%g, %g, %g)\n", sel1, sel2, sel3 ); - coef1 = low_1 + sel1 * ( high_1 - low_1 ); - coef2 = low_2 + sel2 * ( high_2 - low_2 ); - coef3 = low_3 + sel3 * ( high_3 - low_3 ); - - //printf( "coeficients: (%g, %g, %g)\n", - // coef1, coef2, coef3 ); - - gdiam_point_t pnt; - pnt_zero( pnt ); - - //printf( "starting...\n" ); - //pnt_dump( pnt ); - pnt_scale_and_add( pnt, coef1, dir_1 ); - //pnt_dump( pnt ); - pnt_scale_and_add( pnt, coef2, dir_2 ); - //pnt_dump( pnt ); - pnt_scale_and_add( pnt, coef3, dir_3 ); - //pnt_dump( pnt ); - - pnt_dump( pnt ); - } - - void dump() const { - printf( "-----------------------------------------------\n" ); - dump_vertex( 0, 0, 0 ); - dump_vertex( 0, 0, 1 ); - dump_vertex( 0, 1, 0 ); - dump_vertex( 0, 1, 1 ); - dump_vertex( 1, 0, 0 ); - dump_vertex( 1, 0, 1 ); - dump_vertex( 1, 1, 0 ); - dump_vertex( 1, 1, 1 ); - printf( "volume: %g\n", volume() ); - printf( "Directions:\n" ); - pnt_dump( dir_1 ); - pnt_dump( dir_2 ); - pnt_dump( dir_3 ); - printf( "prods: %g, %g, %g\n", - pnt_dot_prod( dir_1, dir_2 ), - pnt_dot_prod( dir_1, dir_3 ), - pnt_dot_prod( dir_2, dir_3 ) ); - - printf( "--------------------------------------------------\n" ); - //printf( "range_1: %g... %g\n", low_1, high_1 ); - //printf( "range_2: %g... %g\n", low_2, high_2 ); - //printf( "range_3: %g... %g\n", low_3, high_3 ); - //printf( "prd: %g\n", pnt_dot_prod( dir_1, dir_2 ) ); - //printf( "prd: %g\n", pnt_dot_prod( dir_2, dir_3 ) ); - //printf( "prd: %g\n", pnt_dot_prod( dir_1, dir_3 ) ); - } - - - void init( const GBBox & bb ) { - pnt_init( dir_1, 1, 0, 0 ); - pnt_init( dir_2, 0, 1, 0 ); - pnt_init( dir_3, 0, 0, 1 ); - - low_1 = bb.min_coord( 0 ); - high_1 = bb.max_coord( 0 ); - - low_2 = bb.min_coord( 1 ); - high_2 = bb.max_coord( 1 ); - - low_3 = bb.min_coord( 2 ); - high_3 = bb.max_coord( 2 ); - f_init = true; - } - - void init( const gdiam_point _dir_1, - const gdiam_point _dir_2, - const gdiam_point _dir_3 ) { - memset( this, 0, sizeof( gdiam_bbox ) ); - - pnt_copy( dir_1, _dir_1 ); - pnt_copy( dir_2, _dir_2 ); - pnt_copy( dir_3, _dir_3 ); - pnt_normalize( dir_1 ); - pnt_normalize( dir_2 ); - pnt_normalize( dir_3 ); - - if ( ( ! (fabs( pnt_dot_prod( dir_1, dir_2 ) ) < 1e-6 ) ) - || ( ! (fabs( pnt_dot_prod( dir_1, dir_3 ) ) < 1e-6 ) ) - || ( ! (fabs( pnt_dot_prod( dir_2, dir_3 ) ) < 1e-6 ) ) ) { - printf( "should be all close to zero: %g, %g, %g\n", - pnt_dot_prod( dir_1, dir_2 ), - pnt_dot_prod( dir_1, dir_3 ), - pnt_dot_prod( dir_2, dir_3 ) ); - pnt_dump( _dir_1 ); - pnt_dump( _dir_2 ); - pnt_dump( _dir_3 ); - fflush( stdout ); - fflush( stderr ); - assert( fabs( pnt_dot_prod( dir_1, dir_2 ) ) < 1e-6 ); - assert( fabs( pnt_dot_prod( dir_1, dir_3 ) ) < 1e-6 ); - assert( fabs( pnt_dot_prod( dir_2, dir_3 ) ) < 1e-6 ); - } - - // The following reduce the error by slightly improve the - // orthoginality of the third vector. Doing to the second - // vector is not efficient... - pnt_scale_and_add( dir_3, -pnt_dot_prod( dir_3, dir_1 ), - dir_1 ); - pnt_scale_and_add( dir_3, -pnt_dot_prod( dir_3, dir_2 ), - dir_2 ); - pnt_normalize( dir_3 ); - //printf( "__should be all close to zero: %g, %g, %g\n", - // pnt_dot_prod( dir_1, dir_2 ), - // pnt_dot_prod( dir_1, dir_3 ), - // pnt_dot_prod( dir_2, dir_3 ) ); - } - - void bound( const gdiam_point pnt ) { - gdiam_real prod_1, prod_2, prod_3; - - prod_1 = pnt_dot_prod( dir_1, pnt ); - prod_2 = pnt_dot_prod( dir_2, pnt ); - prod_3 = pnt_dot_prod( dir_3, pnt ); - - if ( ! f_init ) { - f_init = true; - low_1 = high_1 = prod_1; - low_2 = high_2 = prod_2; - low_3 = high_3 = prod_3; - return; - } - if ( prod_1 < low_1 ) - low_1 = prod_1; - if ( prod_2 < low_2 ) - low_2 = prod_2; - if ( prod_3 < low_3 ) - low_3 = prod_3; - - if ( prod_1 > high_1 ) - high_1 = prod_1; - if ( prod_2 > high_2 ) - high_2 = prod_2; - if ( prod_3 > high_3 ) - high_3 = prod_3; - } - - // compute the coordinates as if the bounding box is unit cube of - // the grid - void get_normalized_coordinates( gdiam_point in, - gdiam_point out ) { - out[ 0 ] = ( pnt_dot_prod( dir_1, in ) - low_1 ) / ( high_1 - low_1 ); - out[ 1 ] = ( pnt_dot_prod( dir_2, in ) - low_2 ) / ( high_2 - low_2 ); - out[ 2 ] = ( pnt_dot_prod( dir_3, in ) - low_3 ) / ( high_3 - low_3 ); - } - -}; - -GDIAM_EXPORT GPointPair gdiam_approx_diam( gdiam_point * start, int size, - gdiam_real eps ); -GDIAM_EXPORT GPointPair gdiam_approx_diam( gdiam_point * start, int size, - gdiam_real eps ); -GDIAM_EXPORT gdiam_real gdiam_approx_diam( gdiam_real * start, int size, - gdiam_real eps ); -GDIAM_EXPORT GPointPair gdiam_approx_diam_pair( gdiam_real * start, int size, - gdiam_real eps ); -GDIAM_EXPORT GPointPair gdiam_approx_diam_pair_UDM( gdiam_real * start, int size, - gdiam_real eps ); -GDIAM_EXPORT gdiam_bbox gdiam_approx_const_mvbb( gdiam_point * start, int size, - gdiam_real eps, - GBBox * p_ap_bbox ); -GDIAM_EXPORT gdiam_point * gdiam_convert( gdiam_real * start, int size ); -GDIAM_EXPORT gdiam_bbox gdiam_approx_mvbb( gdiam_point * start, int size, - gdiam_real eps ) ; -GDIAM_EXPORT gdiam_bbox gdiam_approx_mvbb_grid( gdiam_point * start, int size, - int grid_size ); -GDIAM_EXPORT gdiam_bbox gdiam_approx_mvbb_grid_sample( gdiam_point * start, int size, - int grid_size, int sample_size ); -GDIAM_EXPORT gdiam_bbox gdiam_approx_mvbb_grid_sample( gdiam_real * start, int size, - int grid_size, int sample_size ); - - -GDIAM_EXPORT void gdiam_generate_orthonormal_base( gdiam_point in, - gdiam_point out1, - gdiam_point out2 ); - -#if (defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6)) && !defined(__clang__)) -# pragma GCC diagnostic pop /* end ignoring warnings */ -#elif (defined(__clang__) && (__clang_major__ > 2 || (__clang_major__ == 2 && __clang_minor__ >= 8))) -# pragma clang diagnostic pop /* end ignoring warnings */ -#endif - -#else /* __GDIAM__H */ -#error Header file gdiam.h included twice -#endif /* __GDIAM__H */ - -/* gdiam.h - End of File ------------------------------------------*/ diff --git a/src/other/libnetpbm/CMakeLists.txt b/src/other/libnetpbm/CMakeLists.txt index ee5df2da925..472ea3292d5 100644 --- a/src/other/libnetpbm/CMakeLists.txt +++ b/src/other/libnetpbm/CMakeLists.txt @@ -34,7 +34,7 @@ # ******************************************************************* # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(NETPBM) diff --git a/src/other/libpng/CMakeLists.txt b/src/other/libpng/CMakeLists.txt index c90f81adf86..c173b014253 100644 --- a/src/other/libpng/CMakeLists.txt +++ b/src/other/libpng/CMakeLists.txt @@ -18,7 +18,7 @@ # For conditions of distribution and use, see the disclaimer # and license in png.h -cmake_minimum_required(VERSION 3.1) +cmake_minimum_required(VERSION 3.12) cmake_policy(VERSION 3.1) # Use new variable expansion policy. diff --git a/src/other/libregex/CMakeLists.txt b/src/other/libregex/CMakeLists.txt index 6a230bc70fc..fce256b25bd 100644 --- a/src/other/libregex/CMakeLists.txt +++ b/src/other/libregex/CMakeLists.txt @@ -37,7 +37,7 @@ ### project(REGEX) -cmake_minimum_required(VERSION 3.0.2) +cmake_minimum_required(VERSION 3.12) include_directories( ${CMAKE_CURRENT_BINARY_DIR} diff --git a/src/other/libspsr.dist b/src/other/libspsr.dist deleted file mode 100644 index fc0831409f8..00000000000 --- a/src/other/libspsr.dist +++ /dev/null @@ -1,50 +0,0 @@ -set(libspsr_ignore_files -CMakeLists.txt -LICENSE -Src/Allocator.h -Src/Array.h -Src/Array.inl -Src/BSplineData.h -Src/BSplineData.inl -Src/BinaryNode.h -Src/CmdLineParser.cpp -Src/CmdLineParser.h -Src/CmdLineParser.inl -Src/Factor.cpp -Src/Factor.h -Src/FunctionData.h -Src/FunctionData.inl -Src/Geometry.cpp -Src/Geometry.h -Src/Geometry.inl -Src/Hash.h -Src/MAT.h -Src/MAT.inl -Src/MarchingCubes.cpp -Src/MarchingCubes.h -Src/MemoryUsage.h -Src/MultiGridOctreeData.IsoSurface.inl -Src/MultiGridOctreeData.SortedTreeNodes.inl -Src/MultiGridOctreeData.h -Src/MultiGridOctreeData.inl -Src/MyTime.h -Src/Octree.h -Src/Octree.inl -Src/PPolynomial.h -Src/PPolynomial.inl -Src/Ply.h -Src/PlyFile.cpp -Src/PointStream.h -Src/PointStream.inl -Src/PoissonRecon.cpp -Src/Polynomial.h -Src/Polynomial.inl -Src/SPSR.cpp -Src/SPSR.h -Src/SparseMatrix.h -Src/SparseMatrix.inl -Src/SurfaceTrimmer.cpp -Src/Vector.h -Src/Vector.inl -Src/cvertex.h -) diff --git a/src/other/libspsr/CMakeLists.txt b/src/other/libspsr/CMakeLists.txt deleted file mode 100644 index 928021d8139..00000000000 --- a/src/other/libspsr/CMakeLists.txt +++ /dev/null @@ -1,130 +0,0 @@ -# Copyright (c) 2010-2016 United States Government as represented by -# the U.S. Army Research Laboratory. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above -# copyright notice, this list of conditions and the following -# disclaimer in the documentation and/or other materials provided -# with the distribution. -# -# 3. The name of the author may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS -# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY -# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL -# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE -# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# ******************************************************************* -# *** Screened Poisson CMakeLists.txt *** -# ******************************************************************* - -# Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) - -# set CMake project name -# (Screened Poisson Surface Reconstruction - SPSR) -project(SPSR) - -if (NOT DEFINED INCLUDE_DIR) - set(INCLUDE_DIR include) -endif (NOT DEFINED INCLUDE_DIR) - -if (NOT DEFINED BUILD_SHARED_LIBS) - set(BUILD_SHARED_LIBS ON) -endif (NOT DEFINED BUILD_SHARED_LIBS) - -if (NOT DEFINED BUILD_STATIC_LIBS) - set(BUILD_STATIC_LIBS OFF) -endif (NOT DEFINED BUILD_STATIC_LIBS) - -if(SPSR_ENABLE_OPENMP) - find_package(OpenMP) - set(CMAKE_C_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_C_FLAGS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") -endif(SPSR_ENABLE_OPENMP) - -set(libSPSR_srcs - Src/Factor.cpp - Src/Geometry.cpp - Src/MarchingCubes.cpp - Src/SPSR.cpp - ) - -set(SPSR_HDRS - Src/SPSR.h - Src/cvertex.h - ) -if (NOT SKIP_INSTALL_HEADERS) - install (FILES ${SPSR_HDRS} DESTINATION ${INCLUDE_DIR}/SPSR) -endif (NOT SKIP_INSTALL_HEADERS) - -if(MSVC) - add_definitions("-DSPSR_DLL_EXPORTS") -endif(MSVC) - -include(CheckIncludeFiles) -check_include_files("sys/timeb.h" HAVE_SYS_TIMEB) -if (HAVE_SYS_TIMEB) - add_definitions(-DHAVE_SYS_TIMEB=1) -endif (HAVE_SYS_TIMEB) - -IF(BUILD_SHARED_LIBS) - add_library(SPSR SHARED ${libSPSR_srcs}) - install(TARGETS SPSR - RUNTIME DESTINATION ${BIN_DIR} - LIBRARY DESTINATION ${LIB_DIR} - ARCHIVE DESTINATION ${LIB_DIR}) -ENDIF(BUILD_SHARED_LIBS) - -IF(BUILD_STATIC_LIBS) - add_library(SPSR-static STATIC ${libSPSR_srcs}) - install(TARGETS SPSR-static - RUNTIME DESTINATION ${BIN_DIR} - LIBRARY DESTINATION ${LIB_DIR} - ARCHIVE DESTINATION ${LIB_DIR}) -ENDIF(BUILD_STATIC_LIBS) - -if(NOT DEFINED SPSR_ENABLE_EXAMPLES) - set(SPSR_ENABLE_EXAMPLES OFF) -endif(NOT DEFINED SPSR_ENABLE_EXAMPLES) - -if(SPSR_ENABLE_EXAMPLES) - - add_executable(PoissonRecon - Src/CmdLineParser.cpp Src/PlyFile.cpp Src/PoissonRecon.cpp - Src/Factor.cpp Src/Geometry.cpp Src/MarchingCubes.cpp - ) - - add_executable(SurfaceTrimmer - Src/CmdLineParser.cpp Src/PlyFile.cpp Src/SurfaceTrimmer.cpp - Src/Factor.cpp Src/Geometry.cpp Src/MarchingCubes.cpp - ) - -endif(SPSR_ENABLE_EXAMPLES) - -#CFLAGS_DEBUG = -DDEBUG -g3 - -#CFLAGS_RELEASE = -O3 -DRELEASE -funroll-loops -ffast-math - -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 - diff --git a/src/other/libspsr/Src/CmdLineParser.cpp b/src/other/libspsr/Src/CmdLineParser.cpp deleted file mode 100644 index 59f128b3251..00000000000 --- a/src/other/libspsr/Src/CmdLineParser.cpp +++ /dev/null @@ -1,279 +0,0 @@ -/* -Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. Redistributions in binary form must reproduce -the above copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the distribution. - -Neither the name of the Johns Hopkins University nor the names of its contributors -may be used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. -*/ - - -#include -#include -#include -#include -#include "CmdLineParser.h" - - -#ifdef WIN32 -int strcasecmp(char* c1,char* c2){return _stricmp(c1,c2);} -#endif - -cmdLineReadable::cmdLineReadable(const char* name) -{ - set=false; - this->name=new char[strlen(name)+1]; - strcpy(this->name,name); -} -cmdLineReadable::~cmdLineReadable(void) -{ - if(name) delete[] name; - name=NULL; -} -int cmdLineReadable::read(char**,int){ - set=true; - return 0; -} -void cmdLineReadable::writeValue(char* str) -{ - str[0] = 0; -} - -//////////////// -// cmdLineInt // -//////////////// -cmdLineInt::cmdLineInt(const char* name) : cmdLineReadable(name) {value=0;} -cmdLineInt::cmdLineInt(const char* name,const int& v) : cmdLineReadable(name) {value=v;} -int cmdLineInt::read(char** argv,int argc){ - if(argc>0){ - value=atoi(argv[0]); - set=true; - return 1; - } - else{return 0;} -} -void cmdLineInt::writeValue(char* str) -{ - sprintf(str,"%d",value); -} - -////////////////// -// cmdLineFloat // -////////////////// -cmdLineFloat::cmdLineFloat(const char* name) : cmdLineReadable(name) {value=0;} -cmdLineFloat::cmdLineFloat(const char* name, const float& v) : cmdLineReadable(name) {value=v;} -int cmdLineFloat::read(char** argv,int argc){ - if(argc>0){ - value=(float)atof(argv[0]); - set=true; - return 1; - } - else{return 0;} -} -void cmdLineFloat::writeValue(char* str) -{ - sprintf(str,"%f",value); -} - -/////////////////// -// cmdLineString // -/////////////////// -cmdLineString::cmdLineString(const char* name) : cmdLineReadable(name) {value=NULL;} -cmdLineString::~cmdLineString(void) -{ - if(value) delete[] value; - value=NULL; -} -int cmdLineString::read(char** argv,int argc){ - if(argc>0) - { - value=new char[strlen(argv[0])+1]; - strcpy(value,argv[0]); - set=true; - return 1; - } - else{return 0;} -} -void cmdLineString::writeValue(char* str) -{ - sprintf(str,"%s",value); -} - -//////////////////// -// cmdLineStrings // -//////////////////// -cmdLineStrings::cmdLineStrings(const char* name,int Dim) : cmdLineReadable(name) -{ - this->Dim=Dim; - values=new char*[Dim]; - for(int i=0;i=Dim) - { - for(int i=0;i 0) - { - if (argv[0][0] == '-' && argv[0][1]=='-') - { - for(i=0;iname)) - { - argv++, argc--; - j=readable[i]->read(argv,argc); - argv+=j,argc-=j; - break; - } - } - if(i==num){ - if(dumpError) - { - fprintf(stderr, "invalid option: %s\n",*argv); - fprintf(stderr, "possible options are:\n"); - for(i=0;iname); - } - argv++, argc--; - } - } - else - { - if(dumpError) - { - fprintf(stderr, "invalid option: %s\n", *argv); - fprintf(stderr, " options must start with a \'--\'\n"); - } - argv++, argc--; - } - } -} -char** ReadWords(const char* fileName,int& cnt) -{ - char** names; - char temp[500]; - FILE* fp; - - fp=fopen(fileName,"r"); - if(!fp){return NULL;} - cnt=0; - while(fscanf(fp," %s ",temp)==1){cnt++;} - fclose(fp); - - names=new char*[cnt]; - if(!names){return NULL;} - - fp=fopen(fileName,"r"); - if(!fp){ - delete[] names; - cnt=0; - return NULL; - } - cnt=0; - while(fscanf(fp," %s ",temp)==1){ - names[cnt]=new char[strlen(temp)+1]; - if(!names){ - for(int j=0;j -#include - - -#ifdef WIN32 -int strcasecmp(char* c1,char* c2); -#endif - -class cmdLineReadable{ -public: - bool set; - char* name; - cmdLineReadable(const char* name); - virtual ~cmdLineReadable(void); - virtual int read(char** argv,int argc); - virtual void writeValue(char* str); -}; - -class cmdLineInt : public cmdLineReadable { -public: - int value; - cmdLineInt(const char* name); - cmdLineInt(const char* name,const int& v); - int read(char** argv,int argc); - void writeValue(char* str); -}; -template -class cmdLineIntArray : public cmdLineReadable { -public: - int values[Dim]; - cmdLineIntArray(const char* name); - cmdLineIntArray(const char* name,const int v[Dim]); - int read(char** argv,int argc); - void writeValue(char* str); -}; - -class cmdLineFloat : public cmdLineReadable { -public: - float value; - cmdLineFloat(const char* name); - cmdLineFloat(const char* name,const float& f); - int read(char** argv,int argc); - void writeValue(char* str); -}; -template -class cmdLineFloatArray : public cmdLineReadable { -public: - float values[Dim]; - cmdLineFloatArray(const char* name); - cmdLineFloatArray(const char* name,const float f[Dim]); - int read(char** argv,int argc); - void writeValue(char* str); -}; -class cmdLineString : public cmdLineReadable { -public: - char* value; - cmdLineString(const char* name); - ~cmdLineString(); - int read(char** argv,int argc); - void writeValue(char* str); -}; -class cmdLineStrings : public cmdLineReadable { - int Dim; -public: - char** values; - cmdLineStrings(const char* name,int Dim); - ~cmdLineStrings(void); - int read(char** argv,int argc); - void writeValue(char* str); -}; -template -class cmdLineStringArray : public cmdLineReadable { -public: - char* values[Dim]; - cmdLineStringArray(const char* name); - ~cmdLineStringArray(); - int read(char** argv,int argc); - void writeValue(char* str); -}; - -// This reads the arguments in argc, matches them against "names" and sets -// the values of "r" appropriately. Parameters start with "--" -void cmdLineParse(int argc, char **argv,int num,cmdLineReadable** r,int dumpError=1); - -char* GetFileExtension(char* fileName); -char* GetLocalFileName(char* fileName); -char** ReadWords(const char* fileName,int& cnt); - -#include "CmdLineParser.inl" -#endif // CMD_LINE_PARSER_INCLUDED diff --git a/src/other/libspsr/Src/CmdLineParser.inl b/src/other/libspsr/Src/CmdLineParser.inl deleted file mode 100644 index 7535fdd1e3a..00000000000 --- a/src/other/libspsr/Src/CmdLineParser.inl +++ /dev/null @@ -1,141 +0,0 @@ -/* -*- C++ -*- -Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. Redistributions in binary form must reproduce -the above copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the distribution. - -Neither the name of the Johns Hopkins University nor the names of its contributors -may be used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. -*/ - -///////////////////// -// cmdLineIntArray // -///////////////////// -template -cmdLineIntArray::cmdLineIntArray(const char* name) : cmdLineReadable(name) -{ - for(int i=0;i -cmdLineIntArray::cmdLineIntArray(const char* name,const int v[Dim]) : cmdLineReadable(name) -{ - for(int i=0;i -int cmdLineIntArray::read(char** argv,int argc) -{ - if(argc>=Dim) - { - for(int i=0;i -void cmdLineIntArray::writeValue(char* str) -{ - char* temp=str; - for(int i=0;i -cmdLineFloatArray::cmdLineFloatArray(const char* name) : cmdLineReadable(name) -{ - for(int i=0;i -cmdLineFloatArray::cmdLineFloatArray(const char* name,const float f[Dim]) : cmdLineReadable(name) -{ - for(int i=0;i -int cmdLineFloatArray::read(char** argv,int argc) -{ - if(argc>=Dim) - { - for(int i=0;i -void cmdLineFloatArray::writeValue(char* str) -{ - char* temp=str; - for(int i=0;i -cmdLineStringArray::cmdLineStringArray(const char* name) : cmdLineReadable(name) -{ - for(int i=0;i -cmdLineStringArray::~cmdLineStringArray(void) -{ - for(int i=0;i -int cmdLineStringArray::read(char** argv,int argc) -{ - if(argc>=Dim) - { - for(int i=0;i -void cmdLineStringArray::writeValue(char* str) -{ - char* temp=str; - for(int i=0;i -#include -#ifdef _WIN32 -#include -#endif // _WIN32 - -/////////////////// -// CoredMeshData // -/////////////////// - -TriangulationEdge::TriangulationEdge(void){pIndex[0]=pIndex[1]=tIndex[0]=tIndex[1]=-1;} -TriangulationTriangle::TriangulationTriangle(void){eIndex[0]=eIndex[1]=eIndex[2]=-1;} - -/////////////////////////// -// BufferedReadWriteFile // -/////////////////////////// -BufferedReadWriteFile::BufferedReadWriteFile( char* fileName , int bufferSize ) -{ - _bufferIndex = 0; - _bufferSize = bufferSize; - if( fileName ) strcpy( _fileName , fileName ) , tempFile = false , _fp = fopen( _fileName , "w+b" ); - else - { - strcpy( _fileName , "PR_XXXXXX" ); -#ifdef _WIN32 - _mktemp( _fileName ); - _fp = fopen( _fileName , "w+b" ); -#else // !_WIN32 - _fp = fdopen( mkstemp( _fileName ) , "w+b" ); -#endif // _WIN32 - tempFile = true; - } - if( !_fp ) fprintf( stderr , "[ERROR] Failed to open file: %s\n" , _fileName ) , exit( 0 ); - _buffer = (char*) malloc( _bufferSize ); -} -BufferedReadWriteFile::~BufferedReadWriteFile( void ) -{ - free( _buffer ); - fclose( _fp ); - if( tempFile ) remove( _fileName ); -} -void BufferedReadWriteFile::reset( void ) -{ - if( _bufferIndex ) fwrite( _buffer , 1 , _bufferIndex , _fp ); - _bufferIndex = 0; - fseek( _fp , 0 , SEEK_SET ); - _bufferIndex = 0; - _bufferSize = fread( _buffer , 1 , _bufferSize , _fp ); -} -bool BufferedReadWriteFile::write( const void* data , size_t size ) -{ - if( !size ) return true; - char* _data = (char*) data; - size_t sz = _bufferSize - _bufferIndex; - while( sz<=size ) - { - memcpy( _buffer+_bufferIndex , _data , sz ); - fwrite( _buffer , 1 , _bufferSize , _fp ); - _data += sz; - size -= sz; - _bufferIndex = 0; - sz = _bufferSize; - } - if( size ) - { - memcpy( _buffer+_bufferIndex , _data , size ); - _bufferIndex += size; - } - return true; -} -bool BufferedReadWriteFile::read( void* data , size_t size ) -{ - if( !size ) return true; - char *_data = (char*) data; - size_t sz = _bufferSize - _bufferIndex; - while( sz<=size ) - { - if( size && !_bufferSize ) return false; - memcpy( _data , _buffer+_bufferIndex , sz ); - _bufferSize = fread( _buffer , 1 , _bufferSize , _fp ); - _data += sz; - size -= sz; - _bufferIndex = 0; - if( !size ) return true; - sz = _bufferSize; - } - if( size ) - { - if( !_bufferSize ) return false; - memcpy( _data , _buffer+_bufferIndex , size ); - _bufferIndex += size; - } - return true; -} diff --git a/src/other/libspsr/Src/Hash.h b/src/other/libspsr/Src/Hash.h deleted file mode 100644 index ce0f764d72e..00000000000 --- a/src/other/libspsr/Src/Hash.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef HASH_INCLUDED -#define HASH_INCLUDED -#ifdef WIN32 -#include -#define hash_map unordered_map -using std::unordered_map; -#else // !WIN32 -#include -using namespace __gnu_cxx; - -namespace __gnu_cxx -{ - template<> struct hash { - size_t operator()(long long __x) const { return __x; } - }; - template<> struct hash { - size_t operator()(const long long __x) const { return __x; } - }; - - - template<> struct hash { - size_t operator()(unsigned long long __x) const { return __x; } - }; - template<> struct hash { - size_t operator()(const unsigned long long __x) const { return __x; } - }; -} -#endif // WIN32 -#endif // HASH_INCLUDED - diff --git a/src/other/libspsr/Src/MemoryUsage.h b/src/other/libspsr/Src/MemoryUsage.h deleted file mode 100644 index 5fe1fe4a1d7..00000000000 --- a/src/other/libspsr/Src/MemoryUsage.h +++ /dev/null @@ -1,200 +0,0 @@ -/* -Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. Redistributions in binary form must reproduce -the above copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the distribution. - -Neither the name of the Johns Hopkins University nor the names of its contributors -may be used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. -*/ - -#ifndef MEMORY_USAGE_INCLUDED -#define MEMORY_USAGE_INCLUDED - -#ifdef WIN32 - -#include -class MemoryInfo -{ -public: - size_t TotalPhysicalMemory; - size_t FreePhysicalMemory; - size_t TotalSwapSpace; - size_t FreeSwapSpace; - size_t TotalVirtualAddressSpace; - size_t FreeVirtualAddressSpace; - size_t PageSize; - - void set(void){ - MEMORYSTATUSEX Mem; - SYSTEM_INFO Info; - ZeroMemory( &Mem, sizeof(Mem)); - ZeroMemory( &Info, sizeof(Info)); - Mem.dwLength = sizeof(Mem); - ::GlobalMemoryStatusEx( &Mem ); - ::GetSystemInfo( &Info ); - - TotalPhysicalMemory = (size_t)Mem.ullTotalPhys; - FreePhysicalMemory = (size_t)Mem.ullAvailPhys; - TotalSwapSpace = (size_t)Mem.ullTotalPageFile; - FreeSwapSpace = (size_t)Mem.ullAvailPageFile; - TotalVirtualAddressSpace = (size_t)Mem.ullTotalVirtual; - FreeVirtualAddressSpace = (size_t)Mem.ullAvailVirtual; - PageSize = (size_t)Info.dwPageSize; - } - size_t usage(void) const {return TotalVirtualAddressSpace-FreeVirtualAddressSpace;} - - static size_t Usage(void){ - MEMORY_BASIC_INFORMATION mbi; - size_t dwMemUsed = 0; - PVOID pvAddress = 0; - - - memset(&mbi, 0, sizeof(MEMORY_BASIC_INFORMATION)); - while(VirtualQuery(pvAddress, &mbi, sizeof(MEMORY_BASIC_INFORMATION)) == sizeof(MEMORY_BASIC_INFORMATION)){ - if(mbi.State == MEM_COMMIT && mbi.Type == MEM_PRIVATE){dwMemUsed += mbi.RegionSize;} - pvAddress = ((BYTE*)mbi.BaseAddress) + mbi.RegionSize; - } - return dwMemUsed; - } -}; - -#else // !WIN32 - -#ifndef __APPLE__ // Linux variants - -#include -#include - -class MemoryInfo -{ - public: - static size_t Usage(void) - { - FILE* f = fopen("/proc/self/stat","rb"); - - int d; - long ld; - unsigned long lu; - unsigned long long llu; - char s[1024]; - char c; - - int pid; - unsigned long vm; - - int n = fscanf(f, "%d %s %c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %d %ld %llu %lu %ld %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %lu %d %d %lu %lu" - ,&pid ,s ,&c ,&d ,&d ,&d ,&d ,&d ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&ld ,&ld ,&ld ,&ld ,&d ,&ld ,&llu ,&vm ,&ld ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&lu ,&d ,&d ,&lu ,&lu ); - - fclose(f); -/* -pid %d -comm %s -state %c -ppid %d -pgrp %d -session %d -tty_nr %d -tpgid %d -flags %lu -minflt %lu -cminflt %lu -majflt %lu -cmajflt %lu -utime %lu -stime %lu -cutime %ld -cstime %ld -priority %ld -nice %ld -0 %ld -itrealvalue %ld -starttime %lu -vsize %lu -rss %ld -rlim %lu -startcode %lu -endcode %lu -startstack %lu -kstkesp %lu -kstkeip %lu -signal %lu -blocked %lu -sigignore %lu -sigcatch %lu -wchan %lu -nswap %lu -cnswap %lu -exit_signal %d -processor %d -rt_priority %lu (since kernel 2.5.19) -policy %lu (since kernel 2.5.19) -*/ - return vm; - } - -}; -#else // __APPLE__: has no "/proc" pseudo-file system - -// Thanks to David O'Gwynn for providing this fix. -// This comes from a post by Michael Knight: -// -// http://miknight.blogspot.com/2005/11/resident-set-size-in-mac-os-x.html - -#include -#include -#include -#include -#include -#include -#include - -void getres(task_t task, unsigned long *rss, unsigned long *vs) -{ - struct task_basic_info t_info; - mach_msg_type_number_t t_info_count = TASK_BASIC_INFO_COUNT; - - task_info(task, TASK_BASIC_INFO, (task_info_t)&t_info, &t_info_count); - *rss = t_info.resident_size; - *vs = t_info.virtual_size; -} - -class MemoryInfo -{ - public: - static size_t Usage(void) - { - unsigned long rss, vs, psize; - task_t task = MACH_PORT_NULL; - - if (task_for_pid(current_task(), getpid(), &task) != KERN_SUCCESS) - abort(); - getres(task, &rss, &vs); - return rss; - } - -}; - -#endif // !__APPLE__ - -#endif // WIN32 - -#endif // MEMORY_USAGE_INCLUDE diff --git a/src/other/libspsr/Src/Ply.h b/src/other/libspsr/Src/Ply.h deleted file mode 100644 index 92d10f5bc42..00000000000 --- a/src/other/libspsr/Src/Ply.h +++ /dev/null @@ -1,678 +0,0 @@ -/* - - Header for PLY polygon files. - - - Greg Turk, March 1994 - - A PLY file contains a single polygonal _object_. - - An object is composed of lists of _elements_. Typical elements are - vertices, faces, edges and materials. - - Each type of element for a given object has one or more _properties_ - associated with the element type. For instance, a vertex element may - have as properties three floating-point values x,y,z and three unsigned - chars for red, green and blue. - - --------------------------------------------------------------- - - Copyright (c) 1994 The Board of Trustees of The Leland Stanford - Junior University. All rights reserved. - - Permission to use, copy, modify and distribute this software and its - documentation for any purpose is hereby granted without fee, provided - that the above copyright notice and this permission notice appear in - all copies of this software and that you do not sell the software. - - THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, - EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -*/ - -#ifndef __PLY_H__ -#define __PLY_H__ - -#ifndef WIN32 -#define _strdup strdup -#endif - -#ifdef __cplusplus -extern "C" { -#endif - -#include -#include -#include -#include - -#define PLY_ASCII 1 /* ascii PLY file */ -#define PLY_BINARY_BE 2 /* binary PLY file, big endian */ -#define PLY_BINARY_LE 3 /* binary PLY file, little endian */ -#define PLY_BINARY_NATIVE 4 /* binary PLY file, same endianness as current architecture */ - -#define PLY_OKAY 0 /* ply routine worked okay */ -#define PLY_ERROR -1 /* error in ply routine */ - - /* scalar data types supported by PLY format */ - -#define PLY_START_TYPE 0 -#define PLY_CHAR 1 -#define PLY_SHORT 2 -#define PLY_INT 3 -#define PLY_UCHAR 4 -#define PLY_USHORT 5 -#define PLY_UINT 6 -#define PLY_FLOAT 7 -#define PLY_DOUBLE 8 -#define PLY_INT_8 9 -#define PLY_UINT_8 10 -#define PLY_INT_16 11 -#define PLY_UINT_16 12 -#define PLY_INT_32 13 -#define PLY_UINT_32 14 -#define PLY_FLOAT_32 15 -#define PLY_FLOAT_64 16 - -#define PLY_END_TYPE 17 - -#define PLY_SCALAR 0 -#define PLY_LIST 1 - -#define PLY_STRIP_COMMENT_HEADER 0 - -typedef struct PlyProperty { /* description of a property */ - - char *name; /* property name */ - int external_type; /* file's data type */ - int internal_type; /* program's data type */ - int offset; /* offset bytes of prop in a struct */ - - int is_list; /* 1 = list, 0 = scalar */ - int count_external; /* file's count type */ - int count_internal; /* program's count type */ - int count_offset; /* offset byte for list count */ - -} PlyProperty; - -typedef struct PlyElement { /* description of an element */ - char *name; /* element name */ - int num; /* number of elements in this object */ - int size; /* size of element (bytes) or -1 if variable */ - int nprops; /* number of properties for this element */ - PlyProperty **props; /* list of properties in the file */ - char *store_prop; /* flags: property wanted by user? */ - int other_offset; /* offset to un-asked-for props, or -1 if none*/ - int other_size; /* size of other_props structure */ -} PlyElement; - -typedef struct PlyOtherProp { /* describes other properties in an element */ - char *name; /* element name */ - int size; /* size of other_props */ - int nprops; /* number of properties in other_props */ - PlyProperty **props; /* list of properties in other_props */ -} PlyOtherProp; - -typedef struct OtherData { /* for storing other_props for an other element */ - void *other_props; -} OtherData; - -typedef struct OtherElem { /* data for one "other" element */ - char *elem_name; /* names of other elements */ - int elem_count; /* count of instances of each element */ - OtherData **other_data; /* actual property data for the elements */ - PlyOtherProp *other_props; /* description of the property data */ -} OtherElem; - -typedef struct PlyOtherElems { /* "other" elements, not interpreted by user */ - int num_elems; /* number of other elements */ - OtherElem *other_list; /* list of data for other elements */ -} PlyOtherElems; - -typedef struct PlyFile { /* description of PLY file */ - FILE *fp; /* file pointer */ - int file_type; /* ascii or binary */ - float version; /* version number of file */ - int nelems; /* number of elements of object */ - PlyElement **elems; /* list of elements */ - int num_comments; /* number of comments */ - char **comments; /* list of comments */ - int num_obj_info; /* number of items of object information */ - char **obj_info; /* list of object info items */ - PlyElement *which_elem; /* which element we're currently writing */ - PlyOtherElems *other_elems; /* "other" elements from a PLY file */ -} PlyFile; - - /* memory allocation */ -extern char *my_alloc(); -#define myalloc(mem_size) my_alloc((mem_size), __LINE__, __FILE__) - -#ifndef ALLOCN -#define REALLOCN(PTR,TYPE,OLD_N,NEW_N) \ -{ \ - if ((OLD_N) == 0) \ -{ ALLOCN((PTR),TYPE,(NEW_N));} \ - else \ -{ \ - (PTR) = (TYPE *)realloc((PTR),(NEW_N)*sizeof(TYPE)); \ - if (((PTR) == NULL) && ((NEW_N) != 0)) \ -{ \ - fprintf(stderr, "Memory reallocation failed on line %d in %s\n", \ - __LINE__, __FILE__); \ - fprintf(stderr, " tried to reallocate %d->%d\n", \ - (OLD_N), (NEW_N)); \ - exit(-1); \ -} \ - if ((NEW_N)>(OLD_N)) \ - memset((char *)(PTR)+(OLD_N)*sizeof(TYPE), 0, \ - ((NEW_N)-(OLD_N))*sizeof(TYPE)); \ -} \ -} - -#define ALLOCN(PTR,TYPE,N) \ -{ (PTR) = (TYPE *) calloc(((unsigned)(N)),sizeof(TYPE));\ - if ((PTR) == NULL) { \ - fprintf(stderr, "Memory allocation failed on line %d in %s\n", \ - __LINE__, __FILE__); \ - exit(-1); \ - } \ -} - - -#define FREE(PTR) { free((PTR)); (PTR) = NULL; } -#endif - - -/*** delcaration of routines ***/ - -extern PlyFile *ply_write(FILE *, int, const char **, int); -extern PlyFile *ply_open_for_writing(char *, int, const char **, int, float *); -extern void ply_describe_element(PlyFile *, char *, int, int, PlyProperty *); -extern void ply_describe_property(PlyFile *, const char *, PlyProperty *); -extern void ply_element_count(PlyFile *, const char *, int); -extern void ply_header_complete(PlyFile *); -extern void ply_put_element_setup(PlyFile *, const char *); -extern void ply_put_element(PlyFile *, void *); -extern void ply_put_comment(PlyFile *, char *); -extern void ply_put_obj_info(PlyFile *, char *); -extern PlyFile *ply_read(FILE *, int *, char ***); -extern PlyFile *ply_open_for_reading( char *, int *, char ***, int *, float *); -extern PlyProperty **ply_get_element_description(PlyFile *, char *, int*, int*); -extern void ply_get_element_setup( PlyFile *, char *, int, PlyProperty *); -extern int ply_get_property(PlyFile *, char *, PlyProperty *); -extern PlyOtherProp *ply_get_other_properties(PlyFile *, char *, int); -extern void ply_get_element(PlyFile *, void *); -extern char **ply_get_comments(PlyFile *, int *); -extern char **ply_get_obj_info(PlyFile *, int *); -extern void ply_close(PlyFile *); -extern void ply_get_info(PlyFile *, float *, int *); -extern PlyOtherElems *ply_get_other_element (PlyFile *, char *, int); -extern void ply_describe_other_elements ( PlyFile *, PlyOtherElems *); -extern void ply_put_other_elements (PlyFile *); -extern void ply_free_other_elements (PlyOtherElems *); -extern void ply_describe_other_properties(PlyFile *, PlyOtherProp *, int); - -extern int equal_strings(const char *, const char *); - -#ifdef __cplusplus -} -#endif -#include "Geometry.h" -#include - -template< class Real > int PLYType( void ); -template<> inline int PLYType< int >( void ){ return PLY_INT ; } -template<> inline int PLYType< char >( void ){ return PLY_CHAR ; } -template<> inline int PLYType< unsigned char >( void ){ return PLY_UCHAR ; } -template<> inline int PLYType< float >( void ){ return PLY_FLOAT ; } -template<> inline int PLYType< double >( void ){ return PLY_DOUBLE; } -template< class Real > inline int PLYType( void ){ fprintf( stderr , "[ERROR] Unrecognized type\n" ) , exit( 0 ); } - -typedef struct PlyFace -{ - unsigned char nr_vertices; - int *vertices; - int segment; -} PlyFace; -static PlyProperty face_props[] = -{ - { _strdup( "vertex_indices" ) , PLY_INT , PLY_INT , offsetof( PlyFace , vertices ) , 1 , PLY_UCHAR, PLY_UCHAR , offsetof(PlyFace,nr_vertices) }, -}; - -template< class Real > -class PlyVertex -{ -public: - const static int Components=3; - static PlyProperty Properties[]; - - Point3D< Real > point; - - PlyVertex( void ) { ; } - PlyVertex( Point3D< Real > p ) { point=p; } - PlyVertex operator + ( PlyVertex p ) const { return PlyVertex( point+p.point ); } - PlyVertex operator - ( PlyVertex p ) const { return PlyVertex( point-p.point ); } - template< class _Real > PlyVertex operator * ( _Real s ) const { return PlyVertex( point*s ); } - template< class _Real > PlyVertex operator / ( _Real s ) const { return PlyVertex( point/s ); } - PlyVertex& operator += ( PlyVertex p ) { point += p.point ; return *this; } - PlyVertex& operator -= ( PlyVertex p ) { point -= p.point ; return *this; } - template< class _Real > PlyVertex& operator *= ( _Real s ) { point *= s ; return *this; } - template< class _Real > PlyVertex& operator /= ( _Real s ) { point /= s ; return *this; } -}; -template< class Real , class _Real > PlyVertex< Real > operator * ( XForm4x4< _Real > xForm , PlyVertex< Real > v ) { return PlyVertex< Real >( xForm * v.point ); } -template< class Real > PlyProperty PlyVertex< Real >::Properties[]= -{ - { _strdup( "x" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyVertex , point.coords[0] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "y" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyVertex , point.coords[1] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "z" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyVertex , point.coords[2] ) ) , 0 , 0 , 0 , 0 } -}; -template< class Real > -class PlyValueVertex -{ -public: - const static int Components=4; - static PlyProperty Properties[]; - - Point3D point; - Real value; - - PlyValueVertex( void ) : value( Real(0) ) { ; } - PlyValueVertex( Point3D< Real > p , Real v ) : point(p) , value(v) { ; } - PlyValueVertex operator + ( PlyValueVertex p ) const { return PlyValueVertex( point+p.point , value+p.value ); } - PlyValueVertex operator - ( PlyValueVertex p ) const { return PlyValueVertex( point-p.value , value-p.value ); } - template< class _Real > PlyValueVertex operator * ( _Real s ) const { return PlyValueVertex( point*s , Real(value*s) ); } - template< class _Real > PlyValueVertex operator / ( _Real s ) const { return PlyValueVertex( point/s , Real(value/s) ); } - PlyValueVertex& operator += ( PlyValueVertex p ) { point += p.point , value += p.value ; return *this; } - PlyValueVertex& operator -= ( PlyValueVertex p ) { point -= p.point , value -= p.value ; return *this; } - template< class _Real > PlyValueVertex& operator *= ( _Real s ) { point *= s , value *= Real(s) ; return *this; } - template< class _Real > PlyValueVertex& operator /= ( _Real s ) { point /= s , value /= Real(s) ; return *this; } -}; -template< class Real , class _Real > PlyValueVertex< Real > operator * ( XForm4x4< _Real > xForm , PlyValueVertex< Real > v ) { return PlyValueVertex< Real >( xForm * v.point , v.value ); } -template< class Real > -PlyProperty PlyValueVertex< Real >::Properties[]= -{ - { _strdup( "x" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyValueVertex , point.coords[0] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "y" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyValueVertex , point.coords[1] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "z" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyValueVertex , point.coords[2] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "value" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyValueVertex , value ) ) , 0 , 0 , 0 , 0 } -}; -template< class Real > -class PlyOrientedVertex -{ -public: - const static int Components=6; - static PlyProperty Properties[]; - - Point3D point , normal; - - PlyOrientedVertex( void ) { ; } - PlyOrientedVertex( Point3D< Real > p , Point3D< Real > n ) : point(p) , normal(n) { ; } - PlyOrientedVertex operator + ( PlyOrientedVertex p ) const { return PlyOrientedVertex( point+p.point , normal+p.normal ); } - PlyOrientedVertex operator - ( PlyOrientedVertex p ) const { return PlyOrientedVertex( point-p.value , normal-p.normal ); } - template< class _Real > PlyOrientedVertex operator * ( _Real s ) const { return PlyOrientedVertex( point*s , normal*s ); } - template< class _Real > PlyOrientedVertex operator / ( _Real s ) const { return PlyOrientedVertex( point/s , normal/s ); } - PlyOrientedVertex& operator += ( PlyOrientedVertex p ) { point += p.point , normal += p.normal ; return *this; } - PlyOrientedVertex& operator -= ( PlyOrientedVertex p ) { point -= p.point , normal -= p.normal ; return *this; } - template< class _Real > PlyOrientedVertex& operator *= ( _Real s ) { point *= s , normal *= s ; return *this; } - template< class _Real > PlyOrientedVertex& operator /= ( _Real s ) { point /= s , normal /= s ; return *this; } -}; -template< class Real , class _Real > PlyOrientedVertex< Real > operator * ( XForm4x4< _Real > xForm , PlyOrientedVertex< Real > v ) { return PlyOrientedVertex< Real >( xForm * v.point , xForm.inverse().transpose() * v.normal ); } -template< class Real > -PlyProperty PlyOrientedVertex< Real >::Properties[]= -{ - { _strdup( "x" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyOrientedVertex , point.coords[0] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "y" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyOrientedVertex , point.coords[1] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "z" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyOrientedVertex , point.coords[2] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "nx" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyOrientedVertex , normal.coords[0] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "ny" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyOrientedVertex , normal.coords[1] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "nz" ) , PLYType< Real >() , PLYType< Real >() , int( offsetof( PlyOrientedVertex , normal.coords[2] ) ) , 0 , 0 , 0 , 0 } -}; -template< class Real > -class PlyColorVertex -{ -public: - const static int Components=6; - static PlyProperty Properties[]; - - Point3D point; - unsigned char color[3]; - - operator Point3D& () {return point;} - operator const Point3D& () const {return point;} - PlyColorVertex(void) {point.coords[0]=point.coords[1]=point.coords[2]=0,color[0]=color[1]=color[2]=0;} - PlyColorVertex(const Point3D& p) {point=p;} -}; -template< class Real > -PlyProperty PlyColorVertex< Real >::Properties[]= -{ - { _strdup( "x" ) , PLYType< Real >() , PLYType< Real >(), int( offsetof( PlyColorVertex , point.coords[0] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "y" ) , PLYType< Real >() , PLYType< Real >(), int( offsetof( PlyColorVertex , point.coords[1] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "z" ) , PLYType< Real >() , PLYType< Real >(), int( offsetof( PlyColorVertex , point.coords[2] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "red" ) , PLYType< unsigned char >() , PLYType< unsigned char >(), int( offsetof( PlyColorVertex , color[0] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "green" ) , PLYType< unsigned char >() , PLYType< unsigned char >(), int( offsetof( PlyColorVertex , color[1] ) ) , 0 , 0 , 0 , 0 }, - { _strdup( "blue" ) , PLYType< unsigned char >() , PLYType< unsigned char >(), int( offsetof( PlyColorVertex , color[2] ) ) , 0 , 0 , 0 , 0 } -}; - -template< class Vertex , class Real > -int PlyWritePolygons( char* fileName , CoredMeshData< Vertex >* mesh , int file_type , const Point3D< float >& translate , float scale , char** comments=NULL , int commentNum=0 , XForm4x4< Real > xForm=XForm4x4< Real >::Identity() ); - -template< class Vertex , class Real > -int PlyWritePolygons( char* fileName , CoredMeshData< Vertex >* mesh , int file_type , char** comments=NULL , int commentNum=0 , XForm4x4< Real > xForm=XForm4x4< Real >::Identity() ); - -template -int PlyReadPolygons(char* fileName, - std::vector& vertices,std::vector >& polygons, - PlyProperty* properties,int propertyNum, - int& file_type, - char*** comments=NULL,int* commentNum=NULL , bool* readFlags=NULL ); - -template -int PlyWritePolygons(char* fileName, - const std::vector& vertices,const std::vector >& polygons, - PlyProperty* properties,int propertyNum, - int file_type, - char** comments=NULL,const int& commentNum=0); - -template -int PlyWritePolygons(char* fileName, - const std::vector& vertices , const std::vector< std::vector< int > >& polygons, - PlyProperty* properties,int propertyNum, - int file_type, - char** comments,const int& commentNum) -{ - int nr_vertices=int(vertices.size()); - int nr_faces=int(polygons.size()); - float version; - const char *elem_names[] = { "vertex" , "face" }; - PlyFile *ply = ply_open_for_writing( fileName , 2 , elem_names , file_type , &version ); - if (!ply){return 0;} - - // - // describe vertex and face properties - // - ply_element_count(ply, "vertex", nr_vertices); - for(int i=0;imaxFaceVerts) - { - delete[] ply_face.vertices; - maxFaceVerts=int(polygons[i].size()); - ply_face.vertices=new int[maxFaceVerts]; - } - ply_face.nr_vertices=int(polygons[i].size()); - for(int j=0;j -int PlyReadPolygons(char* fileName, - std::vector& vertices , std::vector >& polygons , - PlyProperty* properties , int propertyNum , - int& file_type , - char*** comments , int* commentNum , bool* readFlags ) -{ - int nr_elems; - char **elist; - float version; - int i,j,k; - PlyFile* ply; - char* elem_name; - int num_elems; - int nr_props; - PlyProperty** plist; - PlyFace ply_face; - - ply = ply_open_for_reading(fileName, &nr_elems, &elist, &file_type, &version); - if(!ply) return 0; - - if(comments) - { - (*comments)=new char*[*commentNum+ply->num_comments]; - for(int i=0;inum_comments;i++) - (*comments)[i]=_strdup(ply->comments[i]); - *commentNum=ply->num_comments; - } - - for (i=0; i < nr_elems; i++) { - elem_name = elist[i]; - plist = ply_get_element_description(ply, elem_name, &num_elems, &nr_props); - if(!plist) - { - for(i=0;ielems[i]->name); - free(ply->elems[i]->store_prop); - for(j=0;jelems[i]->nprops;j++){ - free(ply->elems[i]->props[j]->name); - free(ply->elems[i]->props[j]); - } - free(ply->elems[i]->props); - } - for(i=0;ielems[i]);} - free(ply->elems); - for(i=0;inum_comments;i++){free(ply->comments[i]);} - free(ply->comments); - for(i=0;inum_obj_info;i++){free(ply->obj_info[i]);} - free(ply->obj_info); - ply_free_other_elements (ply->other_elems); - - for(i=0;iname); - free(plist[j]); - } - free(plist); - } // for each type of element - - for(i=0;ielems[i]->name); - free(ply->elems[i]->store_prop); - for(j=0;jelems[i]->nprops;j++){ - free(ply->elems[i]->props[j]->name); - free(ply->elems[i]->props[j]); - } - if(ply->elems[i]->props && ply->elems[i]->nprops){free(ply->elems[i]->props);} - } - for(i=0;ielems[i]);} - free(ply->elems); - for(i=0;inum_comments;i++){free(ply->comments[i]);} - free(ply->comments); - for(i=0;inum_obj_info;i++){free(ply->obj_info[i]);} - free(ply->obj_info); - ply_free_other_elements (ply->other_elems); - - - for(i=0;i -int PlyWritePolygons( char* fileName , CoredMeshData< Vertex >* mesh , int file_type , const Point3D& translate , float scale , char** comments , int commentNum , XForm4x4< Real > xForm ) -{ - int i; - int nr_vertices=int(mesh->outOfCorePointCount()+mesh->inCorePoints.size()); - int nr_faces=mesh->polygonCount(); - float version; - const char *elem_names[] = { "vertex" , "face" }; - PlyFile *ply = ply_open_for_writing( fileName , 2 , elem_names , file_type , &version ); - if( !ply ) return 0; - - mesh->resetIterator(); - - // - // describe vertex and face properties - // - ply_element_count( ply , "vertex" , nr_vertices ); - for( int i=0 ; iinCorePoints.size() ) ; i++ ) - { - Vertex vertex = xForm * ( mesh->inCorePoints[i] * scale + translate ); - ply_put_element(ply, (void *) &vertex); - } - for( i=0; ioutOfCorePointCount() ; i++ ) - { - Vertex vertex; - mesh->nextOutOfCorePoint( vertex ); - vertex = xForm * ( vertex * scale +translate ); - ply_put_element(ply, (void *) &vertex); - } // for, write vertices - - // write faces - std::vector< CoredVertexIndex > polygon; - ply_put_element_setup( ply , "face" ); - for( i=0 ; inextPolygon( polygon ); - ply_face.nr_vertices = int( polygon.size() ); - ply_face.vertices = new int[ polygon.size() ]; - for( int i=0 ; iinCorePoints.size() ); - ply_put_element( ply, (void *) &ply_face ); - delete[] ply_face.vertices; - } // for, write faces - - ply_close( ply ); - return 1; -} -template< class Vertex , class Real > -int PlyWritePolygons( char* fileName , CoredMeshData< Vertex >* mesh , int file_type , char** comments , int commentNum , XForm4x4< Real > xForm ) -{ - int i; - int nr_vertices=int(mesh->outOfCorePointCount()+mesh->inCorePoints.size()); - int nr_faces=mesh->polygonCount(); - float version; - const char *elem_names[] = { "vertex" , "face" }; - PlyFile *ply = ply_open_for_writing( fileName , 2 , elem_names , file_type , &version ); - if( !ply ) return 0; - - mesh->resetIterator(); - - // - // describe vertex and face properties - // - ply_element_count( ply , "vertex" , nr_vertices ); - for( int i=0 ; iinCorePoints.size() ) ; i++ ) - { - Vertex vertex = xForm * mesh->inCorePoints[i]; - ply_put_element(ply, (void *) &vertex); - } - for( i=0; ioutOfCorePointCount() ; i++ ) - { - Vertex vertex; - mesh->nextOutOfCorePoint( vertex ); - vertex = xForm * ( vertex ); - ply_put_element(ply, (void *) &vertex); - } // for, write vertices - - // write faces - std::vector< CoredVertexIndex > polygon; - ply_put_element_setup( ply , "face" ); - for( i=0 ; inextPolygon( polygon ); - ply_face.nr_vertices = int( polygon.size() ); - ply_face.vertices = new int[ polygon.size() ]; - for( int i=0 ; iinCorePoints.size() ); - ply_put_element( ply, (void *) &ply_face ); - delete[] ply_face.vertices; - } // for, write faces - - ply_close( ply ); - return 1; -} -inline int PlyDefaultFileType(void){return PLY_ASCII;} - -#endif /* !__PLY_H__ */ diff --git a/src/other/libspsr/Src/PlyFile.cpp b/src/other/libspsr/Src/PlyFile.cpp deleted file mode 100644 index 1ee3670efb9..00000000000 --- a/src/other/libspsr/Src/PlyFile.cpp +++ /dev/null @@ -1,2727 +0,0 @@ -/* - - The interface routines for reading and writing PLY polygon files. - - Greg Turk, February 1994 - - --------------------------------------------------------------- - - A PLY file contains a single polygonal _object_. - - An object is composed of lists of _elements_. Typical elements are - vertices, faces, edges and materials. - - Each type of element for a given object has one or more _properties_ - associated with the element type. For instance, a vertex element may - have as properties the floating-point values x,y,z and the three unsigned - chars representing red, green and blue. - - --------------------------------------------------------------- - - Copyright (c) 1994 The Board of Trustees of The Leland Stanford - Junior University. All rights reserved. - - Permission to use, copy, modify and distribute this software and its - documentation for any purpose is hereby granted without fee, provided - that the above copyright notice and this permission notice appear in - all copies of this software and that you do not sell the software. - - THE SOFTWARE IS PROVIDED "AS IS" AND WITHOUT WARRANTY OF ANY KIND, - EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY - WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. - -*/ - -#include -#include -#include -#include -#include "Ply.h" - -const char *type_names[] = { - "invalid", - "char", - "short", - "int", - "uchar", - "ushort", - "uint", - "float", - "double", - - "int8", // character 1 - "uint8", // unsigned character 1 - "int16", // short integer 2 - "uint16", // unsigned short integer 2 - "int32", // integer 4 - "uint32", // unsigned integer 4 - "float32", // single-precision float 4 - "float64", // double-precision float 8 - -}; - -int ply_type_size[] = { - 0, - 1, - 2, - 4, - 1, - 2, - 4, - 4, - 8, - 1, - 1, - 2, - 2, - 4, - 4, - 8 -}; - -typedef union -{ - int int_value; - char byte_values[sizeof(int)]; -} endian_test_type; - - -static int native_binary_type = -1; -static int types_checked = 0; - -#define NO_OTHER_PROPS -1 - -#define DONT_STORE_PROP 0 -#define STORE_PROP 1 - -#define OTHER_PROP 0 -#define NAMED_PROP 1 - - -/* returns 1 if strings are equal, 0 if not */ -int equal_strings(const char *, const char *); - -/* find an element in a plyfile's list */ -PlyElement *find_element(PlyFile *, const char *); - -/* find a property in an element's list */ -PlyProperty *find_property(PlyElement *, const char *, int *); - -/* write to a file the word describing a PLY file data type */ -void write_scalar_type (FILE *, int); - -/* read a line from a file and break it up into separate words */ -char **get_words(FILE *, int *, char **); -char **old_get_words(FILE *, int *); - -/* write an item to a file */ -void write_binary_item(FILE *, int, int, unsigned int, double, int); -void write_ascii_item(FILE *, int, unsigned int, double, int); -double old_write_ascii_item(FILE *, char *, int); - -/* add information to a PLY file descriptor */ -void add_element(PlyFile *, char **); -void add_property(PlyFile *, char **); -void add_comment(PlyFile *, char *); -void add_obj_info(PlyFile *, char *); - -/* copy a property */ -void copy_property(PlyProperty *, PlyProperty *); - -/* store a value into where a pointer and a type specify */ -void store_item(char *, int, int, unsigned int, double); - -/* return the value of a stored item */ -void get_stored_item( void *, int, int *, unsigned int *, double *); - -/* return the value stored in an item, given ptr to it and its type */ -double get_item_value(char *, int); - -/* get binary or ascii item and store it according to ptr and type */ -void get_ascii_item(char *, int, int *, unsigned int *, double *); -void get_binary_item(FILE *, int, int, int *, unsigned int *, double *); - -/* get a bunch of elements from a file */ -void ascii_get_element(PlyFile *, char *); -void binary_get_element(PlyFile *, char *); - -/* memory allocation */ -char *my_alloc(int, int, const char *); - -/* byte ordering */ -void get_native_binary_type(); -void swap_bytes(char *, int); - -void check_types(); - -/*************/ -/* Writing */ -/*************/ - - -/****************************************************************************** -Given a file pointer, get ready to write PLY data to the file. - - Entry: - fp - the given file pointer - nelems - number of elements in object - elem_names - list of element names - file_type - file type, either ascii or binary - - Exit: - returns a pointer to a PlyFile, used to refer to this file, or NULL if error -******************************************************************************/ - -PlyFile *ply_write( - FILE *fp, - int nelems, - const char **elem_names, - int file_type - ) -{ - int i; - PlyFile *plyfile; - PlyElement *elem; - - /* check for NULL file pointer */ - if (fp == NULL) - return (NULL); - - if (native_binary_type == -1) - get_native_binary_type(); - if (!types_checked) - check_types(); - - /* create a record for this object */ - - plyfile = (PlyFile *) myalloc (sizeof (PlyFile)); - if (file_type == PLY_BINARY_NATIVE) - plyfile->file_type = native_binary_type; - else - plyfile->file_type = file_type; - plyfile->num_comments = 0; - plyfile->num_obj_info = 0; - plyfile->nelems = nelems; - plyfile->version = 1.0; - plyfile->fp = fp; - plyfile->other_elems = NULL; - - /* tuck aside the names of the elements */ - - plyfile->elems = (PlyElement **) myalloc (sizeof (PlyElement *) * nelems); - for (i = 0; i < nelems; i++) { - elem = (PlyElement *) myalloc (sizeof (PlyElement)); - plyfile->elems[i] = elem; - elem->name = _strdup (elem_names[i]); - elem->num = 0; - elem->nprops = 0; - } - - /* return pointer to the file descriptor */ - return (plyfile); -} - - -/****************************************************************************** -Open a polygon file for writing. - - Entry: - filename - name of file to read from - nelems - number of elements in object - elem_names - list of element names - file_type - file type, either ascii or binary - - Exit: - version - version number of PLY file - returns a file identifier, used to refer to this file, or NULL if error -******************************************************************************/ - -PlyFile *ply_open_for_writing( - char *filename, - int nelems, - const char **elem_names, - int file_type, - float *version - ) -{ - PlyFile *plyfile; - char *name; - FILE *fp; - - /* tack on the extension .ply, if necessary */ - - name = (char *) myalloc (int(sizeof (char) * (strlen (filename)) + 5)); - strcpy (name, filename); - if (strlen (name) < 4 || - strcmp (name + strlen (name) - 4, ".ply") != 0) - strcat (name, ".ply"); - - /* open the file for writing */ - - fp = fopen (name, "wb"); - if (fp == NULL) { - return (NULL); - } - - /* create the actual PlyFile structure */ - - plyfile = ply_write (fp, nelems, elem_names, file_type); - if (plyfile == NULL) - return (NULL); - - /* say what PLY file version number we're writing */ - *version = plyfile->version; - - /* return pointer to the file descriptor */ - return (plyfile); -} - - -/****************************************************************************** -Describe an element, including its properties and how many will be written -to the file. - - Entry: - plyfile - file identifier - elem_name - name of element that information is being specified about - nelems - number of elements of this type to be written - nprops - number of properties contained in the element - prop_list - list of properties -******************************************************************************/ - -void ply_describe_element( - PlyFile *plyfile, - char *elem_name, - int nelems, - int nprops, - PlyProperty *prop_list - ) -{ - int i; - PlyElement *elem; - PlyProperty *prop; - - /* look for appropriate element */ - elem = find_element (plyfile, elem_name); - if (elem == NULL) { - fprintf(stderr,"ply_describe_element: can't find element '%s'\n",elem_name); - exit (-1); - } - - elem->num = nelems; - - /* copy the list of properties */ - - elem->nprops = nprops; - elem->props = (PlyProperty **) myalloc (sizeof (PlyProperty *) * nprops); - elem->store_prop = (char *) myalloc (sizeof (char) * nprops); - - for (i = 0; i < nprops; i++) { - prop = (PlyProperty *) myalloc (sizeof (PlyProperty)); - elem->props[i] = prop; - elem->store_prop[i] = NAMED_PROP; - copy_property (prop, &prop_list[i]); - } -} - - -/****************************************************************************** -Describe a property of an element. - - Entry: - plyfile - file identifier - elem_name - name of element that information is being specified about - prop - the new property -******************************************************************************/ - -void ply_describe_property( - PlyFile *plyfile, - const char *elem_name, - PlyProperty *prop - ) -{ - PlyElement *elem; - PlyProperty *elem_prop; - - /* look for appropriate element */ - elem = find_element (plyfile, elem_name); - if (elem == NULL) { - fprintf(stderr, "ply_describe_property: can't find element '%s'\n", - elem_name); - return; - } - - /* create room for new property */ - - if (elem->nprops == 0) { - elem->props = (PlyProperty **) myalloc (sizeof (PlyProperty *)); - elem->store_prop = (char *) myalloc (sizeof (char)); - elem->nprops = 1; - } - else { - elem->nprops++; - elem->props = (PlyProperty **) - realloc (elem->props, sizeof (PlyProperty *) * elem->nprops); - elem->store_prop = (char *) - realloc (elem->store_prop, sizeof (char) * elem->nprops); - } - - /* copy the new property */ - - elem_prop = (PlyProperty *) myalloc (sizeof (PlyProperty)); - elem->props[elem->nprops - 1] = elem_prop; - elem->store_prop[elem->nprops - 1] = NAMED_PROP; - copy_property (elem_prop, prop); -} - - -/****************************************************************************** -Describe what the "other" properties are that are to be stored, and where -they are in an element. -******************************************************************************/ - -void ply_describe_other_properties( - PlyFile *plyfile, - PlyOtherProp *other, - int offset - ) -{ - int i; - PlyElement *elem; - PlyProperty *prop; - - /* look for appropriate element */ - elem = find_element (plyfile, other->name); - if (elem == NULL) { - fprintf(stderr, "ply_describe_other_properties: can't find element '%s'\n", - other->name); - return; - } - - /* create room for other properties */ - - if (elem->nprops == 0) { - elem->props = (PlyProperty **) - myalloc (sizeof (PlyProperty *) * other->nprops); - elem->store_prop = (char *) myalloc (sizeof (char) * other->nprops); - elem->nprops = 0; - } - else { - int newsize; - newsize = elem->nprops + other->nprops; - elem->props = (PlyProperty **) - realloc (elem->props, sizeof (PlyProperty *) * newsize); - elem->store_prop = (char *) - realloc (elem->store_prop, sizeof (char) * newsize); - } - - /* copy the other properties */ - - for (i = 0; i < other->nprops; i++) { - prop = (PlyProperty *) myalloc (sizeof (PlyProperty)); - copy_property (prop, other->props[i]); - elem->props[elem->nprops] = prop; - elem->store_prop[elem->nprops] = OTHER_PROP; - elem->nprops++; - } - - /* save other info about other properties */ - elem->other_size = other->size; - elem->other_offset = offset; -} - - -/****************************************************************************** -State how many of a given element will be written. - - Entry: - plyfile - file identifier - elem_name - name of element that information is being specified about - nelems - number of elements of this type to be written -******************************************************************************/ - -void ply_element_count( - PlyFile *plyfile, - const char *elem_name, - int nelems - ) -{ - PlyElement *elem; - - /* look for appropriate element */ - elem = find_element (plyfile, elem_name); - if (elem == NULL) { - fprintf(stderr,"ply_element_count: can't find element '%s'\n",elem_name); - exit (-1); - } - - elem->num = nelems; -} - - -/****************************************************************************** -Signal that we've described everything a PLY file's header and that the -header should be written to the file. - - Entry: - plyfile - file identifier -******************************************************************************/ - -void ply_header_complete(PlyFile *plyfile) -{ - int i,j; - FILE *fp = plyfile->fp; - PlyElement *elem; - PlyProperty *prop; - - fprintf (fp, "ply\n"); - - switch (plyfile->file_type) { - case PLY_ASCII: - fprintf (fp, "format ascii 1.0\n"); - break; - case PLY_BINARY_BE: - fprintf (fp, "format binary_big_endian 1.0\n"); - break; - case PLY_BINARY_LE: - fprintf (fp, "format binary_little_endian 1.0\n"); - break; - default: - fprintf (stderr, "ply_header_complete: bad file type = %d\n", - plyfile->file_type); - exit (-1); - } - - /* write out the comments */ - - for (i = 0; i < plyfile->num_comments; i++) - fprintf (fp, "comment %s\n", plyfile->comments[i]); - - /* write out object information */ - - for (i = 0; i < plyfile->num_obj_info; i++) - fprintf (fp, "obj_info %s\n", plyfile->obj_info[i]); - - /* write out information about each element */ - - for (i = 0; i < plyfile->nelems; i++) { - - elem = plyfile->elems[i]; - fprintf (fp, "element %s %d\n", elem->name, elem->num); - - /* write out each property */ - for (j = 0; j < elem->nprops; j++) { - prop = elem->props[j]; - if (prop->is_list) { - fprintf (fp, "property list "); - write_scalar_type (fp, prop->count_external); - fprintf (fp, " "); - write_scalar_type (fp, prop->external_type); - fprintf (fp, " %s\n", prop->name); - } - else { - fprintf (fp, "property "); - write_scalar_type (fp, prop->external_type); - fprintf (fp, " %s\n", prop->name); - } - } - } - - fprintf (fp, "end_header\n"); -} - - -/****************************************************************************** -Specify which elements are going to be written. This should be called -before a call to the routine ply_put_element(). - - Entry: - plyfile - file identifier - elem_name - name of element we're talking about -******************************************************************************/ - -void ply_put_element_setup(PlyFile *plyfile, const char *elem_name) -{ - PlyElement *elem; - - elem = find_element (plyfile, elem_name); - if (elem == NULL) { - fprintf(stderr, "ply_elements_setup: can't find element '%s'\n", elem_name); - exit (-1); - } - - plyfile->which_elem = elem; -} - - -/****************************************************************************** -Write an element to the file. This routine assumes that we're -writing the type of element specified in the last call to the routine -ply_put_element_setup(). - - Entry: - plyfile - file identifier - elem_ptr - pointer to the element -******************************************************************************/ - -void ply_put_element(PlyFile *plyfile, void *elem_ptr) -{ - int j,k; - FILE *fp = plyfile->fp; - PlyElement *elem; - PlyProperty *prop; - char *elem_data,*item; - char **item_ptr; - int list_count; - int item_size; - int int_val; - unsigned int uint_val; - double double_val; - char **other_ptr; - - elem = plyfile->which_elem; - elem_data = (char *)elem_ptr; - other_ptr = (char **) (((char *) elem_ptr) + elem->other_offset); - - /* write out either to an ascii or binary file */ - - if (plyfile->file_type == PLY_ASCII) { - - /* write an ascii file */ - - /* write out each property of the element */ - for (j = 0; j < elem->nprops; j++) { - prop = elem->props[j]; - if (elem->store_prop[j] == OTHER_PROP) - elem_data = *other_ptr; - else - elem_data = (char *)elem_ptr; - if (prop->is_list) { - item = elem_data + prop->count_offset; - get_stored_item ((void *) item, prop->count_internal, - &int_val, &uint_val, &double_val); - write_ascii_item (fp, int_val, uint_val, double_val, - prop->count_external); - list_count = uint_val; - item_ptr = (char **) (elem_data + prop->offset); - item = item_ptr[0]; - item_size = ply_type_size[prop->internal_type]; - for (k = 0; k < list_count; k++) { - get_stored_item ((void *) item, prop->internal_type, - &int_val, &uint_val, &double_val); - write_ascii_item (fp, int_val, uint_val, double_val, - prop->external_type); - item += item_size; - } - } - else { - item = elem_data + prop->offset; - get_stored_item ((void *) item, prop->internal_type, - &int_val, &uint_val, &double_val); - write_ascii_item (fp, int_val, uint_val, double_val, - prop->external_type); - } - } - - fprintf (fp, "\n"); - } - else { - - /* write a binary file */ - - /* write out each property of the element */ - for (j = 0; j < elem->nprops; j++) { - prop = elem->props[j]; - if (elem->store_prop[j] == OTHER_PROP) - elem_data = *other_ptr; - else - elem_data = (char *)elem_ptr; - if (prop->is_list) { - item = elem_data + prop->count_offset; - item_size = ply_type_size[prop->count_internal]; - get_stored_item ((void *) item, prop->count_internal, - &int_val, &uint_val, &double_val); - write_binary_item (fp, plyfile->file_type, int_val, uint_val, - double_val, prop->count_external); - list_count = uint_val; - item_ptr = (char **) (elem_data + prop->offset); - item = item_ptr[0]; - item_size = ply_type_size[prop->internal_type]; - for (k = 0; k < list_count; k++) { - get_stored_item ((void *) item, prop->internal_type, - &int_val, &uint_val, &double_val); - write_binary_item (fp, plyfile->file_type, int_val, uint_val, - double_val, prop->external_type); - item += item_size; - } - } - else { - item = elem_data + prop->offset; - item_size = ply_type_size[prop->internal_type]; - get_stored_item ((void *) item, prop->internal_type, - &int_val, &uint_val, &double_val); - write_binary_item (fp, plyfile->file_type, int_val, uint_val, - double_val, prop->external_type); - } - } - - } -} - - -/****************************************************************************** -Specify a comment that will be written in the header. - - Entry: - plyfile - file identifier - comment - the comment to be written - ******************************************************************************/ - - void ply_put_comment(PlyFile *plyfile, char *comment) - { - /* (re)allocate space for new comment */ - if (plyfile->num_comments == 0) - plyfile->comments = (char **) myalloc (sizeof (char *)); - else - plyfile->comments = (char **) realloc (plyfile->comments, - sizeof (char *) * (plyfile->num_comments + 1)); - - /* add comment to list */ - plyfile->comments[plyfile->num_comments] = _strdup (comment); - plyfile->num_comments++; - } - - - /****************************************************************************** - Specify a piece of object information (arbitrary text) that will be written - in the header. - - Entry: - plyfile - file identifier - obj_info - the text information to be written - ******************************************************************************/ - - void ply_put_obj_info(PlyFile *plyfile, char *obj_info) - { - /* (re)allocate space for new info */ - if (plyfile->num_obj_info == 0) - plyfile->obj_info = (char **) myalloc (sizeof (char *)); - else - plyfile->obj_info = (char **) realloc (plyfile->obj_info, - sizeof (char *) * (plyfile->num_obj_info + 1)); - - /* add info to list */ - plyfile->obj_info[plyfile->num_obj_info] = _strdup (obj_info); - plyfile->num_obj_info++; - } - - - - - - - - /*************/ - /* Reading */ - /*************/ - - - - /****************************************************************************** - Given a file pointer, get ready to read PLY data from the file. - - Entry: - fp - the given file pointer - - Exit: - nelems - number of elements in object - elem_names - list of element names - returns a pointer to a PlyFile, used to refer to this file, or NULL if error - ******************************************************************************/ - - PlyFile *ply_read(FILE *fp, int *nelems, char ***elem_names) - { - int i,j; - PlyFile *plyfile; - int nwords; - char **words; - char **elist; - PlyElement *elem; - char *orig_line; - /* check for NULL file pointer */ - if (fp == NULL) - return (NULL); - - if (native_binary_type == -1) - get_native_binary_type(); - if (!types_checked) - check_types(); - /* create record for this object */ - - plyfile = (PlyFile *) myalloc (sizeof (PlyFile)); - plyfile->nelems = 0; - plyfile->comments = NULL; - plyfile->num_comments = 0; - plyfile->obj_info = NULL; - plyfile->num_obj_info = 0; - plyfile->fp = fp; - plyfile->other_elems = NULL; - - /* read and parse the file's header */ - - words = get_words (plyfile->fp, &nwords, &orig_line); - if (!words || !equal_strings (words[0], "ply")) - { - if (words) - free(words); - return (NULL); - } - while (words) { - /* parse words */ - - if (equal_strings (words[0], "format")) { - if (nwords != 3) { - free(words); - return (NULL); - } - if (equal_strings (words[1], "ascii")) - plyfile->file_type = PLY_ASCII; - else if (equal_strings (words[1], "binary_big_endian")) - plyfile->file_type = PLY_BINARY_BE; - else if (equal_strings (words[1], "binary_little_endian")) - plyfile->file_type = PLY_BINARY_LE; - else { - free(words); - return (NULL); - } - plyfile->version = (float)atof (words[2]); - } - else if (equal_strings (words[0], "element")) - add_element (plyfile, words); - else if (equal_strings (words[0], "property")) - add_property (plyfile, words); - else if (equal_strings (words[0], "comment")) - add_comment (plyfile, orig_line); - else if (equal_strings (words[0], "obj_info")) - add_obj_info (plyfile, orig_line); - else if (equal_strings (words[0], "end_header")) { - free(words); - break; - } - - /* free up words space */ - free (words); - - words = get_words (plyfile->fp, &nwords, &orig_line); - } - - /* create tags for each property of each element, to be used */ - /* later to say whether or not to store each property for the user */ - - for (i = 0; i < plyfile->nelems; i++) { - elem = plyfile->elems[i]; - elem->store_prop = (char *) myalloc (sizeof (char) * elem->nprops); - for (j = 0; j < elem->nprops; j++) - elem->store_prop[j] = DONT_STORE_PROP; - elem->other_offset = NO_OTHER_PROPS; /* no "other" props by default */ - } - - /* set return values about the elements */ - - elist = (char **) myalloc (sizeof (char *) * plyfile->nelems); - for (i = 0; i < plyfile->nelems; i++) - elist[i] = _strdup (plyfile->elems[i]->name); - - *elem_names = elist; - *nelems = plyfile->nelems; - - /* return a pointer to the file's information */ - - return (plyfile); -} - - -/****************************************************************************** -Open a polygon file for reading. - - Entry: - filename - name of file to read from - - Exit: - nelems - number of elements in object - elem_names - list of element names - file_type - file type, either ascii or binary - version - version number of PLY file - returns a file identifier, used to refer to this file, or NULL if error - ******************************************************************************/ - - PlyFile *ply_open_for_reading( - char *filename, - int *nelems, - char ***elem_names, - int *file_type, - float *version - ) - { - FILE *fp; - PlyFile *plyfile; - char *name; - - /* tack on the extension .ply, if necessary */ - - name = (char *) myalloc (int(sizeof (char) * (strlen (filename) + 5))); - strcpy (name, filename); - if (strlen (name) < 4 || - strcmp (name + strlen (name) - 4, ".ply") != 0) - strcat (name, ".ply"); - - /* open the file for reading */ - - fp = fopen (name, "rb"); - if (fp == NULL) - return (NULL); - - /* create the PlyFile data structure */ - - plyfile = ply_read (fp, nelems, elem_names); - - /* determine the file type and version */ - - *file_type = plyfile->file_type; - *version = plyfile->version; - - /* return a pointer to the file's information */ - - free(name); - return (plyfile); - } - - - /****************************************************************************** - Get information about a particular element. - - Entry: - plyfile - file identifier - elem_name - name of element to get information about - - Exit: - nelems - number of elements of this type in the file - nprops - number of properties - returns a list of properties, or NULL if the file doesn't contain that elem - ******************************************************************************/ - - PlyProperty **ply_get_element_description( - PlyFile *plyfile, - char *elem_name, - int *nelems, - int *nprops - ) - { - int i; - PlyElement *elem; - PlyProperty *prop; - PlyProperty **prop_list; - - /* find information about the element */ - elem = find_element (plyfile, elem_name); - if (elem == NULL) - return (NULL); - - *nelems = elem->num; - *nprops = elem->nprops; - - /* make a copy of the element's property list */ - prop_list = (PlyProperty **) myalloc (sizeof (PlyProperty *) * elem->nprops); - for (i = 0; i < elem->nprops; i++) { - prop = (PlyProperty *) myalloc (sizeof (PlyProperty)); - copy_property (prop, elem->props[i]); - prop_list[i] = prop; - } - - /* return this duplicate property list */ - return (prop_list); - } - - - /****************************************************************************** - Specify which properties of an element are to be returned. This should be - called before a call to the routine ply_get_element(). - - Entry: - plyfile - file identifier - elem_name - which element we're talking about - nprops - number of properties - prop_list - list of properties - ******************************************************************************/ - - void ply_get_element_setup( - PlyFile *plyfile, - char *elem_name, - int nprops, - PlyProperty *prop_list - ) - { - int i; - PlyElement *elem; - PlyProperty *prop; - int index; - - /* find information about the element */ - elem = find_element (plyfile, elem_name); - plyfile->which_elem = elem; - - /* deposit the property information into the element's description */ - for (i = 0; i < nprops; i++) { - - /* look for actual property */ - prop = find_property (elem, prop_list[i].name, &index); - if (prop == NULL) { - fprintf (stderr, "Warning: Can't find property '%s' in element '%s'\n", - prop_list[i].name, elem_name); - continue; - } - - /* store its description */ - prop->internal_type = prop_list[i].internal_type; - prop->offset = prop_list[i].offset; - prop->count_internal = prop_list[i].count_internal; - prop->count_offset = prop_list[i].count_offset; - - /* specify that the user wants this property */ - elem->store_prop[index] = STORE_PROP; - } - } - - - /****************************************************************************** - Specify a property of an element that is to be returned. This should be - called (usually multiple times) before a call to the routine ply_get_element(). - This routine should be used in preference to the less flexible old routine - called ply_get_element_setup(). - - Entry: - plyfile - file identifier - elem_name - which element we're talking about - prop - property to add to those that will be returned - ******************************************************************************/ - - int ply_get_property( - PlyFile *plyfile, - char *elem_name, - PlyProperty *prop - ) - { - PlyElement *elem; - PlyProperty *prop_ptr; - int index; - - /* find information about the element */ - elem = find_element (plyfile, elem_name); - plyfile->which_elem = elem; - - /* deposit the property information into the element's description */ - - prop_ptr = find_property (elem, prop->name, &index); - if (prop_ptr == NULL) { -// fprintf (stderr, "Warning: Can't find property '%s' in element '%s'\n", -// prop->name, elem_name); -// return; - return 0; - } - prop_ptr->internal_type = prop->internal_type; - prop_ptr->offset = prop->offset; - prop_ptr->count_internal = prop->count_internal; - prop_ptr->count_offset = prop->count_offset; - - /* specify that the user wants this property */ - elem->store_prop[index] = STORE_PROP; - return 1; - } - - - /****************************************************************************** - Read one element from the file. This routine assumes that we're reading - the type of element specified in the last call to the routine - ply_get_element_setup(). - - Entry: - plyfile - file identifier - elem_ptr - pointer to location where the element information should be put - ******************************************************************************/ - - void ply_get_element(PlyFile *plyfile, void *elem_ptr) - { - if (plyfile->file_type == PLY_ASCII) - ascii_get_element (plyfile, (char *) elem_ptr); - else - binary_get_element (plyfile, (char *) elem_ptr); - } - - - /****************************************************************************** - Extract the comments from the header information of a PLY file. - - Entry: - plyfile - file identifier - - Exit: - num_comments - number of comments returned - returns a pointer to a list of comments - ******************************************************************************/ - - char **ply_get_comments(PlyFile *plyfile, int *num_comments) - { - *num_comments = plyfile->num_comments; - return (plyfile->comments); - } - - - /****************************************************************************** - Extract the object information (arbitrary text) from the header information - of a PLY file. - - Entry: - plyfile - file identifier - - Exit: - num_obj_info - number of lines of text information returned - returns a pointer to a list of object info lines - ******************************************************************************/ - - char **ply_get_obj_info(PlyFile *plyfile, int *num_obj_info) - { - *num_obj_info = plyfile->num_obj_info; - return (plyfile->obj_info); - } - - - /****************************************************************************** - Make ready for "other" properties of an element-- those properties that - the user has not explicitly asked for, but that are to be stashed away - in a special structure to be carried along with the element's other - information. - - Entry: - plyfile - file identifier - elem - element for which we want to save away other properties - ******************************************************************************/ - - void setup_other_props(PlyElement *elem) - { - int i; - PlyProperty *prop; - int size = 0; - int type_size; - - /* Examine each property in decreasing order of size. */ - /* We do this so that all data types will be aligned by */ - /* word, half-word, or whatever within the structure. */ - - for (type_size = 8; type_size > 0; type_size /= 2) { - - /* add up the space taken by each property, and save this information */ - /* away in the property descriptor */ - - for (i = 0; i < elem->nprops; i++) { - - /* don't bother with properties we've been asked to store explicitly */ - if (elem->store_prop[i]) - continue; - - prop = elem->props[i]; - - /* internal types will be same as external */ - prop->internal_type = prop->external_type; - prop->count_internal = prop->count_external; - - /* check list case */ - if (prop->is_list) { - - /* pointer to list */ - if (type_size == sizeof (void *)) { - prop->offset = size; - size += sizeof (void *); /* always use size of a pointer here */ - } - - /* count of number of list elements */ - if (type_size == ply_type_size[prop->count_external]) { - prop->count_offset = size; - size += ply_type_size[prop->count_external]; - } - } - /* not list */ - else if (type_size == ply_type_size[prop->external_type]) { - prop->offset = size; - size += ply_type_size[prop->external_type]; - } - } - - } - - /* save the size for the other_props structure */ - elem->other_size = size; - } - - - /****************************************************************************** - Specify that we want the "other" properties of an element to be tucked - away within the user's structure. The user needn't be concerned for how - these properties are stored. - - Entry: - plyfile - file identifier - elem_name - name of element that we want to store other_props in - offset - offset to where other_props will be stored inside user's structure - - Exit: - returns pointer to structure containing description of other_props - ******************************************************************************/ - - PlyOtherProp *ply_get_other_properties( - PlyFile *plyfile, - char *elem_name, - int offset - ) - { - int i; - PlyElement *elem; - PlyOtherProp *other; - PlyProperty *prop; - int nprops; - - /* find information about the element */ - elem = find_element (plyfile, elem_name); - if (elem == NULL) { - fprintf (stderr, "ply_get_other_properties: Can't find element '%s'\n", - elem_name); - return (NULL); - } - - /* remember that this is the "current" element */ - plyfile->which_elem = elem; - - /* save the offset to where to store the other_props */ - elem->other_offset = offset; - - /* place the appropriate pointers, etc. in the element's property list */ - setup_other_props (elem); - - /* create structure for describing other_props */ - other = (PlyOtherProp *) myalloc (sizeof (PlyOtherProp)); - other->name = _strdup (elem_name); - other->size = elem->other_size; - other->props = (PlyProperty **) myalloc (sizeof(PlyProperty) * elem->nprops); - - /* save descriptions of each "other" property */ - nprops = 0; - for (i = 0; i < elem->nprops; i++) { - if (elem->store_prop[i]) - continue; - prop = (PlyProperty *) myalloc (sizeof (PlyProperty)); - copy_property (prop, elem->props[i]); - other->props[nprops] = prop; - nprops++; - } - other->nprops = nprops; - - /* set other_offset pointer appropriately if there are NO other properties */ - if (other->nprops == 0) { - elem->other_offset = NO_OTHER_PROPS; - } - - /* return structure */ - return (other); - } - - - - - /*************************/ - /* Other Element Stuff */ - /*************************/ - - - - - /****************************************************************************** - Grab all the data for an element that a user does not want to explicitly - read in. - - Entry: - plyfile - pointer to file - elem_name - name of element whose data is to be read in - elem_count - number of instances of this element stored in the file - - Exit: - returns pointer to ALL the "other" element data for this PLY file - ******************************************************************************/ - - PlyOtherElems *ply_get_other_element ( - PlyFile *plyfile, - char *elem_name, - int elem_count - ) - { - int i; - PlyElement *elem; - PlyOtherElems *other_elems; - OtherElem *other; - - /* look for appropriate element */ - elem = find_element (plyfile, elem_name); - if (elem == NULL) { - fprintf (stderr, - "ply_get_other_element: can't find element '%s'\n", elem_name); - exit (-1); - } - - /* create room for the new "other" element, initializing the */ - /* other data structure if necessary */ - - if (plyfile->other_elems == NULL) { - plyfile->other_elems = (PlyOtherElems *) myalloc (sizeof (PlyOtherElems)); - other_elems = plyfile->other_elems; - other_elems->other_list = (OtherElem *) myalloc (sizeof (OtherElem)); - other = &(other_elems->other_list[0]); - other_elems->num_elems = 1; - } - else { - other_elems = plyfile->other_elems; - other_elems->other_list = (OtherElem *) realloc (other_elems->other_list, - sizeof (OtherElem) * other_elems->num_elems + 1); - other = &(other_elems->other_list[other_elems->num_elems]); - other_elems->num_elems++; - } - - /* count of element instances in file */ - other->elem_count = elem_count; - - /* save name of element */ - other->elem_name = _strdup (elem_name); - - /* create a list to hold all the current elements */ - other->other_data = (OtherData **) - malloc (sizeof (OtherData *) * other->elem_count); - - /* set up for getting elements */ - other->other_props = ply_get_other_properties (plyfile, elem_name, - offsetof(OtherData,other_props)); - - /* grab all these elements */ - for (i = 0; i < other->elem_count; i++) { - /* grab and element from the file */ - other->other_data[i] = (OtherData *) malloc (sizeof (OtherData)); - ply_get_element (plyfile, (void *) other->other_data[i]); - } - - /* return pointer to the other elements data */ - return (other_elems); - } - - - /****************************************************************************** - Pass along a pointer to "other" elements that we want to save in a given - PLY file. These other elements were presumably read from another PLY file. - - Entry: - plyfile - file pointer in which to store this other element info - other_elems - info about other elements that we want to store - ******************************************************************************/ - - void ply_describe_other_elements ( - PlyFile *plyfile, - PlyOtherElems *other_elems - ) - { - int i; - OtherElem *other; - PlyElement *elem; - - /* ignore this call if there is no other element */ - if (other_elems == NULL) - return; - - /* save pointer to this information */ - plyfile->other_elems = other_elems; - - /* describe the other properties of this element */ - /* store them in the main element list as elements with - only other properties */ - - REALLOCN(plyfile->elems, PlyElement *, - plyfile->nelems, plyfile->nelems + other_elems->num_elems); - for (i = 0; i < other_elems->num_elems; i++) { - other = &(other_elems->other_list[i]); - elem = (PlyElement *) myalloc (sizeof (PlyElement)); - plyfile->elems[plyfile->nelems++] = elem; - elem->name = _strdup (other->elem_name); - elem->num = other->elem_count; - elem->nprops = 0; - ply_describe_other_properties (plyfile, other->other_props, - offsetof(OtherData,other_props)); - } - } - - - /****************************************************************************** - Write out the "other" elements specified for this PLY file. - - Entry: - plyfile - pointer to PLY file to write out other elements for - ******************************************************************************/ - - void ply_put_other_elements (PlyFile *plyfile) - { - int i,j; - OtherElem *other; - - /* make sure we have other elements to write */ - if (plyfile->other_elems == NULL) - return; - - /* write out the data for each "other" element */ - - for (i = 0; i < plyfile->other_elems->num_elems; i++) { - - other = &(plyfile->other_elems->other_list[i]); - ply_put_element_setup (plyfile, other->elem_name); - - /* write out each instance of the current element */ - for (j = 0; j < other->elem_count; j++) - ply_put_element (plyfile, (void *) other->other_data[j]); - } - } - - - /****************************************************************************** - Free up storage used by an "other" elements data structure. - - Entry: - other_elems - data structure to free up - ******************************************************************************/ - - void ply_free_other_elements (PlyOtherElems *other_elems) - { - other_elems = other_elems; - } - - - - /*******************/ - /* Miscellaneous */ - /*******************/ - - - - /****************************************************************************** - Close a PLY file. - - Entry: - plyfile - identifier of file to close - ******************************************************************************/ - - void ply_close(PlyFile *plyfile) - { - fclose (plyfile->fp); - - /* free up memory associated with the PLY file */ - free (plyfile); - } - - - /****************************************************************************** - Get version number and file type of a PlyFile. - - Entry: - ply - pointer to PLY file - - Exit: - version - version of the file - file_type - PLY_ASCII, PLY_BINARY_BE, or PLY_BINARY_LE - ******************************************************************************/ - - void ply_get_info(PlyFile *ply, float *version, int *file_type) - { - if (ply == NULL) - return; - - *version = ply->version; - *file_type = ply->file_type; - } - - - /****************************************************************************** - Compare two strings. Returns 1 if they are the same, 0 if not. - ******************************************************************************/ - - int equal_strings(const char *s1, const char *s2) - { - - while (*s1 && *s2) - if (*s1++ != *s2++) - return (0); - - if (*s1 != *s2) - return (0); - else - return (1); - } - - - /****************************************************************************** - Find an element from the element list of a given PLY object. - - Entry: - plyfile - file id for PLY file - element - name of element we're looking for - - Exit: - returns the element, or NULL if not found - ******************************************************************************/ - - PlyElement *find_element(PlyFile *plyfile, const char *element) - { - int i; - - for (i = 0; i < plyfile->nelems; i++) - if (equal_strings (element, plyfile->elems[i]->name)) - return (plyfile->elems[i]); - - return (NULL); - } - - - /****************************************************************************** - Find a property in the list of properties of a given element. - - Entry: - elem - pointer to element in which we want to find the property - prop_name - name of property to find - - Exit: - index - index to position in list - returns a pointer to the property, or NULL if not found - ******************************************************************************/ - - PlyProperty *find_property(PlyElement *elem, const char *prop_name, int *index) - { - int i; - - for (i = 0; i < elem->nprops; i++) - if (equal_strings (prop_name, elem->props[i]->name)) { - *index = i; - return (elem->props[i]); - } - - *index = -1; - return (NULL); - } - - - /****************************************************************************** - Read an element from an ascii file. - - Entry: - plyfile - file identifier - elem_ptr - pointer to element - ******************************************************************************/ - - void ascii_get_element(PlyFile *plyfile, char *elem_ptr) - { - int j,k; - PlyElement *elem; - PlyProperty *prop; - char **words; - int nwords; - int which_word; - char *elem_data,*item=NULL; - char *item_ptr; - int item_size; - int int_val; - unsigned int uint_val; - double double_val; - int list_count; - int store_it; - char **store_array; - char *orig_line; - char *other_data=NULL; - int other_flag; - - /* the kind of element we're reading currently */ - elem = plyfile->which_elem; - - /* do we need to setup for other_props? */ - - if (elem->other_offset != NO_OTHER_PROPS) { - char **ptr; - other_flag = 1; - /* make room for other_props */ - other_data = (char *) myalloc (elem->other_size); - /* store pointer in user's structure to the other_props */ - ptr = (char **) (elem_ptr + elem->other_offset); - *ptr = other_data; - } - else - other_flag = 0; - - /* read in the element */ - - words = get_words (plyfile->fp, &nwords, &orig_line); - if (words == NULL) { - fprintf (stderr, "ply_get_element: unexpected end of file\n"); - exit (-1); - } - - which_word = 0; - - for (j = 0; j < elem->nprops; j++) { - - prop = elem->props[j]; - store_it = (elem->store_prop[j] | other_flag); - - /* store either in the user's structure or in other_props */ - if (elem->store_prop[j]) - elem_data = elem_ptr; - else - elem_data = other_data; - - if (prop->is_list) { /* a list */ - - /* get and store the number of items in the list */ - get_ascii_item (words[which_word++], prop->count_external, - &int_val, &uint_val, &double_val); - if (store_it) { - item = elem_data + prop->count_offset; - store_item(item, prop->count_internal, int_val, uint_val, double_val); - } - - /* allocate space for an array of items and store a ptr to the array */ - list_count = int_val; - item_size = ply_type_size[prop->internal_type]; - store_array = (char **) (elem_data + prop->offset); - - if (list_count == 0) { - if (store_it) - *store_array = NULL; - } - else { - if (store_it) { - item_ptr = (char *) myalloc (sizeof (char) * item_size * list_count); - item = item_ptr; - *store_array = item_ptr; - } - - /* read items and store them into the array */ - for (k = 0; k < list_count; k++) { - get_ascii_item (words[which_word++], prop->external_type, - &int_val, &uint_val, &double_val); - if (store_it) { - store_item (item, prop->internal_type, - int_val, uint_val, double_val); - item += item_size; - } - } - } - - } - else { /* not a list */ - get_ascii_item (words[which_word++], prop->external_type, - &int_val, &uint_val, &double_val); - if (store_it) { - item = elem_data + prop->offset; - store_item (item, prop->internal_type, int_val, uint_val, double_val); - } - } - - } - - free (words); -} - - -/****************************************************************************** -Read an element from a binary file. - - Entry: - plyfile - file identifier - elem_ptr - pointer to an element - ******************************************************************************/ - - void binary_get_element(PlyFile *plyfile, char *elem_ptr) - { - int j,k; - PlyElement *elem; - PlyProperty *prop; - FILE *fp = plyfile->fp; - char *elem_data,*item=NULL; - char *item_ptr; - int item_size; - int int_val; - unsigned int uint_val; - double double_val; - int list_count; - int store_it; - char **store_array; - char *other_data=NULL; - int other_flag; - - /* the kind of element we're reading currently */ - elem = plyfile->which_elem; - - /* do we need to setup for other_props? */ - - if (elem->other_offset != NO_OTHER_PROPS) { - char **ptr; - other_flag = 1; - /* make room for other_props */ - other_data = (char *) myalloc (elem->other_size); - /* store pointer in user's structure to the other_props */ - ptr = (char **) (elem_ptr + elem->other_offset); - *ptr = other_data; - } - else - other_flag = 0; - - /* read in a number of elements */ - - for (j = 0; j < elem->nprops; j++) { - - prop = elem->props[j]; - store_it = (elem->store_prop[j] | other_flag); - - /* store either in the user's structure or in other_props */ - if (elem->store_prop[j]) - elem_data = elem_ptr; - else - elem_data = other_data; - - if (prop->is_list) { /* a list */ - - /* get and store the number of items in the list */ - get_binary_item (fp, plyfile->file_type, prop->count_external, - &int_val, &uint_val, &double_val); - if (store_it) { - item = elem_data + prop->count_offset; - store_item(item, prop->count_internal, int_val, uint_val, double_val); - } - - /* allocate space for an array of items and store a ptr to the array */ - list_count = int_val; - item_size = ply_type_size[prop->internal_type]; - store_array = (char **) (elem_data + prop->offset); - if (list_count == 0) { - if (store_it) - *store_array = NULL; - } - else { - if (store_it) { - item_ptr = (char *) myalloc (sizeof (char) * item_size * list_count); - item = item_ptr; - *store_array = item_ptr; - } - - /* read items and store them into the array */ - for (k = 0; k < list_count; k++) { - get_binary_item (fp, plyfile->file_type, prop->external_type, - &int_val, &uint_val, &double_val); - if (store_it) { - store_item (item, prop->internal_type, - int_val, uint_val, double_val); - item += item_size; - } - } - } - - } - else { /* not a list */ - get_binary_item (fp, plyfile->file_type, prop->external_type, - &int_val, &uint_val, &double_val); - if (store_it) { - item = elem_data + prop->offset; - store_item (item, prop->internal_type, int_val, uint_val, double_val); - } - } - - } - } - - - /****************************************************************************** - Write to a file the word that represents a PLY data type. - - Entry: - fp - file pointer - code - code for type - ******************************************************************************/ - - void write_scalar_type (FILE *fp, int code) - { - /* make sure this is a valid code */ - - if (code <= PLY_START_TYPE || code >= PLY_END_TYPE) { - fprintf (stderr, "write_scalar_type: bad data code = %d\n", code); - exit (-1); - } - - /* write the code to a file */ - - fprintf (fp, "%s", type_names[code]); - } - - /****************************************************************************** - Reverse the order in an array of bytes. This is the conversion from big - endian to little endian and vice versa - - Entry: - bytes - array of bytes to reverse (in place) - num_bytes - number of bytes in array - ******************************************************************************/ - - void swap_bytes(char *bytes, int num_bytes) - { - int i; - char temp; - - for (i=0; i < num_bytes/2; i++) - { - temp = bytes[i]; - bytes[i] = bytes[(num_bytes-1)-i]; - bytes[(num_bytes-1)-i] = temp; - } - } - - /****************************************************************************** - Find out if this machine is big endian or little endian - - Exit: - set global variable, native_binary_type = - either PLY_BINARY_BE or PLY_BINARY_LE - - ******************************************************************************/ - - void get_native_binary_type() - { - endian_test_type test; - - test.int_value = 0; - test.int_value = 1; - if (test.byte_values[0] == 1) - native_binary_type = PLY_BINARY_LE; - else if (test.byte_values[sizeof(int)-1] == 1) - native_binary_type = PLY_BINARY_BE; - else - { - fprintf(stderr, "ply: Couldn't determine machine endianness.\n"); - fprintf(stderr, "ply: Exiting...\n"); - exit(1); - } - } - - /****************************************************************************** - Verify that all the native types are the sizes we need - - - ******************************************************************************/ - - void check_types() - { - if ((ply_type_size[PLY_CHAR] != sizeof(char)) || - (ply_type_size[PLY_SHORT] != sizeof(short)) || - (ply_type_size[PLY_INT] != sizeof(int)) || - (ply_type_size[PLY_UCHAR] != sizeof(unsigned char)) || - (ply_type_size[PLY_USHORT] != sizeof(unsigned short)) || - (ply_type_size[PLY_UINT] != sizeof(unsigned int)) || - (ply_type_size[PLY_FLOAT] != sizeof(float)) || - (ply_type_size[PLY_DOUBLE] != sizeof(double))) - { - fprintf(stderr, "ply: Type sizes do not match built-in types\n"); - fprintf(stderr, "ply: Exiting...\n"); - exit(1); - } - - types_checked = 1; - } - - /****************************************************************************** - Get a text line from a file and break it up into words. - - IMPORTANT: The calling routine call "free" on the returned pointer once - finished with it. - - Entry: - fp - file to read from - - Exit: - nwords - number of words returned - orig_line - the original line of characters - returns a list of words from the line, or NULL if end-of-file - ******************************************************************************/ - - char **get_words(FILE *fp, int *nwords, char **orig_line) - { -#define BIG_STRING 4096 - static char str[BIG_STRING]; - static char str_copy[BIG_STRING]; - char **words; - int max_words = 10; - int num_words = 0; - char *ptr,*ptr2; - char *result; - - words = (char **) myalloc (sizeof (char *) * max_words); - - /* read in a line */ - result = fgets (str, BIG_STRING, fp); - if (result == NULL) { - *nwords = 0; - *orig_line = NULL; - return (NULL); - } - /* convert line-feed and tabs into spaces */ - /* (this guarantees that there will be a space before the */ - /* null character at the end of the string) */ - - str[BIG_STRING-2] = ' '; - str[BIG_STRING-1] = '\0'; - - for (ptr = str, ptr2 = str_copy; *ptr != '\0'; ptr++, ptr2++) { - *ptr2 = *ptr; - // Added line here to manage carriage returns - if (*ptr == '\t' || *ptr == '\r') { - *ptr = ' '; - *ptr2 = ' '; - } - else if (*ptr == '\n') { - *ptr = ' '; - *ptr2 = '\0'; - break; - } - } - - /* find the words in the line */ - - ptr = str; - while (*ptr != '\0') { - - /* jump over leading spaces */ - while (*ptr == ' ') - ptr++; - - /* break if we reach the end */ - if (*ptr == '\0') - break; - - /* save pointer to beginning of word */ - if (num_words >= max_words) { - max_words += 10; - words = (char **) realloc (words, sizeof (char *) * max_words); - } - words[num_words++] = ptr; - - /* jump over non-spaces */ - while (*ptr != ' ') - ptr++; - - /* place a null character here to mark the end of the word */ - *ptr++ = '\0'; - } - - /* return the list of words */ - *nwords = num_words; - *orig_line = str_copy; - return (words); - } - - - /****************************************************************************** - Return the value of an item, given a pointer to it and its type. - - Entry: - item - pointer to item - type - data type that "item" points to - - Exit: - returns a double-precision float that contains the value of the item - ******************************************************************************/ - - double get_item_value(char *item, int type) - { - unsigned char *puchar; - char *pchar; - short int *pshort; - unsigned short int *pushort; - int *pint; - unsigned int *puint; - float *pfloat; - double *pdouble; - int int_value; - unsigned int uint_value; - double double_value; - - switch (type) { - case PLY_CHAR: - case PLY_INT_8: - pchar = (char *) item; - int_value = *pchar; - return ((double) int_value); - case PLY_UCHAR: - case PLY_UINT_8: - puchar = (unsigned char *) item; - int_value = *puchar; - return ((double) int_value); - case PLY_SHORT: - case PLY_INT_16: - pshort = (short int *) item; - int_value = *pshort; - return ((double) int_value); - case PLY_USHORT: - case PLY_UINT_16: - pushort = (unsigned short int *) item; - int_value = *pushort; - return ((double) int_value); - case PLY_INT: - case PLY_INT_32: - pint = (int *) item; - int_value = *pint; - return ((double) int_value); - case PLY_UINT: - case PLY_UINT_32: - puint = (unsigned int *) item; - uint_value = *puint; - return ((double) uint_value); - case PLY_FLOAT: - case PLY_FLOAT_32: - pfloat = (float *) item; - double_value = *pfloat; - return (double_value); - case PLY_DOUBLE: - case PLY_FLOAT_64: - pdouble = (double *) item; - double_value = *pdouble; - return (double_value); - default: - fprintf (stderr, "get_item_value: bad type = %d\n", type); - exit (-1); - } - } - - - /****************************************************************************** - Write out an item to a file as raw binary bytes. - - Entry: - fp - file to write to - int_val - integer version of item - uint_val - unsigned integer version of item - double_val - double-precision float version of item - type - data type to write out - ******************************************************************************/ - - void write_binary_item( - FILE *fp, - int file_type, - int int_val, - unsigned int uint_val, - double double_val, - int type - ) - { - unsigned char uchar_val; - char char_val; - unsigned short ushort_val; - short short_val; - float float_val; - void *value; - - switch (type) { - case PLY_CHAR: - case PLY_INT_8: - char_val = char(int_val); - value = &char_val; - break; - case PLY_SHORT: - case PLY_INT_16: - short_val = short(int_val); - value = &short_val; - break; - case PLY_INT: - case PLY_INT_32: - value = &int_val; - break; - case PLY_UCHAR: - case PLY_UINT_8: - uchar_val = (unsigned char)(uint_val); - value = &uchar_val; - break; - case PLY_USHORT: - case PLY_UINT_16: - ushort_val = (unsigned short)(uint_val); - value = &ushort_val; - break; - case PLY_UINT: - case PLY_UINT_32: - value = &uint_val; - break; - case PLY_FLOAT: - case PLY_FLOAT_32: - float_val = (float)double_val; - value = &float_val; - break; - case PLY_DOUBLE: - case PLY_FLOAT_64: - value = &double_val; - break; - default: - fprintf (stderr, "write_binary_item: bad type = %d\n", type); - exit (-1); - } - - - if ((file_type != native_binary_type) && (ply_type_size[type] > 1)) - swap_bytes((char *)value, ply_type_size[type]); - - if (fwrite (value, ply_type_size[type], 1, fp) != 1) - { - fprintf(stderr, "PLY ERROR: fwrite() failed -- aborting.\n"); - exit(1); - } - } - - - /****************************************************************************** - Write out an item to a file as ascii characters. - - Entry: - fp - file to write to - int_val - integer version of item - uint_val - unsigned integer version of item - double_val - double-precision float version of item - type - data type to write out - ******************************************************************************/ - - void write_ascii_item( - FILE *fp, - int int_val, - unsigned int uint_val, - double double_val, - int type - ) - { - switch (type) { - case PLY_CHAR: - case PLY_INT_8: - case PLY_SHORT: - case PLY_INT_16: - case PLY_INT: - case PLY_INT_32: - if (fprintf (fp, "%d ", int_val) <= 0) - { - fprintf(stderr, "PLY ERROR: fprintf() failed -- aborting.\n"); - exit(1); - } - break; - case PLY_UCHAR: - case PLY_UINT_8: - case PLY_USHORT: - case PLY_UINT_16: - case PLY_UINT: - case PLY_UINT_32: - - if (fprintf (fp, "%u ", uint_val) <= 0) - { - fprintf(stderr, "PLY ERROR: fprintf() failed -- aborting.\n"); - exit(1); - } - break; - case PLY_FLOAT: - case PLY_FLOAT_32: - case PLY_DOUBLE: - case PLY_FLOAT_64: - if (fprintf (fp, "%g ", double_val) <= 0) - { - fprintf(stderr, "PLY ERROR: fprintf() failed -- aborting.\n"); - exit(1); - } - break; - default: - fprintf (stderr, "write_ascii_item: bad type = %d\n", type); - exit (-1); - } - } - - - /****************************************************************************** - Write out an item to a file as ascii characters. - - Entry: - fp - file to write to - item - pointer to item to write - type - data type that "item" points to - - Exit: - returns a double-precision float that contains the value of the written item - ******************************************************************************/ - - double old_write_ascii_item(FILE *fp, char *item, int type) - { - unsigned char *puchar; - char *pchar; - short int *pshort; - unsigned short int *pushort; - int *pint; - unsigned int *puint; - float *pfloat; - double *pdouble; - int int_value; - unsigned int uint_value; - double double_value; - - switch (type) { - case PLY_CHAR: - case PLY_INT_8: - pchar = (char *) item; - int_value = *pchar; - fprintf (fp, "%d ", int_value); - return ((double) int_value); - case PLY_UCHAR: - case PLY_UINT_8: - puchar = (unsigned char *) item; - int_value = *puchar; - fprintf (fp, "%d ", int_value); - return ((double) int_value); - case PLY_SHORT: - case PLY_INT_16: - pshort = (short int *) item; - int_value = *pshort; - fprintf (fp, "%d ", int_value); - return ((double) int_value); - case PLY_USHORT: - case PLY_UINT_16: - pushort = (unsigned short int *) item; - int_value = *pushort; - fprintf (fp, "%d ", int_value); - return ((double) int_value); - case PLY_INT: - case PLY_INT_32: - pint = (int *) item; - int_value = *pint; - fprintf (fp, "%d ", int_value); - return ((double) int_value); - case PLY_UINT: - case PLY_UINT_32: - puint = (unsigned int *) item; - uint_value = *puint; - fprintf (fp, "%u ", uint_value); - return ((double) uint_value); - case PLY_FLOAT: - case PLY_FLOAT_32: - pfloat = (float *) item; - double_value = *pfloat; - fprintf (fp, "%g ", double_value); - return (double_value); - case PLY_DOUBLE: - case PLY_FLOAT_64: - pdouble = (double *) item; - double_value = *pdouble; - fprintf (fp, "%g ", double_value); - return (double_value); - default: - fprintf (stderr, "old_write_ascii_item: bad type = %d\n", type); - exit (-1); - } - } - - - /****************************************************************************** - Get the value of an item that is in memory, and place the result - into an integer, an unsigned integer and a double. - - Entry: - ptr - pointer to the item - type - data type supposedly in the item - - Exit: - int_val - integer value - uint_val - unsigned integer value - double_val - double-precision floating point value - ******************************************************************************/ - - void get_stored_item( - void *ptr, - int type, - int *int_val, - unsigned int *uint_val, - double *double_val - ) - { - switch (type) { - case PLY_CHAR: - case PLY_INT_8: - *int_val = *((char *) ptr); - *uint_val = *int_val; - *double_val = *int_val; - break; - case PLY_UCHAR: - case PLY_UINT_8: - *uint_val = *((unsigned char *) ptr); - *int_val = *uint_val; - *double_val = *uint_val; - break; - case PLY_SHORT: - case PLY_INT_16: - *int_val = *((short int *) ptr); - *uint_val = *int_val; - *double_val = *int_val; - break; - case PLY_USHORT: - case PLY_UINT_16: - *uint_val = *((unsigned short int *) ptr); - *int_val = *uint_val; - *double_val = *uint_val; - break; - case PLY_INT: - case PLY_INT_32: - *int_val = *((int *) ptr); - *uint_val = *int_val; - *double_val = *int_val; - break; - case PLY_UINT: - case PLY_UINT_32: - *uint_val = *((unsigned int *) ptr); - *int_val = *uint_val; - *double_val = *uint_val; - break; - case PLY_FLOAT: - case PLY_FLOAT_32: - *double_val = *((float *) ptr); - *int_val = (int) *double_val; - *uint_val = (unsigned int) *double_val; - break; - case PLY_DOUBLE: - case PLY_FLOAT_64: - *double_val = *((double *) ptr); - *int_val = (int) *double_val; - *uint_val = (unsigned int) *double_val; - break; - default: - fprintf (stderr, "get_stored_item: bad type = %d\n", type); - exit (-1); - } - } - - - /****************************************************************************** - Get the value of an item from a binary file, and place the result - into an integer, an unsigned integer and a double. - - Entry: - fp - file to get item from - type - data type supposedly in the word - - Exit: - int_val - integer value - uint_val - unsigned integer value - double_val - double-precision floating point value - ******************************************************************************/ - - void get_binary_item( - FILE *fp, - int file_type, - int type, - int *int_val, - unsigned int *uint_val, - double *double_val - ) - { - char c[8]; - void *ptr; - - ptr = (void *) c; - - if (fread (ptr, ply_type_size[type], 1, fp) != 1) - { - fprintf(stderr, "PLY ERROR: fread() failed -- aborting.\n"); - exit(1); - } - - - if ((file_type != native_binary_type) && (ply_type_size[type] > 1)) - swap_bytes((char *)ptr, ply_type_size[type]); - - switch (type) { - case PLY_CHAR: - case PLY_INT_8: - *int_val = *((char *) ptr); - *uint_val = *int_val; - *double_val = *int_val; - break; - case PLY_UCHAR: - case PLY_UINT_8: - *uint_val = *((unsigned char *) ptr); - *int_val = *uint_val; - *double_val = *uint_val; - break; - case PLY_SHORT: - case PLY_INT_16: - *int_val = *((short int *) ptr); - *uint_val = *int_val; - *double_val = *int_val; - break; - case PLY_USHORT: - case PLY_UINT_16: - *uint_val = *((unsigned short int *) ptr); - *int_val = *uint_val; - *double_val = *uint_val; - break; - case PLY_INT: - case PLY_INT_32: - *int_val = *((int *) ptr); - *uint_val = *int_val; - *double_val = *int_val; - break; - case PLY_UINT: - case PLY_UINT_32: - *uint_val = *((unsigned int *) ptr); - *int_val = *uint_val; - *double_val = *uint_val; - break; - case PLY_FLOAT: - case PLY_FLOAT_32: - *double_val = *((float *) ptr); - *int_val = (int) *double_val; - *uint_val = (unsigned int) *double_val; - break; - case PLY_DOUBLE: - case PLY_FLOAT_64: - *double_val = *((double *) ptr); - *int_val = (int) *double_val; - *uint_val = (unsigned int) *double_val; - break; - default: - fprintf (stderr, "get_binary_item: bad type = %d\n", type); - exit (-1); - } - } - - - /****************************************************************************** - Extract the value of an item from an ascii word, and place the result - into an integer, an unsigned integer and a double. - - Entry: - word - word to extract value from - type - data type supposedly in the word - - Exit: - int_val - integer value - uint_val - unsigned integer value - double_val - double-precision floating point value - ******************************************************************************/ - - void get_ascii_item( - char *word, - int type, - int *int_val, - unsigned int *uint_val, - double *double_val - ) - { - switch (type) { - case PLY_CHAR: - case PLY_INT_8: - case PLY_UCHAR: - case PLY_UINT_8: - case PLY_SHORT: - case PLY_INT_16: - case PLY_USHORT: - case PLY_UINT_16: - case PLY_INT: - case PLY_INT_32: - *int_val = atoi (word); - *uint_val = (unsigned int) *int_val; - *double_val = (double) *int_val; - break; - - case PLY_UINT: - case PLY_UINT_32: - *uint_val = strtol (word, (char **) NULL, 10); - *int_val = (int) *uint_val; - *double_val = (double) *uint_val; - break; - - case PLY_FLOAT: - case PLY_FLOAT_32: - case PLY_DOUBLE: - case PLY_FLOAT_64: - *double_val = atof (word); - *int_val = (int) *double_val; - *uint_val = (unsigned int) *double_val; - break; - - default: - fprintf (stderr, "get_ascii_item: bad type = %d\n", type); - exit (-1); - } - } - - - /****************************************************************************** - Store a value into a place being pointed to, guided by a data type. - - Entry: - item - place to store value - type - data type - int_val - integer version of value - uint_val - unsigned integer version of value - double_val - double version of value - - Exit: - item - pointer to stored value - ******************************************************************************/ - - void store_item ( - char *item, - int type, - int int_val, - unsigned int uint_val, - double double_val - ) - { - unsigned char *puchar; - short int *pshort; - unsigned short int *pushort; - int *pint; - unsigned int *puint; - float *pfloat; - double *pdouble; - - - switch (type) { - case PLY_CHAR: - case PLY_INT_8: - *item = char(int_val); - break; - case PLY_UCHAR: - case PLY_UINT_8: - puchar = (unsigned char *) item; - *puchar = (unsigned char)(uint_val); - break; - case PLY_SHORT: - case PLY_INT_16: - pshort = (short *) item; - *pshort = short(int_val); - break; - case PLY_USHORT: - case PLY_UINT_16: - pushort = (unsigned short *) item; - *pushort = (unsigned short)(uint_val); - break; - case PLY_INT: - case PLY_INT_32: - pint = (int *) item; - *pint = int_val; - break; - case PLY_UINT: - case PLY_UINT_32: - puint = (unsigned int *) item; - *puint = uint_val; - break; - case PLY_FLOAT: - case PLY_FLOAT_32: - pfloat = (float *) item; - *pfloat = (float)double_val; - break; - case PLY_DOUBLE: - case PLY_FLOAT_64: - pdouble = (double *) item; - *pdouble = double_val; - break; - default: - fprintf (stderr, "store_item: bad type = %d\n", type); - exit (-1); - } - } - - - /****************************************************************************** - Add an element to a PLY file descriptor. - - Entry: - plyfile - PLY file descriptor - words - list of words describing the element - nwords - number of words in the list - ******************************************************************************/ - - void add_element (PlyFile *plyfile, char **words) - { - PlyElement *elem; - - /* create the new element */ - elem = (PlyElement *) myalloc (sizeof (PlyElement)); - elem->name = _strdup (words[1]); - elem->num = atoi (words[2]); - elem->nprops = 0; - - /* make room for new element in the object's list of elements */ - if (plyfile->nelems == 0) - plyfile->elems = (PlyElement **) myalloc (sizeof (PlyElement *)); - else - plyfile->elems = (PlyElement **) realloc (plyfile->elems, - sizeof (PlyElement *) * (plyfile->nelems + 1)); - - /* add the new element to the object's list */ - plyfile->elems[plyfile->nelems] = elem; - plyfile->nelems++; - } - - - /****************************************************************************** - Return the type of a property, given the name of the property. - - Entry: - name - name of property type - - Exit: - returns integer code for property, or 0 if not found - ******************************************************************************/ - - int get_prop_type(char *type_name) - { - int i; - - for (i = PLY_START_TYPE + 1; i < PLY_END_TYPE; i++) - if (equal_strings (type_name, type_names[i])) - return (i); - - /* if we get here, we didn't find the type */ - return (0); - } - - - /****************************************************************************** - Add a property to a PLY file descriptor. - - Entry: - plyfile - PLY file descriptor - words - list of words describing the property - nwords - number of words in the list - ******************************************************************************/ - - void add_property (PlyFile *plyfile, char **words) - { - PlyProperty *prop; - PlyElement *elem; - - /* create the new property */ - - prop = (PlyProperty *) myalloc (sizeof (PlyProperty)); - - if (equal_strings (words[1], "list")) { /* is a list */ - prop->count_external = get_prop_type (words[2]); - prop->external_type = get_prop_type (words[3]); - prop->name = _strdup (words[4]); - prop->is_list = 1; - } - else { /* not a list */ - prop->external_type = get_prop_type (words[1]); - prop->name = _strdup (words[2]); - prop->is_list = 0; - } - - /* add this property to the list of properties of the current element */ - - elem = plyfile->elems[plyfile->nelems - 1]; - - if (elem->nprops == 0) - elem->props = (PlyProperty **) myalloc (sizeof (PlyProperty *)); - else - elem->props = (PlyProperty **) realloc (elem->props, - sizeof (PlyProperty *) * (elem->nprops + 1)); - - elem->props[elem->nprops] = prop; - elem->nprops++; - } - - - /****************************************************************************** - Add a comment to a PLY file descriptor. - - Entry: - plyfile - PLY file descriptor - line - line containing comment - ******************************************************************************/ - - void add_comment (PlyFile *plyfile, char *line) - { - int i; - - /* skip over "comment" and leading spaces and tabs */ - i = 7; - while (line[i] == ' ' || line[i] == '\t') - i++; - - ply_put_comment (plyfile, &line[i]); - } - - - /****************************************************************************** - Add a some object information to a PLY file descriptor. - - Entry: - plyfile - PLY file descriptor - line - line containing text info - ******************************************************************************/ - - void add_obj_info (PlyFile *plyfile, char *line) - { - int i; - - /* skip over "obj_info" and leading spaces and tabs */ - i = 8; - while (line[i] == ' ' || line[i] == '\t') - i++; - - ply_put_obj_info (plyfile, &line[i]); - } - - - /****************************************************************************** - Copy a property. - ******************************************************************************/ - - void copy_property(PlyProperty *dest, PlyProperty *src) - { - dest->name = _strdup (src->name); - dest->external_type = src->external_type; - dest->internal_type = src->internal_type; - dest->offset = src->offset; - - dest->is_list = src->is_list; - dest->count_external = src->count_external; - dest->count_internal = src->count_internal; - dest->count_offset = src->count_offset; - } - - - /****************************************************************************** - Allocate some memory. - - Entry: - size - amount of memory requested (in bytes) - lnum - line number from which memory was requested - fname - file name from which memory was requested - ******************************************************************************/ - - char *my_alloc(int size, int lnum, const char *fname) - { - char *ptr; - - ptr = (char *) malloc (size); - - if (ptr == 0) { - fprintf(stderr, "Memory allocation bombed on line %d in %s\n", lnum, fname); - } - - return (ptr); - } - diff --git a/src/other/libspsr/Src/PoissonRecon.cpp b/src/other/libspsr/Src/PoissonRecon.cpp deleted file mode 100644 index 5d050e58384..00000000000 --- a/src/other/libspsr/Src/PoissonRecon.cpp +++ /dev/null @@ -1,478 +0,0 @@ -/* -Copyright (c) 2006, Michael Kazhdan and Matthew Bolitho -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. Redistributions in binary form must reproduce -the above copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the distribution. - -Neither the name of the Johns Hopkins University nor the names of its contributors -may be used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. -*/ - -#include -#include -#include -#include -#ifdef _WIN32 -#include -#include -#endif // _WIN32 -#include "MyTime.h" -#include "MarchingCubes.h" -#include "Octree.h" -#include "SparseMatrix.h" -#include "CmdLineParser.h" -#include "PPolynomial.h" -#include "Ply.h" -#include "MemoryUsage.h" -#ifdef _OPENMP -#include "omp.h" -#endif // _OPENMP -void DumpOutput( const char* format , ... ); -void DumpOutput2( char* str , const char* format , ... ); -#include "MultiGridOctreeData.h" - -#define DEFAULT_FULL_DEPTH 5 - -#define XSTR(x) STR(x) -#define STR(x) #x -#if DEFAULT_FULL_DEPTH -#pragma message ( "[WARNING] Setting default full depth to " XSTR(DEFAULT_FULL_DEPTH) ) -#endif // DEFAULT_FULL_DEPTH - -#include -char* outputFile=NULL; -int echoStdout=0; -void DumpOutput( const char* format , ... ) -{ - if( outputFile ) - { - FILE* fp = fopen( outputFile , "a" ); - va_list args; - va_start( args , format ); - vfprintf( fp , format , args ); - fclose( fp ); - va_end( args ); - } - if( echoStdout ) - { - va_list args; - va_start( args , format ); - vprintf( format , args ); - va_end( args ); - } -} -void DumpOutput2( char* str , const char* format , ... ) -{ - if( outputFile ) - { - FILE* fp = fopen( outputFile , "a" ); - va_list args; - va_start( args , format ); - vfprintf( fp , format , args ); - fclose( fp ); - va_end( args ); - } - if( echoStdout ) - { - va_list args; - va_start( args , format ); - vprintf( format , args ); - va_end( args ); - } - va_list args; - va_start( args , format ); - vsprintf( str , format , args ); - va_end( args ); - if( str[strlen(str)-1]=='\n' ) str[strlen(str)-1] = 0; -} - - -cmdLineString - In( "in" ) , - Out( "out" ) , - VoxelGrid( "voxel" ) , - XForm( "xForm" ); - -cmdLineReadable -#ifdef _WIN32 - Performance( "performance" ) , -#endif // _WIN32 - Complete( "complete" ) , - ShowResidual( "showResidual" ) , - NoComments( "noComments" ) , - PolygonMesh( "polygonMesh" ) , - Confidence( "confidence" ) , - NormalWeights( "nWeights" ) , - NonManifold( "nonManifold" ) , - ASCII( "ascii" ) , - Density( "density" ) , - Verbose( "verbose" ) , - Double( "double" ); - -cmdLineInt - Depth( "depth" , 8 ) , - CGDepth( "cgDepth" , 0 ) , - KernelDepth( "kernelDepth" ) , - AdaptiveExponent( "adaptiveExp" , 1 ) , - Iters( "iters" , 8 ) , - VoxelDepth( "voxelDepth" , -1 ) , - FullDepth( "fullDepth" , DEFAULT_FULL_DEPTH ) , - MinDepth( "minDepth" , 0 ) , - MaxSolveDepth( "maxSolveDepth" ) , - BoundaryType( "boundary" , 1 ) , - Threads( "threads" , omp_get_num_procs() ); - -cmdLineFloat - SamplesPerNode( "samplesPerNode" , 1.f ) , - Scale( "scale" , 1.1f ) , - CSSolverAccuracy( "cgAccuracy" , float(1e-3) ) , - PointWeight( "pointWeight" , 4.f ); - - -cmdLineReadable* params[] = -{ - &In , &Depth , &Out , &XForm , - &Scale , &Verbose , &CSSolverAccuracy , &NoComments , &Double , - &KernelDepth , &SamplesPerNode , &Confidence , &NormalWeights , &NonManifold , &PolygonMesh , &ASCII , &ShowResidual , &VoxelDepth , - &PointWeight , &VoxelGrid , &Threads , &MaxSolveDepth , - &AdaptiveExponent , &BoundaryType , - &Density , - &FullDepth , - &MinDepth , - &CGDepth , &Iters , - &Complete , -#ifdef _WIN32 - &Performance , -#endif // _WIN32 -}; - - -void ShowUsage(char* ex) -{ - printf( "Usage: %s\n" , ex ); - printf( "\t --%s \n" , In.name ); - - printf( "\t[--%s ]\n" , Out.name ); - printf( "\t[--%s ]\n" , VoxelGrid.name ); - - printf( "\t[--%s =%d]\n" , Depth.name , Depth.value ); - printf( "\t\t Running at depth d corresponds to solving on a 2^d x 2^d x 2^d\n" ); - printf( "\t\t voxel grid.\n" ); - - printf( "\t[--%s =%d]\n" , FullDepth.name , FullDepth.value ); - printf( "\t\t This flag specifies the depth up to which the octree should be complete.\n" ); - - printf( "\t[--%s =<%s>]\n" , VoxelDepth.name , Depth.name ); - - printf( "\t[--%s =%d]\n" , CGDepth.name , CGDepth.value ); - printf( "\t\t The depth up to which a conjugate-gradients solver should be used.\n"); - - printf( "\t[--%s =%f]\n" , Scale.name , Scale.value ); - printf( "\t\t Specifies the factor of the bounding cube that the input\n" ); - printf( "\t\t samples should fit into.\n" ); - - printf( "\t[--%s =%f]\n" , SamplesPerNode.name, SamplesPerNode.value ); - printf( "\t\t This parameter specifies the minimum number of points that\n" ); - printf( "\t\t should fall within an octree node.\n" ); - - printf( "\t[--%s =%f]\n" , PointWeight.name , PointWeight.value ); - printf( "\t\t This value specifies the weight that point interpolation constraints are\n" ); - printf( "\t\t given when defining the (screened) Poisson system.\n" ); - - printf( "\t[--%s =%d]\n" , Iters.name , Iters.value ); - printf( "\t\t This flag specifies the (maximum if CG) number of solver iterations.\n" ); - -#ifdef _OPENMP - printf( "\t[--%s =%d]\n" , Threads.name , Threads.value ); - printf( "\t\t This parameter specifies the number of threads across which\n" ); - printf( "\t\t the solver should be parallelized.\n" ); -#endif // _OPENMP - - printf( "\t[--%s]\n" , Confidence.name ); - printf( "\t\t If this flag is enabled, the size of a sample's normals is\n" ); - printf( "\t\t used as a confidence value, affecting the sample's\n" ); - printf( "\t\t constribution to the reconstruction process.\n" ); - - printf( "\t[--%s]\n" , NormalWeights.name ); - printf( "\t\t If this flag is enabled, the size of a sample's normals is\n" ); - printf( "\t\t used as to modulate the interpolation weight.\n" ); - -#if 0 - printf( "\t[--%s]\n" , NonManifold.name ); - printf( "\t\t If this flag is enabled, the isosurface extraction does not add\n" ); - printf( "\t\t a planar polygon's barycenter in order to ensure that the output\n" ); - printf( "\t\t mesh is manifold.\n" ); -#endif - - printf( "\t[--%s]\n" , PolygonMesh.name); - printf( "\t\t If this flag is enabled, the isosurface extraction returns polygons\n" ); - printf( "\t\t rather than triangles.\n" ); - -#if 0 - printf( "\t[--%s =%d]\n" , MinDepth.name , MinDepth.value ); - printf( "\t\t This flag specifies the coarsest depth at which the system is to be solved.\n" ); - - printf( "\t[--%s =%g]\n" , CSSolverAccuracy.name , CSSolverAccuracy.value ); - printf( "\t\t This flag specifies the accuracy cut-off to be used for CG.\n" ); - - printf( "\t[--%s =%d]\n", AdaptiveExponent.name , AdaptiveExponent.value ); - printf( "\t\t This flag specifies the exponent scale for the adaptive weighting.\n" ); - -#ifdef _WIN32 - printf( "\t[--%s]\n" , Performance.name ); - printf( "\t\t If this flag is enabled, the running time and peak memory usage\n" ); - printf( "\t\t is output after the reconstruction.\n" ); -#endif // _WIN32 -#endif - - printf( "\t[--%s]\n" , Density.name ); - printf( "\t\t If this flag is enabled, the sampling density is written out with the vertices.\n" ); - -#if 0 - printf( "\t[--%s]\n" , ASCII.name ); - printf( "\t\t If this flag is enabled, the output file is written out in ASCII format.\n" ); - - printf( "\t[--%s]\n" , NoComments.name ); - printf( "\t\t If this flag is enabled, the output file will not include comments.\n" ); -#endif - - printf( "\t[--%s]\n" , Double.name ); - printf( "\t\t If this flag is enabled, the reconstruction will be performed with double-precision floats.\n" ); - - printf( "\t[--%s]\n" , Verbose.name ); - printf( "\t\t If this flag is enabled, the progress of the reconstructor will be output to STDOUT.\n" ); -} -template< class Real , class Vertex > -int Execute( int argc , char* argv[] ) -{ - Reset< Real >(); - int i; - int paramNum = sizeof(params)/sizeof(cmdLineReadable*); - int commentNum=0; - char **comments; - - comments = new char*[paramNum+7]; - for( i=0 ; i xForm , iXForm; - if( XForm.set ) - { - FILE* fp = fopen( XForm.value , "r" ); - if( !fp ) - { - fprintf( stderr , "[WARNING] Could not read x-form from: %s\n" , XForm.value ); - xForm = XForm4x4< Real >::Identity(); - } - else - { - for( int i=0 ; i<4 ; i++ ) for( int j=0 ; j<4 ; j++ ) - { - float f; - fscanf( fp , " %f " , &f ); - xForm(i,j) = (Real)f; - } - fclose( fp ); - } - } - else xForm = XForm4x4< Real >::Identity(); - iXForm = xForm.inverse(); - - DumpOutput2( comments[commentNum++] , "Running Screened Poisson Reconstruction (Version 6.13)\n" ); - char str[1024]; - for( int i=0 ; iset ) - { - params[i]->writeValue( str ); - if( strlen( str ) ) DumpOutput2( comments[commentNum++] , "\t--%s %s\n" , params[i]->name , str ); - else DumpOutput2( comments[commentNum++] , "\t--%s\n" , params[i]->name ); - } - - double t; - double tt=Time(); - Real isoValue = 0; - - Octree< Real > tree; - tree.threads = Threads.value; - if( !In.set ) - { - ShowUsage(argv[0]); - return 0; - } - if( !MaxSolveDepth.set ) MaxSolveDepth.value = Depth.value; - - OctNode< TreeNodeData >::SetAllocator( MEMORY_ALLOCATOR_BLOCK_SIZE ); - - t=Time(); - int kernelDepth = KernelDepth.set ? KernelDepth.value : Depth.value-2; - if( kernelDepth>Depth.value ) - { - fprintf( stderr,"[ERROR] %s can't be greater than %s: %d <= %d\n" , KernelDepth.name , Depth.name , KernelDepth.value , Depth.value ); - return EXIT_FAILURE; - } - - double maxMemoryUsage; - t=Time() , tree.maxMemoryUsage=0; - typename Octree< Real >::PointInfo* pointInfo = new typename Octree< Real >::PointInfo(); - typename Octree< Real >::NormalInfo* normalInfo = new typename Octree< Real >::NormalInfo(); - std::vector< Real >* kernelDensityWeights = new std::vector< Real >(); - std::vector< Real >* centerWeights = new std::vector< Real >(); - PointStream< float >* pointStream; - char* ext = GetFileExtension( In.value ); - if ( !strcasecmp( ext , "bnpts" ) ) pointStream = new BinaryPointStream< float >( In.value ); - else if( !strcasecmp( ext , "ply" ) ) pointStream = new PLYPointStream< float >( In.value ); - else pointStream = new ASCIIPointStream< float >( In.value ); - delete[] ext; - int pointCount = tree.template SetTree< float >( pointStream , MinDepth.value , Depth.value , FullDepth.value , kernelDepth , Real(SamplesPerNode.value) , Scale.value , Confidence.set , NormalWeights.set , PointWeight.value , AdaptiveExponent.value , *pointInfo , *normalInfo , *kernelDensityWeights , *centerWeights , BoundaryType.value , xForm , Complete.set ); - if( !Density.set ) delete kernelDensityWeights , kernelDensityWeights = NULL; - - DumpOutput2( comments[commentNum++] , "# Tree set in: %9.1f (s), %9.1f (MB)\n" , Time()-t , tree.maxMemoryUsage ); - DumpOutput( "Input Points: %d\n" , pointCount ); - DumpOutput( "Leaves/Nodes: %d/%d\n" , tree.tree.leaves() , tree.tree.nodes() ); - DumpOutput( "Memory Usage: %.3f MB\n" , float( MemoryInfo::Usage() )/(1<<20) ); - - maxMemoryUsage = tree.maxMemoryUsage; - t=Time() , tree.maxMemoryUsage=0; - Pointer( Real ) constraints = tree.SetLaplacianConstraints( *normalInfo ); - delete normalInfo; - DumpOutput2( comments[commentNum++] , "# Constraints set in: %9.1f (s), %9.1f (MB)\n" , Time()-t , tree.maxMemoryUsage ); - DumpOutput( "Memory Usage: %.3f MB\n" , float( MemoryInfo::Usage())/(1<<20) ); - maxMemoryUsage = std::max< double >( maxMemoryUsage , tree.maxMemoryUsage ); - - t=Time() , tree.maxMemoryUsage=0; - Pointer( Real ) solution = tree.SolveSystem( *pointInfo , constraints , ShowResidual.set , Iters.value , MaxSolveDepth.value , CGDepth.value , CSSolverAccuracy.value ); - delete pointInfo; - FreePointer( constraints ); - DumpOutput2( comments[commentNum++] , "# Linear system solved in: %9.1f (s), %9.1f (MB)\n" , Time()-t , tree.maxMemoryUsage ); - DumpOutput( "Memory Usage: %.3f MB\n" , float( MemoryInfo::Usage() )/(1<<20) ); - maxMemoryUsage = std::max< double >( maxMemoryUsage , tree.maxMemoryUsage ); - - CoredFileMeshData< Vertex > mesh; - - if( Verbose.set ) tree.maxMemoryUsage=0; - t=Time(); - isoValue = tree.GetIsoValue( solution , *centerWeights ); - delete centerWeights; - DumpOutput( "Got average in: %f\n" , Time()-t ); - DumpOutput( "Iso-Value: %e\n" , isoValue ); - - if( VoxelGrid.set ) - { - double t = Time(); - FILE* fp = fopen( VoxelGrid.value , "wb" ); - if( !fp ) fprintf( stderr , "Failed to open voxel file for writing: %s\n" , VoxelGrid.value ); - else - { - int res; - Pointer( Real ) values = tree.Evaluate( solution , res , isoValue , VoxelDepth.value ); - fwrite( &res , sizeof(int) , 1 , fp ); - if( sizeof(Real)==sizeof(float) ) fwrite( values , sizeof(float) , res*res*res , fp ); - else - { - float *fValues = new float[res*res*res]; - for( int i=0 ; i() , solution , isoValue , mesh , true , !NonManifold.set , PolygonMesh.set ); - if( PolygonMesh.set ) DumpOutput2( comments[commentNum++] , "# Got polygons in: %9.1f (s), %9.1f (MB)\n" , Time()-t , tree.maxMemoryUsage ); - else DumpOutput2( comments[commentNum++] , "# Got triangles in: %9.1f (s), %9.1f (MB)\n" , Time()-t , tree.maxMemoryUsage ); - maxMemoryUsage = std::max< double >( maxMemoryUsage , tree.maxMemoryUsage ); - DumpOutput2( comments[commentNum++],"# Total Solve: %9.1f (s), %9.1f (MB)\n" , Time()-tt , maxMemoryUsage ); - - if( NoComments.set ) - { - if( ASCII.set ) PlyWritePolygons( Out.value , &mesh , PLY_ASCII , NULL , 0 , iXForm ); - else PlyWritePolygons( Out.value , &mesh , PLY_BINARY_NATIVE , NULL , 0 , iXForm ); - } - else - { - if( ASCII.set ) PlyWritePolygons( Out.value , &mesh , PLY_ASCII , comments , commentNum , iXForm ); - else PlyWritePolygons( Out.value , &mesh , PLY_BINARY_NATIVE , comments , commentNum , iXForm ); - } - DumpOutput( "Vertices / Polygons: %d / %d\n" , mesh.outOfCorePointCount()+mesh.inCorePoints.size() , mesh.polygonCount() ); - } - FreePointer( solution ); - return 1; -} - -#ifdef _WIN32 -inline double to_seconds( const FILETIME& ft ) -{ - const double low_to_sec=100e-9; // 100 nanoseconds - const double high_to_sec=low_to_sec*4294967296.0; - return ft.dwLowDateTime*low_to_sec+ft.dwHighDateTime*high_to_sec; -} -#endif // _WIN32 - -int main( int argc , char* argv[] ) -{ -#if defined(WIN32) && defined(MAX_MEMORY_GB) - if( MAX_MEMORY_GB>0 ) - { - SIZE_T peakMemory = 1; - peakMemory <<= 30; - peakMemory *= MAX_MEMORY_GB; - printf( "Limiting memory usage to %.2f GB\n" , float( peakMemory>>30 ) ); - HANDLE h = CreateJobObject( NULL , NULL ); - AssignProcessToJobObject( h , GetCurrentProcess() ); - - JOBOBJECT_EXTENDED_LIMIT_INFORMATION jeli = { 0 }; - jeli.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_JOB_MEMORY; - jeli.JobMemoryLimit = peakMemory; - if( !SetInformationJobObject( h , JobObjectExtendedLimitInformation , &jeli , sizeof( jeli ) ) ) - fprintf( stderr , "Failed to set memory limit\n" ); - } -#endif // defined(WIN32) && defined(MAX_MEMORY_GB) - double t = Time(); - - cmdLineParse( argc-1 , &argv[1] , sizeof(params)/sizeof(cmdLineReadable*) , params , 1 ); - if( Density.set ) - if( Double.set ) Execute< double , PlyValueVertex< float > >( argc , argv ); - else Execute< float , PlyValueVertex< float > >( argc , argv ); - else - if( Double.set ) Execute< double , PlyVertex< float > >( argc , argv ); - else Execute< float , PlyVertex< float > >( argc , argv ); -#ifdef _WIN32 - if( Performance.set ) - { - HANDLE cur_thread=GetCurrentThread(); - FILETIME tcreat, texit, tkernel, tuser; - if( GetThreadTimes( cur_thread , &tcreat , &texit , &tkernel , &tuser ) ) - printf( "Time (Wall/User/Kernel): %.2f / %.2f / %.2f\n" , Time()-t , to_seconds( tuser ) , to_seconds( tkernel ) ); - else printf( "Time: %.2f\n" , Time()-t ); - HANDLE h = GetCurrentProcess(); - PROCESS_MEMORY_COUNTERS pmc; - if( GetProcessMemoryInfo( h , &pmc , sizeof(pmc) ) ) printf( "Peak Memory (MB): %d\n" , pmc.PeakWorkingSetSize>>20 ); - } -#endif // _WIN32 - return EXIT_SUCCESS; -} diff --git a/src/other/libspsr/Src/SurfaceTrimmer.cpp b/src/other/libspsr/Src/SurfaceTrimmer.cpp deleted file mode 100644 index 2c6682b96f1..00000000000 --- a/src/other/libspsr/Src/SurfaceTrimmer.cpp +++ /dev/null @@ -1,428 +0,0 @@ -/* -Copyright (c) 2013, Michael Kazhdan -All rights reserved. - -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: - -Redistributions of source code must retain the above copyright notice, this list of -conditions and the following disclaimer. Redistributions in binary form must reproduce -the above copyright notice, this list of conditions and the following disclaimer -in the documentation and/or other materials provided with the distribution. - -Neither the name of the Johns Hopkins University nor the names of its contributors -may be used to endorse or promote products derived from this software without specific -prior written permission. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY -EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT -SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR -BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH -DAMAGE. -*/ - -#include -#include -#include -#ifdef _OPENMP -# include -#endif -#include -#include "CmdLineParser.h" -#include "Geometry.h" -#include "Ply.h" -#include "MAT.h" -#include "MyTime.h" - -#define FOR_RELEASE 1 - -cmdLineString In( "in" ) , Out( "out" ); -cmdLineInt Smooth( "smooth" , 5 ); -cmdLineFloat Trim( "trim" ) , IslandAreaRatio( "aRatio" , 0.001f ); -cmdLineFloatArray< 2 > ColorRange( "color" ); -cmdLineReadable PolygonMesh( "polygonMesh" ); - -cmdLineReadable* params[] = -{ - &In , &Out , &Trim , &PolygonMesh , &ColorRange , &Smooth , &IslandAreaRatio -}; - -void ShowUsage( char* ex ) -{ - printf( "Usage: %s\n" , ex ); - printf( "\t --%s \n" , In.name ); - printf( "\t[--%s ]\n" , Out.name ); - printf( "\t[--%s =%d]\n" , Smooth.name , Smooth.value ); - printf( "\t[--%s ]\n" , Trim.name ); - printf( "\t[--%s =%f]\n" , IslandAreaRatio.name , IslandAreaRatio.value ); - printf( "\t[--%s]\n" , PolygonMesh.name ); -#if !FOR_RELEASE - printf( "\t[--%s ]\n" , ColorRange.name ); -#endif // !FOR_RELEASE -} - -long long EdgeKey( int key1 , int key2 ) -{ - if( key1 -PlyValueVertex< Real > InterpolateVertices( const PlyValueVertex< Real >& v1 , const PlyValueVertex< Real >& v2 , const float& value ) -{ - if( v1.value==v2.value ) return (v1+v2)/Real(2.); - PlyValueVertex< Real > v; - - Real dx = (v1.value-value)/(v1.value-v2.value); - for( int i=0 ; i<3 ; i++ ) v.point.coords[i]=v1.point.coords[i]*(1.f-dx)+v2.point.coords[i]*dx; - v.value=v1.value*(1.f-dx)+v2.value*dx; - return v; -} - -template< class Real > -void ColorVertices( const std::vector< PlyValueVertex< Real > >& inVertices , std::vector< PlyColorVertex< Real > >& outVertices , float min , float max ) -{ - outVertices.resize( inVertices.size() ); - for( size_t i=0 ; i( 0.f , std::min< float >( 1.f , temp ) ); - temp *= 255; - outVertices[i].color[0] = outVertices[i].color[1] = outVertices[i].color[2] = (int)temp; - } -} -template< class Real > -void SmoothValues( std::vector< PlyValueVertex< Real > >& vertices , const std::vector< std::vector< int > >& polygons ) -{ - std::vector< int > count( vertices.size() ); - std::vector< Real > sums( vertices.size() , 0 ); - for( size_t i=0 ; i -void SmoothValues( std::vector< PlyValueVertex< Real > >& vertices , const std::vector< std::vector< int > >& polygons , Real min , Real max ) -{ - std::vector< int > count( vertices.size() ); - std::vector< Real > sums( vertices.size() , 0 ); - for( int i=0 ; imin && vertices[v1].valuemin && vertices[v2].value -void SplitPolygon - ( - const std::vector< int >& polygon , - std::vector< PlyValueVertex< Real > >& vertices , - std::vector< std::vector< int > >* ltPolygons , std::vector< std::vector< int > >* gtPolygons , - std::vector< bool >* ltFlags , std::vector< bool >* gtFlags , - hash_map< long long , int >& vertexTable , - Real trimValue - ) -{ - int sz = int( polygon.size() ); - std::vector< bool > gt( sz ); - int gtCount = 0; - for( int j=0 ; jtrimValue ); - if( gt[j] ) gtCount++; - } - if ( gtCount==sz ){ if( gtPolygons ) gtPolygons->push_back( polygon ) ; if( gtFlags ) gtFlags->push_back( false ); } - else if( gtCount==0 ){ if( ltPolygons ) ltPolygons->push_back( polygon ) ; if( ltFlags ) ltFlags->push_back( false ); } - else - { - int start; - for( start=0 ; start poly; - - // Add the initial vertex - { - int j1 = (start+int(sz)-1)%sz , j2 = start; - int v1 = polygon[j1] , v2 = polygon[j2]; - int vIdx; - hash_map< long long , int >::iterator iter = vertexTable.find( EdgeKey( v1 , v2 ) ); - if( iter==vertexTable.end() ) - { - vertexTable[ EdgeKey( v1 , v2 ) ] = vIdx = int( vertices.size() ); - vertices.push_back( InterpolateVertices( vertices[v1] , vertices[v2] , trimValue ) ); - } - else vIdx = iter->second; - poly.push_back( vIdx ); - } - - for( int _j=0 ; _j<=sz ; _j++ ) - { - int j1 = (_j+start+sz-1)%sz , j2 = (_j+start)%sz; - int v1 = polygon[j1] , v2 = polygon[j2]; - if( gt[j2]==gtFlag ) poly.push_back( v2 ); - else - { - int vIdx; - hash_map< long long , int >::iterator iter = vertexTable.find( EdgeKey( v1 , v2 ) ); - if( iter==vertexTable.end() ) - { - vertexTable[ EdgeKey( v1 , v2 ) ] = vIdx = int( vertices.size() ); - vertices.push_back( InterpolateVertices( vertices[v1] , vertices[v2] , trimValue ) ); - } - else vIdx = iter->second; - poly.push_back( vIdx ); - if( gtFlag ){ if( gtPolygons ) gtPolygons->push_back( poly ) ; if( ltFlags ) ltFlags->push_back( true ); } - else { if( ltPolygons ) ltPolygons->push_back( poly ) ; if( gtFlags ) gtFlags->push_back( true ); } - poly.clear() , poly.push_back( vIdx ) , poly.push_back( v2 ); - gtFlag = !gtFlag; - } - } - } -} -template< class Real > -void Triangulate( const std::vector< PlyValueVertex< Real > >& vertices , const std::vector< std::vector< int > >& polygons , std::vector< std::vector< int > >& triangles ) -{ - triangles.clear(); - for( size_t i=0 ; i3 ) - { - MinimalAreaTriangulation< Real > mat; - std::vector< Point3D< Real > > _vertices( polygons[i].size() ); - std::vector< TriangleIndex > _triangles; - for( int j=0 ; j -void RemoveHangingVertices( std::vector< Vertex >& vertices , std::vector< std::vector< int > >& polygons ) -{ - hash_map< int , int > vMap; - std::vector< bool > vertexFlags( vertices.size() , false ); - for( size_t i=0 ; i _vertices( vCount ); - for( int i=0 ; i >& polygons , std::vector< std::vector< int > >& components ) -{ - std::vector< int > polygonRoots( polygons.size() ); - for( size_t i=0 ; i edgeTable; - for( size_t i=0 ; i::iterator iter = edgeTable.find( eKey ); - if( iter==edgeTable.end() ) edgeTable[ eKey ] = int(i); - else - { - int p = iter->second; - while( polygonRoots[p]!=p ) - { - int temp = polygonRoots[p]; - polygonRoots[p] = int(i); - p = temp; - } - polygonRoots[p] = int(i); - } - } - } - for( size_t i=0 ; i vMap; - for( int i= 0 ; i -inline Point3D< Real > CrossProduct( Point3D< Real > p1 , Point3D< Real > p2 ){ return Point3D< Real >( p1[1]*p2[2]-p1[2]*p2[1] , p1[2]*p2[0]-p1[0]*p2[2] , p1[0]*p1[1]-p1[1]*p2[0] ); } -template< class Real > -double TriangleArea( Point3D< Real > v1 , Point3D< Real > v2 , Point3D< Real > v3 ) -{ - Point3D< Real > n = CrossProduct( v2-v1 , v3-v1 ); - return sqrt( n[0]*n[0] + n[1]*n[1] + n[2]*n[2] ) / 2.; -} -template< class Real > -double PolygonArea( const std::vector< PlyValueVertex< Real > >& vertices , const std::vector< int >& polygon ) -{ - if( polygon.size()<3 ) return 0.; - else if( polygon.size()==3 ) return TriangleArea( vertices[polygon[0]].point , vertices[polygon[1]].point , vertices[polygon[2]].point ); - else - { - Point3D< Real > center; - for( size_t i=0 ; i > vertices; - std::vector< std::vector< int > > polygons; - - int ft , commentNum = paramNum+2; - char** comments; - bool readFlags[ PlyValueVertex< float >::Components ]; - PlyReadPolygons( In.value , vertices , polygons , PlyValueVertex< float >::Properties , PlyValueVertex< float >::Components , ft , &comments , &commentNum , readFlags ); - if( !readFlags[3] ){ fprintf( stderr , "[ERROR] vertices do not have value flag\n" ) ; return EXIT_FAILURE; } -#if 0 - if( Trim.set ) for( int i=0 ; i( min , vertices[i].value ) , max = std::max< float >( max , vertices[i].value ); - printf( "Value Range: [%f,%f]\n" , min , max ); - - - if( Trim.set ) - { - hash_map< long long , int > vertexTable; - std::vector< std::vector< int > > ltPolygons , gtPolygons; - std::vector< bool > ltFlags , gtFlags; - - for( int i=0 ; i0 ) - { - std::vector< std::vector< int > > _ltPolygons , _gtPolygons; - std::vector< std::vector< int > > ltComponents , gtComponents; - SetConnectedComponents( ltPolygons , ltComponents ); - SetConnectedComponents( gtPolygons , gtComponents ); - std::vector< double > ltAreas( ltComponents.size() , 0. ) , gtAreas( gtComponents.size() , 0. ); - std::vector< bool > ltComponentFlags( ltComponents.size() , false ) , gtComponentFlags( gtComponents.size() , false ); - double area = 0.; - for( size_t i=0 ; i > polys = ltPolygons; - Triangulate( vertices , ltPolygons , polys ) , ltPolygons = polys; - } - { - std::vector< std::vector< int > > polys = gtPolygons; - Triangulate( vertices , gtPolygons , polys ) , gtPolygons = polys; - } - } - - RemoveHangingVertices( vertices , gtPolygons ); - sprintf( comments[commentNum++] , "#Trimmed In: %9.1f (s)" , Time()-t ); - if( Out.set ) PlyWritePolygons( Out.value , vertices , gtPolygons , PlyValueVertex< float >::Properties , PlyValueVertex< float >::Components , ft , comments , commentNum ); - } - else - { - if( ColorRange.set ) min = ColorRange.values[0] , max = ColorRange.values[1]; - std::vector< PlyColorVertex< float > > outVertices; - ColorVertices( vertices , outVertices , min , max ); - if( Out.set ) PlyWritePolygons( Out.value , outVertices , polygons , PlyColorVertex< float >::Properties , PlyColorVertex< float >::Components , ft , comments , commentNum ); - } - - return EXIT_SUCCESS; -} - diff --git a/src/other/libutahrle/CMakeLists.txt b/src/other/libutahrle/CMakeLists.txt index 7383c44511d..a64a7848698 100644 --- a/src/other/libutahrle/CMakeLists.txt +++ b/src/other/libutahrle/CMakeLists.txt @@ -33,7 +33,7 @@ # *** libutahrle CMakeLists.txt *** # ******************************************************************* -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) project(UTAHRLE) diff --git a/src/other/libvds.dist b/src/other/libvds.dist deleted file mode 100644 index 0cdb9d97de9..00000000000 --- a/src/other/libvds.dist +++ /dev/null @@ -1,7 +0,0 @@ -set(libvds_ignore_files -CMakeLists.txt -COPYING -README -vds.c -vds.h -) diff --git a/src/other/libvds/CMakeLists.txt b/src/other/libvds/CMakeLists.txt deleted file mode 100644 index 7f88d3e56a1..00000000000 --- a/src/other/libvds/CMakeLists.txt +++ /dev/null @@ -1,100 +0,0 @@ -########################################################################## -# Copyright 2011 United States Government as represented by the U.S. -# Army Research Laboratory. -# -# Copyright 1999 The University of Virginia. -# All Rights Reserved. -# -# Permission to use, copy, modify and distribute this software and its -# documentation without fee, and without a written agreement, is -# hereby granted, provided that the above copyright notice and the -# complete text of this comment appear in all copies, and provided that -# the University of Virginia and the original authors are credited in -# any publications arising from the use of this software. -# -# IN NO EVENT SHALL THE UNIVERSITY OF VIRGINIA OR ANY AUTHOR OF THIS -# SOFTWARE BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT, SPECIAL, -# INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS, -# ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN -# IF THE UNIVERSITY OF VIRGINIA AND/OR THE AUTHOR OF THIS SOFTWARE -# HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -# -########################################################################## - -# This file contains the top level CMakeLists.txt logic for the -# BRL-CAD software package. -# Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) - -# set CMake project name -project(VDS) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) - -if (NOT BIN_DIR) - set(BIN_DIR bin) -endif (NOT BIN_DIR) - -if (NOT INCLUDE_DIR) - set(INCLUDE_DIR include) -endif (NOT INCLUDE_DIR) - -if (NOT LIB_DIR) - set(LIB_DIR lib) -endif (NOT LIB_DIR) - -if (NOT DEFINED BUILD_SHARED_LIBS) - set(BUILD_SHARED_LIBS ON) -endif (NOT DEFINED BUILD_SHARED_LIBS) - -if (NOT DEFINED BUILD_STATIC_LIBS) - set(BUILD_STATIC_LIBS OFF) -endif (NOT DEFINED BUILD_STATIC_LIBS) - -include(CheckLibraryExists) -check_library_exists(m cos "" HAVE_M_LIBRARY) -if (HAVE_M_LIBRARY) - set(SYS_LIBS ${SYS_LIBS} m) -endif (HAVE_M_LIBRARY) - -if (BUILD_SHARED_LIBS) - add_library(vds SHARED vds.c) - if (SYS_LIBS) - target_link_libraries(vds ${SYS_LIBS}) - endif (SYS_LIBS) - if (MSVC) - set_property(TARGET vds APPEND PROPERTY COMPILE_DEFINITIONS "VDS_DLL_EXPORTS") - endif (MSVC) - install(TARGETS vds - RUNTIME DESTINATION ${BIN_DIR} - LIBRARY DESTINATION ${LIB_DIR} - ARCHIVE DESTINATION ${LIB_DIR}) -endif (BUILD_SHARED_LIBS) - -if (BUILD_STATIC_LIBS) - add_library(vds-static STATIC vds.c) - if (CMAKE_CL_64) - set_target_properties(vds-static PROPERTIES STATIC_LIBRARY_FLAGS "/machine:x64") - endif (CMAKE_CL_64) - if (MSVC) - # msvc does not append 'lib' - do it here to have consistent name - set_target_properties(vds-static PROPERTIES PREFIX "lib") - else (MSVC) - set_target_properties(vds-static PROPERTIES OUTPUT_NAME "vds") - endif (MSVC) - install(TARGETS vds-static - RUNTIME DESTINATION ${BIN_DIR} - LIBRARY DESTINATION ${LIB_DIR} - ARCHIVE DESTINATION ${LIB_DIR}) -endif (BUILD_STATIC_LIBS) - -if (NOT SKIP_INSTALL_HEADERS) - install(FILES vds.h DESTINATION ${INCLUDE_DIR}) -endif (NOT SKIP_INSTALL_HEADERS) - -# Local Variables: -# tab-width: 8 -# mode: cmake -# indent-tabs-mode: t -# End: -# ex: shiftwidth=2 tabstop=8 diff --git a/src/other/libz/CMakeLists.txt b/src/other/libz/CMakeLists.txt index 9011e13261d..ffaf401e16a 100644 --- a/src/other/libz/CMakeLists.txt +++ b/src/other/libz/CMakeLists.txt @@ -1,4 +1,4 @@ -cmake_minimum_required(VERSION 2.4.4) +cmake_minimum_required(VERSION 3.12) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) project(zlib C) diff --git a/src/other/openNURBS/CMakeLists.txt b/src/other/openNURBS/CMakeLists.txt index a8db7227c7c..cc7085da6ea 100644 --- a/src/other/openNURBS/CMakeLists.txt +++ b/src/other/openNURBS/CMakeLists.txt @@ -29,7 +29,7 @@ # ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) project(OPENNURBS) diff --git a/src/other/openscenegraph/CMakeLists.txt b/src/other/openscenegraph/CMakeLists.txt index 1a958e27862..efddc558f61 100644 --- a/src/other/openscenegraph/CMakeLists.txt +++ b/src/other/openscenegraph/CMakeLists.txt @@ -13,7 +13,7 @@ SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0) set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS TRUE) set_property(GLOBAL PROPERTY USE_FOLDERS ON) -CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR) +CMAKE_MINIMUM_REQUIRED(VERSION 3.12.0 FATAL_ERROR) if(COMMAND cmake_policy) # Works around warnings libraries linked against that don't diff --git a/src/other/poly2tri/CMakeLists.txt b/src/other/poly2tri/CMakeLists.txt index b69c13c85e3..6f1d671ba6e 100644 --- a/src/other/poly2tri/CMakeLists.txt +++ b/src/other/poly2tri/CMakeLists.txt @@ -37,7 +37,7 @@ ### # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # Set CMake project name project(P2T) diff --git a/src/other/proj-4/CMakeLists.txt b/src/other/proj-4/CMakeLists.txt index 01aa9e460fe..7f410432a89 100644 --- a/src/other/proj-4/CMakeLists.txt +++ b/src/other/proj-4/CMakeLists.txt @@ -9,7 +9,7 @@ ################################################################################# # General settings ################################################################################# -cmake_minimum_required(VERSION 2.6.0 FATAL_ERROR) +cmake_minimum_required(VERSION 3.12) # proj4 is an ANSI C project project(PROJ4 C) diff --git a/src/other/proj-4/src/CMakeLists.txt b/src/other/proj-4/src/CMakeLists.txt index 7a849b387ca..950c162aa6e 100644 --- a/src/other/proj-4/src/CMakeLists.txt +++ b/src/other/proj-4/src/CMakeLists.txt @@ -203,7 +203,7 @@ if (BUILD_SHARED_LIBS) add_library(proj SHARED ${all_srcs} ${hdr_files}) set_target_properties(proj PROPERTIES VERSION "${PROJ_BUILD_VERSION}" SOVERSION "${PROJ_API_VERSION}") set_target_properties(proj PROPERTIES LINKER_LANGUAGE C) - set(proj_libs ${M_LIBRARY} ${CMAKE_THREAD_LIBS_INIT}) + set(proj_libs ${M_LIBRARY} Threads::Threads) if(proj_libs) target_link_libraries(proj ${proj_libs}) endif(proj_libs) diff --git a/src/other/stepcode/CMakeLists.txt b/src/other/stepcode/CMakeLists.txt index ba358d2acc1..a5e5045ebc4 100644 --- a/src/other/stepcode/CMakeLists.txt +++ b/src/other/stepcode/CMakeLists.txt @@ -55,7 +55,7 @@ SET(SC_ABI_SOVERSION 2) SET(SC_ABI_VERSION ${SC_ABI_SOVERSION}.0.0) # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) IF( NOT DEFINED INCLUDE_INSTALL_DIR ) SET( INCLUDE_INSTALL_DIR include ) diff --git a/src/other/stepcode/src/base/judy/CMakeLists.txt b/src/other/stepcode/src/base/judy/CMakeLists.txt index 11a244a21f9..72b85536ddb 100644 --- a/src/other/stepcode/src/base/judy/CMakeLists.txt +++ b/src/other/stepcode/src/base/judy/CMakeLists.txt @@ -1,5 +1,5 @@ -cmake_minimum_required(VERSION 2.8) +cmake_minimum_required(VERSION 3.12) project( JudyTemplates ) if( NOT DEFINED CMAKE_BUILD_TYPE ) diff --git a/src/other/stepcode/test/cpp/CMakeLists.txt b/src/other/stepcode/test/cpp/CMakeLists.txt index 1972058d75f..ed14989c570 100644 --- a/src/other/stepcode/test/cpp/CMakeLists.txt +++ b/src/other/stepcode/test/cpp/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +CMAKE_MINIMUM_REQUIRED(VERSION 3.12) #c++ tests diff --git a/src/other/stepcode/test/cpp/schema_specific/CMakeLists.txt b/src/other/stepcode/test/cpp/schema_specific/CMakeLists.txt index e7fb21f5c30..9fff763ecb2 100644 --- a/src/other/stepcode/test/cpp/schema_specific/CMakeLists.txt +++ b/src/other/stepcode/test/cpp/schema_specific/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +CMAKE_MINIMUM_REQUIRED(VERSION 3.12) #c++ tests that depend on a particular schema INCLUDE_DIRECTORIES( ${SC_SOURCE_DIR}/src/cldai ${SC_SOURCE_DIR}/src/cleditor ${SC_SOURCE_DIR}/src/clutils diff --git a/src/other/stepcode/test/cpp/stepcore/CMakeLists.txt b/src/other/stepcode/test/cpp/stepcore/CMakeLists.txt index ff8e8769029..08697d3f411 100644 --- a/src/other/stepcode/test/cpp/stepcore/CMakeLists.txt +++ b/src/other/stepcode/test/cpp/stepcore/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +CMAKE_MINIMUM_REQUIRED(VERSION 3.12) #c++ tests for clstepcore INCLUDE_DIRECTORIES( ${SC_SOURCE_DIR}/src/cldai ${SC_SOURCE_DIR}/src/cleditor ${SC_SOURCE_DIR}/src/clutils diff --git a/src/other/stepcode/test/p21/CMakeLists.txt b/src/other/stepcode/test/p21/CMakeLists.txt index d1a7b10dcf5..0c96dd1eee2 100644 --- a/src/other/stepcode/test/p21/CMakeLists.txt +++ b/src/other/stepcode/test/p21/CMakeLists.txt @@ -1,4 +1,4 @@ -CMAKE_MINIMUM_REQUIRED(VERSION 2.8) +CMAKE_MINIMUM_REQUIRED(VERSION 3.12) #test part 21 files #used to create a number of small files at test-time. you probably don't want to modify. diff --git a/src/other/tcl/CMake/tcl.cmake b/src/other/tcl/CMake/tcl.cmake index 14b680537b6..dbf19f45272 100644 --- a/src/other/tcl/CMake/tcl.cmake +++ b/src/other/tcl/CMake/tcl.cmake @@ -36,6 +36,14 @@ MACRO(CHECK_C_FLAG flag) ENDIF(${UPPER_FLAG}_COMPILER_FLAG) ENDMACRO() +# Wrappers for include file checks +MACRO(TCL_CHECK_INCLUDE_FILE filename var) + CHECK_INCLUDE_FILE(${filename} ${var}) + IF(${var}) + add_definitions(-D${var}=1) + ENDIF(${var}) +ENDMACRO(TCL_CHECK_INCLUDE_FILE) + MACRO(TCL_CHECK_INCLUDE_FILE_USABILITY filename var) CHECK_INCLUDE_FILE(${filename} ${var}) IF(${var}) diff --git a/src/other/tcl/CMakeLists.txt b/src/other/tcl/CMakeLists.txt index 44779483766..44627a7d1bb 100644 --- a/src/other/tcl/CMakeLists.txt +++ b/src/other/tcl/CMakeLists.txt @@ -37,7 +37,7 @@ # ******************************************************************* # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # Set CMake project name project(TCL) @@ -173,7 +173,7 @@ check_c_compiler_flag(-fPIC FPIC_COMPILER_FLAG) # support for threads. include(CheckFunctionExists) function(check_extra_pthread_funcs) - set(CMAKE_REQUIRED_LIBRARIES ${CMAKE_THREAD_LIBS_INIT}) + set(CMAKE_REQUIRED_LIBRARIES Threads::Threads) check_function_exists(pthread_mutex_init HAVE_PTHREAD_MUTEX_INIT) if (HAVE_PTHREAD_MUTEX_INIT) add_definitions(-DHAVE_PTHREAD_MUTEX_INIT=1) @@ -1302,7 +1302,7 @@ set(TCL_LINK_LIBS ${GHBN_LIBRARY} ${ZLIB_LIBRARIES} ${M_LIBRARY} - ${CMAKE_THREAD_LIBS_INIT} + Threads::Threads ) add_library(tcl ${TCL_SRCS}) diff --git a/src/other/tk/CMakeLists.txt b/src/other/tk/CMakeLists.txt index 1aac6a249df..7f5a94c0da0 100644 --- a/src/other/tk/CMakeLists.txt +++ b/src/other/tk/CMakeLists.txt @@ -36,7 +36,7 @@ # ******************************************************************* # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(TK) @@ -65,7 +65,7 @@ endif (WIN32) #----------------------------------------------------------------------------- # Set CMake module path -list(APPEND CMAKE_MODULE_PATH "${TCL_SOURCE_DIR}/CMake") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/../tcl/CMake") #--------------------------------------------------------------------- # Define relative install locations and output directories. Don't set @@ -150,7 +150,7 @@ add_definitions(-DTCL_THREADS=1) # Tcl/Tk's normal build system uses autotools macros, referred to as the # TEA system. An attempt to duplicate the required functionality from # TEA is found in tcl.cmake -include(${TCL_SOURCE_DIR}/CMake/tcl.cmake) +include(${CMAKE_CURRENT_SOURCE_DIR}/../tcl/CMake/tcl.cmake) #------------------------------------------------------------------------ # Call the LINK_LIBS macro to get M_LIBRARY properly defined (TEA diff --git a/src/other/tkhtml/CMakeLists.txt b/src/other/tkhtml/CMakeLists.txt index 710a68cb86d..3e9ceb85441 100644 --- a/src/other/tkhtml/CMakeLists.txt +++ b/src/other/tkhtml/CMakeLists.txt @@ -1,5 +1,5 @@ # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(TKHTML) diff --git a/src/other/tktable/CMakeLists.txt b/src/other/tktable/CMakeLists.txt index ba7f7f00722..39136ee46e5 100644 --- a/src/other/tktable/CMakeLists.txt +++ b/src/other/tktable/CMakeLists.txt @@ -1,5 +1,5 @@ # Minimum required version of CMake -cmake_minimum_required(VERSION 3.1.3) +cmake_minimum_required(VERSION 3.12) # set CMake project name project(TKTABLE) diff --git a/src/proc-db/bottest.c b/src/proc-db/bottest.c index 08b3a9bfc9c..02d3e8aa817 100644 --- a/src/proc-db/bottest.c +++ b/src/proc-db/bottest.c @@ -1,7 +1,7 @@ /* B O T T E S T . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/brep_cobb.cpp b/src/proc-db/brep_cobb.cpp index dbeab4ac287..314da43fc4f 100644 --- a/src/proc-db/brep_cobb.cpp +++ b/src/proc-db/brep_cobb.cpp @@ -1,7 +1,7 @@ /* B R E P _ C O B B . C P P * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Based off of code from Ayam: diff --git a/src/proc-db/brep_cube.cpp b/src/proc-db/brep_cube.cpp index 6bfa619adc7..077900557b3 100644 --- a/src/proc-db/brep_cube.cpp +++ b/src/proc-db/brep_cube.cpp @@ -1,7 +1,7 @@ /* B R E P _ C U B E . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/brep_invalid.cpp b/src/proc-db/brep_invalid.cpp index 411916611a1..56d9adc724b 100644 --- a/src/proc-db/brep_invalid.cpp +++ b/src/proc-db/brep_invalid.cpp @@ -1,7 +1,7 @@ /* B R E P _ I N V A L I D . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/brep_simple.cpp b/src/proc-db/brep_simple.cpp index 0bcc3d58ec4..ec8716ad84a 100644 --- a/src/proc-db/brep_simple.cpp +++ b/src/proc-db/brep_simple.cpp @@ -1,7 +1,7 @@ /* B R E P _ S I M P L E . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/brep_surface.cpp b/src/proc-db/brep_surface.cpp index 7d235c0a4dd..4bbae7ef61c 100644 --- a/src/proc-db/brep_surface.cpp +++ b/src/proc-db/brep_surface.cpp @@ -1,7 +1,7 @@ /* B R E P _ S U R F A C E . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/brep_trimmed.cpp b/src/proc-db/brep_trimmed.cpp index 0d2d2cd0538..2d083d75117 100644 --- a/src/proc-db/brep_trimmed.cpp +++ b/src/proc-db/brep_trimmed.cpp @@ -1,7 +1,7 @@ /* B R E P _ T R I M M E D . C P P * BRL-CAD * - * Copyright (c) 2019-2020 United States Government as represented by + * Copyright (c) 2019-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/brepintersect.cpp b/src/proc-db/brepintersect.cpp index df0ddd5b56e..f6c03ca9ac7 100644 --- a/src/proc-db/brepintersect.cpp +++ b/src/proc-db/brepintersect.cpp @@ -1,7 +1,7 @@ /* B R E P I N T E R S E C T . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -133,7 +133,7 @@ bool PointInTriangle( bool PointInPolyline( const ON_3dPoint& P, - const ON_Polyline pline, + const ON_Polyline& pline, double tol ) { diff --git a/src/proc-db/brepintersect.h b/src/proc-db/brepintersect.h index 66aa2a47538..3100e6e2afc 100644 --- a/src/proc-db/brepintersect.h +++ b/src/proc-db/brepintersect.h @@ -1,7 +1,7 @@ /* B R E P I N T E R S E C T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/breplicator.cpp b/src/proc-db/breplicator.cpp index e9f60e7e592..1c40c610408 100644 --- a/src/proc-db/breplicator.cpp +++ b/src/proc-db/breplicator.cpp @@ -1,7 +1,7 @@ /* B R E P L I C A T O R . C P P * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/brickwall.c b/src/proc-db/brickwall.c index de8087764a3..f6c700fad11 100644 --- a/src/proc-db/brickwall.c +++ b/src/proc-db/brickwall.c @@ -1,7 +1,7 @@ /* B R I C K W A L L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/cchannel.c b/src/proc-db/cchannel.c index df402560dbb..ae1c5cf8c68 100644 --- a/src/proc-db/cchannel.c +++ b/src/proc-db/cchannel.c @@ -1,7 +1,7 @@ /** @file cchannel.c * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/clutter.c b/src/proc-db/clutter.c index 4a62f7e72ee..8c11ee58438 100644 --- a/src/proc-db/clutter.c +++ b/src/proc-db/clutter.c @@ -1,7 +1,7 @@ /* C L U T T E R . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/common.c b/src/proc-db/common.c index f4d7a473022..d27706f86ad 100644 --- a/src/proc-db/common.c +++ b/src/proc-db/common.c @@ -1,7 +1,7 @@ /* C O M M O N . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/csgbrep.cpp b/src/proc-db/csgbrep.cpp index 70848251224..ff112ea5240 100644 --- a/src/proc-db/csgbrep.cpp +++ b/src/proc-db/csgbrep.cpp @@ -1,7 +1,7 @@ /* C S G B R E P . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/globe.c b/src/proc-db/globe.c index 1b7fa3fd9a4..df7e537affc 100644 --- a/src/proc-db/globe.c +++ b/src/proc-db/globe.c @@ -1,7 +1,7 @@ /* G L O B E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/gtimes.c b/src/proc-db/gtimes.c index e61774437da..e17797a7c03 100644 --- a/src/proc-db/gtimes.c +++ b/src/proc-db/gtimes.c @@ -1,7 +1,7 @@ /* G T I M E S . C * BRL-CAD * - * Copyright (c) 2016-2020 United States Government as represented by + * Copyright (c) 2016-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/kurt.c b/src/proc-db/kurt.c index d49f62ae9cc..0a707af8f7d 100644 --- a/src/proc-db/kurt.c +++ b/src/proc-db/kurt.c @@ -1,7 +1,7 @@ /* K U R T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/lens.c b/src/proc-db/lens.c index 12d3c9bfa60..27b108f9a5a 100644 --- a/src/proc-db/lens.c +++ b/src/proc-db/lens.c @@ -1,7 +1,7 @@ /* L E N S . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/makebuilding/makebuilding.c b/src/proc-db/makebuilding/makebuilding.c index 317a019ccb2..de7fcce79f8 100644 --- a/src/proc-db/makebuilding/makebuilding.c +++ b/src/proc-db/makebuilding/makebuilding.c @@ -1,7 +1,7 @@ /* M A K E B U I L D I N G . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/masonry.c b/src/proc-db/masonry.c index 412e701e1bb..ceedef69a53 100644 --- a/src/proc-db/masonry.c +++ b/src/proc-db/masonry.c @@ -2,7 +2,7 @@ /* M A S O N R Y . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/menger.c b/src/proc-db/menger.c index b4d69495896..2e45b686e42 100644 --- a/src/proc-db/menger.c +++ b/src/proc-db/menger.c @@ -1,7 +1,7 @@ /* M E N G E R . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/metaball.c b/src/proc-db/metaball.c index 5eb5da7c2ba..bd577dd162f 100644 --- a/src/proc-db/metaball.c +++ b/src/proc-db/metaball.c @@ -1,7 +1,7 @@ /* M E T A B A L L . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/mkbuilding.c b/src/proc-db/mkbuilding.c index c64eea15381..df64d1f3b63 100644 --- a/src/proc-db/mkbuilding.c +++ b/src/proc-db/mkbuilding.c @@ -1,7 +1,7 @@ /* M K B U I L D I N G . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/mkbuilding.h b/src/proc-db/mkbuilding.h index 82c7e36a3c1..21b446e0f23 100644 --- a/src/proc-db/mkbuilding.h +++ b/src/proc-db/mkbuilding.h @@ -1,7 +1,7 @@ /* M K B U I L D I N G . H * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/molecule.c b/src/proc-db/molecule.c index 1e04b54400f..3cd4a10518f 100644 --- a/src/proc-db/molecule.c +++ b/src/proc-db/molecule.c @@ -1,7 +1,7 @@ /* M O L E C U L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/naca/naca.h b/src/proc-db/naca/naca.h index 69a37c4438e..608674a9427 100644 --- a/src/proc-db/naca/naca.h +++ b/src/proc-db/naca/naca.h @@ -1,7 +1,7 @@ /* N A C A . H * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/src/proc-db/naca/naca456.c b/src/proc-db/naca/naca456.c index ae25d2ce453..2002c2cafcd 100644 --- a/src/proc-db/naca/naca456.c +++ b/src/proc-db/naca/naca456.c @@ -1,7 +1,7 @@ /* N A C A 4 5 6 . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/src/proc-db/naca/nacax.c b/src/proc-db/naca/nacax.c index 2cb8b567b63..eb515bfabdd 100644 --- a/src/proc-db/naca/nacax.c +++ b/src/proc-db/naca/nacax.c @@ -1,7 +1,7 @@ /* N A C A X . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/src/proc-db/naca/splprocs.c b/src/proc-db/naca/splprocs.c index 44ae19cf20c..81d9220d12f 100644 --- a/src/proc-db/naca/splprocs.c +++ b/src/proc-db/naca/splprocs.c @@ -1,7 +1,7 @@ /* S P L P R O C S . C * BRL-CAD * - * Copyright (c) 2014-2020 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * Redistribution and use in source and binary forms, with or without diff --git a/src/proc-db/nmgmodel.c b/src/proc-db/nmgmodel.c index df2bd2e8127..8bafaf8bf3e 100644 --- a/src/proc-db/nmgmodel.c +++ b/src/proc-db/nmgmodel.c @@ -1,7 +1,7 @@ /* N M G M O D E L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/pdb-g.c b/src/proc-db/pdb-g.c index cd2ed30e2b5..e2db5c431c7 100644 --- a/src/proc-db/pdb-g.c +++ b/src/proc-db/pdb-g.c @@ -1,7 +1,7 @@ /* P D B - G . C * BRL-CAD * - * Copyright (c) 2012-2020 United States Government as represented by + * Copyright (c) 2012-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/pipe.c b/src/proc-db/pipe.c index d6aa4f305bc..de035edd170 100644 --- a/src/proc-db/pipe.c +++ b/src/proc-db/pipe.c @@ -1,7 +1,7 @@ /* P I P E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/pipetest.c b/src/proc-db/pipetest.c index 2f40ac89b7d..6415f8128ee 100644 --- a/src/proc-db/pipetest.c +++ b/src/proc-db/pipetest.c @@ -1,7 +1,7 @@ /* P I P E T E S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/pix2g.c b/src/proc-db/pix2g.c index c047d8d6331..2cc702be6e5 100644 --- a/src/proc-db/pix2g.c +++ b/src/proc-db/pix2g.c @@ -1,7 +1,7 @@ /* P I X 2 G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/pyramid.c b/src/proc-db/pyramid.c index 7e5747edba7..560bd338f6d 100644 --- a/src/proc-db/pyramid.c +++ b/src/proc-db/pyramid.c @@ -1,7 +1,7 @@ /* P Y R A M I D . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/ringworld.c b/src/proc-db/ringworld.c index fb08deba1cc..1c0cd6fc0ad 100644 --- a/src/proc-db/ringworld.c +++ b/src/proc-db/ringworld.c @@ -1,7 +1,7 @@ /* R I N G W O R L D . C * BRL-CAD * - * Copyright (c) 2011-2020 United States Government as represented by + * Copyright (c) 2011-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/sketch.c b/src/proc-db/sketch.c index c56fdf28b10..43616d1d08f 100644 --- a/src/proc-db/sketch.c +++ b/src/proc-db/sketch.c @@ -1,7 +1,7 @@ /* S K E T C H . C * BRL-CAD * - * Copyright (c) 2000-2020 United States Government as represented by + * Copyright (c) 2000-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/sphflake.c b/src/proc-db/sphflake.c index 5ba1ebcf72b..e95fbd2595d 100644 --- a/src/proc-db/sphflake.c +++ b/src/proc-db/sphflake.c @@ -1,7 +1,7 @@ /* S P H F L A K E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/spltest.c b/src/proc-db/spltest.c index d0751774eaf..14edde00a66 100644 --- a/src/proc-db/spltest.c +++ b/src/proc-db/spltest.c @@ -1,7 +1,7 @@ /* S P L T E S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/surfaceintersect.cpp b/src/proc-db/surfaceintersect.cpp index e55cf4d1dfc..63297f1dd0c 100644 --- a/src/proc-db/surfaceintersect.cpp +++ b/src/proc-db/surfaceintersect.cpp @@ -1,7 +1,7 @@ /* S U R F A C E I N T E R S E C T . C P P * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/surfaceintersect.h b/src/proc-db/surfaceintersect.h index 6dcf877ed5d..fa014727a3a 100644 --- a/src/proc-db/surfaceintersect.h +++ b/src/proc-db/surfaceintersect.h @@ -1,7 +1,7 @@ /* S U R F A C E I N T E R S E C T . H * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/tea.c b/src/proc-db/tea.c index 54ebe291be2..6523fd511b3 100644 --- a/src/proc-db/tea.c +++ b/src/proc-db/tea.c @@ -1,7 +1,7 @@ /* T E A . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/tea.h b/src/proc-db/tea.h index aa2fd03abb9..60589ca0fce 100644 --- a/src/proc-db/tea.h +++ b/src/proc-db/tea.h @@ -1,7 +1,7 @@ /* T E A . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/tea_nmg.c b/src/proc-db/tea_nmg.c index 28cda31372d..9c8d75ac0b0 100644 --- a/src/proc-db/tea_nmg.c +++ b/src/proc-db/tea_nmg.c @@ -1,7 +1,7 @@ /* T E A _ N M G . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/torii.c b/src/proc-db/torii.c index 3539c55be4d..44e74535e24 100644 --- a/src/proc-db/torii.c +++ b/src/proc-db/torii.c @@ -1,7 +1,7 @@ /* T O R I I . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/tube.c b/src/proc-db/tube.c index 93955612949..c046d060a60 100644 --- a/src/proc-db/tube.c +++ b/src/proc-db/tube.c @@ -1,7 +1,7 @@ /* T U B E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/twistedcube.cpp b/src/proc-db/twistedcube.cpp index c7440fd046e..24ac8d2f5ca 100644 --- a/src/proc-db/twistedcube.cpp +++ b/src/proc-db/twistedcube.cpp @@ -1,7 +1,7 @@ /* T W I S T E D C U B E . C P P * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/twistedcube.h b/src/proc-db/twistedcube.h index 74862806e12..52c4310c8e4 100644 --- a/src/proc-db/twistedcube.h +++ b/src/proc-db/twistedcube.h @@ -1,7 +1,7 @@ /* T W I S T E D C U B E . H * BRL-CAD * - * Copyright (c) 2013-2020 United States Government as represented by + * Copyright (c) 2013-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/proc-db/vegetation.c b/src/proc-db/vegetation.c index 17a64819396..8fe321dea51 100644 --- a/src/proc-db/vegetation.c +++ b/src/proc-db/vegetation.c @@ -1,7 +1,7 @@ /* V E G E T A T I O N . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/vegetation.h b/src/proc-db/vegetation.h index 56c60d661fb..993634d8570 100644 --- a/src/proc-db/vegetation.h +++ b/src/proc-db/vegetation.h @@ -1,7 +1,7 @@ /* V E G E T A T I O N . H * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/wavy.c b/src/proc-db/wavy.c index a82d52d8f1a..38f16d98741 100644 --- a/src/proc-db/wavy.c +++ b/src/proc-db/wavy.c @@ -1,7 +1,7 @@ /* W A V Y . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/proc-db/wdb_example.c b/src/proc-db/wdb_example.c index c84cbd37ee4..9e545299763 100644 --- a/src/proc-db/wdb_example.c +++ b/src/proc-db/wdb_example.c @@ -1,7 +1,7 @@ /* W D B _ E X A M P L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/qged/CMakeLists.txt b/src/qged/CMakeLists.txt index bfb564274cb..b10d04d96c4 100644 --- a/src/qged/CMakeLists.txt +++ b/src/qged/CMakeLists.txt @@ -22,7 +22,7 @@ add_subdirectory(qtads) include_directories( "display" - "display/glm/") + ) set(qged_srcs main.cpp @@ -101,432 +101,6 @@ set(qged_ignore_srcs pqConsoleWidget_LICENSE.txt display/README.txt display/Renderable.h - display/glm/CMakeLists.txt - display/glm/cmake/glm/glmConfig-version.cmake - display/glm/cmake/glm/glmConfig.cmake - display/glm/copying.txt - display/glm/glm/CMakeLists.txt - display/glm/glm/common.hpp - display/glm/glm/detail/_features.hpp - display/glm/glm/detail/_fixes.hpp - display/glm/glm/detail/_noise.hpp - display/glm/glm/detail/_swizzle.hpp - display/glm/glm/detail/_swizzle_func.hpp - display/glm/glm/detail/_vectorize.hpp - display/glm/glm/detail/compute_common.hpp - display/glm/glm/detail/compute_vector_relational.hpp - display/glm/glm/detail/func_common.inl - display/glm/glm/detail/func_common_simd.inl - display/glm/glm/detail/func_exponential.inl - display/glm/glm/detail/func_exponential_simd.inl - display/glm/glm/detail/func_geometric.inl - display/glm/glm/detail/func_geometric_simd.inl - display/glm/glm/detail/func_integer.inl - display/glm/glm/detail/func_integer_simd.inl - display/glm/glm/detail/func_matrix.inl - display/glm/glm/detail/func_matrix_simd.inl - display/glm/glm/detail/func_packing.inl - display/glm/glm/detail/func_packing_simd.inl - display/glm/glm/detail/func_trigonometric.inl - display/glm/glm/detail/func_trigonometric_simd.inl - display/glm/glm/detail/func_vector_relational.inl - display/glm/glm/detail/func_vector_relational_simd.inl - display/glm/glm/detail/glm.cpp - display/glm/glm/detail/qualifier.hpp - display/glm/glm/detail/setup.hpp - display/glm/glm/detail/type_float.hpp - display/glm/glm/detail/type_half.hpp - display/glm/glm/detail/type_half.inl - display/glm/glm/detail/type_mat2x2.hpp - display/glm/glm/detail/type_mat2x2.inl - display/glm/glm/detail/type_mat2x3.hpp - display/glm/glm/detail/type_mat2x3.inl - display/glm/glm/detail/type_mat2x4.hpp - display/glm/glm/detail/type_mat2x4.inl - display/glm/glm/detail/type_mat3x2.hpp - display/glm/glm/detail/type_mat3x2.inl - display/glm/glm/detail/type_mat3x3.hpp - display/glm/glm/detail/type_mat3x3.inl - display/glm/glm/detail/type_mat3x4.hpp - display/glm/glm/detail/type_mat3x4.inl - display/glm/glm/detail/type_mat4x2.hpp - display/glm/glm/detail/type_mat4x2.inl - display/glm/glm/detail/type_mat4x3.hpp - display/glm/glm/detail/type_mat4x3.inl - display/glm/glm/detail/type_mat4x4.hpp - display/glm/glm/detail/type_mat4x4.inl - display/glm/glm/detail/type_mat4x4_simd.inl - display/glm/glm/detail/type_quat.hpp - display/glm/glm/detail/type_quat.inl - display/glm/glm/detail/type_quat_simd.inl - display/glm/glm/detail/type_vec1.hpp - display/glm/glm/detail/type_vec1.inl - display/glm/glm/detail/type_vec2.hpp - display/glm/glm/detail/type_vec2.inl - display/glm/glm/detail/type_vec3.hpp - display/glm/glm/detail/type_vec3.inl - display/glm/glm/detail/type_vec4.hpp - display/glm/glm/detail/type_vec4.inl - display/glm/glm/detail/type_vec4_simd.inl - display/glm/glm/exponential.hpp - display/glm/glm/ext.hpp - display/glm/glm/ext/matrix_clip_space.hpp - display/glm/glm/ext/matrix_clip_space.inl - display/glm/glm/ext/matrix_common.hpp - display/glm/glm/ext/matrix_common.inl - display/glm/glm/ext/matrix_double2x2.hpp - display/glm/glm/ext/matrix_double2x2_precision.hpp - display/glm/glm/ext/matrix_double2x3.hpp - display/glm/glm/ext/matrix_double2x3_precision.hpp - display/glm/glm/ext/matrix_double2x4.hpp - display/glm/glm/ext/matrix_double2x4_precision.hpp - display/glm/glm/ext/matrix_double3x2.hpp - display/glm/glm/ext/matrix_double3x2_precision.hpp - display/glm/glm/ext/matrix_double3x3.hpp - display/glm/glm/ext/matrix_double3x3_precision.hpp - display/glm/glm/ext/matrix_double3x4.hpp - display/glm/glm/ext/matrix_double3x4_precision.hpp - display/glm/glm/ext/matrix_double4x2.hpp - display/glm/glm/ext/matrix_double4x2_precision.hpp - display/glm/glm/ext/matrix_double4x3.hpp - display/glm/glm/ext/matrix_double4x3_precision.hpp - display/glm/glm/ext/matrix_double4x4.hpp - display/glm/glm/ext/matrix_double4x4_precision.hpp - display/glm/glm/ext/matrix_float2x2.hpp - display/glm/glm/ext/matrix_float2x2_precision.hpp - display/glm/glm/ext/matrix_float2x3.hpp - display/glm/glm/ext/matrix_float2x3_precision.hpp - display/glm/glm/ext/matrix_float2x4.hpp - display/glm/glm/ext/matrix_float2x4_precision.hpp - display/glm/glm/ext/matrix_float3x2.hpp - display/glm/glm/ext/matrix_float3x2_precision.hpp - display/glm/glm/ext/matrix_float3x3.hpp - display/glm/glm/ext/matrix_float3x3_precision.hpp - display/glm/glm/ext/matrix_float3x4.hpp - display/glm/glm/ext/matrix_float3x4_precision.hpp - display/glm/glm/ext/matrix_float4x2.hpp - display/glm/glm/ext/matrix_float4x2_precision.hpp - display/glm/glm/ext/matrix_float4x3.hpp - display/glm/glm/ext/matrix_float4x3_precision.hpp - display/glm/glm/ext/matrix_float4x4.hpp - display/glm/glm/ext/matrix_float4x4_precision.hpp - display/glm/glm/ext/matrix_int2x2.hpp - display/glm/glm/ext/matrix_int2x2_sized.hpp - display/glm/glm/ext/matrix_int2x3.hpp - display/glm/glm/ext/matrix_int2x3_sized.hpp - display/glm/glm/ext/matrix_int2x4.hpp - display/glm/glm/ext/matrix_int2x4_sized.hpp - display/glm/glm/ext/matrix_int3x2.hpp - display/glm/glm/ext/matrix_int3x2_sized.hpp - display/glm/glm/ext/matrix_int3x3.hpp - display/glm/glm/ext/matrix_int3x3_sized.hpp - display/glm/glm/ext/matrix_int3x4.hpp - display/glm/glm/ext/matrix_int3x4_sized.hpp - display/glm/glm/ext/matrix_int4x2.hpp - display/glm/glm/ext/matrix_int4x2_sized.hpp - display/glm/glm/ext/matrix_int4x3.hpp - display/glm/glm/ext/matrix_int4x3_sized.hpp - display/glm/glm/ext/matrix_int4x4.hpp - display/glm/glm/ext/matrix_int4x4_sized.hpp - display/glm/glm/ext/matrix_projection.hpp - display/glm/glm/ext/matrix_projection.inl - display/glm/glm/ext/matrix_relational.hpp - display/glm/glm/ext/matrix_relational.inl - display/glm/glm/ext/matrix_transform.hpp - display/glm/glm/ext/matrix_transform.inl - display/glm/glm/ext/matrix_uint2x2.hpp - display/glm/glm/ext/matrix_uint2x2_sized.hpp - display/glm/glm/ext/matrix_uint2x3.hpp - display/glm/glm/ext/matrix_uint2x3_sized.hpp - display/glm/glm/ext/matrix_uint2x4.hpp - display/glm/glm/ext/matrix_uint2x4_sized.hpp - display/glm/glm/ext/matrix_uint3x2.hpp - display/glm/glm/ext/matrix_uint3x2_sized.hpp - display/glm/glm/ext/matrix_uint3x3.hpp - display/glm/glm/ext/matrix_uint3x3_sized.hpp - display/glm/glm/ext/matrix_uint3x4.hpp - display/glm/glm/ext/matrix_uint3x4_sized.hpp - display/glm/glm/ext/matrix_uint4x2.hpp - display/glm/glm/ext/matrix_uint4x2_sized.hpp - display/glm/glm/ext/matrix_uint4x3.hpp - display/glm/glm/ext/matrix_uint4x3_sized.hpp - display/glm/glm/ext/matrix_uint4x4.hpp - display/glm/glm/ext/matrix_uint4x4_sized.hpp - display/glm/glm/ext/quaternion_common.hpp - display/glm/glm/ext/quaternion_common.inl - display/glm/glm/ext/quaternion_common_simd.inl - display/glm/glm/ext/quaternion_double.hpp - display/glm/glm/ext/quaternion_double_precision.hpp - display/glm/glm/ext/quaternion_exponential.hpp - display/glm/glm/ext/quaternion_exponential.inl - display/glm/glm/ext/quaternion_float.hpp - display/glm/glm/ext/quaternion_float_precision.hpp - display/glm/glm/ext/quaternion_geometric.hpp - display/glm/glm/ext/quaternion_geometric.inl - display/glm/glm/ext/quaternion_relational.hpp - display/glm/glm/ext/quaternion_relational.inl - display/glm/glm/ext/quaternion_transform.hpp - display/glm/glm/ext/quaternion_transform.inl - display/glm/glm/ext/quaternion_trigonometric.hpp - display/glm/glm/ext/quaternion_trigonometric.inl - display/glm/glm/ext/scalar_common.hpp - display/glm/glm/ext/scalar_common.inl - display/glm/glm/ext/scalar_constants.hpp - display/glm/glm/ext/scalar_constants.inl - display/glm/glm/ext/scalar_int_sized.hpp - display/glm/glm/ext/scalar_integer.hpp - display/glm/glm/ext/scalar_integer.inl - display/glm/glm/ext/scalar_packing.hpp - display/glm/glm/ext/scalar_packing.inl - display/glm/glm/ext/scalar_relational.hpp - display/glm/glm/ext/scalar_relational.inl - display/glm/glm/ext/scalar_uint_sized.hpp - display/glm/glm/ext/scalar_ulp.hpp - display/glm/glm/ext/scalar_ulp.inl - display/glm/glm/ext/vector_bool1.hpp - display/glm/glm/ext/vector_bool1_precision.hpp - display/glm/glm/ext/vector_bool2.hpp - display/glm/glm/ext/vector_bool2_precision.hpp - display/glm/glm/ext/vector_bool3.hpp - display/glm/glm/ext/vector_bool3_precision.hpp - display/glm/glm/ext/vector_bool4.hpp - display/glm/glm/ext/vector_bool4_precision.hpp - display/glm/glm/ext/vector_common.hpp - display/glm/glm/ext/vector_common.inl - display/glm/glm/ext/vector_double1.hpp - display/glm/glm/ext/vector_double1_precision.hpp - display/glm/glm/ext/vector_double2.hpp - display/glm/glm/ext/vector_double2_precision.hpp - display/glm/glm/ext/vector_double3.hpp - display/glm/glm/ext/vector_double3_precision.hpp - display/glm/glm/ext/vector_double4.hpp - display/glm/glm/ext/vector_double4_precision.hpp - display/glm/glm/ext/vector_float1.hpp - display/glm/glm/ext/vector_float1_precision.hpp - display/glm/glm/ext/vector_float2.hpp - display/glm/glm/ext/vector_float2_precision.hpp - display/glm/glm/ext/vector_float3.hpp - display/glm/glm/ext/vector_float3_precision.hpp - display/glm/glm/ext/vector_float4.hpp - display/glm/glm/ext/vector_float4_precision.hpp - display/glm/glm/ext/vector_int1.hpp - display/glm/glm/ext/vector_int1_sized.hpp - display/glm/glm/ext/vector_int2.hpp - display/glm/glm/ext/vector_int2_sized.hpp - display/glm/glm/ext/vector_int3.hpp - display/glm/glm/ext/vector_int3_sized.hpp - display/glm/glm/ext/vector_int4.hpp - display/glm/glm/ext/vector_int4_sized.hpp - display/glm/glm/ext/vector_integer.hpp - display/glm/glm/ext/vector_integer.inl - display/glm/glm/ext/vector_packing.hpp - display/glm/glm/ext/vector_packing.inl - display/glm/glm/ext/vector_relational.hpp - display/glm/glm/ext/vector_relational.inl - display/glm/glm/ext/vector_uint1.hpp - display/glm/glm/ext/vector_uint1_sized.hpp - display/glm/glm/ext/vector_uint2.hpp - display/glm/glm/ext/vector_uint2_sized.hpp - display/glm/glm/ext/vector_uint3.hpp - display/glm/glm/ext/vector_uint3_sized.hpp - display/glm/glm/ext/vector_uint4.hpp - display/glm/glm/ext/vector_uint4_sized.hpp - display/glm/glm/ext/vector_ulp.hpp - display/glm/glm/ext/vector_ulp.inl - display/glm/glm/fwd.hpp - display/glm/glm/geometric.hpp - display/glm/glm/glm.hpp - display/glm/glm/gtc/bitfield.hpp - display/glm/glm/gtc/bitfield.inl - display/glm/glm/gtc/color_space.hpp - display/glm/glm/gtc/color_space.inl - display/glm/glm/gtc/constants.hpp - display/glm/glm/gtc/constants.inl - display/glm/glm/gtc/epsilon.hpp - display/glm/glm/gtc/epsilon.inl - display/glm/glm/gtc/integer.hpp - display/glm/glm/gtc/integer.inl - display/glm/glm/gtc/matrix_access.hpp - display/glm/glm/gtc/matrix_access.inl - display/glm/glm/gtc/matrix_integer.hpp - display/glm/glm/gtc/matrix_inverse.hpp - display/glm/glm/gtc/matrix_inverse.inl - display/glm/glm/gtc/matrix_transform.hpp - display/glm/glm/gtc/matrix_transform.inl - display/glm/glm/gtc/noise.hpp - display/glm/glm/gtc/noise.inl - display/glm/glm/gtc/packing.hpp - display/glm/glm/gtc/packing.inl - display/glm/glm/gtc/quaternion.hpp - display/glm/glm/gtc/quaternion.inl - display/glm/glm/gtc/quaternion_simd.inl - display/glm/glm/gtc/random.hpp - display/glm/glm/gtc/random.inl - display/glm/glm/gtc/reciprocal.hpp - display/glm/glm/gtc/reciprocal.inl - display/glm/glm/gtc/round.hpp - display/glm/glm/gtc/round.inl - display/glm/glm/gtc/type_aligned.hpp - display/glm/glm/gtc/type_precision.hpp - display/glm/glm/gtc/type_precision.inl - display/glm/glm/gtc/type_ptr.hpp - display/glm/glm/gtc/type_ptr.inl - display/glm/glm/gtc/ulp.hpp - display/glm/glm/gtc/ulp.inl - display/glm/glm/gtc/vec1.hpp - display/glm/glm/gtx/associated_min_max.hpp - display/glm/glm/gtx/associated_min_max.inl - display/glm/glm/gtx/bit.hpp - display/glm/glm/gtx/bit.inl - display/glm/glm/gtx/closest_point.hpp - display/glm/glm/gtx/closest_point.inl - display/glm/glm/gtx/color_encoding.hpp - display/glm/glm/gtx/color_encoding.inl - display/glm/glm/gtx/color_space.hpp - display/glm/glm/gtx/color_space.inl - display/glm/glm/gtx/color_space_YCoCg.hpp - display/glm/glm/gtx/color_space_YCoCg.inl - display/glm/glm/gtx/common.hpp - display/glm/glm/gtx/common.inl - display/glm/glm/gtx/compatibility.hpp - display/glm/glm/gtx/compatibility.inl - display/glm/glm/gtx/component_wise.hpp - display/glm/glm/gtx/component_wise.inl - display/glm/glm/gtx/dual_quaternion.hpp - display/glm/glm/gtx/dual_quaternion.inl - display/glm/glm/gtx/easing.hpp - display/glm/glm/gtx/easing.inl - display/glm/glm/gtx/euler_angles.hpp - display/glm/glm/gtx/euler_angles.inl - display/glm/glm/gtx/extend.hpp - display/glm/glm/gtx/extend.inl - display/glm/glm/gtx/extended_min_max.hpp - display/glm/glm/gtx/extended_min_max.inl - display/glm/glm/gtx/exterior_product.hpp - display/glm/glm/gtx/exterior_product.inl - display/glm/glm/gtx/fast_exponential.hpp - display/glm/glm/gtx/fast_exponential.inl - display/glm/glm/gtx/fast_square_root.hpp - display/glm/glm/gtx/fast_square_root.inl - display/glm/glm/gtx/fast_trigonometry.hpp - display/glm/glm/gtx/fast_trigonometry.inl - display/glm/glm/gtx/float_notmalize.inl - display/glm/glm/gtx/functions.hpp - display/glm/glm/gtx/functions.inl - display/glm/glm/gtx/gradient_paint.hpp - display/glm/glm/gtx/gradient_paint.inl - display/glm/glm/gtx/handed_coordinate_space.hpp - display/glm/glm/gtx/handed_coordinate_space.inl - display/glm/glm/gtx/hash.hpp - display/glm/glm/gtx/hash.inl - display/glm/glm/gtx/integer.hpp - display/glm/glm/gtx/integer.inl - display/glm/glm/gtx/intersect.hpp - display/glm/glm/gtx/intersect.inl - display/glm/glm/gtx/io.hpp - display/glm/glm/gtx/io.inl - display/glm/glm/gtx/log_base.hpp - display/glm/glm/gtx/log_base.inl - display/glm/glm/gtx/matrix_cross_product.hpp - display/glm/glm/gtx/matrix_cross_product.inl - display/glm/glm/gtx/matrix_decompose.hpp - display/glm/glm/gtx/matrix_decompose.inl - display/glm/glm/gtx/matrix_factorisation.hpp - display/glm/glm/gtx/matrix_factorisation.inl - display/glm/glm/gtx/matrix_interpolation.hpp - display/glm/glm/gtx/matrix_interpolation.inl - display/glm/glm/gtx/matrix_major_storage.hpp - display/glm/glm/gtx/matrix_major_storage.inl - display/glm/glm/gtx/matrix_operation.hpp - display/glm/glm/gtx/matrix_operation.inl - display/glm/glm/gtx/matrix_query.hpp - display/glm/glm/gtx/matrix_query.inl - display/glm/glm/gtx/matrix_transform_2d.hpp - display/glm/glm/gtx/matrix_transform_2d.inl - display/glm/glm/gtx/mixed_product.hpp - display/glm/glm/gtx/mixed_product.inl - display/glm/glm/gtx/norm.hpp - display/glm/glm/gtx/norm.inl - display/glm/glm/gtx/normal.hpp - display/glm/glm/gtx/normal.inl - display/glm/glm/gtx/normalize_dot.hpp - display/glm/glm/gtx/normalize_dot.inl - display/glm/glm/gtx/number_precision.hpp - display/glm/glm/gtx/number_precision.inl - display/glm/glm/gtx/optimum_pow.hpp - display/glm/glm/gtx/optimum_pow.inl - display/glm/glm/gtx/orthonormalize.hpp - display/glm/glm/gtx/orthonormalize.inl - display/glm/glm/gtx/perpendicular.hpp - display/glm/glm/gtx/perpendicular.inl - display/glm/glm/gtx/polar_coordinates.hpp - display/glm/glm/gtx/polar_coordinates.inl - display/glm/glm/gtx/projection.hpp - display/glm/glm/gtx/projection.inl - display/glm/glm/gtx/quaternion.hpp - display/glm/glm/gtx/quaternion.inl - display/glm/glm/gtx/range.hpp - display/glm/glm/gtx/raw_data.hpp - display/glm/glm/gtx/raw_data.inl - display/glm/glm/gtx/rotate_normalized_axis.hpp - display/glm/glm/gtx/rotate_normalized_axis.inl - display/glm/glm/gtx/rotate_vector.hpp - display/glm/glm/gtx/rotate_vector.inl - display/glm/glm/gtx/scalar_multiplication.hpp - display/glm/glm/gtx/scalar_relational.hpp - display/glm/glm/gtx/scalar_relational.inl - display/glm/glm/gtx/spline.hpp - display/glm/glm/gtx/spline.inl - display/glm/glm/gtx/std_based_type.hpp - display/glm/glm/gtx/std_based_type.inl - display/glm/glm/gtx/string_cast.hpp - display/glm/glm/gtx/string_cast.inl - display/glm/glm/gtx/texture.hpp - display/glm/glm/gtx/texture.inl - display/glm/glm/gtx/transform.hpp - display/glm/glm/gtx/transform.inl - display/glm/glm/gtx/transform2.hpp - display/glm/glm/gtx/transform2.inl - display/glm/glm/gtx/type_aligned.hpp - display/glm/glm/gtx/type_aligned.inl - display/glm/glm/gtx/type_trait.hpp - display/glm/glm/gtx/type_trait.inl - display/glm/glm/gtx/vec_swizzle.hpp - display/glm/glm/gtx/vector_angle.hpp - display/glm/glm/gtx/vector_angle.inl - display/glm/glm/gtx/vector_query.hpp - display/glm/glm/gtx/vector_query.inl - display/glm/glm/gtx/wrap.hpp - display/glm/glm/gtx/wrap.inl - display/glm/glm/integer.hpp - display/glm/glm/mat2x2.hpp - display/glm/glm/mat2x3.hpp - display/glm/glm/mat2x4.hpp - display/glm/glm/mat3x2.hpp - display/glm/glm/mat3x3.hpp - display/glm/glm/mat3x4.hpp - display/glm/glm/mat4x2.hpp - display/glm/glm/mat4x3.hpp - display/glm/glm/mat4x4.hpp - display/glm/glm/matrix.hpp - display/glm/glm/packing.hpp - display/glm/glm/simd/common.h - display/glm/glm/simd/exponential.h - display/glm/glm/simd/geometric.h - display/glm/glm/simd/integer.h - display/glm/glm/simd/matrix.h - display/glm/glm/simd/neon.h - display/glm/glm/simd/packing.h - display/glm/glm/simd/platform.h - display/glm/glm/simd/trigonometric.h - display/glm/glm/simd/vector_relational.h - display/glm/glm/trigonometric.hpp - display/glm/glm/vec2.hpp - display/glm/glm/vec3.hpp - display/glm/glm/vec4.hpp - display/glm/glm/vector_relational.hpp - display/glm/manual.md - display/glm/readme.md fonts/Inconsolata-LICENSE.txt fonts/Inconsolata.otf images/primitives/other.png diff --git a/src/qged/QAccordionWidget.cpp b/src/qged/QAccordionWidget.cpp index 365812c8ac6..cf23a93875e 100644 --- a/src/qged/QAccordionWidget.cpp +++ b/src/qged/QAccordionWidget.cpp @@ -1,7 +1,7 @@ /* Q A C C O R D I O N W I D G E T . C X X * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/QAccordionWidget.h b/src/qged/QAccordionWidget.h index 01d65468deb..163ef70c401 100644 --- a/src/qged/QAccordionWidget.h +++ b/src/qged/QAccordionWidget.h @@ -1,7 +1,7 @@ /* Q A C C O R D I O N W I D G E T . H * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/QToolPalette.cpp b/src/qged/QToolPalette.cpp index 174522590dd..4f76b61d761 100644 --- a/src/qged/QToolPalette.cpp +++ b/src/qged/QToolPalette.cpp @@ -1,7 +1,7 @@ /* Q T O O L P A L E T T E . C X X * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -95,7 +95,6 @@ QToolPalette::QToolPalette(QWidget *pparent) : QWidget(pparent) button_layout->setContentsMargins(0,0,0,0); button_container->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed); button_container->setLayout(button_layout); - button_container->show(); control_container = new QWidget(); control_layout = new QVBoxLayout(); control_layout->setSpacing(0); @@ -104,7 +103,6 @@ QToolPalette::QToolPalette(QWidget *pparent) : QWidget(pparent) control_container->setMinimumHeight(icon_height); control_container->setMinimumWidth(icon_width); control_container->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); - control_container->show(); splitter->addWidget(button_container); splitter->setStretchFactor(0, 1); diff --git a/src/qged/QToolPalette.h b/src/qged/QToolPalette.h index b7bc55f5434..2387207d124 100644 --- a/src/qged/QToolPalette.h +++ b/src/qged/QToolPalette.h @@ -1,7 +1,7 @@ /* Q T O O L P A L E T T E . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/TODO.qt b/src/qged/TODO.qt index 39d5ceb1fe5..ac554deb4b2 100644 --- a/src/qged/TODO.qt +++ b/src/qged/TODO.qt @@ -37,4 +37,5 @@ Might be able to make a decent CAD console widget out of these: https://github.com/neovim/libvterm https://github.com/jsbronder/sff https://github.com/ohwgiles/quilte +https://github.com/kafeg/ptyqt diff --git a/src/qged/cadaccordion.cpp b/src/qged/cadaccordion.cpp index 1f3ee51d713..97d19b22b68 100644 --- a/src/qged/cadaccordion.cpp +++ b/src/qged/cadaccordion.cpp @@ -1,7 +1,7 @@ /* C A D A C C O R D I O N . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadaccordion.h b/src/qged/cadaccordion.h index e4c105a6a93..689d6c62169 100644 --- a/src/qged/cadaccordion.h +++ b/src/qged/cadaccordion.h @@ -1,7 +1,7 @@ /* C A D A C C O R D I O N . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadapp.cpp b/src/qged/cadapp.cpp index 9d00cb273b5..c8f38f06f42 100644 --- a/src/qged/cadapp.cpp +++ b/src/qged/cadapp.cpp @@ -1,7 +1,7 @@ /* C A D A P P . C X X * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -124,23 +124,6 @@ CADApp::closedb() current_file.clear(); } -// TODO - make the type an enum or bit flag or something, instead of multiple integers... -int -CADApp::register_command(QString cmdname, ged_func_ptr func, QString role) -{ - if (role == QString()) { - if (cmd_map.find(cmdname) != cmd_map.end()) return -1; - cmd_map.insert(cmdname, func); - } - if (role == QString("edit")) { - edit_cmds.insert(cmdname); - } - if (role == QString("view")) { - view_cmds.insert(cmdname); - } - return 0; -} - int CADApp::register_gui_command(QString cmdname, gui_cmd_ptr func, QString role) { @@ -148,12 +131,6 @@ CADApp::register_gui_command(QString cmdname, gui_cmd_ptr func, QString role) if (gui_cmd_map.find(cmdname) != gui_cmd_map.end()) return -1; gui_cmd_map.insert(cmdname, func); } - if (role == QString("edit")) { - edit_cmds.insert(cmdname); - } - if (role == QString("view")) { - view_cmds.insert(cmdname); - } if (role == QString("preprocess")) { if (preprocess_cmd_map.find(cmdname) != preprocess_cmd_map.end()) return -1; preprocess_cmd_map.insert(cmdname, func); @@ -181,6 +158,9 @@ CADApp::exec_command(QString *command, QString *result) char *lcmd = NULL; char **largv = NULL; int largc = 0; + const char *ccmd = NULL; + int edist = 0; + struct bu_vls rmsg = BU_VLS_INIT_ZERO; if (ged_pointer != GED_NULL && command && command->length() > 0) { @@ -195,8 +175,7 @@ CADApp::exec_command(QString *command, QString *result) (*(preprocess_cmd_itr.value()))(&lcommand, (CADApp *)qApp); } - ged_cmd_itr = cmd_map.find(cargv0); - if (ged_cmd_itr != cmd_map.end()) { + if (!ged_cmd_valid(cargv0.toLocal8Bit().constData(), NULL)) { // Prepare libged arguments lcmd = bu_strdup(lcommand.toLocal8Bit()); largv = (char **)bu_calloc(lcommand.length()/2+1, sizeof(char *), "cmd_eval argv"); @@ -210,23 +189,23 @@ CADApp::exec_command(QString *command, QString *result) // text output quite a lot. However, view commands should return while allowing long // drawing routines to execute in the background - using something like Z or B should // abort drawing and clear the view, but otherwise let it complete... - ret = (*(ged_cmd_itr.value()))(ged_pointer, largc, (const char **)largv); + ret = ged_exec(ged_pointer, largc, (const char **)largv); if (result && bu_vls_strlen(ged_pointer->ged_result_str) > 0) { *result = QString(QLatin1String(bu_vls_addr(ged_pointer->ged_result_str))); } - // Now that the command is run, emit any signals that need emitting. What would - // really handle this properly is for the ged structure to contain a list of directory - // pointers that were impacted by the command, so we could emit signals with the - // specifics of what objects need updating. - if (edit_cmds.find(QString(largv[0])) != edit_cmds.end()) emit db_change(); - if (view_cmds.find(QString(largv[0])) != view_cmds.end()) emit view_change(); + // Now that the command is run, emit any signals that need emitting. TODO - we need + // some better mechanism for this. Once we move to transactions, we can analyze the + // transaction list - hardcoding this per-command is not a great way to go... + //if (edit_cmds.find(QString(largv[0])) != edit_cmds.end()) emit db_change(); + //if (view_cmds.find(QString(largv[0])) != view_cmds.end()) emit view_change(); bu_free(lcmd, "free tmp cmd str"); bu_free(largv, "free tmp argv"); goto postprocess; } + // Not a valid GED command - see if it's an application level command gui_cmd_itr = gui_cmd_map.find(cargv0); if (gui_cmd_itr != gui_cmd_map.end()) { QString args(lcommand); @@ -235,6 +214,15 @@ CADApp::exec_command(QString *command, QString *result) goto postprocess; } + // If we didn't find the command either as a ged command or a gui command, + // see if libged has a suggestion. + edist = ged_cmd_lookup(&ccmd, cargv0.toLocal8Bit().constData()); + if (edist <= cargv0.length()/2) { + bu_vls_sprintf(&rmsg, "Command \"%s\" not found, did you mean \"%s\"?\n", cargv0.toLocal8Bit().constData(), ccmd); + *result = QString(QLatin1String(bu_vls_cstr(&rmsg))); + ret = 1; + } + postprocess: // Take care of any results post-processing needed postprocess_cmd_itr = postprocess_cmd_map.find(cargv0); @@ -245,6 +233,8 @@ CADApp::exec_command(QString *command, QString *result) if (ret == -1) *result = QString("command not found"); } + + bu_vls_free(&rmsg); return ret; } diff --git a/src/qged/cadapp.h b/src/qged/cadapp.h index f907d84993a..370d5d69c74 100644 --- a/src/qged/cadapp.h +++ b/src/qged/cadapp.h @@ -1,7 +1,7 @@ /* C A D A P P . H * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -58,11 +58,6 @@ class CADApp : public QApplication int opendb(QString filename); void closedb(); - // TODO - need to update this to use the gsh dynamic lookup mechanism. - // Moreover, the command itself really needs to be able to tell the - // application whether it might update the database, view, etc. rather - // than hard-coding that in each GUI... - int register_command(QString cmdname, ged_func_ptr func, QString role = QString()); int register_gui_command(QString cmdname, gui_cmd_ptr func, QString role = QString()); int exec_command(QString *command, QString *result); @@ -84,13 +79,9 @@ class CADApp : public QApplication struct ged *ged_pointer; QString current_file; int interaction_mode; // 0 = view, 1 = instance edit, 2 = primitive edit - QMap cmd_map; QMap gui_cmd_map; QMap preprocess_cmd_map; QMap postprocess_cmd_map; - QSet edit_cmds; // Commands that potentially change the database contents */ - QSet view_cmds; // Commands that potentially change the view, but not the database contents */ - }; QString import_db(QString filename); diff --git a/src/qged/cadappexec.cpp b/src/qged/cadappexec.cpp index fe4c162cf7f..d91b731822d 100644 --- a/src/qged/cadappexec.cpp +++ b/src/qged/cadappexec.cpp @@ -1,7 +1,7 @@ /* C A D A P P E X E C . C X X * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadappexec.h b/src/qged/cadappexec.h index df89a04a97f..7ba3136056c 100644 --- a/src/qged/cadappexec.h +++ b/src/qged/cadappexec.h @@ -1,7 +1,7 @@ /* C A D A P P E X E C . H * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadattributes.cpp b/src/qged/cadattributes.cpp index 84cbf5543c6..0d06cf8c4b7 100644 --- a/src/qged/cadattributes.cpp +++ b/src/qged/cadattributes.cpp @@ -1,7 +1,7 @@ /* C A D A T T R I B U T E S . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadattributes.h b/src/qged/cadattributes.h index fa463c96b53..256a4619d2a 100644 --- a/src/qged/cadattributes.h +++ b/src/qged/cadattributes.h @@ -1,7 +1,7 @@ /* C A D A T T R I B U T E S . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadcommands.cpp b/src/qged/cadcommands.cpp index 2fb1bf19cd1..121aae40001 100644 --- a/src/qged/cadcommands.cpp +++ b/src/qged/cadcommands.cpp @@ -1,7 +1,7 @@ /* C A D C O M M A N D S . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -38,258 +38,6 @@ int null_gui_cmd(QString *args, CADApp *app) void cad_register_commands(CADApp *app) { - // Geometry Editing (libged) commands - app->register_command(QString("3ptarb"), ged_3ptarb); // cmd_ged_more_wrapper - app->register_command(QString("adc"), ged_adc); // to_view_func - app->register_command(QString("adjust"), ged_adjust); - app->register_command(QString("ae"), ged_aet); // cmd_ged_view_wrapper - app->register_command(QString("aet"), ged_aet); // cmd_ged_view_wrapper - app->register_command(QString("ae2dir"), ged_ae2dir); - app->register_command(QString("analyze"), ged_analyze); // cmd_ged_info_wrapper - app->register_command(QString("annotate"), ged_annotate); - app->register_command(QString("arb"), ged_arb); - app->register_command(QString("arced"), ged_arced); - app->register_command(QString("arot"), ged_arot); // to_view_func_plus - app->register_command(QString("attr"), ged_attr); - app->register_command(QString("bb"), ged_bb); - app->register_command(QString("bev"), ged_bev); - app->register_command(QString("bo"), ged_bo); - app->register_command(QString("bot"), ged_bot); - app->register_command(QString("bot_condense"), ged_bot_condense); - app->register_command(QString("bot_decimate"), ged_bot_decimate); - app->register_command(QString("bot_dump"), ged_bot_dump); - app->register_command(QString("bot_face_fuse"), ged_bot_face_fuse); - app->register_command(QString("bot_face_sort"), ged_bot_face_sort); - app->register_command(QString("bot_flip"), ged_bot_flip); - app->register_command(QString("bot_fuse"), ged_bot_fuse); - app->register_command(QString("bot_merge"), ged_bot_merge); - app->register_command(QString("bot_smooth"), ged_bot_smooth); - app->register_command(QString("bot_split"), ged_bot_split); - app->register_command(QString("bot_sync"), ged_bot_sync); - app->register_command(QString("bot_vertex_fuse"), ged_bot_vertex_fuse); - app->register_command(QString("brep"), ged_brep); // cmd_ged_view_wrapper - app->register_command(QString("c"), ged_comb_std); - app->register_command(QString("cat"), ged_cat); // cmd_ged_info_wrapper - app->register_command(QString("cc"), ged_cc); - app->register_command(QString("clone"), ged_clone); // cmd_ged_edit_wrapper - app->register_command(QString("coil"), ged_coil); - app->register_command(QString("color"), ged_color); - app->register_command(QString("comb"), ged_comb); - app->register_command(QString("comb_color"), ged_comb_color); - app->register_command(QString("combmem"), ged_combmem); - app->register_command(QString("constraint"), ged_constraint); - app->register_command(QString("copyeval"), ged_copyeval); - app->register_command(QString("copymat"), ged_copymat); - app->register_command(QString("cp"), ged_copy); - app->register_command(QString("cpi"), ged_cpi); - app->register_command(QString("d"), ged_erase); // cmd_ged_erase_wrapper - app->register_command(QString("db_glob"), ged_glob); - app->register_command(QString("dbconcat"), ged_concat); - app->register_command(QString("dbfind"), ged_find); // cmd_ged_info_wrapper - app->register_command(QString("dbip"), ged_dbip); - app->register_command(QString("dbversion"), ged_version); - app->register_command(QString("dbot_dump"), ged_dbot_dump); - app->register_command(QString("debugbu"), ged_debugbu); - app->register_command(QString("debugdir"), ged_debugdir); - app->register_command(QString("debuglib"), ged_debuglib); - app->register_command(QString("debugnmg"), ged_debugnmg); - app->register_command(QString("decompose"), ged_decompose); - app->register_command(QString("delay"), ged_delay); - app->register_command(QString("dir2ae"), ged_dir2ae); - app->register_command(QString("draw"), ged_draw); // to_autoview_func - app->register_command(QString("dump"), ged_dump); - app->register_command(QString("dup"), ged_dup); - app->register_command(QString("E"), ged_E); // to_autoview_func - app->register_command(QString("e"), ged_draw); // to_autoview_func - app->register_command(QString("eac"), ged_eac); // cmd_ged_view_wrapper - app->register_command(QString("echo"), ged_echo); - app->register_command(QString("edarb"), ged_edarb); // to_more_args_func - app->register_command(QString("edcodes"), ged_edcodes); - app->register_command(QString("edcolor"), ged_edcolor); - app->register_command(QString("edcomb"), ged_edcomb); - app->register_command(QString("edit"), ged_edit); - app->register_command(QString("edmater"), ged_edmater); - app->register_command(QString("erase"), ged_erase); // to_pass_through_and_refresh_func - app->register_command(QString("ev"), ged_ev); // to_autoview_func - app->register_command(QString("expand"), ged_expand); - app->register_command(QString("exists"), ged_exists); - app->register_command(QString("eye"), ged_eye); // cmd_ged_view_wrapper - app->register_command(QString("eye_pos"), ged_eye_pos); // cmd_ged_view_wrapper - app->register_command(QString("eye_pt"), ged_eye); // cmd_ged_view_wrapper - app->register_command(QString("facetize"), ged_facetize); - app->register_command(QString("fb2pix"), ged_fb2pix); // to_view_func - app->register_command(QString("fbclear"), ged_fbclear); // to_view_func - app->register_command(QString("form"), ged_form); - app->register_command(QString("fracture"), ged_fracture); - app->register_command(QString("g"), ged_group); - app->register_command(QString("gdiff"), ged_gdiff); - app->register_command(QString("get"), ged_get); - app->register_command(QString("get_autoview"), ged_get_autoview); - app->register_command(QString("get_bot_edges"), ged_get_bot_edges); - app->register_command(QString("get_comb"), ged_get_comb); - app->register_command(QString("get_dbip"), ged_dbip); - app->register_command(QString("get_eyemodel"), ged_get_eyemodel); - app->register_command(QString("get_type"), ged_get_type); - app->register_command(QString("glob"), ged_glob); - app->register_command(QString("gqa"), ged_gqa); // cmd_ged_gqa - app->register_command(QString("graph"), ged_graph); - app->register_command(QString("grid"), ged_grid); - app->register_command(QString("grid2model_lu"), ged_grid2model_lu); // to_view_func_less - app->register_command(QString("grid2view_lu"), ged_grid2view_lu); // to_view_func_less - app->register_command(QString("group"), ged_group); - app->register_command(QString("hide"), ged_hide); - app->register_command(QString("how"), ged_how); - app->register_command(QString("human"), ged_human); - app->register_command(QString("i"), ged_instance); - app->register_command(QString("idents"), ged_tables); - app->register_command(QString("illum"), ged_illum); // to_pass_through_and_refresh_func - app->register_command(QString("importFg4Section"), ged_importFg4Section); - app->register_command(QString("in"), ged_in); //cmd_ged_in - app->register_command(QString("inside"), ged_inside); //cmd_ged_inside // to_more_args_func - app->register_command(QString("item"), ged_item); - app->register_command(QString("isize"), ged_isize); //to_view_func - app->register_command(QString("joint"), ged_joint); - app->register_command(QString("joint2"), ged_joint2); - app->register_command(QString("keep"), ged_keep); - app->register_command(QString("keypoint"), ged_keypoint); // to_view_func - app->register_command(QString("kill"), ged_kill); // cmd_ged_erase_wrapper - app->register_command(QString("killall"), ged_killall); // cmd_ged_erase_wrapper - app->register_command(QString("killrefs"), ged_killrefs); // cmd_ged_erase_wrapper - app->register_command(QString("killtree"), ged_killtree); // cmd_ged_erase_wrapper - app->register_command(QString("l"), ged_list); // cmd_ged_info_wrapper - app->register_command(QString("listeval"), ged_pathsum); - app->register_command(QString("loadview"), ged_loadview); // cmd_ged_view_wrapper - app->register_command(QString("lod"), ged_lod); - app->register_command(QString("log"), ged_log); - app->register_command(QString("lookat"), ged_lookat); // cmd_ged_view_wrapper - app->register_command(QString("ls"), ged_ls); - app->register_command(QString("lt"), ged_lt); - app->register_command(QString("m2v_point"), ged_m2v_point); - app->register_command(QString("make_name"), ged_make_name); - app->register_command(QString("make_pnts"), ged_make_pnts); // cmd_ged_more_wrapper - app->register_command(QString("match"), ged_match); - app->register_command(QString("mater"), ged_mater); - app->register_command(QString("mirror"), ged_mirror); // libtclcad calls to_mirror?? - app->register_command(QString("model2grid_lu"), ged_model2grid_lu); - app->register_command(QString("model2view"), ged_model2view); - app->register_command(QString("model2view_lu"), ged_model2view_lu); - app->register_command(QString("move_arb_edge"), ged_move_arb_edge); - app->register_command(QString("move_arb_face"), ged_move_arb_face); - app->register_command(QString("mv"), ged_move); - app->register_command(QString("mvall"), ged_move_all); - app->register_command(QString("nirt"), ged_nirt); - app->register_command(QString("nmg_collapse"), ged_nmg_collapse); - app->register_command(QString("nmg_fix_normals"), ged_nmg_fix_normals); - app->register_command(QString("nmg_simplify"), ged_nmg_simplify); - app->register_command(QString("ocenter"), ged_ocenter); - app->register_command(QString("open"), ged_reopen); // to_pass_through_and_refresh_func - app->register_command(QString("orientation"), ged_orient); // cmd_ged_view_wrapper - app->register_command(QString("orotate"), ged_orotate); - app->register_command(QString("oscale"), ged_oscale); - app->register_command(QString("otranslate"), ged_otranslate); - app->register_command(QString("overlay"), ged_overlay); //to_autoview_func - app->register_command(QString("pathlist"), ged_pathlist); - app->register_command(QString("paths"), ged_pathsum); - app->register_command(QString("perspective"), ged_perspective); - app->register_command(QString("pix2fb"), ged_pix2fb); // to_view_func - app->register_command(QString("plot"), ged_plot); - app->register_command(QString("png"), ged_png); // also a to_png in libtclcad... - app->register_command(QString("pngwf"), ged_png); // to_view_func - app->register_command(QString("pov"), ged_pmat); - app->register_command(QString("prcolor"), ged_prcolor); - app->register_command(QString("prefix"), ged_prefix); - app->register_command(QString("preview"), ged_preview); // cmd_ged_dm_wrapper - app->register_command(QString("protate"), ged_protate); - app->register_command(QString("ps"), ged_ps); - app->register_command(QString("pscale"), ged_pscale); - app->register_command(QString("pset"), ged_pset); - app->register_command(QString("ptranslate"), ged_ptranslate); - app->register_command(QString("pull"), ged_pull); - app->register_command(QString("push"), ged_push); - app->register_command(QString("put"), ged_put); - app->register_command(QString("put_comb"), ged_put_comb); - app->register_command(QString("putmat"), ged_putmat); - app->register_command(QString("qray"), ged_qray); - app->register_command(QString("quat"), ged_quat); - app->register_command(QString("qvrot"), ged_qvrot); // cmd_ged_view_wrapper - app->register_command(QString("r"), ged_region); - app->register_command(QString("rect"), ged_rect); - app->register_command(QString("red"), ged_red); - app->register_command(QString("rcodes"), ged_rcodes); - app->register_command(QString("regdef"), ged_regdef); - app->register_command(QString("regions"), ged_tables); - app->register_command(QString("rfarb"), ged_rfarb); - app->register_command(QString("rm"), ged_remove); // to_pass_through_and_refresh_func - app->register_command(QString("rmap"), ged_rmap); - app->register_command(QString("rmat"), ged_rmat); // to_view_func - app->register_command(QString("rmater"), ged_rmater); - app->register_command(QString("rot"), ged_rot); // to_view_func_plus - app->register_command(QString("rot_about"), ged_rotate_about); // to_view_func - app->register_command(QString("rot_point"), ged_rot_point); // to_view_func - app->register_command(QString("rotate_arb_face"), ged_rotate_arb_face); - app->register_command(QString("rrt"), ged_rrt); // to_view_func - app->register_command(QString("rselect"), ged_rselect); // to_view_func - app->register_command(QString("rt"), ged_rt); // to_view_func - app->register_command(QString("rtabort"), ged_rtabort); - app->register_command(QString("rtarea"), ged_rt); // to_view_func - app->register_command(QString("rtcheck"), ged_rtcheck); // to_view_func - app->register_command(QString("rtedge"), ged_rt); // to_view_func - app->register_command(QString("rtweight"), ged_rt); // to_view_func - app->register_command(QString("rtwizard"), ged_rtwizard); // to_view_func - app->register_command(QString("savekey"), ged_savekey); - app->register_command(QString("saveview"), ged_saveview); - app->register_command(QString("sca"), ged_scale); // to_view_func_plus - app->register_command(QString("screengrab"), ged_screen_grab); // cmd_ged_dm_wrapper - app->register_command(QString("search"), ged_search); - app->register_command(QString("select"), ged_select); //to_view_func - app->register_command(QString("set_output_script"), ged_set_output_script); - app->register_command(QString("set_transparency"), ged_set_transparency); - app->register_command(QString("set_uplotOutputMode"), ged_set_uplotOutputMode); - app->register_command(QString("setview"), ged_setview); //to_view_func_plus - app->register_command(QString("shaded_mode"), ged_shaded_mode); - app->register_command(QString("shader"), ged_shader); - app->register_command(QString("shells"), ged_shells); - app->register_command(QString("showmats"), ged_showmats); - app->register_command(QString("size"), ged_size); - app->register_command(QString("simulate"), ged_simulate); // cmd_ged_simulate_wrapper - app->register_command(QString("slew"), ged_slew); - app->register_command(QString("solid_report"), ged_solid_report); - app->register_command(QString("solids"), ged_tables); - app->register_command(QString("solids_on_ray"), ged_solids_on_ray); - app->register_command(QString("summary"), ged_summary); - app->register_command(QString("sync"), ged_sync); - app->register_command(QString("t"), ged_ls); - app->register_command(QString("tire"), ged_tire); - app->register_command(QString("title"), ged_title); - app->register_command(QString("tol"), ged_tol); - app->register_command(QString("tops"), ged_tops); - app->register_command(QString("tree"), ged_tree); - app->register_command(QString("unhide"), ged_unhide); - app->register_command(QString("units"), ged_units); - app->register_command(QString("v2m_point"), ged_v2m_point); - app->register_command(QString("vdraw"), ged_vdraw); // to_pass_through_and_refresh_func - app->register_command(QString("version"), ged_version); - app->register_command(QString("view"), ged_view_func); // to_view_func_plus - app->register_command(QString("view2grid_lu"), ged_view2grid_lu); - app->register_command(QString("view2model"), ged_view2model); // to_view_func_less - app->register_command(QString("view2model_lu"), ged_view2model_lu); // to_view_func_less - app->register_command(QString("view2model_vec"), ged_view2model_vec); // to_view_func_less - app->register_command(QString("viewdir"), ged_viewdir); - app->register_command(QString("vnirt"), ged_vnirt); // to_view_func - app->register_command(QString("voxelize"), ged_voxelize); - app->register_command(QString("wcodes"), ged_wcodes); - app->register_command(QString("whatid"), ged_whatid); - app->register_command(QString("which_shader"), ged_which_shader); - app->register_command(QString("whichair"), ged_which); - app->register_command(QString("whichid"), ged_which); - app->register_command(QString("who"), ged_who); - app->register_command(QString("wmater"), ged_wmater); - app->register_command(QString("x"), ged_solid_report); - app->register_command(QString("xpush"), ged_xpush); - app->register_command(QString("ypr"), ged_ypr); - app->register_command(QString("zap"), ged_zap); // to_pass_through_and_refresh_func - app->register_command(QString("zoom"), ged_zoom); // to_pass_through_and_refresh_func - // GUI commands app->register_gui_command(QString("man"), cad_man_view); diff --git a/src/qged/cadcommands.h b/src/qged/cadcommands.h index 97699f2b183..2bbb7bcc700 100644 --- a/src/qged/cadcommands.h +++ b/src/qged/cadcommands.h @@ -1,7 +1,7 @@ /* C A D C O M M A N D S . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadhelp.cpp b/src/qged/cadhelp.cpp index f9331d7e8b2..a0354e73fa9 100644 --- a/src/qged/cadhelp.cpp +++ b/src/qged/cadhelp.cpp @@ -1,7 +1,7 @@ /* C A D H E L P . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadhelp.h b/src/qged/cadhelp.h index 2631efd7f30..ee3183c4d8c 100644 --- a/src/qged/cadhelp.h +++ b/src/qged/cadhelp.h @@ -1,7 +1,7 @@ /* C A D H E L P . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadimport.cpp b/src/qged/cadimport.cpp index 3a04394b346..d08a77e828d 100644 --- a/src/qged/cadimport.cpp +++ b/src/qged/cadimport.cpp @@ -1,7 +1,7 @@ /* C A D I M P O R T . C X X * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -109,10 +109,7 @@ RhinoImportDialog::RhinoImportDialog(QString filename) QString RhinoImportDialog::command() { - QString prog_name(bu_brlcad_dir("bin", 1)); - prog_name.append("/3dm-g"); - prog_name.append(EXECUTABLE_SUFFIX); - prog_name = QString(bu_brlcad_root((const char *)prog_name.toLocal8Bit(), 1)); + QString prog_name(bu_dir(NULL, 0, BU_DIR_BIN, "3dm-g", BU_DIR_EXT, NULL)); return prog_name; } @@ -190,10 +187,7 @@ STEPImportDialog::STEPImportDialog(QString filename) QString STEPImportDialog::command() { - QString prog_name(bu_brlcad_dir("bin", 1)); - prog_name.append("/step-g"); - prog_name.append(EXECUTABLE_SUFFIX); - prog_name = QString(bu_brlcad_root((const char *)prog_name.toLocal8Bit(), 1)); + QString prog_name(bu_dir(NULL, 0, BU_DIR_BIN, "step-g", BU_DIR_EXT, NULL)); return prog_name; } diff --git a/src/qged/cadimport.h b/src/qged/cadimport.h index e3edd4567f8..691a1bb2d9f 100644 --- a/src/qged/cadimport.h +++ b/src/qged/cadimport.h @@ -1,7 +1,7 @@ /* C A D I M P O R T . H * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadtreemodel.cpp b/src/qged/cadtreemodel.cpp index 41436512400..46fe50a0223 100644 --- a/src/qged/cadtreemodel.cpp +++ b/src/qged/cadtreemodel.cpp @@ -1,7 +1,7 @@ /* C A D T R E E M O D E L . C X X * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -413,7 +413,7 @@ db_find_subtree(int *ret, const char *name, union tree *tp, struct db_i *dbip, i case OP_SUBTRACT: case OP_XOR: db_find_subtree(ret, name, tp->tr_b.tb_right, dbip, depth, max_depth, combinternals, traverse_func); - break; + /* fall through */ case OP_NOT: case OP_GUARD: case OP_XNOP: @@ -718,6 +718,9 @@ bool CADTreeModel::canFetchMore(const QModelIndex &idx) const { CADTreeNode *curr_node = IndexNode(idx); if (curr_node == m_root) return false; + if (rowCount(idx)) { + return false; + } if (curr_node->node_dp->d_flags & RT_DIR_COMB) { return true; } diff --git a/src/qged/cadtreemodel.h b/src/qged/cadtreemodel.h index a144aef8c47..53214ed0c81 100644 --- a/src/qged/cadtreemodel.h +++ b/src/qged/cadtreemodel.h @@ -1,7 +1,7 @@ /* C A D T R E E M O D E L . H * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadtreenode.cpp b/src/qged/cadtreenode.cpp index 85419d93534..48235dcbf6c 100644 --- a/src/qged/cadtreenode.cpp +++ b/src/qged/cadtreenode.cpp @@ -1,7 +1,7 @@ /* C A D T R E E N O D E . C X X * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadtreenode.h b/src/qged/cadtreenode.h index 74aa2c653a6..45e5b0757ea 100644 --- a/src/qged/cadtreenode.h +++ b/src/qged/cadtreenode.h @@ -1,7 +1,7 @@ /* C A D T R E E N O D E . H * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadtreeview.cpp b/src/qged/cadtreeview.cpp index 98a19dc98c1..f031b506c03 100644 --- a/src/qged/cadtreeview.cpp +++ b/src/qged/cadtreeview.cpp @@ -1,7 +1,7 @@ /* C A D T R E E V I E W . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadtreeview.h b/src/qged/cadtreeview.h index 2e7a2b9e073..b44622518f2 100644 --- a/src/qged/cadtreeview.h +++ b/src/qged/cadtreeview.h @@ -1,7 +1,7 @@ /* C A D T R E E V I E W . H * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadview.cpp b/src/qged/cadview.cpp index f115060d852..801d269ae07 100644 --- a/src/qged/cadview.cpp +++ b/src/qged/cadview.cpp @@ -1,7 +1,7 @@ /* C A D V I E W . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/cadview.h b/src/qged/cadview.h index db392af3272..8eb83eb0de3 100644 --- a/src/qged/cadview.h +++ b/src/qged/cadview.h @@ -1,7 +1,7 @@ /* C A D V I E W . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/console.cpp b/src/qged/console.cpp index 3a57b15ad6c..34a29cb49f4 100644 --- a/src/qged/console.cpp +++ b/src/qged/console.cpp @@ -1,7 +1,7 @@ /* C O N S O L E . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/console.h b/src/qged/console.h index 490d84930eb..e550f27b292 100644 --- a/src/qged/console.h +++ b/src/qged/console.h @@ -1,7 +1,7 @@ /* C O N S O L E . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/display/AxesRenderer.cpp b/src/qged/display/AxesRenderer.cpp index 91ae68e7d7c..84d3e7bbf9c 100644 --- a/src/qged/display/AxesRenderer.cpp +++ b/src/qged/display/AxesRenderer.cpp @@ -1,7 +1,7 @@ /* A X E S R E N D E R E R . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/display/AxesRenderer.h b/src/qged/display/AxesRenderer.h index 589df8d48d7..e669d684c87 100644 --- a/src/qged/display/AxesRenderer.h +++ b/src/qged/display/AxesRenderer.h @@ -1,7 +1,7 @@ /* A X E S R E N D E R E R . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/display/Camera.h b/src/qged/display/Camera.h index 9245542484f..6eb45c566db 100644 --- a/src/qged/display/Camera.h +++ b/src/qged/display/Camera.h @@ -1,7 +1,7 @@ /* C A M E R A . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -23,22 +23,26 @@ #define RT3_CAMERABK_H -#include +#include +#include class Camera { public: - glm::vec3 axisX = glm::vec3(1.0f,0.0f,0.0f); - glm::vec3 axisY = glm::vec3(0.0f,1.0f,0.0f); - glm::vec3 axisZ = glm::vec3(0.0f,0.0f,1.0f); + QVector3D axisX = QVector3D(1.0f,0.0f,0.0f); + QVector3D axisY = QVector3D(0.0f,1.0f,0.0f); + QVector3D axisZ = QVector3D(0.0f,0.0f,1.0f); virtual void setWH(float w, float h) = 0; virtual void processMoveRequest(const int &deltaX, const int &deltaY) = 0; virtual void processRotateRequest(const int & deltaX, const int & deltaY, const bool& thirdAxis) = 0; virtual void processZoomRequest(const int & deltaWheelAngle) = 0; - virtual glm::mat4 modelViewMatrix() const = 0; - virtual glm::mat4 projectionMatrix() const = 0; + virtual QMatrix4x4 modelViewMatrix() const = 0; + virtual QMatrix4x4 modelViewMatrixNoTranslate() const = 0; + virtual QMatrix4x4 projectionMatrix() const = 0; + + virtual void setEyePosition(float x, float y, float z) = 0; }; diff --git a/src/qged/display/Display.cpp b/src/qged/display/Display.cpp index 792fe8c614d..b1af180b432 100644 --- a/src/qged/display/Display.cpp +++ b/src/qged/display/Display.cpp @@ -1,7 +1,7 @@ /* D I S P L A Y . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -21,7 +21,6 @@ #include "Display.h" -#include #include #include #include "DisplayManager.h" @@ -65,9 +64,9 @@ void Display::resizeGL(int w, int h) { void Display::paintGL() { displayManager->drawBegin(); - displayManager->loadMatrix((const float*)glm::value_ptr(camera->modelViewMatrix())); - displayManager->loadPMatrix((const float*)glm::value_ptr(camera->projectionMatrix())); - + displayManager->loadMatrix(camera->modelViewMatrix().data()); + displayManager->loadPMatrix(camera->projectionMatrix().data()); + for (auto i:renderers) i->render(); } diff --git a/src/qged/display/Display.h b/src/qged/display/Display.h index db04530f7b0..947eb1812c5 100644 --- a/src/qged/display/Display.h +++ b/src/qged/display/Display.h @@ -1,7 +1,7 @@ /* D I S P L A Y . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/display/DisplayManager.cpp b/src/qged/display/DisplayManager.cpp index 80bb0abaf0f..5c319afaa30 100644 --- a/src/qged/display/DisplayManager.cpp +++ b/src/qged/display/DisplayManager.cpp @@ -1,7 +1,7 @@ /* D I S P L A Y M A N A G E R . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/display/DisplayManager.h b/src/qged/display/DisplayManager.h index b8a44272e4d..b3c902a460e 100644 --- a/src/qged/display/DisplayManager.h +++ b/src/qged/display/DisplayManager.h @@ -1,7 +1,7 @@ /* D I S P L A Y M A N A G E R . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/display/GeometryRenderer.cpp b/src/qged/display/GeometryRenderer.cpp index 4a7820380fa..a430dcd9670 100644 --- a/src/qged/display/GeometryRenderer.cpp +++ b/src/qged/display/GeometryRenderer.cpp @@ -1,7 +1,7 @@ /* G E O M E T R Y R E N D E R E R . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/display/GeometryRenderer.h b/src/qged/display/GeometryRenderer.h index c1956d8b269..5c1ae2538da 100644 --- a/src/qged/display/GeometryRenderer.h +++ b/src/qged/display/GeometryRenderer.h @@ -1,7 +1,7 @@ /* G E O M E T R Y R E N D E R E R . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/display/OrthographicCamera.cpp b/src/qged/display/OrthographicCamera.cpp index efb04e0a11e..1d318b34fa4 100644 --- a/src/qged/display/OrthographicCamera.cpp +++ b/src/qged/display/OrthographicCamera.cpp @@ -1,7 +1,7 @@ /* O R T H O G R A P H I C C A M E R A . C P P * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -23,8 +23,7 @@ #include "common.h" #include "OrthographicCamera.h" -#include -#include +#include #if defined(__GNUC__) && !defined(__clang__) # pragma GCC diagnostic push @@ -41,17 +40,24 @@ OrthographicCamera::OrthographicCamera() = default; -glm::mat4 OrthographicCamera::modelViewMatrix() const { - auto rotationMatrixAroundX = glm::rotate(glm::radians(angleAroundAxes.x), axisX); - auto rotationMatrixAroundY = glm::rotate(glm::radians(angleAroundAxes.y), axisY); - auto rotationMatrixAroundZ = glm::rotate(glm::radians(angleAroundAxes.z), axisZ); - auto rotationMatrix = rotationMatrixAroundX * rotationMatrixAroundY * rotationMatrixAroundZ; - - return glm::translate(rotationMatrix, eyePosition); +QMatrix4x4 OrthographicCamera::modelViewMatrix() const { + QMatrix4x4 rotationMatrixAroundX; + rotationMatrixAroundX.rotate(angleAroundAxes.x(), axisX); + QMatrix4x4 rotationMatrixAroundY; + rotationMatrixAroundY.rotate(angleAroundAxes.y(), axisY); + QMatrix4x4 rotationMatrixAroundZ; + rotationMatrixAroundZ.rotate(angleAroundAxes.z(), axisZ); + QMatrix4x4 rotationMatrix = rotationMatrixAroundX * rotationMatrixAroundY * rotationMatrixAroundZ; + rotationMatrix.translate(-eyePosition); + + return rotationMatrix; } -glm::mat4 OrthographicCamera::projectionMatrix() const { - return glm::ortho(-zoom * w / h, zoom * w / h, -zoom, zoom, nearPlane, farPlane); +QMatrix4x4 OrthographicCamera::projectionMatrix() const { + QMatrix4x4 ret; + ret.ortho(-(verticalSpan/2) * w / h, (verticalSpan/2) * w / h, -verticalSpan/2, verticalSpan/2, nearPlane, farPlane); + + return ret; } void OrthographicCamera::setWH(float w, float h) { @@ -64,14 +70,14 @@ void OrthographicCamera::processRotateRequest(const int &deltaX, const int &delt return; } - float deltaAngleX = float(deltaX) / h; - float deltaAngleY = float(deltaY) / h; + const float deltaAngleX = float(deltaX) / h; + const float deltaAngleY = float(deltaY) / h; if (thirdAxis) { - angleAroundAxes.y += deltaAngleX * eyeRotationPerMouseDelta; + angleAroundAxes.setY(angleAroundAxes.y() + deltaAngleX * eyeRotationPerMouseDelta); } else { - angleAroundAxes.z += deltaAngleX * eyeRotationPerMouseDelta; + angleAroundAxes.setZ(angleAroundAxes.z() + deltaAngleX * eyeRotationPerMouseDelta); } - angleAroundAxes.x += deltaAngleY * eyeRotationPerMouseDelta; + angleAroundAxes.setX(angleAroundAxes.x() + deltaAngleY * eyeRotationPerMouseDelta); } @@ -80,24 +86,52 @@ void OrthographicCamera::processMoveRequest(const int &deltaX, const int &deltaY return; } - auto rotationMatrixAroundZ = glm::rotate(glm::radians(-angleAroundAxes.z), axisZ); - auto rotationMatrixAroundY = glm::rotate(glm::radians(-angleAroundAxes.y), axisY); - auto rotationMatrixAroundX = glm::rotate(glm::radians(-angleAroundAxes.x), axisX); - auto rotationMatrix = rotationMatrixAroundZ * rotationMatrixAroundY * rotationMatrixAroundX; + QMatrix4x4 rotationMatrixAroundZ; + rotationMatrixAroundZ.rotate(-angleAroundAxes.z(), axisZ); + QMatrix4x4 rotationMatrixAroundY; + rotationMatrixAroundY.rotate(-angleAroundAxes.y(), axisY); + QMatrix4x4 rotationMatrixAroundX; + rotationMatrixAroundX.rotate(-angleAroundAxes.x(), axisX); + QMatrix4x4 rotationMatrix = rotationMatrixAroundZ * rotationMatrixAroundY * rotationMatrixAroundX; - glm::vec3 cameraRightDirection(rotationMatrix * glm::vec4(axisX, 1.0)); - eyePosition += float(deltaX) * eyeMovementPerMouseDelta * cameraRightDirection * zoom; + QVector3D cameraRightDirection(rotationMatrix * axisX); + eyePosition -= static_cast(deltaX) * eyeMovementPerMouseDelta * cameraRightDirection * verticalSpan; - glm::vec3 cameraUpDirection(rotationMatrix * glm::vec4(axisY, 1.0)); - eyePosition -= float(deltaY) * eyeMovementPerMouseDelta * cameraUpDirection * zoom; + QVector3D cameraUpDirection(rotationMatrix * axisY); + eyePosition += static_cast(deltaY) * eyeMovementPerMouseDelta * cameraUpDirection * verticalSpan; } void OrthographicCamera::processZoomRequest(const int &deltaWheelAngle) { float zoomFactor = 1 - zoomFactorMultiplier * float(deltaWheelAngle); - zoom = pow(zoom, zoomFactor); - if (zoom < zoomLowerBound) zoom = zoomLowerBound; + verticalSpan = pow(verticalSpan, zoomFactor); + if (verticalSpan < zoomLowerBound) verticalSpan = zoomLowerBound; +} + +QMatrix4x4 OrthographicCamera::modelViewMatrixNoTranslate() const { + QMatrix4x4 rotationMatrixAroundX; + rotationMatrixAroundX.rotate(angleAroundAxes.x(), axisX); + QMatrix4x4 rotationMatrixAroundY; + rotationMatrixAroundY.rotate(angleAroundAxes.y(), axisY); + QMatrix4x4 rotationMatrixAroundZ; + rotationMatrixAroundZ.rotate(angleAroundAxes.z(), axisZ); + QMatrix4x4 rotationMatrix = rotationMatrixAroundX * rotationMatrixAroundY * rotationMatrixAroundZ; + return rotationMatrix; +} + + +void OrthographicCamera::setEyePosition(float x, float y, float z) +{ + eyePosition.setX(x); + eyePosition.setY(y); + eyePosition.setZ(z); } +QVector3D OrthographicCamera::getEyePosition() +{ + return eyePosition; +} + + #if defined(__GNUC__) && !defined(__clang__) # pragma GCC diagnostic pop #endif diff --git a/src/qged/display/OrthographicCamera.h b/src/qged/display/OrthographicCamera.h index c0d8dc69750..5001982cf38 100644 --- a/src/qged/display/OrthographicCamera.h +++ b/src/qged/display/OrthographicCamera.h @@ -1,7 +1,7 @@ /* O R T H O G R A P H I C C A M E R A . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or @@ -24,14 +24,13 @@ #define RT3_OrthographicCAMERA_H -#include #include "Camera.h" class OrthographicCamera : public Camera { private: - const glm::vec3 initialEyePosition = glm::vec3(0.0f, 0.0f, 0.0f); - const glm::vec3 initialAngleAroundAxes = glm::vec3(295.0f, 0.0f, 235.0f); + const QVector3D initialEyePosition = QVector3D(0.0f, 0.0f, 0.0f); + const QVector3D initialAngleAroundAxes = QVector3D(295.0f, 0.0f, 235.0f); const float nearPlane = -2000000.0f; const float farPlane = 2000000.0f; @@ -41,9 +40,9 @@ class OrthographicCamera : public Camera { const float zoomLowerBound = 0.00001; const int mouseMaxDrag = 500; - glm::vec3 angleAroundAxes = initialAngleAroundAxes; // Camera direction in degrees - float zoom = 600; - glm::vec3 eyePosition = initialEyePosition; // Camera coordinates + QVector3D angleAroundAxes = initialAngleAroundAxes; // Camera direction in degrees + float verticalSpan = 600; + QVector3D eyePosition = initialEyePosition; // Camera coordinates float w = 400, h = 400; // Display width and height. public: @@ -57,9 +56,13 @@ class OrthographicCamera : public Camera { void processZoomRequest(const int &deltaWheelAngle) override; - glm::mat4 modelViewMatrix() const override; + QMatrix4x4 modelViewMatrix() const ; + QMatrix4x4 modelViewMatrixNoTranslate() const ; - glm::mat4 projectionMatrix() const override; + QMatrix4x4 projectionMatrix() const ; + + void setEyePosition(float x, float y, float z) ; + QVector3D getEyePosition(); }; diff --git a/src/qged/display/Renderable.h b/src/qged/display/Renderable.h index f6e17f62bd7..1458ecfd22f 100644 --- a/src/qged/display/Renderable.h +++ b/src/qged/display/Renderable.h @@ -1,7 +1,7 @@ /* R E N D E R A B L E . H * BRL-CAD * - * Copyright (c) 2020 United States Government as represented by + * Copyright (c) 2020-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/display/glm/CMakeLists.txt b/src/qged/display/glm/CMakeLists.txt deleted file mode 100644 index e45638c1b27..00000000000 --- a/src/qged/display/glm/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -cmake_minimum_required(VERSION 3.2 FATAL_ERROR) -cmake_policy(VERSION 3.2) - -set(GLM_VERSION "0.9.9") -project(glm VERSION ${GLM_VERSION} LANGUAGES CXX) -enable_testing() - -add_subdirectory(glm) -add_library(glm::glm ALIAS glm) - diff --git a/src/qged/display/glm/cmake/glm/glmConfig-version.cmake b/src/qged/display/glm/cmake/glm/glmConfig-version.cmake deleted file mode 100644 index 6e63a4a30a7..00000000000 --- a/src/qged/display/glm/cmake/glm/glmConfig-version.cmake +++ /dev/null @@ -1,11 +0,0 @@ -if(${PACKAGE_FIND_VERSION_MAJOR} EQUAL 0) - if (${PACKAGE_FIND_VERSION} VERSION_LESS ${GLM_VERSION}) - set(PACKAGE_VERSION_COMPATIBLE 1) - endif() - if(${PACKAGE_FIND_VERSION} VERSION_EQUAL ${GLM_VERSION}) - set(PACKAGE_VERSION_EXACT 1) - endif() -else() - set(PACKAGE_VERSION_UNSUITABLE 1) -endif() - diff --git a/src/qged/display/glm/cmake/glm/glmConfig.cmake b/src/qged/display/glm/cmake/glm/glmConfig.cmake deleted file mode 100644 index 4fba5116fc5..00000000000 --- a/src/qged/display/glm/cmake/glm/glmConfig.cmake +++ /dev/null @@ -1,22 +0,0 @@ -cmake_minimum_required(VERSION 3.2 FATAL_ERROR) -cmake_policy(VERSION 3.2) - -set(GLM_VERSION 0.9.9) - -get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) -if (_IMPORT_PREFIX STREQUAL "/") - set(_IMPORT_PREFIX "") -endif() - -# Set the old GLM_INCLUDE_DIRS variable for backwards compatibility -set(GLM_INCLUDE_DIRS ${_IMPORT_PREFIX}) - -add_library(glm::glm INTERFACE IMPORTED) -set_target_properties(glm::glm PROPERTIES - INTERFACE_INCLUDE_DIRECTORIES ${GLM_INCLUDE_DIRS}) - -mark_as_advanced(glm_DIR) -set(_IMPORT_PREFIX) - diff --git a/src/qged/display/glm/glm/CMakeLists.txt b/src/qged/display/glm/glm/CMakeLists.txt deleted file mode 100644 index 4ff51c8180b..00000000000 --- a/src/qged/display/glm/glm/CMakeLists.txt +++ /dev/null @@ -1,70 +0,0 @@ -file(GLOB ROOT_SOURCE *.cpp) -file(GLOB ROOT_INLINE *.inl) -file(GLOB ROOT_HEADER *.hpp) -file(GLOB ROOT_TEXT ../*.txt) -file(GLOB ROOT_MD ../*.md) -file(GLOB ROOT_NAT ../util/glm.natvis) - -file(GLOB_RECURSE CORE_SOURCE ./detail/*.cpp) -file(GLOB_RECURSE CORE_INLINE ./detail/*.inl) -file(GLOB_RECURSE CORE_HEADER ./detail/*.hpp) - -file(GLOB_RECURSE EXT_SOURCE ./ext/*.cpp) -file(GLOB_RECURSE EXT_INLINE ./ext/*.inl) -file(GLOB_RECURSE EXT_HEADER ./ext/*.hpp) - -file(GLOB_RECURSE GTC_SOURCE ./gtc/*.cpp) -file(GLOB_RECURSE GTC_INLINE ./gtc/*.inl) -file(GLOB_RECURSE GTC_HEADER ./gtc/*.hpp) - -file(GLOB_RECURSE GTX_SOURCE ./gtx/*.cpp) -file(GLOB_RECURSE GTX_INLINE ./gtx/*.inl) -file(GLOB_RECURSE GTX_HEADER ./gtx/*.hpp) - -file(GLOB_RECURSE SIMD_SOURCE ./simd/*.cpp) -file(GLOB_RECURSE SIMD_INLINE ./simd/*.inl) -file(GLOB_RECURSE SIMD_HEADER ./simd/*.h) - -source_group("Text Files" FILES ${ROOT_TEXT} ${ROOT_MD}) -source_group("Core Files" FILES ${CORE_SOURCE}) -source_group("Core Files" FILES ${CORE_INLINE}) -source_group("Core Files" FILES ${CORE_HEADER}) -source_group("EXT Files" FILES ${EXT_SOURCE}) -source_group("EXT Files" FILES ${EXT_INLINE}) -source_group("EXT Files" FILES ${EXT_HEADER}) -source_group("GTC Files" FILES ${GTC_SOURCE}) -source_group("GTC Files" FILES ${GTC_INLINE}) -source_group("GTC Files" FILES ${GTC_HEADER}) -source_group("GTX Files" FILES ${GTX_SOURCE}) -source_group("GTX Files" FILES ${GTX_INLINE}) -source_group("GTX Files" FILES ${GTX_HEADER}) -source_group("SIMD Files" FILES ${SIMD_SOURCE}) -source_group("SIMD Files" FILES ${SIMD_INLINE}) -source_group("SIMD Files" FILES ${SIMD_HEADER}) - -add_library(glm INTERFACE) -target_include_directories(glm INTERFACE ../) - -if(BUILD_STATIC_LIBS) -add_library(glm_static STATIC ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT} - ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} - ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER} - ${EXT_SOURCE} ${EXT_INLINE} ${EXT_HEADER} - ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER} - ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER} - ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER}) - target_link_libraries(glm_static PUBLIC glm) - add_library(glm::glm_static ALIAS glm_static) -endif() - -if(BUILD_SHARED_LIBS) -add_library(glm_shared SHARED ${ROOT_TEXT} ${ROOT_MD} ${ROOT_NAT} - ${ROOT_SOURCE} ${ROOT_INLINE} ${ROOT_HEADER} - ${CORE_SOURCE} ${CORE_INLINE} ${CORE_HEADER} - ${EXT_SOURCE} ${EXT_INLINE} ${EXT_HEADER} - ${GTC_SOURCE} ${GTC_INLINE} ${GTC_HEADER} - ${GTX_SOURCE} ${GTX_INLINE} ${GTX_HEADER} - ${SIMD_SOURCE} ${SIMD_INLINE} ${SIMD_HEADER}) - target_link_libraries(glm_shared PUBLIC glm) - add_library(glm::glm_shared ALIAS glm_shared) -endif() diff --git a/src/qged/display/glm/glm/common.hpp b/src/qged/display/glm/glm/common.hpp deleted file mode 100644 index 301ff1c4d54..00000000000 --- a/src/qged/display/glm/glm/common.hpp +++ /dev/null @@ -1,570 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/common.hpp -/// -/// @see
GLSL 4.20.8 specification, section 8.3 Common Functions -/// -/// @defgroup core_func_common Common functions -/// @ingroup core -/// -/// Provides GLSL common functions -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/qualifier.hpp" -#include "detail/_fixes.hpp" - -namespace glm -{ - /// @addtogroup core_func_common - /// @{ - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam genType floating-point or signed integer; scalar or vector types. - /// - /// @see GLSL abs man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType abs(genType x); - - /// Returns x if x >= 0; otherwise, it returns -x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL abs man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec abs(vec const& x); - - /// Returns 1.0 if x > 0, 0.0 if x == 0, or -1.0 if x < 0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sign man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec sign(vec const& x); - - /// Returns a value equal to the nearest integer that is less then or equal to x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floor man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floor(vec const& x); - - /// Returns a value equal to the nearest integer to x - /// whose absolute value is not larger than the absolute value of x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL trunc man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec trunc(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// This includes the possibility that round(x) returns the - /// same value as roundEven(x) for all values of x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL round man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec round(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// A fractional part of 0.5 will round toward the nearest even - /// integer. (Both 3.5 and 4.5 for x will return 4.0.) - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL roundEven man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// @see New round to even technique - template - GLM_FUNC_DECL vec roundEven(vec const& x); - - /// Returns a value equal to the nearest integer - /// that is greater than or equal to x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL ceil man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec ceil(vec const& x); - - /// Return x - floor(x). - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fract man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType fract(genType x); - - /// Return x - floor(x). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL fract man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec fract(vec const& x); - - template - GLM_FUNC_DECL genType mod(genType x, genType y); - - template - GLM_FUNC_DECL vec mod(vec const& x, T y); - - /// Modulus. Returns x - y * floor(x / y) - /// for each component in x using the floating point value y. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types, include glm/gtc/integer for integer scalar types support - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL mod man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec mod(vec const& x, vec const& y); - - /// Returns the fractional part of x and sets i to the integer - /// part (as a whole number floating point value). Both the - /// return value and the output parameter will have the same - /// sign as x. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL modf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType modf(genType x, genType& i); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType min(genType x, genType y); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, T y); - - /// Returns y if y < x; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL min man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& x, vec const& y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType max(genType x, genType y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, T y); - - /// Returns y if x < y; otherwise, it returns x. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL max man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam genType Floating-point or integer; scalar or vector types. - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x - /// using the floating-point values minVal and maxVal. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL clamp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal); - - /// If genTypeU is a floating scalar or vector: - /// Returns x * (1.0 - a) + y * a, i.e., the linear blend of - /// x and y using the floating-point value a. - /// The value for a is not restricted to the range [0, 1]. - /// - /// If genTypeU is a boolean scalar or vector: - /// Selects which vector each returned component comes - /// from. For a component of 'a' that is false, the - /// corresponding component of 'x' is returned. For a - /// component of 'a' that is true, the corresponding - /// component of 'y' is returned. Components of 'x' and 'y' that - /// are not selected are allowed to be invalid floating point - /// values and will have no effect on the results. Thus, this - /// provides different functionality than - /// genType mix(genType x, genType y, genType(a)) - /// where a is a Boolean vector. - /// - /// @see GLSL mix man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - /// - /// @param[in] x Value to interpolate. - /// @param[in] y Value to interpolate. - /// @param[in] a Interpolant. - /// - /// @tparam genTypeT Floating point scalar or vector. - /// @tparam genTypeU Floating point or boolean scalar or vector. It can't be a vector if it is the length of genTypeT. - /// - /// @code - /// #include - /// ... - /// float a; - /// bool b; - /// glm::dvec3 e; - /// glm::dvec3 f; - /// glm::vec4 g; - /// glm::vec4 h; - /// ... - /// glm::vec4 r = glm::mix(g, h, a); // Interpolate with a floating-point scalar two vectors. - /// glm::vec4 s = glm::mix(g, h, b); // Returns g or h; - /// glm::dvec3 t = glm::mix(e, f, a); // Types of the third parameter is not required to match with the first and the second. - /// glm::vec4 u = glm::mix(g, h, r); // Interpolations can be perform per component with a vector for the last parameter. - /// @endcode - template - GLM_FUNC_DECL genTypeT mix(genTypeT x, genTypeT y, genTypeU a); - - template - GLM_FUNC_DECL vec mix(vec const& x, vec const& y, vec const& a); - - template - GLM_FUNC_DECL vec mix(vec const& x, vec const& y, U a); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0 for each component of a genType. - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType step(genType edge, genType x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec step(T edge, vec const& x); - - /// Returns 0.0 if x < edge, otherwise it returns 1.0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL step man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec step(vec const& edge, vec const& x); - - /// Returns 0.0 if x <= edge0 and 1.0 if x >= edge1 and - /// performs smooth Hermite interpolation between 0 and 1 - /// when edge0 < x < edge1. This is useful in cases where - /// you would want a threshold function with a smooth - /// transition. This is equivalent to: - /// genType t; - /// t = clamp ((x - edge0) / (edge1 - edge0), 0, 1); - /// return t * t * (3 - 2 * t); - /// Results are undefined if edge0 >= edge1. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL smoothstep man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType smoothstep(genType edge0, genType edge1, genType x); - - template - GLM_FUNC_DECL vec smoothstep(T edge0, T edge1, vec const& x); - - template - GLM_FUNC_DECL vec smoothstep(vec const& edge0, vec const& edge1, vec const& x); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// /!\ When using compiler fast math, this function may fail. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL isnan man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec isnan(vec const& x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL isinf man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec isinf(vec const& x); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floating-point - /// value's bit-level representation is preserved. - /// - /// @see GLSL floatBitsToInt man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL int floatBitsToInt(float const& v); - - /// Returns a signed integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floatBitsToInt man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floatBitsToInt(vec const& v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @see GLSL floatBitsToUint man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL uint floatBitsToUint(float const& v); - - /// Returns a unsigned integer value representing - /// the encoding of a floating-point value. The floatingpoint - /// value's bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL floatBitsToUint man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec floatBitsToUint(vec const& v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see GLSL intBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL float intBitsToFloat(int const& v); - - /// Returns a floating-point value corresponding to a signed - /// integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL intBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec intBitsToFloat(vec const& v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @see GLSL uintBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - GLM_FUNC_DECL float uintBitsToFloat(uint const& v); - - /// Returns a floating-point value corresponding to a - /// unsigned integer encoding of a floating-point value. - /// If an inf or NaN is passed in, it will not signal, and the - /// resulting floating point value is unspecified. Otherwise, - /// the bit-level representation is preserved. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL uintBitsToFloat man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL vec uintBitsToFloat(vec const& v); - - /// Computes and returns a * b + c. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL fma man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType fma(genType const& a, genType const& b, genType const& c); - - /// Splits x into a floating-point significand in the range - /// [0.5, 1.0) and an integral exponent of two, such that: - /// x = significand * exp(2, exponent) - /// - /// The significand is returned by the function and the - /// exponent is returned in the parameter exp. For a - /// floating-point value of zero, the significant and exponent - /// are both zero. For a floating-point value that is an - /// infinity or is not a number, the results are undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL frexp man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType frexp(genType x, int& exp); - - template - GLM_FUNC_DECL vec frexp(vec const& v, vec& exp); - - /// Builds a floating-point number from x and the - /// corresponding integral exponent of two in exp, returning: - /// significand * exp(2, exponent) - /// - /// If this product is too large to be represented in the - /// floating-point type, the result is undefined. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL ldexp man page; - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL genType ldexp(genType const& x, int const& exp); - - template - GLM_FUNC_DECL vec ldexp(vec const& v, vec const& exp); - - /// @} -}//namespace glm - -#include "detail/func_common.inl" - diff --git a/src/qged/display/glm/glm/detail/_features.hpp b/src/qged/display/glm/glm/detail/_features.hpp deleted file mode 100644 index 8b0dd0fc3dd..00000000000 --- a/src/qged/display/glm/glm/detail/_features.hpp +++ /dev/null @@ -1,425 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -// #define GLM_CXX98_EXCEPTIONS -// #define GLM_CXX98_RTTI - -// #define GLM_CXX11_RVALUE_REFERENCES -// Rvalue references - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2118.html - -// GLM_CXX11_TRAILING_RETURN -// Rvalue references for *this - GCC not supported -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2439.htm - -// GLM_CXX11_NONSTATIC_MEMBER_INIT -// Initialization of class objects by rvalues - GCC any -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1610.html - -// GLM_CXX11_NONSTATIC_MEMBER_INIT -// Non-static data member initializers - GCC 4.7 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2008/n2756.htm - -// #define GLM_CXX11_VARIADIC_TEMPLATE -// Variadic templates - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2242.pdf - -// -// Extending variadic template template parameters - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2555.pdf - -// #define GLM_CXX11_GENERALIZED_INITIALIZERS -// Initializer lists - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm - -// #define GLM_CXX11_STATIC_ASSERT -// Static assertions - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1720.html - -// #define GLM_CXX11_AUTO_TYPE -// auto-typed variables - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1984.pdf - -// #define GLM_CXX11_AUTO_TYPE -// Multi-declarator auto - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1737.pdf - -// #define GLM_CXX11_AUTO_TYPE -// Removal of auto as a storage-class specifier - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2546.htm - -// #define GLM_CXX11_AUTO_TYPE -// New function declarator syntax - GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2541.htm - -// #define GLM_CXX11_LAMBDAS -// New wording for C++0x lambdas - GCC 4.5 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2927.pdf - -// #define GLM_CXX11_DECLTYPE -// Declared type of an expression - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2343.pdf - -// -// Right angle brackets - GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1757.html - -// -// Default template arguments for function templates DR226 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/cwg_defects.html#226 - -// -// Solving the SFINAE problem for expressions DR339 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2634.html - -// #define GLM_CXX11_ALIAS_TEMPLATE -// Template aliases N2258 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf - -// -// Extern templates N1987 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1987.htm - -// #define GLM_CXX11_NULLPTR -// Null pointer constant N2431 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2431.pdf - -// #define GLM_CXX11_STRONG_ENUMS -// Strongly-typed enums N2347 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2347.pdf - -// -// Forward declarations for enums N2764 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2764.pdf - -// -// Generalized attributes N2761 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2761.pdf - -// -// Generalized constant expressions N2235 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf - -// -// Alignment support N2341 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf - -// #define GLM_CXX11_DELEGATING_CONSTRUCTORS -// Delegating constructors N1986 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1986.pdf - -// -// Inheriting constructors N2540 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2540.htm - -// #define GLM_CXX11_EXPLICIT_CONVERSIONS -// Explicit conversion operators N2437 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf - -// -// New character types N2249 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2249.html - -// -// Unicode string literals N2442 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm - -// -// Raw string literals N2442 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2442.htm - -// -// Universal character name literals N2170 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2170.html - -// #define GLM_CXX11_USER_LITERALS -// User-defined literals N2765 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2765.pdf - -// -// Standard Layout Types N2342 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2342.htm - -// #define GLM_CXX11_DEFAULTED_FUNCTIONS -// #define GLM_CXX11_DELETED_FUNCTIONS -// Defaulted and deleted functions N2346 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2346.htm - -// -// Extended friend declarations N1791 GCC 4.7 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1791.pdf - -// -// Extending sizeof N2253 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2253.html - -// #define GLM_CXX11_INLINE_NAMESPACES -// Inline namespaces N2535 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm - -// #define GLM_CXX11_UNRESTRICTED_UNIONS -// Unrestricted unions N2544 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf - -// #define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS -// Local and unnamed types as template arguments N2657 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2657.htm - -// #define GLM_CXX11_RANGE_FOR -// Range-based for N2930 GCC 4.6 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2930.html - -// #define GLM_CXX11_OVERRIDE_CONTROL -// Explicit virtual overrides N2928 N3206 N3272 GCC 4.7 -// http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2928.htm -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3206.htm -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3272.htm - -// -// Minimal support for garbage collection and reachability-based leak detection N2670 No -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2670.htm - -// #define GLM_CXX11_NOEXCEPT -// Allowing move constructors to throw [noexcept] N3050 GCC 4.6 (core language only) -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3050.html - -// -// Defining move special member functions N3053 GCC 4.6 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3053.html - -// -// Sequence points N2239 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html - -// -// Atomic operations N2427 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2239.html - -// -// Strong Compare and Exchange N2748 GCC 4.5 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2427.html - -// -// Bidirectional Fences N2752 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2752.htm - -// -// Memory model N2429 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm - -// -// Data-dependency ordering: atomics and memory model N2664 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2664.htm - -// -// Propagating exceptions N2179 GCC 4.4 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2179.html - -// -// Abandoning a process and at_quick_exit N2440 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2440.htm - -// -// Allow atomics use in signal handlers N2547 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2547.htm - -// -// Thread-local storage N2659 GCC 4.8 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2659.htm - -// -// Dynamic initialization and destruction with concurrency N2660 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2660.htm - -// -// __func__ predefined identifier N2340 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2340.htm - -// -// C99 preprocessor N1653 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2004/n1653.htm - -// -// long long N1811 GCC 4.3 -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1811.pdf - -// -// Extended integral types N1988 Yes -// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1988.pdf - -#if(GLM_COMPILER & GLM_COMPILER_GCC) - -# define GLM_CXX11_STATIC_ASSERT - -#elif(GLM_COMPILER & GLM_COMPILER_CLANG) -# if(__has_feature(cxx_exceptions)) -# define GLM_CXX98_EXCEPTIONS -# endif - -# if(__has_feature(cxx_rtti)) -# define GLM_CXX98_RTTI -# endif - -# if(__has_feature(cxx_access_control_sfinae)) -# define GLM_CXX11_ACCESS_CONTROL_SFINAE -# endif - -# if(__has_feature(cxx_alias_templates)) -# define GLM_CXX11_ALIAS_TEMPLATE -# endif - -# if(__has_feature(cxx_alignas)) -# define GLM_CXX11_ALIGNAS -# endif - -# if(__has_feature(cxx_attributes)) -# define GLM_CXX11_ATTRIBUTES -# endif - -# if(__has_feature(cxx_constexpr)) -# define GLM_CXX11_CONSTEXPR -# endif - -# if(__has_feature(cxx_decltype)) -# define GLM_CXX11_DECLTYPE -# endif - -# if(__has_feature(cxx_default_function_template_args)) -# define GLM_CXX11_DEFAULT_FUNCTION_TEMPLATE_ARGS -# endif - -# if(__has_feature(cxx_defaulted_functions)) -# define GLM_CXX11_DEFAULTED_FUNCTIONS -# endif - -# if(__has_feature(cxx_delegating_constructors)) -# define GLM_CXX11_DELEGATING_CONSTRUCTORS -# endif - -# if(__has_feature(cxx_deleted_functions)) -# define GLM_CXX11_DELETED_FUNCTIONS -# endif - -# if(__has_feature(cxx_explicit_conversions)) -# define GLM_CXX11_EXPLICIT_CONVERSIONS -# endif - -# if(__has_feature(cxx_generalized_initializers)) -# define GLM_CXX11_GENERALIZED_INITIALIZERS -# endif - -# if(__has_feature(cxx_implicit_moves)) -# define GLM_CXX11_IMPLICIT_MOVES -# endif - -# if(__has_feature(cxx_inheriting_constructors)) -# define GLM_CXX11_INHERITING_CONSTRUCTORS -# endif - -# if(__has_feature(cxx_inline_namespaces)) -# define GLM_CXX11_INLINE_NAMESPACES -# endif - -# if(__has_feature(cxx_lambdas)) -# define GLM_CXX11_LAMBDAS -# endif - -# if(__has_feature(cxx_local_type_template_args)) -# define GLM_CXX11_LOCAL_TYPE_TEMPLATE_ARGS -# endif - -# if(__has_feature(cxx_noexcept)) -# define GLM_CXX11_NOEXCEPT -# endif - -# if(__has_feature(cxx_nonstatic_member_init)) -# define GLM_CXX11_NONSTATIC_MEMBER_INIT -# endif - -# if(__has_feature(cxx_nullptr)) -# define GLM_CXX11_NULLPTR -# endif - -# if(__has_feature(cxx_override_control)) -# define GLM_CXX11_OVERRIDE_CONTROL -# endif - -# if(__has_feature(cxx_reference_qualified_functions)) -# define GLM_CXX11_REFERENCE_QUALIFIED_FUNCTIONS -# endif - -# if(__has_feature(cxx_range_for)) -# define GLM_CXX11_RANGE_FOR -# endif - -# if(__has_feature(cxx_raw_string_literals)) -# define GLM_CXX11_RAW_STRING_LITERALS -# endif - -# if(__has_feature(cxx_rvalue_references)) -# define GLM_CXX11_RVALUE_REFERENCES -# endif - -# if(__has_feature(cxx_static_assert)) -# define GLM_CXX11_STATIC_ASSERT -# endif - -# if(__has_feature(cxx_auto_type)) -# define GLM_CXX11_AUTO_TYPE -# endif - -# if(__has_feature(cxx_strong_enums)) -# define GLM_CXX11_STRONG_ENUMS -# endif - -# if(__has_feature(cxx_trailing_return)) -# define GLM_CXX11_TRAILING_RETURN -# endif - -# if(__has_feature(cxx_unicode_literals)) -# define GLM_CXX11_UNICODE_LITERALS -# endif - -# if(__has_feature(cxx_unrestricted_unions)) -# define GLM_CXX11_UNRESTRICTED_UNIONS -# endif - -# if(__has_feature(cxx_user_literals)) -# define GLM_CXX11_USER_LITERALS -# endif - -# if(__has_feature(cxx_variadic_templates)) -# define GLM_CXX11_VARIADIC_TEMPLATES -# endif - -#endif//(GLM_COMPILER & GLM_COMPILER_CLANG) diff --git a/src/qged/display/glm/glm/detail/_fixes.hpp b/src/qged/display/glm/glm/detail/_fixes.hpp deleted file mode 100644 index 3d5bf761b2e..00000000000 --- a/src/qged/display/glm/glm/detail/_fixes.hpp +++ /dev/null @@ -1,58 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#include - -//! Workaround for compatibility with other libraries -#ifdef max -#undef max -#endif - -//! Workaround for compatibility with other libraries -#ifdef min -#undef min -#endif - -//! Workaround for Android -#ifdef isnan -#undef isnan -#endif - -//! Workaround for Android -#ifdef isinf -#undef isinf -#endif - -//! Workaround for Chrone Native Client -#ifdef log2 -#undef log2 -#endif - diff --git a/src/qged/display/glm/glm/detail/_noise.hpp b/src/qged/display/glm/glm/detail/_noise.hpp deleted file mode 100644 index 138b55dc00e..00000000000 --- a/src/qged/display/glm/glm/detail/_noise.hpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -#include "../common.hpp" - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER T mod289(T const& x) - { - return x - floor(x * (static_cast(1.0) / static_cast(289.0))) * static_cast(289.0); - } - - template - GLM_FUNC_QUALIFIER T permute(T const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> permute(vec<2, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> permute(vec<3, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> permute(vec<4, T, Q> const& x) - { - return mod289(((x * static_cast(34)) + static_cast(1)) * x); - } - - template - GLM_FUNC_QUALIFIER T taylorInvSqrt(T const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> taylorInvSqrt(vec<2, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> taylorInvSqrt(vec<3, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> taylorInvSqrt(vec<4, T, Q> const& r) - { - return static_cast(1.79284291400159) - static_cast(0.85373472095314) * r; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> fade(vec<2, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> fade(vec<3, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> fade(vec<4, T, Q> const& t) - { - return (t * t * t) * (t * (t * static_cast(6) - static_cast(15)) + static_cast(10)); - } -}//namespace detail -}//namespace glm - diff --git a/src/qged/display/glm/glm/detail/_swizzle.hpp b/src/qged/display/glm/glm/detail/_swizzle.hpp deleted file mode 100644 index 563a8673fa9..00000000000 --- a/src/qged/display/glm/glm/detail/_swizzle.hpp +++ /dev/null @@ -1,835 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -namespace glm{ -namespace detail -{ - // Internal class for implementing swizzle operators - template - struct _swizzle_base0 - { - protected: - GLM_FUNC_QUALIFIER T& elem(size_t i){ return (reinterpret_cast(_buffer))[i]; } - GLM_FUNC_QUALIFIER T const& elem(size_t i) const{ return (reinterpret_cast(_buffer))[i]; } - - // Use an opaque buffer to *ensure* the compiler doesn't call a constructor. - // The size 1 buffer is assumed to aligned to the actual members so that the - // elem() - char _buffer[1]; - }; - - template - struct _swizzle_base1 : public _swizzle_base0 - { - }; - - template - struct _swizzle_base1<2, T, Q, E0,E1,-1,-2, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<2, T, Q> operator ()() const { return vec<2, T, Q>(this->elem(E0), this->elem(E1)); } - }; - - template - struct _swizzle_base1<3, T, Q, E0,E1,E2,-1, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<3, T, Q> operator ()() const { return vec<3, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2)); } - }; - - template - struct _swizzle_base1<4, T, Q, E0,E1,E2,E3, Aligned> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, T, Q> operator ()() const { return vec<4, T, Q>(this->elem(E0), this->elem(E1), this->elem(E2), this->elem(E3)); } - }; - - // Internal class for implementing swizzle operators - /* - Template parameters: - - T = type of scalar values (e.g. float, double) - N = number of components in the vector (e.g. 3) - E0...3 = what index the n-th element of this swizzle refers to in the unswizzled vec - - DUPLICATE_ELEMENTS = 1 if there is a repeated element, 0 otherwise (used to specialize swizzles - containing duplicate elements so that they cannot be used as r-values). - */ - template - struct _swizzle_base2 : public _swizzle_base1::value> - { - struct op_equal - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e = t; } - }; - - struct op_minus - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e -= t; } - }; - - struct op_plus - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e += t; } - }; - - struct op_mul - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e *= t; } - }; - - struct op_div - { - GLM_FUNC_QUALIFIER void operator() (T& e, T& t) const{ e /= t; } - }; - - public: - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (const T& t) - { - for (int i = 0; i < N; ++i) - (*this)[i] = t; - return *this; - } - - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (vec const& that) - { - _apply_op(that, op_equal()); - return *this; - } - - GLM_FUNC_QUALIFIER void operator -= (vec const& that) - { - _apply_op(that, op_minus()); - } - - GLM_FUNC_QUALIFIER void operator += (vec const& that) - { - _apply_op(that, op_plus()); - } - - GLM_FUNC_QUALIFIER void operator *= (vec const& that) - { - _apply_op(that, op_mul()); - } - - GLM_FUNC_QUALIFIER void operator /= (vec const& that) - { - _apply_op(that, op_div()); - } - - GLM_FUNC_QUALIFIER T& operator[](size_t i) - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - GLM_FUNC_QUALIFIER T operator[](size_t i) const - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - - protected: - template - GLM_FUNC_QUALIFIER void _apply_op(vec const& that, const U& op) - { - // Make a copy of the data in this == &that. - // The copier should optimize out the copy in cases where the function is - // properly inlined and the copy is not necessary. - T t[N]; - for (int i = 0; i < N; ++i) - t[i] = that[i]; - for (int i = 0; i < N; ++i) - op( (*this)[i], t[i] ); - } - }; - - // Specialization for swizzles containing duplicate elements. These cannot be modified. - template - struct _swizzle_base2 : public _swizzle_base1::value> - { - struct Stub {}; - - GLM_FUNC_QUALIFIER _swizzle_base2& operator= (Stub const&) { return *this; } - - GLM_FUNC_QUALIFIER T operator[] (size_t i) const - { - const int offset_dst[4] = { E0, E1, E2, E3 }; - return this->elem(offset_dst[i]); - } - }; - - template - struct _swizzle : public _swizzle_base2 - { - typedef _swizzle_base2 base_type; - - using base_type::operator=; - - GLM_FUNC_QUALIFIER operator vec () const { return (*this)(); } - }; - -// -// To prevent the C++ syntax from getting entirely overwhelming, define some alias macros -// -#define GLM_SWIZZLE_TEMPLATE1 template -#define GLM_SWIZZLE_TEMPLATE2 template -#define GLM_SWIZZLE_TYPE1 _swizzle -#define GLM_SWIZZLE_TYPE2 _swizzle - -// -// Wrapper for a binary operator (e.g. u.yy + v.zy) -// -#define GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ - { \ - return a() OPERAND b(); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const vec& b) \ - { \ - return a() OPERAND b; \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const vec& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Wrapper for a operand between a swizzle and a binary (e.g. 1.0f - u.xyz) -// -#define GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(OPERAND) \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const GLM_SWIZZLE_TYPE1& a, const T& b) \ - { \ - return a() OPERAND b; \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER vec operator OPERAND ( const T& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return a OPERAND b(); \ - } - -// -// Macro for wrapping a function taking one argument (e.g. abs()) -// -#define GLM_SWIZZLE_FUNCTION_1_ARGS(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a) \ - { \ - return FUNCTION(a()); \ - } - -// -// Macro for wrapping a function taking two vector arguments (e.g. dot()). -// -#define GLM_SWIZZLE_FUNCTION_2_ARGS(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a(), b()); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename V& b) \ - { \ - return FUNCTION(a(), b); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const V& a, const GLM_SWIZZLE_TYPE1& b) \ - { \ - return FUNCTION(a, b()); \ - } - -// -// Macro for wrapping a function take 2 vec arguments followed by a scalar (e.g. mix()). -// -#define GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(RETURN_TYPE,FUNCTION) \ - GLM_SWIZZLE_TEMPLATE2 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE2& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a(), b(), c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const GLM_SWIZZLE_TYPE1& a, const typename S0::vec_type& b, const T& c)\ - { \ - return FUNCTION(a(), b, c); \ - } \ - GLM_SWIZZLE_TEMPLATE1 \ - GLM_FUNC_QUALIFIER typename GLM_SWIZZLE_TYPE1::RETURN_TYPE FUNCTION(const typename V& a, const GLM_SWIZZLE_TYPE1& b, const T& c) \ - { \ - return FUNCTION(a, b(), c); \ - } - -}//namespace detail -}//namespace glm - -namespace glm -{ - namespace detail - { - GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(-) - GLM_SWIZZLE_SCALAR_BINARY_OPERATOR_IMPLEMENTATION(*) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(+) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(-) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(*) - GLM_SWIZZLE_VECTOR_BINARY_OPERATOR_IMPLEMENTATION(/) - } - - // - // Swizzles are distinct types from the unswizzled type. The below macros will - // provide template specializations for the swizzle types for the given functions - // so that the compiler does not have any ambiguity to choosing how to handle - // the function. - // - // The alternative is to use the operator()() when calling the function in order - // to explicitly convert the swizzled type to the unswizzled type. - // - - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, abs); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acos); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, acosh); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, all); - //GLM_SWIZZLE_FUNCTION_1_ARGS(vec_type, any); - - //GLM_SWIZZLE_FUNCTION_2_ARGS(value_type, dot); - //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, cross); - //GLM_SWIZZLE_FUNCTION_2_ARGS(vec_type, step); - //GLM_SWIZZLE_FUNCTION_2_ARGS_SCALAR(vec_type, mix); -} - -#define GLM_SWIZZLE2_2_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<2, T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2, T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2, T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2, T, Q, 1,1,-1,-2> E1 ## E1; }; - -#define GLM_SWIZZLE2_3_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<3,T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3,T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3,T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; - -#define GLM_SWIZZLE2_4_MEMBERS(T, Q, E0,E1) \ - struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; - -#define GLM_SWIZZLE3_2_MEMBERS(T, Q, E0,E1,E2) \ - struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; - -#define GLM_SWIZZLE3_3_MEMBERS(T, Q ,E0,E1,E2) \ - struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; - -#define GLM_SWIZZLE3_4_MEMBERS(T, Q, E0,E1,E2) \ - struct { detail::_swizzle<4,T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4,T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; - -#define GLM_SWIZZLE4_2_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<2,T, Q, 0,0,-1,-2> E0 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 0,1,-1,-2> E0 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 0,2,-1,-2> E0 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 0,3,-1,-2> E0 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 1,0,-1,-2> E1 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 1,1,-1,-2> E1 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 1,2,-1,-2> E1 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 1,3,-1,-2> E1 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 2,0,-1,-2> E2 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 2,1,-1,-2> E2 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 2,2,-1,-2> E2 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 2,3,-1,-2> E2 ## E3; }; \ - struct { detail::_swizzle<2,T, Q, 3,0,-1,-2> E3 ## E0; }; \ - struct { detail::_swizzle<2,T, Q, 3,1,-1,-2> E3 ## E1; }; \ - struct { detail::_swizzle<2,T, Q, 3,2,-1,-2> E3 ## E2; }; \ - struct { detail::_swizzle<2,T, Q, 3,3,-1,-2> E3 ## E3; }; - -#define GLM_SWIZZLE4_3_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<3, T, Q, 0,0,0,-1> E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,1,-1> E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,2,-1> E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,0,3,-1> E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,0,-1> E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,1,-1> E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,2,-1> E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,1,3,-1> E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,0,-1> E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,1,-1> E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,2,-1> E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,2,3,-1> E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,0,-1> E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,1,-1> E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,2,-1> E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 0,3,3,-1> E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,0,-1> E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,1,-1> E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,2,-1> E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,0,3,-1> E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,0,-1> E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,1,-1> E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,2,-1> E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,1,3,-1> E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,0,-1> E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,1,-1> E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,2,-1> E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,2,3,-1> E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,0,-1> E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,1,-1> E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,2,-1> E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 1,3,3,-1> E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,0,-1> E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,1,-1> E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,2,-1> E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,0,3,-1> E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,0,-1> E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,1,-1> E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,2,-1> E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,1,3,-1> E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,0,-1> E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,1,-1> E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,2,-1> E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,2,3,-1> E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,0,-1> E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,1,-1> E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,2,-1> E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 2,3,3,-1> E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,0,-1> E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,1,-1> E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,2,-1> E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,0,3,-1> E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,0,-1> E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,1,-1> E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,2,-1> E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,1,3,-1> E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,0,-1> E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,1,-1> E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,2,-1> E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,2,3,-1> E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,0,-1> E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,1,-1> E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,2,-1> E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<3, T, Q, 3,3,3,-1> E3 ## E3 ## E3; }; - -#define GLM_SWIZZLE4_4_MEMBERS(T, Q, E0,E1,E2,E3) \ - struct { detail::_swizzle<4, T, Q, 0,0,0,0> E0 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,1> E0 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,2> E0 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,0,3> E0 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,0> E0 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,1> E0 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,2> E0 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,1,3> E0 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,0> E0 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,1> E0 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,2> E0 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,2,3> E0 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,0> E0 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,1> E0 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,2> E0 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,0,3,3> E0 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,0> E0 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,1> E0 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,2> E0 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,0,3> E0 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,0> E0 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,1> E0 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,2> E0 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,1,3> E0 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,0> E0 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,1> E0 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,2> E0 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,2,3> E0 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,0> E0 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,1> E0 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,2> E0 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,1,3,3> E0 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,0> E0 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,1> E0 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,2> E0 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,0,3> E0 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,0> E0 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,1> E0 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,2> E0 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,1,3> E0 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,0> E0 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,1> E0 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,2> E0 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,2,3> E0 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,0> E0 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,1> E0 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,2> E0 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,2,3,3> E0 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,0> E0 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,1> E0 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,2> E0 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,0,3> E0 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,0> E0 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,1> E0 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,2> E0 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,1,3> E0 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,0> E0 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,1> E0 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,2> E0 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,2,3> E0 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,0> E0 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,1> E0 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,2> E0 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 0,3,3,3> E0 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,0> E1 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,1> E1 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,2> E1 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,0,3> E1 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,0> E1 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,1> E1 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,2> E1 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,1,3> E1 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,0> E1 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,1> E1 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,2> E1 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,2,3> E1 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,0> E1 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,1> E1 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,2> E1 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,0,3,3> E1 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,0> E1 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,1> E1 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,2> E1 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,0,3> E1 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,0> E1 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,1> E1 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,2> E1 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,1,3> E1 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,0> E1 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,1> E1 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,2> E1 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,2,3> E1 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,0> E1 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,1> E1 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,2> E1 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,1,3,3> E1 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,0> E1 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,1> E1 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,2> E1 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,0,3> E1 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,0> E1 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,1> E1 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,2> E1 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,1,3> E1 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,0> E1 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,1> E1 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,2> E1 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,2,3> E1 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,0> E1 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,1> E1 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,2> E1 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,2,3,3> E1 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,0> E1 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,1> E1 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,2> E1 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,0,3> E1 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,0> E1 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,1> E1 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,2> E1 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,1,3> E1 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,0> E1 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,1> E1 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,2> E1 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,2,3> E1 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,0> E1 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,1> E1 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,2> E1 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 1,3,3,3> E1 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,0> E2 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,1> E2 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,2> E2 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,0,3> E2 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,0> E2 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,1> E2 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,2> E2 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,1,3> E2 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,0> E2 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,1> E2 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,2> E2 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,2,3> E2 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,0> E2 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,1> E2 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,2> E2 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,0,3,3> E2 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,0> E2 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,1> E2 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,2> E2 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,0,3> E2 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,0> E2 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,1> E2 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,2> E2 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,1,3> E2 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,0> E2 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,1> E2 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,2> E2 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,2,3> E2 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,0> E2 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,1> E2 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,2> E2 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,1,3,3> E2 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,0> E2 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,1> E2 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,2> E2 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,0,3> E2 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,0> E2 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,1> E2 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,2> E2 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,1,3> E2 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,0> E2 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,1> E2 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,2> E2 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,2,3> E2 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,0> E2 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,1> E2 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,2> E2 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,2,3,3> E2 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,0> E2 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,1> E2 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,2> E2 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,0,3> E2 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,0> E2 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,1> E2 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,2> E2 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,1,3> E2 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,0> E2 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,1> E2 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,2> E2 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,2,3> E2 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,0> E2 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,1> E2 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,2> E2 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 2,3,3,3> E2 ## E3 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,0> E3 ## E0 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,1> E3 ## E0 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,2> E3 ## E0 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,0,3> E3 ## E0 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,0> E3 ## E0 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,1> E3 ## E0 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,2> E3 ## E0 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,1,3> E3 ## E0 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,0> E3 ## E0 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,1> E3 ## E0 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,2> E3 ## E0 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,2,3> E3 ## E0 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,0> E3 ## E0 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,1> E3 ## E0 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,2> E3 ## E0 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,0,3,3> E3 ## E0 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,0> E3 ## E1 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,1> E3 ## E1 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,2> E3 ## E1 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,0,3> E3 ## E1 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,0> E3 ## E1 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,1> E3 ## E1 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,2> E3 ## E1 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,1,3> E3 ## E1 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,0> E3 ## E1 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,1> E3 ## E1 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,2> E3 ## E1 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,2,3> E3 ## E1 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,0> E3 ## E1 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,1> E3 ## E1 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,2> E3 ## E1 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,1,3,3> E3 ## E1 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,0> E3 ## E2 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,1> E3 ## E2 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,2> E3 ## E2 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,0,3> E3 ## E2 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,0> E3 ## E2 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,1> E3 ## E2 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,2> E3 ## E2 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,1,3> E3 ## E2 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,0> E3 ## E2 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,1> E3 ## E2 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,2> E3 ## E2 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,2,3> E3 ## E2 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,0> E3 ## E2 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,1> E3 ## E2 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,2> E3 ## E2 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,2,3,3> E3 ## E2 ## E3 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,0> E3 ## E3 ## E0 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,1> E3 ## E3 ## E0 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,2> E3 ## E3 ## E0 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,0,3> E3 ## E3 ## E0 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,0> E3 ## E3 ## E1 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,1> E3 ## E3 ## E1 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,2> E3 ## E3 ## E1 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,1,3> E3 ## E3 ## E1 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,0> E3 ## E3 ## E2 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,1> E3 ## E3 ## E2 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,2> E3 ## E3 ## E2 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,2,3> E3 ## E3 ## E2 ## E3; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,0> E3 ## E3 ## E3 ## E0; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,1> E3 ## E3 ## E3 ## E1; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,2> E3 ## E3 ## E3 ## E2; }; \ - struct { detail::_swizzle<4, T, Q, 3,3,3,3> E3 ## E3 ## E3 ## E3; }; diff --git a/src/qged/display/glm/glm/detail/_swizzle_func.hpp b/src/qged/display/glm/glm/detail/_swizzle_func.hpp deleted file mode 100644 index f383be606f4..00000000000 --- a/src/qged/display/glm/glm/detail/_swizzle_func.hpp +++ /dev/null @@ -1,713 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, CONST, A, B) \ - vec<2, T, Q> A ## B() CONST \ - { \ - return vec<2, T, Q>(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, CONST, A, B, C) \ - vec<3, T, Q> A ## B ## C() CONST \ - { \ - return vec<3, T, Q>(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, CONST, A, B, C, D) \ - vec<4, T, Q> A ## B ## C ## D() CONST \ - { \ - return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ - } - -#define GLM_SWIZZLE_GEN_VEC2_ENTRY_DEF(T, P, L, CONST, A, B) \ - template \ - vec vec::A ## B() CONST \ - { \ - return vec<2, T, Q>(this->A, this->B); \ - } - -#define GLM_SWIZZLE_GEN_VEC3_ENTRY_DEF(T, P, L, CONST, A, B, C) \ - template \ - vec<3, T, Q> vec::A ## B ## C() CONST \ - { \ - return vec<3, T, Q>(this->A, this->B, this->C); \ - } - -#define GLM_SWIZZLE_GEN_VEC4_ENTRY_DEF(T, P, L, CONST, A, B, C, D) \ - template \ - vec<4, T, Q> vec::A ## B ## C ## D() CONST \ - { \ - return vec<4, T, Q>(this->A, this->B, this->C, this->D); \ - } - -#define GLM_MUTABLE - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, 2, GLM_MUTABLE, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC2(T, P) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, x, y) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, r, g) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC2_SWIZZLE(T, P, s, t) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, GLM_MUTABLE, C, B, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC3_SWIZZLE(T, P, A, B, C) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC3(T, P) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, x, y, z) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, r, g, b) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC3_COMP(T, P, s, t, p) - -#define GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, GLM_MUTABLE, D, C) - -#define GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, , D, C, B) - -#define GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, , D, B, C, A) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_REF4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) - -#define GLM_SWIZZLE_GEN_REF_FROM_VEC4(T, P) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, x, y, z, w) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, r, g, b, a) \ - GLM_SWIZZLE_GEN_REF_FROM_VEC4_COMP(T, P, s, t, p, q) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC2_SWIZZLE(T, P, A, B) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC2_SWIZZLE(T, P, A, B) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, x, y) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, r, g) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC2_COMP(T, P, s, t) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC3_SWIZZLE(T, P, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC3_SWIZZLE(T, P, A, B, C) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, x, y, z) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, r, g, b) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC3_COMP(T, P, s, t, p) - -#define GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, A, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, B, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, C, D) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, A) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, B) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, C) \ - GLM_SWIZZLE_GEN_VEC2_ENTRY(T, P, const, D, D) - -#define GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, A, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, B, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, C, D, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, A, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, B, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, C, D) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, A) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, B) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, C) \ - GLM_SWIZZLE_GEN_VEC3_ENTRY(T, P, const, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, A, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, B, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, C, D, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, A, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, B, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, C, D, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, A, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, B, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, C, D) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, A) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, B) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, C) \ - GLM_SWIZZLE_GEN_VEC4_ENTRY(T, P, const, D, D, D, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC2_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC3_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) \ - GLM_SWIZZLE_GEN_VEC4_FROM_VEC4_SWIZZLE(T, P, A, B, C, D) - -#define GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, P) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, x, y, z, w) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, r, g, b, a) \ - GLM_SWIZZLE_GEN_VEC_FROM_VEC4_COMP(T, P, s, t, p, q) - diff --git a/src/qged/display/glm/glm/detail/_vectorize.hpp b/src/qged/display/glm/glm/detail/_vectorize.hpp deleted file mode 100644 index 3d4b5d93a0a..00000000000 --- a/src/qged/display/glm/glm/detail/_vectorize.hpp +++ /dev/null @@ -1,193 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -namespace glm{ -namespace detail -{ - template class vec, length_t L, typename R, typename T, qualifier Q> - struct functor1{}; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<1, R, Q> call(R (*Func) (T x), vec<1, T, Q> const& v) - { - return vec<1, R, Q>(Func(v.x)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<2, R, Q> call(R (*Func) (T x), vec<2, T, Q> const& v) - { - return vec<2, R, Q>(Func(v.x), Func(v.y)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<3, R, Q> call(R (*Func) (T x), vec<3, T, Q> const& v) - { - return vec<3, R, Q>(Func(v.x), Func(v.y), Func(v.z)); - } - }; - - template class vec, typename R, typename T, qualifier Q> - struct functor1 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, R, Q> call(R (*Func) (T x), vec<4, T, Q> const& v) - { - return vec<4, R, Q>(Func(v.x), Func(v.y), Func(v.z), Func(v.w)); - } - }; - - template class vec, length_t L, typename T, qualifier Q> - struct functor2{}; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, vec<1, T, Q> const& b) - { - return vec<1, T, Q>(Func(a.x, b.x)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, vec<2, T, Q> const& b) - { - return vec<2, T, Q>(Func(a.x, b.x), Func(a.y, b.y)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return vec<3, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2 - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); - } - }; - - template class vec, length_t L, typename T, qualifier Q> - struct functor2_vec_sca{}; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<1, T, Q> call(T (*Func) (T x, T y), vec<1, T, Q> const& a, T b) - { - return vec<1, T, Q>(Func(a.x, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<2, T, Q> call(T (*Func) (T x, T y), vec<2, T, Q> const& a, T b) - { - return vec<2, T, Q>(Func(a.x, b), Func(a.y, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(T (*Func) (T x, T y), vec<3, T, Q> const& a, T b) - { - return vec<3, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b)); - } - }; - - template class vec, typename T, qualifier Q> - struct functor2_vec_sca - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(T (*Func) (T x, T y), vec<4, T, Q> const& a, T b) - { - return vec<4, T, Q>(Func(a.x, b), Func(a.y, b), Func(a.z, b), Func(a.w, b)); - } - }; - - template - struct functor2_vec_int {}; - - template - struct functor2_vec_int<1, T, Q> - { - GLM_FUNC_QUALIFIER static vec<1, int, Q> call(int (*Func) (T x, int y), vec<1, T, Q> const& a, vec<1, int, Q> const& b) - { - return vec<1, int, Q>(Func(a.x, b.x)); - } - }; - - template - struct functor2_vec_int<2, T, Q> - { - GLM_FUNC_QUALIFIER static vec<2, int, Q> call(int (*Func) (T x, int y), vec<2, T, Q> const& a, vec<2, int, Q> const& b) - { - return vec<2, int, Q>(Func(a.x, b.x), Func(a.y, b.y)); - } - }; - - template - struct functor2_vec_int<3, T, Q> - { - GLM_FUNC_QUALIFIER static vec<3, int, Q> call(int (*Func) (T x, int y), vec<3, T, Q> const& a, vec<3, int, Q> const& b) - { - return vec<3, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z)); - } - }; - - template - struct functor2_vec_int<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(int (*Func) (T x, int y), vec<4, T, Q> const& a, vec<4, int, Q> const& b) - { - return vec<4, int, Q>(Func(a.x, b.x), Func(a.y, b.y), Func(a.z, b.z), Func(a.w, b.w)); - } - }; -}//namespace detail -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/compute_common.hpp b/src/qged/display/glm/glm/detail/compute_common.hpp deleted file mode 100644 index 050240fd597..00000000000 --- a/src/qged/display/glm/glm/detail/compute_common.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -#include "setup.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_abs - {}; - - template - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || std::numeric_limits::is_signed, - "'abs' only accept floating-point and integer scalar or vector inputs"); - - return x >= genFIType(0) ? x : -x; - // TODO, perf comp with: *(((int *) &x) + 1) &= 0x7fffffff; - } - }; - -#if GLM_COMPILER & GLM_COMPILER_CUDA - template<> - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static float call(float x) - { - return fabsf(x); - } - }; -#endif - - template - struct compute_abs - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genFIType call(genFIType x) - { - GLM_STATIC_ASSERT( - (!std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'abs' only accept floating-point and integer scalar or vector inputs"); - return x; - } - }; -}//namespace detail -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/compute_vector_relational.hpp b/src/qged/display/glm/glm/detail/compute_vector_relational.hpp deleted file mode 100644 index 47947b64ec5..00000000000 --- a/src/qged/display/glm/glm/detail/compute_vector_relational.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -//#include "compute_common.hpp" -#include "setup.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) - { - return a == b; - } - }; -/* - template - struct compute_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(T a, T b) - { - return detail::compute_abs::is_signed>::call(b - a) <= static_cast(0); - //return std::memcmp(&a, &b, sizeof(T)) == 0; - } - }; -*/ -}//namespace detail -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/func_common.inl b/src/qged/display/glm/glm/detail/func_common.inl deleted file mode 100644 index 4b5f14410ff..00000000000 --- a/src/qged/display/glm/glm/detail/func_common.inl +++ /dev/null @@ -1,792 +0,0 @@ -/// @ref core -/// @file glm/detail/func_common.inl - -#include "../vector_relational.hpp" -#include "compute_common.hpp" -#include "type_vec1.hpp" -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include "_vectorize.hpp" -#include - -namespace glm -{ - // min - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType min(genType x, genType y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return (y < x) ? y : x; - } - - // max - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType max(genType x, genType y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - - return (x < y) ? y : x; - } - - // abs - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR int abs(int x) - { - int const y = x >> (sizeof(int) * 8 - 1); - return (x ^ y) - y; - } - - // round -# if GLM_HAS_CXX11_STL - using ::std::round; -# else - template - GLM_FUNC_QUALIFIER genType round(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); - - return x < static_cast(0) ? static_cast(int(x - static_cast(0.5))) : static_cast(int(x + static_cast(0.5))); - } -# endif - - // trunc -# if GLM_HAS_CXX11_STL - using ::std::trunc; -# else - template - GLM_FUNC_QUALIFIER genType trunc(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); - - return x < static_cast(0) ? -std::floor(-x) : std::floor(x); - } -# endif - -}//namespace glm - -namespace glm{ -namespace detail -{ - template - struct compute_abs_vector - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec call(vec const& x) - { - return detail::functor1::call(abs, x); - } - }; - - template - struct compute_mix_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); - } - }; - - template - struct compute_mix_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, vec const& a) - { - vec Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = a[i] ? y[i] : x[i]; - return Result; - } - }; - - template - struct compute_mix_scalar - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, U const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return vec(vec(x) * (static_cast(1) - a) + vec(y) * a); - } - }; - - template - struct compute_mix_scalar - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y, bool const& a) - { - return a ? y : x; - } - }; - - template - struct compute_mix - { - GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, U const& a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'mix' only accept floating-point inputs for the interpolator a"); - - return static_cast(static_cast(x) * (static_cast(1) - a) + static_cast(y) * a); - } - }; - - template - struct compute_mix - { - GLM_FUNC_QUALIFIER static T call(T const& x, T const& y, bool const& a) - { - return a ? y : x; - } - }; - - template - struct compute_sign - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return vec(glm::lessThan(vec(0), x)) - vec(glm::lessThan(x, vec(0))); - } - }; - -# if GLM_ARCH == GLM_ARCH_X86 - template - struct compute_sign - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - T const Shift(static_cast(sizeof(T) * 8 - 1)); - vec const y(vec::type, Q>(-x) >> typename detail::make_unsigned::type(Shift)); - - return (x >> Shift) | y; - } - }; -# endif - - template - struct compute_floor - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::floor, x); - } - }; - - template - struct compute_ceil - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::ceil, x); - } - }; - - template - struct compute_fract - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return x - floor(x); - } - }; - - template - struct compute_trunc - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(trunc, x); - } - }; - - template - struct compute_round - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(round, x); - } - }; - - template - struct compute_mod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mod' only accept floating-point inputs. Include for integer inputs."); - return a - b * floor(a / b); - } - }; - - template - struct compute_min_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) - { - return detail::functor2::call(min, x, y); - } - }; - - template - struct compute_max_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& y) - { - return detail::functor2::call(max, x, y); - } - }; - - template - struct compute_clamp_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, vec const& minVal, vec const& maxVal) - { - return min(max(x, minVal), maxVal); - } - }; - - template - struct compute_step_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& edge, vec const& x) - { - return mix(vec(1), vec(0), glm::lessThan(x, edge)); - } - }; - - template - struct compute_smoothstep_vector - { - GLM_FUNC_QUALIFIER static vec call(vec const& edge0, vec const& edge1, vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); - vec const tmp(clamp((x - edge0) / (edge1 - edge0), static_cast(0), static_cast(1))); - return tmp * tmp * (static_cast(3) - static_cast(2) * tmp); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genFIType abs(genFIType x) - { - return detail::compute_abs::is_signed>::call(x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec abs(vec const& x) - { - return detail::compute_abs_vector::value>::call(x); - } - - // sign - // fast and works for any type - template - GLM_FUNC_QUALIFIER genFIType sign(genFIType x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'sign' only accept signed inputs"); - - return detail::compute_sign<1, genFIType, defaultp, - std::numeric_limits::is_iec559, detail::is_aligned::value>::call(vec<1, genFIType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec sign(vec const& x) - { - GLM_STATIC_ASSERT( - std::numeric_limits::is_iec559 || (std::numeric_limits::is_signed && std::numeric_limits::is_integer), - "'sign' only accept signed inputs"); - - return detail::compute_sign::is_iec559, detail::is_aligned::value>::call(x); - } - - // floor - using ::std::floor; - template - GLM_FUNC_QUALIFIER vec floor(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'floor' only accept floating-point inputs."); - return detail::compute_floor::value>::call(x); - } - - template - GLM_FUNC_QUALIFIER vec trunc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'trunc' only accept floating-point inputs"); - return detail::compute_trunc::value>::call(x); - } - - template - GLM_FUNC_QUALIFIER vec round(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'round' only accept floating-point inputs"); - return detail::compute_round::value>::call(x); - } - -/* - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - - return genType(int(x + genType(int(x) % 2))); - } -*/ - - // roundEven - template - GLM_FUNC_QUALIFIER genType roundEven(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - - int Integer = static_cast(x); - genType IntegerPart = static_cast(Integer); - genType FractionalPart = fract(x); - - if(FractionalPart > static_cast(0.5) || FractionalPart < static_cast(0.5)) - { - return round(x); - } - else if((Integer % 2) == 0) - { - return IntegerPart; - } - else if(x <= static_cast(0)) // Work around... - { - return IntegerPart - static_cast(1); - } - else - { - return IntegerPart + static_cast(1); - } - //else // Bug on MinGW 4.5.2 - //{ - // return mix(IntegerPart + genType(-1), IntegerPart + genType(1), x <= genType(0)); - //} - } - - template - GLM_FUNC_QUALIFIER vec roundEven(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'roundEven' only accept floating-point inputs"); - return detail::functor1::call(roundEven, x); - } - - // ceil - using ::std::ceil; - template - GLM_FUNC_QUALIFIER vec ceil(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ceil' only accept floating-point inputs"); - return detail::compute_ceil::value>::call(x); - } - - // fract - template - GLM_FUNC_QUALIFIER genType fract(genType x) - { - return fract(vec<1, genType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec fract(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fract' only accept floating-point inputs"); - return detail::compute_fract::value>::call(x); - } - - // mod - template - GLM_FUNC_QUALIFIER genType mod(genType x, genType y) - { -# if GLM_COMPILER & GLM_COMPILER_CUDA - // Another Cuda compiler bug https://github.com/g-truc/glm/issues/530 - vec<1, genType, defaultp> Result(mod(vec<1, genType, defaultp>(x), y)); - return Result.x; -# else - return mod(vec<1, genType, defaultp>(x), y).x; -# endif - } - - template - GLM_FUNC_QUALIFIER vec mod(vec const& x, T y) - { - return detail::compute_mod::value>::call(x, vec(y)); - } - - template - GLM_FUNC_QUALIFIER vec mod(vec const& x, vec const& y) - { - return detail::compute_mod::value>::call(x, y); - } - - // modf - template - GLM_FUNC_QUALIFIER genType modf(genType x, genType & i) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'modf' only accept floating-point inputs"); - return std::modf(x, &i); - } - - template - GLM_FUNC_QUALIFIER vec<1, T, Q> modf(vec<1, T, Q> const& x, vec<1, T, Q> & i) - { - return vec<1, T, Q>( - modf(x.x, i.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> modf(vec<2, T, Q> const& x, vec<2, T, Q> & i) - { - return vec<2, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> modf(vec<3, T, Q> const& x, vec<3, T, Q> & i) - { - return vec<3, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> modf(vec<4, T, Q> const& x, vec<4, T, Q> & i) - { - return vec<4, T, Q>( - modf(x.x, i.x), - modf(x.y, i.y), - modf(x.z, i.z), - modf(x.w, i.w)); - } - - //// Only valid if (INT_MIN <= x-y <= INT_MAX) - //// min(x,y) - //r = y + ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT - 1))); - //// max(x,y) - //r = x - ((x - y) & ((x - y) >> (sizeof(int) * - //CHAR_BIT - 1))); - - // min - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'min' only accept floating-point or integer inputs"); - return detail::compute_min_vector::value>::call(a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& a, vec const& b) - { - return detail::compute_min_vector::value>::call(a, b); - } - - // max - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'max' only accept floating-point or integer inputs"); - return detail::compute_max_vector::value>::call(a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& a, vec const& b) - { - return detail::compute_max_vector::value>::call(a, b); - } - - // clamp - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType clamp(genType x, genType minVal, genType maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return min(max(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, T minVal, T maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector::value>::call(x, vec(minVal), vec(maxVal)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec clamp(vec const& x, vec const& minVal, vec const& maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer, "'clamp' only accept floating-point or integer inputs"); - return detail::compute_clamp_vector::value>::call(x, minVal, maxVal); - } - - template - GLM_FUNC_QUALIFIER genTypeT mix(genTypeT x, genTypeT y, genTypeU a) - { - return detail::compute_mix::call(x, y, a); - } - - template - GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, U a) - { - return detail::compute_mix_scalar::value>::call(x, y, a); - } - - template - GLM_FUNC_QUALIFIER vec mix(vec const& x, vec const& y, vec const& a) - { - return detail::compute_mix_vector::value>::call(x, y, a); - } - - // step - template - GLM_FUNC_QUALIFIER genType step(genType edge, genType x) - { - return mix(static_cast(1), static_cast(0), x < edge); - } - - template - GLM_FUNC_QUALIFIER vec step(T edge, vec const& x) - { - return detail::compute_step_vector::value>::call(vec(edge), x); - } - - template - GLM_FUNC_QUALIFIER vec step(vec const& edge, vec const& x) - { - return detail::compute_step_vector::value>::call(edge, x); - } - - // smoothstep - template - GLM_FUNC_QUALIFIER genType smoothstep(genType edge0, genType edge1, genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'smoothstep' only accept floating-point inputs"); - - genType const tmp(clamp((x - edge0) / (edge1 - edge0), genType(0), genType(1))); - return tmp * tmp * (genType(3) - genType(2) * tmp); - } - - template - GLM_FUNC_QUALIFIER vec smoothstep(T edge0, T edge1, vec const& x) - { - return detail::compute_smoothstep_vector::value>::call(vec(edge0), vec(edge1), x); - } - - template - GLM_FUNC_QUALIFIER vec smoothstep(vec const& edge0, vec const& edge1, vec const& x) - { - return detail::compute_smoothstep_vector::value>::call(edge0, edge1, x); - } - -# if GLM_HAS_CXX11_STL - using std::isnan; -# else - template - GLM_FUNC_QUALIFIER bool isnan(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::isnan(x); -# elif GLM_COMPILER & GLM_COMPILER_VC - return _isnan(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# if GLM_PLATFORM & GLM_PLATFORM_WINDOWS - return _isnan(x) != 0; -# else - return ::isnan(x) != 0; -# endif -# elif (GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG)) && (GLM_PLATFORM & GLM_PLATFORM_ANDROID) && __cplusplus < 201103L - return _isnan(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_CUDA - return ::isnan(x) != 0; -# else - return std::isnan(x); -# endif - } -# endif - - template - GLM_FUNC_QUALIFIER vec isnan(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = glm::isnan(v[l]); - return Result; - } - -# if GLM_HAS_CXX11_STL - using std::isinf; -# else - template - GLM_FUNC_QUALIFIER bool isinf(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::isinf(x); -# elif GLM_COMPILER & (GLM_COMPILER_INTEL | GLM_COMPILER_VC) -# if(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) - return _fpclass(x) == _FPCLASS_NINF || _fpclass(x) == _FPCLASS_PINF; -# else - return ::isinf(x); -# endif -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID && __cplusplus < 201103L) - return _isinf(x) != 0; -# else - return std::isinf(x); -# endif -# elif GLM_COMPILER & GLM_COMPILER_CUDA - // http://developer.download.nvidia.com/compute/cuda/4_2/rel/toolkit/docs/online/group__CUDA__MATH__DOUBLE_g13431dd2b40b51f9139cbb7f50c18fab.html#g13431dd2b40b51f9139cbb7f50c18fab - return ::isinf(double(x)) != 0; -# else - return std::isinf(x); -# endif - } -# endif - - template - GLM_FUNC_QUALIFIER vec isinf(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = glm::isinf(v[l]); - return Result; - } - - GLM_FUNC_QUALIFIER int floatBitsToInt(float const& v) - { - union - { - float in; - int out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec floatBitsToInt(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER uint floatBitsToUint(float const& v) - { - union - { - float in; - uint out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec floatBitsToUint(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER float intBitsToFloat(int const& v) - { - union - { - int in; - float out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec intBitsToFloat(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - - GLM_FUNC_QUALIFIER float uintBitsToFloat(uint const& v) - { - union - { - uint in; - float out; - } u; - - u.in = v; - - return u.out; - } - - template - GLM_FUNC_QUALIFIER vec uintBitsToFloat(vec const& v) - { - return reinterpret_cast&>(const_cast&>(v)); - } - -# if GLM_HAS_CXX11_STL - using std::fma; -# else - template - GLM_FUNC_QUALIFIER genType fma(genType const& a, genType const& b, genType const& c) - { - return a * b + c; - } -# endif - - template - GLM_FUNC_QUALIFIER genType frexp(genType x, int& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); - - return std::frexp(x, &exp); - } - - template - GLM_FUNC_QUALIFIER vec frexp(vec const& v, vec& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'frexp' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = std::frexp(v[l], &exp[l]); - return Result; - } - - template - GLM_FUNC_QUALIFIER genType ldexp(genType const& x, int const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); - - return std::ldexp(x, exp); - } - - template - GLM_FUNC_QUALIFIER vec ldexp(vec const& v, vec const& exp) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'ldexp' only accept floating-point inputs"); - - vec Result; - for (length_t l = 0; l < v.length(); ++l) - Result[l] = std::ldexp(v[l], exp[l]); - return Result; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_common_simd.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/func_common_simd.inl b/src/qged/display/glm/glm/detail/func_common_simd.inl deleted file mode 100644 index ce0032d33fe..00000000000 --- a/src/qged/display/glm/glm/detail/func_common_simd.inl +++ /dev/null @@ -1,231 +0,0 @@ -/// @ref core -/// @file glm/detail/func_common_simd.inl - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#include "../simd/common.h" - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_abs_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_abs(v.data); - return result; - } - }; - - template - struct compute_abs_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) - { - vec<4, int, Q> result; - result.data = glm_ivec4_abs(v.data); - return result; - } - }; - - template - struct compute_floor<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_floor(v.data); - return result; - } - }; - - template - struct compute_ceil<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_ceil(v.data); - return result; - } - }; - - template - struct compute_fract<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_fract(v.data); - return result; - } - }; - - template - struct compute_round<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> result; - result.data = glm_vec4_round(v.data); - return result; - } - }; - - template - struct compute_mod<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { - vec<4, float, Q> result; - result.data = glm_vec4_mod(x.data, y.data); - return result; - } - }; - - template - struct compute_min_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - vec<4, float, Q> result; - result.data = _mm_min_ps(v1.data, v2.data); - return result; - } - }; - - template - struct compute_min_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - vec<4, int, Q> result; - result.data = _mm_min_epi32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_min_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - vec<4, uint, Q> result; - result.data = _mm_min_epu32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - vec<4, float, Q> result; - result.data = _mm_max_ps(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - vec<4, int, Q> result; - result.data = _mm_max_epi32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_max_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - vec<4, uint, Q> result; - result.data = _mm_max_epu32(v1.data, v2.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& minVal, vec<4, float, Q> const& maxVal) - { - vec<4, float, Q> result; - result.data = _mm_min_ps(_mm_max_ps(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, int, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& x, vec<4, int, Q> const& minVal, vec<4, int, Q> const& maxVal) - { - vec<4, int, Q> result; - result.data = _mm_min_epi32(_mm_max_epi32(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_clamp_vector<4, uint, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& x, vec<4, uint, Q> const& minVal, vec<4, uint, Q> const& maxVal) - { - vec<4, uint, Q> result; - result.data = _mm_min_epu32(_mm_max_epu32(x.data, minVal.data), maxVal.data); - return result; - } - }; - - template - struct compute_mix_vector<4, float, bool, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& x, vec<4, float, Q> const& y, vec<4, bool, Q> const& a) - { - __m128i const Load = _mm_set_epi32(-static_cast(a.w), -static_cast(a.z), -static_cast(a.y), -static_cast(a.x)); - __m128 const Mask = _mm_castsi128_ps(Load); - - vec<4, float, Q> Result; -# if 0 && GLM_ARCH & GLM_ARCH_AVX - Result.data = _mm_blendv_ps(x.data, y.data, Mask); -# else - Result.data = _mm_or_ps(_mm_and_ps(Mask, y.data), _mm_andnot_ps(Mask, x.data)); -# endif - return Result; - } - }; -/* FIXME - template - struct compute_step_vector - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge, vec<4, float, Q> const& x) - { - vec<4, float, Q> Result; - result.data = glm_vec4_step(edge.data, x.data); - return result; - } - }; -*/ - template - struct compute_smoothstep_vector<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& edge0, vec<4, float, Q> const& edge1, vec<4, float, Q> const& x) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_smoothstep(edge0.data, edge1.data, x.data); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/detail/func_exponential.inl b/src/qged/display/glm/glm/detail/func_exponential.inl deleted file mode 100644 index 2040d41f8a3..00000000000 --- a/src/qged/display/glm/glm/detail/func_exponential.inl +++ /dev/null @@ -1,152 +0,0 @@ -/// @ref core -/// @file glm/detail/func_exponential.inl - -#include "../vector_relational.hpp" -#include "_vectorize.hpp" -#include -#include -#include - -namespace glm{ -namespace detail -{ -# if GLM_HAS_CXX11_STL - using std::log2; -# else - template - genType log2(genType Value) - { - return std::log(Value) * static_cast(1.4426950408889634073599246810019); - } -# endif - - template - struct compute_log2 - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'log2' only accept floating-point inputs. Include for integer inputs."); - - return detail::functor1::call(log2, v); - } - }; - - template - struct compute_sqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(std::sqrt, x); - } - }; - - template - struct compute_inversesqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return static_cast(1) / sqrt(x); - } - }; - - template - struct compute_inversesqrt - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - vec tmp(x); - vec xhalf(tmp * 0.5f); - vec* p = reinterpret_cast*>(const_cast*>(&x)); - vec i = vec(0x5f375a86) - (*p >> vec(1)); - vec* ptmp = reinterpret_cast*>(&i); - tmp = *ptmp; - tmp = tmp * (1.5f - xhalf * tmp * tmp); - return tmp; - } - }; -}//namespace detail - - // pow - using std::pow; - template - GLM_FUNC_QUALIFIER vec pow(vec const& base, vec const& exponent) - { - return detail::functor2::call(pow, base, exponent); - } - - // exp - using std::exp; - template - GLM_FUNC_QUALIFIER vec exp(vec const& x) - { - return detail::functor1::call(exp, x); - } - - // log - using std::log; - template - GLM_FUNC_QUALIFIER vec log(vec const& x) - { - return detail::functor1::call(log, x); - } - -# if GLM_HAS_CXX11_STL - using std::exp2; -# else - //exp2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType exp2(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'exp2' only accept floating-point inputs"); - - return std::exp(static_cast(0.69314718055994530941723212145818) * x); - } -# endif - - template - GLM_FUNC_QUALIFIER vec exp2(vec const& x) - { - return detail::functor1::call(exp2, x); - } - - // log2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType log2(genType x) - { - return log2(vec<1, genType>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec log2(vec const& x) - { - return detail::compute_log2::is_iec559, detail::is_aligned::value>::call(x); - } - - // sqrt - using std::sqrt; - template - GLM_FUNC_QUALIFIER vec sqrt(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sqrt' only accept floating-point inputs"); - return detail::compute_sqrt::value>::call(x); - } - - // inversesqrt - template - GLM_FUNC_QUALIFIER genType inversesqrt(genType x) - { - return static_cast(1) / sqrt(x); - } - - template - GLM_FUNC_QUALIFIER vec inversesqrt(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'inversesqrt' only accept floating-point inputs"); - return detail::compute_inversesqrt::value>::call(x); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_exponential_simd.inl" -#endif - diff --git a/src/qged/display/glm/glm/detail/func_exponential_simd.inl b/src/qged/display/glm/glm/detail/func_exponential_simd.inl deleted file mode 100644 index fb78951727f..00000000000 --- a/src/qged/display/glm/glm/detail/func_exponential_simd.inl +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref core -/// @file glm/detail/func_exponential_simd.inl - -#include "../simd/exponential.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_sqrt<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> Result; - Result.data = _mm_sqrt_ps(v.data); - return Result; - } - }; - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - struct compute_sqrt<4, float, aligned_lowp, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& v) - { - vec<4, float, aligned_lowp> Result; - Result.data = glm_vec4_sqrt_lowp(v.data); - return Result; - } - }; -# endif -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/detail/func_geometric.inl b/src/qged/display/glm/glm/detail/func_geometric.inl deleted file mode 100644 index 9cde28fed18..00000000000 --- a/src/qged/display/glm/glm/detail/func_geometric.inl +++ /dev/null @@ -1,243 +0,0 @@ -#include "../exponential.hpp" -#include "../common.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_length - { - GLM_FUNC_QUALIFIER static T call(vec const& v) - { - return sqrt(dot(v, v)); - } - }; - - template - struct compute_distance - { - GLM_FUNC_QUALIFIER static T call(vec const& p0, vec const& p1) - { - return length(p1 - p0); - } - }; - - template - struct compute_dot{}; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<1, T, Q> const& a, vec<1, T, Q> const& b) - { - return a.x * b.x; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& a, vec<2, T, Q> const& b) - { - vec<2, T, Q> tmp(a * b); - return tmp.x + tmp.y; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - vec<3, T, Q> tmp(a * b); - return tmp.x + tmp.y + tmp.z; - } - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER static T call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> tmp(a * b); - return (tmp.x + tmp.y) + (tmp.z + tmp.w); - } - }; - - template - struct compute_cross - { - GLM_FUNC_QUALIFIER static vec<3, T, Q> call(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); - - return vec<3, T, Q>( - x.y * y.z - y.y * x.z, - x.z * y.x - y.z * x.x, - x.x * y.y - y.x * x.y); - } - }; - - template - struct compute_normalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return v * inversesqrt(dot(v, v)); - } - }; - - template - struct compute_faceforward - { - GLM_FUNC_QUALIFIER static vec call(vec const& N, vec const& I, vec const& Nref) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return dot(Nref, I) < static_cast(0) ? N : -N; - } - }; - - template - struct compute_reflect - { - GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N) - { - return I - N * dot(N, I) * static_cast(2); - } - }; - - template - struct compute_refract - { - GLM_FUNC_QUALIFIER static vec call(vec const& I, vec const& N, T eta) - { - T const dotValue(dot(N, I)); - T const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); - vec const Result = - (k >= static_cast(0)) ? (eta * I - (eta * dotValue + std::sqrt(k)) * N) : vec(0); - return Result; - } - }; -}//namespace detail - - // length - template - GLM_FUNC_QUALIFIER genType length(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); - - return abs(x); - } - - template - GLM_FUNC_QUALIFIER T length(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length' accepts only floating-point inputs"); - - return detail::compute_length::value>::call(v); - } - - // distance - template - GLM_FUNC_QUALIFIER genType distance(genType const& p0, genType const& p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance' accepts only floating-point inputs"); - - return length(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T distance(vec const& p0, vec const& p1) - { - return detail::compute_distance::value>::call(p0, p1); - } - - // dot - template - GLM_FUNC_QUALIFIER T dot(T x, T y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return x * y; - } - - template - GLM_FUNC_QUALIFIER T dot(vec const& x, vec const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); - } - - // cross - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - return detail::compute_cross::value>::call(x, y); - } -/* - // normalize - template - GLM_FUNC_QUALIFIER genType normalize(genType const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return x < genType(0) ? genType(-1) : genType(1); - } -*/ - template - GLM_FUNC_QUALIFIER vec normalize(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'normalize' accepts only floating-point inputs"); - - return detail::compute_normalize::value>::call(x); - } - - // faceforward - template - GLM_FUNC_QUALIFIER genType faceforward(genType const& N, genType const& I, genType const& Nref) - { - return dot(Nref, I) < static_cast(0) ? N : -N; - } - - template - GLM_FUNC_QUALIFIER vec faceforward(vec const& N, vec const& I, vec const& Nref) - { - return detail::compute_faceforward::value>::call(N, I, Nref); - } - - // reflect - template - GLM_FUNC_QUALIFIER genType reflect(genType const& I, genType const& N) - { - return I - N * dot(N, I) * genType(2); - } - - template - GLM_FUNC_QUALIFIER vec reflect(vec const& I, vec const& N) - { - return detail::compute_reflect::value>::call(I, N); - } - - // refract - template - GLM_FUNC_QUALIFIER genType refract(genType const& I, genType const& N, genType eta) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); - genType const dotValue(dot(N, I)); - genType const k(static_cast(1) - eta * eta * (static_cast(1) - dotValue * dotValue)); - return (eta * I - (eta * dotValue + sqrt(k)) * N) * static_cast(k >= static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER vec refract(vec const& I, vec const& N, T eta) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'refract' accepts only floating-point inputs"); - return detail::compute_refract::value>::call(I, N, eta); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_geometric_simd.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/func_geometric_simd.inl b/src/qged/display/glm/glm/detail/func_geometric_simd.inl deleted file mode 100644 index 2076dae055c..00000000000 --- a/src/qged/display/glm/glm/detail/func_geometric_simd.inl +++ /dev/null @@ -1,163 +0,0 @@ -/// @ref core -/// @file glm/detail/func_geometric_simd.inl - -#include "../simd/geometric.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_length<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) - { - return _mm_cvtss_f32(glm_vec4_length(v.data)); - } - }; - - template - struct compute_distance<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) - { - return _mm_cvtss_f32(glm_vec4_distance(p0.data, p1.data)); - } - }; - - template - struct compute_dot, float, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { - return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); - } - }; - - template - struct compute_cross - { - GLM_FUNC_QUALIFIER static vec<3, float, Q> call(vec<3, float, Q> const& a, vec<3, float, Q> const& b) - { - __m128 const set0 = _mm_set_ps(0.0f, a.z, a.y, a.x); - __m128 const set1 = _mm_set_ps(0.0f, b.z, b.y, b.x); - __m128 const xpd0 = glm_vec4_cross(set0, set1); - - vec<4, float, Q> Result; - Result.data = xpd0; - return vec<3, float, Q>(Result); - } - }; - - template - struct compute_normalize<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_normalize(v.data); - return Result; - } - }; - - template - struct compute_faceforward<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& N, vec<4, float, Q> const& I, vec<4, float, Q> const& Nref) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_faceforward(N.data, I.data, Nref.data); - return Result; - } - }; - - template - struct compute_reflect<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_reflect(I.data, N.data); - return Result; - } - }; - - template - struct compute_refract<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& I, vec<4, float, Q> const& N, float eta) - { - vec<4, float, Q> Result; - Result.data = glm_vec4_refract(I.data, N.data, _mm_set1_ps(eta)); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#elif GLM_ARCH & GLM_ARCH_NEON_BIT -namespace glm{ -namespace detail -{ - template - struct compute_length<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& v) - { - return sqrt(compute_dot, float, true>::call(v, v)); - } - }; - - template - struct compute_distance<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& p0, vec<4, float, Q> const& p1) - { - return compute_length<4, float, Q, true>::call(p1 - p0); - } - }; - - - template - struct compute_dot, float, true> - { - GLM_FUNC_QUALIFIER static float call(vec<4, float, Q> const& x, vec<4, float, Q> const& y) - { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - float32x4_t v = vmulq_f32(x.data, y.data); - return vaddvq_f32(v); -#else // Armv7a with Neon - float32x4_t p = vmulq_f32(x.data, y.data); - float32x2_t v = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); - v = vpadd_f32(v, v); - return vget_lane_f32(v, 0); -#endif - } - }; - - template - struct compute_normalize<4, float, Q, true> - { - GLM_FUNC_QUALIFIER static vec<4, float, Q> call(vec<4, float, Q> const& v) - { - float32x4_t p = vmulq_f32(v.data, v.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - p = vpaddq_f32(p, p); - p = vpaddq_f32(p, p); -#else - float32x2_t t = vpadd_f32(vget_low_f32(p), vget_high_f32(p)); - t = vpadd_f32(t, t); - p = vcombine_f32(t, t); -#endif - - float32x4_t vd = vrsqrteq_f32(p); - vec<4, float, Q> Result; - Result.data = vmulq_f32(v.data, vd); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/detail/func_integer.inl b/src/qged/display/glm/glm/detail/func_integer.inl deleted file mode 100644 index 091e1e0c202..00000000000 --- a/src/qged/display/glm/glm/detail/func_integer.inl +++ /dev/null @@ -1,372 +0,0 @@ -/// @ref core - -#include "_vectorize.hpp" -#if(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) -# include -# pragma intrinsic(_BitScanReverse) -#endif//(GLM_ARCH & GLM_ARCH_X86 && GLM_COMPILER & GLM_COMPILER_VC) -#include - -#if !GLM_HAS_EXTENDED_INTEGER_TYPE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic ignored "-Wlong-long" -# endif -# if (GLM_COMPILER & GLM_COMPILER_CLANG) -# pragma clang diagnostic ignored "-Wc++11-long-long" -# endif -#endif - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER T mask(T Bits) - { - return Bits >= static_cast(sizeof(T) * 8) ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); - } - - template - struct compute_bitfieldReverseStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) - { - return v; - } - }; - - template - struct compute_bitfieldReverseStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) - { - return (v & Mask) << Shift | (v & (~Mask)) >> Shift; - } - }; - - template - struct compute_bitfieldBitCountStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T, T) - { - return v; - } - }; - - template - struct compute_bitfieldBitCountStep - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Mask, T Shift) - { - return (v & Mask) + ((v >> Shift) & Mask); - } - }; - - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - if(Value == 0) - return -1; - - return glm::bitCount(~Value & (Value - static_cast(1))); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; - -# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template - struct compute_findLSB - { - GLM_FUNC_QUALIFIER static int call(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanForward64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - }; -# endif -# endif//GLM_HAS_BITSCAN_WINDOWS - - template - struct compute_findMSB_step_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, T Shift) - { - return x | (x >> Shift); - } - }; - - template - struct compute_findMSB_step_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x, T) - { - return x; - } - }; - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - vec x(v); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 1)); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 2)); - x = compute_findMSB_step_vec= 8>::call(x, static_cast( 4)); - x = compute_findMSB_step_vec= 16>::call(x, static_cast( 8)); - x = compute_findMSB_step_vec= 32>::call(x, static_cast(16)); - x = compute_findMSB_step_vec= 64>::call(x, static_cast(32)); - return vec(sizeof(T) * 8 - 1) - glm::bitCount(~x); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - GLM_FUNC_QUALIFIER int compute_findMSB_32(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(compute_findMSB_32, x); - } - }; - -# if !((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_MODEL == GLM_MODEL_32)) - template - GLM_FUNC_QUALIFIER int compute_findMSB_64(genIUType Value) - { - unsigned long Result(0); - unsigned char IsNotNull = _BitScanReverse64(&Result, *reinterpret_cast(&Value)); - return IsNotNull ? int(Result) : -1; - } - - template - struct compute_findMSB_vec - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - return detail::functor1::call(compute_findMSB_64, x); - } - }; -# endif -# endif//GLM_HAS_BITSCAN_WINDOWS -}//namespace detail - - // uaddCarry - GLM_FUNC_QUALIFIER uint uaddCarry(uint const& x, uint const& y, uint & Carry) - { - detail::uint64 const Value64(static_cast(x) + static_cast(y)); - detail::uint64 const Max32((static_cast(1) << static_cast(32)) - static_cast(1)); - Carry = Value64 > Max32 ? 1u : 0u; - return static_cast(Value64 % (Max32 + static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER vec uaddCarry(vec const& x, vec const& y, vec& Carry) - { - vec Value64(vec(x) + vec(y)); - vec Max32((static_cast(1) << static_cast(32)) - static_cast(1)); - Carry = mix(vec(0), vec(1), greaterThan(Value64, Max32)); - return vec(Value64 % (Max32 + static_cast(1))); - } - - // usubBorrow - GLM_FUNC_QUALIFIER uint usubBorrow(uint const& x, uint const& y, uint & Borrow) - { - Borrow = x >= y ? static_cast(0) : static_cast(1); - if(y >= x) - return y - x; - else - return static_cast((static_cast(1) << static_cast(32)) + (static_cast(y) - static_cast(x))); - } - - template - GLM_FUNC_QUALIFIER vec usubBorrow(vec const& x, vec const& y, vec& Borrow) - { - Borrow = mix(vec(1), vec(0), greaterThanEqual(x, y)); - vec const YgeX(y - x); - vec const XgeY(vec((static_cast(1) << static_cast(32)) + (vec(y) - vec(x)))); - return mix(XgeY, YgeX, greaterThanEqual(y, x)); - } - - // umulExtended - GLM_FUNC_QUALIFIER void umulExtended(uint const& x, uint const& y, uint & msb, uint & lsb) - { - detail::uint64 Value64 = static_cast(x) * static_cast(y); - msb = static_cast(Value64 >> static_cast(32)); - lsb = static_cast(Value64); - } - - template - GLM_FUNC_QUALIFIER void umulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) - { - vec Value64(vec(x) * vec(y)); - msb = vec(Value64 >> static_cast(32)); - lsb = vec(Value64); - } - - // imulExtended - GLM_FUNC_QUALIFIER void imulExtended(int x, int y, int& msb, int& lsb) - { - detail::int64 Value64 = static_cast(x) * static_cast(y); - msb = static_cast(Value64 >> static_cast(32)); - lsb = static_cast(Value64); - } - - template - GLM_FUNC_QUALIFIER void imulExtended(vec const& x, vec const& y, vec& msb, vec& lsb) - { - vec Value64(vec(x) * vec(y)); - lsb = vec(Value64 & static_cast(0xFFFFFFFF)); - msb = vec((Value64 >> static_cast(32)) & static_cast(0xFFFFFFFF)); - } - - // bitfieldExtract - template - GLM_FUNC_QUALIFIER genIUType bitfieldExtract(genIUType Value, int Offset, int Bits) - { - return bitfieldExtract(vec<1, genIUType>(Value), Offset, Bits).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldExtract(vec const& Value, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldExtract' only accept integer inputs"); - - return (Value >> static_cast(Offset)) & static_cast(detail::mask(Bits)); - } - - // bitfieldInsert - template - GLM_FUNC_QUALIFIER genIUType bitfieldInsert(genIUType const& Base, genIUType const& Insert, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); - - return bitfieldInsert(vec<1, genIUType>(Base), vec<1, genIUType>(Insert), Offset, Bits).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldInsert(vec const& Base, vec const& Insert, int Offset, int Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldInsert' only accept integer values"); - - T const Mask = static_cast(detail::mask(Bits) << Offset); - return (Base & ~Mask) | ((Insert << static_cast(Offset)) & Mask); - } - - // bitfieldReverse - template - GLM_FUNC_QUALIFIER genIUType bitfieldReverse(genIUType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); - - return bitfieldReverse(glm::vec<1, genIUType, glm::defaultp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec bitfieldReverse(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldReverse' only accept integer values"); - - vec x(v); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 2>::call(x, static_cast(0x5555555555555555ull), static_cast( 1)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 4>::call(x, static_cast(0x3333333333333333ull), static_cast( 2)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 8>::call(x, static_cast(0x0F0F0F0F0F0F0F0Full), static_cast( 4)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 16>::call(x, static_cast(0x00FF00FF00FF00FFull), static_cast( 8)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 32>::call(x, static_cast(0x0000FFFF0000FFFFull), static_cast(16)); - x = detail::compute_bitfieldReverseStep::value, sizeof(T) * 8>= 64>::call(x, static_cast(0x00000000FFFFFFFFull), static_cast(32)); - return x; - } - - // bitCount - template - GLM_FUNC_QUALIFIER int bitCount(genIUType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); - - return bitCount(glm::vec<1, genIUType, glm::defaultp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec bitCount(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitCount' only accept integer values"); - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable : 4310) //cast truncates constant value -# endif - - vec::type, Q> x(*reinterpret_cast::type, Q> const *>(&v)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 2>::call(x, typename detail::make_unsigned::type(0x5555555555555555ull), typename detail::make_unsigned::type( 1)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 4>::call(x, typename detail::make_unsigned::type(0x3333333333333333ull), typename detail::make_unsigned::type( 2)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 8>::call(x, typename detail::make_unsigned::type(0x0F0F0F0F0F0F0F0Full), typename detail::make_unsigned::type( 4)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 16>::call(x, typename detail::make_unsigned::type(0x00FF00FF00FF00FFull), typename detail::make_unsigned::type( 8)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 32>::call(x, typename detail::make_unsigned::type(0x0000FFFF0000FFFFull), typename detail::make_unsigned::type(16)); - x = detail::compute_bitfieldBitCountStep::type, Q, detail::is_aligned::value, sizeof(T) * 8>= 64>::call(x, typename detail::make_unsigned::type(0x00000000FFFFFFFFull), typename detail::make_unsigned::type(32)); - return vec(x); - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif - } - - // findLSB - template - GLM_FUNC_QUALIFIER int findLSB(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - - return detail::compute_findLSB::call(Value); - } - - template - GLM_FUNC_QUALIFIER vec findLSB(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findLSB' only accept integer values"); - - return detail::functor1::call(findLSB, x); - } - - // findMSB - template - GLM_FUNC_QUALIFIER int findMSB(genIUType v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - - return findMSB(vec<1, genIUType>(v)).x; - } - - template - GLM_FUNC_QUALIFIER vec findMSB(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findMSB' only accept integer values"); - - return detail::compute_findMSB_vec::call(v); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_integer_simd.inl" -#endif - diff --git a/src/qged/display/glm/glm/detail/func_integer_simd.inl b/src/qged/display/glm/glm/detail/func_integer_simd.inl deleted file mode 100644 index 8be6c9ce4dc..00000000000 --- a/src/qged/display/glm/glm/detail/func_integer_simd.inl +++ /dev/null @@ -1,65 +0,0 @@ -#include "../simd/integer.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_bitfieldReverseStep<4, uint, Q, true, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) - { - __m128i const set0 = v.data; - - __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); - __m128i const and1 = _mm_and_si128(set0, set1); - __m128i const sft1 = _mm_slli_epi32(and1, Shift); - - __m128i const set2 = _mm_andnot_si128(set0, _mm_set1_epi32(-1)); - __m128i const and2 = _mm_and_si128(set0, set2); - __m128i const sft2 = _mm_srai_epi32(and2, Shift); - - __m128i const or0 = _mm_or_si128(sft1, sft2); - - return or0; - } - }; - - template - struct compute_bitfieldBitCountStep<4, uint, Q, true, true> - { - GLM_FUNC_QUALIFIER static vec<4, uint, Q> call(vec<4, uint, Q> const& v, uint Mask, uint Shift) - { - __m128i const set0 = v.data; - - __m128i const set1 = _mm_set1_epi32(static_cast(Mask)); - __m128i const and0 = _mm_and_si128(set0, set1); - __m128i const sft0 = _mm_slli_epi32(set0, Shift); - __m128i const and1 = _mm_and_si128(sft0, set1); - __m128i const add0 = _mm_add_epi32(and0, and1); - - return add0; - } - }; -}//namespace detail - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template<> - GLM_FUNC_QUALIFIER int bitCount(uint x) - { - return _mm_popcnt_u32(x); - } - -# if(GLM_MODEL == GLM_MODEL_64) - template<> - GLM_FUNC_QUALIFIER int bitCount(detail::uint64 x) - { - return static_cast(_mm_popcnt_u64(x)); - } -# endif//GLM_MODEL -# endif//GLM_ARCH - -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/detail/func_matrix.inl b/src/qged/display/glm/glm/detail/func_matrix.inl deleted file mode 100644 index d980c6d3888..00000000000 --- a/src/qged/display/glm/glm/detail/func_matrix.inl +++ /dev/null @@ -1,398 +0,0 @@ -#include "../geometric.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct compute_matrixCompMult - { - GLM_FUNC_QUALIFIER static mat call(mat const& x, mat const& y) - { - mat Result; - for(length_t i = 0; i < Result.length(); ++i) - Result[i] = x[i] * y[i]; - return Result; - } - }; - - template - struct compute_transpose{}; - - template - struct compute_transpose<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) - { - mat<2, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - return Result; - } - }; - - template - struct compute_transpose<2, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 2, T, Q> call(mat<2, 3, T, Q> const& m) - { - mat<3,2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - return Result; - } - }; - - template - struct compute_transpose<2, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 2, T, Q> call(mat<2, 4, T, Q> const& m) - { - mat<4, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - return Result; - } - }; - - template - struct compute_transpose<3, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 3, T, Q> call(mat<3, 2, T, Q> const& m) - { - mat<2, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - return Result; - } - }; - - template - struct compute_transpose<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) - { - mat<3, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - return Result; - } - }; - - template - struct compute_transpose<3, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 3, T, Q> call(mat<3, 4, T, Q> const& m) - { - mat<4, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - return Result; - } - }; - - template - struct compute_transpose<4, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 4, T, Q> call(mat<4, 2, T, Q> const& m) - { - mat<2, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - return Result; - } - }; - - template - struct compute_transpose<4, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 4, T, Q> call(mat<4, 3, T, Q> const& m) - { - mat<3, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - return Result; - } - }; - - template - struct compute_transpose<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) - { - mat<4, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - Result[3][3] = m[3][3]; - return Result; - } - }; - - template - struct compute_determinant{}; - - template - struct compute_determinant<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<2, 2, T, Q> const& m) - { - return m[0][0] * m[1][1] - m[1][0] * m[0][1]; - } - }; - - template - struct compute_determinant<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<3, 3, T, Q> const& m) - { - return - + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - } - }; - - template - struct compute_determinant<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static T call(mat<4, 4, T, Q> const& m) - { - T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - vec<4, T, Q> DetCof( - + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - return - m[0][0] * DetCof[0] + m[0][1] * DetCof[1] + - m[0][2] * DetCof[2] + m[0][3] * DetCof[3]; - } - }; - - template - struct compute_inverse{}; - - template - struct compute_inverse<2, 2, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<2, 2, T, Q> call(mat<2, 2, T, Q> const& m) - { - T OneOverDeterminant = static_cast(1) / ( - + m[0][0] * m[1][1] - - m[1][0] * m[0][1]); - - mat<2, 2, T, Q> Inverse( - + m[1][1] * OneOverDeterminant, - - m[0][1] * OneOverDeterminant, - - m[1][0] * OneOverDeterminant, - + m[0][0] * OneOverDeterminant); - - return Inverse; - } - }; - - template - struct compute_inverse<3, 3, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<3, 3, T, Q> call(mat<3, 3, T, Q> const& m) - { - T OneOverDeterminant = static_cast(1) / ( - + m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) - - m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) - + m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2])); - - mat<3, 3, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]) * OneOverDeterminant; - Inverse[1][0] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]) * OneOverDeterminant; - Inverse[2][0] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]) * OneOverDeterminant; - Inverse[0][1] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]) * OneOverDeterminant; - Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]) * OneOverDeterminant; - Inverse[2][1] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]) * OneOverDeterminant; - Inverse[0][2] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]) * OneOverDeterminant; - Inverse[1][2] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]) * OneOverDeterminant; - Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]) * OneOverDeterminant; - - return Inverse; - } - }; - - template - struct compute_inverse<4, 4, T, Q, Aligned> - { - GLM_FUNC_QUALIFIER static mat<4, 4, T, Q> call(mat<4, 4, T, Q> const& m) - { - T Coef00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T Coef02 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - T Coef03 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - T Coef04 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T Coef06 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - T Coef07 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - T Coef08 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T Coef10 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - T Coef11 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - T Coef12 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T Coef14 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - T Coef15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - T Coef16 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T Coef18 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - T Coef19 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - T Coef20 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - T Coef22 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - T Coef23 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - vec<4, T, Q> Fac0(Coef00, Coef00, Coef02, Coef03); - vec<4, T, Q> Fac1(Coef04, Coef04, Coef06, Coef07); - vec<4, T, Q> Fac2(Coef08, Coef08, Coef10, Coef11); - vec<4, T, Q> Fac3(Coef12, Coef12, Coef14, Coef15); - vec<4, T, Q> Fac4(Coef16, Coef16, Coef18, Coef19); - vec<4, T, Q> Fac5(Coef20, Coef20, Coef22, Coef23); - - vec<4, T, Q> Vec0(m[1][0], m[0][0], m[0][0], m[0][0]); - vec<4, T, Q> Vec1(m[1][1], m[0][1], m[0][1], m[0][1]); - vec<4, T, Q> Vec2(m[1][2], m[0][2], m[0][2], m[0][2]); - vec<4, T, Q> Vec3(m[1][3], m[0][3], m[0][3], m[0][3]); - - vec<4, T, Q> Inv0(Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2); - vec<4, T, Q> Inv1(Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4); - vec<4, T, Q> Inv2(Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5); - vec<4, T, Q> Inv3(Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5); - - vec<4, T, Q> SignA(+1, -1, +1, -1); - vec<4, T, Q> SignB(-1, +1, -1, +1); - mat<4, 4, T, Q> Inverse(Inv0 * SignA, Inv1 * SignB, Inv2 * SignA, Inv3 * SignB); - - vec<4, T, Q> Row0(Inverse[0][0], Inverse[1][0], Inverse[2][0], Inverse[3][0]); - - vec<4, T, Q> Dot0(m[0] * Row0); - T Dot1 = (Dot0.x + Dot0.y) + (Dot0.z + Dot0.w); - - T OneOverDeterminant = static_cast(1) / Dot1; - - return Inverse * OneOverDeterminant; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER mat matrixCompMult(mat const& x, mat const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'matrixCompMult' only accept floating-point inputs"); - return detail::compute_matrixCompMult::value>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'outerProduct' only accept floating-point inputs"); - - typename detail::outerProduct_trait::type m; - for(length_t i = 0; i < m.length(); ++i) - m[i] = c * r[i]; - return m; - } - - template - GLM_FUNC_QUALIFIER typename mat::transpose_type transpose(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'transpose' only accept floating-point inputs"); - return detail::compute_transpose::value>::call(m); - } - - template - GLM_FUNC_QUALIFIER T determinant(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'determinant' only accept floating-point inputs"); - return detail::compute_determinant::value>::call(m); - } - - template - GLM_FUNC_QUALIFIER mat inverse(mat const& m) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || GLM_CONFIG_UNRESTRICTED_GENTYPE, "'inverse' only accept floating-point inputs"); - return detail::compute_inverse::value>::call(m); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_matrix_simd.inl" -#endif - diff --git a/src/qged/display/glm/glm/detail/func_matrix_simd.inl b/src/qged/display/glm/glm/detail/func_matrix_simd.inl deleted file mode 100644 index f67ac66ae22..00000000000 --- a/src/qged/display/glm/glm/detail/func_matrix_simd.inl +++ /dev/null @@ -1,249 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#include "type_mat4x4.hpp" -#include "../geometric.hpp" -#include "../simd/matrix.h" -#include - -namespace glm{ -namespace detail -{ -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template - struct compute_matrixCompMult<4, 4, float, Q, true> - { - GLM_STATIC_ASSERT(detail::is_aligned::value, "Specialization requires aligned"); - - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& x, mat<4, 4, float, Q> const& y) - { - mat<4, 4, float, Q> Result; - glm_mat4_matrixCompMult( - *static_cast(&x[0].data), - *static_cast(&y[0].data), - *static_cast(&Result[0].data)); - return Result; - } - }; -# endif - - template - struct compute_transpose<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - mat<4, 4, float, Q> Result; - glm_mat4_transpose(&m[0].data, &Result[0].data); - return Result; - } - }; - - template - struct compute_determinant<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static float call(mat<4, 4, float, Q> const& m) - { - return _mm_cvtss_f32(glm_mat4_determinant(&m[0].data)); - } - }; - - template - struct compute_inverse<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - mat<4, 4, float, Q> Result; - glm_mat4_inverse(&m[0].data, &Result[0].data); - return Result; - } - }; -}//namespace detail - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_lowp> outerProduct<4, 4, float, aligned_lowp>(vec<4, float, aligned_lowp> const& c, vec<4, float, aligned_lowp> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_lowp> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } - - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_mediump> outerProduct<4, 4, float, aligned_mediump>(vec<4, float, aligned_mediump> const& c, vec<4, float, aligned_mediump> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_mediump> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } - - template<> - GLM_FUNC_QUALIFIER mat<4, 4, float, aligned_highp> outerProduct<4, 4, float, aligned_highp>(vec<4, float, aligned_highp> const& c, vec<4, float, aligned_highp> const& r) - { - __m128 NativeResult[4]; - glm_mat4_outerProduct(c.data, r.data, NativeResult); - mat<4, 4, float, aligned_highp> Result; - std::memcpy(&Result[0], &NativeResult[0], sizeof(Result)); - return Result; - } -# endif -}//namespace glm - -#elif GLM_ARCH & GLM_ARCH_NEON_BIT - -namespace glm { -#if GLM_LANG & GLM_LANG_CXX11_FLAG - template - GLM_FUNC_QUALIFIER - typename std::enable_if::value, mat<4, 4, float, Q>>::type - operator*(mat<4, 4, float, Q> const & m1, mat<4, 4, float, Q> const & m2) - { - auto MulRow = [&](int l) { - float32x4_t const SrcA = m2[l].data; - - float32x4_t r = neon::mul_lane(m1[0].data, SrcA, 0); - r = neon::madd_lane(r, m1[1].data, SrcA, 1); - r = neon::madd_lane(r, m1[2].data, SrcA, 2); - r = neon::madd_lane(r, m1[3].data, SrcA, 3); - - return r; - }; - - mat<4, 4, float, aligned_highp> Result; - Result[0].data = MulRow(0); - Result[1].data = MulRow(1); - Result[2].data = MulRow(2); - Result[3].data = MulRow(3); - - return Result; - } -#endif // CXX11 - - template - struct detail::compute_inverse<4, 4, float, Q, true> - { - GLM_FUNC_QUALIFIER static mat<4, 4, float, Q> call(mat<4, 4, float, Q> const& m) - { - float32x4_t const& m0 = m[0].data; - float32x4_t const& m1 = m[1].data; - float32x4_t const& m2 = m[2].data; - float32x4_t const& m3 = m[3].data; - - // m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - float32x4_t Fac0; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac0 = w0 * w1 - w2 * w3; - } - - // m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - float32x4_t Fac1; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac1 = w0 * w1 - w2 * w3; - } - - // m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - float32x4_t Fac2; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - Fac2 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - float32x4_t Fac3; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 3), 3, m2, 3); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 3), neon::dup_lane(m1, 3)); - Fac3 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - float32x4_t Fac4; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 2), 3, m2, 2); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 2), neon::dup_lane(m1, 2)); - Fac4 = w0 * w1 - w2 * w3; - } - - // m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - float32x4_t Fac5; - { - float32x4_t w0 = vcombine_f32(neon::dup_lane(m2, 0), neon::dup_lane(m1, 0)); - float32x4_t w1 = neon::copy_lane(neon::dupq_lane(m3, 1), 3, m2, 1); - float32x4_t w2 = neon::copy_lane(neon::dupq_lane(m3, 0), 3, m2, 0); - float32x4_t w3 = vcombine_f32(neon::dup_lane(m2, 1), neon::dup_lane(m1, 1)); - Fac5 = w0 * w1 - w2 * w3; - } - - float32x4_t Vec0 = neon::copy_lane(neon::dupq_lane(m0, 0), 0, m1, 0); // (m[1][0], m[0][0], m[0][0], m[0][0]); - float32x4_t Vec1 = neon::copy_lane(neon::dupq_lane(m0, 1), 0, m1, 1); // (m[1][1], m[0][1], m[0][1], m[0][1]); - float32x4_t Vec2 = neon::copy_lane(neon::dupq_lane(m0, 2), 0, m1, 2); // (m[1][2], m[0][2], m[0][2], m[0][2]); - float32x4_t Vec3 = neon::copy_lane(neon::dupq_lane(m0, 3), 0, m1, 3); // (m[1][3], m[0][3], m[0][3], m[0][3]); - - float32x4_t Inv0 = Vec1 * Fac0 - Vec2 * Fac1 + Vec3 * Fac2; - float32x4_t Inv1 = Vec0 * Fac0 - Vec2 * Fac3 + Vec3 * Fac4; - float32x4_t Inv2 = Vec0 * Fac1 - Vec1 * Fac3 + Vec3 * Fac5; - float32x4_t Inv3 = Vec0 * Fac2 - Vec1 * Fac4 + Vec2 * Fac5; - - float32x4_t r0 = float32x4_t{-1, +1, -1, +1} * Inv0; - float32x4_t r1 = float32x4_t{+1, -1, +1, -1} * Inv1; - float32x4_t r2 = float32x4_t{-1, +1, -1, +1} * Inv2; - float32x4_t r3 = float32x4_t{+1, -1, +1, -1} * Inv3; - - float32x4_t det = neon::mul_lane(r0, m0, 0); - det = neon::madd_lane(det, r1, m0, 1); - det = neon::madd_lane(det, r2, m0, 2); - det = neon::madd_lane(det, r3, m0, 3); - - float32x4_t rdet = vdupq_n_f32(1 / vgetq_lane_f32(det, 0)); - - mat<4, 4, float, Q> r; - r[0].data = vmulq_f32(r0, rdet); - r[1].data = vmulq_f32(r1, rdet); - r[2].data = vmulq_f32(r2, rdet); - r[3].data = vmulq_f32(r3, rdet); - return r; - } - }; -}//namespace glm -#endif diff --git a/src/qged/display/glm/glm/detail/func_packing.inl b/src/qged/display/glm/glm/detail/func_packing.inl deleted file mode 100644 index 234b093c081..00000000000 --- a/src/qged/display/glm/glm/detail/func_packing.inl +++ /dev/null @@ -1,189 +0,0 @@ -/// @ref core -/// @file glm/detail/func_packing.inl - -#include "../common.hpp" -#include "type_half.hpp" - -namespace glm -{ - GLM_FUNC_QUALIFIER uint packUnorm2x16(vec2 const& v) - { - union - { - unsigned short in[2]; - uint out; - } u; - - vec<2, unsigned short, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 65535.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x16(uint p) - { - union - { - uint in; - unsigned short out[2]; - } u; - - u.in = p; - - return vec2(u.out[0], u.out[1]) * 1.5259021896696421759365224689097e-5f; - } - - GLM_FUNC_QUALIFIER uint packSnorm2x16(vec2 const& v) - { - union - { - signed short in[2]; - uint out; - } u; - - vec<2, short, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 32767.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackSnorm2x16(uint p) - { - union - { - uint in; - signed short out[2]; - } u; - - u.in = p; - - return clamp(vec2(u.out[0], u.out[1]) * 3.0518509475997192297128208258309e-5f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint packUnorm4x8(vec4 const& v) - { - union - { - unsigned char in[4]; - uint out; - } u; - - vec<4, unsigned char, defaultp> result(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - u.in[2] = result[2]; - u.in[3] = result[3]; - - return u.out; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x8(uint p) - { - union - { - uint in; - unsigned char out[4]; - } u; - - u.in = p; - - return vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0039215686274509803921568627451f; - } - - GLM_FUNC_QUALIFIER uint packSnorm4x8(vec4 const& v) - { - union - { - signed char in[4]; - uint out; - } u; - - vec<4, signed char, defaultp> result(round(clamp(v, -1.0f, 1.0f) * 127.0f)); - - u.in[0] = result[0]; - u.in[1] = result[1]; - u.in[2] = result[2]; - u.in[3] = result[3]; - - return u.out; - } - - GLM_FUNC_QUALIFIER glm::vec4 unpackSnorm4x8(uint p) - { - union - { - uint in; - signed char out[4]; - } u; - - u.in = p; - - return clamp(vec4(u.out[0], u.out[1], u.out[2], u.out[3]) * 0.0078740157480315f, -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER double packDouble2x32(uvec2 const& v) - { - union - { - uint in[2]; - double out; - } u; - - u.in[0] = v[0]; - u.in[1] = v[1]; - - return u.out; - } - - GLM_FUNC_QUALIFIER uvec2 unpackDouble2x32(double v) - { - union - { - double in; - uint out[2]; - } u; - - u.in = v; - - return uvec2(u.out[0], u.out[1]); - } - - GLM_FUNC_QUALIFIER uint packHalf2x16(vec2 const& v) - { - union - { - signed short in[2]; - uint out; - } u; - - u.in[0] = detail::toFloat16(v.x); - u.in[1] = detail::toFloat16(v.y); - - return u.out; - } - - GLM_FUNC_QUALIFIER vec2 unpackHalf2x16(uint v) - { - union - { - uint in; - signed short out[2]; - } u; - - u.in = v; - - return vec2( - detail::toFloat32(u.out[0]), - detail::toFloat32(u.out[1])); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_packing_simd.inl" -#endif - diff --git a/src/qged/display/glm/glm/detail/func_packing_simd.inl b/src/qged/display/glm/glm/detail/func_packing_simd.inl deleted file mode 100644 index fd0fe8b7d9b..00000000000 --- a/src/qged/display/glm/glm/detail/func_packing_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -namespace glm{ -namespace detail -{ - -}//namespace detail -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/func_trigonometric.inl b/src/qged/display/glm/glm/detail/func_trigonometric.inl deleted file mode 100644 index e129dceac5c..00000000000 --- a/src/qged/display/glm/glm/detail/func_trigonometric.inl +++ /dev/null @@ -1,197 +0,0 @@ -#include "_vectorize.hpp" -#include -#include - -namespace glm -{ - // radians - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType radians(genType degrees) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'radians' only accept floating-point input"); - - return degrees * static_cast(0.01745329251994329576923690768489); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec radians(vec const& v) - { - return detail::functor1::call(radians, v); - } - - // degrees - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType degrees(genType radians) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'degrees' only accept floating-point input"); - - return radians * static_cast(57.295779513082320876798154814105); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec degrees(vec const& v) - { - return detail::functor1::call(degrees, v); - } - - // sin - using ::std::sin; - - template - GLM_FUNC_QUALIFIER vec sin(vec const& v) - { - return detail::functor1::call(sin, v); - } - - // cos - using std::cos; - - template - GLM_FUNC_QUALIFIER vec cos(vec const& v) - { - return detail::functor1::call(cos, v); - } - - // tan - using std::tan; - - template - GLM_FUNC_QUALIFIER vec tan(vec const& v) - { - return detail::functor1::call(tan, v); - } - - // asin - using std::asin; - - template - GLM_FUNC_QUALIFIER vec asin(vec const& v) - { - return detail::functor1::call(asin, v); - } - - // acos - using std::acos; - - template - GLM_FUNC_QUALIFIER vec acos(vec const& v) - { - return detail::functor1::call(acos, v); - } - - // atan - template - GLM_FUNC_QUALIFIER genType atan(genType y, genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atan' only accept floating-point input"); - - return ::std::atan2(y, x); - } - - template - GLM_FUNC_QUALIFIER vec atan(vec const& a, vec const& b) - { - return detail::functor2::call(::std::atan2, a, b); - } - - using std::atan; - - template - GLM_FUNC_QUALIFIER vec atan(vec const& v) - { - return detail::functor1::call(atan, v); - } - - // sinh - using std::sinh; - - template - GLM_FUNC_QUALIFIER vec sinh(vec const& v) - { - return detail::functor1::call(sinh, v); - } - - // cosh - using std::cosh; - - template - GLM_FUNC_QUALIFIER vec cosh(vec const& v) - { - return detail::functor1::call(cosh, v); - } - - // tanh - using std::tanh; - - template - GLM_FUNC_QUALIFIER vec tanh(vec const& v) - { - return detail::functor1::call(tanh, v); - } - - // asinh -# if GLM_HAS_CXX11_STL - using std::asinh; -# else - template - GLM_FUNC_QUALIFIER genType asinh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asinh' only accept floating-point input"); - - return (x < static_cast(0) ? static_cast(-1) : (x > static_cast(0) ? static_cast(1) : static_cast(0))) * log(std::abs(x) + sqrt(static_cast(1) + x * x)); - } -# endif - - template - GLM_FUNC_QUALIFIER vec asinh(vec const& v) - { - return detail::functor1::call(asinh, v); - } - - // acosh -# if GLM_HAS_CXX11_STL - using std::acosh; -# else - template - GLM_FUNC_QUALIFIER genType acosh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acosh' only accept floating-point input"); - - if(x < static_cast(1)) - return static_cast(0); - return log(x + sqrt(x * x - static_cast(1))); - } -# endif - - template - GLM_FUNC_QUALIFIER vec acosh(vec const& v) - { - return detail::functor1::call(acosh, v); - } - - // atanh -# if GLM_HAS_CXX11_STL - using std::atanh; -# else - template - GLM_FUNC_QUALIFIER genType atanh(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'atanh' only accept floating-point input"); - - if(std::abs(x) >= static_cast(1)) - return 0; - return static_cast(0.5) * log((static_cast(1) + x) / (static_cast(1) - x)); - } -# endif - - template - GLM_FUNC_QUALIFIER vec atanh(vec const& v) - { - return detail::functor1::call(atanh, v); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_trigonometric_simd.inl" -#endif - diff --git a/src/qged/display/glm/glm/detail/func_trigonometric_simd.inl b/src/qged/display/glm/glm/detail/func_trigonometric_simd.inl deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/qged/display/glm/glm/detail/func_vector_relational.inl b/src/qged/display/glm/glm/detail/func_vector_relational.inl deleted file mode 100644 index 80c9e87fcb9..00000000000 --- a/src/qged/display/glm/glm/detail/func_vector_relational.inl +++ /dev/null @@ -1,87 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] < y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] <= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] > y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] >= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] == y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = x[i] != y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool any(vec const& v) - { - bool Result = false; - for(length_t i = 0; i < L; ++i) - Result = Result || v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool all(vec const& v) - { - bool Result = true; - for(length_t i = 0; i < L; ++i) - Result = Result && v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec not_(vec const& v) - { - vec Result(true); - for(length_t i = 0; i < L; ++i) - Result[i] = !v[i]; - return Result; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "func_vector_relational_simd.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/func_vector_relational_simd.inl b/src/qged/display/glm/glm/detail/func_vector_relational_simd.inl deleted file mode 100644 index fd0fe8b7d9b..00000000000 --- a/src/qged/display/glm/glm/detail/func_vector_relational_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -namespace glm{ -namespace detail -{ - -}//namespace detail -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/glm.cpp b/src/qged/display/glm/glm/detail/glm.cpp deleted file mode 100644 index 078988febc3..00000000000 --- a/src/qged/display/glm/glm/detail/glm.cpp +++ /dev/null @@ -1,294 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/glm.cpp - -#ifndef GLM_ENABLE_EXPERIMENTAL -#define GLM_ENABLE_EXPERIMENTAL -#endif -#include -#include -#include -#include -#include -#include - -namespace glm -{ -// tvec1 type explicit instantiation -template struct vec<1, uint8, lowp>; -template struct vec<1, uint16, lowp>; -template struct vec<1, uint32, lowp>; -template struct vec<1, uint64, lowp>; -template struct vec<1, int8, lowp>; -template struct vec<1, int16, lowp>; -template struct vec<1, int32, lowp>; -template struct vec<1, int64, lowp>; -template struct vec<1, float32, lowp>; -template struct vec<1, float64, lowp>; - -template struct vec<1, uint8, mediump>; -template struct vec<1, uint16, mediump>; -template struct vec<1, uint32, mediump>; -template struct vec<1, uint64, mediump>; -template struct vec<1, int8, mediump>; -template struct vec<1, int16, mediump>; -template struct vec<1, int32, mediump>; -template struct vec<1, int64, mediump>; -template struct vec<1, float32, mediump>; -template struct vec<1, float64, mediump>; - -template struct vec<1, uint8, highp>; -template struct vec<1, uint16, highp>; -template struct vec<1, uint32, highp>; -template struct vec<1, uint64, highp>; -template struct vec<1, int8, highp>; -template struct vec<1, int16, highp>; -template struct vec<1, int32, highp>; -template struct vec<1, int64, highp>; -template struct vec<1, float32, highp>; -template struct vec<1, float64, highp>; - -// tvec2 type explicit instantiation -template struct vec<2, uint8, lowp>; -template struct vec<2, uint16, lowp>; -template struct vec<2, uint32, lowp>; -template struct vec<2, uint64, lowp>; -template struct vec<2, int8, lowp>; -template struct vec<2, int16, lowp>; -template struct vec<2, int32, lowp>; -template struct vec<2, int64, lowp>; -template struct vec<2, float32, lowp>; -template struct vec<2, float64, lowp>; - -template struct vec<2, uint8, mediump>; -template struct vec<2, uint16, mediump>; -template struct vec<2, uint32, mediump>; -template struct vec<2, uint64, mediump>; -template struct vec<2, int8, mediump>; -template struct vec<2, int16, mediump>; -template struct vec<2, int32, mediump>; -template struct vec<2, int64, mediump>; -template struct vec<2, float32, mediump>; -template struct vec<2, float64, mediump>; - -template struct vec<2, uint8, highp>; -template struct vec<2, uint16, highp>; -template struct vec<2, uint32, highp>; -template struct vec<2, uint64, highp>; -template struct vec<2, int8, highp>; -template struct vec<2, int16, highp>; -template struct vec<2, int32, highp>; -template struct vec<2, int64, highp>; -template struct vec<2, float32, highp>; -template struct vec<2, float64, highp>; - -// tvec3 type explicit instantiation -template struct vec<3, uint8, lowp>; -template struct vec<3, uint16, lowp>; -template struct vec<3, uint32, lowp>; -template struct vec<3, uint64, lowp>; -template struct vec<3, int8, lowp>; -template struct vec<3, int16, lowp>; -template struct vec<3, int32, lowp>; -template struct vec<3, int64, lowp>; -template struct vec<3, float32, lowp>; -template struct vec<3, float64, lowp>; - -template struct vec<3, uint8, mediump>; -template struct vec<3, uint16, mediump>; -template struct vec<3, uint32, mediump>; -template struct vec<3, uint64, mediump>; -template struct vec<3, int8, mediump>; -template struct vec<3, int16, mediump>; -template struct vec<3, int32, mediump>; -template struct vec<3, int64, mediump>; -template struct vec<3, float32, mediump>; -template struct vec<3, float64, mediump>; - -template struct vec<3, uint8, highp>; -template struct vec<3, uint16, highp>; -template struct vec<3, uint32, highp>; -template struct vec<3, uint64, highp>; -template struct vec<3, int8, highp>; -template struct vec<3, int16, highp>; -template struct vec<3, int32, highp>; -template struct vec<3, int64, highp>; -template struct vec<3, float32, highp>; -template struct vec<3, float64, highp>; - -// tvec4 type explicit instantiation -template struct vec<4, uint8, lowp>; -template struct vec<4, uint16, lowp>; -template struct vec<4, uint32, lowp>; -template struct vec<4, uint64, lowp>; -template struct vec<4, int8, lowp>; -template struct vec<4, int16, lowp>; -template struct vec<4, int32, lowp>; -template struct vec<4, int64, lowp>; -template struct vec<4, float32, lowp>; -template struct vec<4, float64, lowp>; - -template struct vec<4, uint8, mediump>; -template struct vec<4, uint16, mediump>; -template struct vec<4, uint32, mediump>; -template struct vec<4, uint64, mediump>; -template struct vec<4, int8, mediump>; -template struct vec<4, int16, mediump>; -template struct vec<4, int32, mediump>; -template struct vec<4, int64, mediump>; -template struct vec<4, float32, mediump>; -template struct vec<4, float64, mediump>; - -template struct vec<4, uint8, highp>; -template struct vec<4, uint16, highp>; -template struct vec<4, uint32, highp>; -template struct vec<4, uint64, highp>; -template struct vec<4, int8, highp>; -template struct vec<4, int16, highp>; -template struct vec<4, int32, highp>; -template struct vec<4, int64, highp>; -template struct vec<4, float32, highp>; -template struct vec<4, float64, highp>; - -// tmat2x2 type explicit instantiation -template struct mat<2, 2, float32, lowp>; -template struct mat<2, 2, float64, lowp>; - -template struct mat<2, 2, float32, mediump>; -template struct mat<2, 2, float64, mediump>; - -template struct mat<2, 2, float32, highp>; -template struct mat<2, 2, float64, highp>; - -// tmat2x3 type explicit instantiation -template struct mat<2, 3, float32, lowp>; -template struct mat<2, 3, float64, lowp>; - -template struct mat<2, 3, float32, mediump>; -template struct mat<2, 3, float64, mediump>; - -template struct mat<2, 3, float32, highp>; -template struct mat<2, 3, float64, highp>; - -// tmat2x4 type explicit instantiation -template struct mat<2, 4, float32, lowp>; -template struct mat<2, 4, float64, lowp>; - -template struct mat<2, 4, float32, mediump>; -template struct mat<2, 4, float64, mediump>; - -template struct mat<2, 4, float32, highp>; -template struct mat<2, 4, float64, highp>; - -// tmat3x2 type explicit instantiation -template struct mat<3, 2, float32, lowp>; -template struct mat<3, 2, float64, lowp>; - -template struct mat<3, 2, float32, mediump>; -template struct mat<3, 2, float64, mediump>; - -template struct mat<3, 2, float32, highp>; -template struct mat<3, 2, float64, highp>; - -// tmat3x3 type explicit instantiation -template struct mat<3, 3, float32, lowp>; -template struct mat<3, 3, float64, lowp>; - -template struct mat<3, 3, float32, mediump>; -template struct mat<3, 3, float64, mediump>; - -template struct mat<3, 3, float32, highp>; -template struct mat<3, 3, float64, highp>; - -// tmat3x4 type explicit instantiation -template struct mat<3, 4, float32, lowp>; -template struct mat<3, 4, float64, lowp>; - -template struct mat<3, 4, float32, mediump>; -template struct mat<3, 4, float64, mediump>; - -template struct mat<3, 4, float32, highp>; -template struct mat<3, 4, float64, highp>; - -// tmat4x2 type explicit instantiation -template struct mat<4, 2, float32, lowp>; -template struct mat<4, 2, float64, lowp>; - -template struct mat<4, 2, float32, mediump>; -template struct mat<4, 2, float64, mediump>; - -template struct mat<4, 2, float32, highp>; -template struct mat<4, 2, float64, highp>; - -// tmat4x3 type explicit instantiation -template struct mat<4, 3, float32, lowp>; -template struct mat<4, 3, float64, lowp>; - -template struct mat<4, 3, float32, mediump>; -template struct mat<4, 3, float64, mediump>; - -template struct mat<4, 3, float32, highp>; -template struct mat<4, 3, float64, highp>; - -// tmat4x4 type explicit instantiation -template struct mat<4, 4, float32, lowp>; -template struct mat<4, 4, float64, lowp>; - -template struct mat<4, 4, float32, mediump>; -template struct mat<4, 4, float64, mediump>; - -template struct mat<4, 4, float32, highp>; -template struct mat<4, 4, float64, highp>; - -// tquat type explicit instantiation -template struct qua; -template struct qua; - -template struct qua; -template struct qua; - -template struct qua; -template struct qua; - -//tdualquat type explicit instantiation -template struct tdualquat; -template struct tdualquat; - -template struct tdualquat; -template struct tdualquat; - -template struct tdualquat; -template struct tdualquat; - -}//namespace glm - diff --git a/src/qged/display/glm/glm/detail/qualifier.hpp b/src/qged/display/glm/glm/detail/qualifier.hpp deleted file mode 100644 index 13a36a3c0de..00000000000 --- a/src/qged/display/glm/glm/detail/qualifier.hpp +++ /dev/null @@ -1,261 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -#include "setup.hpp" - -namespace glm -{ - /// Qualify GLM types in term of alignment (packed, aligned) and precision in term of ULPs (lowp, mediump, highp) - enum qualifier - { - packed_highp, ///< Typed data is tightly packed in memory and operations are executed with high precision in term of ULPs - packed_mediump, ///< Typed data is tightly packed in memory and operations are executed with medium precision in term of ULPs for higher performance - packed_lowp, ///< Typed data is tightly packed in memory and operations are executed with low precision in term of ULPs to maximize performance - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - aligned_highp, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs - aligned_mediump, ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs for higher performance - aligned_lowp, // ///< Typed data is aligned in memory allowing SIMD optimizations and operations are executed with high precision in term of ULPs to maximize performance - aligned = aligned_highp, ///< By default aligned qualifier is also high precision -# endif - - highp = packed_highp, ///< By default highp qualifier is also packed - mediump = packed_mediump, ///< By default mediump qualifier is also packed - lowp = packed_lowp, ///< By default lowp qualifier is also packed - packed = packed_highp, ///< By default packed qualifier is also high precision - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE && defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) - defaultp = aligned_highp -# else - defaultp = highp -# endif - }; - - typedef qualifier precision; - - template struct vec; - template struct mat; - template struct qua; - -# if GLM_HAS_TEMPLATE_ALIASES - template using tvec1 = vec<1, T, Q>; - template using tvec2 = vec<2, T, Q>; - template using tvec3 = vec<3, T, Q>; - template using tvec4 = vec<4, T, Q>; - template using tmat2x2 = mat<2, 2, T, Q>; - template using tmat2x3 = mat<2, 3, T, Q>; - template using tmat2x4 = mat<2, 4, T, Q>; - template using tmat3x2 = mat<3, 2, T, Q>; - template using tmat3x3 = mat<3, 3, T, Q>; - template using tmat3x4 = mat<3, 4, T, Q>; - template using tmat4x2 = mat<4, 2, T, Q>; - template using tmat4x3 = mat<4, 3, T, Q>; - template using tmat4x4 = mat<4, 4, T, Q>; - template using tquat = qua; -# endif - -namespace detail -{ - template - struct is_aligned - { - static const bool value = false; - }; - -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE - template<> - struct is_aligned - { - static const bool value = true; - }; - - template<> - struct is_aligned - { - static const bool value = true; - }; - - template<> - struct is_aligned - { - static const bool value = true; - }; -# endif - - template - struct storage - { - typedef struct type { - T data[L]; - } type; - }; - -# if GLM_HAS_ALIGNOF - template - struct storage - { - typedef struct alignas(L * sizeof(T)) type { - T data[L]; - } type; - }; - - template - struct storage<3, T, true> - { - typedef struct alignas(4 * sizeof(T)) type { - T data[4]; - } type; - }; -# endif - -# if GLM_ARCH & GLM_ARCH_SSE2_BIT - template<> - struct storage<4, float, true> - { - typedef glm_f32vec4 type; - }; - - template<> - struct storage<4, int, true> - { - typedef glm_i32vec4 type; - }; - - template<> - struct storage<4, unsigned int, true> - { - typedef glm_u32vec4 type; - }; - - template<> - struct storage<2, double, true> - { - typedef glm_f64vec2 type; - }; - - template<> - struct storage<2, detail::int64, true> - { - typedef glm_i64vec2 type; - }; - - template<> - struct storage<2, detail::uint64, true> - { - typedef glm_u64vec2 type; - }; -# endif - -# if (GLM_ARCH & GLM_ARCH_AVX_BIT) - template<> - struct storage<4, double, true> - { - typedef glm_f64vec4 type; - }; -# endif - -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) - template<> - struct storage<4, detail::int64, true> - { - typedef glm_i64vec4 type; - }; - - template<> - struct storage<4, detail::uint64, true> - { - typedef glm_u64vec4 type; - }; -# endif - -# if GLM_ARCH & GLM_ARCH_NEON_BIT - template<> - struct storage<4, float, true> - { - typedef glm_f32vec4 type; - }; - - template<> - struct storage<4, int, true> - { - typedef glm_i32vec4 type; - }; - - template<> - struct storage<4, unsigned int, true> - { - typedef glm_u32vec4 type; - }; -# endif - - enum genTypeEnum - { - GENTYPE_VEC, - GENTYPE_MAT, - GENTYPE_QUAT - }; - - template - struct genTypeTrait - {}; - - template - struct genTypeTrait > - { - static const genTypeEnum GENTYPE = GENTYPE_MAT; - }; - - template - struct init_gentype - { - }; - - template - struct init_gentype - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() - { - return genType(1, 0, 0, 0); - } - }; - - template - struct init_gentype - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static genType identity() - { - return genType(1); - } - }; -}//namespace detail -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/setup.hpp b/src/qged/display/glm/glm/detail/setup.hpp deleted file mode 100644 index e715428e488..00000000000 --- a/src/qged/display/glm/glm/detail/setup.hpp +++ /dev/null @@ -1,1166 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#ifndef GLM_SETUP_INCLUDED - -#include -#include - -#define GLM_VERSION_MAJOR 0 -#define GLM_VERSION_MINOR 9 -#define GLM_VERSION_PATCH 9 -#define GLM_VERSION_REVISION 8 -#define GLM_VERSION 998 -#define GLM_VERSION_MESSAGE "GLM: version 0.9.9.8" - -#define GLM_SETUP_INCLUDED GLM_VERSION - -/////////////////////////////////////////////////////////////////////////////////// -// Active states - -#define GLM_DISABLE 0 -#define GLM_ENABLE 1 - -/////////////////////////////////////////////////////////////////////////////////// -// Messages - -#if defined(GLM_FORCE_MESSAGES) -# define GLM_MESSAGES GLM_ENABLE -#else -# define GLM_MESSAGES GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Detect the platform - -#include "../simd/platform.h" - -/////////////////////////////////////////////////////////////////////////////////// -// Build model - -#if defined(_M_ARM64) || defined(__LP64__) || defined(_M_X64) || defined(__ppc64__) || defined(__x86_64__) -# define GLM_MODEL GLM_MODEL_64 -#elif defined(__i386__) || defined(__ppc__) || defined(__ILP32__) || defined(_M_ARM) -# define GLM_MODEL GLM_MODEL_32 -#else -# define GLM_MODEL GLM_MODEL_32 -#endif// - -#if !defined(GLM_MODEL) && GLM_COMPILER != 0 -# error "GLM_MODEL undefined, your compiler may not be supported by GLM. Add #define GLM_MODEL 0 to ignore this message." -#endif//GLM_MODEL - -/////////////////////////////////////////////////////////////////////////////////// -// C++ Version - -// User defines: GLM_FORCE_CXX98, GLM_FORCE_CXX03, GLM_FORCE_CXX11, GLM_FORCE_CXX14, GLM_FORCE_CXX17, GLM_FORCE_CXX2A - -#define GLM_LANG_CXX98_FLAG (1 << 1) -#define GLM_LANG_CXX03_FLAG (1 << 2) -#define GLM_LANG_CXX0X_FLAG (1 << 3) -#define GLM_LANG_CXX11_FLAG (1 << 4) -#define GLM_LANG_CXX14_FLAG (1 << 5) -#define GLM_LANG_CXX17_FLAG (1 << 6) -#define GLM_LANG_CXX2A_FLAG (1 << 7) -#define GLM_LANG_CXXMS_FLAG (1 << 8) -#define GLM_LANG_CXXGNU_FLAG (1 << 9) - -#define GLM_LANG_CXX98 GLM_LANG_CXX98_FLAG -#define GLM_LANG_CXX03 (GLM_LANG_CXX98 | GLM_LANG_CXX03_FLAG) -#define GLM_LANG_CXX0X (GLM_LANG_CXX03 | GLM_LANG_CXX0X_FLAG) -#define GLM_LANG_CXX11 (GLM_LANG_CXX0X | GLM_LANG_CXX11_FLAG) -#define GLM_LANG_CXX14 (GLM_LANG_CXX11 | GLM_LANG_CXX14_FLAG) -#define GLM_LANG_CXX17 (GLM_LANG_CXX14 | GLM_LANG_CXX17_FLAG) -#define GLM_LANG_CXX2A (GLM_LANG_CXX17 | GLM_LANG_CXX2A_FLAG) -#define GLM_LANG_CXXMS GLM_LANG_CXXMS_FLAG -#define GLM_LANG_CXXGNU GLM_LANG_CXXGNU_FLAG - -#if (defined(_MSC_EXTENSIONS)) -# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG -#elif ((GLM_COMPILER & (GLM_COMPILER_CLANG | GLM_COMPILER_GCC)) && (GLM_ARCH & GLM_ARCH_SIMD_BIT)) -# define GLM_LANG_EXT GLM_LANG_CXXMS_FLAG -#else -# define GLM_LANG_EXT 0 -#endif - -#if (defined(GLM_FORCE_CXX_UNKNOWN)) -# define GLM_LANG 0 -#elif defined(GLM_FORCE_CXX2A) -# define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX17) -# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX14) -# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX11) -# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) -# define GLM_LANG_STL11_FORCED -#elif defined(GLM_FORCE_CXX03) -# define GLM_LANG (GLM_LANG_CXX03 | GLM_LANG_EXT) -#elif defined(GLM_FORCE_CXX98) -# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) -#else -# if GLM_COMPILER & GLM_COMPILER_VC && defined(_MSVC_LANG) -# if GLM_COMPILER >= GLM_COMPILER_VC15_7 -# define GLM_LANG_PLATFORM _MSVC_LANG -# elif GLM_COMPILER >= GLM_COMPILER_VC15 -# if _MSVC_LANG > 201402L -# define GLM_LANG_PLATFORM 201402L -# else -# define GLM_LANG_PLATFORM _MSVC_LANG -# endif -# else -# define GLM_LANG_PLATFORM 0 -# endif -# else -# define GLM_LANG_PLATFORM 0 -# endif - -# if __cplusplus > 201703L || GLM_LANG_PLATFORM > 201703L -# define GLM_LANG (GLM_LANG_CXX2A | GLM_LANG_EXT) -# elif __cplusplus == 201703L || GLM_LANG_PLATFORM == 201703L -# define GLM_LANG (GLM_LANG_CXX17 | GLM_LANG_EXT) -# elif __cplusplus == 201402L || __cplusplus == 201500L || GLM_LANG_PLATFORM == 201402L -# define GLM_LANG (GLM_LANG_CXX14 | GLM_LANG_EXT) -# elif __cplusplus == 201103L || GLM_LANG_PLATFORM == 201103L -# define GLM_LANG (GLM_LANG_CXX11 | GLM_LANG_EXT) -# elif defined(__INTEL_CXX11_MODE__) || defined(_MSC_VER) || defined(__GXX_EXPERIMENTAL_CXX0X__) -# define GLM_LANG (GLM_LANG_CXX0X | GLM_LANG_EXT) -# elif __cplusplus == 199711L -# define GLM_LANG (GLM_LANG_CXX98 | GLM_LANG_EXT) -# else -# define GLM_LANG (0 | GLM_LANG_EXT) -# endif -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Has of C++ features - -// http://clang.llvm.org/cxx_status.html -// http://gcc.gnu.org/projects/cxx0x.html -// http://msdn.microsoft.com/en-us/library/vstudio/hh567368(v=vs.120).aspx - -// Android has multiple STLs but C++11 STL detection doesn't always work #284 #564 -#if GLM_PLATFORM == GLM_PLATFORM_ANDROID && !defined(GLM_LANG_STL11_FORCED) -# define GLM_HAS_CXX11_STL 0 -#elif GLM_COMPILER & GLM_COMPILER_CLANG -# if (defined(_LIBCPP_VERSION) || (GLM_LANG & GLM_LANG_CXX11_FLAG) || defined(GLM_LANG_STL11_FORCED)) -# define GLM_HAS_CXX11_STL 1 -# else -# define GLM_HAS_CXX11_STL 0 -# endif -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_CXX11_STL 1 -#else -# define GLM_HAS_CXX11_STL ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC48)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_PLATFORM != GLM_PLATFORM_WINDOWS) && (GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)))) -#endif - -// N1720 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_STATIC_ASSERT __has_feature(cxx_static_assert) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_STATIC_ASSERT 1 -#else -# define GLM_HAS_STATIC_ASSERT ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC)))) -#endif - -// N1988 -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_EXTENDED_INTEGER_TYPE 1 -#else -# define GLM_HAS_EXTENDED_INTEGER_TYPE (\ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CUDA)) || \ - ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_COMPILER & GLM_COMPILER_CLANG))) -#endif - -// N2672 Initializer lists http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2672.htm -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_INITIALIZER_LISTS __has_feature(cxx_generalized_initializers) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_INITIALIZER_LISTS 1 -#else -# define GLM_HAS_INITIALIZER_LISTS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2544 Unrestricted unions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2544.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_UNRESTRICTED_UNIONS __has_feature(cxx_unrestricted_unions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_UNRESTRICTED_UNIONS 1 -#else -# define GLM_HAS_UNRESTRICTED_UNIONS (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - (GLM_COMPILER & GLM_COMPILER_VC) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA))) -#endif - -// N2346 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_DEFAULTED_FUNCTIONS __has_feature(cxx_defaulted_functions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_DEFAULTED_FUNCTIONS 1 -#else -# define GLM_HAS_DEFAULTED_FUNCTIONS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - (GLM_COMPILER & GLM_COMPILER_CUDA))) -#endif - -// N2118 -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_RVALUE_REFERENCES __has_feature(cxx_rvalue_references) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_RVALUE_REFERENCES 1 -#else -# define GLM_HAS_RVALUE_REFERENCES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2437 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2437.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS __has_feature(cxx_explicit_conversions) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS 1 -#else -# define GLM_HAS_EXPLICIT_CONVERSION_OPERATORS ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL14)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2258 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2258.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_TEMPLATE_ALIASES __has_feature(cxx_alias_templates) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_TEMPLATE_ALIASES 1 -#else -# define GLM_HAS_TEMPLATE_ALIASES ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2930 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2009/n2930.html -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_RANGE_FOR __has_feature(cxx_range_for) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_RANGE_FOR 1 -#else -# define GLM_HAS_RANGE_FOR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2341 http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2341.pdf -#if GLM_COMPILER & GLM_COMPILER_CLANG -# define GLM_HAS_ALIGNOF __has_feature(cxx_alignas) -#elif GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_ALIGNOF 1 -#else -# define GLM_HAS_ALIGNOF ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL15)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// N2235 Generalized Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2235.pdf -// N3652 Extended Constant Expressions http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3652.html -#if (GLM_ARCH & GLM_ARCH_SIMD_BIT) // Compiler SIMD intrinsics don't support constexpr... -# define GLM_HAS_CONSTEXPR 0 -#elif (GLM_COMPILER & GLM_COMPILER_CLANG) -# define GLM_HAS_CONSTEXPR __has_feature(cxx_relaxed_constexpr) -#elif (GLM_LANG & GLM_LANG_CXX14_FLAG) -# define GLM_HAS_CONSTEXPR 1 -#else -# define GLM_HAS_CONSTEXPR ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && GLM_HAS_INITIALIZER_LISTS && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_COMPILER >= GLM_COMPILER_INTEL17)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)))) -#endif - -#if GLM_HAS_CONSTEXPR -# define GLM_CONSTEXPR constexpr -#else -# define GLM_CONSTEXPR -#endif - -// -#if GLM_HAS_CONSTEXPR -# if (GLM_COMPILER & GLM_COMPILER_CLANG) -# if __has_feature(cxx_if_constexpr) -# define GLM_HAS_IF_CONSTEXPR 1 -# else -# define GLM_HAS_IF_CONSTEXPR 0 -# endif -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) -# define GLM_HAS_IF_CONSTEXPR 1 -# else -# define GLM_HAS_IF_CONSTEXPR 0 -# endif -#else -# define GLM_HAS_IF_CONSTEXPR 0 -#endif - -#if GLM_HAS_IF_CONSTEXPR -# define GLM_IF_CONSTEXPR if constexpr -#else -# define GLM_IF_CONSTEXPR if -#endif - -// -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_ASSIGNABLE 1 -#else -# define GLM_HAS_ASSIGNABLE ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC15)) || \ - ((GLM_COMPILER & GLM_COMPILER_GCC) && (GLM_COMPILER >= GLM_COMPILER_GCC49)))) -#endif - -// -#define GLM_HAS_TRIVIAL_QUERIES 0 - -// -#if GLM_LANG & GLM_LANG_CXX11_FLAG -# define GLM_HAS_MAKE_SIGNED 1 -#else -# define GLM_HAS_MAKE_SIGNED ((GLM_LANG & GLM_LANG_CXX0X_FLAG) && (\ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC12)) || \ - ((GLM_COMPILER & GLM_COMPILER_CUDA)))) -#endif - -// -#if defined(GLM_FORCE_INTRINSICS) -# define GLM_HAS_BITSCAN_WINDOWS ((GLM_PLATFORM & GLM_PLATFORM_WINDOWS) && (\ - ((GLM_COMPILER & GLM_COMPILER_INTEL)) || \ - ((GLM_COMPILER & GLM_COMPILER_VC) && (GLM_COMPILER >= GLM_COMPILER_VC14) && (GLM_ARCH & GLM_ARCH_X86_BIT)))) -#else -# define GLM_HAS_BITSCAN_WINDOWS 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// OpenMP -#ifdef _OPENMP -# if GLM_COMPILER & GLM_COMPILER_GCC -# if GLM_COMPILER >= GLM_COMPILER_GCC61 -# define GLM_HAS_OPENMP 45 -# elif GLM_COMPILER >= GLM_COMPILER_GCC49 -# define GLM_HAS_OPENMP 40 -# elif GLM_COMPILER >= GLM_COMPILER_GCC47 -# define GLM_HAS_OPENMP 31 -# else -# define GLM_HAS_OPENMP 0 -# endif -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# if GLM_COMPILER >= GLM_COMPILER_CLANG38 -# define GLM_HAS_OPENMP 31 -# else -# define GLM_HAS_OPENMP 0 -# endif -# elif GLM_COMPILER & GLM_COMPILER_VC -# define GLM_HAS_OPENMP 20 -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# if GLM_COMPILER >= GLM_COMPILER_INTEL16 -# define GLM_HAS_OPENMP 40 -# else -# define GLM_HAS_OPENMP 0 -# endif -# else -# define GLM_HAS_OPENMP 0 -# endif -#else -# define GLM_HAS_OPENMP 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// nullptr - -#if GLM_LANG & GLM_LANG_CXX0X_FLAG -# define GLM_CONFIG_NULLPTR GLM_ENABLE -#else -# define GLM_CONFIG_NULLPTR GLM_DISABLE -#endif - -#if GLM_CONFIG_NULLPTR == GLM_ENABLE -# define GLM_NULLPTR nullptr -#else -# define GLM_NULLPTR 0 -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Static assert - -#if GLM_HAS_STATIC_ASSERT -# define GLM_STATIC_ASSERT(x, message) static_assert(x, message) -#elif GLM_COMPILER & GLM_COMPILER_VC -# define GLM_STATIC_ASSERT(x, message) typedef char __CASSERT__##__LINE__[(x) ? 1 : -1] -#else -# define GLM_STATIC_ASSERT(x, message) assert(x) -#endif//GLM_LANG - -/////////////////////////////////////////////////////////////////////////////////// -// Qualifiers - -#if GLM_COMPILER & GLM_COMPILER_CUDA -# define GLM_CUDA_FUNC_DEF __device__ __host__ -# define GLM_CUDA_FUNC_DECL __device__ __host__ -#else -# define GLM_CUDA_FUNC_DEF -# define GLM_CUDA_FUNC_DECL -#endif - -#if defined(GLM_FORCE_INLINE) -# if GLM_COMPILER & GLM_COMPILER_VC -# define GLM_INLINE __forceinline -# define GLM_NEVER_INLINE __declspec((noinline)) -# elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG) -# define GLM_INLINE inline __attribute__((__always_inline__)) -# define GLM_NEVER_INLINE __attribute__((__noinline__)) -# elif GLM_COMPILER & GLM_COMPILER_CUDA -# define GLM_INLINE __forceinline__ -# define GLM_NEVER_INLINE __noinline__ -# else -# define GLM_INLINE inline -# define GLM_NEVER_INLINE -# endif//GLM_COMPILER -#else -# define GLM_INLINE inline -# define GLM_NEVER_INLINE -#endif//defined(GLM_FORCE_INLINE) - -#define GLM_FUNC_DECL GLM_CUDA_FUNC_DECL -#define GLM_FUNC_QUALIFIER GLM_CUDA_FUNC_DEF GLM_INLINE - -/////////////////////////////////////////////////////////////////////////////////// -// Swizzle operators - -// User defines: GLM_FORCE_SWIZZLE - -#define GLM_SWIZZLE_DISABLED 0 -#define GLM_SWIZZLE_OPERATOR 1 -#define GLM_SWIZZLE_FUNCTION 2 - -#if defined(GLM_FORCE_XYZW_ONLY) -# undef GLM_FORCE_SWIZZLE -#endif - -#if defined(GLM_SWIZZLE) -# pragma message("GLM: GLM_SWIZZLE is deprecated, use GLM_FORCE_SWIZZLE instead.") -# define GLM_FORCE_SWIZZLE -#endif - -#if defined(GLM_FORCE_SWIZZLE) && (GLM_LANG & GLM_LANG_CXXMS_FLAG) -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_OPERATOR -#elif defined(GLM_FORCE_SWIZZLE) -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_FUNCTION -#else -# define GLM_CONFIG_SWIZZLE GLM_SWIZZLE_DISABLED -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Allows using not basic types as genType - -// #define GLM_FORCE_UNRESTRICTED_GENTYPE - -#ifdef GLM_FORCE_UNRESTRICTED_GENTYPE -# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_ENABLE -#else -# define GLM_CONFIG_UNRESTRICTED_GENTYPE GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Clip control, define GLM_FORCE_DEPTH_ZERO_TO_ONE before including GLM -// to use a clip space between 0 to 1. -// Coordinate system, define GLM_FORCE_LEFT_HANDED before including GLM -// to use left handed coordinate system by default. - -#define GLM_CLIP_CONTROL_ZO_BIT (1 << 0) // ZERO_TO_ONE -#define GLM_CLIP_CONTROL_NO_BIT (1 << 1) // NEGATIVE_ONE_TO_ONE -#define GLM_CLIP_CONTROL_LH_BIT (1 << 2) // LEFT_HANDED, For DirectX, Metal, Vulkan -#define GLM_CLIP_CONTROL_RH_BIT (1 << 3) // RIGHT_HANDED, For OpenGL, default in GLM - -#define GLM_CLIP_CONTROL_LH_ZO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_ZO_BIT) -#define GLM_CLIP_CONTROL_LH_NO (GLM_CLIP_CONTROL_LH_BIT | GLM_CLIP_CONTROL_NO_BIT) -#define GLM_CLIP_CONTROL_RH_ZO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_ZO_BIT) -#define GLM_CLIP_CONTROL_RH_NO (GLM_CLIP_CONTROL_RH_BIT | GLM_CLIP_CONTROL_NO_BIT) - -#ifdef GLM_FORCE_DEPTH_ZERO_TO_ONE -# ifdef GLM_FORCE_LEFT_HANDED -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_ZO -# else -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_ZO -# endif -#else -# ifdef GLM_FORCE_LEFT_HANDED -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_LH_NO -# else -# define GLM_CONFIG_CLIP_CONTROL GLM_CLIP_CONTROL_RH_NO -# endif -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Qualifiers - -#if (GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS)) -# define GLM_DEPRECATED __declspec(deprecated) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef __declspec(align(alignment)) type name -#elif GLM_COMPILER & (GLM_COMPILER_GCC | GLM_COMPILER_CLANG | GLM_COMPILER_INTEL) -# define GLM_DEPRECATED __attribute__((__deprecated__)) -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __attribute__((aligned(alignment))) -#elif GLM_COMPILER & GLM_COMPILER_CUDA -# define GLM_DEPRECATED -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name __align__(x) -#else -# define GLM_DEPRECATED -# define GLM_ALIGNED_TYPEDEF(type, name, alignment) typedef type name -#endif - -/////////////////////////////////////////////////////////////////////////////////// - -#ifdef GLM_FORCE_EXPLICIT_CTOR -# define GLM_EXPLICIT explicit -#else -# define GLM_EXPLICIT -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// SYCL - -#if GLM_COMPILER==GLM_COMPILER_SYCL - -#include -#include - -namespace glm { -namespace std { - // Import SYCL's functions into the namespace glm::std to force their usages. - // It's important to use the math built-in function (sin, exp, ...) - // of SYCL instead the std ones. - using namespace cl::sycl; - - /////////////////////////////////////////////////////////////////////////////// - // Import some "harmless" std's stuffs used by glm into - // the new glm::std namespace. - template - using numeric_limits = ::std::numeric_limits; - - using ::std::size_t; - - using ::std::uint8_t; - using ::std::uint16_t; - using ::std::uint32_t; - using ::std::uint64_t; - - using ::std::int8_t; - using ::std::int16_t; - using ::std::int32_t; - using ::std::int64_t; - - using ::std::make_unsigned; - /////////////////////////////////////////////////////////////////////////////// -} //namespace std -} //namespace glm - -#endif - -/////////////////////////////////////////////////////////////////////////////////// - -/////////////////////////////////////////////////////////////////////////////////// -// Length type: all length functions returns a length_t type. -// When GLM_FORCE_SIZE_T_LENGTH is defined, length_t is a typedef of size_t otherwise -// length_t is a typedef of int like GLSL defines it. - -#define GLM_LENGTH_INT 1 -#define GLM_LENGTH_SIZE_T 2 - -#ifdef GLM_FORCE_SIZE_T_LENGTH -# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_SIZE_T -#else -# define GLM_CONFIG_LENGTH_TYPE GLM_LENGTH_INT -#endif - -namespace glm -{ - using std::size_t; -# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T - typedef size_t length_t; -# else - typedef int length_t; -# endif -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// constexpr - -#if GLM_HAS_CONSTEXPR -# define GLM_CONFIG_CONSTEXP GLM_ENABLE - - namespace glm - { - template - constexpr std::size_t countof(T const (&)[N]) - { - return N; - } - }//namespace glm -# define GLM_COUNTOF(arr) glm::countof(arr) -#elif defined(_MSC_VER) -# define GLM_CONFIG_CONSTEXP GLM_DISABLE - -# define GLM_COUNTOF(arr) _countof(arr) -#else -# define GLM_CONFIG_CONSTEXP GLM_DISABLE - -# define GLM_COUNTOF(arr) sizeof(arr) / sizeof(arr[0]) -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// uint - -namespace glm{ -namespace detail -{ - template - struct is_int - { - enum test {value = 0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - typedef unsigned int uint; -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// 64-bit int - -#if GLM_HAS_EXTENDED_INTEGER_TYPE -# include -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::uint64_t uint64; - typedef std::int64_t int64; -# elif (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) // C99 detected, 64 bit types available - typedef uint64_t uint64; - typedef int64_t int64; -# elif GLM_COMPILER & GLM_COMPILER_VC - typedef unsigned __int64 uint64; - typedef signed __int64 int64; -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic ignored "-Wlong-long" - __extension__ typedef unsigned long long uint64; - __extension__ typedef signed long long int64; -# elif (GLM_COMPILER & GLM_COMPILER_CLANG) -# pragma clang diagnostic ignored "-Wc++11-long-long" - typedef unsigned long long uint64; - typedef signed long long int64; -# else//unknown compiler - typedef unsigned long long uint64; - typedef signed long long int64; -# endif -}//namespace detail -}//namespace glm - -/////////////////////////////////////////////////////////////////////////////////// -// make_unsigned - -#if GLM_HAS_MAKE_SIGNED -# include - -namespace glm{ -namespace detail -{ - using std::make_unsigned; -}//namespace detail -}//namespace glm - -#else - -namespace glm{ -namespace detail -{ - template - struct make_unsigned - {}; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned short type; - }; - - template<> - struct make_unsigned - { - typedef unsigned int type; - }; - - template<> - struct make_unsigned - { - typedef unsigned long type; - }; - - template<> - struct make_unsigned - { - typedef uint64 type; - }; - - template<> - struct make_unsigned - { - typedef unsigned char type; - }; - - template<> - struct make_unsigned - { - typedef unsigned short type; - }; - - template<> - struct make_unsigned - { - typedef unsigned int type; - }; - - template<> - struct make_unsigned - { - typedef unsigned long type; - }; - - template<> - struct make_unsigned - { - typedef uint64 type; - }; -}//namespace detail -}//namespace glm -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Only use x, y, z, w as vector type components - -#ifdef GLM_FORCE_XYZW_ONLY -# define GLM_CONFIG_XYZW_ONLY GLM_ENABLE -#else -# define GLM_CONFIG_XYZW_ONLY GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of defaulted initialized types - -#define GLM_CTOR_INIT_DISABLE 0 -#define GLM_CTOR_INITIALIZER_LIST 1 -#define GLM_CTOR_INITIALISATION 2 - -#if defined(GLM_FORCE_CTOR_INIT) && GLM_HAS_INITIALIZER_LISTS -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALIZER_LIST -#elif defined(GLM_FORCE_CTOR_INIT) && !GLM_HAS_INITIALIZER_LISTS -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INITIALISATION -#else -# define GLM_CONFIG_CTOR_INIT GLM_CTOR_INIT_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Use SIMD instruction sets - -#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (GLM_ARCH & GLM_ARCH_SIMD_BIT) -# define GLM_CONFIG_SIMD GLM_ENABLE -#else -# define GLM_CONFIG_SIMD GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of defaulted function - -#if GLM_HAS_DEFAULTED_FUNCTIONS && GLM_CONFIG_CTOR_INIT == GLM_CTOR_INIT_DISABLE -# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_ENABLE -# define GLM_DEFAULT = default -#else -# define GLM_CONFIG_DEFAULTED_FUNCTIONS GLM_DISABLE -# define GLM_DEFAULT -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of aligned gentypes - -#ifdef GLM_FORCE_ALIGNED // Legacy define -# define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -#endif - -#ifdef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -# define GLM_FORCE_ALIGNED_GENTYPES -#endif - -#if GLM_HAS_ALIGNOF && (GLM_LANG & GLM_LANG_CXXMS_FLAG) && (defined(GLM_FORCE_ALIGNED_GENTYPES) || (GLM_CONFIG_SIMD == GLM_ENABLE)) -# define GLM_CONFIG_ALIGNED_GENTYPES GLM_ENABLE -#else -# define GLM_CONFIG_ALIGNED_GENTYPES GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Configure the use of anonymous structure as implementation detail - -#if ((GLM_CONFIG_SIMD == GLM_ENABLE) || (GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR) || (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE)) -# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_ENABLE -#else -# define GLM_CONFIG_ANONYMOUS_STRUCT GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Silent warnings - -#ifdef GLM_FORCE_SILENT_WARNINGS -# define GLM_SILENT_WARNINGS GLM_ENABLE -#else -# define GLM_SILENT_WARNINGS GLM_DISABLE -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Precision - -#define GLM_HIGHP 1 -#define GLM_MEDIUMP 2 -#define GLM_LOWP 3 - -#if defined(GLM_FORCE_PRECISION_HIGHP_BOOL) || defined(GLM_PRECISION_HIGHP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_BOOL) || defined(GLM_PRECISION_MEDIUMP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_BOOL) || defined(GLM_PRECISION_LOWP_BOOL) -# define GLM_CONFIG_PRECISION_BOOL GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_BOOL GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_INT) || defined(GLM_PRECISION_HIGHP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_INT) || defined(GLM_PRECISION_MEDIUMP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_INT) || defined(GLM_PRECISION_LOWP_INT) -# define GLM_CONFIG_PRECISION_INT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_INT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_UINT) || defined(GLM_PRECISION_HIGHP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_UINT) || defined(GLM_PRECISION_MEDIUMP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_UINT) || defined(GLM_PRECISION_LOWP_UINT) -# define GLM_CONFIG_PRECISION_UINT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_UINT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_FLOAT) || defined(GLM_PRECISION_HIGHP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_FLOAT) || defined(GLM_PRECISION_MEDIUMP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_FLOAT) || defined(GLM_PRECISION_LOWP_FLOAT) -# define GLM_CONFIG_PRECISION_FLOAT GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_FLOAT GLM_HIGHP -#endif - -#if defined(GLM_FORCE_PRECISION_HIGHP_DOUBLE) || defined(GLM_PRECISION_HIGHP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP -#elif defined(GLM_FORCE_PRECISION_MEDIUMP_DOUBLE) || defined(GLM_PRECISION_MEDIUMP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_MEDIUMP -#elif defined(GLM_FORCE_PRECISION_LOWP_DOUBLE) || defined(GLM_PRECISION_LOWP_DOUBLE) -# define GLM_CONFIG_PRECISION_DOUBLE GLM_LOWP -#else -# define GLM_CONFIG_PRECISION_DOUBLE GLM_HIGHP -#endif - -/////////////////////////////////////////////////////////////////////////////////// -// Check inclusions of different versions of GLM - -#elif ((GLM_SETUP_INCLUDED != GLM_VERSION) && !defined(GLM_FORCE_IGNORE_VERSION)) -# error "GLM error: A different version of GLM is already included. Define GLM_FORCE_IGNORE_VERSION before including GLM headers to ignore this error." -#elif GLM_SETUP_INCLUDED == GLM_VERSION - -/////////////////////////////////////////////////////////////////////////////////// -// Messages - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_DISPLAYED) -# define GLM_MESSAGE_DISPLAYED -# define GLM_STR_HELPER(x) #x -# define GLM_STR(x) GLM_STR_HELPER(x) - - // Report GLM version -# pragma message (GLM_STR(GLM_VERSION_MESSAGE)) - - // Report C++ language -# if (GLM_LANG & GLM_LANG_CXX2A_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 2A with extensions") -# elif (GLM_LANG & GLM_LANG_CXX2A_FLAG) -# pragma message("GLM: C++ 2A") -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 17 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX17_FLAG) -# pragma message("GLM: C++ 17") -# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 14 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX14_FLAG) -# pragma message("GLM: C++ 14") -# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 11 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX11_FLAG) -# pragma message("GLM: C++ 11") -# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 0x with extensions") -# elif (GLM_LANG & GLM_LANG_CXX0X_FLAG) -# pragma message("GLM: C++ 0x") -# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 03 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX03_FLAG) -# pragma message("GLM: C++ 03") -# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) && (GLM_LANG & GLM_LANG_EXT) -# pragma message("GLM: C++ 98 with extensions") -# elif (GLM_LANG & GLM_LANG_CXX98_FLAG) -# pragma message("GLM: C++ 98") -# else -# pragma message("GLM: C++ language undetected") -# endif//GLM_LANG - - // Report compiler detection -# if GLM_COMPILER & GLM_COMPILER_CUDA -# pragma message("GLM: CUDA compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma message("GLM: Visual C++ compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma message("GLM: Clang compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_INTEL -# pragma message("GLM: Intel Compiler detected") -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma message("GLM: GCC compiler detected") -# else -# pragma message("GLM: Compiler not detected") -# endif - - // Report build target -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with AVX2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_AVX2_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with AVX2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with AVX instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_AVX_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with AVX instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE4.2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE42_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE4.2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE4.1 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE41_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE4.1 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSSE3 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSSE3 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE3 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE3_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE3 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits with SSE2 instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_SSE2_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits with SSE2 instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: x86 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_X86_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: x86 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: ARM 64 bits with Neon instruction set build target") -# elif (GLM_ARCH & GLM_ARCH_NEON_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: ARM 32 bits with Neon instruction set build target") - -# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: ARM 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_ARM_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: ARM 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: MIPS 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_MIPS_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: MIPS 32 bits build target") - -# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_64) -# pragma message("GLM: PowerPC 64 bits build target") -# elif (GLM_ARCH & GLM_ARCH_PPC_BIT) && (GLM_MODEL == GLM_MODEL_32) -# pragma message("GLM: PowerPC 32 bits build target") -# else -# pragma message("GLM: Unknown build target") -# endif//GLM_ARCH - - // Report platform name -# if(GLM_PLATFORM & GLM_PLATFORM_QNXNTO) -# pragma message("GLM: QNX platform detected") -//# elif(GLM_PLATFORM & GLM_PLATFORM_IOS) -//# pragma message("GLM: iOS platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_APPLE) -# pragma message("GLM: Apple platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_WINCE) -# pragma message("GLM: WinCE platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_WINDOWS) -# pragma message("GLM: Windows platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_CHROME_NACL) -# pragma message("GLM: Native Client detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) -# pragma message("GLM: Android platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_LINUX) -# pragma message("GLM: Linux platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_UNIX) -# pragma message("GLM: UNIX platform detected") -# elif(GLM_PLATFORM & GLM_PLATFORM_UNKNOWN) -# pragma message("GLM: platform unknown") -# else -# pragma message("GLM: platform not detected") -# endif - - // Report whether only xyzw component are used -# if defined GLM_FORCE_XYZW_ONLY -# pragma message("GLM: GLM_FORCE_XYZW_ONLY is defined. Only x, y, z and w component are available in vector type. This define disables swizzle operators and SIMD instruction sets.") -# endif - - // Report swizzle operator support -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling operators enabled.") -# elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# pragma message("GLM: GLM_FORCE_SWIZZLE is defined, swizzling functions enabled. Enable compiler C++ language extensions to enable swizzle operators.") -# else -# pragma message("GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled.") -# endif - - // Report .length() type -# if GLM_CONFIG_LENGTH_TYPE == GLM_LENGTH_SIZE_T -# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is defined. .length() returns a glm::length_t, a typedef of std::size_t.") -# else -# pragma message("GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL.") -# endif - -# if GLM_CONFIG_UNRESTRICTED_GENTYPE == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is defined. Removes GLSL restrictions on valid function genTypes.") -# else -# pragma message("GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes.") -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is defined. Ignores C++ warnings from using C++ language extensions.") -# else -# pragma message("GLM: GLM_FORCE_SILENT_WARNINGS is undefined. Shows C++ warnings from using C++ language extensions.") -# endif - -# ifdef GLM_FORCE_SINGLE_ONLY -# pragma message("GLM: GLM_FORCE_SINGLE_ONLY is defined. Using only single precision floating-point types.") -# endif - -# if defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE) -# undef GLM_FORCE_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined, allowing aligned types. This prevents the use of C++ constexpr.") -# elif defined(GLM_FORCE_ALIGNED_GENTYPES) && (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) -# undef GLM_FORCE_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") -# endif - -# if defined(GLM_FORCE_DEFAULT_ALIGNED_GENTYPES) -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE -# undef GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined but is disabled. It requires C++11 and language extensions.") -# elif GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# pragma message("GLM: GLM_FORCE_DEFAULT_ALIGNED_GENTYPES is defined. All gentypes (e.g. vec3) will be aligned and padded by default.") -# endif -# endif - -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT -# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is defined. Using zero to one depth clip space.") -# else -# pragma message("GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space.") -# endif - -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT -# pragma message("GLM: GLM_FORCE_LEFT_HANDED is defined. Using left handed coordinate system.") -# else -# pragma message("GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system.") -# endif -#endif//GLM_MESSAGES - -#endif//GLM_SETUP_INCLUDED diff --git a/src/qged/display/glm/glm/detail/type_float.hpp b/src/qged/display/glm/glm/detail/type_float.hpp deleted file mode 100644 index 59d48bf06e1..00000000000 --- a/src/qged/display/glm/glm/detail/type_float.hpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -#include "setup.hpp" - -#if GLM_COMPILER == GLM_COMPILER_VC12 -# pragma warning(push) -# pragma warning(disable: 4512) // assignment operator could not be generated -#endif - -namespace glm{ -namespace detail -{ - template - union float_t - {}; - - // https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/ - template <> - union float_t - { - typedef int int_type; - typedef float float_type; - - GLM_CONSTEXPR float_t(float_type Num = 0.0f) : f(Num) {} - - GLM_CONSTEXPR float_t& operator=(float_t const& x) - { - f = x.f; - return *this; - } - - // Portable extraction of components. - GLM_CONSTEXPR bool negative() const { return i < 0; } - GLM_CONSTEXPR int_type mantissa() const { return i & ((1 << 23) - 1); } - GLM_CONSTEXPR int_type exponent() const { return (i >> 23) & ((1 << 8) - 1); } - - int_type i; - float_type f; - }; - - template <> - union float_t - { - typedef detail::int64 int_type; - typedef double float_type; - - GLM_CONSTEXPR float_t(float_type Num = static_cast(0)) : f(Num) {} - - GLM_CONSTEXPR float_t& operator=(float_t const& x) - { - f = x.f; - return *this; - } - - // Portable extraction of components. - GLM_CONSTEXPR bool negative() const { return i < 0; } - GLM_CONSTEXPR int_type mantissa() const { return i & ((int_type(1) << 52) - 1); } - GLM_CONSTEXPR int_type exponent() const { return (i >> 52) & ((int_type(1) << 11) - 1); } - - int_type i; - float_type f; - }; -}//namespace detail -}//namespace glm - -#if GLM_COMPILER == GLM_COMPILER_VC12 -# pragma warning(pop) -#endif diff --git a/src/qged/display/glm/glm/detail/type_half.hpp b/src/qged/display/glm/glm/detail/type_half.hpp deleted file mode 100644 index d802aa3c2cc..00000000000 --- a/src/qged/display/glm/glm/detail/type_half.hpp +++ /dev/null @@ -1,47 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -#include "setup.hpp" - -namespace glm{ -namespace detail -{ - typedef short hdata; - - GLM_FUNC_DECL float toFloat32(hdata value); - GLM_FUNC_DECL hdata toFloat16(float const& value); - -}//namespace detail -}//namespace glm - -#include "type_half.inl" diff --git a/src/qged/display/glm/glm/detail/type_half.inl b/src/qged/display/glm/glm/detail/type_half.inl deleted file mode 100644 index b0723e362d5..00000000000 --- a/src/qged/display/glm/glm/detail/type_half.inl +++ /dev/null @@ -1,241 +0,0 @@ -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER float overflow() - { - volatile float f = 1e10; - - for(int i = 0; i < 10; ++i) - f *= f; // this will overflow before the for loop terminates - return f; - } - - union uif32 - { - GLM_FUNC_QUALIFIER uif32() : - i(0) - {} - - GLM_FUNC_QUALIFIER uif32(float f_) : - f(f_) - {} - - GLM_FUNC_QUALIFIER uif32(unsigned int i_) : - i(i_) - {} - - float f; - unsigned int i; - }; - - GLM_FUNC_QUALIFIER float toFloat32(hdata value) - { - int s = (value >> 15) & 0x00000001; - int e = (value >> 10) & 0x0000001f; - int m = value & 0x000003ff; - - if(e == 0) - { - if(m == 0) - { - // - // Plus or minus zero - // - - detail::uif32 result; - result.i = static_cast(s << 31); - return result.f; - } - else - { - // - // Denormalized number -- renormalize it - // - - while(!(m & 0x00000400)) - { - m <<= 1; - e -= 1; - } - - e += 1; - m &= ~0x00000400; - } - } - else if(e == 31) - { - if(m == 0) - { - // - // Positive or negative infinity - // - - uif32 result; - result.i = static_cast((s << 31) | 0x7f800000); - return result.f; - } - else - { - // - // Nan -- preserve sign and significand bits - // - - uif32 result; - result.i = static_cast((s << 31) | 0x7f800000 | (m << 13)); - return result.f; - } - } - - // - // Normalized number - // - - e = e + (127 - 15); - m = m << 13; - - // - // Assemble s, e and m. - // - - uif32 Result; - Result.i = static_cast((s << 31) | (e << 23) | m); - return Result.f; - } - - GLM_FUNC_QUALIFIER hdata toFloat16(float const& f) - { - uif32 Entry; - Entry.f = f; - int i = static_cast(Entry.i); - - // - // Our floating point number, f, is represented by the bit - // pattern in integer i. Disassemble that bit pattern into - // the sign, s, the exponent, e, and the significand, m. - // Shift s into the position where it will go in the - // resulting half number. - // Adjust e, accounting for the different exponent bias - // of float and half (127 versus 15). - // - - int s = (i >> 16) & 0x00008000; - int e = ((i >> 23) & 0x000000ff) - (127 - 15); - int m = i & 0x007fffff; - - // - // Now reassemble s, e and m into a half: - // - - if(e <= 0) - { - if(e < -10) - { - // - // E is less than -10. The absolute value of f is - // less than half_MIN (f may be a small normalized - // float, a denormalized float or a zero). - // - // We convert f to a half zero. - // - - return hdata(s); - } - - // - // E is between -10 and 0. F is a normalized float, - // whose magnitude is less than __half_NRM_MIN. - // - // We convert f to a denormalized half. - // - - m = (m | 0x00800000) >> (1 - e); - - // - // Round to nearest, round "0.5" up. - // - // Rounding may cause the significand to overflow and make - // our number normalized. Because of the way a half's bits - // are laid out, we don't have to treat this case separately; - // the code below will handle it correctly. - // - - if(m & 0x00001000) - m += 0x00002000; - - // - // Assemble the half from s, e (zero) and m. - // - - return hdata(s | (m >> 13)); - } - else if(e == 0xff - (127 - 15)) - { - if(m == 0) - { - // - // F is an infinity; convert f to a half - // infinity with the same sign as f. - // - - return hdata(s | 0x7c00); - } - else - { - // - // F is a NAN; we produce a half NAN that preserves - // the sign bit and the 10 leftmost bits of the - // significand of f, with one exception: If the 10 - // leftmost bits are all zero, the NAN would turn - // into an infinity, so we have to set at least one - // bit in the significand. - // - - m >>= 13; - - return hdata(s | 0x7c00 | m | (m == 0)); - } - } - else - { - // - // E is greater than zero. F is a normalized float. - // We try to convert f to a normalized half. - // - - // - // Round to nearest, round "0.5" up - // - - if(m & 0x00001000) - { - m += 0x00002000; - - if(m & 0x00800000) - { - m = 0; // overflow in significand, - e += 1; // adjust exponent - } - } - - // - // Handle exponent overflow - // - - if (e > 30) - { - overflow(); // Cause a hardware floating point overflow; - - return hdata(s | 0x7c00); - // if this returns, the half becomes an - } // infinity with the same sign as f. - - // - // Assemble the half from s, e and m. - // - - return hdata(s | (e << 10) | (m >> 13)); - } - } - -}//namespace detail -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/type_mat2x2.hpp b/src/qged/display/glm/glm/detail/type_mat2x2.hpp deleted file mode 100644 index 31366f345c0..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat2x2.hpp +++ /dev/null @@ -1,208 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_mat2x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 2, T, Q> type; - typedef mat<2, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x1, T const& y1, - T const& x2, T const& y2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - U const& x1, V const& y1, - M const& x2, N const& y2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, U, Q> const& v1, - vec<2, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator+=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator*=(mat<2, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<2, 2, T, Q> & operator/=(mat<2, 2, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator*(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator*(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2); -} //namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x2.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/type_mat2x2.inl b/src/qged/display/glm/glm/detail/type_mat2x2.inl deleted file mode 100644 index fe5d1aa3133..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat2x2.inl +++ /dev/null @@ -1,536 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m[0], m[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(T scalar) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(scalar, 0), col_type(0, scalar)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(scalar, 0); - this->value[1] = col_type(0, scalar); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat - ( - T const& x0, T const& y0, - T const& x1, T const& y1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{v0, v1} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; -# endif - } - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat - ( - X1 const& x1, Y1 const& y1, - X2 const& x2, Y2 const& y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(static_cast(x1), value_type(y1)), col_type(static_cast(x2), value_type(y2)) } -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(static_cast(x1), value_type(y1)); - this->value[1] = col_type(static_cast(x2), value_type(y2)); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- mat2x2 matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 2, T, Q>::col_type const& mat<2, 2, T, Q>::operator[](typename mat<2, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator=(mat<2, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(U scalar) - { - this->value[0] += scalar; - this->value[1] += scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator+=(mat<2, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(U scalar) - { - this->value[0] -= scalar; - this->value[1] -= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator-=(mat<2, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(U scalar) - { - this->value[0] *= scalar; - this->value[1] *= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator*=(mat<2, 2, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(U scalar) - { - this->value[0] /= scalar; - this->value[1] /= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator/=(mat<2, 2, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q>& mat<2, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator++(int) - { - mat<2, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> mat<2, 2, T, Q>::operator--(int) - { - mat<2, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator+(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - scalar - m[0], - scalar - m[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator-(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator* - ( - mat<2, 2, T, Q> const& m, - typename mat<2, 2, T, Q>::row_type const& v - ) - { - return vec<2, T, Q>( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator* - ( - typename mat<2, 2, T, Q>::col_type const& v, - mat<2, 2, T, Q> const& m - ) - { - return vec<2, T, Q>( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<2, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m, T scalar) - { - return mat<2, 2, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(T scalar, mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::col_type operator/(mat<2, 2, T, Q> const& m, typename mat<2, 2, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 2, T, Q>::row_type operator/(typename mat<2, 2, T, Q>::col_type const& v, mat<2, 2, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator/(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - mat<2, 2, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 2, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/detail/type_mat2x3.hpp b/src/qged/display/glm/glm/detail/type_mat2x3.hpp deleted file mode 100644 index 0a5b948bb11..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat2x3.hpp +++ /dev/null @@ -1,190 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_mat2x3.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 3, T, Q> type; - typedef mat<3, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, - T x1, T y1, T z1); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1); - - // -- Conversions -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, U, Q> const& v1, - vec<3, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator+=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-=(mat<2, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 3, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 3, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 3, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 3, T, Q>::col_type operator*(mat<2, 3, T, Q> const& m, typename mat<2, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 3, T, Q>::row_type operator*(typename mat<2, 3, T, Q>::col_type const& v, mat<2, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x3.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/type_mat2x3.inl b/src/qged/display/glm/glm/detail/type_mat2x3.inl deleted file mode 100644 index 5fec17e5dbb..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat2x3.inl +++ /dev/null @@ -1,510 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m.value[0], m.value[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m.value[0]; - this->value[1] = m.value[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(T scalar) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(scalar, 0, 0), col_type(0, scalar, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(scalar, 0, 0); - this->value[1] = col_type(0, scalar, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat - ( - T x0, T y0, T z0, - T x1, T y1, T z1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1), col_type(x2, y2, z2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1); - this->value[1] = col_type(x2, y2, z2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type & mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 3, T, Q>::col_type const& mat<2, 3, T, Q>::operator[](typename mat<2, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator=(mat<2, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator+=(mat<2, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator-=(mat<2, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q>& mat<2, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> & mat<2, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator++(int) - { - mat<2, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> mat<2, 3, T, Q>::operator--(int) - { - mat<2, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator+(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator-(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(T scalar, mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::col_type operator* - ( - mat<2, 3, T, Q> const& m, - typename mat<2, 3, T, Q>::row_type const& v) - { - return typename mat<2, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y, - m[0][2] * v.x + m[1][2] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 3, T, Q>::row_type operator* - ( - typename mat<2, 3, T, Q>::col_type const& v, - mat<2, 3, T, Q> const& m) - { - return typename mat<2, 3, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - T SrcA00 = m1[0][0]; - T SrcA01 = m1[0][1]; - T SrcA02 = m1[0][2]; - T SrcA10 = m1[1][0]; - T SrcA11 = m1[1][1]; - T SrcA12 = m1[1][2]; - - T SrcB00 = m2[0][0]; - T SrcB01 = m2[0][1]; - T SrcB10 = m2[1][0]; - T SrcB11 = m2[1][1]; - T SrcB20 = m2[2][0]; - T SrcB21 = m2[2][1]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<2, 3, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(mat<2, 3, T, Q> const& m, T scalar) - { - return mat<2, 3, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator/(T scalar, mat<2, 3, T, Q> const& m) - { - return mat<2, 3, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/detail/type_mat2x4.hpp b/src/qged/display/glm/glm/detail/type_mat2x4.hpp deleted file mode 100644 index 2b1ff4b1105..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat2x4.hpp +++ /dev/null @@ -1,192 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_mat2x4.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<2, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<2, T, Q> row_type; - typedef mat<2, 4, T, Q> type; - typedef mat<4, 2, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[2]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 2; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<2, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, U, Q> const& v1, - vec<4, V, Q> const& v2); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator+=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-=(mat<2, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<2, 4, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<2, 4, T, Q> & operator++ (); - GLM_FUNC_DECL mat<2, 4, T, Q> & operator-- (); - GLM_FUNC_DECL mat<2, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<2, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat2x4.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/type_mat2x4.inl b/src/qged/display/glm/glm/detail/type_mat2x4.inl deleted file mode 100644 index b6d2b9ddfd1..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat2x4.inl +++ /dev/null @@ -1,520 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{m[0], m[1]} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat - ( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0, w0), col_type(x1, y1, z1, w1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(col_type const& v0, col_type const& v1) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1, w1); - this->value[1] = col_type(x2, y2, z2, w2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<2, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type & mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<2, 4, T, Q>::col_type const& mat<2, 4, T, Q>::operator[](typename mat<2, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator=(mat<2, 4, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator+=(mat<2, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator-=(mat<2, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> & mat<2, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q>& mat<2, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator++(int) - { - mat<2, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat<2, 4, T, Q>::operator--(int) - { - mat<2, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - -m[0], - -m[1]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] + scalar, - m[1] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator+(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] - scalar, - m[1] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator-(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(T scalar, mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - m[0] * scalar, - m[1] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::col_type operator*(mat<2, 4, T, Q> const& m, typename mat<2, 4, T, Q>::row_type const& v) - { - return typename mat<2, 4, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y, - m[0][1] * v.x + m[1][1] * v.y, - m[0][2] * v.x + m[1][2] * v.y, - m[0][3] * v.x + m[1][3] * v.y); - } - - template - GLM_FUNC_QUALIFIER typename mat<2, 4, T, Q>::row_type operator*(typename mat<2, 4, T, Q>::col_type const& v, mat<2, 4, T, Q> const& m) - { - return typename mat<2, 4, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - T SrcA00 = m1[0][0]; - T SrcA01 = m1[0][1]; - T SrcA02 = m1[0][2]; - T SrcA03 = m1[0][3]; - T SrcA10 = m1[1][0]; - T SrcA11 = m1[1][1]; - T SrcA12 = m1[1][2]; - T SrcA13 = m1[1][3]; - - T SrcB00 = m2[0][0]; - T SrcB01 = m2[0][1]; - T SrcB10 = m2[1][0]; - T SrcB11 = m2[1][1]; - T SrcB20 = m2[2][0]; - T SrcB21 = m2[2][1]; - T SrcB30 = m2[3][0]; - T SrcB31 = m2[3][1]; - - mat<4, 4, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01; - Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11; - Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21; - Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21; - Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31; - Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31; - Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31; - Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<2, 2, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<2, 4, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(mat<2, 4, T, Q> const& m, T scalar) - { - return mat<2, 4, T, Q>( - m[0] / scalar, - m[1] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator/(T scalar, mat<2, 4, T, Q> const& m) - { - return mat<2, 4, T, Q>( - scalar / m[0], - scalar / m[1]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<2, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/detail/type_mat3x2.hpp b/src/qged/display/glm/glm/detail/type_mat3x2.hpp deleted file mode 100644 index eb885a18c07..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat3x2.hpp +++ /dev/null @@ -1,198 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_mat3x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 2, T, Q> type; - typedef mat<2, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, - T x1, T y1, - T x2, T y2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, V1, Q> const& v1, - vec<2, V2, Q> const& v2, - vec<2, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator+=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-=(mat<3, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 2, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<3, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<3, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2); - -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x2.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/type_mat3x2.inl b/src/qged/display/glm/glm/detail/type_mat3x2.inl deleted file mode 100644 index b4b948b7261..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat3x2.inl +++ /dev/null @@ -1,532 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1), col_type(0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); - this->value[2] = col_type(0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0), col_type(0, s), col_type(0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0); - this->value[1] = col_type(0, s); - this->value[2] = col_type(0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat - ( - T x0, T y0, - T x1, T y1, - T x2, T y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat - ( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type & mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 2, T, Q>::col_type const& mat<3, 2, T, Q>::operator[](typename mat<3, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator=(mat<3, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator+=(mat<3, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator-=(mat<3, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> & mat<3, 2, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q>& mat<3, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator++(int) - { - mat<3, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> mat<3, 2, T, Q>::operator--(int) - { - mat<3, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator+(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator-(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(T scalar, mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::col_type operator*(mat<3, 2, T, Q> const& m, typename mat<3, 2, T, Q>::row_type const& v) - { - return typename mat<3, 2, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 2, T, Q>::row_type operator*(typename mat<3, 2, T, Q>::col_type const& v, mat<3, 2, T, Q> const& m) - { - return typename mat<3, 2, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1], - v.x * m[2][0] + v.y * m[2][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - const T SrcA00 = m1[0][0]; - const T SrcA01 = m1[0][1]; - const T SrcA10 = m1[1][0]; - const T SrcA11 = m1[1][1]; - const T SrcA20 = m1[2][0]; - const T SrcA21 = m1[2][1]; - - const T SrcB00 = m2[0][0]; - const T SrcB01 = m2[0][1]; - const T SrcB02 = m2[0][2]; - const T SrcB10 = m2[1][0]; - const T SrcB11 = m2[1][1]; - const T SrcB12 = m2[1][2]; - - mat<2, 2, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<3, 2, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(mat<3, 2, T, Q> const& m, T scalar) - { - return mat<3, 2, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator/(T scalar, mat<3, 2, T, Q> const& m) - { - return mat<3, 2, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 2, T, Q> const& m1, mat<3, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/detail/type_mat3x3.hpp b/src/qged/display/glm/glm/detail/type_mat3x3.hpp deleted file mode 100644 index f3dd4ceb1ec..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat3x3.hpp +++ /dev/null @@ -1,215 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_mat3x3.hpp - -#pragma once - -#include "type_vec3.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 3, T, Q> type; - typedef mat<3, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, - T x1, T y1, T z1, - T x2, T y2, T z2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2, - X3 x3, Y3 y3, Z3 z3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, V1, Q> const& v1, - vec<3, V2, Q> const& v2, - vec<3, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator+=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator-=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator*=(mat<3, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<3, 3, T, Q> & operator/=(mat<3, 3, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 3, T, Q> & operator++(); - GLM_FUNC_DECL mat<3, 3, T, Q> & operator--(); - GLM_FUNC_DECL mat<3, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x3.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/type_mat3x3.inl b/src/qged/display/glm/glm/detail/type_mat3x3.inl deleted file mode 100644 index 1ddaf99d581..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat3x3.inl +++ /dev/null @@ -1,601 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); - this->value[2] = col_type(0, 0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0); - this->value[1] = col_type(0, s, 0); - this->value[2] = col_type(0, 0, s); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat - ( - T x0, T y0, T z0, - T x1, T y1, T z1, - T x2, T y2, T z2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat - ( - X1 x1, Y1 y1, Z1 z1, - X2 x2, Y2 y2, Z2 z2, - X3 x3, Y3 y3, Z3 z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1); - this->value[1] = col_type(x2, y2, z2); - this->value[2] = col_type(x3, y3, z3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 3, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type & mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 3, T, Q>::col_type const& mat<3, 3, T, Q>::operator[](typename mat<3, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator=(mat<3, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator+=(mat<3, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator-=(mat<3, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator*=(mat<3, 3, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator/=(mat<3, 3, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> & mat<3, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator++(int) - { - mat<3, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat<3, 3, T, Q>::operator--(int) - { - mat<3, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator+(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - scalar - m[0], - scalar - m[1], - scalar - m[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator-(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator*(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) - { - return typename mat<3, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator*(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) - { - return typename mat<3, 3, T, Q>::row_type( - m[0][0] * v.x + m[0][1] * v.y + m[0][2] * v.z, - m[1][0] * v.x + m[1][1] * v.y + m[1][2] * v.z, - m[2][0] * v.x + m[2][1] * v.y + m[2][2] * v.z); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA02 = m1[0][2]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA12 = m1[1][2]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA22 = m1[2][2]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB20 = m2[2][0]; - T const SrcB21 = m2[2][1]; - T const SrcB22 = m2[2][2]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<3, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m, T scalar) - { - return mat<3, 3, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(T scalar, mat<3, 3, T, Q> const& m) - { - return mat<3, 3, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::col_type operator/(mat<3, 3, T, Q> const& m, typename mat<3, 3, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 3, T, Q>::row_type operator/(typename mat<3, 3, T, Q>::col_type const& v, mat<3, 3, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator/(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - mat<3, 3, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 3, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/detail/type_mat3x4.hpp b/src/qged/display/glm/glm/detail/type_mat3x4.hpp deleted file mode 100644 index 8e00eb26eef..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat3x4.hpp +++ /dev/null @@ -1,197 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_mat3x4.hpp - -#pragma once - -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<3, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<3, T, Q> row_type; - typedef mat<3, 4, T, Q> type; - typedef mat<4, 3, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[3]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 3; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<3, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1, - T x2, T y2, T z2, T w2); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2, - X3 x3, Y3 y3, Z3 z3, W3 w3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, V1, Q> const& v1, - vec<4, V2, Q> const& v2, - vec<4, V3, Q> const& v3); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator+=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator-=(mat<3, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<3, 4, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<3, 4, T, Q> & operator++(); - GLM_FUNC_DECL mat<3, 4, T, Q> & operator--(); - GLM_FUNC_DECL mat<3, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<3, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<3, 4, T, Q>::col_type operator*(mat<3, 4, T, Q> const& m, typename mat<3, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<3, 4, T, Q>::row_type operator*(typename mat<3, 4, T, Q>::col_type const& v, mat<3, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat3x4.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/type_mat3x4.inl b/src/qged/display/glm/glm/detail/type_mat3x4.inl deleted file mode 100644 index 6ee416cfd65..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat3x4.inl +++ /dev/null @@ -1,578 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); - this->value[2] = col_type(0, 0, s, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat - ( - T x0, T y0, T z0, T w0, - T x1, T y1, T z1, T w1, - T x2, T y2, T z2, T w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, typename Z0, typename W0, - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat - ( - X0 x0, Y0 y0, Z0 z0, W0 w0, - X1 x1, Y1 y1, Z1 z1, W1 w1, - X2 x2, Y2 y2, Z2 z2, W2 w2 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(vec<4, V1, Q> const& v0, vec<4, V2, Q> const& v1, vec<4, V3, Q> const& v2) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<3, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type & mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<3, 4, T, Q>::col_type const& mat<3, 4, T, Q>::operator[](typename mat<3, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator=(mat<3, 4, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator+=(mat<3, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator-=(mat<3, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> & mat<3, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q>& mat<3, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator++(int) - { - mat<3, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat<3, 4, T, Q>::operator--(int) - { - mat<3, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - -m[0], - -m[1], - -m[2]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator+(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator-(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(T scalar, mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::col_type operator* - ( - mat<3, 4, T, Q> const& m, - typename mat<3, 4, T, Q>::row_type const& v - ) - { - return typename mat<3, 4, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z, - m[0][3] * v.x + m[1][3] * v.y + m[2][3] * v.z); - } - - template - GLM_FUNC_QUALIFIER typename mat<3, 4, T, Q>::row_type operator* - ( - typename mat<3, 4, T, Q>::col_type const& v, - mat<3, 4, T, Q> const& m - ) - { - return typename mat<3, 4, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2] + v.w * m[0][3], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2] + v.w * m[1][3], - v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2] + v.w * m[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - const T SrcA00 = m1[0][0]; - const T SrcA01 = m1[0][1]; - const T SrcA02 = m1[0][2]; - const T SrcA03 = m1[0][3]; - const T SrcA10 = m1[1][0]; - const T SrcA11 = m1[1][1]; - const T SrcA12 = m1[1][2]; - const T SrcA13 = m1[1][3]; - const T SrcA20 = m1[2][0]; - const T SrcA21 = m1[2][1]; - const T SrcA22 = m1[2][2]; - const T SrcA23 = m1[2][3]; - - const T SrcB00 = m2[0][0]; - const T SrcB01 = m2[0][1]; - const T SrcB02 = m2[0][2]; - const T SrcB10 = m2[1][0]; - const T SrcB11 = m2[1][1]; - const T SrcB12 = m2[1][2]; - const T SrcB20 = m2[2][0]; - const T SrcB21 = m2[2][1]; - const T SrcB22 = m2[2][2]; - const T SrcB30 = m2[3][0]; - const T SrcB31 = m2[3][1]; - const T SrcB32 = m2[3][2]; - - mat<4, 4, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02; - Result[0][3] = SrcA03 * SrcB00 + SrcA13 * SrcB01 + SrcA23 * SrcB02; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12; - Result[1][3] = SrcA03 * SrcB10 + SrcA13 * SrcB11 + SrcA23 * SrcB12; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22; - Result[2][3] = SrcA03 * SrcB20 + SrcA13 * SrcB21 + SrcA23 * SrcB22; - Result[3][0] = SrcA00 * SrcB30 + SrcA10 * SrcB31 + SrcA20 * SrcB32; - Result[3][1] = SrcA01 * SrcB30 + SrcA11 * SrcB31 + SrcA21 * SrcB32; - Result[3][2] = SrcA02 * SrcB30 + SrcA12 * SrcB31 + SrcA22 * SrcB32; - Result[3][3] = SrcA03 * SrcB30 + SrcA13 * SrcB31 + SrcA23 * SrcB32; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<2, 3, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<3, 4, T, Q> const& m1, mat<3, 3, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(mat<3, 4, T, Q> const& m, T scalar) - { - return mat<3, 4, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator/(T scalar, mat<3, 4, T, Q> const& m) - { - return mat<3, 4, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<3, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/detail/type_mat4x2.hpp b/src/qged/display/glm/glm/detail/type_mat4x2.hpp deleted file mode 100644 index 4c940b65c24..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat4x2.hpp +++ /dev/null @@ -1,202 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_mat4x2.hpp - -#pragma once - -#include "type_vec2.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 2, T, Q> - { - typedef vec<2, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 2, T, Q> type; - typedef mat<2, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 2, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T x0, T y0, - T x1, T y1, - T x2, T y2, - T x3, T y3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<2, V1, Q> const& v1, - vec<2, V2, Q> const& v2, - vec<2, V3, Q> const& v3, - vec<2, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator+=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-=(mat<4, 2, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 2, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 2, T, Q> & operator++ (); - GLM_FUNC_DECL mat<4, 2, T, Q> & operator-- (); - GLM_FUNC_DECL mat<4, 2, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 2, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar); - - template - GLM_FUNC_DECL mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x2.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/type_mat4x2.inl b/src/qged/display/glm/glm/detail/type_mat4x2.inl deleted file mode 100644 index 419c80c42cf..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat4x2.inl +++ /dev/null @@ -1,574 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0), col_type(0, 1), col_type(0, 0), col_type(0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0); - this->value[1] = col_type(0, 1); - this->value[2] = col_type(0, 0); - this->value[3] = col_type(0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(T s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0), col_type(0, s), col_type(0, 0), col_type(0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0); - this->value[1] = col_type(0, s); - this->value[2] = col_type(0, 0); - this->value[3] = col_type(0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat - ( - T x0, T y0, - T x1, T y1, - T x2, T y2, - T x3, T y3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); - this->value[3] = col_type(x3, y3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, - typename X1, typename Y1, - typename X2, typename Y2, - typename X3, typename Y3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat - ( - X0 x0, Y0 y0, - X1 x1, Y1 y1, - X2 x2, Y2 y2, - X3 x3, Y3 y3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0), col_type(x1, y1), col_type(x2, y2), col_type(x3, y3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0); - this->value[1] = col_type(x1, y1); - this->value[2] = col_type(x2, y2); - this->value[3] = col_type(x3, y3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(vec<2, V0, Q> const& v0, vec<2, V1, Q> const& v1, vec<2, V2, Q> const& v2, vec<2, V3, Q> const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v0); - this->value[1] = col_type(v1); - this->value[2] = col_type(v2); - this->value[3] = col_type(v3); -# endif - } - - // -- Conversion -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 2, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 2, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type & mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 2, T, Q>::col_type const& mat<4, 2, T, Q>::operator[](typename mat<4, 2, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q>& mat<4, 2, T, Q>::operator=(mat<4, 2, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator+=(mat<4, 2, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator-=(mat<4, 2, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> & mat<4, 2, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator++(int) - { - mat<4, 2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> mat<4, 2, T, Q>::operator--(int) - { - mat<4, 2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] + scalar, - m[1] + scalar, - m[2] + scalar, - m[3] + scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator+(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] - scalar, - m[1] - scalar, - m[2] - scalar, - m[3] - scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator-(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar, - m[3] * scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(T scalar, mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - m[0] * scalar, - m[1] * scalar, - m[2] * scalar, - m[3] * scalar); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::col_type operator*(mat<4, 2, T, Q> const& m, typename mat<4, 2, T, Q>::row_type const& v) - { - return typename mat<4, 2, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 2, T, Q>::row_type operator*(typename mat<4, 2, T, Q>::col_type const& v, mat<4, 2, T, Q> const& m) - { - return typename mat<4, 2, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1], - v.x * m[1][0] + v.y * m[1][1], - v.x * m[2][0] + v.y * m[2][1], - v.x * m[3][0] + v.y * m[3][1]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA30 = m1[3][0]; - T const SrcA31 = m1[3][1]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB03 = m2[0][3]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB13 = m2[1][3]; - - mat<2, 2, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator*(mat<4, 2, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 2, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(mat<4, 2, T, Q> const& m, T scalar) - { - return mat<4, 2, T, Q>( - m[0] / scalar, - m[1] / scalar, - m[2] / scalar, - m[3] / scalar); - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> operator/(T scalar, mat<4, 2, T, Q> const& m) - { - return mat<4, 2, T, Q>( - scalar / m[0], - scalar / m[1], - scalar / m[2], - scalar / m[3]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 2, T, Q> const& m1, mat<4, 2, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/detail/type_mat4x3.hpp b/src/qged/display/glm/glm/detail/type_mat4x3.hpp deleted file mode 100644 index 78ef5c81f5d..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat4x3.hpp +++ /dev/null @@ -1,202 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_mat4x3.hpp - -#pragma once - -#include "type_vec3.hpp" -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 3, T, Q> - { - typedef vec<3, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 3, T, Q> type; - typedef mat<3, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length() { return 4; } - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 3, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x0, T const& y0, T const& z0, - T const& x1, T const& y1, T const& z1, - T const& x2, T const& y2, T const& z2, - T const& x3, T const& y3, T const& z3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3, - typename X4, typename Y4, typename Z4> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 const& x1, Y1 const& y1, Z1 const& z1, - X2 const& x2, Y2 const& y2, Z2 const& z2, - X3 const& x3, Y3 const& y3, Z3 const& z3, - X4 const& x4, Y4 const& y4, Z4 const& z4); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<3, V1, Q> const& v1, - vec<3, V2, Q> const& v2, - vec<3, V3, Q> const& v3, - vec<3, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator+=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator-=(mat<4, 3, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 3, T, Q> & operator/=(U s); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 3, T, Q>& operator++(); - GLM_FUNC_DECL mat<4, 3, T, Q>& operator--(); - GLM_FUNC_DECL mat<4, 3, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 3, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 3, T, Q>::col_type operator*(mat<4, 3, T, Q> const& m, typename mat<4, 3, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 3, T, Q>::row_type operator*(typename mat<4, 3, T, Q>::col_type const& v, mat<4, 3, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x3.inl" -#endif //GLM_EXTERNAL_TEMPLATE diff --git a/src/qged/display/glm/glm/detail/type_mat4x3.inl b/src/qged/display/glm/glm/detail/type_mat4x3.inl deleted file mode 100644 index 11b1ee35d8a..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat4x3.inl +++ /dev/null @@ -1,598 +0,0 @@ -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0), col_type(0, 1, 0), col_type(0, 0, 1), col_type(0, 0, 0)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0); - this->value[1] = col_type(0, 1, 0); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0, 0, 0); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(T const& s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0), col_type(0, s, 0), col_type(0, 0, s), col_type(0, 0, 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0); - this->value[1] = col_type(0, s, 0); - this->value[2] = col_type(0, 0, s); - this->value[3] = col_type(0, 0, 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat - ( - T const& x0, T const& y0, T const& z0, - T const& x1, T const& y1, T const& z1, - T const& x2, T const& y2, T const& z2, - T const& x3, T const& y3, T const& z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); - this->value[3] = col_type(x3, y3, z3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - // -- Conversion constructors -- - - template - template< - typename X0, typename Y0, typename Z0, - typename X1, typename Y1, typename Z1, - typename X2, typename Y2, typename Z2, - typename X3, typename Y3, typename Z3> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat - ( - X0 const& x0, Y0 const& y0, Z0 const& z0, - X1 const& x1, Y1 const& y1, Z1 const& z1, - X2 const& x2, Y2 const& y2, Z2 const& z2, - X3 const& x3, Y3 const& y3, Z3 const& z3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x0, y0, z0), col_type(x1, y1, z1), col_type(x2, y2, z2), col_type(x3, y3, z3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0); - this->value[1] = col_type(x1, y1, z1); - this->value[2] = col_type(x2, y2, z2); - this->value[3] = col_type(x3, y3, z3); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(vec<3, V1, Q> const& v1, vec<3, V2, Q> const& v2, vec<3, V3, Q> const& v3, vec<3, V4, Q> const& v4) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); - this->value[3] = col_type(v4); -# endif - } - - // -- Matrix conversions -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 3, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(0, 0, 1); - this->value[3] = col_type(0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 1), col_type(m[3], 0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 1); - this->value[3] = col_type(m[3], 0); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 3, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(0); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type & mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 3, T, Q>::col_type const& mat<4, 3, T, Q>::operator[](typename mat<4, 3, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary updatable operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q>& mat<4, 3, T, Q>::operator=(mat<4, 3, U, Q> const& m) - { - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator+=(mat<4, 3, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator-=(mat<4, 3, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> & mat<4, 3, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator++(int) - { - mat<4, 3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> mat<4, 3, T, Q>::operator--(int) - { - mat<4, 3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator+(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] - s, - m[1] - s, - m[2] - s, - m[3] - s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator-(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(T const& s, mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::col_type operator* - ( - mat<4, 3, T, Q> const& m, - typename mat<4, 3, T, Q>::row_type const& v) - { - return typename mat<4, 3, T, Q>::col_type( - m[0][0] * v.x + m[1][0] * v.y + m[2][0] * v.z + m[3][0] * v.w, - m[0][1] * v.x + m[1][1] * v.y + m[2][1] * v.z + m[3][1] * v.w, - m[0][2] * v.x + m[1][2] * v.y + m[2][2] * v.z + m[3][2] * v.w); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 3, T, Q>::row_type operator* - ( - typename mat<4, 3, T, Q>::col_type const& v, - mat<4, 3, T, Q> const& m) - { - return typename mat<4, 3, T, Q>::row_type( - v.x * m[0][0] + v.y * m[0][1] + v.z * m[0][2], - v.x * m[1][0] + v.y * m[1][1] + v.z * m[1][2], - v.x * m[2][0] + v.y * m[2][1] + v.z * m[2][2], - v.x * m[3][0] + v.y * m[3][1] + v.z * m[3][2]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - T const SrcA00 = m1[0][0]; - T const SrcA01 = m1[0][1]; - T const SrcA02 = m1[0][2]; - T const SrcA10 = m1[1][0]; - T const SrcA11 = m1[1][1]; - T const SrcA12 = m1[1][2]; - T const SrcA20 = m1[2][0]; - T const SrcA21 = m1[2][1]; - T const SrcA22 = m1[2][2]; - T const SrcA30 = m1[3][0]; - T const SrcA31 = m1[3][1]; - T const SrcA32 = m1[3][2]; - - T const SrcB00 = m2[0][0]; - T const SrcB01 = m2[0][1]; - T const SrcB02 = m2[0][2]; - T const SrcB03 = m2[0][3]; - T const SrcB10 = m2[1][0]; - T const SrcB11 = m2[1][1]; - T const SrcB12 = m2[1][2]; - T const SrcB13 = m2[1][3]; - T const SrcB20 = m2[2][0]; - T const SrcB21 = m2[2][1]; - T const SrcB22 = m2[2][2]; - T const SrcB23 = m2[2][3]; - - mat<3, 3, T, Q> Result; - Result[0][0] = SrcA00 * SrcB00 + SrcA10 * SrcB01 + SrcA20 * SrcB02 + SrcA30 * SrcB03; - Result[0][1] = SrcA01 * SrcB00 + SrcA11 * SrcB01 + SrcA21 * SrcB02 + SrcA31 * SrcB03; - Result[0][2] = SrcA02 * SrcB00 + SrcA12 * SrcB01 + SrcA22 * SrcB02 + SrcA32 * SrcB03; - Result[1][0] = SrcA00 * SrcB10 + SrcA10 * SrcB11 + SrcA20 * SrcB12 + SrcA30 * SrcB13; - Result[1][1] = SrcA01 * SrcB10 + SrcA11 * SrcB11 + SrcA21 * SrcB12 + SrcA31 * SrcB13; - Result[1][2] = SrcA02 * SrcB10 + SrcA12 * SrcB11 + SrcA22 * SrcB12 + SrcA32 * SrcB13; - Result[2][0] = SrcA00 * SrcB20 + SrcA10 * SrcB21 + SrcA20 * SrcB22 + SrcA30 * SrcB23; - Result[2][1] = SrcA01 * SrcB20 + SrcA11 * SrcB21 + SrcA21 * SrcB22 + SrcA31 * SrcB23; - Result[2][2] = SrcA02 * SrcB20 + SrcA12 * SrcB21 + SrcA22 * SrcB22 + SrcA32 * SrcB23; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator*(mat<4, 3, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 3, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], - m1[0][0] * m2[3][0] + m1[1][0] * m2[3][1] + m1[2][0] * m2[3][2] + m1[3][0] * m2[3][3], - m1[0][1] * m2[3][0] + m1[1][1] * m2[3][1] + m1[2][1] * m2[3][2] + m1[3][1] * m2[3][3], - m1[0][2] * m2[3][0] + m1[1][2] * m2[3][1] + m1[2][2] * m2[3][2] + m1[3][2] * m2[3][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(mat<4, 3, T, Q> const& m, T const& s) - { - return mat<4, 3, T, Q>( - m[0] / s, - m[1] / s, - m[2] / s, - m[3] / s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> operator/(T const& s, mat<4, 3, T, Q> const& m) - { - return mat<4, 3, T, Q>( - s / m[0], - s / m[1], - s / m[2], - s / m[3]); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 3, T, Q> const& m1, mat<4, 3, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/detail/type_mat4x4.hpp b/src/qged/display/glm/glm/detail/type_mat4x4.hpp deleted file mode 100644 index af606bfcb32..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat4x4.hpp +++ /dev/null @@ -1,220 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_mat4x4.hpp - -#pragma once - -#include "type_vec4.hpp" -#include -#include - -namespace glm -{ - template - struct mat<4, 4, T, Q> - { - typedef vec<4, T, Q> col_type; - typedef vec<4, T, Q> row_type; - typedef mat<4, 4, T, Q> type; - typedef mat<4, 4, T, Q> transpose_type; - typedef T value_type; - - private: - col_type value[4]; - - public: - // -- Accesses -- - - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL col_type & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR col_type const& operator[](length_type i) const; - - // -- Constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR mat() GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR mat(mat<4, 4, T, P> const& m); - - GLM_FUNC_DECL explicit GLM_CONSTEXPR mat(T const& x); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - T const& x0, T const& y0, T const& z0, T const& w0, - T const& x1, T const& y1, T const& z1, T const& w1, - T const& x2, T const& y2, T const& z2, T const& w2, - T const& x3, T const& y3, T const& z3, T const& w3); - GLM_FUNC_DECL GLM_CONSTEXPR mat( - col_type const& v0, - col_type const& v1, - col_type const& v2, - col_type const& v3); - - // -- Conversions -- - - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3, - typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_DECL GLM_CONSTEXPR mat( - X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, - X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, - X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, - X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4); - - template - GLM_FUNC_DECL GLM_CONSTEXPR mat( - vec<4, V1, Q> const& v1, - vec<4, V2, Q> const& v2, - vec<4, V3, Q> const& v3, - vec<4, V4, Q> const& v4); - - // -- Matrix conversions -- - - template - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 4, U, P> const& m); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 3, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<2, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 2, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<3, 4, T, Q> const& x); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR mat(mat<4, 3, T, Q> const& x); - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator+=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator-=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator*=(mat<4, 4, U, Q> const& m); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(U s); - template - GLM_FUNC_DECL mat<4, 4, T, Q> & operator/=(mat<4, 4, U, Q> const& m); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL mat<4, 4, T, Q> & operator++(); - GLM_FUNC_DECL mat<4, 4, T, Q> & operator--(); - GLM_FUNC_DECL mat<4, 4, T, Q> operator++(int); - GLM_FUNC_DECL mat<4, 4, T, Q> operator--(int); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m); - - // -- Binary operators -- - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator*(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator*(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v); - - template - GLM_FUNC_DECL typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m); - - template - GLM_FUNC_DECL mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); - - template - GLM_FUNC_DECL bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_mat4x4.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/qged/display/glm/glm/detail/type_mat4x4.inl b/src/qged/display/glm/glm/detail/type_mat4x4.inl deleted file mode 100644 index e38b87f77e7..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat4x4.inl +++ /dev/null @@ -1,706 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - // -- Constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat() -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALIZER_LIST - : value{col_type(1, 0, 0, 0), col_type(0, 1, 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if GLM_CONFIG_CTOR_INIT == GLM_CTOR_INITIALISATION - this->value[0] = col_type(1, 0, 0, 0); - this->value[1] = col_type(0, 1, 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, T, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(T const& s) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(s, 0, 0, 0), col_type(0, s, 0, 0), col_type(0, 0, s, 0), col_type(0, 0, 0, s)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(s, 0, 0, 0); - this->value[1] = col_type(0, s, 0, 0); - this->value[2] = col_type(0, 0, s, 0); - this->value[3] = col_type(0, 0, 0, s); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat - ( - T const& x0, T const& y0, T const& z0, T const& w0, - T const& x1, T const& y1, T const& z1, T const& w1, - T const& x2, T const& y2, T const& z2, T const& w2, - T const& x3, T const& y3, T const& z3, T const& w3 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{ - col_type(x0, y0, z0, w0), - col_type(x1, y1, z1, w1), - col_type(x2, y2, z2, w2), - col_type(x3, y3, z3, w3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x0, y0, z0, w0); - this->value[1] = col_type(x1, y1, z1, w1); - this->value[2] = col_type(x2, y2, z2, w2); - this->value[3] = col_type(x3, y3, z3, w3); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(col_type const& v0, col_type const& v1, col_type const& v2, col_type const& v3) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v0), col_type(v1), col_type(v2), col_type(v3)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = v0; - this->value[1] = v1; - this->value[2] = v2; - this->value[3] = v3; -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 4, U, P> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(m[3])} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0]); - this->value[1] = col_type(m[1]); - this->value[2] = col_type(m[2]); - this->value[3] = col_type(m[3]); -# endif - } - - // -- Conversions -- - - template - template< - typename X1, typename Y1, typename Z1, typename W1, - typename X2, typename Y2, typename Z2, typename W2, - typename X3, typename Y3, typename Z3, typename W3, - typename X4, typename Y4, typename Z4, typename W4> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat - ( - X1 const& x1, Y1 const& y1, Z1 const& z1, W1 const& w1, - X2 const& x2, Y2 const& y2, Z2 const& z2, W2 const& w2, - X3 const& x3, Y3 const& y3, Z3 const& z3, W3 const& w3, - X4 const& x4, Y4 const& y4, Z4 const& z4, W4 const& w4 - ) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(x1, y1, z1, w1), col_type(x2, y2, z2, w2), col_type(x3, y3, z3, w3), col_type(x4, y4, z4, w4)} -# endif - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 5th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 6th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 7th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 8th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 9th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 10th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 11th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 12th parameter type invalid."); - - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 13th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 14th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 15th parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 16th parameter type invalid."); - -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(x1, y1, z1, w1); - this->value[1] = col_type(x2, y2, z2, w2); - this->value[2] = col_type(x3, y3, z3, w3); - this->value[3] = col_type(x4, y4, z4, w4); -# endif - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(vec<4, V1, Q> const& v1, vec<4, V2, Q> const& v2, vec<4, V3, Q> const& v3, vec<4, V4, Q> const& v4) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(v1), col_type(v2), col_type(v3), col_type(v4)} -# endif - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 1st parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 2nd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 3rd parameter type invalid."); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559 || std::numeric_limits::is_integer || GLM_CONFIG_UNRESTRICTED_GENTYPE, "*mat4x4 constructor only takes float and integer types, 4th parameter type invalid."); - -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(v1); - this->value[1] = col_type(v2); - this->value[2] = col_type(v3); - this->value[3] = col_type(v4); -# endif - } - - // -- Matrix conversions -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(m[2], 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(m[2], 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<2, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 2, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0, 0), col_type(m[1], 0, 0), col_type(0, 0, 1, 0), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0, 0); - this->value[1] = col_type(m[1], 0, 0); - this->value[2] = col_type(0, 0, 1, 0); - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<3, 4, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0]), col_type(m[1]), col_type(m[2]), col_type(0, 0, 0, 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = col_type(0, 0, 0, 1); -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR mat<4, 4, T, Q>::mat(mat<4, 3, T, Q> const& m) -# if GLM_HAS_INITIALIZER_LISTS - : value{col_type(m[0], 0), col_type(m[1], 0), col_type(m[2], 0), col_type(m[3], 1)} -# endif - { -# if !GLM_HAS_INITIALIZER_LISTS - this->value[0] = col_type(m[0], 0); - this->value[1] = col_type(m[1], 0); - this->value[2] = col_type(m[2], 0); - this->value[3] = col_type(m[3], 1); -# endif - } - - // -- Accesses -- - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type & mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) - { - assert(i < this->length()); - return this->value[i]; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR typename mat<4, 4, T, Q>::col_type const& mat<4, 4, T, Q>::operator[](typename mat<4, 4, T, Q>::length_type i) const - { - assert(i < this->length()); - return this->value[i]; - } - - // -- Unary arithmetic operators -- - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator=(mat<4, 4, U, Q> const& m) - { - //memcpy could be faster - //memcpy(&this->value, &m.value, 16 * sizeof(valType)); - this->value[0] = m[0]; - this->value[1] = m[1]; - this->value[2] = m[2]; - this->value[3] = m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(U s) - { - this->value[0] += s; - this->value[1] += s; - this->value[2] += s; - this->value[3] += s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q>& mat<4, 4, T, Q>::operator+=(mat<4, 4, U, Q> const& m) - { - this->value[0] += m[0]; - this->value[1] += m[1]; - this->value[2] += m[2]; - this->value[3] += m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(U s) - { - this->value[0] -= s; - this->value[1] -= s; - this->value[2] -= s; - this->value[3] -= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator-=(mat<4, 4, U, Q> const& m) - { - this->value[0] -= m[0]; - this->value[1] -= m[1]; - this->value[2] -= m[2]; - this->value[3] -= m[3]; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(U s) - { - this->value[0] *= s; - this->value[1] *= s; - this->value[2] *= s; - this->value[3] *= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator*=(mat<4, 4, U, Q> const& m) - { - return (*this = *this * m); - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(U s) - { - this->value[0] /= s; - this->value[1] /= s; - this->value[2] /= s; - this->value[3] /= s; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator/=(mat<4, 4, U, Q> const& m) - { - return *this *= inverse(m); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator++() - { - ++this->value[0]; - ++this->value[1]; - ++this->value[2]; - ++this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> & mat<4, 4, T, Q>::operator--() - { - --this->value[0]; - --this->value[1]; - --this->value[2]; - --this->value[3]; - return *this; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator++(int) - { - mat<4, 4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat<4, 4, T, Q>::operator--(int) - { - mat<4, 4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m) - { - return m; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - -m[0], - -m[1], - -m[2], - -m[3]); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0] + s, - m[1] + s, - m[2] + s, - m[3] + s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator+(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 4, T, Q>( - m1[0] + m2[0], - m1[1] + m2[1], - m1[2] + m2[2], - m1[3] + m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] - s, - m[1] - s, - m[2] - s, - m[3] - s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - s - m[0], - s - m[1], - s - m[2], - s - m[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator-(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return mat<4, 4, T, Q>( - m1[0] - m2[0], - m1[1] - m2[1], - m1[2] - m2[2], - m1[3] - m2[3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m, T const & s) - { - return mat<4, 4, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0] * s, - m[1] * s, - m[2] * s, - m[3] * s); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator* - ( - mat<4, 4, T, Q> const& m, - typename mat<4, 4, T, Q>::row_type const& v - ) - { -/* - __m128 v0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 v1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 v2 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 v3 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(m[0].data, v0); - __m128 m1 = _mm_mul_ps(m[1].data, v1); - __m128 a0 = _mm_add_ps(m0, m1); - - __m128 m2 = _mm_mul_ps(m[2].data, v2); - __m128 m3 = _mm_mul_ps(m[3].data, v3); - __m128 a1 = _mm_add_ps(m2, m3); - - __m128 a2 = _mm_add_ps(a0, a1); - - return typename mat<4, 4, T, Q>::col_type(a2); -*/ - - typename mat<4, 4, T, Q>::col_type const Mov0(v[0]); - typename mat<4, 4, T, Q>::col_type const Mov1(v[1]); - typename mat<4, 4, T, Q>::col_type const Mul0 = m[0] * Mov0; - typename mat<4, 4, T, Q>::col_type const Mul1 = m[1] * Mov1; - typename mat<4, 4, T, Q>::col_type const Add0 = Mul0 + Mul1; - typename mat<4, 4, T, Q>::col_type const Mov2(v[2]); - typename mat<4, 4, T, Q>::col_type const Mov3(v[3]); - typename mat<4, 4, T, Q>::col_type const Mul2 = m[2] * Mov2; - typename mat<4, 4, T, Q>::col_type const Mul3 = m[3] * Mov3; - typename mat<4, 4, T, Q>::col_type const Add1 = Mul2 + Mul3; - typename mat<4, 4, T, Q>::col_type const Add2 = Add0 + Add1; - return Add2; - -/* - return typename mat<4, 4, T, Q>::col_type( - m[0][0] * v[0] + m[1][0] * v[1] + m[2][0] * v[2] + m[3][0] * v[3], - m[0][1] * v[0] + m[1][1] * v[1] + m[2][1] * v[2] + m[3][1] * v[3], - m[0][2] * v[0] + m[1][2] * v[1] + m[2][2] * v[2] + m[3][2] * v[3], - m[0][3] * v[0] + m[1][3] * v[1] + m[2][3] * v[2] + m[3][3] * v[3]); -*/ - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator* - ( - typename mat<4, 4, T, Q>::col_type const& v, - mat<4, 4, T, Q> const& m - ) - { - return typename mat<4, 4, T, Q>::row_type( - m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3], - m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3], - m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3], - m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<2, 4, T, Q> const& m2) - { - return mat<2, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<3, 4, T, Q> const& m2) - { - return mat<3, 4, T, Q>( - m1[0][0] * m2[0][0] + m1[1][0] * m2[0][1] + m1[2][0] * m2[0][2] + m1[3][0] * m2[0][3], - m1[0][1] * m2[0][0] + m1[1][1] * m2[0][1] + m1[2][1] * m2[0][2] + m1[3][1] * m2[0][3], - m1[0][2] * m2[0][0] + m1[1][2] * m2[0][1] + m1[2][2] * m2[0][2] + m1[3][2] * m2[0][3], - m1[0][3] * m2[0][0] + m1[1][3] * m2[0][1] + m1[2][3] * m2[0][2] + m1[3][3] * m2[0][3], - m1[0][0] * m2[1][0] + m1[1][0] * m2[1][1] + m1[2][0] * m2[1][2] + m1[3][0] * m2[1][3], - m1[0][1] * m2[1][0] + m1[1][1] * m2[1][1] + m1[2][1] * m2[1][2] + m1[3][1] * m2[1][3], - m1[0][2] * m2[1][0] + m1[1][2] * m2[1][1] + m1[2][2] * m2[1][2] + m1[3][2] * m2[1][3], - m1[0][3] * m2[1][0] + m1[1][3] * m2[1][1] + m1[2][3] * m2[1][2] + m1[3][3] * m2[1][3], - m1[0][0] * m2[2][0] + m1[1][0] * m2[2][1] + m1[2][0] * m2[2][2] + m1[3][0] * m2[2][3], - m1[0][1] * m2[2][0] + m1[1][1] * m2[2][1] + m1[2][1] * m2[2][2] + m1[3][1] * m2[2][3], - m1[0][2] * m2[2][0] + m1[1][2] * m2[2][1] + m1[2][2] * m2[2][2] + m1[3][2] * m2[2][3], - m1[0][3] * m2[2][0] + m1[1][3] * m2[2][1] + m1[2][3] * m2[2][2] + m1[3][3] * m2[2][3]); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator*(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - typename mat<4, 4, T, Q>::col_type const SrcA0 = m1[0]; - typename mat<4, 4, T, Q>::col_type const SrcA1 = m1[1]; - typename mat<4, 4, T, Q>::col_type const SrcA2 = m1[2]; - typename mat<4, 4, T, Q>::col_type const SrcA3 = m1[3]; - - typename mat<4, 4, T, Q>::col_type const SrcB0 = m2[0]; - typename mat<4, 4, T, Q>::col_type const SrcB1 = m2[1]; - typename mat<4, 4, T, Q>::col_type const SrcB2 = m2[2]; - typename mat<4, 4, T, Q>::col_type const SrcB3 = m2[3]; - - mat<4, 4, T, Q> Result; - Result[0] = SrcA0 * SrcB0[0] + SrcA1 * SrcB0[1] + SrcA2 * SrcB0[2] + SrcA3 * SrcB0[3]; - Result[1] = SrcA0 * SrcB1[0] + SrcA1 * SrcB1[1] + SrcA2 * SrcB1[2] + SrcA3 * SrcB1[3]; - Result[2] = SrcA0 * SrcB2[0] + SrcA1 * SrcB2[1] + SrcA2 * SrcB2[2] + SrcA3 * SrcB2[3]; - Result[3] = SrcA0 * SrcB3[0] + SrcA1 * SrcB3[1] + SrcA2 * SrcB3[2] + SrcA3 * SrcB3[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m, T const& s) - { - return mat<4, 4, T, Q>( - m[0] / s, - m[1] / s, - m[2] / s, - m[3] / s); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(T const& s, mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - s / m[0], - s / m[1], - s / m[2], - s / m[3]); - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::col_type operator/(mat<4, 4, T, Q> const& m, typename mat<4, 4, T, Q>::row_type const& v) - { - return inverse(m) * v; - } - - template - GLM_FUNC_QUALIFIER typename mat<4, 4, T, Q>::row_type operator/(typename mat<4, 4, T, Q>::col_type const& v, mat<4, 4, T, Q> const& m) - { - return v * inverse(m); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> operator/(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - mat<4, 4, T, Q> m1_copy(m1); - return m1_copy /= m2; - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return (m1[0] == m2[0]) && (m1[1] == m2[1]) && (m1[2] == m2[2]) && (m1[3] == m2[3]); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2) - { - return (m1[0] != m2[0]) || (m1[1] != m2[1]) || (m1[2] != m2[2]) || (m1[3] != m2[3]); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_mat4x4_simd.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/type_mat4x4_simd.inl b/src/qged/display/glm/glm/detail/type_mat4x4_simd.inl deleted file mode 100644 index fb3a16f0629..00000000000 --- a/src/qged/display/glm/glm/detail/type_mat4x4_simd.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref core - -namespace glm -{ - -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/type_quat.hpp b/src/qged/display/glm/glm/detail/type_quat.hpp deleted file mode 100644 index c0625c0d4e9..00000000000 --- a/src/qged/display/glm/glm/detail/type_quat.hpp +++ /dev/null @@ -1,217 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_quat.hpp - -#pragma once - -// Dependency: -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat4x4.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" -#include "../ext/vector_relational.hpp" -#include "../ext/quaternion_relational.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/matrix_transform.hpp" - -namespace glm -{ - template - struct qua - { - // -- Implementation detail -- - - typedef qua type; - typedef T value_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_LANG & GLM_LANG_CXXMS_FLAG - union - { -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - struct { T w, x, y, z; }; -# else - struct { T x, y, z, w; }; -# endif - - typename detail::storage<4, T, detail::is_aligned::value>::type data; - }; -# else -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - T w, x, y, z; -# else - T x, y, z, w; -# endif -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - typedef length_t length_type; - - /// Return the count of components of a quaternion - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR qua(qua const& q); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua(T s, vec<3, T, Q> const& v); - GLM_FUNC_DECL GLM_CONSTEXPR qua(T w, T x, T y, T z); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(qua const& q); - - /// Explicit conversion operators -# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - GLM_FUNC_DECL explicit operator mat<3, 3, T, Q>() const; - GLM_FUNC_DECL explicit operator mat<4, 4, T, Q>() const; -# endif - - /// Create a quaternion from two normalized axis - /// - /// @param u A first normalized axis - /// @param v A second normalized axis - /// @see gtc_quaternion - /// @see http://lolengine.net/blog/2013/09/18/beautiful-maths-quaternion-from-vectors - GLM_FUNC_DECL qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v); - - /// Build a quaternion from euler angles (pitch, yaw, roll), in radians. - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT qua(vec<3, T, Q> const& eulerAngles); - GLM_FUNC_DECL GLM_EXPLICIT qua(mat<3, 3, T, Q> const& q); - GLM_FUNC_DECL GLM_EXPLICIT qua(mat<4, 4, T, Q> const& q); - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator+=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator-=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(qua const& q); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator*=(U s); - template - GLM_FUNC_DECL GLM_CONSTEXPR qua& operator/=(U s); - }; - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator+(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator-(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, qua const& p); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(qua const& q, T const& s); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator*(T const& s, qua const& q); - - template - GLM_FUNC_DECL GLM_CONSTEXPR qua operator/(qua const& q, T const& s); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2); -} //namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_quat.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/qged/display/glm/glm/detail/type_quat.inl b/src/qged/display/glm/glm/detail/type_quat.inl deleted file mode 100644 index 67b9310ac2c..00000000000 --- a/src/qged/display/glm/glm/detail/type_quat.inl +++ /dev/null @@ -1,408 +0,0 @@ -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include "../ext/quaternion_geometric.hpp" -#include - -namespace glm{ -namespace detail -{ - template - struct genTypeTrait > - { - static const genTypeEnum GENTYPE = GENTYPE_QUAT; - }; - - template - struct compute_dot, T, Aligned> - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static T call(qua const& a, qua const& b) - { - vec<4, T, Q> tmp(a.w * b.w, a.x * b.x, a.y * b.y, a.z * b.z); - return (tmp.x + tmp.y) + (tmp.z + tmp.w); - } - }; - - template - struct compute_quat_add - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) - { - return qua(q.w + p.w, q.x + p.x, q.y + p.y, q.z + p.z); - } - }; - - template - struct compute_quat_sub - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, qua const& p) - { - return qua(q.w - p.w, q.x - p.x, q.y - p.y, q.z - p.z); - } - }; - - template - struct compute_quat_mul_scalar - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) - { - return qua(q.w * s, q.x * s, q.y * s, q.z * s); - } - }; - - template - struct compute_quat_div_scalar - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static qua call(qua const& q, T s) - { - return qua(q.w / s, q.x / s, q.y / s, q.z / s); - } - }; - - template - struct compute_quat_mul_vec4 - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(qua const& q, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); - } - }; -}//namespace detail - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & qua::operator[](typename qua::length_type i) - { - assert(i >= 0 && i < this->length()); -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - return (&w)[i]; -# else - return (&x)[i]; -# endif - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& qua::operator[](typename qua::length_type i) const - { - assert(i >= 0 && i < this->length()); -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - return (&w)[i]; -# else - return (&x)[i]; -# endif - } - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(1), x(0), y(0), z(0) -# else - : x(0), y(0), z(0), w(1) -# endif -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(q.w), x(q.x), y(q.y), z(q.z) -# else - : x(q.x), y(q.y), z(q.z), w(q.w) -# endif - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(q.w), x(q.x), y(q.y), z(q.z) -# else - : x(q.x), y(q.y), z(q.z), w(q.w) -# endif - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T s, vec<3, T, Q> const& v) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(s), x(v.x), y(v.y), z(v.z) -# else - : x(v.x), y(v.y), z(v.z), w(s) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(T _w, T _x, T _y, T _z) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(_w), x(_x), y(_y), z(_z) -# else - : x(_x), y(_y), z(_z), w(_w) -# endif - {} - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(qua const& q) -# ifdef GLM_FORCE_QUAT_DATA_WXYZ - : w(static_cast(q.w)), x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)) -# else - : x(static_cast(q.x)), y(static_cast(q.y)), z(static_cast(q.z)), w(static_cast(q.w)) -# endif - {} - - //template - //GLM_FUNC_QUALIFIER qua::qua - //( - // valType const& pitch, - // valType const& yaw, - // valType const& roll - //) - //{ - // vec<3, valType> eulerAngle(pitch * valType(0.5), yaw * valType(0.5), roll * valType(0.5)); - // vec<3, valType> c = glm::cos(eulerAngle * valType(0.5)); - // vec<3, valType> s = glm::sin(eulerAngle * valType(0.5)); - // - // this->w = c.x * c.y * c.z + s.x * s.y * s.z; - // this->x = s.x * c.y * c.z - c.x * s.y * s.z; - // this->y = c.x * s.y * c.z + s.x * c.y * s.z; - // this->z = c.x * c.y * s.z - s.x * s.y * c.z; - //} - - template - GLM_FUNC_QUALIFIER qua::qua(vec<3, T, Q> const& u, vec<3, T, Q> const& v) - { - T norm_u_norm_v = sqrt(dot(u, u) * dot(v, v)); - T real_part = norm_u_norm_v + dot(u, v); - vec<3, T, Q> t; - - if(real_part < static_cast(1.e-6f) * norm_u_norm_v) - { - // If u and v are exactly opposite, rotate 180 degrees - // around an arbitrary orthogonal axis. Axis normalisation - // can happen later, when we normalise the quaternion. - real_part = static_cast(0); - t = abs(u.x) > abs(u.z) ? vec<3, T, Q>(-u.y, u.x, static_cast(0)) : vec<3, T, Q>(static_cast(0), -u.z, u.y); - } - else - { - // Otherwise, build quaternion the standard way. - t = cross(u, v); - } - - *this = normalize(qua(real_part, t.x, t.y, t.z)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua::qua(vec<3, T, Q> const& eulerAngle) - { - vec<3, T, Q> c = glm::cos(eulerAngle * T(0.5)); - vec<3, T, Q> s = glm::sin(eulerAngle * T(0.5)); - - this->w = c.x * c.y * c.z + s.x * s.y * s.z; - this->x = s.x * c.y * c.z - c.x * s.y * s.z; - this->y = c.x * s.y * c.z + s.x * c.y * s.z; - this->z = c.x * c.y * s.z - s.x * s.y * c.z; - } - - template - GLM_FUNC_QUALIFIER qua::qua(mat<3, 3, T, Q> const& m) - { - *this = quat_cast(m); - } - - template - GLM_FUNC_QUALIFIER qua::qua(mat<4, 4, T, Q> const& m) - { - *this = quat_cast(m); - } - -# if GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - template - GLM_FUNC_QUALIFIER qua::operator mat<3, 3, T, Q>() const - { - return mat3_cast(*this); - } - - template - GLM_FUNC_QUALIFIER qua::operator mat<4, 4, T, Q>() const - { - return mat4_cast(*this); - } -# endif//GLM_HAS_EXPLICIT_CONVERSION_OPERATORS - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) - { - this->w = q.w; - this->x = q.x; - this->y = q.y; - this->z = q.z; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator=(qua const& q) - { - this->w = static_cast(q.w); - this->x = static_cast(q.x); - this->y = static_cast(q.y); - this->z = static_cast(q.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator+=(qua const& q) - { - return (*this = detail::compute_quat_add::value>::call(*this, qua(q))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator-=(qua const& q) - { - return (*this = detail::compute_quat_sub::value>::call(*this, qua(q))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(qua const& r) - { - qua const p(*this); - qua const q(r); - - this->w = p.w * q.w - p.x * q.x - p.y * q.y - p.z * q.z; - this->x = p.w * q.x + p.x * q.w + p.y * q.z - p.z * q.y; - this->y = p.w * q.y + p.y * q.w + p.z * q.x - p.x * q.z; - this->z = p.w * q.z + p.z * q.w + p.x * q.y - p.y * q.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator*=(U s) - { - return (*this = detail::compute_quat_mul_scalar::value>::call(*this, static_cast(s))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua & qua::operator/=(U s) - { - return (*this = detail::compute_quat_div_scalar::value>::call(*this, static_cast(s))); - } - - // -- Unary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q) - { - return q; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q) - { - return qua(-q.w, -q.x, -q.y, -q.z); - } - - // -- Binary operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator+(qua const& q, qua const& p) - { - return qua(q) += p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator-(qua const& q, qua const& p) - { - return qua(q) -= p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, qua const& p) - { - return qua(q) *= p; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(qua const& q, vec<3, T, Q> const& v) - { - vec<3, T, Q> const QuatVector(q.x, q.y, q.z); - vec<3, T, Q> const uv(glm::cross(QuatVector, v)); - vec<3, T, Q> const uuv(glm::cross(QuatVector, uv)); - - return v + ((uv * q.w) + uuv) * static_cast(2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, qua const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(qua const& q, vec<4, T, Q> const& v) - { - return detail::compute_quat_mul_vec4::value>::call(q, v); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, qua const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(qua const& q, T const& s) - { - return qua( - q.w * s, q.x * s, q.y * s, q.z * s); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator*(T const& s, qua const& q) - { - return q * s; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua operator/(qua const& q, T const& s) - { - return qua( - q.w / s, q.x / s, q.y / s, q.z / s); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(qua const& q1, qua const& q2) - { - return q1.x == q2.x && q1.y == q2.y && q1.z == q2.z && q1.w == q2.w; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(qua const& q1, qua const& q2) - { - return q1.x != q2.x || q1.y != q2.y || q1.z != q2.z || q1.w != q2.w; - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_quat_simd.inl" -#endif - diff --git a/src/qged/display/glm/glm/detail/type_quat_simd.inl b/src/qged/display/glm/glm/detail/type_quat_simd.inl deleted file mode 100644 index 3333e59f1c7..00000000000 --- a/src/qged/display/glm/glm/detail/type_quat_simd.inl +++ /dev/null @@ -1,188 +0,0 @@ -/// @ref core - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ -/* - template - struct compute_quat_mul - { - static qua call(qua const& q1, qua const& q2) - { - // SSE2 STATS: 11 shuffle, 8 mul, 8 add - // SSE4 STATS: 3 shuffle, 4 mul, 4 dpps - - __m128 const mul0 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(0, 1, 2, 3))); - __m128 const mul1 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(1, 0, 3, 2))); - __m128 const mul2 = _mm_mul_ps(q1.Data, _mm_shuffle_ps(q2.Data, q2.Data, _MM_SHUFFLE(2, 3, 0, 1))); - __m128 const mul3 = _mm_mul_ps(q1.Data, q2.Data); - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - __m128 const add0 = _mm_dp_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f), 0xff); - __m128 const add1 = _mm_dp_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f), 0xff); - __m128 const add2 = _mm_dp_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f), 0xff); - __m128 const add3 = _mm_dp_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f), 0xff); -# else - __m128 const mul4 = _mm_mul_ps(mul0, _mm_set_ps(1.0f, -1.0f, 1.0f, 1.0f)); - __m128 const add0 = _mm_add_ps(mul0, _mm_movehl_ps(mul4, mul4)); - __m128 const add4 = _mm_add_ss(add0, _mm_shuffle_ps(add0, add0, 1)); - - __m128 const mul5 = _mm_mul_ps(mul1, _mm_set_ps(1.0f, 1.0f, 1.0f, -1.0f)); - __m128 const add1 = _mm_add_ps(mul1, _mm_movehl_ps(mul5, mul5)); - __m128 const add5 = _mm_add_ss(add1, _mm_shuffle_ps(add1, add1, 1)); - - __m128 const mul6 = _mm_mul_ps(mul2, _mm_set_ps(1.0f, 1.0f, -1.0f, 1.0f)); - __m128 const add2 = _mm_add_ps(mul6, _mm_movehl_ps(mul6, mul6)); - __m128 const add6 = _mm_add_ss(add2, _mm_shuffle_ps(add2, add2, 1)); - - __m128 const mul7 = _mm_mul_ps(mul3, _mm_set_ps(1.0f, -1.0f, -1.0f, -1.0f)); - __m128 const add3 = _mm_add_ps(mul3, _mm_movehl_ps(mul7, mul7)); - __m128 const add7 = _mm_add_ss(add3, _mm_shuffle_ps(add3, add3, 1)); - #endif - - // This SIMD code is a politically correct way of doing this, but in every test I've tried it has been slower than - // the final code below. I'll keep this here for reference - maybe somebody else can do something better... - // - //__m128 xxyy = _mm_shuffle_ps(add4, add5, _MM_SHUFFLE(0, 0, 0, 0)); - //__m128 zzww = _mm_shuffle_ps(add6, add7, _MM_SHUFFLE(0, 0, 0, 0)); - // - //return _mm_shuffle_ps(xxyy, zzww, _MM_SHUFFLE(2, 0, 2, 0)); - - qua Result; - _mm_store_ss(&Result.x, add4); - _mm_store_ss(&Result.y, add5); - _mm_store_ss(&Result.z, add6); - _mm_store_ss(&Result.w, add7); - return Result; - } - }; -*/ - - template - struct compute_quat_add - { - static qua call(qua const& q, qua const& p) - { - qua Result; - Result.data = _mm_add_ps(q.data, p.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_add - { - static qua call(qua const& a, qua const& b) - { - qua Result; - Result.data = _mm256_add_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_quat_sub - { - static qua call(qua const& q, qua const& p) - { - vec<4, float, Q> Result; - Result.data = _mm_sub_ps(q.data, p.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_sub - { - static qua call(qua const& a, qua const& b) - { - qua Result; - Result.data = _mm256_sub_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_quat_mul_scalar - { - static qua call(qua const& q, float s) - { - vec<4, float, Q> Result; - Result.data = _mm_mul_ps(q.data, _mm_set_ps1(s)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_mul_scalar - { - static qua call(qua const& q, double s) - { - qua Result; - Result.data = _mm256_mul_pd(q.data, _mm_set_ps1(s)); - return Result; - } - }; -# endif - - template - struct compute_quat_div_scalar - { - static qua call(qua const& q, float s) - { - vec<4, float, Q> Result; - Result.data = _mm_div_ps(q.data, _mm_set_ps1(s)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_quat_div_scalar - { - static qua call(qua const& q, double s) - { - qua Result; - Result.data = _mm256_div_pd(q.data, _mm_set_ps1(s)); - return Result; - } - }; -# endif - - template - struct compute_quat_mul_vec4 - { - static vec<4, float, Q> call(qua const& q, vec<4, float, Q> const& v) - { - __m128 const q_wwww = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 3, 3, 3)); - __m128 const q_swp0 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 const q_swp1 = _mm_shuffle_ps(q.data, q.data, _MM_SHUFFLE(3, 1, 0, 2)); - __m128 const v_swp0 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 const v_swp1 = _mm_shuffle_ps(v.data, v.data, _MM_SHUFFLE(3, 1, 0, 2)); - - __m128 uv = _mm_sub_ps(_mm_mul_ps(q_swp0, v_swp1), _mm_mul_ps(q_swp1, v_swp0)); - __m128 uv_swp0 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 0, 2, 1)); - __m128 uv_swp1 = _mm_shuffle_ps(uv, uv, _MM_SHUFFLE(3, 1, 0, 2)); - __m128 uuv = _mm_sub_ps(_mm_mul_ps(q_swp0, uv_swp1), _mm_mul_ps(q_swp1, uv_swp0)); - - __m128 const two = _mm_set1_ps(2.0f); - uv = _mm_mul_ps(uv, _mm_mul_ps(q_wwww, two)); - uuv = _mm_mul_ps(uuv, two); - - vec<4, float, Q> Result; - Result.data = _mm_add_ps(v.Data, _mm_add_ps(uv, uuv)); - return Result; - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/src/qged/display/glm/glm/detail/type_vec1.hpp b/src/qged/display/glm/glm/detail/type_vec1.hpp deleted file mode 100644 index 89dd8b7f36c..00000000000 --- a/src/qged/display/glm/glm/detail/type_vec1.hpp +++ /dev/null @@ -1,339 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_vec1.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<1, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<1, T, Q> type; - typedef vec<1, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - T x; - T r; - T s; - - typename detail::storage<1, T, detail::is_aligned::value>::type data; -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - _GLM_SWIZZLE1_2_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_2_MEMBERS(T, Q, s) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_3_MEMBERS(T, Q, s) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, x) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, r) - _GLM_SWIZZLE1_4_MEMBERS(T, Q, s) -# endif -*/ - }; -# else - union {T x, r, s;}; -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC1(T, Q) -# endif -*/ -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 1;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<1, U, P> const& v); - - // -- Swizzle constructors -- -/* -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<1, T, Q, E0, -1,-2,-3> const& that) - { - *this = that(); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -*/ - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator/=(vec<1, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> & operator>>=(vec<1, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec1.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/qged/display/glm/glm/detail/type_vec1.inl b/src/qged/display/glm/glm/detail/type_vec1.inl deleted file mode 100644 index c5883cebc96..00000000000 --- a/src/qged/display/glm/glm/detail/type_vec1.inl +++ /dev/null @@ -1,551 +0,0 @@ -/// @ref core - -#include "./compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, Q> const& v) - : x(v.x) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, T, P> const& v) - : x(v.x) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(T scalar) - : x(scalar) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<2, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) - { - return x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<1, T, Q>::operator[](typename vec<1, T, Q>::length_type) const - { - return x; - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, T, Q> const& v) - { - this->x = v.x; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator=(vec<1, U, Q> const& v) - { - this->x = static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(U scalar) - { - this->x /= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator++() - { - ++this->x; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator--() - { - --this->x; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator++(int) - { - vec<1, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> vec<1, T, Q>::operator--(int) - { - vec<1, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(U scalar) - { - this->x %= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(U scalar) - { - this->x &= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(U scalar) - { - this->x |= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= U(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(U scalar) - { - this->x ^= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(U scalar) - { - this->x <<= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> & vec<1, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - return *this; - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - -v.x); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar + v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator+(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x + v2.x); - } - - //operator- - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar - v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator-(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x - v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar * v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator*(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x * v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar / v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator/(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x / v2.x); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar % v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator%(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x % v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar & v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator&(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x & v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar | v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator|(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x | v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - v.x ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - scalar ^ v.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator^(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - v1.x ^ v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - static_cast(v.x << scalar)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - static_cast(scalar << v.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator<<(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - static_cast(v1.x << v2.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v, T scalar) - { - return vec<1, T, Q>( - static_cast(v.x >> scalar)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(T scalar, vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - static_cast(scalar >> v.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator>>(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<1, T, Q>( - static_cast(v1.x >> v2.x)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, T, Q> operator~(vec<1, T, Q> const& v) - { - return vec<1, T, Q>( - ~v.x); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return detail::compute_equal::is_iec559>::call(v1.x, v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<1, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator&&(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) - { - return vec<1, bool, Q>(v1.x && v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<1, bool, Q> operator||(vec<1, bool, Q> const& v1, vec<1, bool, Q> const& v2) - { - return vec<1, bool, Q>(v1.x || v2.x); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/type_vec2.hpp b/src/qged/display/glm/glm/detail/type_vec2.hpp deleted file mode 100644 index 73a263db475..00000000000 --- a/src/qged/display/glm/glm/detail/type_vec2.hpp +++ /dev/null @@ -1,430 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_vec2.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<2, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<2, T, Q> type; - typedef vec<2, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct{ T x, y; }; - struct{ T r, g; }; - struct{ T s, t; }; - - typename detail::storage<2, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE2_2_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_2_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_2_MEMBERS(T, Q, s, t) - GLM_SWIZZLE2_3_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_3_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_3_MEMBERS(T, Q, s, t) - GLM_SWIZZLE2_4_MEMBERS(T, Q, x, y) - GLM_SWIZZLE2_4_MEMBERS(T, Q, r, g) - GLM_SWIZZLE2_4_MEMBERS(T, Q, s, t) -# endif - }; -# else - union {T x, r, s;}; - union {T y, g, t;}; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC2(T, Q) -# endif//GLM_CONFIG_SWIZZLE -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} - - GLM_FUNC_DECL GLM_CONSTEXPR T& operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, B y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, B y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A x, vec<1, B, Q> const& y); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, Q> const& x, vec<1, B, Q> const& y); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<2, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1,-1,-2> const& that) - { - *this = that(); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator+=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator-=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator*=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator/=(vec<2, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator%=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator&=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator|=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator^=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator<<=(vec<2, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> & operator>>=(vec<2, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec2.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/qged/display/glm/glm/detail/type_vec2.inl b/src/qged/display/glm/glm/detail/type_vec2.inl deleted file mode 100644 index 8e65d6bb9e2..00000000000 --- a/src/qged/display/glm/glm/detail/type_vec2.inl +++ /dev/null @@ -1,913 +0,0 @@ -/// @ref core - -#include "./compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, Q> const& v) - : x(v.x), y(v.y) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, T, P> const& v) - : x(v.x), y(v.y) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T scalar) - : x(scalar), y(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(T _x, T _y) - : x(_x), y(_y) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, B _y) - : x(static_cast(_x)) - , y(static_cast(_y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, B _y) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(A _x, vec<1, B, Q> const& _y) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<1, A, Q> const& _x, vec<1, B, Q> const& _y) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<2, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<2, T, Q>::operator[](typename vec<2, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator=(vec<2, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - this->y += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator+=(vec<2, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - this->y -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator-=(vec<2, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - this->y *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator*=(vec<2, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(U scalar) - { - this->x /= static_cast(scalar); - this->y /= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator/=(vec<2, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.y); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator++() - { - ++this->x; - ++this->y; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator--() - { - --this->x; - --this->y; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator++(int) - { - vec<2, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> vec<2, T, Q>::operator--(int) - { - vec<2, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(U scalar) - { - this->x %= static_cast(scalar); - this->y %= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= static_cast(v.x); - this->y %= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator%=(vec<2, U, Q> const& v) - { - this->x %= static_cast(v.x); - this->y %= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(U scalar) - { - this->x &= static_cast(scalar); - this->y &= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= static_cast(v.x); - this->y &= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator&=(vec<2, U, Q> const& v) - { - this->x &= static_cast(v.x); - this->y &= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(U scalar) - { - this->x |= static_cast(scalar); - this->y |= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= static_cast(v.x); - this->y |= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator|=(vec<2, U, Q> const& v) - { - this->x |= static_cast(v.x); - this->y |= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(U scalar) - { - this->x ^= static_cast(scalar); - this->y ^= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= static_cast(v.x); - this->y ^= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator^=(vec<2, U, Q> const& v) - { - this->x ^= static_cast(v.x); - this->y ^= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(U scalar) - { - this->x <<= static_cast(scalar); - this->y <<= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator<<=(vec<2, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.y); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - this->y >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> & vec<2, T, Q>::operator>>=(vec<2, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.y); - return *this; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - -v.x, - -v.y); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x + scalar, - v.y + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.y + v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar + v.x, - scalar + v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.x + v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator+(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x + v2.x, - v1.y + v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x - scalar, - v.y - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.y - v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar - v.x, - scalar - v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.x - v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator-(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x - v2.x, - v1.y - v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x * scalar, - v.y * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.y * v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar * v.x, - scalar * v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.x * v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator*(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x * v2.x, - v1.y * v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x / scalar, - v.y / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.y / v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar / v.x, - scalar / v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.x / v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator/(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x / v2.x, - v1.y / v2.y); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x % scalar, - v.y % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.y % v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar % v.x, - scalar % v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.x % v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator%(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x % v2.x, - v1.y % v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x & scalar, - v.y & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.y & v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar & v.x, - scalar & v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.x & v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator&(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x & v2.x, - v1.y & v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x | scalar, - v.y | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.y | v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar | v.x, - scalar | v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.x | v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator|(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x | v2.x, - v1.y | v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x ^ scalar, - v.y ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar ^ v.x, - scalar ^ v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.x ^ v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator^(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x << scalar, - v.y << scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.y << v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar << v.x, - scalar << v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.x << v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator<<(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x << v2.x, - v1.y << v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v, T scalar) - { - return vec<2, T, Q>( - v.x >> scalar, - v.y >> scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.y >> v2.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(T scalar, vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - scalar >> v.x, - scalar >> v.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<1, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.x >> v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator>>(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return vec<2, T, Q>( - v1.x >> v2.x, - v1.y >> v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, T, Q> operator~(vec<2, T, Q> const& v) - { - return vec<2, T, Q>( - ~v.x, - ~v.y); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<2, T, Q> const& v1, vec<2, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator&&(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) - { - return vec<2, bool, Q>(v1.x && v2.x, v1.y && v2.y); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<2, bool, Q> operator||(vec<2, bool, Q> const& v1, vec<2, bool, Q> const& v2) - { - return vec<2, bool, Q>(v1.x || v2.x, v1.y || v2.y); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/type_vec3.hpp b/src/qged/display/glm/glm/detail/type_vec3.hpp deleted file mode 100644 index 4dfebca3ff5..00000000000 --- a/src/qged/display/glm/glm/detail/type_vec3.hpp +++ /dev/null @@ -1,463 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_vec3.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<3, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<3, T, Q> type; - typedef vec<3, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# pragma warning(disable: 4324) // structure was padded due to alignment specifier -# endif -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y, z; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct{ T x, y, z; }; - struct{ T r, g, b; }; - struct{ T s, t, p; }; - - typename detail::storage<3, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE3_2_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_2_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_2_MEMBERS(T, Q, s, t, p) - GLM_SWIZZLE3_3_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_3_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_3_MEMBERS(T, Q, s, t, p) - GLM_SWIZZLE3_4_MEMBERS(T, Q, x, y, z) - GLM_SWIZZLE3_4_MEMBERS(T, Q, r, g, b) - GLM_SWIZZLE3_4_MEMBERS(T, Q, s, t, p) -# endif - }; -# else - union { T x, r, s; }; - union { T y, g, t; }; - union { T z, b, p; }; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC3(T, Q) -# endif//GLM_CONFIG_SWIZZLE -# endif//GLM_LANG - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - /// Return the count of components of the vector - typedef length_t length_type; - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 3;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T a, T b, T c); - - // -- Conversion scalar constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X x, Y y, Z z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<3, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& that) - { - *this = that(); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& scalar) - { - *this = vec(v(), scalar); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& scalar, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) - { - *this = vec(scalar, v()); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q>& operator=(vec<3, T, Q> const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator+=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator-=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator*=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator/=(vec<3, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator%=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator&=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator|=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator^=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator<<=(vec<3, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> & operator>>=(vec<3, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec3.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/qged/display/glm/glm/detail/type_vec3.inl b/src/qged/display/glm/glm/detail/type_vec3.inl deleted file mode 100644 index 6532c9e6e06..00000000000 --- a/src/qged/display/glm/glm/detail/type_vec3.inl +++ /dev/null @@ -1,1068 +0,0 @@ -/// @ref core - -#include "compute_vector_relational.hpp" - -namespace glm -{ - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0), z(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, Q> const& v) - : x(v.x), y(v.y), z(v.z) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, T, P> const& v) - : x(v.x), y(v.y), z(v.z) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T scalar) - : x(scalar), y(scalar), z(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(T _x, T _y, T _z) - : x(_x), y(_y), z(_z) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - , z(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, Z _z) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, B _z) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(A _x, vec<2, B, P> const& _yz) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<3, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T & vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<3, T, Q>::operator[](typename vec<3, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - this->z = v.z; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q>& vec<3, T, Q>::operator=(vec<3, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - this->z = static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(U scalar) - { - this->x += static_cast(scalar); - this->y += static_cast(scalar); - this->z += static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<1, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.x); - this->z += static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator+=(vec<3, U, Q> const& v) - { - this->x += static_cast(v.x); - this->y += static_cast(v.y); - this->z += static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(U scalar) - { - this->x -= static_cast(scalar); - this->y -= static_cast(scalar); - this->z -= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<1, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.x); - this->z -= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator-=(vec<3, U, Q> const& v) - { - this->x -= static_cast(v.x); - this->y -= static_cast(v.y); - this->z -= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(U scalar) - { - this->x *= static_cast(scalar); - this->y *= static_cast(scalar); - this->z *= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<1, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.x); - this->z *= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator*=(vec<3, U, Q> const& v) - { - this->x *= static_cast(v.x); - this->y *= static_cast(v.y); - this->z *= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(U v) - { - this->x /= static_cast(v); - this->y /= static_cast(v); - this->z /= static_cast(v); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<1, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.x); - this->z /= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator/=(vec<3, U, Q> const& v) - { - this->x /= static_cast(v.x); - this->y /= static_cast(v.y); - this->z /= static_cast(v.z); - return *this; - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator++() - { - ++this->x; - ++this->y; - ++this->z; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator--() - { - --this->x; - --this->y; - --this->z; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator++(int) - { - vec<3, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> vec<3, T, Q>::operator--(int) - { - vec<3, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(U scalar) - { - this->x %= scalar; - this->y %= scalar; - this->z %= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<1, U, Q> const& v) - { - this->x %= v.x; - this->y %= v.x; - this->z %= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator%=(vec<3, U, Q> const& v) - { - this->x %= v.x; - this->y %= v.y; - this->z %= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(U scalar) - { - this->x &= scalar; - this->y &= scalar; - this->z &= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<1, U, Q> const& v) - { - this->x &= v.x; - this->y &= v.x; - this->z &= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator&=(vec<3, U, Q> const& v) - { - this->x &= v.x; - this->y &= v.y; - this->z &= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(U scalar) - { - this->x |= scalar; - this->y |= scalar; - this->z |= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<1, U, Q> const& v) - { - this->x |= v.x; - this->y |= v.x; - this->z |= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator|=(vec<3, U, Q> const& v) - { - this->x |= v.x; - this->y |= v.y; - this->z |= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(U scalar) - { - this->x ^= scalar; - this->y ^= scalar; - this->z ^= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<1, U, Q> const& v) - { - this->x ^= v.x; - this->y ^= v.x; - this->z ^= v.x; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator^=(vec<3, U, Q> const& v) - { - this->x ^= v.x; - this->y ^= v.y; - this->z ^= v.z; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(U scalar) - { - this->x <<= scalar; - this->y <<= scalar; - this->z <<= scalar; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.x); - this->z <<= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator<<=(vec<3, U, Q> const& v) - { - this->x <<= static_cast(v.x); - this->y <<= static_cast(v.y); - this->z <<= static_cast(v.z); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(U scalar) - { - this->x >>= static_cast(scalar); - this->y >>= static_cast(scalar); - this->z >>= static_cast(scalar); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.x); - this->z >>= static_cast(v.x); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> & vec<3, T, Q>::operator>>=(vec<3, U, Q> const& v) - { - this->x >>= static_cast(v.x); - this->y >>= static_cast(v.y); - this->z >>= static_cast(v.z); - return *this; - } - - // -- Unary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - -v.x, - -v.y, - -v.z); - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x + scalar, - v.y + scalar, - v.z + scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x + scalar.x, - v.y + scalar.x, - v.z + scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar + v.x, - scalar + v.y, - scalar + v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x + v.x, - scalar.x + v.y, - scalar.x + v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator+(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x + v2.x, - v1.y + v2.y, - v1.z + v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x - scalar, - v.y - scalar, - v.z - scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x - scalar.x, - v.y - scalar.x, - v.z - scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar - v.x, - scalar - v.y, - scalar - v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x - v.x, - scalar.x - v.y, - scalar.x - v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator-(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x - v2.x, - v1.y - v2.y, - v1.z - v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x * scalar, - v.y * scalar, - v.z * scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x * scalar.x, - v.y * scalar.x, - v.z * scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar * v.x, - scalar * v.y, - scalar * v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x * v.x, - scalar.x * v.y, - scalar.x * v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator*(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x * v2.x, - v1.y * v2.y, - v1.z * v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x / scalar, - v.y / scalar, - v.z / scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x / scalar.x, - v.y / scalar.x, - v.z / scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar / v.x, - scalar / v.y, - scalar / v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x / v.x, - scalar.x / v.y, - scalar.x / v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator/(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x / v2.x, - v1.y / v2.y, - v1.z / v2.z); - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x % scalar, - v.y % scalar, - v.z % scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x % scalar.x, - v.y % scalar.x, - v.z % scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar % v.x, - scalar % v.y, - scalar % v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x % v.x, - scalar.x % v.y, - scalar.x % v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator%(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x % v2.x, - v1.y % v2.y, - v1.z % v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x & scalar, - v.y & scalar, - v.z & scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x & scalar.x, - v.y & scalar.x, - v.z & scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar & v.x, - scalar & v.y, - scalar & v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x & v.x, - scalar.x & v.y, - scalar.x & v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator&(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x & v2.x, - v1.y & v2.y, - v1.z & v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x | scalar, - v.y | scalar, - v.z | scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x | scalar.x, - v.y | scalar.x, - v.z | scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar | v.x, - scalar | v.y, - scalar | v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x | v.x, - scalar.x | v.y, - scalar.x | v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator|(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x | v2.x, - v1.y | v2.y, - v1.z | v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x ^ scalar, - v.y ^ scalar, - v.z ^ scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x ^ scalar.x, - v.y ^ scalar.x, - v.z ^ scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar ^ v.x, - scalar ^ v.y, - scalar ^ v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x ^ v.x, - scalar.x ^ v.y, - scalar.x ^ v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator^(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x ^ v2.x, - v1.y ^ v2.y, - v1.z ^ v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x << scalar, - v.y << scalar, - v.z << scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x << scalar.x, - v.y << scalar.x, - v.z << scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar << v.x, - scalar << v.y, - scalar << v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x << v.x, - scalar.x << v.y, - scalar.x << v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator<<(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x << v2.x, - v1.y << v2.y, - v1.z << v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, T scalar) - { - return vec<3, T, Q>( - v.x >> scalar, - v.y >> scalar, - v.z >> scalar); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<3, T, Q>( - v.x >> scalar.x, - v.y >> scalar.x, - v.z >> scalar.x); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(T scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar >> v.x, - scalar >> v.y, - scalar >> v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - scalar.x >> v.x, - scalar.x >> v.y, - scalar.x >> v.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator>>(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return vec<3, T, Q>( - v1.x >> v2.x, - v1.y >> v2.y, - v1.z >> v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, T, Q> operator~(vec<3, T, Q> const& v) - { - return vec<3, T, Q>( - ~v.x, - ~v.y, - ~v.z); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y) && - detail::compute_equal::is_iec559>::call(v1.z, v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<3, T, Q> const& v1, vec<3, T, Q> const& v2) - { - return !(v1 == v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator&&(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) - { - return vec<3, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<3, bool, Q> operator||(vec<3, bool, Q> const& v1, vec<3, bool, Q> const& v2) - { - return vec<3, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/detail/type_vec4.hpp b/src/qged/display/glm/glm/detail/type_vec4.hpp deleted file mode 100644 index 80c91ab8c12..00000000000 --- a/src/qged/display/glm/glm/detail/type_vec4.hpp +++ /dev/null @@ -1,536 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/detail/type_vec4.hpp - -#pragma once - -#include "qualifier.hpp" -#if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR -# include "_swizzle.hpp" -#elif GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION -# include "_swizzle_func.hpp" -#endif -#include - -namespace glm -{ - template - struct vec<4, T, Q> - { - // -- Implementation detail -- - - typedef T value_type; - typedef vec<4, T, Q> type; - typedef vec<4, bool, Q> bool_type; - - // -- Data -- - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic push -# pragma GCC diagnostic ignored "-Wpedantic" -# elif GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic push -# pragma clang diagnostic ignored "-Wgnu-anonymous-struct" -# pragma clang diagnostic ignored "-Wnested-anon-types" -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable: 4201) // nonstandard extension used : nameless struct/union -# endif -# endif - -# if GLM_CONFIG_XYZW_ONLY - T x, y, z, w; -# elif GLM_CONFIG_ANONYMOUS_STRUCT == GLM_ENABLE - union - { - struct { T x, y, z, w; }; - struct { T r, g, b, a; }; - struct { T s, t, p, q; }; - - typename detail::storage<4, T, detail::is_aligned::value>::type data; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - GLM_SWIZZLE4_2_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_2_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_2_MEMBERS(T, Q, s, t, p, q) - GLM_SWIZZLE4_3_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_3_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_3_MEMBERS(T, Q, s, t, p, q) - GLM_SWIZZLE4_4_MEMBERS(T, Q, x, y, z, w) - GLM_SWIZZLE4_4_MEMBERS(T, Q, r, g, b, a) - GLM_SWIZZLE4_4_MEMBERS(T, Q, s, t, p, q) -# endif - }; -# else - union { T x, r, s; }; - union { T y, g, t; }; - union { T z, b, p; }; - union { T w, a, q; }; - -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_FUNCTION - GLM_SWIZZLE_GEN_VEC_FROM_VEC4(T, Q) -# endif -# endif - -# if GLM_SILENT_WARNINGS == GLM_ENABLE -# if GLM_COMPILER & GLM_COMPILER_CLANG -# pragma clang diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_GCC -# pragma GCC diagnostic pop -# elif GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif -# endif - - // -- Component accesses -- - - typedef length_t length_type; - - /// Return the count of components of the vector - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 4;} - - GLM_FUNC_DECL GLM_CONSTEXPR T & operator[](length_type i); - GLM_FUNC_DECL GLM_CONSTEXPR T const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, Q> const& v) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<4, T, P> const& v); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(T scalar); - GLM_FUNC_DECL GLM_CONSTEXPR vec(T x, T y, T z, T w); - - // -- Conversion scalar constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR explicit vec(vec<1, U, P> const& v); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _Y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w); - - // -- Conversion vector constructors -- - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, B _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, B _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(A _x, vec<3, B, P> const& _yzw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw); - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw); - - /// Explicit conversions (From section 5.4.1 Conversion and scalar constructors of GLSL 1.30.08 specification) - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT vec(vec<4, U, P> const& v); - - // -- Swizzle constructors -- -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<4, T, Q, E0, E1, E2, E3> const& that) - { - *this = that(); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, detail::_swizzle<2, T, Q, F0, F1, -1, -2> const& u) - { - *this = vec<4, T, Q>(v(), u()); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, T const& y, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v) - { - *this = vec<4, T, Q>(x, y, v()); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& w) - { - *this = vec<4, T, Q>(x, v(), w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<2, T, Q, E0, E1, -1, -2> const& v, T const& z, T const& w) - { - *this = vec<4, T, Q>(v(), z, w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v, T const& w) - { - *this = vec<4, T, Q>(v(), w); - } - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec(T const& x, detail::_swizzle<3, T, Q, E0, E1, E2, -1> const& v) - { - *this = vec<4, T, Q>(x, v()); - } -# endif//GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, T, Q> const& v) GLM_DEFAULT; - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator+=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator-=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator*=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q>& operator/=(vec<4, U, Q> const& v); - - // -- Increment and decrement operators -- - - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator++(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator--(); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator++(int); - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator--(int); - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator%=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator&=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator|=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator^=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator<<=(vec<4, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(U scalar); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<1, U, Q> const& v); - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> & operator>>=(vec<4, U, Q> const& v); - }; - - // -- Unary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v); - - // -- Binary operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); - - template - GLM_FUNC_DECL GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2); -}//namespace glm - -#ifndef GLM_EXTERNAL_TEMPLATE -#include "type_vec4.inl" -#endif//GLM_EXTERNAL_TEMPLATE diff --git a/src/qged/display/glm/glm/detail/type_vec4.inl b/src/qged/display/glm/glm/detail/type_vec4.inl deleted file mode 100644 index 3c212d98bbe..00000000000 --- a/src/qged/display/glm/glm/detail/type_vec4.inl +++ /dev/null @@ -1,1140 +0,0 @@ -/// @ref core - -#include "compute_vector_relational.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_vec4_add - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x + b.x, a.y + b.y, a.z + b.z, a.w + b.w); - } - }; - - template - struct compute_vec4_sub - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x - b.x, a.y - b.y, a.z - b.z, a.w - b.w); - } - }; - - template - struct compute_vec4_mul - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x * b.x, a.y * b.y, a.z * b.z, a.w * b.w); - } - }; - - template - struct compute_vec4_div - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x / b.x, a.y / b.y, a.z / b.z, a.w / b.w); - } - }; - - template - struct compute_vec4_mod - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x % b.x, a.y % b.y, a.z % b.z, a.w % b.w); - } - }; - - template - struct compute_vec4_and - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x & b.x, a.y & b.y, a.z & b.z, a.w & b.w); - } - }; - - template - struct compute_vec4_or - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x | b.x, a.y | b.y, a.z | b.z, a.w | b.w); - } - }; - - template - struct compute_vec4_xor - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x ^ b.x, a.y ^ b.y, a.z ^ b.z, a.w ^ b.w); - } - }; - - template - struct compute_vec4_shift_left - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x << b.x, a.y << b.y, a.z << b.z, a.w << b.w); - } - }; - - template - struct compute_vec4_shift_right - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - return vec<4, T, Q>(a.x >> b.x, a.y >> b.y, a.z >> b.z, a.w >> b.w); - } - }; - - template - struct compute_vec4_equal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return - detail::compute_equal::is_iec559>::call(v1.x, v2.x) && - detail::compute_equal::is_iec559>::call(v1.y, v2.y) && - detail::compute_equal::is_iec559>::call(v1.z, v2.z) && - detail::compute_equal::is_iec559>::call(v1.w, v2.w); - } - }; - - template - struct compute_vec4_nequal - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static bool call(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return !compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - }; - - template - struct compute_vec4_bitwise_not - { - GLM_FUNC_QUALIFIER GLM_CONSTEXPR static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - return vec<4, T, Q>(~v.x, ~v.y, ~v.z, ~v.w); - } - }; -}//namespace detail - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec() -# if GLM_CONFIG_CTOR_INIT != GLM_CTOR_INIT_DISABLE - : x(0), y(0), z(0), w(0) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, Q> const& v) - : x(v.x), y(v.y), z(v.z), w(v.w) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, T, P> const& v) - : x(v.x), y(v.y), z(v.z), w(v.w) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T scalar) - : x(scalar), y(scalar), z(scalar), w(scalar) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(T _x, T _y, T _z, T _w) - : x(_x), y(_y), z(_z), w(_w) - {} - - // -- Conversion scalar constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.x)) - , z(static_cast(v.x)) - , w(static_cast(v.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, Z _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, W _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, Z _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, Y _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(X _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, X, Q> const& _x, vec<1, Y, Q> const& _y, vec<1, Z, Q> const& _z, vec<1, W, Q> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - // -- Conversion vector constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, C _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, C _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, B _z, vec<1, C, P> const& _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<1, B, P> const& _z, vec<1, C, P> const& _w) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_z.x)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, C _w) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, C _w) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) - : x(static_cast(_x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<2, B, P> const& _yz, vec<1, C, P> const& _w) - : x(static_cast(_x.x)) - , y(static_cast(_yz.x)) - , z(static_cast(_yz.y)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, B _y, vec<2, C, P> const& _zw) - : x(static_cast(_x)) - , y(static_cast(_y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, B _y, vec<2, C, P> const& _zw) - : x(static_cast(_x.x)) - , y(static_cast(_y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) - : x(static_cast(_x)) - , y(static_cast(_y.x)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<1, B, P> const& _y, vec<2, C, P> const& _zw) - : x(static_cast(_x.x)) - , y(static_cast(_y.x)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, B _w) - : x(static_cast(_xyz.x)) - , y(static_cast(_xyz.y)) - , z(static_cast(_xyz.z)) - , w(static_cast(_w)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<3, A, P> const& _xyz, vec<1, B, P> const& _w) - : x(static_cast(_xyz.x)) - , y(static_cast(_xyz.y)) - , z(static_cast(_xyz.z)) - , w(static_cast(_w.x)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(A _x, vec<3, B, P> const& _yzw) - : x(static_cast(_x)) - , y(static_cast(_yzw.x)) - , z(static_cast(_yzw.y)) - , w(static_cast(_yzw.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<1, A, P> const& _x, vec<3, B, P> const& _yzw) - : x(static_cast(_x.x)) - , y(static_cast(_yzw.x)) - , z(static_cast(_yzw.y)) - , w(static_cast(_yzw.z)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<2, A, P> const& _xy, vec<2, B, P> const& _zw) - : x(static_cast(_xy.x)) - , y(static_cast(_xy.y)) - , z(static_cast(_zw.x)) - , w(static_cast(_zw.y)) - {} - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>::vec(vec<4, U, P> const& v) - : x(static_cast(v.x)) - , y(static_cast(v.y)) - , z(static_cast(v.z)) - , w(static_cast(v.w)) - {} - - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - } - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T const& vec<4, T, Q>::operator[](typename vec<4, T, Q>::length_type i) const - { - assert(i >= 0 && i < this->length()); - switch(i) - { - default: - case 0: - return x; - case 1: - return y; - case 2: - return z; - case 3: - return w; - } - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, T, Q> const& v) - { - this->x = v.x; - this->y = v.y; - this->z = v.z; - this->w = v.w; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q>& vec<4, T, Q>::operator=(vec<4, U, Q> const& v) - { - this->x = static_cast(v.x); - this->y = static_cast(v.y); - this->z = static_cast(v.z); - this->w = static_cast(v.w); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(U scalar) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator+=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_add::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(U scalar) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator-=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_sub::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(U scalar) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator*=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_mul::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(U scalar) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v.x))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator/=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_div::value>::call(*this, vec<4, T, Q>(v))); - } - - // -- Increment and decrement operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator++() - { - ++this->x; - ++this->y; - ++this->z; - ++this->w; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator--() - { - --this->x; - --this->y; - --this->z; - --this->w; - return *this; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator++(int) - { - vec<4, T, Q> Result(*this); - ++*this; - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> vec<4, T, Q>::operator--(int) - { - vec<4, T, Q> Result(*this); - --*this; - return Result; - } - - // -- Unary bit operators -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(U scalar) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator%=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_mod::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(U scalar) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator&=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_and::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(U scalar) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator|=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_or::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(U scalar) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator^=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_xor::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(U scalar) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator<<=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_left::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(U scalar) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(scalar))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<1, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> & vec<4, T, Q>::operator>>=(vec<4, U, Q> const& v) - { - return (*this = detail::compute_vec4_shift_right::value, sizeof(T) * 8, detail::is_aligned::value>::call(*this, vec<4, T, Q>(v))); - } - - // -- Unary constant operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v) - { - return vec<4, T, Q>(0) -= v; - } - - // -- Binary arithmetic operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) += scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) += v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(v) += scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v2) += v1; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator+(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) += v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) -= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) -= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator-(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) -= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) *= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) *= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(v) *= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v2) *= v1; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator*(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) *= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v, T const & scalar) - { - return vec<4, T, Q>(v) /= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) /= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) /= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) /= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator/(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) /= v2; - } - - // -- Binary bit operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) %= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) %= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) %= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<1, T, Q> const& scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar.x) %= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator%(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) %= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) &= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v, vec<1, T, Q> const& scalar) - { - return vec<4, T, Q>(v) &= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) &= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) &= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator&(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) &= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) |= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) |= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) |= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) |= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator|(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) |= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) ^= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) ^= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) ^= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) ^= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator^(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) ^= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) <<= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) <<= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) <<= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) <<= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator<<(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) <<= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v, T scalar) - { - return vec<4, T, Q>(v) >>= scalar; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<1, T, Q> const& v2) - { - return vec<4, T, Q>(v1) >>= v2.x; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(T scalar, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(scalar) >>= v; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<1, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1.x) >>= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator>>(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return vec<4, T, Q>(v1) >>= v2; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, T, Q> operator~(vec<4, T, Q> const& v) - { - return detail::compute_vec4_bitwise_not::value, sizeof(T) * 8, detail::is_aligned::value>::call(v); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator==(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return detail::compute_vec4_equal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool operator!=(vec<4, T, Q> const& v1, vec<4, T, Q> const& v2) - { - return detail::compute_vec4_nequal::value, sizeof(T) * 8, detail::is_aligned::value>::call(v1, v2); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator&&(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) - { - return vec<4, bool, Q>(v1.x && v2.x, v1.y && v2.y, v1.z && v2.z, v1.w && v2.w); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, bool, Q> operator||(vec<4, bool, Q> const& v1, vec<4, bool, Q> const& v2) - { - return vec<4, bool, Q>(v1.x || v2.x, v1.y || v2.y, v1.z || v2.z, v1.w || v2.w); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "type_vec4_simd.inl" -#endif diff --git a/src/qged/display/glm/glm/detail/type_vec4_simd.inl b/src/qged/display/glm/glm/detail/type_vec4_simd.inl deleted file mode 100644 index 29559b5350c..00000000000 --- a/src/qged/display/glm/glm/detail/type_vec4_simd.inl +++ /dev/null @@ -1,775 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ -# if GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - template - struct _swizzle_base1<4, float, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, float, Q> operator ()() const - { - __m128 data = *reinterpret_cast<__m128 const*>(&this->_buffer); - - vec<4, float, Q> Result; -# if GLM_ARCH & GLM_ARCH_AVX_BIT - Result.data = _mm_permute_ps(data, _MM_SHUFFLE(E3, E2, E1, E0)); -# else - Result.data = _mm_shuffle_ps(data, data, _MM_SHUFFLE(E3, E2, E1, E0)); -# endif - return Result; - } - }; - - template - struct _swizzle_base1<4, int, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, int, Q> operator ()() const - { - __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - - vec<4, int, Q> Result; - Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); - return Result; - } - }; - - template - struct _swizzle_base1<4, uint, Q, E0,E1,E2,E3, true> : public _swizzle_base0 - { - GLM_FUNC_QUALIFIER vec<4, uint, Q> operator ()() const - { - __m128i data = *reinterpret_cast<__m128i const*>(&this->_buffer); - - vec<4, uint, Q> Result; - Result.data = _mm_shuffle_epi32(data, _MM_SHUFFLE(E3, E2, E1, E0)); - return Result; - } - }; -# endif// GLM_CONFIG_SWIZZLE == GLM_SWIZZLE_OPERATOR - - template - struct compute_vec4_add - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_add_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_add - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_add_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_sub - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_sub_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_sub - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_sub_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_mul - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_mul_ps(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_mul - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_mul_pd(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_div - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = _mm_div_ps(a.data, b.data); - return Result; - } - }; - - # if GLM_ARCH & GLM_ARCH_AVX_BIT - template - struct compute_vec4_div - { - static vec<4, double, Q> call(vec<4, double, Q> const& a, vec<4, double, Q> const& b) - { - vec<4, double, Q> Result; - Result.data = _mm256_div_pd(a.data, b.data); - return Result; - } - }; -# endif - - template<> - struct compute_vec4_div - { - static vec<4, float, aligned_lowp> call(vec<4, float, aligned_lowp> const& a, vec<4, float, aligned_lowp> const& b) - { - vec<4, float, aligned_lowp> Result; - Result.data = _mm_mul_ps(a.data, _mm_rcp_ps(b.data)); - return Result; - } - }; - - template - struct compute_vec4_and - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_and_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_and - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_and_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_or - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_or_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_or - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_or_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_xor - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_xor_si128(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_xor - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_xor_si256(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_shift_left - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_sll_epi32(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_shift_left - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_sll_epi64(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_shift_right - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm_srl_epi32(a.data, b.data); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_shift_right - { - static vec<4, T, Q> call(vec<4, T, Q> const& a, vec<4, T, Q> const& b) - { - vec<4, T, Q> Result; - Result.data = _mm256_srl_epi64(a.data, b.data); - return Result; - } - }; -# endif - - template - struct compute_vec4_bitwise_not - { - static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - vec<4, T, Q> Result; - Result.data = _mm_xor_si128(v.data, _mm_set1_epi32(-1)); - return Result; - } - }; - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template - struct compute_vec4_bitwise_not - { - static vec<4, T, Q> call(vec<4, T, Q> const& v) - { - vec<4, T, Q> Result; - Result.data = _mm256_xor_si256(v.data, _mm_set1_epi32(-1)); - return Result; - } - }; -# endif - - template - struct compute_vec4_equal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return _mm_movemask_ps(_mm_cmpeq_ps(v1.data, v2.data)) != 0; - } - }; - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - template - struct compute_vec4_equal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - //return _mm_movemask_epi8(_mm_cmpeq_epi32(v1.data, v2.data)) != 0; - __m128i neq = _mm_xor_si128(v1.data, v2.data); - return _mm_test_all_zeros(neq, neq) == 0; - } - }; -# endif - - template - struct compute_vec4_nequal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return _mm_movemask_ps(_mm_cmpneq_ps(v1.data, v2.data)) != 0; - } - }; - -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - template - struct compute_vec4_nequal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - //return _mm_movemask_epi8(_mm_cmpneq_epi32(v1.data, v2.data)) != 0; - __m128i neq = _mm_xor_si128(v1.data, v2.data); - return _mm_test_all_zeros(neq, neq) != 0; - } - }; -# endif -}//namespace detail - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : - data(_mm_set1_ps(_s)) - {} - -# if GLM_ARCH & GLM_ARCH_AVX_BIT - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_lowp>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_mediump>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, double, aligned_highp>::vec(double _s) : - data(_mm256_set1_pd(_s)) - {} -# endif - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : - data(_mm_set1_epi32(_s)) - {} - -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_lowp>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_mediump>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, detail::int64, aligned_highp>::vec(detail::int64 _s) : - data(_mm256_set1_epi64x(_s)) - {} -# endif - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _x, float _y, float _z, float _w) : - data(_mm_set_ps(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_set_epi32(_w, _z, _y, _x)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(_mm_cvtepi32_ps(_mm_set_epi32(_w, _z, _y, _x))) - {} -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - -#if GLM_ARCH & GLM_ARCH_NEON_BIT -namespace glm { -namespace detail { - - template - struct compute_vec4_add - { - static - vec<4, float, Q> - call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vaddq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_add - { - static - vec<4, uint, Q> - call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vaddq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_add - { - static - vec<4, int, Q> - call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vaddq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vsubq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vsubq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_sub - { - static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, int, Q> Result; - Result.data = vsubq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vmulq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, uint, Q> call(vec<4, uint, Q> const& a, vec<4, uint, Q> const& b) - { - vec<4, uint, Q> Result; - Result.data = vmulq_u32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_mul - { - static vec<4, int, Q> call(vec<4, int, Q> const& a, vec<4, int, Q> const& b) - { - vec<4, int, Q> Result; - Result.data = vmulq_s32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_div - { - static vec<4, float, Q> call(vec<4, float, Q> const& a, vec<4, float, Q> const& b) - { - vec<4, float, Q> Result; - Result.data = vdivq_f32(a.data, b.data); - return Result; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - uint32x4_t cmp = vceqq_f32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - uint32x4_t cmp = vceqq_u32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_equal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - uint32x4_t cmp = vceqq_s32(v1.data, v2.data); -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - cmp = vpminq_u32(cmp, cmp); - cmp = vpminq_u32(cmp, cmp); - uint32_t r = cmp[0]; -#else - uint32x2_t cmpx2 = vpmin_u32(vget_low_f32(cmp), vget_high_f32(cmp)); - cmpx2 = vpmin_u32(cmpx2, cmpx2); - uint32_t r = cmpx2[0]; -#endif - return r == ~0u; - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, float, Q> const& v1, vec<4, float, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, uint, Q> const& v1, vec<4, uint, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - - template - struct compute_vec4_nequal - { - static bool call(vec<4, int, Q> const& v1, vec<4, int, Q> const& v2) - { - return !compute_vec4_equal::call(v1, v2); - } - }; - -}//namespace detail - -#if !GLM_CONFIG_XYZW_ONLY - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(float _s) : - data(vdupq_n_f32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_lowp>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_mediump>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, int, aligned_highp>::vec(int _s) : - data(vdupq_n_s32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_lowp>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_mediump>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, uint, aligned_highp>::vec(uint _s) : - data(vdupq_n_u32(_s)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, float, aligned_highp>& rhs) : - data(rhs.data) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, int, aligned_highp>& rhs) : - data(vcvtq_f32_s32(rhs.data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(const vec<4, uint, aligned_highp>& rhs) : - data(vcvtq_f32_u32(rhs.data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_lowp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_mediump>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(int _x, int _y, int _z, int _w) : - data(vcvtq_f32_s32(vec<4, int, aligned_highp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_lowp>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_lowp>(_x, _y, _z, _w).data)) - {} - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_mediump>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_mediump>(_x, _y, _z, _w).data)) - {} - - - template<> - template<> - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec<4, float, aligned_highp>::vec(uint _x, uint _y, uint _z, uint _w) : - data(vcvtq_f32_u32(vec<4, uint, aligned_highp>(_x, _y, _z, _w).data)) - {} - -#endif -}//namespace glm - -#endif diff --git a/src/qged/display/glm/glm/exponential.hpp b/src/qged/display/glm/glm/exponential.hpp deleted file mode 100644 index 820a822e3a9..00000000000 --- a/src/qged/display/glm/glm/exponential.hpp +++ /dev/null @@ -1,141 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/exponential.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions -/// -/// @defgroup core_func_exponential Exponential functions -/// @ingroup core -/// -/// Provides GLSL exponential functions -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/type_vec1.hpp" -#include "detail/type_vec2.hpp" -#include "detail/type_vec3.hpp" -#include "detail/type_vec4.hpp" -#include - -namespace glm -{ - /// @addtogroup core_func_exponential - /// @{ - - /// Returns 'base' raised to the power 'exponent'. - /// - /// @param base Floating point value. pow function is defined for input values of 'base' defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @param exponent Floating point value representing the 'exponent'. - /// - /// @see GLSL pow man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec pow(vec const& base, vec const& exponent); - - /// Returns the natural exponentiation of x, i.e., e^x. - /// - /// @param v exp function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL exp man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec exp(vec const& v); - - /// Returns the natural logarithm of v, i.e., - /// returns the value y which satisfies the equation x = e^y. - /// Results are undefined if v <= 0. - /// - /// @param v log function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL log man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec log(vec const& v); - - /// Returns 2 raised to the v power. - /// - /// @param v exp2 function is defined for input values of v defined in the range (inf-, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL exp2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec exp2(vec const& v); - - /// Returns the base 2 log of x, i.e., returns the value y, - /// which satisfies the equation x = 2 ^ y. - /// - /// @param v log2 function is defined for input values of v defined in the range (0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL log2 man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec log2(vec const& v); - - /// Returns the positive square root of v. - /// - /// @param v sqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL sqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec sqrt(vec const& v); - - /// Returns the reciprocal of the positive square root of v. - /// - /// @param v inversesqrt function is defined for input values of v defined in the range [0, inf+) in the limit of the type qualifier. - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL inversesqrt man page - /// @see GLSL 4.20.8 specification, section 8.2 Exponential Functions - template - GLM_FUNC_DECL vec inversesqrt(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_exponential.inl" diff --git a/src/qged/display/glm/glm/ext.hpp b/src/qged/display/glm/glm/ext.hpp deleted file mode 100644 index b16f7925c99..00000000000 --- a/src/qged/display/glm/glm/ext.hpp +++ /dev/null @@ -1,284 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @file glm/ext.hpp -/// -/// @ref core (Dependence) - -#include "detail/setup.hpp" - -#pragma once - -#include "glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_MESSAGE_EXT_INCLUDED_DISPLAYED) -# define GLM_MESSAGE_EXT_INCLUDED_DISPLAYED -# pragma message("GLM: All extensions included (not recommended)") -#endif//GLM_MESSAGES - -#include "./ext/matrix_clip_space.hpp" -#include "./ext/matrix_common.hpp" - -#include "./ext/matrix_double2x2.hpp" -#include "./ext/matrix_double2x2_precision.hpp" -#include "./ext/matrix_double2x3.hpp" -#include "./ext/matrix_double2x3_precision.hpp" -#include "./ext/matrix_double2x4.hpp" -#include "./ext/matrix_double2x4_precision.hpp" -#include "./ext/matrix_double3x2.hpp" -#include "./ext/matrix_double3x2_precision.hpp" -#include "./ext/matrix_double3x3.hpp" -#include "./ext/matrix_double3x3_precision.hpp" -#include "./ext/matrix_double3x4.hpp" -#include "./ext/matrix_double3x4_precision.hpp" -#include "./ext/matrix_double4x2.hpp" -#include "./ext/matrix_double4x2_precision.hpp" -#include "./ext/matrix_double4x3.hpp" -#include "./ext/matrix_double4x3_precision.hpp" -#include "./ext/matrix_double4x4.hpp" -#include "./ext/matrix_double4x4_precision.hpp" - -#include "./ext/matrix_float2x2.hpp" -#include "./ext/matrix_float2x2_precision.hpp" -#include "./ext/matrix_float2x3.hpp" -#include "./ext/matrix_float2x3_precision.hpp" -#include "./ext/matrix_float2x4.hpp" -#include "./ext/matrix_float2x4_precision.hpp" -#include "./ext/matrix_float3x2.hpp" -#include "./ext/matrix_float3x2_precision.hpp" -#include "./ext/matrix_float3x3.hpp" -#include "./ext/matrix_float3x3_precision.hpp" -#include "./ext/matrix_float3x4.hpp" -#include "./ext/matrix_float3x4_precision.hpp" -#include "./ext/matrix_float4x2.hpp" -#include "./ext/matrix_float4x2_precision.hpp" -#include "./ext/matrix_float4x3.hpp" -#include "./ext/matrix_float4x3_precision.hpp" -#include "./ext/matrix_float4x4.hpp" -#include "./ext/matrix_float4x4_precision.hpp" - -#include "./ext/matrix_int2x2.hpp" -#include "./ext/matrix_int2x2_sized.hpp" -#include "./ext/matrix_int2x3.hpp" -#include "./ext/matrix_int2x3_sized.hpp" -#include "./ext/matrix_int2x4.hpp" -#include "./ext/matrix_int2x4_sized.hpp" -#include "./ext/matrix_int3x2.hpp" -#include "./ext/matrix_int3x2_sized.hpp" -#include "./ext/matrix_int3x3.hpp" -#include "./ext/matrix_int3x3_sized.hpp" -#include "./ext/matrix_int3x4.hpp" -#include "./ext/matrix_int3x4_sized.hpp" -#include "./ext/matrix_int4x2.hpp" -#include "./ext/matrix_int4x2_sized.hpp" -#include "./ext/matrix_int4x3.hpp" -#include "./ext/matrix_int4x3_sized.hpp" -#include "./ext/matrix_int4x4.hpp" -#include "./ext/matrix_int4x4_sized.hpp" - -#include "./ext/matrix_uint2x2.hpp" -#include "./ext/matrix_uint2x2_sized.hpp" -#include "./ext/matrix_uint2x3.hpp" -#include "./ext/matrix_uint2x3_sized.hpp" -#include "./ext/matrix_uint2x4.hpp" -#include "./ext/matrix_uint2x4_sized.hpp" -#include "./ext/matrix_uint3x2.hpp" -#include "./ext/matrix_uint3x2_sized.hpp" -#include "./ext/matrix_uint3x3.hpp" -#include "./ext/matrix_uint3x3_sized.hpp" -#include "./ext/matrix_uint3x4.hpp" -#include "./ext/matrix_uint3x4_sized.hpp" -#include "./ext/matrix_uint4x2.hpp" -#include "./ext/matrix_uint4x2_sized.hpp" -#include "./ext/matrix_uint4x3.hpp" -#include "./ext/matrix_uint4x3_sized.hpp" -#include "./ext/matrix_uint4x4.hpp" -#include "./ext/matrix_uint4x4_sized.hpp" - -#include "./ext/matrix_projection.hpp" -#include "./ext/matrix_relational.hpp" -#include "./ext/matrix_transform.hpp" - -#include "./ext/quaternion_common.hpp" -#include "./ext/quaternion_double.hpp" -#include "./ext/quaternion_double_precision.hpp" -#include "./ext/quaternion_float.hpp" -#include "./ext/quaternion_float_precision.hpp" -#include "./ext/quaternion_exponential.hpp" -#include "./ext/quaternion_geometric.hpp" -#include "./ext/quaternion_relational.hpp" -#include "./ext/quaternion_transform.hpp" -#include "./ext/quaternion_trigonometric.hpp" - -#include "./ext/scalar_common.hpp" -#include "./ext/scalar_constants.hpp" -#include "./ext/scalar_integer.hpp" -#include "./ext/scalar_packing.hpp" -#include "./ext/scalar_relational.hpp" -#include "./ext/scalar_ulp.hpp" - -#include "./ext/scalar_int_sized.hpp" -#include "./ext/scalar_uint_sized.hpp" - -#include "./ext/vector_common.hpp" -#include "./ext/vector_integer.hpp" -#include "./ext/vector_packing.hpp" -#include "./ext/vector_relational.hpp" -#include "./ext/vector_ulp.hpp" - -#include "./ext/vector_bool1.hpp" -#include "./ext/vector_bool1_precision.hpp" -#include "./ext/vector_bool2.hpp" -#include "./ext/vector_bool2_precision.hpp" -#include "./ext/vector_bool3.hpp" -#include "./ext/vector_bool3_precision.hpp" -#include "./ext/vector_bool4.hpp" -#include "./ext/vector_bool4_precision.hpp" - -#include "./ext/vector_double1.hpp" -#include "./ext/vector_double1_precision.hpp" -#include "./ext/vector_double2.hpp" -#include "./ext/vector_double2_precision.hpp" -#include "./ext/vector_double3.hpp" -#include "./ext/vector_double3_precision.hpp" -#include "./ext/vector_double4.hpp" -#include "./ext/vector_double4_precision.hpp" - -#include "./ext/vector_float1.hpp" -#include "./ext/vector_float1_precision.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float2_precision.hpp" -#include "./ext/vector_float3.hpp" -#include "./ext/vector_float3_precision.hpp" -#include "./ext/vector_float4.hpp" -#include "./ext/vector_float4_precision.hpp" - -#include "./ext/vector_int1.hpp" -#include "./ext/vector_int1_sized.hpp" -#include "./ext/vector_int2.hpp" -#include "./ext/vector_int2_sized.hpp" -#include "./ext/vector_int3.hpp" -#include "./ext/vector_int3_sized.hpp" -#include "./ext/vector_int4.hpp" -#include "./ext/vector_int4_sized.hpp" - -#include "./ext/vector_uint1.hpp" -#include "./ext/vector_uint1_sized.hpp" -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_uint2_sized.hpp" -#include "./ext/vector_uint3.hpp" -#include "./ext/vector_uint3_sized.hpp" -#include "./ext/vector_uint4.hpp" -#include "./ext/vector_uint4_sized.hpp" - -#include "./gtc/bitfield.hpp" -#include "./gtc/color_space.hpp" -#include "./gtc/constants.hpp" -#include "./gtc/epsilon.hpp" -#include "./gtc/integer.hpp" -#include "./gtc/matrix_access.hpp" -#include "./gtc/matrix_integer.hpp" -#include "./gtc/matrix_inverse.hpp" -#include "./gtc/matrix_transform.hpp" -#include "./gtc/noise.hpp" -#include "./gtc/packing.hpp" -#include "./gtc/quaternion.hpp" -#include "./gtc/random.hpp" -#include "./gtc/reciprocal.hpp" -#include "./gtc/round.hpp" -#include "./gtc/type_precision.hpp" -#include "./gtc/type_ptr.hpp" -#include "./gtc/ulp.hpp" -#include "./gtc/vec1.hpp" -#if GLM_CONFIG_ALIGNED_GENTYPES == GLM_ENABLE -# include "./gtc/type_aligned.hpp" -#endif - -#ifdef GLM_ENABLE_EXPERIMENTAL -#include "./gtx/associated_min_max.hpp" -#include "./gtx/bit.hpp" -#include "./gtx/closest_point.hpp" -#include "./gtx/color_encoding.hpp" -#include "./gtx/color_space.hpp" -#include "./gtx/color_space_YCoCg.hpp" -#include "./gtx/compatibility.hpp" -#include "./gtx/component_wise.hpp" -#include "./gtx/dual_quaternion.hpp" -#include "./gtx/euler_angles.hpp" -#include "./gtx/extend.hpp" -#include "./gtx/extended_min_max.hpp" -#include "./gtx/fast_exponential.hpp" -#include "./gtx/fast_square_root.hpp" -#include "./gtx/fast_trigonometry.hpp" -#include "./gtx/functions.hpp" -#include "./gtx/gradient_paint.hpp" -#include "./gtx/handed_coordinate_space.hpp" -#include "./gtx/integer.hpp" -#include "./gtx/intersect.hpp" -#include "./gtx/log_base.hpp" -#include "./gtx/matrix_cross_product.hpp" -#include "./gtx/matrix_interpolation.hpp" -#include "./gtx/matrix_major_storage.hpp" -#include "./gtx/matrix_operation.hpp" -#include "./gtx/matrix_query.hpp" -#include "./gtx/mixed_product.hpp" -#include "./gtx/norm.hpp" -#include "./gtx/normal.hpp" -#include "./gtx/normalize_dot.hpp" -#include "./gtx/number_precision.hpp" -#include "./gtx/optimum_pow.hpp" -#include "./gtx/orthonormalize.hpp" -#include "./gtx/perpendicular.hpp" -#include "./gtx/polar_coordinates.hpp" -#include "./gtx/projection.hpp" -#include "./gtx/quaternion.hpp" -#include "./gtx/raw_data.hpp" -#include "./gtx/rotate_vector.hpp" -#include "./gtx/spline.hpp" -#include "./gtx/std_based_type.hpp" -#if !(GLM_COMPILER & GLM_COMPILER_CUDA) -# include "./gtx/string_cast.hpp" -#endif -#include "./gtx/transform.hpp" -#include "./gtx/transform2.hpp" -#include "./gtx/vec_swizzle.hpp" -#include "./gtx/vector_angle.hpp" -#include "./gtx/vector_query.hpp" -#include "./gtx/wrap.hpp" - -#if GLM_HAS_TEMPLATE_ALIASES -# include "./gtx/scalar_multiplication.hpp" -#endif - -#if GLM_HAS_RANGE_FOR -# include "./gtx/range.hpp" -#endif -#endif//GLM_ENABLE_EXPERIMENTAL diff --git a/src/qged/display/glm/glm/ext/matrix_clip_space.hpp b/src/qged/display/glm/glm/ext/matrix_clip_space.hpp deleted file mode 100644 index 7983449dd50..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_clip_space.hpp +++ /dev/null @@ -1,553 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_clip_space -/// @file glm/ext/matrix_clip_space.hpp -/// -/// @defgroup ext_matrix_clip_space GLM_EXT_matrix_clip_space -/// @ingroup ext -/// -/// Defines functions that generate clip space transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_transform -/// @see ext_matrix_projection - -#pragma once - -// Dependencies -#include "../ext/scalar_constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_clip_space extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_clip_space - /// @{ - - /// Creates a matrix for projecting two-dimensional coordinates onto the screen. - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top, T const& zNear, T const& zFar) - /// @see gluOrtho2D man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( - T left, T right, T bottom, T top); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_ZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH_NO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_ZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH_NO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoZO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoNO( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using left-handed coordinates. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoLH( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using right-handed coordinates. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> orthoRH( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a matrix for an orthographic parallel viewing volume, using the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @tparam T A floating-point scalar type - /// - /// @see - glm::ortho(T const& left, T const& right, T const& bottom, T const& top) - /// @see glOrtho man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> ortho( - T left, T right, T bottom, T top, T zNear, T zFar); - - /// Creates a left handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_ZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a left handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH_NO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_ZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH_NO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumZO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumNO( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a left handed frustum matrix. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumLH( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a right handed frustum matrix. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustumRH( - T left, T right, T bottom, T top, T near, T far); - - /// Creates a frustum matrix with default handedness, using the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @tparam T A floating-point scalar type - /// @see glFrustum man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> frustum( - T left, T right, T bottom, T top, T near, T far); - - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_ZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH_NO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_ZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH_NO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveZO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveNO( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a right handed, symetric perspective-view frustum. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveRH( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a left handed, symetric perspective-view frustum. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveLH( - T fovy, T aspect, T near, T far); - - /// Creates a matrix for a symetric perspective-view frustum based on the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param fovy Specifies the field of view angle in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - /// @see gluPerspective man page - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspective( - T fovy, T aspect, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_ZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using right-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH_NO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_ZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH_NO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovZO( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view using left-handed coordinates if GLM_FORCE_LEFT_HANDED if defined or right-handed coordinates otherwise. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovNO( - T fov, T width, T height, T near, T far); - - /// Builds a right handed perspective projection matrix based on a field of view. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovRH( - T fov, T width, T height, T near, T far); - - /// Builds a left handed perspective projection matrix based on a field of view. - /// If GLM_FORCE_DEPTH_ZERO_TO_ONE is defined, the near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// Otherwise, the near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFovLH( - T fov, T width, T height, T near, T far); - - /// Builds a perspective projection matrix based on a field of view and the default handedness and default near and far clip planes definition. - /// To change default handedness use GLM_FORCE_LEFT_HANDED. To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param fov Expressed in radians. - /// @param width Width of the viewport - /// @param height Height of the viewport - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param far Specifies the distance from the viewer to the far clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> perspectiveFov( - T fov, T width, T height, T near, T far); - - /// Creates a matrix for a left handed, symmetric perspective-view frustum with far plane at infinite. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveLH( - T fovy, T aspect, T near); - - /// Creates a matrix for a right handed, symmetric perspective-view frustum with far plane at infinite. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspectiveRH( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite with default handedness. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> infinitePerspective( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( - T fovy, T aspect, T near); - - /// Creates a matrix for a symmetric perspective-view frustum with far plane at infinite for graphics hardware that doesn't support depth clamping. - /// - /// @param fovy Specifies the field of view angle, in degrees, in the y direction. Expressed in radians. - /// @param aspect Specifies the aspect ratio that determines the field of view in the x direction. The aspect ratio is the ratio of x (width) to y (height). - /// @param near Specifies the distance from the viewer to the near clipping plane (always positive). - /// @param ep Epsilon - /// - /// @tparam T A floating-point scalar type - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> tweakedInfinitePerspective( - T fovy, T aspect, T near, T ep); - - /// @} -}//namespace glm - -#include "matrix_clip_space.inl" diff --git a/src/qged/display/glm/glm/ext/matrix_clip_space.inl b/src/qged/display/glm/glm/ext/matrix_clip_space.inl deleted file mode 100644 index 7e4df33004e..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_clip_space.inl +++ /dev/null @@ -1,555 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top) - { - mat<4, 4, T, defaultp> Result(static_cast(1)); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(1); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = static_cast(1) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - zNear / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH_NO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = static_cast(2) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - (zFar + zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_ZO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(1) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - zNear / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH_NO(T left, T right, T bottom, T top, T zNear, T zFar) - { - mat<4, 4, T, defaultp> Result(1); - Result[0][0] = static_cast(2) / (right - left); - Result[1][1] = static_cast(2) / (top - bottom); - Result[2][2] = - static_cast(2) / (zFar - zNear); - Result[3][0] = - (right + left) / (right - left); - Result[3][1] = - (top + bottom) / (top - bottom); - Result[3][2] = - (zFar + zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoZO(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoNO(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoLH(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# endif - - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> orthoRH(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# else - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> ortho(T left, T right, T bottom, T top, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return orthoLH_ZO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return orthoLH_NO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return orthoRH_ZO(left, right, bottom, top, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return orthoRH_NO(left, right, bottom, top, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = farVal / (farVal - nearVal); - Result[2][3] = static_cast(1); - Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = (farVal + nearVal) / (farVal - nearVal); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_ZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = farVal / (nearVal - farVal); - Result[2][3] = static_cast(-1); - Result[3][2] = -(farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH_NO(T left, T right, T bottom, T top, T nearVal, T farVal) - { - mat<4, 4, T, defaultp> Result(0); - Result[0][0] = (static_cast(2) * nearVal) / (right - left); - Result[1][1] = (static_cast(2) * nearVal) / (top - bottom); - Result[2][0] = (right + left) / (right - left); - Result[2][1] = (top + bottom) / (top - bottom); - Result[2][2] = - (farVal + nearVal) / (farVal - nearVal); - Result[2][3] = static_cast(-1); - Result[3][2] = - (static_cast(2) * farVal * nearVal) / (farVal - nearVal); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumZO(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumNO(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumLH(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustumRH(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# else - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> frustum(T left, T right, T bottom, T top, T nearVal, T farVal) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return frustumLH_ZO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return frustumLH_NO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return frustumRH_ZO(left, right, bottom, top, nearVal, farVal); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return frustumRH_NO(left, right, bottom, top, nearVal, farVal); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_ZO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = zFar / (zNear - zFar); - Result[2][3] = - static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH_NO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = - (zFar + zNear) / (zFar - zNear); - Result[2][3] = - static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_ZO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = zFar / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH_NO(T fovy, T aspect, T zNear, T zFar) - { - assert(abs(aspect - std::numeric_limits::epsilon()) > static_cast(0)); - - T const tanHalfFovy = tan(fovy / static_cast(2)); - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = static_cast(1) / (aspect * tanHalfFovy); - Result[1][1] = static_cast(1) / (tanHalfFovy); - Result[2][2] = (zFar + zNear) / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveZO(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveNO(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveLH(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# endif - - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveRH(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# else - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspective(T fovy, T aspect, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return perspectiveLH_ZO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return perspectiveLH_NO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return perspectiveRH_ZO(fovy, aspect, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return perspectiveRH_NO(fovy, aspect, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_ZO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = zFar / (zNear - zFar); - Result[2][3] = - static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH_NO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = - (zFar + zNear) / (zFar - zNear); - Result[2][3] = - static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_ZO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = zFar / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = -(zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH_NO(T fov, T width, T height, T zNear, T zFar) - { - assert(width > static_cast(0)); - assert(height > static_cast(0)); - assert(fov > static_cast(0)); - - T const rad = fov; - T const h = glm::cos(static_cast(0.5) * rad) / glm::sin(static_cast(0.5) * rad); - T const w = h * height / width; ///todo max(width , Height) / min(width , Height)? - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = w; - Result[1][1] = h; - Result[2][2] = (zFar + zNear) / (zFar - zNear); - Result[2][3] = static_cast(1); - Result[3][2] = - (static_cast(2) * zFar * zNear) / (zFar - zNear); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovZO(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovNO(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovLH(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFovRH(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# else - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> perspectiveFov(T fov, T width, T height, T zNear, T zFar) - { -# if GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_ZO - return perspectiveFovLH_ZO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_LH_NO - return perspectiveFovLH_NO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_ZO - return perspectiveFovRH_ZO(fov, width, height, zNear, zFar); -# elif GLM_CONFIG_CLIP_CONTROL == GLM_CLIP_CONTROL_RH_NO - return perspectiveFovRH_NO(fov, width, height, zNear, zFar); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveRH(T fovy, T aspect, T zNear) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = - static_cast(1); - Result[2][3] = - static_cast(1); - Result[3][2] = - static_cast(2) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspectiveLH(T fovy, T aspect, T zNear) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(T(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = static_cast(1); - Result[2][3] = static_cast(1); - Result[3][2] = - static_cast(2) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> infinitePerspective(T fovy, T aspect, T zNear) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return infinitePerspectiveLH(fovy, aspect, zNear); -# else - return infinitePerspectiveRH(fovy, aspect, zNear); -# endif - } - - // Infinite projection matrix: http://www.terathon.com/gdc07_lengyel.pdf - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear, T ep) - { - T const range = tan(fovy / static_cast(2)) * zNear; - T const left = -range * aspect; - T const right = range * aspect; - T const bottom = -range; - T const top = range; - - mat<4, 4, T, defaultp> Result(static_cast(0)); - Result[0][0] = (static_cast(2) * zNear) / (right - left); - Result[1][1] = (static_cast(2) * zNear) / (top - bottom); - Result[2][2] = ep - static_cast(1); - Result[2][3] = static_cast(-1); - Result[3][2] = (ep - static_cast(2)) * zNear; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> tweakedInfinitePerspective(T fovy, T aspect, T zNear) - { - return tweakedInfinitePerspective(fovy, aspect, zNear, epsilon()); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_common.hpp b/src/qged/display/glm/glm/ext/matrix_common.hpp deleted file mode 100644 index b79b42717df..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_common.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_common -/// @file glm/ext/matrix_common.hpp -/// -/// @defgroup ext_matrix_common GLM_EXT_matrix_common -/// @ingroup ext -/// -/// Defines functions for common matrix operations. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_common - -#pragma once - -#include "../detail/qualifier.hpp" -#include "../detail/_fixes.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_common - /// @{ - - template - GLM_FUNC_DECL mat mix(mat const& x, mat const& y, mat const& a); - - template - GLM_FUNC_DECL mat mix(mat const& x, mat const& y, U a); - - /// @} -}//namespace glm - -#include "matrix_common.inl" diff --git a/src/qged/display/glm/glm/ext/matrix_common.inl b/src/qged/display/glm/glm/ext/matrix_common.inl deleted file mode 100644 index 9d508485b86..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_common.inl +++ /dev/null @@ -1,16 +0,0 @@ -#include "../matrix.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, U a) - { - return mat(x) * (static_cast(1) - a) + mat(y) * a; - } - - template - GLM_FUNC_QUALIFIER mat mix(mat const& x, mat const& y, mat const& a) - { - return matrixCompMult(mat(x), static_cast(1) - a) + matrixCompMult(mat(y), a); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double2x2.hpp b/src/qged/display/glm/glm/ext/matrix_double2x2.hpp deleted file mode 100644 index c90b71af99c..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double2x2.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double2x2.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, double, defaultp> dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, double, defaultp> dmat2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double2x2_precision.hpp b/src/qged/display/glm/glm/ext/matrix_double2x2_precision.hpp deleted file mode 100644 index 3da10d31bf8..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double2x2_precision.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, lowp> lowp_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, mediump> mediump_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, highp> highp_dmat2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, lowp> lowp_dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, mediump> mediump_dmat2x2; - - /// 2 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, double, highp> highp_dmat2x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double2x3.hpp b/src/qged/display/glm/glm/ext/matrix_double2x3.hpp deleted file mode 100644 index 05b4c4948b2..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double2x3.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double2x3.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 3, double, defaultp> dmat2x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double2x3_precision.hpp b/src/qged/display/glm/glm/ext/matrix_double2x3_precision.hpp deleted file mode 100644 index 0691acbf21c..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double2x3_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double2x3_precision.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, lowp> lowp_dmat2x3; - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, mediump> mediump_dmat2x3; - - /// 2 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, double, highp> highp_dmat2x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double2x4.hpp b/src/qged/display/glm/glm/ext/matrix_double2x4.hpp deleted file mode 100644 index 1e458487e5a..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double2x4.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double2x4.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 4, double, defaultp> dmat2x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double2x4_precision.hpp b/src/qged/display/glm/glm/ext/matrix_double2x4_precision.hpp deleted file mode 100644 index 88b1e6252bc..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double2x4_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double2x4_precision.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, lowp> lowp_dmat2x4; - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, mediump> mediump_dmat2x4; - - /// 2 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, double, highp> highp_dmat2x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double3x2.hpp b/src/qged/display/glm/glm/ext/matrix_double3x2.hpp deleted file mode 100644 index 2a2d20dce1b..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double3x2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double3x2.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 2, double, defaultp> dmat3x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double3x2_precision.hpp b/src/qged/display/glm/glm/ext/matrix_double3x2_precision.hpp deleted file mode 100644 index 74c22323970..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double3x2_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double3x2_precision.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, lowp> lowp_dmat3x2; - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, mediump> mediump_dmat3x2; - - /// 3 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, double, highp> highp_dmat3x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double3x3.hpp b/src/qged/display/glm/glm/ext/matrix_double3x3.hpp deleted file mode 100644 index 0917eb15e09..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double3x3.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double3x3.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, double, defaultp> dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, double, defaultp> dmat3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double3x3_precision.hpp b/src/qged/display/glm/glm/ext/matrix_double3x3_precision.hpp deleted file mode 100644 index 42400a8e0e3..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double3x3_precision.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double3x3_precision.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, lowp> lowp_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, mediump> mediump_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, highp> highp_dmat3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, lowp> lowp_dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, mediump> mediump_dmat3x3; - - /// 3 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, double, highp> highp_dmat3x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double3x4.hpp b/src/qged/display/glm/glm/ext/matrix_double3x4.hpp deleted file mode 100644 index ebf9bee3e15..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double3x4.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double3x4.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 4, double, defaultp> dmat3x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double3x4_precision.hpp b/src/qged/display/glm/glm/ext/matrix_double3x4_precision.hpp deleted file mode 100644 index 41b53f56816..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double3x4_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double3x4_precision.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, lowp> lowp_dmat3x4; - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, mediump> mediump_dmat3x4; - - /// 3 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, double, highp> highp_dmat3x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double4x2.hpp b/src/qged/display/glm/glm/ext/matrix_double4x2.hpp deleted file mode 100644 index 3baaa4d59ed..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double4x2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double4x2.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 2 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 2, double, defaultp> dmat4x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double4x2_precision.hpp b/src/qged/display/glm/glm/ext/matrix_double4x2_precision.hpp deleted file mode 100644 index 067561d78cc..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double4x2_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double4x2_precision.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, lowp> lowp_dmat4x2; - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, mediump> mediump_dmat4x2; - - /// 4 columns of 2 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, double, highp> highp_dmat4x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double4x3.hpp b/src/qged/display/glm/glm/ext/matrix_double4x3.hpp deleted file mode 100644 index 7bbb239683b..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double4x3.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double4x3.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 3 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 3, double, defaultp> dmat4x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double4x3_precision.hpp b/src/qged/display/glm/glm/ext/matrix_double4x3_precision.hpp deleted file mode 100644 index 75037bce11b..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double4x3_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double4x3_precision.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, lowp> lowp_dmat4x3; - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, mediump> mediump_dmat4x3; - - /// 4 columns of 3 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, double, highp> highp_dmat4x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double4x4.hpp b/src/qged/display/glm/glm/ext/matrix_double4x4.hpp deleted file mode 100644 index 1f55d6c9eca..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double4x4.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double4x4.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, double, defaultp> dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, double, defaultp> dmat4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_double4x4_precision.hpp b/src/qged/display/glm/glm/ext/matrix_double4x4_precision.hpp deleted file mode 100644 index 41517d36c09..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_double4x4_precision.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_double4x4_precision.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, lowp> lowp_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, mediump> mediump_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, highp> highp_dmat4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, lowp> lowp_dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, mediump> mediump_dmat4x4; - - /// 4 columns of 4 components matrix of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, double, highp> highp_dmat4x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float2x2.hpp b/src/qged/display/glm/glm/ext/matrix_float2x2.hpp deleted file mode 100644 index aed7b22372b..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float2x2.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float2x2.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, float, defaultp> mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 2, float, defaultp> mat2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float2x2_precision.hpp b/src/qged/display/glm/glm/ext/matrix_float2x2_precision.hpp deleted file mode 100644 index 6e7f69b816c..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float2x2_precision.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, lowp> lowp_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, mediump> mediump_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, highp> highp_mat2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, lowp> lowp_mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, mediump> mediump_mat2x2; - - /// 2 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 2, float, highp> highp_mat2x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float2x3.hpp b/src/qged/display/glm/glm/ext/matrix_float2x3.hpp deleted file mode 100644 index d05f12615f5..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float2x3.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float2x3.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 3, float, defaultp> mat2x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float2x3_precision.hpp b/src/qged/display/glm/glm/ext/matrix_float2x3_precision.hpp deleted file mode 100644 index ccc043f229e..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float2x3_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float2x3_precision.hpp - -#pragma once -#include "../detail/type_mat2x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, lowp> lowp_mat2x3; - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, mediump> mediump_mat2x3; - - /// 2 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 3, float, highp> highp_mat2x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float2x4.hpp b/src/qged/display/glm/glm/ext/matrix_float2x4.hpp deleted file mode 100644 index 84e75cf8312..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float2x4.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float2x4.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 2 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<2, 4, float, defaultp> mat2x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float2x4_precision.hpp b/src/qged/display/glm/glm/ext/matrix_float2x4_precision.hpp deleted file mode 100644 index 1e94ce3bed1..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float2x4_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float2x4_precision.hpp - -#pragma once -#include "../detail/type_mat2x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, lowp> lowp_mat2x4; - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, mediump> mediump_mat2x4; - - /// 2 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<2, 4, float, highp> highp_mat2x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float3x2.hpp b/src/qged/display/glm/glm/ext/matrix_float3x2.hpp deleted file mode 100644 index 1945a65da26..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float3x2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float3x2.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core - /// @{ - - /// 3 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 2, float, defaultp> mat3x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float3x2_precision.hpp b/src/qged/display/glm/glm/ext/matrix_float3x2_precision.hpp deleted file mode 100644 index b9906724730..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float3x2_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float3x2_precision.hpp - -#pragma once -#include "../detail/type_mat3x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, lowp> lowp_mat3x2; - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, mediump> mediump_mat3x2; - - /// 3 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 2, float, highp> highp_mat3x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float3x3.hpp b/src/qged/display/glm/glm/ext/matrix_float3x3.hpp deleted file mode 100644 index ece2dd971d0..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float3x3.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float3x3.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, float, defaultp> mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 3, float, defaultp> mat3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float3x3_precision.hpp b/src/qged/display/glm/glm/ext/matrix_float3x3_precision.hpp deleted file mode 100644 index 1216ccb2bb3..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float3x3_precision.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float3x3_precision.hpp - -#pragma once -#include "../detail/type_mat3x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, lowp> lowp_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, mediump> mediump_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, highp> highp_mat3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, lowp> lowp_mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, mediump> mediump_mat3x3; - - /// 3 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 3, float, highp> highp_mat3x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float3x4.hpp b/src/qged/display/glm/glm/ext/matrix_float3x4.hpp deleted file mode 100644 index d663e2dc0ae..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float3x4.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float3x4.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 3 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<3, 4, float, defaultp> mat3x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float3x4_precision.hpp b/src/qged/display/glm/glm/ext/matrix_float3x4_precision.hpp deleted file mode 100644 index 36f85053c30..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float3x4_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float3x4_precision.hpp - -#pragma once -#include "../detail/type_mat3x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, lowp> lowp_mat3x4; - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, mediump> mediump_mat3x4; - - /// 3 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<3, 4, float, highp> highp_mat3x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float4x2.hpp b/src/qged/display/glm/glm/ext/matrix_float4x2.hpp deleted file mode 100644 index ee4bc57d30b..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float4x2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float4x2.hpp - -#pragma once -#include "../detail/type_mat4x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 2 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 2, float, defaultp> mat4x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float4x2_precision.hpp b/src/qged/display/glm/glm/ext/matrix_float4x2_precision.hpp deleted file mode 100644 index d33db8d9121..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float4x2_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float2x2_precision.hpp - -#pragma once -#include "../detail/type_mat2x2.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, lowp> lowp_mat4x2; - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, mediump> mediump_mat4x2; - - /// 4 columns of 2 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 2, float, highp> highp_mat4x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float4x3.hpp b/src/qged/display/glm/glm/ext/matrix_float4x3.hpp deleted file mode 100644 index adbcbcaeb7c..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float4x3.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float4x3.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix - /// @{ - - /// 4 columns of 3 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 3, float, defaultp> mat4x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float4x3_precision.hpp b/src/qged/display/glm/glm/ext/matrix_float4x3_precision.hpp deleted file mode 100644 index 296c8e7cd84..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float4x3_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float4x3_precision.hpp - -#pragma once -#include "../detail/type_mat4x3.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, lowp> lowp_mat4x3; - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, mediump> mediump_mat4x3; - - /// 4 columns of 3 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 3, float, highp> highp_mat4x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float4x4.hpp b/src/qged/display/glm/glm/ext/matrix_float4x4.hpp deleted file mode 100644 index b28b45fd2d0..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float4x4.hpp +++ /dev/null @@ -1,54 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float4x4.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @ingroup core_matrix - /// @{ - - /// 4 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, float, defaultp> mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - typedef mat<4, 4, float, defaultp> mat4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_float4x4_precision.hpp b/src/qged/display/glm/glm/ext/matrix_float4x4_precision.hpp deleted file mode 100644 index 5db98483e62..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_float4x4_precision.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/matrix_float4x4_precision.hpp - -#pragma once -#include "../detail/type_mat4x4.hpp" - -namespace glm -{ - /// @addtogroup core_matrix_precision - /// @{ - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, lowp> lowp_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, mediump> mediump_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, highp> highp_mat4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, lowp> lowp_mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, mediump> mediump_mat4x4; - - /// 4 columns of 4 components matrix of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see GLSL 4.20.8 specification, section 4.1.6 Matrices - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef mat<4, 4, float, highp> highp_mat4x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int2x2.hpp b/src/qged/display/glm/glm/ext/matrix_int2x2.hpp deleted file mode 100644 index 8460a6bd59c..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int2x2.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int2x2 -/// @file glm/ext/matrix_int2x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x2 GLM_EXT_matrix_int2x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x2 - /// @{ - - /// Signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2 - typedef mat<2, 2, int, defaultp> imat2x2; - - /// Signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2 - typedef mat<2, 2, int, defaultp> imat2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int2x2_sized.hpp b/src/qged/display/glm/glm/ext/matrix_int2x2_sized.hpp deleted file mode 100644 index 31d47a8965e..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int2x2_sized.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int2x2_sized -/// @file glm/ext/matrix_int2x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x2_sized GLM_EXT_matrix_int2x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x2_sized - /// @{ - - /// 8 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int8, defaultp> i8mat2x2; - - /// 16 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int16, defaultp> i16mat2x2; - - /// 32 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int32, defaultp> i32mat2x2; - - /// 64 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int64, defaultp> i64mat2x2; - - - /// 8 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int8, defaultp> i8mat2; - - /// 16 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int16, defaultp> i16mat2; - - /// 32 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int32, defaultp> i32mat2; - - /// 64 bit signed integer 2x2 matrix. - /// - /// @see ext_matrix_int2x2_sized - typedef mat<2, 2, int64, defaultp> i64mat2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int2x3.hpp b/src/qged/display/glm/glm/ext/matrix_int2x3.hpp deleted file mode 100644 index de367adc9a7..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int2x3.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int2x3 -/// @file glm/ext/matrix_int2x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_int2x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x3 - /// @{ - - /// Signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3 - typedef mat<2, 3, int, defaultp> imat2x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int2x3_sized.hpp b/src/qged/display/glm/glm/ext/matrix_int2x3_sized.hpp deleted file mode 100644 index 00d8a93e6b1..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int2x3_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int2x3_sized -/// @file glm/ext/matrix_int2x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3_sized GLM_EXT_matrix_int2x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x3_sized - /// @{ - - /// 8 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int8, defaultp> i8mat2x3; - - /// 16 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int16, defaultp> i16mat2x3; - - /// 32 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int32, defaultp> i32mat2x3; - - /// 64 bit signed integer 2x3 matrix. - /// - /// @see ext_matrix_int2x3_sized - typedef mat<2, 3, int64, defaultp> i64mat2x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int2x4.hpp b/src/qged/display/glm/glm/ext/matrix_int2x4.hpp deleted file mode 100644 index 176b99852a8..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int2x4.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int2x4 -/// @file glm/ext/matrix_int2x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x4 GLM_EXT_matrix_int2x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x4 - /// @{ - - /// Signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4 - typedef mat<2, 4, int, defaultp> imat2x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int2x4_sized.hpp b/src/qged/display/glm/glm/ext/matrix_int2x4_sized.hpp deleted file mode 100644 index 096c6a61d09..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int2x4_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int2x4_sized -/// @file glm/ext/matrix_int2x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x4_sized GLM_EXT_matrix_int2x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int2x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int2x4_sized - /// @{ - - /// 8 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int8, defaultp> i8mat2x4; - - /// 16 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int16, defaultp> i16mat2x4; - - /// 32 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int32, defaultp> i32mat2x4; - - /// 64 bit signed integer 2x4 matrix. - /// - /// @see ext_matrix_int2x4_sized - typedef mat<2, 4, int64, defaultp> i64mat2x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int3x2.hpp b/src/qged/display/glm/glm/ext/matrix_int3x2.hpp deleted file mode 100644 index 2971e0c3029..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int3x2.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int3x2 -/// @file glm/ext/matrix_int3x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_int3x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x2 - /// @{ - - /// Signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2 - typedef mat<3, 2, int, defaultp> imat3x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int3x2_sized.hpp b/src/qged/display/glm/glm/ext/matrix_int3x2_sized.hpp deleted file mode 100644 index 1219442bfaf..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int3x2_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int3x2_sized -/// @file glm/ext/matrix_int3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2_sized GLM_EXT_matrix_int3x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x2_sized - /// @{ - - /// 8 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int8, defaultp> i8mat3x2; - - /// 16 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int16, defaultp> i16mat3x2; - - /// 32 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int32, defaultp> i32mat3x2; - - /// 64 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_int3x2_sized - typedef mat<3, 2, int64, defaultp> i64mat3x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int3x3.hpp b/src/qged/display/glm/glm/ext/matrix_int3x3.hpp deleted file mode 100644 index ea109c7385b..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int3x3.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int3x3 -/// @file glm/ext/matrix_int3x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x3 GLM_EXT_matrix_int3x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x3 - /// @{ - - /// Signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3 - typedef mat<3, 3, int, defaultp> imat3x3; - - /// Signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3 - typedef mat<3, 3, int, defaultp> imat3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int3x3_sized.hpp b/src/qged/display/glm/glm/ext/matrix_int3x3_sized.hpp deleted file mode 100644 index 97e06939ece..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int3x3_sized.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int3x3_sized -/// @file glm/ext/matrix_int3x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x3_sized GLM_EXT_matrix_int3x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x3_sized - /// @{ - - /// 8 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int8, defaultp> i8mat3x3; - - /// 16 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int16, defaultp> i16mat3x3; - - /// 32 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int32, defaultp> i32mat3x3; - - /// 64 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int64, defaultp> i64mat3x3; - - - /// 8 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int8, defaultp> i8mat3; - - /// 16 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int16, defaultp> i16mat3; - - /// 32 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int32, defaultp> i32mat3; - - /// 64 bit signed integer 3x3 matrix. - /// - /// @see ext_matrix_int3x3_sized - typedef mat<3, 3, int64, defaultp> i64mat3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int3x4.hpp b/src/qged/display/glm/glm/ext/matrix_int3x4.hpp deleted file mode 100644 index 6718d3ce46e..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int3x4.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int3x4 -/// @file glm/ext/matrix_int3x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x4 GLM_EXT_matrix_int3x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x4 - /// @{ - - /// Signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4 - typedef mat<3, 4, int, defaultp> imat3x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int3x4_sized.hpp b/src/qged/display/glm/glm/ext/matrix_int3x4_sized.hpp deleted file mode 100644 index 9b2e77fd077..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int3x4_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int3x4_sized -/// @file glm/ext/matrix_int3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x4_sized GLM_EXT_matrix_int3x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int3x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int3x4_sized - /// @{ - - /// 8 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int8, defaultp> i8mat3x4; - - /// 16 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int16, defaultp> i16mat3x4; - - /// 32 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int32, defaultp> i32mat3x4; - - /// 64 bit signed integer 3x4 matrix. - /// - /// @see ext_matrix_int3x4_sized - typedef mat<3, 4, int64, defaultp> i64mat3x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int4x2.hpp b/src/qged/display/glm/glm/ext/matrix_int4x2.hpp deleted file mode 100644 index 43a098bb876..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int4x2.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int4x2 -/// @file glm/ext/matrix_int4x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x2 GLM_EXT_matrix_int4x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x2 - /// @{ - - /// Signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2 - typedef mat<4, 2, int, defaultp> imat4x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int4x2_sized.hpp b/src/qged/display/glm/glm/ext/matrix_int4x2_sized.hpp deleted file mode 100644 index 560ddbb6080..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int4x2_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int4x2_sized -/// @file glm/ext/matrix_int4x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x2_sized GLM_EXT_matrix_int4x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x2_sized - /// @{ - - /// 8 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int8, defaultp> i8mat4x2; - - /// 16 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int16, defaultp> i16mat4x2; - - /// 32 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int32, defaultp> i32mat4x2; - - /// 64 bit signed integer 4x2 matrix. - /// - /// @see ext_matrix_int4x2_sized - typedef mat<4, 2, int64, defaultp> i64mat4x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int4x3.hpp b/src/qged/display/glm/glm/ext/matrix_int4x3.hpp deleted file mode 100644 index 6a4f43de7ee..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int4x3.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int4x3 -/// @file glm/ext/matrix_int4x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x3 GLM_EXT_matrix_int4x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x3 - /// @{ - - /// Signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3 - typedef mat<4, 3, int, defaultp> imat4x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int4x3_sized.hpp b/src/qged/display/glm/glm/ext/matrix_int4x3_sized.hpp deleted file mode 100644 index 9823cafb41e..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int4x3_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int4x3_sized -/// @file glm/ext/matrix_int4x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x3_sized GLM_EXT_matrix_int4x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x3_sized - /// @{ - - /// 8 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int8, defaultp> i8mat4x3; - - /// 16 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int16, defaultp> i16mat4x3; - - /// 32 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int32, defaultp> i32mat4x3; - - /// 64 bit signed integer 4x3 matrix. - /// - /// @see ext_matrix_int4x3_sized - typedef mat<4, 3, int64, defaultp> i64mat4x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int4x4.hpp b/src/qged/display/glm/glm/ext/matrix_int4x4.hpp deleted file mode 100644 index 6c6d88754a5..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int4x4.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int4x4 -/// @file glm/ext/matrix_int4x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x4 GLM_EXT_matrix_int4x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x4 - /// @{ - - /// Signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4 - typedef mat<4, 4, int, defaultp> imat4x4; - - /// Signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4 - typedef mat<4, 4, int, defaultp> imat4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_int4x4_sized.hpp b/src/qged/display/glm/glm/ext/matrix_int4x4_sized.hpp deleted file mode 100644 index 65a8b92dcb9..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_int4x4_sized.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_int4x4_sized -/// @file glm/ext/matrix_int4x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int4x4_sized GLM_EXT_matrix_int4x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_int4x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_int4x4_sized - /// @{ - - /// 8 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int8, defaultp> i8mat4x4; - - /// 16 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int16, defaultp> i16mat4x4; - - /// 32 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int32, defaultp> i32mat4x4; - - /// 64 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int64, defaultp> i64mat4x4; - - - /// 8 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int8, defaultp> i8mat4; - - /// 16 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int16, defaultp> i16mat4; - - /// 32 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int32, defaultp> i32mat4; - - /// 64 bit signed integer 4x4 matrix. - /// - /// @see ext_matrix_int4x4_sized - typedef mat<4, 4, int64, defaultp> i64mat4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_projection.hpp b/src/qged/display/glm/glm/ext/matrix_projection.hpp deleted file mode 100644 index df1db7242a2..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_projection.hpp +++ /dev/null @@ -1,180 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_projection -/// @file glm/ext/matrix_projection.hpp -/// -/// @defgroup ext_matrix_projection GLM_EXT_matrix_projection -/// @ingroup ext -/// -/// Functions that generate common projection transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_transform -/// @see ext_matrix_clip_space - -#pragma once - -// Dependencies -#include "../gtc/constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_projection extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_projection - /// @{ - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> projectZO( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> projectNO( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified object coordinates (obj.x, obj.y, obj.z) into window coordinates using default near and far clip planes definition. - /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param obj Specify the object coordinates. - /// @param model Specifies the current modelview matrix - /// @param proj Specifies the current projection matrix - /// @param viewport Specifies the current viewport - /// @return Return the computed window coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluProject man page - template - GLM_FUNC_DECL vec<3, T, Q> project( - vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of 0 and +1 respectively. (Direct3D clip volume definition) - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProjectZO( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates. - /// The near and far clip planes correspond to z normalized device coordinates of -1 and +1 respectively. (OpenGL clip volume definition) - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProjectNO( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Map the specified window coordinates (win.x, win.y, win.z) into object coordinates using default near and far clip planes definition. - /// To change default near and far clip planes definition use GLM_FORCE_DEPTH_ZERO_TO_ONE. - /// - /// @param win Specify the window coordinates to be mapped. - /// @param model Specifies the modelview matrix - /// @param proj Specifies the projection matrix - /// @param viewport Specifies the viewport - /// @return Returns the computed object coordinates. - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluUnProject man page - template - GLM_FUNC_DECL vec<3, T, Q> unProject( - vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport); - - /// Define a picking region - /// - /// @param center Specify the center of a picking region in window coordinates. - /// @param delta Specify the width and height, respectively, of the picking region in window coordinates. - /// @param viewport Rendering viewport - /// @tparam T Native type used for the computation. Currently supported: half (not recommended), float or double. - /// @tparam U Currently supported: Floating-point types and integer types. - /// - /// @see gluPickMatrix man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> pickMatrix( - vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport); - - /// @} -}//namespace glm - -#include "matrix_projection.inl" diff --git a/src/qged/display/glm/glm/ext/matrix_projection.inl b/src/qged/display/glm/glm/ext/matrix_projection.inl deleted file mode 100644 index 2f2c196aac5..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_projection.inl +++ /dev/null @@ -1,106 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> projectZO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); - tmp = model * tmp; - tmp = proj * tmp; - - tmp /= tmp.w; - tmp.x = tmp.x * static_cast(0.5) + static_cast(0.5); - tmp.y = tmp.y * static_cast(0.5) + static_cast(0.5); - - tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); - tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); - - return vec<3, T, Q>(tmp); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> projectNO(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - vec<4, T, Q> tmp = vec<4, T, Q>(obj, static_cast(1)); - tmp = model * tmp; - tmp = proj * tmp; - - tmp /= tmp.w; - tmp = tmp * static_cast(0.5) + static_cast(0.5); - tmp[0] = tmp[0] * T(viewport[2]) + T(viewport[0]); - tmp[1] = tmp[1] * T(viewport[3]) + T(viewport[1]); - - return vec<3, T, Q>(tmp); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> project(vec<3, T, Q> const& obj, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return projectZO(obj, model, proj, viewport); -# else - return projectNO(obj, model, proj, viewport); -# endif - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectZO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - mat<4, 4, T, Q> Inverse = inverse(proj * model); - - vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); - tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); - tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); - tmp.x = tmp.x * static_cast(2) - static_cast(1); - tmp.y = tmp.y * static_cast(2) - static_cast(1); - - vec<4, T, Q> obj = Inverse * tmp; - obj /= obj.w; - - return vec<3, T, Q>(obj); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProjectNO(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { - mat<4, 4, T, Q> Inverse = inverse(proj * model); - - vec<4, T, Q> tmp = vec<4, T, Q>(win, T(1)); - tmp.x = (tmp.x - T(viewport[0])) / T(viewport[2]); - tmp.y = (tmp.y - T(viewport[1])) / T(viewport[3]); - tmp = tmp * static_cast(2) - static_cast(1); - - vec<4, T, Q> obj = Inverse * tmp; - obj /= obj.w; - - return vec<3, T, Q>(obj); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unProject(vec<3, T, Q> const& win, mat<4, 4, T, Q> const& model, mat<4, 4, T, Q> const& proj, vec<4, U, Q> const& viewport) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_ZO_BIT - return unProjectZO(win, model, proj, viewport); -# else - return unProjectNO(win, model, proj, viewport); -# endif - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> pickMatrix(vec<2, T, Q> const& center, vec<2, T, Q> const& delta, vec<4, U, Q> const& viewport) - { - assert(delta.x > static_cast(0) && delta.y > static_cast(0)); - mat<4, 4, T, Q> Result(static_cast(1)); - - if(!(delta.x > static_cast(0) && delta.y > static_cast(0))) - return Result; // Error - - vec<3, T, Q> Temp( - (static_cast(viewport[2]) - static_cast(2) * (center.x - static_cast(viewport[0]))) / delta.x, - (static_cast(viewport[3]) - static_cast(2) * (center.y - static_cast(viewport[1]))) / delta.y, - static_cast(0)); - - // Translate and scale the picked region to the entire window - Result = translate(Result, Temp); - return scale(Result, vec<3, T, Q>(static_cast(viewport[2]) / delta.x, static_cast(viewport[3]) / delta.y, static_cast(1))); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_relational.hpp b/src/qged/display/glm/glm/ext/matrix_relational.hpp deleted file mode 100644 index 14a104812ff..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_relational.hpp +++ /dev/null @@ -1,163 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_relational -/// @file glm/ext/matrix_relational.hpp -/// -/// @defgroup ext_matrix_relational GLM_EXT_matrix_relational -/// @ingroup ext -/// -/// Exposes comparison functions for matrix types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_relational -/// @see ext_scalar_relational -/// @see ext_quaternion_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_relational - /// @{ - - /// Perform a component-wise equal-to comparison of two matrices. - /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y); - - /// Perform a component-wise not-equal-to comparison of two matrices. - /// Return a boolean vector which components value is True if this expression is satisfied per column of the matrices. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& epsilon); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(mat const& x, mat const& y, vec const& ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number of columns of the matrix - /// @tparam R Integer between 1 and 4 included that qualify the number of rows of the matrix - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, vec const& ULPs); - - /// @} -}//namespace glm - -#include "matrix_relational.inl" diff --git a/src/qged/display/glm/glm/ext/matrix_relational.inl b/src/qged/display/glm/glm/ext/matrix_relational.inl deleted file mode 100644 index b2b875309de..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_relational.inl +++ /dev/null @@ -1,82 +0,0 @@ -/// @ref ext_vector_relational -/// @file glm/ext/vector_relational.inl - -// Dependency: -#include "../ext/vector_relational.hpp" -#include "../common.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b) - { - return equal(a, b, static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, T Epsilon) - { - return equal(a, b, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& Epsilon) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = all(equal(a[i], b[i], Epsilon[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y) - { - return notEqual(x, y, static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, T Epsilon) - { - return notEqual(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& Epsilon) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = any(notEqual(a[i], b[i], Epsilon[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, int MaxULPs) - { - return equal(a, b, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(mat const& a, mat const& b, vec const& MaxULPs) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = all(equal(a[i], b[i], MaxULPs[i])); - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& x, mat const& y, int MaxULPs) - { - return notEqual(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(mat const& a, mat const& b, vec const& MaxULPs) - { - vec Result(true); - for(length_t i = 0; i < C; ++i) - Result[i] = any(notEqual(a[i], b[i], MaxULPs[i])); - return Result; - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_transform.hpp b/src/qged/display/glm/glm/ext/matrix_transform.hpp deleted file mode 100644 index 20537b4089a..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_transform.hpp +++ /dev/null @@ -1,175 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_transform -/// @file glm/ext/matrix_transform.hpp -/// -/// @defgroup ext_matrix_transform GLM_EXT_matrix_transform -/// @ingroup ext -/// -/// Defines functions that generate common transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. -/// -/// Include to use the features of this extension. -/// -/// @see ext_matrix_projection -/// @see ext_matrix_clip_space - -#pragma once - -// Dependencies -#include "../gtc/constants.hpp" -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_transform - /// @{ - - /// Builds an identity matrix. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType identity(); - - /// Builds a translation 4 * 4 matrix created from a vector of 3 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a translation vector. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @code - /// #include - /// #include - /// ... - /// glm::mat4 m = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f)); - /// // m[0][0] == 1.0f, m[0][1] == 0.0f, m[0][2] == 0.0f, m[0][3] == 0.0f - /// // m[1][0] == 0.0f, m[1][1] == 1.0f, m[1][2] == 0.0f, m[1][3] == 0.0f - /// // m[2][0] == 0.0f, m[2][1] == 0.0f, m[2][2] == 1.0f, m[2][3] == 0.0f - /// // m[3][0] == 1.0f, m[3][1] == 1.0f, m[3][2] == 1.0f, m[3][3] == 1.0f - /// @endcode - /// - /// @see - translate(mat<4, 4, T, Q> const& m, T x, T y, T z) - /// @see - translate(vec<3, T, Q> const& v) - /// @see glTranslate man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> translate( - mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); - - /// Builds a rotation 4 * 4 matrix created from an axis vector and an angle. - /// - /// @param m Input matrix multiplied by this rotation matrix. - /// @param angle Rotation angle expressed in radians. - /// @param axis Rotation axis, recommended to be normalized. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) - /// @see - rotate(T angle, vec<3, T, Q> const& v) - /// @see glRotate man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotate( - mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& axis); - - /// Builds a scale 4 * 4 matrix created from 3 scalars. - /// - /// @param m Input matrix multiplied by this scale matrix. - /// @param v Ratio of scaling for each axis. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - scale(mat<4, 4, T, Q> const& m, T x, T y, T z) - /// @see - scale(vec<3, T, Q> const& v) - /// @see glScale man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> scale( - mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v); - - /// Build a right handed look at view matrix. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAtRH( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// Build a left handed look at view matrix. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAtLH( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// Build a look at view matrix based on the default handedness. - /// - /// @param eye Position of the camera - /// @param center Position where the camera is looking at - /// @param up Normalized up vector, how the camera is oriented. Typically (0, 0, 1) - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) frustum(T const& left, T const& right, T const& bottom, T const& top, T const& nearVal, T const& farVal) - /// @see gluLookAt man page - template - GLM_FUNC_DECL mat<4, 4, T, Q> lookAt( - vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up); - - /// @} -}//namespace glm - -#include "matrix_transform.inl" diff --git a/src/qged/display/glm/glm/ext/matrix_transform.inl b/src/qged/display/glm/glm/ext/matrix_transform.inl deleted file mode 100644 index a415157e0d9..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_transform.inl +++ /dev/null @@ -1,152 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType identity() - { - return detail::init_gentype::GENTYPE>::identity(); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result(m); - Result[3] = m[0] * v[0] + m[1] * v[1] + m[2] * v[2] + m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - vec<3, T, Q> axis(normalize(v)); - vec<3, T, Q> temp((T(1) - c) * axis); - - mat<4, 4, T, Q> Rotate; - Rotate[0][0] = c + temp[0] * axis[0]; - Rotate[0][1] = temp[0] * axis[1] + s * axis[2]; - Rotate[0][2] = temp[0] * axis[2] - s * axis[1]; - - Rotate[1][0] = temp[1] * axis[0] - s * axis[2]; - Rotate[1][1] = c + temp[1] * axis[1]; - Rotate[1][2] = temp[1] * axis[2] + s * axis[0]; - - Rotate[2][0] = temp[2] * axis[0] + s * axis[1]; - Rotate[2][1] = temp[2] * axis[1] - s * axis[0]; - Rotate[2][2] = c + temp[2] * axis[2]; - - mat<4, 4, T, Q> Result; - Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate_slow(mat<4, 4, T, Q> const& m, T angle, vec<3, T, Q> const& v) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - mat<4, 4, T, Q> Result; - - vec<3, T, Q> axis = normalize(v); - - Result[0][0] = c + (static_cast(1) - c) * axis.x * axis.x; - Result[0][1] = (static_cast(1) - c) * axis.x * axis.y + s * axis.z; - Result[0][2] = (static_cast(1) - c) * axis.x * axis.z - s * axis.y; - Result[0][3] = static_cast(0); - - Result[1][0] = (static_cast(1) - c) * axis.y * axis.x - s * axis.z; - Result[1][1] = c + (static_cast(1) - c) * axis.y * axis.y; - Result[1][2] = (static_cast(1) - c) * axis.y * axis.z + s * axis.x; - Result[1][3] = static_cast(0); - - Result[2][0] = (static_cast(1) - c) * axis.z * axis.x + s * axis.y; - Result[2][1] = (static_cast(1) - c) * axis.z * axis.y - s * axis.x; - Result[2][2] = c + (static_cast(1) - c) * axis.z * axis.z; - Result[2][3] = static_cast(0); - - Result[3] = vec<4, T, Q>(0, 0, 0, 1); - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result; - Result[0] = m[0] * v[0]; - Result[1] = m[1] * v[1]; - Result[2] = m[2] * v[2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale_slow(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& v) - { - mat<4, 4, T, Q> Result(T(1)); - Result[0][0] = v.x; - Result[1][1] = v.y; - Result[2][2] = v.z; - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtRH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - vec<3, T, Q> const f(normalize(center - eye)); - vec<3, T, Q> const s(normalize(cross(f, up))); - vec<3, T, Q> const u(cross(s, f)); - - mat<4, 4, T, Q> Result(1); - Result[0][0] = s.x; - Result[1][0] = s.y; - Result[2][0] = s.z; - Result[0][1] = u.x; - Result[1][1] = u.y; - Result[2][1] = u.z; - Result[0][2] =-f.x; - Result[1][2] =-f.y; - Result[2][2] =-f.z; - Result[3][0] =-dot(s, eye); - Result[3][1] =-dot(u, eye); - Result[3][2] = dot(f, eye); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAtLH(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - vec<3, T, Q> const f(normalize(center - eye)); - vec<3, T, Q> const s(normalize(cross(up, f))); - vec<3, T, Q> const u(cross(f, s)); - - mat<4, 4, T, Q> Result(1); - Result[0][0] = s.x; - Result[1][0] = s.y; - Result[2][0] = s.z; - Result[0][1] = u.x; - Result[1][1] = u.y; - Result[2][1] = u.z; - Result[0][2] = f.x; - Result[1][2] = f.y; - Result[2][2] = f.z; - Result[3][0] = -dot(s, eye); - Result[3][1] = -dot(u, eye); - Result[3][2] = -dot(f, eye); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> lookAt(vec<3, T, Q> const& eye, vec<3, T, Q> const& center, vec<3, T, Q> const& up) - { - GLM_IF_CONSTEXPR(GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT) - return lookAtLH(eye, center, up); - else - return lookAtRH(eye, center, up); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint2x2.hpp b/src/qged/display/glm/glm/ext/matrix_uint2x2.hpp deleted file mode 100644 index e46c66ab598..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint2x2.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint2x2 -/// @file glm/ext/matrix_uint2x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x2 GLM_EXT_matrix_uint2x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x2 - /// @{ - - /// Unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2 - typedef mat<2, 2, uint, defaultp> umat2x2; - - /// Unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2 - typedef mat<2, 2, uint, defaultp> umat2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint2x2_sized.hpp b/src/qged/display/glm/glm/ext/matrix_uint2x2_sized.hpp deleted file mode 100644 index d41e0a44598..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint2x2_sized.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint2x2_sized -/// @file glm/ext/matrix_uint2x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x2_sized GLM_EXT_matrix_uint2x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x2_sized - /// @{ - - /// 8 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint8, defaultp> u8mat2x2; - - /// 16 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint16, defaultp> u16mat2x2; - - /// 32 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint32, defaultp> u32mat2x2; - - /// 64 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint64, defaultp> u64mat2x2; - - - /// 8 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint8, defaultp> u8mat2; - - /// 16 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint16, defaultp> u16mat2; - - /// 32 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint32, defaultp> u32mat2; - - /// 64 bit unsigned integer 2x2 matrix. - /// - /// @see ext_matrix_uint2x2_sized - typedef mat<2, 2, uint64, defaultp> u64mat2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint2x3.hpp b/src/qged/display/glm/glm/ext/matrix_uint2x3.hpp deleted file mode 100644 index f84b71d12a9..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint2x3.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint2x3 -/// @file glm/ext/matrix_uint2x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int2x3 GLM_EXT_matrix_uint2x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x3 - /// @{ - - /// Unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3 - typedef mat<2, 3, uint, defaultp> umat2x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint2x3_sized.hpp b/src/qged/display/glm/glm/ext/matrix_uint2x3_sized.hpp deleted file mode 100644 index 0174d988263..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint2x3_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint2x3_sized -/// @file glm/ext/matrix_uint2x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x3_sized GLM_EXT_matrix_uint2x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x3_sized - /// @{ - - /// 8 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint8, defaultp> u8mat2x3; - - /// 16 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint16, defaultp> u16mat2x3; - - /// 32 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint32, defaultp> u32mat2x3; - - /// 64 bit unsigned integer 2x3 matrix. - /// - /// @see ext_matrix_uint2x3_sized - typedef mat<2, 3, uint64, defaultp> u64mat2x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint2x4.hpp b/src/qged/display/glm/glm/ext/matrix_uint2x4.hpp deleted file mode 100644 index e048b0e6fef..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint2x4.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint2x4 -/// @file glm/ext/matrix_uint2x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x4 GLM_EXT_matrix_int2x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x4 - /// @{ - - /// Unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4 - typedef mat<2, 4, uint, defaultp> umat2x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint2x4_sized.hpp b/src/qged/display/glm/glm/ext/matrix_uint2x4_sized.hpp deleted file mode 100644 index cc70f6a66e4..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint2x4_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint2x4_sized -/// @file glm/ext/matrixu_uint2x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint2x4_sized GLM_EXT_matrix_uint2x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint2x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint2x4_sized - /// @{ - - /// 8 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint8, defaultp> u8mat2x4; - - /// 16 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint16, defaultp> u16mat2x4; - - /// 32 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint32, defaultp> u32mat2x4; - - /// 64 bit unsigned integer 2x4 matrix. - /// - /// @see ext_matrix_uint2x4_sized - typedef mat<2, 4, uint64, defaultp> u64mat2x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint3x2.hpp b/src/qged/display/glm/glm/ext/matrix_uint3x2.hpp deleted file mode 100644 index fd0868f7c4c..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint3x2.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint3x2 -/// @file glm/ext/matrix_uint3x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_int3x2 GLM_EXT_matrix_uint3x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x2 - /// @{ - - /// Unsigned integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2 - typedef mat<3, 2, uint, defaultp> umat3x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint3x2_sized.hpp b/src/qged/display/glm/glm/ext/matrix_uint3x2_sized.hpp deleted file mode 100644 index 69327bd28bc..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint3x2_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint3x2_sized -/// @file glm/ext/matrix_uint3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x2_sized GLM_EXT_matrix_uint3x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x2_sized - /// @{ - - /// 8 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint8, defaultp> u8mat3x2; - - /// 16 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint16, defaultp> u16mat3x2; - - /// 32 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint32, defaultp> u32mat3x2; - - /// 64 bit signed integer 3x2 matrix. - /// - /// @see ext_matrix_uint3x2_sized - typedef mat<3, 2, uint64, defaultp> u64mat3x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint3x3.hpp b/src/qged/display/glm/glm/ext/matrix_uint3x3.hpp deleted file mode 100644 index 64bbd2b467b..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint3x3.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint3x3 -/// @file glm/ext/matrix_uint3x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x3 GLM_EXT_matrix_uint3x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x3 - /// @{ - - /// Unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3 - typedef mat<3, 3, uint, defaultp> umat3x3; - - /// Unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3 - typedef mat<3, 3, uint, defaultp> umat3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint3x3_sized.hpp b/src/qged/display/glm/glm/ext/matrix_uint3x3_sized.hpp deleted file mode 100644 index 86a86287649..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint3x3_sized.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint3x3_sized -/// @file glm/ext/matrix_uint3x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x3_sized GLM_EXT_matrix_uint3x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x3_sized - /// @{ - - /// 8 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint8, defaultp> u8mat3x3; - - /// 16 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint16, defaultp> u16mat3x3; - - /// 32 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint32, defaultp> u32mat3x3; - - /// 64 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint64, defaultp> u64mat3x3; - - - /// 8 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint8, defaultp> u8mat3; - - /// 16 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint16, defaultp> u16mat3; - - /// 32 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint32, defaultp> u32mat3; - - /// 64 bit unsigned integer 3x3 matrix. - /// - /// @see ext_matrix_uint3x3_sized - typedef mat<3, 3, uint64, defaultp> u64mat3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint3x4.hpp b/src/qged/display/glm/glm/ext/matrix_uint3x4.hpp deleted file mode 100644 index 11103f6d7e6..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint3x4.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint3x4 -/// @file glm/ext/matrix_uint3x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x4 GLM_EXT_matrix_uint3x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x4 - /// @{ - - /// Signed integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4 - typedef mat<3, 4, uint, defaultp> umat3x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint3x4_sized.hpp b/src/qged/display/glm/glm/ext/matrix_uint3x4_sized.hpp deleted file mode 100644 index 0e0027f2d72..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint3x4_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint3x4_sized -/// @file glm/ext/matrix_uint3x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint3x4_sized GLM_EXT_matrix_uint3x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat3x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint3x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint3x4_sized - /// @{ - - /// 8 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint8, defaultp> u8mat3x4; - - /// 16 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint16, defaultp> u16mat3x4; - - /// 32 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint32, defaultp> u32mat3x4; - - /// 64 bit unsigned integer 3x4 matrix. - /// - /// @see ext_matrix_uint3x4_sized - typedef mat<3, 4, uint64, defaultp> u64mat3x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint4x2.hpp b/src/qged/display/glm/glm/ext/matrix_uint4x2.hpp deleted file mode 100644 index c7278e51ec7..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint4x2.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint4x2 -/// @file glm/ext/matrix_uint4x2.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x2 GLM_EXT_matrix_uint4x2 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x2 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x2 - /// @{ - - /// Unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2 - typedef mat<4, 2, uint, defaultp> umat4x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint4x2_sized.hpp b/src/qged/display/glm/glm/ext/matrix_uint4x2_sized.hpp deleted file mode 100644 index 8f6cf1281ce..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint4x2_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint4x2_sized -/// @file glm/ext/matrix_uint4x2_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x2_sized GLM_EXT_matrix_uint4x2_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x2_sized - /// @{ - - /// 8 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint8, defaultp> u8mat4x2; - - /// 16 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint16, defaultp> u16mat4x2; - - /// 32 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint32, defaultp> u32mat4x2; - - /// 64 bit unsigned integer 4x2 matrix. - /// - /// @see ext_matrix_uint4x2_sized - typedef mat<4, 2, uint64, defaultp> u64mat4x2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint4x3.hpp b/src/qged/display/glm/glm/ext/matrix_uint4x3.hpp deleted file mode 100644 index 2d9a495b08f..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint4x3.hpp +++ /dev/null @@ -1,64 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint4x3 -/// @file glm/ext/matrix_uint4x3.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x3 GLM_EXT_matrix_uint4x3 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x3 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x3 - /// @{ - - /// Unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3 - typedef mat<4, 3, uint, defaultp> umat4x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint4x3_sized.hpp b/src/qged/display/glm/glm/ext/matrix_uint4x3_sized.hpp deleted file mode 100644 index d9e699ff977..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint4x3_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint4x3_sized -/// @file glm/ext/matrix_uint4x3_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x3_sized GLM_EXT_matrix_uint4x3_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x3_sized - /// @{ - - /// 8 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint8, defaultp> u8mat4x3; - - /// 16 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint16, defaultp> u16mat4x3; - - /// 32 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint32, defaultp> u32mat4x3; - - /// 64 bit unsigned integer 4x3 matrix. - /// - /// @see ext_matrix_uint4x3_sized - typedef mat<4, 3, uint64, defaultp> u64mat4x3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint4x4.hpp b/src/qged/display/glm/glm/ext/matrix_uint4x4.hpp deleted file mode 100644 index aa61e5bd02b..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint4x4.hpp +++ /dev/null @@ -1,69 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint4x4 -/// @file glm/ext/matrix_uint4x4.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x4 GLM_EXT_matrix_uint4x4 -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x4 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x4 - /// @{ - - /// Unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4 - typedef mat<4, 4, uint, defaultp> umat4x4; - - /// Unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4 - typedef mat<4, 4, uint, defaultp> umat4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/matrix_uint4x4_sized.hpp b/src/qged/display/glm/glm/ext/matrix_uint4x4_sized.hpp deleted file mode 100644 index c8fd9f7938e..00000000000 --- a/src/qged/display/glm/glm/ext/matrix_uint4x4_sized.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_matrix_uint4x4_sized -/// @file glm/ext/matrix_uint4x4_sized.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_matrix_uint4x4_sized GLM_EXT_matrix_uint4x4_sized -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat4x4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_matrix_uint4x4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_matrix_uint4x4_sized - /// @{ - - /// 8 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint8, defaultp> u8mat4x4; - - /// 16 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint16, defaultp> u16mat4x4; - - /// 32 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint32, defaultp> u32mat4x4; - - /// 64 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint64, defaultp> u64mat4x4; - - - /// 8 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint8, defaultp> u8mat4; - - /// 16 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint16, defaultp> u16mat4; - - /// 32 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint32, defaultp> u32mat4; - - /// 64 bit unsigned integer 4x4 matrix. - /// - /// @see ext_matrix_uint4x4_sized - typedef mat<4, 4, uint64, defaultp> u64mat4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/quaternion_common.hpp b/src/qged/display/glm/glm/ext/quaternion_common.hpp deleted file mode 100644 index 2f15f59b356..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_common.hpp +++ /dev/null @@ -1,166 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_common -/// @file glm/ext/quaternion_common.hpp -/// -/// @defgroup ext_quaternion_common GLM_EXT_quaternion_common -/// @ingroup ext -/// -/// Provides common functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_common -/// @see ext_vector_common -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_trigonometric -/// @see ext_quaternion_transform - -#pragma once - -// Dependency: -#include "../ext/scalar_constants.hpp" -#include "../ext/quaternion_geometric.hpp" -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_common - /// @{ - - /// Spherical linear interpolation of two quaternions. - /// The interpolation is oriented and the rotation is performed at constant speed. - /// For short path spherical linear interpolation, use the slerp function. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - /// - /// @see - slerp(qua const& x, qua const& y, T const& a) - template - GLM_FUNC_DECL qua mix(qua const& x, qua const& y, T a); - - /// Linear interpolation of two quaternions. - /// The interpolation is oriented. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined in the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua lerp(qua const& x, qua const& y, T a); - - /// Spherical linear interpolation of two quaternions. - /// The interpolation always take the short path and the rotation is performed at constant speed. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua slerp(qua const& x, qua const& y, T a); - - /// Spherical linear interpolation of two quaternions with multiple spins over rotation axis. - /// The interpolation always take the short path when the spin count is positive and long path - /// when count is negative. Rotation is performed at constant speed. - /// - /// @param x A quaternion - /// @param y A quaternion - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// @param k Additional spin count. If Value is negative interpolation will be on "long" path. - /// - /// @tparam T A floating-point scalar type - /// @tparam S An integer scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua slerp(qua const& x, qua const& y, T a, S k); - - /// Returns the q conjugate. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua conjugate(qua const& q); - - /// Returns the q inverse. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua inverse(qua const& q); - - /// Returns true if x holds a NaN (not a number) - /// representation in the underlying implementation's set of - /// floating point representations. Returns false otherwise, - /// including for implementations with no NaN - /// representations. - /// - /// /!\ When using compiler fast math, this function may fail. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> isnan(qua const& x); - - /// Returns true if x holds a positive infinity or negative - /// infinity representation in the underlying implementation's - /// set of floating point representations. Returns false - /// otherwise, including for implementations with no infinity - /// representations. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> isinf(qua const& x); - - /// @} -} //namespace glm - -#include "quaternion_common.inl" diff --git a/src/qged/display/glm/glm/ext/quaternion_common.inl b/src/qged/display/glm/glm/ext/quaternion_common.inl deleted file mode 100644 index 0e4a3bb2a3c..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_common.inl +++ /dev/null @@ -1,144 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua mix(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'mix' only accept floating-point inputs"); - - T const cosTheta = dot(x, y); - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if(cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, y.w, a), - mix(x.x, y.x, a), - mix(x.y, y.y, a), - mix(x.z, y.z, a)); - } - else - { - // Essential Mathematics, page 467 - T angle = acos(cosTheta); - return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * y) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua lerp(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'lerp' only accept floating-point inputs"); - - // Lerp is only defined in [0, 1] - assert(a >= static_cast(0)); - assert(a <= static_cast(1)); - - return x * (static_cast(1) - a) + (y * a); - } - - template - GLM_FUNC_QUALIFIER qua slerp(qua const& x, qua const& y, T a) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'slerp' only accept floating-point inputs"); - - qua z = y; - - T cosTheta = dot(x, y); - - // If cosTheta < 0, the interpolation will take the long way around the sphere. - // To fix this, one quat must be negated. - if(cosTheta < static_cast(0)) - { - z = -y; - cosTheta = -cosTheta; - } - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if(cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, z.w, a), - mix(x.x, z.x, a), - mix(x.y, z.y, a), - mix(x.z, z.z, a)); - } - else - { - // Essential Mathematics, page 467 - T angle = acos(cosTheta); - return (sin((static_cast(1) - a) * angle) * x + sin(a * angle) * z) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua slerp(qua const& x, qua const& y, T a, S k) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'slerp' only accept floating-point inputs"); - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'slerp' only accept integer for spin count"); - - qua z = y; - - T cosTheta = dot(x, y); - - // If cosTheta < 0, the interpolation will take the long way around the sphere. - // To fix this, one quat must be negated. - if (cosTheta < static_cast(0)) - { - z = -y; - cosTheta = -cosTheta; - } - - // Perform a linear interpolation when cosTheta is close to 1 to avoid side effect of sin(angle) becoming a zero denominator - if (cosTheta > static_cast(1) - epsilon()) - { - // Linear interpolation - return qua( - mix(x.w, z.w, a), - mix(x.x, z.x, a), - mix(x.y, z.y, a), - mix(x.z, z.z, a)); - } - else - { - // Graphics Gems III, page 96 - T angle = acos(cosTheta); - T phi = angle + k * glm::pi(); - return (sin(angle - a * phi)* x + sin(a * phi) * z) / sin(angle); - } - } - - template - GLM_FUNC_QUALIFIER qua conjugate(qua const& q) - { - return qua(q.w, -q.x, -q.y, -q.z); - } - - template - GLM_FUNC_QUALIFIER qua inverse(qua const& q) - { - return conjugate(q) / dot(q, q); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isnan(qua const& q) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isnan' only accept floating-point inputs"); - - return vec<4, bool, Q>(isnan(q.x), isnan(q.y), isnan(q.z), isnan(q.w)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isinf(qua const& q) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isinf' only accept floating-point inputs"); - - return vec<4, bool, Q>(isinf(q.x), isinf(q.y), isinf(q.z), isinf(q.w)); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "quaternion_common_simd.inl" -#endif - diff --git a/src/qged/display/glm/glm/ext/quaternion_common_simd.inl b/src/qged/display/glm/glm/ext/quaternion_common_simd.inl deleted file mode 100644 index ddfc8a44f6a..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_common_simd.inl +++ /dev/null @@ -1,18 +0,0 @@ -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -namespace glm{ -namespace detail -{ - template - struct compute_dot, float, true> - { - static GLM_FUNC_QUALIFIER float call(qua const& x, qua const& y) - { - return _mm_cvtss_f32(glm_vec1_dot(x.data, y.data)); - } - }; -}//namespace detail -}//namespace glm - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/src/qged/display/glm/glm/ext/quaternion_double.hpp b/src/qged/display/glm/glm/ext/quaternion_double.hpp deleted file mode 100644 index 5ae436ba5bf..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_double.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_double -/// @file glm/ext/quaternion_double.hpp -/// -/// @defgroup ext_quaternion_double GLM_EXT_quaternion_double -/// @ingroup ext -/// -/// Exposes double-precision floating point quaternion type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double_precision -/// @see ext_quaternion_common -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_double extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_double - /// @{ - - /// Quaternion of double-precision floating-point numbers. - typedef qua dquat; - - /// @} -} //namespace glm - diff --git a/src/qged/display/glm/glm/ext/quaternion_double_precision.hpp b/src/qged/display/glm/glm/ext/quaternion_double_precision.hpp deleted file mode 100644 index e29af95ab9a..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_double_precision.hpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_double_precision -/// @file glm/ext/quaternion_double_precision.hpp -/// -/// @defgroup ext_quaternion_double_precision GLM_EXT_quaternion_double_precision -/// @ingroup ext -/// -/// Exposes double-precision floating point quaternion type with various precision in term of ULPs. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_double_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_double_precision - /// @{ - - /// Quaternion of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua lowp_dquat; - - /// Quaternion of medium double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua mediump_dquat; - - /// Quaternion of high double-qualifier floating-point numbers using high precision arithmetic in term of ULPs. - /// - /// @see ext_quaternion_double_precision - typedef qua highp_dquat; - - /// @} -} //namespace glm - diff --git a/src/qged/display/glm/glm/ext/quaternion_exponential.hpp b/src/qged/display/glm/glm/ext/quaternion_exponential.hpp deleted file mode 100644 index f401fc20638..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_exponential.hpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_exponential -/// @file glm/ext/quaternion_exponential.hpp -/// -/// @defgroup ext_quaternion_exponential GLM_EXT_quaternion_exponential -/// @ingroup ext -/// -/// Provides exponential functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see core_exponential -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../geometric.hpp" -#include "../ext/scalar_constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_exponential extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_transform - /// @{ - - /// Returns a exponential of a quaternion. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua exp(qua const& q); - - /// Returns a logarithm of a quaternion - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua log(qua const& q); - - /// Returns a quaternion raised to a power. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua pow(qua const& q, T y); - - /// Returns the square root of a quaternion - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua sqrt(qua const& q); - - /// @} -} //namespace glm - -#include "quaternion_exponential.inl" diff --git a/src/qged/display/glm/glm/ext/quaternion_exponential.inl b/src/qged/display/glm/glm/ext/quaternion_exponential.inl deleted file mode 100644 index 8456c00aff6..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_exponential.inl +++ /dev/null @@ -1,85 +0,0 @@ -#include "scalar_constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua exp(qua const& q) - { - vec<3, T, Q> u(q.x, q.y, q.z); - T const Angle = glm::length(u); - if (Angle < epsilon()) - return qua(); - - vec<3, T, Q> const v(u / Angle); - return qua(cos(Angle), sin(Angle) * v); - } - - template - GLM_FUNC_QUALIFIER qua log(qua const& q) - { - vec<3, T, Q> u(q.x, q.y, q.z); - T Vec3Len = length(u); - - if (Vec3Len < epsilon()) - { - if(q.w > static_cast(0)) - return qua(log(q.w), static_cast(0), static_cast(0), static_cast(0)); - else if(q.w < static_cast(0)) - return qua(log(-q.w), pi(), static_cast(0), static_cast(0)); - else - return qua(std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity(), std::numeric_limits::infinity()); - } - else - { - T t = atan(Vec3Len, T(q.w)) / Vec3Len; - T QuatLen2 = Vec3Len * Vec3Len + q.w * q.w; - return qua(static_cast(0.5) * log(QuatLen2), t * q.x, t * q.y, t * q.z); - } - } - - template - GLM_FUNC_QUALIFIER qua pow(qua const& x, T y) - { - //Raising to the power of 0 should yield 1 - //Needed to prevent a division by 0 error later on - if(y > -epsilon() && y < epsilon()) - return qua(1,0,0,0); - - //To deal with non-unit quaternions - T magnitude = sqrt(x.x * x.x + x.y * x.y + x.z * x.z + x.w *x.w); - - T Angle; - if(abs(x.w / magnitude) > cos_one_over_two()) - { - //Scalar component is close to 1; using it to recover angle would lose precision - //Instead, we use the non-scalar components since sin() is accurate around 0 - - //Prevent a division by 0 error later on - T VectorMagnitude = x.x * x.x + x.y * x.y + x.z * x.z; - if (glm::abs(VectorMagnitude - static_cast(0)) < glm::epsilon()) { - //Equivalent to raising a real number to a power - return qua(pow(x.w, y), 0, 0, 0); - } - - Angle = asin(sqrt(VectorMagnitude) / magnitude); - } - else - { - //Scalar component is small, shouldn't cause loss of precision - Angle = acos(x.w / magnitude); - } - - T NewAngle = Angle * y; - T Div = sin(NewAngle) / sin(Angle); - T Mag = pow(magnitude, y - static_cast(1)); - return qua(cos(NewAngle) * magnitude * Mag, x.x * Div * Mag, x.y * Div * Mag, x.z * Div * Mag); - } - - template - GLM_FUNC_QUALIFIER qua sqrt(qua const& x) - { - return pow(x, static_cast(0.5)); - } -}//namespace glm - - diff --git a/src/qged/display/glm/glm/ext/quaternion_float.hpp b/src/qged/display/glm/glm/ext/quaternion_float.hpp deleted file mode 100644 index 10df8f45fac..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_float.hpp +++ /dev/null @@ -1,70 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_float -/// @file glm/ext/quaternion_float.hpp -/// -/// @defgroup ext_quaternion_float GLM_EXT_quaternion_float -/// @ingroup ext -/// -/// Exposes single-precision floating point quaternion type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_double -/// @see ext_quaternion_float_precision -/// @see ext_quaternion_common -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_float extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_float - /// @{ - - /// Quaternion of single-precision floating-point numbers. - typedef qua quat; - - /// @} -} //namespace glm - diff --git a/src/qged/display/glm/glm/ext/quaternion_float_precision.hpp b/src/qged/display/glm/glm/ext/quaternion_float_precision.hpp deleted file mode 100644 index 54982451062..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_float_precision.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_float_precision -/// @file glm/ext/quaternion_float_precision.hpp -/// -/// @defgroup ext_quaternion_float_precision GLM_EXT_quaternion_float_precision -/// @ingroup ext -/// -/// Exposes single-precision floating point quaternion type with various precision in term of ULPs. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependency: -#include "../detail/type_quat.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_float_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_float_precision - /// @{ - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua lowp_quat; - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua mediump_quat; - - /// Quaternion of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef qua highp_quat; - - /// @} -} //namespace glm - diff --git a/src/qged/display/glm/glm/ext/quaternion_geometric.hpp b/src/qged/display/glm/glm/ext/quaternion_geometric.hpp deleted file mode 100644 index 71c3e0c25e6..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_geometric.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_geometric -/// @file glm/ext/quaternion_geometric.hpp -/// -/// @defgroup ext_quaternion_geometric GLM_EXT_quaternion_geometric -/// @ingroup ext -/// -/// Provides geometric functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see core_geometric -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "../ext/vector_relational.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_geometric extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_geometric - /// @{ - - /// Returns the norm of a quaternions - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL T length(qua const& q); - - /// Returns the normalized quaternion. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL qua normalize(qua const& q); - - /// Returns dot product of q1 and q2, i.e., q1[0] * q2[0] + q1[1] * q2[1] + ... - /// - /// @tparam T Floating-point scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_DECL T dot(qua const& x, qua const& y); - - /// Compute a cross product. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_geometric - template - GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2); - - /// @} -} //namespace glm - -#include "quaternion_geometric.inl" diff --git a/src/qged/display/glm/glm/ext/quaternion_geometric.inl b/src/qged/display/glm/glm/ext/quaternion_geometric.inl deleted file mode 100644 index e155ac52180..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_geometric.inl +++ /dev/null @@ -1,36 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER T dot(qua const& x, qua const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'dot' accepts only floating-point inputs"); - return detail::compute_dot, T, detail::is_aligned::value>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER T length(qua const& q) - { - return glm::sqrt(dot(q, q)); - } - - template - GLM_FUNC_QUALIFIER qua normalize(qua const& q) - { - T len = length(q); - if(len <= static_cast(0)) // Problem - return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); - T oneOverLen = static_cast(1) / len; - return qua(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen); - } - - template - GLM_FUNC_QUALIFIER qua cross(qua const& q1, qua const& q2) - { - return qua( - q1.w * q2.w - q1.x * q2.x - q1.y * q2.y - q1.z * q2.z, - q1.w * q2.x + q1.x * q2.w + q1.y * q2.z - q1.z * q2.y, - q1.w * q2.y + q1.y * q2.w + q1.z * q2.x - q1.x * q2.z, - q1.w * q2.z + q1.z * q2.w + q1.x * q2.y - q1.y * q2.x); - } -}//namespace glm - diff --git a/src/qged/display/glm/glm/ext/quaternion_relational.hpp b/src/qged/display/glm/glm/ext/quaternion_relational.hpp deleted file mode 100644 index 6f97d069693..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_relational.hpp +++ /dev/null @@ -1,93 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_relational -/// @file glm/ext/quaternion_relational.hpp -/// -/// @defgroup ext_quaternion_relational GLM_EXT_quaternion_relational -/// @ingroup ext -/// -/// Exposes comparison functions for quaternion types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_vector_relational -/// @see ext_matrix_relational -/// @see ext_quaternion_float -/// @see ext_quaternion_double - -#pragma once - -// Dependency: -#include "../vector_relational.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_relational - /// @{ - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon); - - /// @} -} //namespace glm - -#include "quaternion_relational.inl" diff --git a/src/qged/display/glm/glm/ext/quaternion_relational.inl b/src/qged/display/glm/glm/ext/quaternion_relational.inl deleted file mode 100644 index b1713e95c6c..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_relational.inl +++ /dev/null @@ -1,35 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] == y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> equal(qua const& x, qua const& y, T epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return lessThan(abs(v), vec<4, T, Q>(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] != y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> notEqual(qua const& x, qua const& y, T epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); - } -}//namespace glm - diff --git a/src/qged/display/glm/glm/ext/quaternion_transform.hpp b/src/qged/display/glm/glm/ext/quaternion_transform.hpp deleted file mode 100644 index b0506b2048b..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_transform.hpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_transform -/// @file glm/ext/quaternion_transform.hpp -/// -/// @defgroup ext_quaternion_transform GLM_EXT_quaternion_transform -/// @ingroup ext -/// -/// Provides transformation functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_trigonometric - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../trigonometric.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_transform extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_transform - /// @{ - - /// Rotates a quaternion from a vector of 3 components axis and an angle. - /// - /// @param q Source orientation - /// @param angle Angle expressed in radians. - /// @param axis Axis of the rotation - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& axis); - /// @} -} //namespace glm - -#include "quaternion_transform.inl" diff --git a/src/qged/display/glm/glm/ext/quaternion_transform.inl b/src/qged/display/glm/glm/ext/quaternion_transform.inl deleted file mode 100644 index b87ecb65d9f..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_transform.inl +++ /dev/null @@ -1,24 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER qua rotate(qua const& q, T const& angle, vec<3, T, Q> const& v) - { - vec<3, T, Q> Tmp = v; - - // Axis of rotation must be normalised - T len = glm::length(Tmp); - if(abs(len - static_cast(1)) > static_cast(0.001)) - { - T oneOverLen = static_cast(1) / len; - Tmp.x *= oneOverLen; - Tmp.y *= oneOverLen; - Tmp.z *= oneOverLen; - } - - T const AngleRad(angle); - T const Sin = sin(AngleRad * static_cast(0.5)); - - return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); - } -}//namespace glm - diff --git a/src/qged/display/glm/glm/ext/quaternion_trigonometric.hpp b/src/qged/display/glm/glm/ext/quaternion_trigonometric.hpp deleted file mode 100644 index 9d11eef82d2..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_trigonometric.hpp +++ /dev/null @@ -1,94 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_quaternion_trigonometric -/// @file glm/ext/quaternion_trigonometric.hpp -/// -/// @defgroup ext_quaternion_trigonometric GLM_EXT_quaternion_trigonometric -/// @ingroup ext -/// -/// Provides trigonometric functions for quaternion types -/// -/// Include to use the features of this extension. -/// -/// @see ext_quaternion_float -/// @see ext_quaternion_double -/// @see ext_quaternion_exponential -/// @see ext_quaternion_geometric -/// @see ext_quaternion_relational -/// @see ext_quaternion_transform - -#pragma once - -// Dependency: -#include "../trigonometric.hpp" -#include "../exponential.hpp" -#include "scalar_constants.hpp" -#include "vector_relational.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_quaternion_trigonometric extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_quaternion_trigonometric - /// @{ - - /// Returns the quaternion rotation angle. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL T angle(qua const& x); - - /// Returns the q rotation axis. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL vec<3, T, Q> axis(qua const& x); - - /// Build a quaternion from an angle and a normalized axis. - /// - /// @param angle Angle expressed in radians. - /// @param axis Axis of the quaternion, must be normalized. - /// - /// @tparam T A floating-point scalar type - /// @tparam Q A value from qualifier enum - template - GLM_FUNC_DECL qua angleAxis(T const& angle, vec<3, T, Q> const& axis); - - /// @} -} //namespace glm - -#include "quaternion_trigonometric.inl" diff --git a/src/qged/display/glm/glm/ext/quaternion_trigonometric.inl b/src/qged/display/glm/glm/ext/quaternion_trigonometric.inl deleted file mode 100644 index 06b7c4c3c98..00000000000 --- a/src/qged/display/glm/glm/ext/quaternion_trigonometric.inl +++ /dev/null @@ -1,34 +0,0 @@ -#include "scalar_constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T angle(qua const& x) - { - if (abs(x.w) > cos_one_over_two()) - { - return asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast(2); - } - - return acos(x.w) * static_cast(2); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> axis(qua const& x) - { - T const tmp1 = static_cast(1) - x.w * x.w; - if(tmp1 <= static_cast(0)) - return vec<3, T, Q>(0, 0, 1); - T const tmp2 = static_cast(1) / sqrt(tmp1); - return vec<3, T, Q>(x.x * tmp2, x.y * tmp2, x.z * tmp2); - } - - template - GLM_FUNC_QUALIFIER qua angleAxis(T const& angle, vec<3, T, Q> const& v) - { - T const a(angle); - T const s = glm::sin(a * static_cast(0.5)); - - return qua(glm::cos(a * static_cast(0.5)), v * s); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/scalar_common.hpp b/src/qged/display/glm/glm/ext/scalar_common.hpp deleted file mode 100644 index 734187df40b..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_common.hpp +++ /dev/null @@ -1,188 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_scalar_common -/// @file glm/ext/scalar_common.hpp -/// -/// @defgroup ext_scalar_common GLM_EXT_scalar_common -/// @ingroup ext -/// -/// Exposes min and max functions for 3 to 4 scalar parameters. -/// -/// Include to use the features of this extension. -/// -/// @see core_func_common -/// @see ext_vector_common - -#pragma once - -// Dependency: -#include "../common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_common - /// @{ - - /// Returns the minimum component-wise values of 3 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T min(T a, T b, T c); - - /// Returns the minimum component-wise values of 4 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T min(T a, T b, T c, T d); - - /// Returns the maximum component-wise values of 3 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T max(T a, T b, T c); - - /// Returns the maximum component-wise values of 4 inputs - /// - /// @tparam T A floating-point scalar type. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL T max(T a, T b, T c, T d); - - /// Returns the minimum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b); - - /// Returns the minimum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b, T c); - - /// Returns the minimum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmin documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmin(T a, T b, T c, T d); - - /// Returns the maximum component-wise values of 2 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b); - - /// Returns the maximum component-wise values of 3 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b, T C); - - /// Returns the maximum component-wise values of 4 inputs. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam T A floating-point scalar type. - /// - /// @see std::fmax documentation - /// @see ext_scalar_common - template - GLM_FUNC_DECL T fmax(T a, T b, T C, T D); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common - template - GLM_FUNC_DECL genType fclamp(genType x, genType minVal, genType maxVal); - - /// Simulate GL_CLAMP OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType clamp(genType const& Texcoord); - - /// Simulate GL_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType repeat(genType const& Texcoord); - - /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType mirrorClamp(genType const& Texcoord); - - /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode - /// - /// @tparam genType Floating-point scalar types. - /// - /// @see ext_scalar_common extension. - template - GLM_FUNC_DECL genType mirrorRepeat(genType const& Texcoord); - - /// @} -}//namespace glm - -#include "scalar_common.inl" diff --git a/src/qged/display/glm/glm/ext/scalar_common.inl b/src/qged/display/glm/glm/ext/scalar_common.inl deleted file mode 100644 index 7d9207afccf..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_common.inl +++ /dev/null @@ -1,152 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER T min(T a, T b, T c) - { - return glm::min(glm::min(a, b), c); - } - - template - GLM_FUNC_QUALIFIER T min(T a, T b, T c, T d) - { - return glm::min(glm::min(a, b), glm::min(c, d)); - } - - template - GLM_FUNC_QUALIFIER T max(T a, T b, T c) - { - return glm::max(glm::max(a, b), c); - } - - template - GLM_FUNC_QUALIFIER T max(T a, T b, T c, T d) - { - return glm::max(glm::max(a, b), glm::max(c, d)); - } - -# if GLM_HAS_CXX11_STL - using std::fmin; -# else - template - GLM_FUNC_QUALIFIER T fmin(T a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return b; - return min(a, b); - } -# endif - - template - GLM_FUNC_QUALIFIER T fmin(T a, T b, T c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return fmin(b, c); - if (isnan(b)) - return fmin(a, c); - if (isnan(c)) - return min(a, b); - return min(a, b, c); - } - - template - GLM_FUNC_QUALIFIER T fmin(T a, T b, T c, T d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point input"); - - if (isnan(a)) - return fmin(b, c, d); - if (isnan(b)) - return min(a, fmin(c, d)); - if (isnan(c)) - return fmin(min(a, b), d); - if (isnan(d)) - return min(a, b, c); - return min(a, b, c, d); - } - - -# if GLM_HAS_CXX11_STL - using std::fmax; -# else - template - GLM_FUNC_QUALIFIER T fmax(T a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return b; - return max(a, b); - } -# endif - - template - GLM_FUNC_QUALIFIER T fmax(T a, T b, T c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return fmax(b, c); - if (isnan(b)) - return fmax(a, c); - if (isnan(c)) - return max(a, b); - return max(a, b, c); - } - - template - GLM_FUNC_QUALIFIER T fmax(T a, T b, T c, T d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point input"); - - if (isnan(a)) - return fmax(b, c, d); - if (isnan(b)) - return max(a, fmax(c, d)); - if (isnan(c)) - return fmax(max(a, b), d); - if (isnan(d)) - return max(a, b, c); - return max(a, b, c, d); - } - - // fclamp - template - GLM_FUNC_QUALIFIER genType fclamp(genType x, genType minVal, genType maxVal) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fclamp' only accept floating-point or integer inputs"); - return fmin(fmax(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER genType clamp(genType const& Texcoord) - { - return glm::clamp(Texcoord, static_cast(0), static_cast(1)); - } - - template - GLM_FUNC_QUALIFIER genType repeat(genType const& Texcoord) - { - return glm::fract(Texcoord); - } - - template - GLM_FUNC_QUALIFIER genType mirrorClamp(genType const& Texcoord) - { - return glm::fract(glm::abs(Texcoord)); - } - - template - GLM_FUNC_QUALIFIER genType mirrorRepeat(genType const& Texcoord) - { - genType const Abs = glm::abs(Texcoord); - genType const Clamp = glm::mod(glm::floor(Abs), static_cast(2)); - genType const Floor = glm::floor(Abs); - genType const Rest = Abs - Floor; - genType const Mirror = Clamp + Rest; - return mix(Rest, static_cast(1) - Rest, Mirror >= static_cast(1)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/scalar_constants.hpp b/src/qged/display/glm/glm/ext/scalar_constants.hpp deleted file mode 100644 index d616b742d84..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_constants.hpp +++ /dev/null @@ -1,71 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_scalar_constants -/// @file glm/ext/scalar_constants.hpp -/// -/// @defgroup ext_scalar_constants GLM_EXT_scalar_constants -/// @ingroup ext -/// -/// Provides a list of constants and precomputed useful values. -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_constants extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_constants - /// @{ - - /// Return the epsilon constant for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType epsilon(); - - /// Return the pi constant for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType pi(); - - /// Return the value of cos(1 / 2) for floating point types. - template - GLM_FUNC_DECL GLM_CONSTEXPR genType cos_one_over_two(); - - /// @} -} //namespace glm - -#include "scalar_constants.inl" diff --git a/src/qged/display/glm/glm/ext/scalar_constants.inl b/src/qged/display/glm/glm/ext/scalar_constants.inl deleted file mode 100644 index b475adf83b6..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_constants.inl +++ /dev/null @@ -1,24 +0,0 @@ -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType epsilon() - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'epsilon' only accepts floating-point inputs"); - return std::numeric_limits::epsilon(); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType pi() - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'pi' only accepts floating-point inputs"); - return static_cast(3.14159265358979323846264338327950288); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType cos_one_over_two() - { - return genType(0.877582561890372716130286068203503191); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/ext/scalar_int_sized.hpp b/src/qged/display/glm/glm/ext/scalar_int_sized.hpp deleted file mode 100644 index 5cda5994343..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_int_sized.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_scalar_int_sized -/// @file glm/ext/scalar_int_sized.hpp -/// -/// @defgroup ext_scalar_int_sized GLM_EXT_scalar_int_sized -/// @ingroup ext -/// -/// Exposes sized signed integer scalar types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_int_sized extension included") -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::int8_t int8; - typedef std::int16_t int16; - typedef std::int32_t int32; -# else - typedef signed char int8; - typedef signed short int16; - typedef signed int int32; -#endif// - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - - /// @addtogroup ext_scalar_int_sized - /// @{ - - /// 8 bit signed integer type. - typedef detail::int8 int8; - - /// 16 bit signed integer type. - typedef detail::int16 int16; - - /// 32 bit signed integer type. - typedef detail::int32 int32; - - /// 64 bit signed integer type. - typedef detail::int64 int64; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/scalar_integer.hpp b/src/qged/display/glm/glm/ext/scalar_integer.hpp deleted file mode 100644 index 2c3f759a220..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_integer.hpp +++ /dev/null @@ -1,123 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_scalar_integer -/// @file glm/ext/scalar_integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_scalar_integer GLM_EXT_scalar_integer -/// @ingroup ext -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../detail/type_float.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_integer - /// @{ - - /// Return true if the value is a power of two number. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL bool isPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType nextPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType prevPowerOfTwo(genIUType v); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL bool isMultiple(genIUType v, genIUType Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam genIUType Integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType nextMultiple(genIUType v, genIUType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genIUType Integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL genIUType prevMultiple(genIUType v, genIUType Multiple); - - /// Returns the bit number of the Nth significant bit set to - /// 1 in the binary representation of value. - /// If value bitcount is less than the Nth significant bit, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see ext_scalar_integer - template - GLM_FUNC_DECL int findNSB(genIUType x, int significantBitCount); - - /// @} -} //namespace glm - -#include "scalar_integer.inl" diff --git a/src/qged/display/glm/glm/ext/scalar_integer.inl b/src/qged/display/glm/glm/ext/scalar_integer.inl deleted file mode 100644 index efba9600975..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_integer.inl +++ /dev/null @@ -1,243 +0,0 @@ -#include "../integer.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_ceilShift - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T) - { - return v; - } - }; - - template - struct compute_ceilShift - { - GLM_FUNC_QUALIFIER static vec call(vec const& v, T Shift) - { - return v | (v >> Shift); - } - }; - - template - struct compute_ceilPowerOfTwo - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); - - vec const Sign(sign(x)); - - vec v(abs(x)); - - v = v - static_cast(1); - v = v | (v >> static_cast(1)); - v = v | (v >> static_cast(2)); - v = v | (v >> static_cast(4)); - v = compute_ceilShift= 2>::call(v, 8); - v = compute_ceilShift= 4>::call(v, 16); - v = compute_ceilShift= 8>::call(v, 32); - return (v + static_cast(1)) * Sign; - } - }; - - template - struct compute_ceilPowerOfTwo - { - GLM_FUNC_QUALIFIER static vec call(vec const& x) - { - GLM_STATIC_ASSERT(!std::numeric_limits::is_iec559, "'ceilPowerOfTwo' only accept integer scalar or vector inputs"); - - vec v(x); - - v = v - static_cast(1); - v = v | (v >> static_cast(1)); - v = v | (v >> static_cast(2)); - v = v | (v >> static_cast(4)); - v = compute_ceilShift= 2>::call(v, 8); - v = compute_ceilShift= 4>::call(v, 16); - v = compute_ceilShift= 8>::call(v, 32); - return v + static_cast(1); - } - }; - - template - struct compute_ceilMultiple{}; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source > genType(0)) - return Source + (Multiple - std::fmod(Source, Multiple)); - else - return Source + std::fmod(-Source, Multiple); - } - }; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - }; - - template<> - struct compute_ceilMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - assert(Multiple > genType(0)); - if(Source > genType(0)) - { - genType Tmp = Source - genType(1); - return Tmp + (Multiple - (Tmp % Multiple)); - } - else - return Source + (-Source % Multiple); - } - }; - - template - struct compute_floorMultiple{}; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - std::fmod(Source, Multiple); - else - return Source - std::fmod(Source, Multiple) - Multiple; - } - }; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; - - template<> - struct compute_floorMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if(Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool isPowerOfTwo(genIUType Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); - - genIUType const Result = glm::abs(Value); - return !(Result & (Result - 1)); - } - - template - GLM_FUNC_QUALIFIER genIUType nextPowerOfTwo(genIUType value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); - - return detail::compute_ceilPowerOfTwo<1, genIUType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genIUType, defaultp>(value)).x; - } - - template - GLM_FUNC_QUALIFIER genIUType prevPowerOfTwo(genIUType value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); - - return isPowerOfTwo(value) ? value : static_cast(static_cast(1) << static_cast(findMSB(value))); - } - - template - GLM_FUNC_QUALIFIER bool isMultiple(genIUType Value, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return isMultiple(vec<1, genIUType>(Value), vec<1, genIUType>(Multiple)).x; - } - - template - GLM_FUNC_QUALIFIER genIUType nextMultiple(genIUType Source, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER genIUType prevMultiple(genIUType Source, genIUType Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER int findNSB(genIUType x, int significantBitCount) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); - - if(bitCount(x) < significantBitCount) - return -1; - - genIUType const One = static_cast(1); - int bitPos = 0; - - genIUType key = x; - int nBitCount = significantBitCount; - int Step = sizeof(x) * 8 / 2; - while (key > One) - { - genIUType Mask = static_cast((One << Step) - One); - genIUType currentKey = key & Mask; - int currentBitCount = bitCount(currentKey); - if (nBitCount > currentBitCount) - { - nBitCount -= currentBitCount; - bitPos += Step; - key >>= static_cast(Step); - } - else - { - key = key & Mask; - } - - Step >>= 1; - } - - return static_cast(bitPos); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/scalar_packing.hpp b/src/qged/display/glm/glm/ext/scalar_packing.hpp deleted file mode 100644 index 53e18f701a2..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_packing.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_scalar_packing -/// @file glm/ext/scalar_packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_scalar_packing GLM_EXT_scalar_packing -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert scalar values to packed -/// formats. - -#pragma once - -// Dependency: -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_scalar_packing - /// @{ - - - /// @} -}// namespace glm - -#include "scalar_packing.inl" diff --git a/src/qged/display/glm/glm/ext/scalar_packing.inl b/src/qged/display/glm/glm/ext/scalar_packing.inl deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/qged/display/glm/glm/ext/scalar_relational.hpp b/src/qged/display/glm/glm/ext/scalar_relational.hpp deleted file mode 100644 index d458801198a..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_relational.hpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_scalar_relational -/// @file glm/ext/scalar_relational.hpp -/// -/// @defgroup ext_scalar_relational GLM_EXT_scalar_relational -/// @ingroup ext -/// -/// Exposes comparison functions for scalar types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_vector_relational -/// @see ext_matrix_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_relational extension included") -#endif - -namespace glm -{ - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison between two scalars in term of ULPs. - /// True if this expression is satisfied. - /// - /// @param x First operand. - /// @param y Second operand. - /// @param ULPs Maximum difference in ULPs between the two operators to consider them equal. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int ULPs); - - /// Returns the component-wise comparison between two scalars in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @param x First operand. - /// @param y Second operand. - /// @param ULPs Maximum difference in ULPs between the two operators to consider them not equal. - /// - /// @tparam genType Floating-point or integer scalar types - template - GLM_FUNC_DECL GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs); - - /// @} -}//namespace glm - -#include "scalar_relational.inl" diff --git a/src/qged/display/glm/glm/ext/scalar_relational.inl b/src/qged/display/glm/glm/ext/scalar_relational.inl deleted file mode 100644 index c85583ef5bb..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_relational.inl +++ /dev/null @@ -1,40 +0,0 @@ -#include "../common.hpp" -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/type_float.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, genType const& epsilon) - { - return abs(x - y) <= epsilon; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, genType const& epsilon) - { - return abs(x - y) > epsilon; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool equal(genType const& x, genType const& y, int MaxULPs) - { - detail::float_t const a(x); - detail::float_t const b(y); - - // Different signs means they do not match. - if(a.negative() != b.negative()) - return false; - - // Find the difference in ULPs. - typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); - return DiffULPs <= MaxULPs; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR bool notEqual(genType const& x, genType const& y, int ULPs) - { - return !equal(x, y, ULPs); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/scalar_uint_sized.hpp b/src/qged/display/glm/glm/ext/scalar_uint_sized.hpp deleted file mode 100644 index ca3170b98a2..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_uint_sized.hpp +++ /dev/null @@ -1,101 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_scalar_uint_sized -/// @file glm/ext/scalar_uint_sized.hpp -/// -/// @defgroup ext_scalar_uint_sized GLM_EXT_scalar_uint_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer scalar types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_uint_sized extension included") -#endif - -namespace glm{ -namespace detail -{ -# if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::uint8_t uint8; - typedef std::uint16_t uint16; - typedef std::uint32_t uint32; -# else - typedef unsigned char uint8; - typedef unsigned short uint16; - typedef unsigned int uint32; -#endif - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; - - template<> - struct is_int - { - enum test {value = ~0}; - }; -}//namespace detail - - - /// @addtogroup ext_scalar_uint_sized - /// @{ - - /// 8 bit unsigned integer type. - typedef detail::uint8 uint8; - - /// 16 bit unsigned integer type. - typedef detail::uint16 uint16; - - /// 32 bit unsigned integer type. - typedef detail::uint32 uint32; - - /// 64 bit unsigned integer type. - typedef detail::uint64 uint64; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/scalar_ulp.hpp b/src/qged/display/glm/glm/ext/scalar_ulp.hpp deleted file mode 100644 index 67bb3e173d5..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_ulp.hpp +++ /dev/null @@ -1,105 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_scalar_ulp -/// @file glm/ext/scalar_ulp.hpp -/// -/// @defgroup ext_scalar_ulp GLM_EXT_scalar_ulp -/// @ingroup ext -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_ulp -/// @see ext_scalar_relational - -#pragma once - -// Dependencies -#include "../ext/scalar_int_sized.hpp" -#include "../common.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_scalar_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType nextFloat(genType x); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType prevFloat(genType x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType nextFloat(genType x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL genType prevFloat(genType x, int ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @see ext_scalar_ulp - GLM_FUNC_DECL int floatDistance(float x, float y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @see ext_scalar_ulp - GLM_FUNC_DECL int64 floatDistance(double x, double y); - - /// @} -}//namespace glm - -#include "scalar_ulp.inl" diff --git a/src/qged/display/glm/glm/ext/scalar_ulp.inl b/src/qged/display/glm/glm/ext/scalar_ulp.inl deleted file mode 100644 index 308df150687..00000000000 --- a/src/qged/display/glm/glm/ext/scalar_ulp.inl +++ /dev/null @@ -1,284 +0,0 @@ -/// Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. -/// -/// Developed at SunPro, a Sun Microsystems, Inc. business. -/// Permission to use, copy, modify, and distribute this -/// software is freely granted, provided that this notice -/// is preserved. - -#include "../detail/type_float.hpp" -#include "../ext/scalar_constants.hpp" -#include -#include - -#if(GLM_COMPILER & GLM_COMPILER_VC) -# pragma warning(push) -# pragma warning(disable : 4127) -#endif - -typedef union -{ - float value; - /* FIXME: Assumes 32 bit int. */ - unsigned int word; -} ieee_float_shape_type; - -typedef union -{ - double value; - struct - { - int lsw; - int msw; - } parts; -} ieee_double_shape_type; - -#define GLM_EXTRACT_WORDS(ix0,ix1,d) \ - do { \ - ieee_double_shape_type ew_u; \ - ew_u.value = (d); \ - (ix0) = ew_u.parts.msw; \ - (ix1) = ew_u.parts.lsw; \ - } while (0) - -#define GLM_GET_FLOAT_WORD(i,d) \ - do { \ - ieee_float_shape_type gf_u; \ - gf_u.value = (d); \ - (i) = gf_u.word; \ - } while (0) - -#define GLM_SET_FLOAT_WORD(d,i) \ - do { \ - ieee_float_shape_type sf_u; \ - sf_u.word = (i); \ - (d) = sf_u.value; \ - } while (0) - -#define GLM_INSERT_WORDS(d,ix0,ix1) \ - do { \ - ieee_double_shape_type iw_u; \ - iw_u.parts.msw = (ix0); \ - iw_u.parts.lsw = (ix1); \ - (d) = iw_u.value; \ - } while (0) - -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER float nextafterf(float x, float y) - { - volatile float t; - int hx, hy, ix, iy; - - GLM_GET_FLOAT_WORD(hx, x); - GLM_GET_FLOAT_WORD(hy, y); - ix = hx & 0x7fffffff; // |x| - iy = hy & 0x7fffffff; // |y| - - if((ix > 0x7f800000) || // x is nan - (iy > 0x7f800000)) // y is nan - return x + y; - if(abs(y - x) <= epsilon()) - return y; // x=y, return y - if(ix == 0) - { // x == 0 - GLM_SET_FLOAT_WORD(x, (hy & 0x80000000) | 1);// return +-minsubnormal - t = x * x; - if(abs(t - x) <= epsilon()) - return t; - else - return x; // raise underflow flag - } - if(hx >= 0) - { // x > 0 - if(hx > hy) // x > y, x -= ulp - hx -= 1; - else // x < y, x += ulp - hx += 1; - } - else - { // x < 0 - if(hy >= 0 || hx > hy) // x < y, x -= ulp - hx -= 1; - else // x > y, x += ulp - hx += 1; - } - hy = hx & 0x7f800000; - if(hy >= 0x7f800000) - return x + x; // overflow - if(hy < 0x00800000) // underflow - { - t = x * x; - if(abs(t - x) > epsilon()) - { // raise underflow flag - GLM_SET_FLOAT_WORD(y, hx); - return y; - } - } - GLM_SET_FLOAT_WORD(x, hx); - return x; - } - - GLM_FUNC_QUALIFIER double nextafter(double x, double y) - { - volatile double t; - int hx, hy, ix, iy; - unsigned int lx, ly; - - GLM_EXTRACT_WORDS(hx, lx, x); - GLM_EXTRACT_WORDS(hy, ly, y); - ix = hx & 0x7fffffff; // |x| - iy = hy & 0x7fffffff; // |y| - - if(((ix >= 0x7ff00000) && ((ix - 0x7ff00000) | lx) != 0) || // x is nan - ((iy >= 0x7ff00000) && ((iy - 0x7ff00000) | ly) != 0)) // y is nan - return x + y; - if(abs(y - x) <= epsilon()) - return y; // x=y, return y - if((ix | lx) == 0) - { // x == 0 - GLM_INSERT_WORDS(x, hy & 0x80000000, 1); // return +-minsubnormal - t = x * x; - if(abs(t - x) <= epsilon()) - return t; - else - return x; // raise underflow flag - } - if(hx >= 0) { // x > 0 - if(hx > hy || ((hx == hy) && (lx > ly))) { // x > y, x -= ulp - if(lx == 0) hx -= 1; - lx -= 1; - } - else { // x < y, x += ulp - lx += 1; - if(lx == 0) hx += 1; - } - } - else { // x < 0 - if(hy >= 0 || hx > hy || ((hx == hy) && (lx > ly))){// x < y, x -= ulp - if(lx == 0) hx -= 1; - lx -= 1; - } - else { // x > y, x += ulp - lx += 1; - if(lx == 0) hx += 1; - } - } - hy = hx & 0x7ff00000; - if(hy >= 0x7ff00000) - return x + x; // overflow - if(hy < 0x00100000) - { // underflow - t = x * x; - if(abs(t - x) > epsilon()) - { // raise underflow flag - GLM_INSERT_WORDS(y, hx, lx); - return y; - } - } - GLM_INSERT_WORDS(x, hx, lx); - return x; - } -}//namespace detail -}//namespace glm - -#if(GLM_COMPILER & GLM_COMPILER_VC) -# pragma warning(pop) -#endif - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER float nextFloat(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MAX); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MAX); -# else - return nextafterf(x, FLT_MAX); -# endif - } - - template<> - GLM_FUNC_QUALIFIER double nextFloat(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafter(x, std::numeric_limits::max()); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MAX); -# else - return nextafter(x, DBL_MAX); -# endif - } - - template - GLM_FUNC_QUALIFIER T nextFloat(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for(int i = 0; i < ULPs; ++i) - temp = nextFloat(temp); - return temp; - } - - GLM_FUNC_QUALIFIER float prevFloat(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MIN); -# else - return nextafterf(x, FLT_MIN); -# endif - } - - GLM_FUNC_QUALIFIER double prevFloat(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return _nextafter(x, DBL_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MIN); -# else - return nextafter(x, DBL_MIN); -# endif - } - - template - GLM_FUNC_QUALIFIER T prevFloat(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for(int i = 0; i < ULPs; ++i) - temp = prevFloat(temp); - return temp; - } - - GLM_FUNC_QUALIFIER int floatDistance(float x, float y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - GLM_FUNC_QUALIFIER int64 floatDistance(double x, double y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_bool1.hpp b/src/qged/display/glm/glm/ext/vector_bool1.hpp deleted file mode 100644 index 1f21b7ae476..00000000000 --- a/src/qged/display/glm/glm/ext/vector_bool1.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_bool1 -/// @file glm/ext/vector_bool1.hpp -/// -/// @defgroup ext_vector_bool1 GLM_EXT_vector_bool1 -/// @ingroup ext -/// -/// Exposes bvec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_bool1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_bool1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_bool1 - /// @{ - - /// 1 components vector of boolean. - typedef vec<1, bool, defaultp> bvec1; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_bool1_precision.hpp b/src/qged/display/glm/glm/ext/vector_bool1_precision.hpp deleted file mode 100644 index f299dd64979..00000000000 --- a/src/qged/display/glm/glm/ext/vector_bool1_precision.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_bool1_precision -/// @file glm/ext/vector_bool1_precision.hpp -/// -/// @defgroup ext_vector_bool1_precision GLM_EXT_vector_bool1_precision -/// @ingroup ext -/// -/// Exposes highp_bvec1, mediump_bvec1 and lowp_bvec1 types. -/// -/// Include to use the features of this extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_bool1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_bool1_precision - /// @{ - - /// 1 component vector of bool values. - typedef vec<1, bool, highp> highp_bvec1; - - /// 1 component vector of bool values. - typedef vec<1, bool, mediump> mediump_bvec1; - - /// 1 component vector of bool values. - typedef vec<1, bool, lowp> lowp_bvec1; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_bool2.hpp b/src/qged/display/glm/glm/ext/vector_bool2.hpp deleted file mode 100644 index 7e52ef2de8f..00000000000 --- a/src/qged/display/glm/glm/ext/vector_bool2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_bool2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, bool, defaultp> bvec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_bool2_precision.hpp b/src/qged/display/glm/glm/ext/vector_bool2_precision.hpp deleted file mode 100644 index bfa40975879..00000000000 --- a/src/qged/display/glm/glm/ext/vector_bool2_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_bool2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, highp> highp_bvec2; - - /// 2 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, mediump> mediump_bvec2; - - /// 2 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, bool, lowp> lowp_bvec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_bool3.hpp b/src/qged/display/glm/glm/ext/vector_bool3.hpp deleted file mode 100644 index fb0d4c166e6..00000000000 --- a/src/qged/display/glm/glm/ext/vector_bool3.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_bool3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, bool, defaultp> bvec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_bool3_precision.hpp b/src/qged/display/glm/glm/ext/vector_bool3_precision.hpp deleted file mode 100644 index da5c9bdc837..00000000000 --- a/src/qged/display/glm/glm/ext/vector_bool3_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_bool3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, highp> highp_bvec3; - - /// 3 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, mediump> mediump_bvec3; - - /// 3 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, bool, lowp> lowp_bvec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_bool4.hpp b/src/qged/display/glm/glm/ext/vector_bool4.hpp deleted file mode 100644 index 6b0752f914c..00000000000 --- a/src/qged/display/glm/glm/ext/vector_bool4.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_bool4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of boolean. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, bool, defaultp> bvec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_bool4_precision.hpp b/src/qged/display/glm/glm/ext/vector_bool4_precision.hpp deleted file mode 100644 index 9ceb3d0c37e..00000000000 --- a/src/qged/display/glm/glm/ext/vector_bool4_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_bool4_precision.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, highp> highp_bvec4; - - /// 4 components vector of medium qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, mediump> mediump_bvec4; - - /// 4 components vector of low qualifier bool numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, bool, lowp> lowp_bvec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_common.hpp b/src/qged/display/glm/glm/ext/vector_common.hpp deleted file mode 100644 index 221abc0eed5..00000000000 --- a/src/qged/display/glm/glm/ext/vector_common.hpp +++ /dev/null @@ -1,235 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_common -/// @file glm/ext/vector_common.hpp -/// -/// @defgroup ext_vector_common GLM_EXT_vector_common -/// @ingroup ext -/// -/// Exposes min and max functions for 3 to 4 vector parameters. -/// -/// Include to use the features of this extension. -/// -/// @see core_common -/// @see ext_scalar_common - -#pragma once - -// Dependency: -#include "../ext/scalar_common.hpp" -#include "../common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_common extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_common - /// @{ - - /// Return the minimum component-wise values of 3 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c); - - /// Return the minimum component-wise values of 4 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec min(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Return the maximum component-wise values of 3 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z); - - /// Return the maximum component-wise values of 4 inputs - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec max( vec const& x, vec const& y, vec const& z, vec const& w); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& x, T y); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& x, vec const& y); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c); - - /// Returns y if y < x; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmin documentation - template - GLM_FUNC_DECL vec fmin(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, T b); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c); - - /// Returns y if x < y; otherwise, it returns x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see std::fmax documentation - template - GLM_FUNC_DECL vec fmax(vec const& a, vec const& b, vec const& c, vec const& d); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common - template - GLM_FUNC_DECL vec fclamp(vec const& x, T minVal, T maxVal); - - /// Returns min(max(x, minVal), maxVal) for each component in x. If one of the two arguments is NaN, the value of the other argument is returned. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common - template - GLM_FUNC_DECL vec fclamp(vec const& x, vec const& minVal, vec const& maxVal); - - /// Simulate GL_CLAMP OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec clamp(vec const& Texcoord); - - /// Simulate GL_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec repeat(vec const& Texcoord); - - /// Simulate GL_MIRRORED_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec mirrorClamp(vec const& Texcoord); - - /// Simulate GL_MIRROR_REPEAT OpenGL wrap mode - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_common extension. - template - GLM_FUNC_DECL vec mirrorRepeat(vec const& Texcoord); - - /// @} -}//namespace glm - -#include "vector_common.inl" diff --git a/src/qged/display/glm/glm/ext/vector_common.inl b/src/qged/display/glm/glm/ext/vector_common.inl deleted file mode 100644 index e2747be7b2b..00000000000 --- a/src/qged/display/glm/glm/ext/vector_common.inl +++ /dev/null @@ -1,129 +0,0 @@ -#include "../detail/_vectorize.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'min' only accept floating-point or integer inputs"); - return glm::min(glm::min(x, y), z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec min(vec const& x, vec const& y, vec const& z, vec const& w) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'min' only accept floating-point or integer inputs"); - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'max' only accept floating-point or integer inputs"); - return glm::max(glm::max(x, y), z); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec max(vec const& x, vec const& y, vec const& z, vec const& w) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'max' only accept floating-point or integer inputs"); - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return detail::functor2::call(fmin, a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return detail::functor2::call(fmin, a, b); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return fmin(fmin(a, b), c); - } - - template - GLM_FUNC_QUALIFIER vec fmin(vec const& a, vec const& b, vec const& c, vec const& d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmin' only accept floating-point inputs"); - return fmin(fmin(a, b), fmin(c, d)); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, T b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return detail::functor2::call(fmax, a, vec(b)); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return detail::functor2::call(fmax, a, b); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return fmax(fmax(a, b), c); - } - - template - GLM_FUNC_QUALIFIER vec fmax(vec const& a, vec const& b, vec const& c, vec const& d) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fmax' only accept floating-point inputs"); - return fmax(fmax(a, b), fmax(c, d)); - } - - template - GLM_FUNC_QUALIFIER vec fclamp(vec const& x, T minVal, T maxVal) - { - return fmin(fmax(x, vec(minVal)), vec(maxVal)); - } - - template - GLM_FUNC_QUALIFIER vec fclamp(vec const& x, vec const& minVal, vec const& maxVal) - { - return fmin(fmax(x, minVal), maxVal); - } - - template - GLM_FUNC_QUALIFIER vec clamp(vec const& Texcoord) - { - return glm::clamp(Texcoord, vec(0), vec(1)); - } - - template - GLM_FUNC_QUALIFIER vec repeat(vec const& Texcoord) - { - return glm::fract(Texcoord); - } - - template - GLM_FUNC_QUALIFIER vec mirrorClamp(vec const& Texcoord) - { - return glm::fract(glm::abs(Texcoord)); - } - - template - GLM_FUNC_QUALIFIER vec mirrorRepeat(vec const& Texcoord) - { - vec const Abs = glm::abs(Texcoord); - vec const Clamp = glm::mod(glm::floor(Abs), vec(2)); - vec const Floor = glm::floor(Abs); - vec const Rest = Abs - Floor; - vec const Mirror = Clamp + Rest; - return mix(Rest, vec(1) - Rest, glm::greaterThanEqual(Mirror, vec(1))); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_double1.hpp b/src/qged/display/glm/glm/ext/vector_double1.hpp deleted file mode 100644 index d442ef0c011..00000000000 --- a/src/qged/display/glm/glm/ext/vector_double1.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_double1 -/// @file glm/ext/vector_double1.hpp -/// -/// @defgroup ext_vector_double1 GLM_EXT_vector_double1 -/// @ingroup ext -/// -/// Exposes double-precision floating point vector type with one component. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_double1_precision extension. -/// @see ext_vector_float1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_double1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_double1 - /// @{ - - /// 1 components vector of double-precision floating-point numbers. - typedef vec<1, double, defaultp> dvec1; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_double1_precision.hpp b/src/qged/display/glm/glm/ext/vector_double1_precision.hpp deleted file mode 100644 index 3b211c0b70b..00000000000 --- a/src/qged/display/glm/glm/ext/vector_double1_precision.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_double1_precision -/// @file glm/ext/vector_double1_precision.hpp -/// -/// @defgroup ext_vector_double1_precision GLM_EXT_vector_double1_precision -/// @ingroup ext -/// -/// Exposes highp_dvec1, mediump_dvec1 and lowp_dvec1 types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_double1 - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_double1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_double1_precision - /// @{ - - /// 1 component vector of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, highp> highp_dvec1; - - /// 1 component vector of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, mediump> mediump_dvec1; - - /// 1 component vector of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, lowp> lowp_dvec1; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_double2.hpp b/src/qged/display/glm/glm/ext/vector_double2.hpp deleted file mode 100644 index f2861283522..00000000000 --- a/src/qged/display/glm/glm/ext/vector_double2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_double2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, double, defaultp> dvec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_double2_precision.hpp b/src/qged/display/glm/glm/ext/vector_double2_precision.hpp deleted file mode 100644 index 6f8c657386c..00000000000 --- a/src/qged/display/glm/glm/ext/vector_double2_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_double2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, highp> highp_dvec2; - - /// 2 components vector of medium double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, mediump> mediump_dvec2; - - /// 2 components vector of low double-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, double, lowp> lowp_dvec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_double3.hpp b/src/qged/display/glm/glm/ext/vector_double3.hpp deleted file mode 100644 index dc09ee780b0..00000000000 --- a/src/qged/display/glm/glm/ext/vector_double3.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_double3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, double, defaultp> dvec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_double3_precision.hpp b/src/qged/display/glm/glm/ext/vector_double3_precision.hpp deleted file mode 100644 index dee2f805bdb..00000000000 --- a/src/qged/display/glm/glm/ext/vector_double3_precision.hpp +++ /dev/null @@ -1,65 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_double3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, highp> highp_dvec3; - - /// 3 components vector of medium double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, mediump> mediump_dvec3; - - /// 3 components vector of low double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, double, lowp> lowp_dvec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_double4.hpp b/src/qged/display/glm/glm/ext/vector_double4.hpp deleted file mode 100644 index e44c906643d..00000000000 --- a/src/qged/display/glm/glm/ext/vector_double4.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_double4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of double-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, double, defaultp> dvec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_double4_precision.hpp b/src/qged/display/glm/glm/ext/vector_double4_precision.hpp deleted file mode 100644 index cf3786166ce..00000000000 --- a/src/qged/display/glm/glm/ext/vector_double4_precision.hpp +++ /dev/null @@ -1,66 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_double4_precision.hpp - -#pragma once -#include "../detail/setup.hpp" -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, highp> highp_dvec4; - - /// 4 components vector of medium double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, mediump> mediump_dvec4; - - /// 4 components vector of low double-qualifier floating-point numbers. - /// There is no guarantee on the actual qualifier. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, double, lowp> lowp_dvec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_float1.hpp b/src/qged/display/glm/glm/ext/vector_float1.hpp deleted file mode 100644 index 9151e85115f..00000000000 --- a/src/qged/display/glm/glm/ext/vector_float1.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_float1 -/// @file glm/ext/vector_float1.hpp -/// -/// @defgroup ext_vector_float1 GLM_EXT_vector_float1 -/// @ingroup ext -/// -/// Exposes single-precision floating point vector type with one component. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_float1_precision extension. -/// @see ext_vector_double1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_float1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_float1 - /// @{ - - /// 1 components vector of single-precision floating-point numbers. - typedef vec<1, float, defaultp> vec1; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_float1_precision.hpp b/src/qged/display/glm/glm/ext/vector_float1_precision.hpp deleted file mode 100644 index 6c02cf1b906..00000000000 --- a/src/qged/display/glm/glm/ext/vector_float1_precision.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_float1_precision -/// @file glm/ext/vector_float1_precision.hpp -/// -/// @defgroup ext_vector_float1_precision GLM_EXT_vector_float1_precision -/// @ingroup ext -/// -/// Exposes highp_vec1, mediump_vec1 and lowp_vec1 types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_float1 extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_float1_precision extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_float1_precision - /// @{ - - /// 1 component vector of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, highp> highp_vec1; - - /// 1 component vector of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, mediump> mediump_vec1; - - /// 1 component vector of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, lowp> lowp_vec1; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_float2.hpp b/src/qged/display/glm/glm/ext/vector_float2.hpp deleted file mode 100644 index 1572d42c8ad..00000000000 --- a/src/qged/display/glm/glm/ext/vector_float2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_float2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, float, defaultp> vec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_float2_precision.hpp b/src/qged/display/glm/glm/ext/vector_float2_precision.hpp deleted file mode 100644 index 04dee612e08..00000000000 --- a/src/qged/display/glm/glm/ext/vector_float2_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_float2_precision.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 2 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, highp> highp_vec2; - - /// 2 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, mediump> mediump_vec2; - - /// 2 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<2, float, lowp> lowp_vec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_float3.hpp b/src/qged/display/glm/glm/ext/vector_float3.hpp deleted file mode 100644 index f82998c0057..00000000000 --- a/src/qged/display/glm/glm/ext/vector_float3.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_float3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, float, defaultp> vec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_float3_precision.hpp b/src/qged/display/glm/glm/ext/vector_float3_precision.hpp deleted file mode 100644 index b5e40b1c7d9..00000000000 --- a/src/qged/display/glm/glm/ext/vector_float3_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_float3_precision.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 3 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, highp> highp_vec3; - - /// 3 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, mediump> mediump_vec3; - - /// 3 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<3, float, lowp> lowp_vec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_float4.hpp b/src/qged/display/glm/glm/ext/vector_float4.hpp deleted file mode 100644 index 8bd241e57b2..00000000000 --- a/src/qged/display/glm/glm/ext/vector_float4.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_float4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of single-precision floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, float, defaultp> vec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_float4_precision.hpp b/src/qged/display/glm/glm/ext/vector_float4_precision.hpp deleted file mode 100644 index 9a8b0149468..00000000000 --- a/src/qged/display/glm/glm/ext/vector_float4_precision.hpp +++ /dev/null @@ -1,62 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_float4_precision.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector_precision - /// @{ - - /// 4 components vector of high single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, highp> highp_vec4; - - /// 4 components vector of medium single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, mediump> mediump_vec4; - - /// 4 components vector of low single-qualifier floating-point numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - /// @see GLSL 4.20.8 specification, section 4.7.2 Precision Qualifier - typedef vec<4, float, lowp> lowp_vec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_int1.hpp b/src/qged/display/glm/glm/ext/vector_int1.hpp deleted file mode 100644 index a9cc535f8b9..00000000000 --- a/src/qged/display/glm/glm/ext/vector_int1.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_int1 -/// @file glm/ext/vector_int1.hpp -/// -/// @defgroup ext_vector_int1 GLM_EXT_vector_int1 -/// @ingroup ext -/// -/// Exposes ivec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_uint1 extension. -/// @see ext_vector_int1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int1 - /// @{ - - /// 1 component vector of signed integer numbers. - typedef vec<1, int, defaultp> ivec1; - - /// @} -}//namespace glm - diff --git a/src/qged/display/glm/glm/ext/vector_int1_sized.hpp b/src/qged/display/glm/glm/ext/vector_int1_sized.hpp deleted file mode 100644 index a15873cf271..00000000000 --- a/src/qged/display/glm/glm/ext/vector_int1_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_int1_sized -/// @file glm/ext/vector_int1_sized.hpp -/// -/// @defgroup ext_vector_int1_sized GLM_EXT_vector_int1_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint1_sized - -#pragma once - -#include "../ext/vector_int1.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int1_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int1_sized - /// @{ - - /// 8 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int8, defaultp> i8vec1; - - /// 16 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int16, defaultp> i16vec1; - - /// 32 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int32, defaultp> i32vec1; - - /// 64 bit signed integer vector of 1 component type. - /// - /// @see ext_vector_int1_sized - typedef vec<1, int64, defaultp> i64vec1; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_int2.hpp b/src/qged/display/glm/glm/ext/vector_int2.hpp deleted file mode 100644 index 942e1c634e0..00000000000 --- a/src/qged/display/glm/glm/ext/vector_int2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_int2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, int, defaultp> ivec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_int2_sized.hpp b/src/qged/display/glm/glm/ext/vector_int2_sized.hpp deleted file mode 100644 index 941f7d2c3d5..00000000000 --- a/src/qged/display/glm/glm/ext/vector_int2_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_int2_sized -/// @file glm/ext/vector_int2_sized.hpp -/// -/// @defgroup ext_vector_int2_sized GLM_EXT_vector_int2_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 2 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint2_sized - -#pragma once - -#include "../ext/vector_int2.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int2_sized - /// @{ - - /// 8 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int8, defaultp> i8vec2; - - /// 16 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int16, defaultp> i16vec2; - - /// 32 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int32, defaultp> i32vec2; - - /// 64 bit signed integer vector of 2 components type. - /// - /// @see ext_vector_int2_sized - typedef vec<2, int64, defaultp> i64vec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_int3.hpp b/src/qged/display/glm/glm/ext/vector_int3.hpp deleted file mode 100644 index fe6d7bee066..00000000000 --- a/src/qged/display/glm/glm/ext/vector_int3.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_int3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, int, defaultp> ivec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_int3_sized.hpp b/src/qged/display/glm/glm/ext/vector_int3_sized.hpp deleted file mode 100644 index 5a5901eaacb..00000000000 --- a/src/qged/display/glm/glm/ext/vector_int3_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_int3_sized -/// @file glm/ext/vector_int3_sized.hpp -/// -/// @defgroup ext_vector_int3_sized GLM_EXT_vector_int3_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 3 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint3_sized - -#pragma once - -#include "../ext/vector_int3.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int3_sized - /// @{ - - /// 8 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int8, defaultp> i8vec3; - - /// 16 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int16, defaultp> i16vec3; - - /// 32 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int32, defaultp> i32vec3; - - /// 64 bit signed integer vector of 3 components type. - /// - /// @see ext_vector_int3_sized - typedef vec<3, int64, defaultp> i64vec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_int4.hpp b/src/qged/display/glm/glm/ext/vector_int4.hpp deleted file mode 100644 index ea990f66287..00000000000 --- a/src/qged/display/glm/glm/ext/vector_int4.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_int4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of signed integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, int, defaultp> ivec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_int4_sized.hpp b/src/qged/display/glm/glm/ext/vector_int4_sized.hpp deleted file mode 100644 index 871a9353cb6..00000000000 --- a/src/qged/display/glm/glm/ext/vector_int4_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_int4_sized -/// @file glm/ext/vector_int4_sized.hpp -/// -/// @defgroup ext_vector_int4_sized GLM_EXT_vector_int4_sized -/// @ingroup ext -/// -/// Exposes sized signed integer vector of 4 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_int_sized -/// @see ext_vector_uint4_sized - -#pragma once - -#include "../ext/vector_int4.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_int4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_int4_sized - /// @{ - - /// 8 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int8, defaultp> i8vec4; - - /// 16 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int16, defaultp> i16vec4; - - /// 32 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int32, defaultp> i32vec4; - - /// 64 bit signed integer vector of 4 components type. - /// - /// @see ext_vector_int4_sized - typedef vec<4, int64, defaultp> i64vec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_integer.hpp b/src/qged/display/glm/glm/ext/vector_integer.hpp deleted file mode 100644 index 1b0b3366204..00000000000 --- a/src/qged/display/glm/glm/ext/vector_integer.hpp +++ /dev/null @@ -1,180 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_integer -/// @file glm/ext/vector_integer.hpp -/// -/// @see core (dependence) -/// @see ext_vector_integer (dependence) -/// -/// @defgroup ext_vector_integer GLM_EXT_vector_integer -/// @ingroup ext -/// -/// Include to use the features of this extension. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_integer - /// @{ - - /// Return true if the value is a power of two number. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevPowerOfTwo(vec const& v); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isMultiple(vec const& v, T Multiple); - - /// Return true if the 'Value' is a multiple of 'Multiple'. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec isMultiple(vec const& v, vec const& Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextMultiple(vec const& v, T Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec nextMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevMultiple(vec const& v, T Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed or unsigned integer scalar types. - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec prevMultiple(vec const& v, vec const& Multiple); - - /// Returns the bit number of the Nth significant bit set to - /// 1 in the binary representation of value. - /// If value bitcount is less than the Nth significant bit, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see ext_vector_integer - template - GLM_FUNC_DECL vec findNSB(vec const& Source, vec SignificantBitCount); - - /// @} -} //namespace glm - -#include "vector_integer.inl" diff --git a/src/qged/display/glm/glm/ext/vector_integer.inl b/src/qged/display/glm/glm/ext/vector_integer.inl deleted file mode 100644 index 939ff5e2aca..00000000000 --- a/src/qged/display/glm/glm/ext/vector_integer.inl +++ /dev/null @@ -1,85 +0,0 @@ -#include "scalar_integer.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec isPowerOfTwo(vec const& Value) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isPowerOfTwo' only accept integer inputs"); - - vec const Result(abs(Value)); - return equal(Result & (Result - vec(1)), vec(0)); - } - - template - GLM_FUNC_QUALIFIER vec nextPowerOfTwo(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextPowerOfTwo' only accept integer inputs"); - - return detail::compute_ceilPowerOfTwo::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER vec prevPowerOfTwo(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevPowerOfTwo' only accept integer inputs"); - - return detail::functor1::call(prevPowerOfTwo, v); - } - - template - GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return (Value % Multiple) == vec(0); - } - - template - GLM_FUNC_QUALIFIER vec isMultiple(vec const& Value, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'isMultiple' only accept integer inputs"); - - return (Value % Multiple) == vec(0); - } - - template - GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::functor2::call(nextMultiple, Source, vec(Multiple)); - } - - template - GLM_FUNC_QUALIFIER vec nextMultiple(vec const& Source, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'nextMultiple' only accept integer inputs"); - - return detail::functor2::call(nextMultiple, Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, T Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::functor2::call(prevMultiple, Source, vec(Multiple)); - } - - template - GLM_FUNC_QUALIFIER vec prevMultiple(vec const& Source, vec const& Multiple) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'prevMultiple' only accept integer inputs"); - - return detail::functor2::call(prevMultiple, Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec findNSB(vec const& Source, vec SignificantBitCount) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'findNSB' only accept integer inputs"); - - return detail::functor2_vec_int::call(findNSB, Source, SignificantBitCount); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_packing.hpp b/src/qged/display/glm/glm/ext/vector_packing.hpp deleted file mode 100644 index 41f34390cb5..00000000000 --- a/src/qged/display/glm/glm/ext/vector_packing.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_packing -/// @file glm/ext/vector_packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup ext_vector_packing GLM_EXT_vector_packing -/// @ingroup ext -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert vectors to packed -/// formats. - -#pragma once - -// Dependency: -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_packing - /// @{ - - - /// @} -}// namespace glm - -#include "vector_packing.inl" diff --git a/src/qged/display/glm/glm/ext/vector_packing.inl b/src/qged/display/glm/glm/ext/vector_packing.inl deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/qged/display/glm/glm/ext/vector_relational.hpp b/src/qged/display/glm/glm/ext/vector_relational.hpp deleted file mode 100644 index da734280ed0..00000000000 --- a/src/qged/display/glm/glm/ext/vector_relational.hpp +++ /dev/null @@ -1,138 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_relational -/// @file glm/ext/vector_relational.hpp -/// -/// @see core (dependence) -/// @see ext_scalar_integer (dependence) -/// -/// @defgroup ext_vector_relational GLM_EXT_vector_relational -/// @ingroup ext -/// -/// Exposes comparison functions for vector types that take a user defined epsilon values. -/// -/// Include to use the features of this extension. -/// -/// @see core_vector_relational -/// @see ext_scalar_relational -/// @see ext_matrix_relational - -#pragma once - -// Dependencies -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_relational extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_relational - /// @{ - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& epsilon); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int ULPs); - - /// Returns the component-wise comparison between two vectors in term of ULPs. - /// True if this expression is not satisfied. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& ULPs); - - /// @} -}//namespace glm - -#include "vector_relational.inl" diff --git a/src/qged/display/glm/glm/ext/vector_relational.inl b/src/qged/display/glm/glm/ext/vector_relational.inl deleted file mode 100644 index 7a39ab50897..00000000000 --- a/src/qged/display/glm/glm/ext/vector_relational.inl +++ /dev/null @@ -1,75 +0,0 @@ -#include "../vector_relational.hpp" -#include "../common.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/type_float.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, T Epsilon) - { - return equal(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& Epsilon) - { - return lessThanEqual(abs(x - y), Epsilon); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, T Epsilon) - { - return notEqual(x, y, vec(Epsilon)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& Epsilon) - { - return greaterThan(abs(x - y), Epsilon); - } - - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, int MaxULPs) - { - return equal(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec equal(vec const& x, vec const& y, vec const& MaxULPs) - { - vec Result(false); - for(length_t i = 0; i < L; ++i) - { - detail::float_t const a(x[i]); - detail::float_t const b(y[i]); - - // Different signs means they do not match. - if(a.negative() != b.negative()) - { - // Check for equality to make sure +0==-0 - Result[i] = a.mantissa() == b.mantissa() && a.exponent() == b.exponent(); - } - else - { - // Find the difference in ULPs. - typename detail::float_t::int_type const DiffULPs = abs(a.i - b.i); - Result[i] = DiffULPs <= MaxULPs[i]; - } - } - return Result; - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, int MaxULPs) - { - return notEqual(x, y, vec(MaxULPs)); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y, vec const& MaxULPs) - { - return not_(equal(x, y, MaxULPs)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_uint1.hpp b/src/qged/display/glm/glm/ext/vector_uint1.hpp deleted file mode 100644 index f9742f0d584..00000000000 --- a/src/qged/display/glm/glm/ext/vector_uint1.hpp +++ /dev/null @@ -1,63 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_uint1 -/// @file glm/ext/vector_uint1.hpp -/// -/// @defgroup ext_vector_uint1 GLM_EXT_vector_uint1 -/// @ingroup ext -/// -/// Exposes uvec1 vector type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_vector_int1 extension. -/// @see ext_vector_uint1_precision extension. - -#pragma once - -#include "../detail/type_vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint1 extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint1 - /// @{ - - /// 1 component vector of unsigned integer numbers. - typedef vec<1, unsigned int, defaultp> uvec1; - - /// @} -}//namespace glm - diff --git a/src/qged/display/glm/glm/ext/vector_uint1_sized.hpp b/src/qged/display/glm/glm/ext/vector_uint1_sized.hpp deleted file mode 100644 index dfa4a527de8..00000000000 --- a/src/qged/display/glm/glm/ext/vector_uint1_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_uint1_sized -/// @file glm/ext/vector_uint1_sized.hpp -/// -/// @defgroup ext_vector_uint1_sized GLM_EXT_vector_uint1_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector types. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int1_sized - -#pragma once - -#include "../ext/vector_uint1.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint1_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint1_sized - /// @{ - - /// 8 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint8, defaultp> u8vec1; - - /// 16 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint16, defaultp> u16vec1; - - /// 32 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint32, defaultp> u32vec1; - - /// 64 bit unsigned integer vector of 1 component type. - /// - /// @see ext_vector_uint1_sized - typedef vec<1, uint64, defaultp> u64vec1; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_uint2.hpp b/src/qged/display/glm/glm/ext/vector_uint2.hpp deleted file mode 100644 index 11b6d6b75de..00000000000 --- a/src/qged/display/glm/glm/ext/vector_uint2.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_uint2.hpp - -#pragma once -#include "../detail/type_vec2.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 2 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<2, unsigned int, defaultp> uvec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_uint2_sized.hpp b/src/qged/display/glm/glm/ext/vector_uint2_sized.hpp deleted file mode 100644 index 8c092a1ba8e..00000000000 --- a/src/qged/display/glm/glm/ext/vector_uint2_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_uint2_sized -/// @file glm/ext/vector_uint2_sized.hpp -/// -/// @defgroup ext_vector_uint2_sized GLM_EXT_vector_uint2_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 2 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int2_sized - -#pragma once - -#include "../ext/vector_uint2.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint2_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint2_sized - /// @{ - - /// 8 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint8, defaultp> u8vec2; - - /// 16 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint16, defaultp> u16vec2; - - /// 32 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint32, defaultp> u32vec2; - - /// 64 bit unsigned integer vector of 2 components type. - /// - /// @see ext_vector_uint2_sized - typedef vec<2, uint64, defaultp> u64vec2; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_uint3.hpp b/src/qged/display/glm/glm/ext/vector_uint3.hpp deleted file mode 100644 index fbbeb8a9db4..00000000000 --- a/src/qged/display/glm/glm/ext/vector_uint3.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_uint3.hpp - -#pragma once -#include "../detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 3 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<3, unsigned int, defaultp> uvec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_uint3_sized.hpp b/src/qged/display/glm/glm/ext/vector_uint3_sized.hpp deleted file mode 100644 index bdc2b661ff1..00000000000 --- a/src/qged/display/glm/glm/ext/vector_uint3_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_uint3_sized -/// @file glm/ext/vector_uint3_sized.hpp -/// -/// @defgroup ext_vector_uint3_sized GLM_EXT_vector_uint3_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 3 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int3_sized - -#pragma once - -#include "../ext/vector_uint3.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint3_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint3_sized - /// @{ - - /// 8 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint8, defaultp> u8vec3; - - /// 16 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint16, defaultp> u16vec3; - - /// 32 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint32, defaultp> u32vec3; - - /// 64 bit unsigned integer vector of 3 components type. - /// - /// @see ext_vector_uint3_sized - typedef vec<3, uint64, defaultp> u64vec3; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_uint4.hpp b/src/qged/display/glm/glm/ext/vector_uint4.hpp deleted file mode 100644 index 3f127a604fe..00000000000 --- a/src/qged/display/glm/glm/ext/vector_uint4.hpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/ext/vector_uint4.hpp - -#pragma once -#include "../detail/type_vec4.hpp" - -namespace glm -{ - /// @addtogroup core_vector - /// @{ - - /// 4 components vector of unsigned integer numbers. - /// - /// @see GLSL 4.20.8 specification, section 4.1.5 Vectors - typedef vec<4, unsigned int, defaultp> uvec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_uint4_sized.hpp b/src/qged/display/glm/glm/ext/vector_uint4_sized.hpp deleted file mode 100644 index 7eea332cb0f..00000000000 --- a/src/qged/display/glm/glm/ext/vector_uint4_sized.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_uint4_sized -/// @file glm/ext/vector_uint4_sized.hpp -/// -/// @defgroup ext_vector_uint4_sized GLM_EXT_vector_uint4_sized -/// @ingroup ext -/// -/// Exposes sized unsigned integer vector of 4 components type. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_uint_sized -/// @see ext_vector_int4_sized - -#pragma once - -#include "../ext/vector_uint4.hpp" -#include "../ext/scalar_uint_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_uint4_sized extension included") -#endif - -namespace glm -{ - /// @addtogroup ext_vector_uint4_sized - /// @{ - - /// 8 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint8, defaultp> u8vec4; - - /// 16 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint16, defaultp> u16vec4; - - /// 32 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint32, defaultp> u32vec4; - - /// 64 bit unsigned integer vector of 4 components type. - /// - /// @see ext_vector_uint4_sized - typedef vec<4, uint64, defaultp> u64vec4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/ext/vector_ulp.hpp b/src/qged/display/glm/glm/ext/vector_ulp.hpp deleted file mode 100644 index 3552da68e25..00000000000 --- a/src/qged/display/glm/glm/ext/vector_ulp.hpp +++ /dev/null @@ -1,140 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref ext_vector_ulp -/// @file glm/ext/vector_ulp.hpp -/// -/// @defgroup ext_vector_ulp GLM_EXT_vector_ulp -/// @ingroup ext -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. -/// -/// Include to use the features of this extension. -/// -/// @see ext_scalar_ulp -/// @see ext_scalar_relational -/// @see ext_vector_relational - -#pragma once - -// Dependencies -#include "../ext/scalar_ulp.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_EXT_vector_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x, int ULPs); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec nextFloat(vec const& x, vec const& ULPs); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec prevFloat(vec const& x, vec const& ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see ext_scalar_ulp - template - GLM_FUNC_DECL vec floatDistance(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "vector_ulp.inl" diff --git a/src/qged/display/glm/glm/ext/vector_ulp.inl b/src/qged/display/glm/glm/ext/vector_ulp.inl deleted file mode 100644 index 91565ce5107..00000000000 --- a/src/qged/display/glm/glm/ext/vector_ulp.inl +++ /dev/null @@ -1,74 +0,0 @@ -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, int ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec nextFloat(vec const& x, vec const& ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = nextFloat(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, int ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prevFloat(vec const& x, vec const& ULPs) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prevFloat(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = floatDistance(x[i], y[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec floatDistance(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = floatDistance(x[i], y[i]); - return Result; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/fwd.hpp b/src/qged/display/glm/glm/fwd.hpp deleted file mode 100644 index bf19a74be77..00000000000 --- a/src/qged/display/glm/glm/fwd.hpp +++ /dev/null @@ -1,1264 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -#include "detail/qualifier.hpp" - -namespace glm -{ -#if GLM_HAS_EXTENDED_INTEGER_TYPE - typedef std::int8_t int8; - typedef std::int16_t int16; - typedef std::int32_t int32; - typedef std::int64_t int64; - - typedef std::uint8_t uint8; - typedef std::uint16_t uint16; - typedef std::uint32_t uint32; - typedef std::uint64_t uint64; -#else - typedef signed char int8; - typedef signed short int16; - typedef signed int int32; - typedef detail::int64 int64; - - typedef unsigned char uint8; - typedef unsigned short uint16; - typedef unsigned int uint32; - typedef detail::uint64 uint64; -#endif - - // Scalar int - - typedef int8 lowp_i8; - typedef int8 mediump_i8; - typedef int8 highp_i8; - typedef int8 i8; - - typedef int8 lowp_int8; - typedef int8 mediump_int8; - typedef int8 highp_int8; - - typedef int8 lowp_int8_t; - typedef int8 mediump_int8_t; - typedef int8 highp_int8_t; - typedef int8 int8_t; - - typedef int16 lowp_i16; - typedef int16 mediump_i16; - typedef int16 highp_i16; - typedef int16 i16; - - typedef int16 lowp_int16; - typedef int16 mediump_int16; - typedef int16 highp_int16; - - typedef int16 lowp_int16_t; - typedef int16 mediump_int16_t; - typedef int16 highp_int16_t; - typedef int16 int16_t; - - typedef int32 lowp_i32; - typedef int32 mediump_i32; - typedef int32 highp_i32; - typedef int32 i32; - - typedef int32 lowp_int32; - typedef int32 mediump_int32; - typedef int32 highp_int32; - - typedef int32 lowp_int32_t; - typedef int32 mediump_int32_t; - typedef int32 highp_int32_t; - typedef int32 int32_t; - - typedef int64 lowp_i64; - typedef int64 mediump_i64; - typedef int64 highp_i64; - typedef int64 i64; - - typedef int64 lowp_int64; - typedef int64 mediump_int64; - typedef int64 highp_int64; - - typedef int64 lowp_int64_t; - typedef int64 mediump_int64_t; - typedef int64 highp_int64_t; - typedef int64 int64_t; - - // Scalar uint - - typedef unsigned int uint; - - typedef uint8 lowp_u8; - typedef uint8 mediump_u8; - typedef uint8 highp_u8; - typedef uint8 u8; - - typedef uint8 lowp_uint8; - typedef uint8 mediump_uint8; - typedef uint8 highp_uint8; - - typedef uint8 lowp_uint8_t; - typedef uint8 mediump_uint8_t; - typedef uint8 highp_uint8_t; - typedef uint8 uint8_t; - - typedef uint16 lowp_u16; - typedef uint16 mediump_u16; - typedef uint16 highp_u16; - typedef uint16 u16; - - typedef uint16 lowp_uint16; - typedef uint16 mediump_uint16; - typedef uint16 highp_uint16; - - typedef uint16 lowp_uint16_t; - typedef uint16 mediump_uint16_t; - typedef uint16 highp_uint16_t; - typedef uint16 uint16_t; - - typedef uint32 lowp_u32; - typedef uint32 mediump_u32; - typedef uint32 highp_u32; - typedef uint32 u32; - - typedef uint32 lowp_uint32; - typedef uint32 mediump_uint32; - typedef uint32 highp_uint32; - - typedef uint32 lowp_uint32_t; - typedef uint32 mediump_uint32_t; - typedef uint32 highp_uint32_t; - typedef uint32 uint32_t; - - typedef uint64 lowp_u64; - typedef uint64 mediump_u64; - typedef uint64 highp_u64; - typedef uint64 u64; - - typedef uint64 lowp_uint64; - typedef uint64 mediump_uint64; - typedef uint64 highp_uint64; - - typedef uint64 lowp_uint64_t; - typedef uint64 mediump_uint64_t; - typedef uint64 highp_uint64_t; - typedef uint64 uint64_t; - - // Scalar float - - typedef float lowp_f32; - typedef float mediump_f32; - typedef float highp_f32; - typedef float f32; - - typedef float lowp_float32; - typedef float mediump_float32; - typedef float highp_float32; - typedef float float32; - - typedef float lowp_float32_t; - typedef float mediump_float32_t; - typedef float highp_float32_t; - typedef float float32_t; - - - typedef double lowp_f64; - typedef double mediump_f64; - typedef double highp_f64; - typedef double f64; - - typedef double lowp_float64; - typedef double mediump_float64; - typedef double highp_float64; - typedef double float64; - - typedef double lowp_float64_t; - typedef double mediump_float64_t; - typedef double highp_float64_t; - typedef double float64_t; - - // Vector bool - - typedef vec<1, bool, lowp> lowp_bvec1; - typedef vec<2, bool, lowp> lowp_bvec2; - typedef vec<3, bool, lowp> lowp_bvec3; - typedef vec<4, bool, lowp> lowp_bvec4; - - typedef vec<1, bool, mediump> mediump_bvec1; - typedef vec<2, bool, mediump> mediump_bvec2; - typedef vec<3, bool, mediump> mediump_bvec3; - typedef vec<4, bool, mediump> mediump_bvec4; - - typedef vec<1, bool, highp> highp_bvec1; - typedef vec<2, bool, highp> highp_bvec2; - typedef vec<3, bool, highp> highp_bvec3; - typedef vec<4, bool, highp> highp_bvec4; - - typedef vec<1, bool, defaultp> bvec1; - typedef vec<2, bool, defaultp> bvec2; - typedef vec<3, bool, defaultp> bvec3; - typedef vec<4, bool, defaultp> bvec4; - - // Vector int - - typedef vec<1, int, lowp> lowp_ivec1; - typedef vec<2, int, lowp> lowp_ivec2; - typedef vec<3, int, lowp> lowp_ivec3; - typedef vec<4, int, lowp> lowp_ivec4; - - typedef vec<1, int, mediump> mediump_ivec1; - typedef vec<2, int, mediump> mediump_ivec2; - typedef vec<3, int, mediump> mediump_ivec3; - typedef vec<4, int, mediump> mediump_ivec4; - - typedef vec<1, int, highp> highp_ivec1; - typedef vec<2, int, highp> highp_ivec2; - typedef vec<3, int, highp> highp_ivec3; - typedef vec<4, int, highp> highp_ivec4; - - typedef vec<1, int, defaultp> ivec1; - typedef vec<2, int, defaultp> ivec2; - typedef vec<3, int, defaultp> ivec3; - typedef vec<4, int, defaultp> ivec4; - - typedef vec<1, i8, lowp> lowp_i8vec1; - typedef vec<2, i8, lowp> lowp_i8vec2; - typedef vec<3, i8, lowp> lowp_i8vec3; - typedef vec<4, i8, lowp> lowp_i8vec4; - - typedef vec<1, i8, mediump> mediump_i8vec1; - typedef vec<2, i8, mediump> mediump_i8vec2; - typedef vec<3, i8, mediump> mediump_i8vec3; - typedef vec<4, i8, mediump> mediump_i8vec4; - - typedef vec<1, i8, highp> highp_i8vec1; - typedef vec<2, i8, highp> highp_i8vec2; - typedef vec<3, i8, highp> highp_i8vec3; - typedef vec<4, i8, highp> highp_i8vec4; - - typedef vec<1, i8, defaultp> i8vec1; - typedef vec<2, i8, defaultp> i8vec2; - typedef vec<3, i8, defaultp> i8vec3; - typedef vec<4, i8, defaultp> i8vec4; - - typedef vec<1, i16, lowp> lowp_i16vec1; - typedef vec<2, i16, lowp> lowp_i16vec2; - typedef vec<3, i16, lowp> lowp_i16vec3; - typedef vec<4, i16, lowp> lowp_i16vec4; - - typedef vec<1, i16, mediump> mediump_i16vec1; - typedef vec<2, i16, mediump> mediump_i16vec2; - typedef vec<3, i16, mediump> mediump_i16vec3; - typedef vec<4, i16, mediump> mediump_i16vec4; - - typedef vec<1, i16, highp> highp_i16vec1; - typedef vec<2, i16, highp> highp_i16vec2; - typedef vec<3, i16, highp> highp_i16vec3; - typedef vec<4, i16, highp> highp_i16vec4; - - typedef vec<1, i16, defaultp> i16vec1; - typedef vec<2, i16, defaultp> i16vec2; - typedef vec<3, i16, defaultp> i16vec3; - typedef vec<4, i16, defaultp> i16vec4; - - typedef vec<1, i32, lowp> lowp_i32vec1; - typedef vec<2, i32, lowp> lowp_i32vec2; - typedef vec<3, i32, lowp> lowp_i32vec3; - typedef vec<4, i32, lowp> lowp_i32vec4; - - typedef vec<1, i32, mediump> mediump_i32vec1; - typedef vec<2, i32, mediump> mediump_i32vec2; - typedef vec<3, i32, mediump> mediump_i32vec3; - typedef vec<4, i32, mediump> mediump_i32vec4; - - typedef vec<1, i32, highp> highp_i32vec1; - typedef vec<2, i32, highp> highp_i32vec2; - typedef vec<3, i32, highp> highp_i32vec3; - typedef vec<4, i32, highp> highp_i32vec4; - - typedef vec<1, i32, defaultp> i32vec1; - typedef vec<2, i32, defaultp> i32vec2; - typedef vec<3, i32, defaultp> i32vec3; - typedef vec<4, i32, defaultp> i32vec4; - - typedef vec<1, i64, lowp> lowp_i64vec1; - typedef vec<2, i64, lowp> lowp_i64vec2; - typedef vec<3, i64, lowp> lowp_i64vec3; - typedef vec<4, i64, lowp> lowp_i64vec4; - - typedef vec<1, i64, mediump> mediump_i64vec1; - typedef vec<2, i64, mediump> mediump_i64vec2; - typedef vec<3, i64, mediump> mediump_i64vec3; - typedef vec<4, i64, mediump> mediump_i64vec4; - - typedef vec<1, i64, highp> highp_i64vec1; - typedef vec<2, i64, highp> highp_i64vec2; - typedef vec<3, i64, highp> highp_i64vec3; - typedef vec<4, i64, highp> highp_i64vec4; - - typedef vec<1, i64, defaultp> i64vec1; - typedef vec<2, i64, defaultp> i64vec2; - typedef vec<3, i64, defaultp> i64vec3; - typedef vec<4, i64, defaultp> i64vec4; - - // Vector uint - - typedef vec<1, uint, lowp> lowp_uvec1; - typedef vec<2, uint, lowp> lowp_uvec2; - typedef vec<3, uint, lowp> lowp_uvec3; - typedef vec<4, uint, lowp> lowp_uvec4; - - typedef vec<1, uint, mediump> mediump_uvec1; - typedef vec<2, uint, mediump> mediump_uvec2; - typedef vec<3, uint, mediump> mediump_uvec3; - typedef vec<4, uint, mediump> mediump_uvec4; - - typedef vec<1, uint, highp> highp_uvec1; - typedef vec<2, uint, highp> highp_uvec2; - typedef vec<3, uint, highp> highp_uvec3; - typedef vec<4, uint, highp> highp_uvec4; - - typedef vec<1, uint, defaultp> uvec1; - typedef vec<2, uint, defaultp> uvec2; - typedef vec<3, uint, defaultp> uvec3; - typedef vec<4, uint, defaultp> uvec4; - - typedef vec<1, u8, lowp> lowp_u8vec1; - typedef vec<2, u8, lowp> lowp_u8vec2; - typedef vec<3, u8, lowp> lowp_u8vec3; - typedef vec<4, u8, lowp> lowp_u8vec4; - - typedef vec<1, u8, mediump> mediump_u8vec1; - typedef vec<2, u8, mediump> mediump_u8vec2; - typedef vec<3, u8, mediump> mediump_u8vec3; - typedef vec<4, u8, mediump> mediump_u8vec4; - - typedef vec<1, u8, highp> highp_u8vec1; - typedef vec<2, u8, highp> highp_u8vec2; - typedef vec<3, u8, highp> highp_u8vec3; - typedef vec<4, u8, highp> highp_u8vec4; - - typedef vec<1, u8, defaultp> u8vec1; - typedef vec<2, u8, defaultp> u8vec2; - typedef vec<3, u8, defaultp> u8vec3; - typedef vec<4, u8, defaultp> u8vec4; - - typedef vec<1, u16, lowp> lowp_u16vec1; - typedef vec<2, u16, lowp> lowp_u16vec2; - typedef vec<3, u16, lowp> lowp_u16vec3; - typedef vec<4, u16, lowp> lowp_u16vec4; - - typedef vec<1, u16, mediump> mediump_u16vec1; - typedef vec<2, u16, mediump> mediump_u16vec2; - typedef vec<3, u16, mediump> mediump_u16vec3; - typedef vec<4, u16, mediump> mediump_u16vec4; - - typedef vec<1, u16, highp> highp_u16vec1; - typedef vec<2, u16, highp> highp_u16vec2; - typedef vec<3, u16, highp> highp_u16vec3; - typedef vec<4, u16, highp> highp_u16vec4; - - typedef vec<1, u16, defaultp> u16vec1; - typedef vec<2, u16, defaultp> u16vec2; - typedef vec<3, u16, defaultp> u16vec3; - typedef vec<4, u16, defaultp> u16vec4; - - typedef vec<1, u32, lowp> lowp_u32vec1; - typedef vec<2, u32, lowp> lowp_u32vec2; - typedef vec<3, u32, lowp> lowp_u32vec3; - typedef vec<4, u32, lowp> lowp_u32vec4; - - typedef vec<1, u32, mediump> mediump_u32vec1; - typedef vec<2, u32, mediump> mediump_u32vec2; - typedef vec<3, u32, mediump> mediump_u32vec3; - typedef vec<4, u32, mediump> mediump_u32vec4; - - typedef vec<1, u32, highp> highp_u32vec1; - typedef vec<2, u32, highp> highp_u32vec2; - typedef vec<3, u32, highp> highp_u32vec3; - typedef vec<4, u32, highp> highp_u32vec4; - - typedef vec<1, u32, defaultp> u32vec1; - typedef vec<2, u32, defaultp> u32vec2; - typedef vec<3, u32, defaultp> u32vec3; - typedef vec<4, u32, defaultp> u32vec4; - - typedef vec<1, u64, lowp> lowp_u64vec1; - typedef vec<2, u64, lowp> lowp_u64vec2; - typedef vec<3, u64, lowp> lowp_u64vec3; - typedef vec<4, u64, lowp> lowp_u64vec4; - - typedef vec<1, u64, mediump> mediump_u64vec1; - typedef vec<2, u64, mediump> mediump_u64vec2; - typedef vec<3, u64, mediump> mediump_u64vec3; - typedef vec<4, u64, mediump> mediump_u64vec4; - - typedef vec<1, u64, highp> highp_u64vec1; - typedef vec<2, u64, highp> highp_u64vec2; - typedef vec<3, u64, highp> highp_u64vec3; - typedef vec<4, u64, highp> highp_u64vec4; - - typedef vec<1, u64, defaultp> u64vec1; - typedef vec<2, u64, defaultp> u64vec2; - typedef vec<3, u64, defaultp> u64vec3; - typedef vec<4, u64, defaultp> u64vec4; - - // Vector float - - typedef vec<1, float, lowp> lowp_vec1; - typedef vec<2, float, lowp> lowp_vec2; - typedef vec<3, float, lowp> lowp_vec3; - typedef vec<4, float, lowp> lowp_vec4; - - typedef vec<1, float, mediump> mediump_vec1; - typedef vec<2, float, mediump> mediump_vec2; - typedef vec<3, float, mediump> mediump_vec3; - typedef vec<4, float, mediump> mediump_vec4; - - typedef vec<1, float, highp> highp_vec1; - typedef vec<2, float, highp> highp_vec2; - typedef vec<3, float, highp> highp_vec3; - typedef vec<4, float, highp> highp_vec4; - - typedef vec<1, float, defaultp> vec1; - typedef vec<2, float, defaultp> vec2; - typedef vec<3, float, defaultp> vec3; - typedef vec<4, float, defaultp> vec4; - - typedef vec<1, float, lowp> lowp_fvec1; - typedef vec<2, float, lowp> lowp_fvec2; - typedef vec<3, float, lowp> lowp_fvec3; - typedef vec<4, float, lowp> lowp_fvec4; - - typedef vec<1, float, mediump> mediump_fvec1; - typedef vec<2, float, mediump> mediump_fvec2; - typedef vec<3, float, mediump> mediump_fvec3; - typedef vec<4, float, mediump> mediump_fvec4; - - typedef vec<1, float, highp> highp_fvec1; - typedef vec<2, float, highp> highp_fvec2; - typedef vec<3, float, highp> highp_fvec3; - typedef vec<4, float, highp> highp_fvec4; - - typedef vec<1, f32, defaultp> fvec1; - typedef vec<2, f32, defaultp> fvec2; - typedef vec<3, f32, defaultp> fvec3; - typedef vec<4, f32, defaultp> fvec4; - - typedef vec<1, f32, lowp> lowp_f32vec1; - typedef vec<2, f32, lowp> lowp_f32vec2; - typedef vec<3, f32, lowp> lowp_f32vec3; - typedef vec<4, f32, lowp> lowp_f32vec4; - - typedef vec<1, f32, mediump> mediump_f32vec1; - typedef vec<2, f32, mediump> mediump_f32vec2; - typedef vec<3, f32, mediump> mediump_f32vec3; - typedef vec<4, f32, mediump> mediump_f32vec4; - - typedef vec<1, f32, highp> highp_f32vec1; - typedef vec<2, f32, highp> highp_f32vec2; - typedef vec<3, f32, highp> highp_f32vec3; - typedef vec<4, f32, highp> highp_f32vec4; - - typedef vec<1, f32, defaultp> f32vec1; - typedef vec<2, f32, defaultp> f32vec2; - typedef vec<3, f32, defaultp> f32vec3; - typedef vec<4, f32, defaultp> f32vec4; - - typedef vec<1, f64, lowp> lowp_dvec1; - typedef vec<2, f64, lowp> lowp_dvec2; - typedef vec<3, f64, lowp> lowp_dvec3; - typedef vec<4, f64, lowp> lowp_dvec4; - - typedef vec<1, f64, mediump> mediump_dvec1; - typedef vec<2, f64, mediump> mediump_dvec2; - typedef vec<3, f64, mediump> mediump_dvec3; - typedef vec<4, f64, mediump> mediump_dvec4; - - typedef vec<1, f64, highp> highp_dvec1; - typedef vec<2, f64, highp> highp_dvec2; - typedef vec<3, f64, highp> highp_dvec3; - typedef vec<4, f64, highp> highp_dvec4; - - typedef vec<1, f64, defaultp> dvec1; - typedef vec<2, f64, defaultp> dvec2; - typedef vec<3, f64, defaultp> dvec3; - typedef vec<4, f64, defaultp> dvec4; - - typedef vec<1, f64, lowp> lowp_f64vec1; - typedef vec<2, f64, lowp> lowp_f64vec2; - typedef vec<3, f64, lowp> lowp_f64vec3; - typedef vec<4, f64, lowp> lowp_f64vec4; - - typedef vec<1, f64, mediump> mediump_f64vec1; - typedef vec<2, f64, mediump> mediump_f64vec2; - typedef vec<3, f64, mediump> mediump_f64vec3; - typedef vec<4, f64, mediump> mediump_f64vec4; - - typedef vec<1, f64, highp> highp_f64vec1; - typedef vec<2, f64, highp> highp_f64vec2; - typedef vec<3, f64, highp> highp_f64vec3; - typedef vec<4, f64, highp> highp_f64vec4; - - typedef vec<1, f64, defaultp> f64vec1; - typedef vec<2, f64, defaultp> f64vec2; - typedef vec<3, f64, defaultp> f64vec3; - typedef vec<4, f64, defaultp> f64vec4; - - // Matrix NxN - - typedef mat<2, 2, f32, lowp> lowp_mat2; - typedef mat<3, 3, f32, lowp> lowp_mat3; - typedef mat<4, 4, f32, lowp> lowp_mat4; - - typedef mat<2, 2, f32, mediump> mediump_mat2; - typedef mat<3, 3, f32, mediump> mediump_mat3; - typedef mat<4, 4, f32, mediump> mediump_mat4; - - typedef mat<2, 2, f32, highp> highp_mat2; - typedef mat<3, 3, f32, highp> highp_mat3; - typedef mat<4, 4, f32, highp> highp_mat4; - - typedef mat<2, 2, f32, defaultp> mat2; - typedef mat<3, 3, f32, defaultp> mat3; - typedef mat<4, 4, f32, defaultp> mat4; - - typedef mat<2, 2, f32, lowp> lowp_fmat2; - typedef mat<3, 3, f32, lowp> lowp_fmat3; - typedef mat<4, 4, f32, lowp> lowp_fmat4; - - typedef mat<2, 2, f32, mediump> mediump_fmat2; - typedef mat<3, 3, f32, mediump> mediump_fmat3; - typedef mat<4, 4, f32, mediump> mediump_fmat4; - - typedef mat<2, 2, f32, highp> highp_fmat2; - typedef mat<3, 3, f32, highp> highp_fmat3; - typedef mat<4, 4, f32, highp> highp_fmat4; - - typedef mat<2, 2, f32, defaultp> fmat2; - typedef mat<3, 3, f32, defaultp> fmat3; - typedef mat<4, 4, f32, defaultp> fmat4; - - typedef mat<2, 2, f32, lowp> lowp_f32mat2; - typedef mat<3, 3, f32, lowp> lowp_f32mat3; - typedef mat<4, 4, f32, lowp> lowp_f32mat4; - - typedef mat<2, 2, f32, mediump> mediump_f32mat2; - typedef mat<3, 3, f32, mediump> mediump_f32mat3; - typedef mat<4, 4, f32, mediump> mediump_f32mat4; - - typedef mat<2, 2, f32, highp> highp_f32mat2; - typedef mat<3, 3, f32, highp> highp_f32mat3; - typedef mat<4, 4, f32, highp> highp_f32mat4; - - typedef mat<2, 2, f32, defaultp> f32mat2; - typedef mat<3, 3, f32, defaultp> f32mat3; - typedef mat<4, 4, f32, defaultp> f32mat4; - - typedef mat<2, 2, f64, lowp> lowp_dmat2; - typedef mat<3, 3, f64, lowp> lowp_dmat3; - typedef mat<4, 4, f64, lowp> lowp_dmat4; - - typedef mat<2, 2, f64, mediump> mediump_dmat2; - typedef mat<3, 3, f64, mediump> mediump_dmat3; - typedef mat<4, 4, f64, mediump> mediump_dmat4; - - typedef mat<2, 2, f64, highp> highp_dmat2; - typedef mat<3, 3, f64, highp> highp_dmat3; - typedef mat<4, 4, f64, highp> highp_dmat4; - - typedef mat<2, 2, f64, defaultp> dmat2; - typedef mat<3, 3, f64, defaultp> dmat3; - typedef mat<4, 4, f64, defaultp> dmat4; - - typedef mat<2, 2, f64, lowp> lowp_f64mat2; - typedef mat<3, 3, f64, lowp> lowp_f64mat3; - typedef mat<4, 4, f64, lowp> lowp_f64mat4; - - typedef mat<2, 2, f64, mediump> mediump_f64mat2; - typedef mat<3, 3, f64, mediump> mediump_f64mat3; - typedef mat<4, 4, f64, mediump> mediump_f64mat4; - - typedef mat<2, 2, f64, highp> highp_f64mat2; - typedef mat<3, 3, f64, highp> highp_f64mat3; - typedef mat<4, 4, f64, highp> highp_f64mat4; - - typedef mat<2, 2, f64, defaultp> f64mat2; - typedef mat<3, 3, f64, defaultp> f64mat3; - typedef mat<4, 4, f64, defaultp> f64mat4; - - // Matrix MxN - - typedef mat<2, 2, f32, lowp> lowp_mat2x2; - typedef mat<2, 3, f32, lowp> lowp_mat2x3; - typedef mat<2, 4, f32, lowp> lowp_mat2x4; - typedef mat<3, 2, f32, lowp> lowp_mat3x2; - typedef mat<3, 3, f32, lowp> lowp_mat3x3; - typedef mat<3, 4, f32, lowp> lowp_mat3x4; - typedef mat<4, 2, f32, lowp> lowp_mat4x2; - typedef mat<4, 3, f32, lowp> lowp_mat4x3; - typedef mat<4, 4, f32, lowp> lowp_mat4x4; - - typedef mat<2, 2, f32, mediump> mediump_mat2x2; - typedef mat<2, 3, f32, mediump> mediump_mat2x3; - typedef mat<2, 4, f32, mediump> mediump_mat2x4; - typedef mat<3, 2, f32, mediump> mediump_mat3x2; - typedef mat<3, 3, f32, mediump> mediump_mat3x3; - typedef mat<3, 4, f32, mediump> mediump_mat3x4; - typedef mat<4, 2, f32, mediump> mediump_mat4x2; - typedef mat<4, 3, f32, mediump> mediump_mat4x3; - typedef mat<4, 4, f32, mediump> mediump_mat4x4; - - typedef mat<2, 2, f32, highp> highp_mat2x2; - typedef mat<2, 3, f32, highp> highp_mat2x3; - typedef mat<2, 4, f32, highp> highp_mat2x4; - typedef mat<3, 2, f32, highp> highp_mat3x2; - typedef mat<3, 3, f32, highp> highp_mat3x3; - typedef mat<3, 4, f32, highp> highp_mat3x4; - typedef mat<4, 2, f32, highp> highp_mat4x2; - typedef mat<4, 3, f32, highp> highp_mat4x3; - typedef mat<4, 4, f32, highp> highp_mat4x4; - - typedef mat<2, 2, f32, defaultp> mat2x2; - typedef mat<3, 2, f32, defaultp> mat3x2; - typedef mat<4, 2, f32, defaultp> mat4x2; - typedef mat<2, 3, f32, defaultp> mat2x3; - typedef mat<3, 3, f32, defaultp> mat3x3; - typedef mat<4, 3, f32, defaultp> mat4x3; - typedef mat<2, 4, f32, defaultp> mat2x4; - typedef mat<3, 4, f32, defaultp> mat3x4; - typedef mat<4, 4, f32, defaultp> mat4x4; - - typedef mat<2, 2, f32, lowp> lowp_fmat2x2; - typedef mat<2, 3, f32, lowp> lowp_fmat2x3; - typedef mat<2, 4, f32, lowp> lowp_fmat2x4; - typedef mat<3, 2, f32, lowp> lowp_fmat3x2; - typedef mat<3, 3, f32, lowp> lowp_fmat3x3; - typedef mat<3, 4, f32, lowp> lowp_fmat3x4; - typedef mat<4, 2, f32, lowp> lowp_fmat4x2; - typedef mat<4, 3, f32, lowp> lowp_fmat4x3; - typedef mat<4, 4, f32, lowp> lowp_fmat4x4; - - typedef mat<2, 2, f32, mediump> mediump_fmat2x2; - typedef mat<2, 3, f32, mediump> mediump_fmat2x3; - typedef mat<2, 4, f32, mediump> mediump_fmat2x4; - typedef mat<3, 2, f32, mediump> mediump_fmat3x2; - typedef mat<3, 3, f32, mediump> mediump_fmat3x3; - typedef mat<3, 4, f32, mediump> mediump_fmat3x4; - typedef mat<4, 2, f32, mediump> mediump_fmat4x2; - typedef mat<4, 3, f32, mediump> mediump_fmat4x3; - typedef mat<4, 4, f32, mediump> mediump_fmat4x4; - - typedef mat<2, 2, f32, highp> highp_fmat2x2; - typedef mat<2, 3, f32, highp> highp_fmat2x3; - typedef mat<2, 4, f32, highp> highp_fmat2x4; - typedef mat<3, 2, f32, highp> highp_fmat3x2; - typedef mat<3, 3, f32, highp> highp_fmat3x3; - typedef mat<3, 4, f32, highp> highp_fmat3x4; - typedef mat<4, 2, f32, highp> highp_fmat4x2; - typedef mat<4, 3, f32, highp> highp_fmat4x3; - typedef mat<4, 4, f32, highp> highp_fmat4x4; - - typedef mat<2, 2, f32, defaultp> fmat2x2; - typedef mat<3, 2, f32, defaultp> fmat3x2; - typedef mat<4, 2, f32, defaultp> fmat4x2; - typedef mat<2, 3, f32, defaultp> fmat2x3; - typedef mat<3, 3, f32, defaultp> fmat3x3; - typedef mat<4, 3, f32, defaultp> fmat4x3; - typedef mat<2, 4, f32, defaultp> fmat2x4; - typedef mat<3, 4, f32, defaultp> fmat3x4; - typedef mat<4, 4, f32, defaultp> fmat4x4; - - typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; - typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; - typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; - typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; - typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; - typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; - typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; - typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; - typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; - - typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; - typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; - typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; - typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; - typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; - typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; - typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; - typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; - typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; - - typedef mat<2, 2, f32, highp> highp_f32mat2x2; - typedef mat<2, 3, f32, highp> highp_f32mat2x3; - typedef mat<2, 4, f32, highp> highp_f32mat2x4; - typedef mat<3, 2, f32, highp> highp_f32mat3x2; - typedef mat<3, 3, f32, highp> highp_f32mat3x3; - typedef mat<3, 4, f32, highp> highp_f32mat3x4; - typedef mat<4, 2, f32, highp> highp_f32mat4x2; - typedef mat<4, 3, f32, highp> highp_f32mat4x3; - typedef mat<4, 4, f32, highp> highp_f32mat4x4; - - typedef mat<2, 2, f32, defaultp> f32mat2x2; - typedef mat<3, 2, f32, defaultp> f32mat3x2; - typedef mat<4, 2, f32, defaultp> f32mat4x2; - typedef mat<2, 3, f32, defaultp> f32mat2x3; - typedef mat<3, 3, f32, defaultp> f32mat3x3; - typedef mat<4, 3, f32, defaultp> f32mat4x3; - typedef mat<2, 4, f32, defaultp> f32mat2x4; - typedef mat<3, 4, f32, defaultp> f32mat3x4; - typedef mat<4, 4, f32, defaultp> f32mat4x4; - - typedef mat<2, 2, double, lowp> lowp_dmat2x2; - typedef mat<2, 3, double, lowp> lowp_dmat2x3; - typedef mat<2, 4, double, lowp> lowp_dmat2x4; - typedef mat<3, 2, double, lowp> lowp_dmat3x2; - typedef mat<3, 3, double, lowp> lowp_dmat3x3; - typedef mat<3, 4, double, lowp> lowp_dmat3x4; - typedef mat<4, 2, double, lowp> lowp_dmat4x2; - typedef mat<4, 3, double, lowp> lowp_dmat4x3; - typedef mat<4, 4, double, lowp> lowp_dmat4x4; - - typedef mat<2, 2, double, mediump> mediump_dmat2x2; - typedef mat<2, 3, double, mediump> mediump_dmat2x3; - typedef mat<2, 4, double, mediump> mediump_dmat2x4; - typedef mat<3, 2, double, mediump> mediump_dmat3x2; - typedef mat<3, 3, double, mediump> mediump_dmat3x3; - typedef mat<3, 4, double, mediump> mediump_dmat3x4; - typedef mat<4, 2, double, mediump> mediump_dmat4x2; - typedef mat<4, 3, double, mediump> mediump_dmat4x3; - typedef mat<4, 4, double, mediump> mediump_dmat4x4; - - typedef mat<2, 2, double, highp> highp_dmat2x2; - typedef mat<2, 3, double, highp> highp_dmat2x3; - typedef mat<2, 4, double, highp> highp_dmat2x4; - typedef mat<3, 2, double, highp> highp_dmat3x2; - typedef mat<3, 3, double, highp> highp_dmat3x3; - typedef mat<3, 4, double, highp> highp_dmat3x4; - typedef mat<4, 2, double, highp> highp_dmat4x2; - typedef mat<4, 3, double, highp> highp_dmat4x3; - typedef mat<4, 4, double, highp> highp_dmat4x4; - - typedef mat<2, 2, double, defaultp> dmat2x2; - typedef mat<3, 2, double, defaultp> dmat3x2; - typedef mat<4, 2, double, defaultp> dmat4x2; - typedef mat<2, 3, double, defaultp> dmat2x3; - typedef mat<3, 3, double, defaultp> dmat3x3; - typedef mat<4, 3, double, defaultp> dmat4x3; - typedef mat<2, 4, double, defaultp> dmat2x4; - typedef mat<3, 4, double, defaultp> dmat3x4; - typedef mat<4, 4, double, defaultp> dmat4x4; - - typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; - typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; - typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; - typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; - typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; - typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; - typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; - typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; - typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; - - typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; - typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; - typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; - typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; - typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; - typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; - typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; - typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; - typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; - - typedef mat<2, 2, f64, highp> highp_f64mat2x2; - typedef mat<2, 3, f64, highp> highp_f64mat2x3; - typedef mat<2, 4, f64, highp> highp_f64mat2x4; - typedef mat<3, 2, f64, highp> highp_f64mat3x2; - typedef mat<3, 3, f64, highp> highp_f64mat3x3; - typedef mat<3, 4, f64, highp> highp_f64mat3x4; - typedef mat<4, 2, f64, highp> highp_f64mat4x2; - typedef mat<4, 3, f64, highp> highp_f64mat4x3; - typedef mat<4, 4, f64, highp> highp_f64mat4x4; - - typedef mat<2, 2, f64, defaultp> f64mat2x2; - typedef mat<3, 2, f64, defaultp> f64mat3x2; - typedef mat<4, 2, f64, defaultp> f64mat4x2; - typedef mat<2, 3, f64, defaultp> f64mat2x3; - typedef mat<3, 3, f64, defaultp> f64mat3x3; - typedef mat<4, 3, f64, defaultp> f64mat4x3; - typedef mat<2, 4, f64, defaultp> f64mat2x4; - typedef mat<3, 4, f64, defaultp> f64mat3x4; - typedef mat<4, 4, f64, defaultp> f64mat4x4; - - // Signed integer matrix MxN - - typedef mat<2, 2, int, lowp> lowp_imat2x2; - typedef mat<2, 3, int, lowp> lowp_imat2x3; - typedef mat<2, 4, int, lowp> lowp_imat2x4; - typedef mat<3, 2, int, lowp> lowp_imat3x2; - typedef mat<3, 3, int, lowp> lowp_imat3x3; - typedef mat<3, 4, int, lowp> lowp_imat3x4; - typedef mat<4, 2, int, lowp> lowp_imat4x2; - typedef mat<4, 3, int, lowp> lowp_imat4x3; - typedef mat<4, 4, int, lowp> lowp_imat4x4; - - typedef mat<2, 2, int, mediump> mediump_imat2x2; - typedef mat<2, 3, int, mediump> mediump_imat2x3; - typedef mat<2, 4, int, mediump> mediump_imat2x4; - typedef mat<3, 2, int, mediump> mediump_imat3x2; - typedef mat<3, 3, int, mediump> mediump_imat3x3; - typedef mat<3, 4, int, mediump> mediump_imat3x4; - typedef mat<4, 2, int, mediump> mediump_imat4x2; - typedef mat<4, 3, int, mediump> mediump_imat4x3; - typedef mat<4, 4, int, mediump> mediump_imat4x4; - - typedef mat<2, 2, int, highp> highp_imat2x2; - typedef mat<2, 3, int, highp> highp_imat2x3; - typedef mat<2, 4, int, highp> highp_imat2x4; - typedef mat<3, 2, int, highp> highp_imat3x2; - typedef mat<3, 3, int, highp> highp_imat3x3; - typedef mat<3, 4, int, highp> highp_imat3x4; - typedef mat<4, 2, int, highp> highp_imat4x2; - typedef mat<4, 3, int, highp> highp_imat4x3; - typedef mat<4, 4, int, highp> highp_imat4x4; - - typedef mat<2, 2, int, defaultp> imat2x2; - typedef mat<3, 2, int, defaultp> imat3x2; - typedef mat<4, 2, int, defaultp> imat4x2; - typedef mat<2, 3, int, defaultp> imat2x3; - typedef mat<3, 3, int, defaultp> imat3x3; - typedef mat<4, 3, int, defaultp> imat4x3; - typedef mat<2, 4, int, defaultp> imat2x4; - typedef mat<3, 4, int, defaultp> imat3x4; - typedef mat<4, 4, int, defaultp> imat4x4; - - - typedef mat<2, 2, int8, lowp> lowp_i8mat2x2; - typedef mat<2, 3, int8, lowp> lowp_i8mat2x3; - typedef mat<2, 4, int8, lowp> lowp_i8mat2x4; - typedef mat<3, 2, int8, lowp> lowp_i8mat3x2; - typedef mat<3, 3, int8, lowp> lowp_i8mat3x3; - typedef mat<3, 4, int8, lowp> lowp_i8mat3x4; - typedef mat<4, 2, int8, lowp> lowp_i8mat4x2; - typedef mat<4, 3, int8, lowp> lowp_i8mat4x3; - typedef mat<4, 4, int8, lowp> lowp_i8mat4x4; - - typedef mat<2, 2, int8, mediump> mediump_i8mat2x2; - typedef mat<2, 3, int8, mediump> mediump_i8mat2x3; - typedef mat<2, 4, int8, mediump> mediump_i8mat2x4; - typedef mat<3, 2, int8, mediump> mediump_i8mat3x2; - typedef mat<3, 3, int8, mediump> mediump_i8mat3x3; - typedef mat<3, 4, int8, mediump> mediump_i8mat3x4; - typedef mat<4, 2, int8, mediump> mediump_i8mat4x2; - typedef mat<4, 3, int8, mediump> mediump_i8mat4x3; - typedef mat<4, 4, int8, mediump> mediump_i8mat4x4; - - typedef mat<2, 2, int8, highp> highp_i8mat2x2; - typedef mat<2, 3, int8, highp> highp_i8mat2x3; - typedef mat<2, 4, int8, highp> highp_i8mat2x4; - typedef mat<3, 2, int8, highp> highp_i8mat3x2; - typedef mat<3, 3, int8, highp> highp_i8mat3x3; - typedef mat<3, 4, int8, highp> highp_i8mat3x4; - typedef mat<4, 2, int8, highp> highp_i8mat4x2; - typedef mat<4, 3, int8, highp> highp_i8mat4x3; - typedef mat<4, 4, int8, highp> highp_i8mat4x4; - - typedef mat<2, 2, int8, defaultp> i8mat2x2; - typedef mat<3, 2, int8, defaultp> i8mat3x2; - typedef mat<4, 2, int8, defaultp> i8mat4x2; - typedef mat<2, 3, int8, defaultp> i8mat2x3; - typedef mat<3, 3, int8, defaultp> i8mat3x3; - typedef mat<4, 3, int8, defaultp> i8mat4x3; - typedef mat<2, 4, int8, defaultp> i8mat2x4; - typedef mat<3, 4, int8, defaultp> i8mat3x4; - typedef mat<4, 4, int8, defaultp> i8mat4x4; - - - typedef mat<2, 2, int16, lowp> lowp_i16mat2x2; - typedef mat<2, 3, int16, lowp> lowp_i16mat2x3; - typedef mat<2, 4, int16, lowp> lowp_i16mat2x4; - typedef mat<3, 2, int16, lowp> lowp_i16mat3x2; - typedef mat<3, 3, int16, lowp> lowp_i16mat3x3; - typedef mat<3, 4, int16, lowp> lowp_i16mat3x4; - typedef mat<4, 2, int16, lowp> lowp_i16mat4x2; - typedef mat<4, 3, int16, lowp> lowp_i16mat4x3; - typedef mat<4, 4, int16, lowp> lowp_i16mat4x4; - - typedef mat<2, 2, int16, mediump> mediump_i16mat2x2; - typedef mat<2, 3, int16, mediump> mediump_i16mat2x3; - typedef mat<2, 4, int16, mediump> mediump_i16mat2x4; - typedef mat<3, 2, int16, mediump> mediump_i16mat3x2; - typedef mat<3, 3, int16, mediump> mediump_i16mat3x3; - typedef mat<3, 4, int16, mediump> mediump_i16mat3x4; - typedef mat<4, 2, int16, mediump> mediump_i16mat4x2; - typedef mat<4, 3, int16, mediump> mediump_i16mat4x3; - typedef mat<4, 4, int16, mediump> mediump_i16mat4x4; - - typedef mat<2, 2, int16, highp> highp_i16mat2x2; - typedef mat<2, 3, int16, highp> highp_i16mat2x3; - typedef mat<2, 4, int16, highp> highp_i16mat2x4; - typedef mat<3, 2, int16, highp> highp_i16mat3x2; - typedef mat<3, 3, int16, highp> highp_i16mat3x3; - typedef mat<3, 4, int16, highp> highp_i16mat3x4; - typedef mat<4, 2, int16, highp> highp_i16mat4x2; - typedef mat<4, 3, int16, highp> highp_i16mat4x3; - typedef mat<4, 4, int16, highp> highp_i16mat4x4; - - typedef mat<2, 2, int16, defaultp> i16mat2x2; - typedef mat<3, 2, int16, defaultp> i16mat3x2; - typedef mat<4, 2, int16, defaultp> i16mat4x2; - typedef mat<2, 3, int16, defaultp> i16mat2x3; - typedef mat<3, 3, int16, defaultp> i16mat3x3; - typedef mat<4, 3, int16, defaultp> i16mat4x3; - typedef mat<2, 4, int16, defaultp> i16mat2x4; - typedef mat<3, 4, int16, defaultp> i16mat3x4; - typedef mat<4, 4, int16, defaultp> i16mat4x4; - - - typedef mat<2, 2, int32, lowp> lowp_i32mat2x2; - typedef mat<2, 3, int32, lowp> lowp_i32mat2x3; - typedef mat<2, 4, int32, lowp> lowp_i32mat2x4; - typedef mat<3, 2, int32, lowp> lowp_i32mat3x2; - typedef mat<3, 3, int32, lowp> lowp_i32mat3x3; - typedef mat<3, 4, int32, lowp> lowp_i32mat3x4; - typedef mat<4, 2, int32, lowp> lowp_i32mat4x2; - typedef mat<4, 3, int32, lowp> lowp_i32mat4x3; - typedef mat<4, 4, int32, lowp> lowp_i32mat4x4; - - typedef mat<2, 2, int32, mediump> mediump_i32mat2x2; - typedef mat<2, 3, int32, mediump> mediump_i32mat2x3; - typedef mat<2, 4, int32, mediump> mediump_i32mat2x4; - typedef mat<3, 2, int32, mediump> mediump_i32mat3x2; - typedef mat<3, 3, int32, mediump> mediump_i32mat3x3; - typedef mat<3, 4, int32, mediump> mediump_i32mat3x4; - typedef mat<4, 2, int32, mediump> mediump_i32mat4x2; - typedef mat<4, 3, int32, mediump> mediump_i32mat4x3; - typedef mat<4, 4, int32, mediump> mediump_i32mat4x4; - - typedef mat<2, 2, int32, highp> highp_i32mat2x2; - typedef mat<2, 3, int32, highp> highp_i32mat2x3; - typedef mat<2, 4, int32, highp> highp_i32mat2x4; - typedef mat<3, 2, int32, highp> highp_i32mat3x2; - typedef mat<3, 3, int32, highp> highp_i32mat3x3; - typedef mat<3, 4, int32, highp> highp_i32mat3x4; - typedef mat<4, 2, int32, highp> highp_i32mat4x2; - typedef mat<4, 3, int32, highp> highp_i32mat4x3; - typedef mat<4, 4, int32, highp> highp_i32mat4x4; - - typedef mat<2, 2, int32, defaultp> i32mat2x2; - typedef mat<3, 2, int32, defaultp> i32mat3x2; - typedef mat<4, 2, int32, defaultp> i32mat4x2; - typedef mat<2, 3, int32, defaultp> i32mat2x3; - typedef mat<3, 3, int32, defaultp> i32mat3x3; - typedef mat<4, 3, int32, defaultp> i32mat4x3; - typedef mat<2, 4, int32, defaultp> i32mat2x4; - typedef mat<3, 4, int32, defaultp> i32mat3x4; - typedef mat<4, 4, int32, defaultp> i32mat4x4; - - - typedef mat<2, 2, int64, lowp> lowp_i64mat2x2; - typedef mat<2, 3, int64, lowp> lowp_i64mat2x3; - typedef mat<2, 4, int64, lowp> lowp_i64mat2x4; - typedef mat<3, 2, int64, lowp> lowp_i64mat3x2; - typedef mat<3, 3, int64, lowp> lowp_i64mat3x3; - typedef mat<3, 4, int64, lowp> lowp_i64mat3x4; - typedef mat<4, 2, int64, lowp> lowp_i64mat4x2; - typedef mat<4, 3, int64, lowp> lowp_i64mat4x3; - typedef mat<4, 4, int64, lowp> lowp_i64mat4x4; - - typedef mat<2, 2, int64, mediump> mediump_i64mat2x2; - typedef mat<2, 3, int64, mediump> mediump_i64mat2x3; - typedef mat<2, 4, int64, mediump> mediump_i64mat2x4; - typedef mat<3, 2, int64, mediump> mediump_i64mat3x2; - typedef mat<3, 3, int64, mediump> mediump_i64mat3x3; - typedef mat<3, 4, int64, mediump> mediump_i64mat3x4; - typedef mat<4, 2, int64, mediump> mediump_i64mat4x2; - typedef mat<4, 3, int64, mediump> mediump_i64mat4x3; - typedef mat<4, 4, int64, mediump> mediump_i64mat4x4; - - typedef mat<2, 2, int64, highp> highp_i64mat2x2; - typedef mat<2, 3, int64, highp> highp_i64mat2x3; - typedef mat<2, 4, int64, highp> highp_i64mat2x4; - typedef mat<3, 2, int64, highp> highp_i64mat3x2; - typedef mat<3, 3, int64, highp> highp_i64mat3x3; - typedef mat<3, 4, int64, highp> highp_i64mat3x4; - typedef mat<4, 2, int64, highp> highp_i64mat4x2; - typedef mat<4, 3, int64, highp> highp_i64mat4x3; - typedef mat<4, 4, int64, highp> highp_i64mat4x4; - - typedef mat<2, 2, int64, defaultp> i64mat2x2; - typedef mat<3, 2, int64, defaultp> i64mat3x2; - typedef mat<4, 2, int64, defaultp> i64mat4x2; - typedef mat<2, 3, int64, defaultp> i64mat2x3; - typedef mat<3, 3, int64, defaultp> i64mat3x3; - typedef mat<4, 3, int64, defaultp> i64mat4x3; - typedef mat<2, 4, int64, defaultp> i64mat2x4; - typedef mat<3, 4, int64, defaultp> i64mat3x4; - typedef mat<4, 4, int64, defaultp> i64mat4x4; - - - // Unsigned integer matrix MxN - - typedef mat<2, 2, uint, lowp> lowp_umat2x2; - typedef mat<2, 3, uint, lowp> lowp_umat2x3; - typedef mat<2, 4, uint, lowp> lowp_umat2x4; - typedef mat<3, 2, uint, lowp> lowp_umat3x2; - typedef mat<3, 3, uint, lowp> lowp_umat3x3; - typedef mat<3, 4, uint, lowp> lowp_umat3x4; - typedef mat<4, 2, uint, lowp> lowp_umat4x2; - typedef mat<4, 3, uint, lowp> lowp_umat4x3; - typedef mat<4, 4, uint, lowp> lowp_umat4x4; - - typedef mat<2, 2, uint, mediump> mediump_umat2x2; - typedef mat<2, 3, uint, mediump> mediump_umat2x3; - typedef mat<2, 4, uint, mediump> mediump_umat2x4; - typedef mat<3, 2, uint, mediump> mediump_umat3x2; - typedef mat<3, 3, uint, mediump> mediump_umat3x3; - typedef mat<3, 4, uint, mediump> mediump_umat3x4; - typedef mat<4, 2, uint, mediump> mediump_umat4x2; - typedef mat<4, 3, uint, mediump> mediump_umat4x3; - typedef mat<4, 4, uint, mediump> mediump_umat4x4; - - typedef mat<2, 2, uint, highp> highp_umat2x2; - typedef mat<2, 3, uint, highp> highp_umat2x3; - typedef mat<2, 4, uint, highp> highp_umat2x4; - typedef mat<3, 2, uint, highp> highp_umat3x2; - typedef mat<3, 3, uint, highp> highp_umat3x3; - typedef mat<3, 4, uint, highp> highp_umat3x4; - typedef mat<4, 2, uint, highp> highp_umat4x2; - typedef mat<4, 3, uint, highp> highp_umat4x3; - typedef mat<4, 4, uint, highp> highp_umat4x4; - - typedef mat<2, 2, uint, defaultp> umat2x2; - typedef mat<3, 2, uint, defaultp> umat3x2; - typedef mat<4, 2, uint, defaultp> umat4x2; - typedef mat<2, 3, uint, defaultp> umat2x3; - typedef mat<3, 3, uint, defaultp> umat3x3; - typedef mat<4, 3, uint, defaultp> umat4x3; - typedef mat<2, 4, uint, defaultp> umat2x4; - typedef mat<3, 4, uint, defaultp> umat3x4; - typedef mat<4, 4, uint, defaultp> umat4x4; - - - typedef mat<2, 2, uint8, lowp> lowp_u8mat2x2; - typedef mat<2, 3, uint8, lowp> lowp_u8mat2x3; - typedef mat<2, 4, uint8, lowp> lowp_u8mat2x4; - typedef mat<3, 2, uint8, lowp> lowp_u8mat3x2; - typedef mat<3, 3, uint8, lowp> lowp_u8mat3x3; - typedef mat<3, 4, uint8, lowp> lowp_u8mat3x4; - typedef mat<4, 2, uint8, lowp> lowp_u8mat4x2; - typedef mat<4, 3, uint8, lowp> lowp_u8mat4x3; - typedef mat<4, 4, uint8, lowp> lowp_u8mat4x4; - - typedef mat<2, 2, uint8, mediump> mediump_u8mat2x2; - typedef mat<2, 3, uint8, mediump> mediump_u8mat2x3; - typedef mat<2, 4, uint8, mediump> mediump_u8mat2x4; - typedef mat<3, 2, uint8, mediump> mediump_u8mat3x2; - typedef mat<3, 3, uint8, mediump> mediump_u8mat3x3; - typedef mat<3, 4, uint8, mediump> mediump_u8mat3x4; - typedef mat<4, 2, uint8, mediump> mediump_u8mat4x2; - typedef mat<4, 3, uint8, mediump> mediump_u8mat4x3; - typedef mat<4, 4, uint8, mediump> mediump_u8mat4x4; - - typedef mat<2, 2, uint8, highp> highp_u8mat2x2; - typedef mat<2, 3, uint8, highp> highp_u8mat2x3; - typedef mat<2, 4, uint8, highp> highp_u8mat2x4; - typedef mat<3, 2, uint8, highp> highp_u8mat3x2; - typedef mat<3, 3, uint8, highp> highp_u8mat3x3; - typedef mat<3, 4, uint8, highp> highp_u8mat3x4; - typedef mat<4, 2, uint8, highp> highp_u8mat4x2; - typedef mat<4, 3, uint8, highp> highp_u8mat4x3; - typedef mat<4, 4, uint8, highp> highp_u8mat4x4; - - typedef mat<2, 2, uint8, defaultp> u8mat2x2; - typedef mat<3, 2, uint8, defaultp> u8mat3x2; - typedef mat<4, 2, uint8, defaultp> u8mat4x2; - typedef mat<2, 3, uint8, defaultp> u8mat2x3; - typedef mat<3, 3, uint8, defaultp> u8mat3x3; - typedef mat<4, 3, uint8, defaultp> u8mat4x3; - typedef mat<2, 4, uint8, defaultp> u8mat2x4; - typedef mat<3, 4, uint8, defaultp> u8mat3x4; - typedef mat<4, 4, uint8, defaultp> u8mat4x4; - - - typedef mat<2, 2, uint16, lowp> lowp_u16mat2x2; - typedef mat<2, 3, uint16, lowp> lowp_u16mat2x3; - typedef mat<2, 4, uint16, lowp> lowp_u16mat2x4; - typedef mat<3, 2, uint16, lowp> lowp_u16mat3x2; - typedef mat<3, 3, uint16, lowp> lowp_u16mat3x3; - typedef mat<3, 4, uint16, lowp> lowp_u16mat3x4; - typedef mat<4, 2, uint16, lowp> lowp_u16mat4x2; - typedef mat<4, 3, uint16, lowp> lowp_u16mat4x3; - typedef mat<4, 4, uint16, lowp> lowp_u16mat4x4; - - typedef mat<2, 2, uint16, mediump> mediump_u16mat2x2; - typedef mat<2, 3, uint16, mediump> mediump_u16mat2x3; - typedef mat<2, 4, uint16, mediump> mediump_u16mat2x4; - typedef mat<3, 2, uint16, mediump> mediump_u16mat3x2; - typedef mat<3, 3, uint16, mediump> mediump_u16mat3x3; - typedef mat<3, 4, uint16, mediump> mediump_u16mat3x4; - typedef mat<4, 2, uint16, mediump> mediump_u16mat4x2; - typedef mat<4, 3, uint16, mediump> mediump_u16mat4x3; - typedef mat<4, 4, uint16, mediump> mediump_u16mat4x4; - - typedef mat<2, 2, uint16, highp> highp_u16mat2x2; - typedef mat<2, 3, uint16, highp> highp_u16mat2x3; - typedef mat<2, 4, uint16, highp> highp_u16mat2x4; - typedef mat<3, 2, uint16, highp> highp_u16mat3x2; - typedef mat<3, 3, uint16, highp> highp_u16mat3x3; - typedef mat<3, 4, uint16, highp> highp_u16mat3x4; - typedef mat<4, 2, uint16, highp> highp_u16mat4x2; - typedef mat<4, 3, uint16, highp> highp_u16mat4x3; - typedef mat<4, 4, uint16, highp> highp_u16mat4x4; - - typedef mat<2, 2, uint16, defaultp> u16mat2x2; - typedef mat<3, 2, uint16, defaultp> u16mat3x2; - typedef mat<4, 2, uint16, defaultp> u16mat4x2; - typedef mat<2, 3, uint16, defaultp> u16mat2x3; - typedef mat<3, 3, uint16, defaultp> u16mat3x3; - typedef mat<4, 3, uint16, defaultp> u16mat4x3; - typedef mat<2, 4, uint16, defaultp> u16mat2x4; - typedef mat<3, 4, uint16, defaultp> u16mat3x4; - typedef mat<4, 4, uint16, defaultp> u16mat4x4; - - - typedef mat<2, 2, uint32, lowp> lowp_u32mat2x2; - typedef mat<2, 3, uint32, lowp> lowp_u32mat2x3; - typedef mat<2, 4, uint32, lowp> lowp_u32mat2x4; - typedef mat<3, 2, uint32, lowp> lowp_u32mat3x2; - typedef mat<3, 3, uint32, lowp> lowp_u32mat3x3; - typedef mat<3, 4, uint32, lowp> lowp_u32mat3x4; - typedef mat<4, 2, uint32, lowp> lowp_u32mat4x2; - typedef mat<4, 3, uint32, lowp> lowp_u32mat4x3; - typedef mat<4, 4, uint32, lowp> lowp_u32mat4x4; - - typedef mat<2, 2, uint32, mediump> mediump_u32mat2x2; - typedef mat<2, 3, uint32, mediump> mediump_u32mat2x3; - typedef mat<2, 4, uint32, mediump> mediump_u32mat2x4; - typedef mat<3, 2, uint32, mediump> mediump_u32mat3x2; - typedef mat<3, 3, uint32, mediump> mediump_u32mat3x3; - typedef mat<3, 4, uint32, mediump> mediump_u32mat3x4; - typedef mat<4, 2, uint32, mediump> mediump_u32mat4x2; - typedef mat<4, 3, uint32, mediump> mediump_u32mat4x3; - typedef mat<4, 4, uint32, mediump> mediump_u32mat4x4; - - typedef mat<2, 2, uint32, highp> highp_u32mat2x2; - typedef mat<2, 3, uint32, highp> highp_u32mat2x3; - typedef mat<2, 4, uint32, highp> highp_u32mat2x4; - typedef mat<3, 2, uint32, highp> highp_u32mat3x2; - typedef mat<3, 3, uint32, highp> highp_u32mat3x3; - typedef mat<3, 4, uint32, highp> highp_u32mat3x4; - typedef mat<4, 2, uint32, highp> highp_u32mat4x2; - typedef mat<4, 3, uint32, highp> highp_u32mat4x3; - typedef mat<4, 4, uint32, highp> highp_u32mat4x4; - - typedef mat<2, 2, uint32, defaultp> u32mat2x2; - typedef mat<3, 2, uint32, defaultp> u32mat3x2; - typedef mat<4, 2, uint32, defaultp> u32mat4x2; - typedef mat<2, 3, uint32, defaultp> u32mat2x3; - typedef mat<3, 3, uint32, defaultp> u32mat3x3; - typedef mat<4, 3, uint32, defaultp> u32mat4x3; - typedef mat<2, 4, uint32, defaultp> u32mat2x4; - typedef mat<3, 4, uint32, defaultp> u32mat3x4; - typedef mat<4, 4, uint32, defaultp> u32mat4x4; - - - typedef mat<2, 2, uint64, lowp> lowp_u64mat2x2; - typedef mat<2, 3, uint64, lowp> lowp_u64mat2x3; - typedef mat<2, 4, uint64, lowp> lowp_u64mat2x4; - typedef mat<3, 2, uint64, lowp> lowp_u64mat3x2; - typedef mat<3, 3, uint64, lowp> lowp_u64mat3x3; - typedef mat<3, 4, uint64, lowp> lowp_u64mat3x4; - typedef mat<4, 2, uint64, lowp> lowp_u64mat4x2; - typedef mat<4, 3, uint64, lowp> lowp_u64mat4x3; - typedef mat<4, 4, uint64, lowp> lowp_u64mat4x4; - - typedef mat<2, 2, uint64, mediump> mediump_u64mat2x2; - typedef mat<2, 3, uint64, mediump> mediump_u64mat2x3; - typedef mat<2, 4, uint64, mediump> mediump_u64mat2x4; - typedef mat<3, 2, uint64, mediump> mediump_u64mat3x2; - typedef mat<3, 3, uint64, mediump> mediump_u64mat3x3; - typedef mat<3, 4, uint64, mediump> mediump_u64mat3x4; - typedef mat<4, 2, uint64, mediump> mediump_u64mat4x2; - typedef mat<4, 3, uint64, mediump> mediump_u64mat4x3; - typedef mat<4, 4, uint64, mediump> mediump_u64mat4x4; - - typedef mat<2, 2, uint64, highp> highp_u64mat2x2; - typedef mat<2, 3, uint64, highp> highp_u64mat2x3; - typedef mat<2, 4, uint64, highp> highp_u64mat2x4; - typedef mat<3, 2, uint64, highp> highp_u64mat3x2; - typedef mat<3, 3, uint64, highp> highp_u64mat3x3; - typedef mat<3, 4, uint64, highp> highp_u64mat3x4; - typedef mat<4, 2, uint64, highp> highp_u64mat4x2; - typedef mat<4, 3, uint64, highp> highp_u64mat4x3; - typedef mat<4, 4, uint64, highp> highp_u64mat4x4; - - typedef mat<2, 2, uint64, defaultp> u64mat2x2; - typedef mat<3, 2, uint64, defaultp> u64mat3x2; - typedef mat<4, 2, uint64, defaultp> u64mat4x2; - typedef mat<2, 3, uint64, defaultp> u64mat2x3; - typedef mat<3, 3, uint64, defaultp> u64mat3x3; - typedef mat<4, 3, uint64, defaultp> u64mat4x3; - typedef mat<2, 4, uint64, defaultp> u64mat2x4; - typedef mat<3, 4, uint64, defaultp> u64mat3x4; - typedef mat<4, 4, uint64, defaultp> u64mat4x4; - - // Quaternion - - typedef qua lowp_quat; - typedef qua mediump_quat; - typedef qua highp_quat; - typedef qua quat; - - typedef qua lowp_fquat; - typedef qua mediump_fquat; - typedef qua highp_fquat; - typedef qua fquat; - - typedef qua lowp_f32quat; - typedef qua mediump_f32quat; - typedef qua highp_f32quat; - typedef qua f32quat; - - typedef qua lowp_dquat; - typedef qua mediump_dquat; - typedef qua highp_dquat; - typedef qua dquat; - - typedef qua lowp_f64quat; - typedef qua mediump_f64quat; - typedef qua highp_f64quat; - typedef qua f64quat; -}//namespace glm - - diff --git a/src/qged/display/glm/glm/geometric.hpp b/src/qged/display/glm/glm/geometric.hpp deleted file mode 100644 index 65a92f1e246..00000000000 --- a/src/qged/display/glm/glm/geometric.hpp +++ /dev/null @@ -1,147 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/geometric.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions -/// -/// @defgroup core_func_geometric Geometric functions -/// @ingroup core -/// -/// These operate on vectors as vectors, not component-wise. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/type_vec3.hpp" - -namespace glm -{ - /// @addtogroup core_func_geometric - /// @{ - - /// Returns the length of x, i.e., sqrt(x * x). - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL length man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T length(vec const& x); - - /// Returns the distance betwwen p0 and p1, i.e., length(p0 - p1). - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL distance man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T distance(vec const& p0, vec const& p1); - - /// Returns the dot product of x and y, i.e., result = x * y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL dot man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL T dot(vec const& x, vec const& y); - - /// Returns the cross product of x and y. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL cross man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec<3, T, Q> cross(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - /// Returns a vector in the same direction as x but with length of 1. - /// According to issue 10 GLSL 1.10 specification, if length(x) == 0 then result is undefined and generate an error. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL normalize man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec normalize(vec const& x); - - /// If dot(Nref, I) < 0.0, return N, otherwise, return -N. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL faceforward man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec faceforward( - vec const& N, - vec const& I, - vec const& Nref); - - /// For the incident vector I and surface orientation N, - /// returns the reflection direction : result = I - 2.0 * dot(N, I) * N. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL reflect man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec reflect( - vec const& I, - vec const& N); - - /// For the incident vector I and surface normal N, - /// and the ratio of indices of refraction eta, - /// return the refraction vector. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Floating-point scalar types. - /// - /// @see GLSL refract man page - /// @see GLSL 4.20.8 specification, section 8.5 Geometric Functions - template - GLM_FUNC_DECL vec refract( - vec const& I, - vec const& N, - T eta); - - /// @} -}//namespace glm - -#include "detail/func_geometric.inl" diff --git a/src/qged/display/glm/glm/glm.hpp b/src/qged/display/glm/glm/glm.hpp deleted file mode 100644 index 403aa6c9aa4..00000000000 --- a/src/qged/display/glm/glm/glm.hpp +++ /dev/null @@ -1,167 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/glm.hpp -/// -/// @defgroup core Core features -/// -/// @brief Features that implement in C++ the GLSL specification as closely as possible. -/// -/// The GLM core consists of C++ types that mirror GLSL types and -/// C++ functions that mirror the GLSL functions. -/// -/// The best documentation for GLM Core is the current GLSL specification, -/// version 4.2 -/// (pdf file). -/// -/// GLM core functionalities require to be included to be used. -/// -/// -/// @defgroup core_vector Vector types -/// -/// Vector types of two to four components with an exhaustive set of operators. -/// -/// @ingroup core -/// -/// -/// @defgroup core_vector_precision Vector types with precision qualifiers -/// -/// @brief Vector types with precision qualifiers which may result in various precision in term of ULPs -/// -/// GLSL allows defining qualifiers for particular variables. -/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, -/// with OpenGL ES's GLSL, these qualifiers do have an effect. -/// -/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: -/// a number of typedefs that use a particular qualifier. -/// -/// None of these types make any guarantees about the actual qualifier used. -/// -/// @ingroup core -/// -/// -/// @defgroup core_matrix Matrix types -/// -/// Matrix types of with C columns and R rows where C and R are values between 2 to 4 included. -/// These types have exhaustive sets of operators. -/// -/// @ingroup core -/// -/// -/// @defgroup core_matrix_precision Matrix types with precision qualifiers -/// -/// @brief Matrix types with precision qualifiers which may result in various precision in term of ULPs -/// -/// GLSL allows defining qualifiers for particular variables. -/// With OpenGL's GLSL, these qualifiers have no effect; they are there for compatibility, -/// with OpenGL ES's GLSL, these qualifiers do have an effect. -/// -/// C++ has no language equivalent to qualifier qualifiers. So GLM provides the next-best thing: -/// a number of typedefs that use a particular qualifier. -/// -/// None of these types make any guarantees about the actual qualifier used. -/// -/// @ingroup core -/// -/// -/// @defgroup ext Stable extensions -/// -/// @brief Additional features not specified by GLSL specification. -/// -/// EXT extensions are fully tested and documented. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions at once by -/// including . Otherwise, each extension needs to be included a specific file. -/// -/// -/// @defgroup gtc Recommended extensions -/// -/// @brief Additional features not specified by GLSL specification. -/// -/// GTC extensions aim to be stable with tests and documentation. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions at once by -/// including . Otherwise, each extension needs to be included a specific file. -/// -/// -/// @defgroup gtx Experimental extensions -/// -/// @brief Experimental features not specified by GLSL specification. -/// -/// Experimental extensions are useful functions and types, but the development of -/// their API and functionality is not necessarily stable. They can change -/// substantially between versions. Backwards compatibility is not much of an issue -/// for them. -/// -/// Even if it's highly unrecommended, it's possible to include all the extensions -/// at once by including . Otherwise, each extension needs to be -/// included a specific file. -/// -/// @mainpage OpenGL Mathematics (GLM) -/// - Website: glm.g-truc.net -/// - GLM API documentation -/// - GLM Manual - -#include "detail/_fixes.hpp" - -#include "detail/setup.hpp" - -#pragma once - -#include -#include -#include -#include -#include -#include "fwd.hpp" - -#include "vec2.hpp" -#include "vec3.hpp" -#include "vec4.hpp" -#include "mat2x2.hpp" -#include "mat2x3.hpp" -#include "mat2x4.hpp" -#include "mat3x2.hpp" -#include "mat3x3.hpp" -#include "mat3x4.hpp" -#include "mat4x2.hpp" -#include "mat4x3.hpp" -#include "mat4x4.hpp" - -#include "trigonometric.hpp" -#include "exponential.hpp" -#include "common.hpp" -#include "packing.hpp" -#include "geometric.hpp" -#include "matrix.hpp" -#include "vector_relational.hpp" -#include "integer.hpp" diff --git a/src/qged/display/glm/glm/gtc/bitfield.hpp b/src/qged/display/glm/glm/gtc/bitfield.hpp deleted file mode 100644 index 062039c269e..00000000000 --- a/src/qged/display/glm/glm/gtc/bitfield.hpp +++ /dev/null @@ -1,297 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_bitfield -/// @file glm/gtc/bitfield.hpp -/// -/// @see core (dependence) -/// @see gtc_bitfield (dependence) -/// -/// @defgroup gtc_bitfield GLM_GTC_bitfield -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#include "../detail/setup.hpp" - -#pragma once - -// Dependencies -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "type_precision.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_bitfield extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_bitfield - /// @{ - - /// Build a mask of 'count' bits - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType mask(genIUType Bits); - - /// Build a mask of 'count' bits - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec mask(vec const& v); - - /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldRotateRight(genIUType In, int Shift); - - /// Rotate all bits to the right. All the bits dropped in the right side are inserted back on the left side. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldRotateRight(vec const& In, int Shift); - - /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldRotateLeft(genIUType In, int Shift); - - /// Rotate all bits to the left. All the bits dropped in the left side are inserted back on the right side. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldRotateLeft(vec const& In, int Shift); - - /// Set to 1 a range of bits. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount); - - /// Set to 1 a range of bits. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount); - - /// Set to 0 a range of bits. - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount); - - /// Set to 0 a range of bits. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Signed and unsigned integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_bitfield - template - GLM_FUNC_DECL vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int16 bitfieldInterleave(int8 x, int8 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint16 bitfieldInterleave(uint8 x, uint8 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint16 bitfieldInterleave(u8vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u8vec2 bitfieldDeinterleave(glm::uint16 x); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int16 x, int16 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint16 x, uint16 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(u16vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u16vec2 bitfieldDeinterleave(glm::uint32 x); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of x followed by the first bit of y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y); - - /// Interleaves the bits of x and y. - /// The first bit is the first bit of v.x followed by the first bit of v.y. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(u32vec2 const& v); - - /// Deinterleaves the bits of x. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL glm::u32vec2 bitfieldDeinterleave(glm::uint64 x); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int32 x, int32 y, int32 z); - - /// Interleaves the bits of x, y and z. - /// The first bit is the first bit of x followed by the first bit of y and the first bit of z. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w); - - /// Interleaves the bits of x, y, z and w. - /// The first bit is the first bit of x followed by the first bit of y, the first bit of z and finally the first bit of w. - /// The other bits are interleaved following the previous sequence. - /// - /// @see gtc_bitfield - GLM_FUNC_DECL uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w); - - /// @} -} //namespace glm - -#include "bitfield.inl" diff --git a/src/qged/display/glm/glm/gtc/bitfield.inl b/src/qged/display/glm/glm/gtc/bitfield.inl deleted file mode 100644 index 06cf1889cd4..00000000000 --- a/src/qged/display/glm/glm/gtc/bitfield.inl +++ /dev/null @@ -1,626 +0,0 @@ -/// @ref gtc_bitfield - -#include "../simd/integer.h" - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y); - - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z); - - template - GLM_FUNC_DECL RET bitfieldInterleave(PARAM x, PARAM y, PARAM z, PARAM w); - - template<> - GLM_FUNC_QUALIFIER glm::uint16 bitfieldInterleave(glm::uint8 x, glm::uint8 y) - { - glm::uint16 REG1(x); - glm::uint16 REG2(y); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555); - - return REG1 | static_cast(REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint16 x, glm::uint16 y) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x33333333); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x33333333); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x55555555); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x55555555); - - return REG1 | (REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x0000FFFF0000FFFFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x0000FFFF0000FFFFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x00FF00FF00FF00FFull); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x00FF00FF00FF00FFull); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x3333333333333333ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x3333333333333333ull); - - REG1 = ((REG1 << 1) | REG1) & static_cast(0x5555555555555555ull); - REG2 = ((REG2 << 1) | REG2) & static_cast(0x5555555555555555ull); - - return REG1 | (REG2 << 1); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - glm::uint32 REG3(z); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0xFF0000FFu); - REG2 = ((REG2 << 16) | REG2) & static_cast(0xFF0000FFu); - REG3 = ((REG3 << 16) | REG3) & static_cast(0xFF0000FFu); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0x0F00F00Fu); - REG2 = ((REG2 << 8) | REG2) & static_cast(0x0F00F00Fu); - REG3 = ((REG3 << 8) | REG3) & static_cast(0x0F00F00Fu); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0xC30C30C3u); - REG2 = ((REG2 << 4) | REG2) & static_cast(0xC30C30C3u); - REG3 = ((REG3 << 4) | REG3) & static_cast(0xC30C30C3u); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x49249249u); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x49249249u); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x49249249u); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - - REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); - REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); - REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); - REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); - REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); - REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); - REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint32 x, glm::uint32 y, glm::uint32 z) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - - REG1 = ((REG1 << 32) | REG1) & static_cast(0xFFFF00000000FFFFull); - REG2 = ((REG2 << 32) | REG2) & static_cast(0xFFFF00000000FFFFull); - REG3 = ((REG3 << 32) | REG3) & static_cast(0xFFFF00000000FFFFull); - - REG1 = ((REG1 << 16) | REG1) & static_cast(0x00FF0000FF0000FFull); - REG2 = ((REG2 << 16) | REG2) & static_cast(0x00FF0000FF0000FFull); - REG3 = ((REG3 << 16) | REG3) & static_cast(0x00FF0000FF0000FFull); - - REG1 = ((REG1 << 8) | REG1) & static_cast(0xF00F00F00F00F00Full); - REG2 = ((REG2 << 8) | REG2) & static_cast(0xF00F00F00F00F00Full); - REG3 = ((REG3 << 8) | REG3) & static_cast(0xF00F00F00F00F00Full); - - REG1 = ((REG1 << 4) | REG1) & static_cast(0x30C30C30C30C30C3ull); - REG2 = ((REG2 << 4) | REG2) & static_cast(0x30C30C30C30C30C3ull); - REG3 = ((REG3 << 4) | REG3) & static_cast(0x30C30C30C30C30C3ull); - - REG1 = ((REG1 << 2) | REG1) & static_cast(0x9249249249249249ull); - REG2 = ((REG2 << 2) | REG2) & static_cast(0x9249249249249249ull); - REG3 = ((REG3 << 2) | REG3) & static_cast(0x9249249249249249ull); - - return REG1 | (REG2 << 1) | (REG3 << 2); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(glm::uint8 x, glm::uint8 y, glm::uint8 z, glm::uint8 w) - { - glm::uint32 REG1(x); - glm::uint32 REG2(y); - glm::uint32 REG3(z); - glm::uint32 REG4(w); - - REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000Fu); - REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000Fu); - REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000Fu); - REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000Fu); - - REG1 = ((REG1 << 6) | REG1) & static_cast(0x03030303u); - REG2 = ((REG2 << 6) | REG2) & static_cast(0x03030303u); - REG3 = ((REG3 << 6) | REG3) & static_cast(0x03030303u); - REG4 = ((REG4 << 6) | REG4) & static_cast(0x03030303u); - - REG1 = ((REG1 << 3) | REG1) & static_cast(0x11111111u); - REG2 = ((REG2 << 3) | REG2) & static_cast(0x11111111u); - REG3 = ((REG3 << 3) | REG3) & static_cast(0x11111111u); - REG4 = ((REG4 << 3) | REG4) & static_cast(0x11111111u); - - return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); - } - - template<> - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(glm::uint16 x, glm::uint16 y, glm::uint16 z, glm::uint16 w) - { - glm::uint64 REG1(x); - glm::uint64 REG2(y); - glm::uint64 REG3(z); - glm::uint64 REG4(w); - - REG1 = ((REG1 << 24) | REG1) & static_cast(0x000000FF000000FFull); - REG2 = ((REG2 << 24) | REG2) & static_cast(0x000000FF000000FFull); - REG3 = ((REG3 << 24) | REG3) & static_cast(0x000000FF000000FFull); - REG4 = ((REG4 << 24) | REG4) & static_cast(0x000000FF000000FFull); - - REG1 = ((REG1 << 12) | REG1) & static_cast(0x000F000F000F000Full); - REG2 = ((REG2 << 12) | REG2) & static_cast(0x000F000F000F000Full); - REG3 = ((REG3 << 12) | REG3) & static_cast(0x000F000F000F000Full); - REG4 = ((REG4 << 12) | REG4) & static_cast(0x000F000F000F000Full); - - REG1 = ((REG1 << 6) | REG1) & static_cast(0x0303030303030303ull); - REG2 = ((REG2 << 6) | REG2) & static_cast(0x0303030303030303ull); - REG3 = ((REG3 << 6) | REG3) & static_cast(0x0303030303030303ull); - REG4 = ((REG4 << 6) | REG4) & static_cast(0x0303030303030303ull); - - REG1 = ((REG1 << 3) | REG1) & static_cast(0x1111111111111111ull); - REG2 = ((REG2 << 3) | REG2) & static_cast(0x1111111111111111ull); - REG3 = ((REG3 << 3) | REG3) & static_cast(0x1111111111111111ull); - REG4 = ((REG4 << 3) | REG4) & static_cast(0x1111111111111111ull); - - return REG1 | (REG2 << 1) | (REG3 << 2) | (REG4 << 3); - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER genIUType mask(genIUType Bits) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); - - return Bits >= sizeof(genIUType) * 8 ? ~static_cast(0) : (static_cast(1) << Bits) - static_cast(1); - } - - template - GLM_FUNC_QUALIFIER vec mask(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'mask' accepts only integer values"); - - return detail::functor1::call(mask, v); - } - - template - GLM_FUNC_QUALIFIER genIType bitfieldRotateRight(genIType In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); - - int const BitSize = static_cast(sizeof(genIType) * 8); - return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldRotateRight(vec const& In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateRight' accepts only integer values"); - - int const BitSize = static_cast(sizeof(T) * 8); - return (In << static_cast(Shift)) | (In >> static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER genIType bitfieldRotateLeft(genIType In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); - - int const BitSize = static_cast(sizeof(genIType) * 8); - return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldRotateLeft(vec const& In, int Shift) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "'bitfieldRotateLeft' accepts only integer values"); - - int const BitSize = static_cast(sizeof(T) * 8); - return (In >> static_cast(Shift)) | (In << static_cast(BitSize - Shift)); - } - - template - GLM_FUNC_QUALIFIER genIUType bitfieldFillOne(genIUType Value, int FirstBit, int BitCount) - { - return Value | static_cast(mask(BitCount) << FirstBit); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldFillOne(vec const& Value, int FirstBit, int BitCount) - { - return Value | static_cast(mask(BitCount) << FirstBit); - } - - template - GLM_FUNC_QUALIFIER genIUType bitfieldFillZero(genIUType Value, int FirstBit, int BitCount) - { - return Value & static_cast(~(mask(BitCount) << FirstBit)); - } - - template - GLM_FUNC_QUALIFIER vec bitfieldFillZero(vec const& Value, int FirstBit, int BitCount) - { - return Value & static_cast(~(mask(BitCount) << FirstBit)); - } - - GLM_FUNC_QUALIFIER int16 bitfieldInterleave(int8 x, int8 y) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y; - - union sign16 - { - int16 i; - uint16 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(uint8 x, uint8 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER uint16 bitfieldInterleave(u8vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER u8vec2 bitfieldDeinterleave(glm::uint16 x) - { - uint16 REG1(x); - uint16 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x5555); - REG2 = REG2 & static_cast(0x5555); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0xFFFF); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0xFFFF); - - return glm::u8vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int16 x, int16 y) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint16 x, uint16 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER glm::uint32 bitfieldInterleave(u16vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER glm::u16vec2 bitfieldDeinterleave(glm::uint32 x) - { - glm::uint32 REG1(x); - glm::uint32 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x55555555); - REG2 = REG2 & static_cast(0x55555555); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x33333333); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x33333333); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF); - - return glm::u16vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y) - { - union sign32 - { - int32 i; - uint32 u; - } sign_x, sign_y; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - result.u = bitfieldInterleave(sign_x.u, sign_y.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y) - { - return detail::bitfieldInterleave(x, y); - } - - GLM_FUNC_QUALIFIER glm::uint64 bitfieldInterleave(u32vec2 const& v) - { - return detail::bitfieldInterleave(v.x, v.y); - } - - GLM_FUNC_QUALIFIER glm::u32vec2 bitfieldDeinterleave(glm::uint64 x) - { - glm::uint64 REG1(x); - glm::uint64 REG2(x >>= 1); - - REG1 = REG1 & static_cast(0x5555555555555555ull); - REG2 = REG2 & static_cast(0x5555555555555555ull); - - REG1 = ((REG1 >> 1) | REG1) & static_cast(0x3333333333333333ull); - REG2 = ((REG2 >> 1) | REG2) & static_cast(0x3333333333333333ull); - - REG1 = ((REG1 >> 2) | REG1) & static_cast(0x0F0F0F0F0F0F0F0Full); - REG2 = ((REG2 >> 2) | REG2) & static_cast(0x0F0F0F0F0F0F0F0Full); - - REG1 = ((REG1 >> 4) | REG1) & static_cast(0x00FF00FF00FF00FFull); - REG2 = ((REG2 >> 4) | REG2) & static_cast(0x00FF00FF00FF00FFull); - - REG1 = ((REG1 >> 8) | REG1) & static_cast(0x0000FFFF0000FFFFull); - REG2 = ((REG2 >> 8) | REG2) & static_cast(0x0000FFFF0000FFFFull); - - REG1 = ((REG1 >> 16) | REG1) & static_cast(0x00000000FFFFFFFFull); - REG2 = ((REG2 >> 16) | REG2) & static_cast(0x00000000FFFFFFFFull); - - return glm::u32vec2(REG1, REG2); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y, sign_z; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y, sign_z; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int32 x, int32 y, int32 z) - { - union sign16 - { - int32 i; - uint32 u; - } sign_x, sign_y, sign_z; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint32 x, uint32 y, uint32 z) - { - return detail::bitfieldInterleave(x, y, z); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u32vec3 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z); - } - - GLM_FUNC_QUALIFIER int32 bitfieldInterleave(int8 x, int8 y, int8 z, int8 w) - { - union sign8 - { - int8 i; - uint8 u; - } sign_x, sign_y, sign_z, sign_w; - - union sign32 - { - int32 i; - uint32 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - sign_w.i = w; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(uint8 x, uint8 y, uint8 z, uint8 w) - { - return detail::bitfieldInterleave(x, y, z, w); - } - - GLM_FUNC_QUALIFIER uint32 bitfieldInterleave(u8vec4 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); - } - - GLM_FUNC_QUALIFIER int64 bitfieldInterleave(int16 x, int16 y, int16 z, int16 w) - { - union sign16 - { - int16 i; - uint16 u; - } sign_x, sign_y, sign_z, sign_w; - - union sign64 - { - int64 i; - uint64 u; - } result; - - sign_x.i = x; - sign_y.i = y; - sign_z.i = z; - sign_w.i = w; - result.u = bitfieldInterleave(sign_x.u, sign_y.u, sign_z.u, sign_w.u); - - return result.i; - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(uint16 x, uint16 y, uint16 z, uint16 w) - { - return detail::bitfieldInterleave(x, y, z, w); - } - - GLM_FUNC_QUALIFIER uint64 bitfieldInterleave(u16vec4 const& v) - { - return detail::bitfieldInterleave(v.x, v.y, v.z, v.w); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/color_space.hpp b/src/qged/display/glm/glm/gtc/color_space.hpp deleted file mode 100644 index 8206ff59ba9..00000000000 --- a/src/qged/display/glm/glm/gtc/color_space.hpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_color_space -/// @file glm/gtc/color_space.hpp -/// -/// @see core (dependence) -/// @see gtc_color_space (dependence) -/// -/// @defgroup gtc_color_space GLM_GTC_color_space -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../exponential.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_color_space extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_color_space - /// @{ - - /// Convert a linear color to sRGB color using a standard gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear); - - /// Convert a linear color to sRGB color using a custom gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertLinearToSRGB(vec const& ColorLinear, T Gamma); - - /// Convert a sRGB color to linear color using a standard gamma correction. - /// IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB); - - /// Convert a sRGB color to linear color using a custom gamma correction. - // IEC 61966-2-1:1999 / Rec. 709 specification https://www.w3.org/Graphics/Color/srgb - template - GLM_FUNC_DECL vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma); - - /// @} -} //namespace glm - -#include "color_space.inl" diff --git a/src/qged/display/glm/glm/gtc/color_space.inl b/src/qged/display/glm/glm/gtc/color_space.inl deleted file mode 100644 index 2a900044e99..00000000000 --- a/src/qged/display/glm/glm/gtc/color_space.inl +++ /dev/null @@ -1,84 +0,0 @@ -/// @ref gtc_color_space - -namespace glm{ -namespace detail -{ - template - struct compute_rgbToSrgb - { - GLM_FUNC_QUALIFIER static vec call(vec const& ColorRGB, T GammaCorrection) - { - vec const ClampedColor(clamp(ColorRGB, static_cast(0), static_cast(1))); - - return mix( - pow(ClampedColor, vec(GammaCorrection)) * static_cast(1.055) - static_cast(0.055), - ClampedColor * static_cast(12.92), - lessThan(ClampedColor, vec(static_cast(0.0031308)))); - } - }; - - template - struct compute_rgbToSrgb<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorRGB, T GammaCorrection) - { - return vec<4, T, Q>(compute_rgbToSrgb<3, T, Q>::call(vec<3, T, Q>(ColorRGB), GammaCorrection), ColorRGB.w); - } - }; - - template - struct compute_srgbToRgb - { - GLM_FUNC_QUALIFIER static vec call(vec const& ColorSRGB, T Gamma) - { - return mix( - pow((ColorSRGB + static_cast(0.055)) * static_cast(0.94786729857819905213270142180095), vec(Gamma)), - ColorSRGB * static_cast(0.07739938080495356037151702786378), - lessThanEqual(ColorSRGB, vec(static_cast(0.04045)))); - } - }; - - template - struct compute_srgbToRgb<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, T, Q> call(vec<4, T, Q> const& ColorSRGB, T Gamma) - { - return vec<4, T, Q>(compute_srgbToRgb<3, T, Q>::call(vec<3, T, Q>(ColorSRGB), Gamma), ColorSRGB.w); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear) - { - return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(0.41666)); - } - - // Based on Ian Taylor http://chilliant.blogspot.fr/2012/08/srgb-approximations-for-hlsl.html - template<> - GLM_FUNC_QUALIFIER vec<3, float, lowp> convertLinearToSRGB(vec<3, float, lowp> const& ColorLinear) - { - vec<3, float, lowp> S1 = sqrt(ColorLinear); - vec<3, float, lowp> S2 = sqrt(S1); - vec<3, float, lowp> S3 = sqrt(S2); - return 0.662002687f * S1 + 0.684122060f * S2 - 0.323583601f * S3 - 0.0225411470f * ColorLinear; - } - - template - GLM_FUNC_QUALIFIER vec convertLinearToSRGB(vec const& ColorLinear, T Gamma) - { - return detail::compute_rgbToSrgb::call(ColorLinear, static_cast(1) / Gamma); - } - - template - GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB) - { - return detail::compute_srgbToRgb::call(ColorSRGB, static_cast(2.4)); - } - - template - GLM_FUNC_QUALIFIER vec convertSRGBToLinear(vec const& ColorSRGB, T Gamma) - { - return detail::compute_srgbToRgb::call(ColorSRGB, Gamma); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/constants.hpp b/src/qged/display/glm/glm/gtc/constants.hpp deleted file mode 100644 index 85ff73f922a..00000000000 --- a/src/qged/display/glm/glm/gtc/constants.hpp +++ /dev/null @@ -1,196 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_constants -/// @file glm/gtc/constants.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_constants GLM_GTC_constants -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Provide a list of constants and precomputed useful values. - -#pragma once - -// Dependencies -#include "../ext/scalar_constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_constants extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_constants - /// @{ - - /// Return 0. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType zero(); - - /// Return 1. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one(); - - /// Return pi * 2. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_pi(); - - /// Return square root of pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_pi(); - - /// Return pi / 2. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType half_pi(); - - /// Return pi / 2 * 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType three_over_two_pi(); - - /// Return pi / 4. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType quarter_pi(); - - /// Return 1 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_pi(); - - /// Return 1 / (pi * 2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_two_pi(); - - /// Return 2 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_pi(); - - /// Return 4 / pi. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType four_over_pi(); - - /// Return 2 / sqrt(pi). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_over_root_pi(); - - /// Return 1 / sqrt(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType one_over_root_two(); - - /// Return sqrt(pi / 2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_half_pi(); - - /// Return sqrt(2 * pi). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_two_pi(); - - /// Return sqrt(ln(4)). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_ln_four(); - - /// Return e constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType e(); - - /// Return Euler's constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType euler(); - - /// Return sqrt(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_two(); - - /// Return sqrt(3). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_three(); - - /// Return sqrt(5). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType root_five(); - - /// Return ln(2). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_two(); - - /// Return ln(10). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ten(); - - /// Return ln(ln(2)). - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType ln_ln_two(); - - /// Return 1 / 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType third(); - - /// Return 2 / 3. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType two_thirds(); - - /// Return the golden ratio constant. - /// @see gtc_constants - template - GLM_FUNC_DECL GLM_CONSTEXPR genType golden_ratio(); - - /// @} -} //namespace glm - -#include "constants.inl" diff --git a/src/qged/display/glm/glm/gtc/constants.inl b/src/qged/display/glm/glm/gtc/constants.inl deleted file mode 100644 index bb98c6bff9d..00000000000 --- a/src/qged/display/glm/glm/gtc/constants.inl +++ /dev/null @@ -1,167 +0,0 @@ -/// @ref gtc_constants - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType zero() - { - return genType(0); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one() - { - return genType(1); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_pi() - { - return genType(6.28318530717958647692528676655900576); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_pi() - { - return genType(1.772453850905516027); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType half_pi() - { - return genType(1.57079632679489661923132169163975144); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType three_over_two_pi() - { - return genType(4.71238898038468985769396507491925432); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType quarter_pi() - { - return genType(0.785398163397448309615660845819875721); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_pi() - { - return genType(0.318309886183790671537767526745028724); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_two_pi() - { - return genType(0.159154943091895335768883763372514362); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_pi() - { - return genType(0.636619772367581343075535053490057448); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType four_over_pi() - { - return genType(1.273239544735162686151070106980114898); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_over_root_pi() - { - return genType(1.12837916709551257389615890312154517); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType one_over_root_two() - { - return genType(0.707106781186547524400844362104849039); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_half_pi() - { - return genType(1.253314137315500251); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two_pi() - { - return genType(2.506628274631000502); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_ln_four() - { - return genType(1.17741002251547469); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType e() - { - return genType(2.71828182845904523536); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType euler() - { - return genType(0.577215664901532860606); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_two() - { - return genType(1.41421356237309504880168872420969808); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_three() - { - return genType(1.73205080756887729352744634150587236); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType root_five() - { - return genType(2.23606797749978969640917366873127623); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_two() - { - return genType(0.693147180559945309417232121458176568); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ten() - { - return genType(2.30258509299404568401799145468436421); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType ln_ln_two() - { - return genType(-0.3665129205816643); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType third() - { - return genType(0.3333333333333333333333333333333333333333); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType two_thirds() - { - return genType(0.666666666666666666666666666666666666667); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR genType golden_ratio() - { - return genType(1.61803398874989484820458683436563811); - } - -} //namespace glm diff --git a/src/qged/display/glm/glm/gtc/epsilon.hpp b/src/qged/display/glm/glm/gtc/epsilon.hpp deleted file mode 100644 index 1d38294199c..00000000000 --- a/src/qged/display/glm/glm/gtc/epsilon.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_epsilon -/// @file glm/gtc/epsilon.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_epsilon GLM_GTC_epsilon -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Comparison functions for a user defined epsilon values. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_epsilon extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_epsilon - /// @{ - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL vec epsilonEqual(vec const& x, vec const& y, T const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL bool epsilonEqual(genType const& x, genType const& y, genType const& epsilon); - - /// Returns the component-wise comparison of |x - y| < epsilon. - /// True if this expression is not satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon); - - /// Returns the component-wise comparison of |x - y| >= epsilon. - /// True if this expression is not satisfied. - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL bool epsilonNotEqual(genType const& x, genType const& y, genType const& epsilon); - - /// @} -}//namespace glm - -#include "epsilon.inl" diff --git a/src/qged/display/glm/glm/gtc/epsilon.inl b/src/qged/display/glm/glm/gtc/epsilon.inl deleted file mode 100644 index 508b9f8966f..00000000000 --- a/src/qged/display/glm/glm/gtc/epsilon.inl +++ /dev/null @@ -1,80 +0,0 @@ -/// @ref gtc_epsilon - -// Dependency: -#include "../vector_relational.hpp" -#include "../common.hpp" - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER bool epsilonEqual - ( - float const& x, - float const& y, - float const& epsilon - ) - { - return abs(x - y) < epsilon; - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonEqual - ( - double const& x, - double const& y, - double const& epsilon - ) - { - return abs(x - y) < epsilon; - } - - template - GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, T const& epsilon) - { - return lessThan(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec epsilonEqual(vec const& x, vec const& y, vec const& epsilon) - { - return lessThan(abs(x - y), vec(epsilon)); - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonNotEqual(float const& x, float const& y, float const& epsilon) - { - return abs(x - y) >= epsilon; - } - - template<> - GLM_FUNC_QUALIFIER bool epsilonNotEqual(double const& x, double const& y, double const& epsilon) - { - return abs(x - y) >= epsilon; - } - - template - GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, T const& epsilon) - { - return greaterThanEqual(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec epsilonNotEqual(vec const& x, vec const& y, vec const& epsilon) - { - return greaterThanEqual(abs(x - y), vec(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonEqual(qua const& x, qua const& y, T const& epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return lessThan(abs(v), vec<4, T, Q>(epsilon)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> epsilonNotEqual(qua const& x, qua const& y, T const& epsilon) - { - vec<4, T, Q> v(x.x - y.x, x.y - y.y, x.z - y.z, x.w - y.w); - return greaterThanEqual(abs(v), vec<4, T, Q>(epsilon)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/integer.hpp b/src/qged/display/glm/glm/gtc/integer.hpp deleted file mode 100644 index 9a95870cd8c..00000000000 --- a/src/qged/display/glm/glm/gtc/integer.hpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_integer -/// @file glm/gtc/integer.hpp -/// -/// @see core (dependence) -/// @see gtc_integer (dependence) -/// -/// @defgroup gtc_integer GLM_GTC_integer -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../common.hpp" -#include "../integer.hpp" -#include "../exponential.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_integer - /// @{ - - /// Returns the log2 of x for integer values. Usefull to compute mipmap count from the texture size. - /// @see gtc_integer - template - GLM_FUNC_DECL genIUType log2(genIUType x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam T floating point scalar types. - /// - /// @see GLSL round man page - /// @see gtc_integer - template - GLM_FUNC_DECL vec iround(vec const& x); - - /// Returns a value equal to the nearest integer to x. - /// The fraction 0.5 will round in a direction chosen by the - /// implementation, presumably the direction that is fastest. - /// - /// @param x The values of the argument must be greater or equal to zero. - /// @tparam T floating point scalar types. - /// - /// @see GLSL round man page - /// @see gtc_integer - template - GLM_FUNC_DECL vec uround(vec const& x); - - /// @} -} //namespace glm - -#include "integer.inl" diff --git a/src/qged/display/glm/glm/gtc/integer.inl b/src/qged/display/glm/glm/gtc/integer.inl deleted file mode 100644 index f0a8b4f2578..00000000000 --- a/src/qged/display/glm/glm/gtc/integer.inl +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtc_integer - -namespace glm{ -namespace detail -{ - template - struct compute_log2 - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - //Equivalent to return findMSB(vec); but save one function call in ASM with VC - //return findMSB(vec); - return vec(detail::compute_findMSB_vec::call(v)); - } - }; - -# if GLM_HAS_BITSCAN_WINDOWS - template - struct compute_log2<4, int, Q, false, Aligned> - { - GLM_FUNC_QUALIFIER static vec<4, int, Q> call(vec<4, int, Q> const& v) - { - vec<4, int, Q> Result; - _BitScanReverse(reinterpret_cast(&Result.x), v.x); - _BitScanReverse(reinterpret_cast(&Result.y), v.y); - _BitScanReverse(reinterpret_cast(&Result.z), v.z); - _BitScanReverse(reinterpret_cast(&Result.w), v.w); - return Result; - } - }; -# endif//GLM_HAS_BITSCAN_WINDOWS -}//namespace detail - template - GLM_FUNC_QUALIFIER int iround(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); - assert(static_cast(0.0) <= x); - - return static_cast(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER vec iround(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'iround' only accept floating-point inputs"); - assert(all(lessThanEqual(vec(0), x))); - - return vec(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER uint uround(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); - assert(static_cast(0.0) <= x); - - return static_cast(x + static_cast(0.5)); - } - - template - GLM_FUNC_QUALIFIER vec uround(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'uround' only accept floating-point inputs"); - assert(all(lessThanEqual(vec(0), x))); - - return vec(x + static_cast(0.5)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/matrix_access.hpp b/src/qged/display/glm/glm/gtc/matrix_access.hpp deleted file mode 100644 index 79209a9160a..00000000000 --- a/src/qged/display/glm/glm/gtc/matrix_access.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_matrix_access -/// @file glm/gtc/matrix_access.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_access GLM_GTC_matrix_access -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines functions to access rows or columns of a matrix easily. - -#pragma once - -// Dependency: -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_access extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_access - /// @{ - - /// Get a specific row of a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL typename genType::row_type row( - genType const& m, - length_t index); - - /// Set a specific row to a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL genType row( - genType const& m, - length_t index, - typename genType::row_type const& x); - - /// Get a specific column of a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL typename genType::col_type column( - genType const& m, - length_t index); - - /// Set a specific column to a matrix. - /// @see gtc_matrix_access - template - GLM_FUNC_DECL genType column( - genType const& m, - length_t index, - typename genType::col_type const& x); - - /// @} -}//namespace glm - -#include "matrix_access.inl" diff --git a/src/qged/display/glm/glm/gtc/matrix_access.inl b/src/qged/display/glm/glm/gtc/matrix_access.inl deleted file mode 100644 index 09fcc10d3d7..00000000000 --- a/src/qged/display/glm/glm/gtc/matrix_access.inl +++ /dev/null @@ -1,62 +0,0 @@ -/// @ref gtc_matrix_access - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType row - ( - genType const& m, - length_t index, - typename genType::row_type const& x - ) - { - assert(index >= 0 && index < m[0].length()); - - genType Result = m; - for(length_t i = 0; i < m.length(); ++i) - Result[i][index] = x[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER typename genType::row_type row - ( - genType const& m, - length_t index - ) - { - assert(index >= 0 && index < m[0].length()); - - typename genType::row_type Result(0); - for(length_t i = 0; i < m.length(); ++i) - Result[i] = m[i][index]; - return Result; - } - - template - GLM_FUNC_QUALIFIER genType column - ( - genType const& m, - length_t index, - typename genType::col_type const& x - ) - { - assert(index >= 0 && index < m.length()); - - genType Result = m; - Result[index] = x; - return Result; - } - - template - GLM_FUNC_QUALIFIER typename genType::col_type column - ( - genType const& m, - length_t index - ) - { - assert(index >= 0 && index < m.length()); - - return m[index]; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/matrix_integer.hpp b/src/qged/display/glm/glm/gtc/matrix_integer.hpp deleted file mode 100644 index 386f097302b..00000000000 --- a/src/qged/display/glm/glm/gtc/matrix_integer.hpp +++ /dev/null @@ -1,464 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_matrix_integer -/// @file glm/gtc/matrix_integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_integer GLM_GTC_matrix_integer -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines a number of matrices with integer types. - -#pragma once - -// Dependency: -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_integer extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_integer - /// @{ - - /// High-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, highp> highp_imat2; - - /// High-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, highp> highp_imat3; - - /// High-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, highp> highp_imat4; - - /// High-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, highp> highp_imat2x2; - - /// High-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, highp> highp_imat2x3; - - /// High-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, highp> highp_imat2x4; - - /// High-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, highp> highp_imat3x2; - - /// High-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, highp> highp_imat3x3; - - /// High-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, highp> highp_imat3x4; - - /// High-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, highp> highp_imat4x2; - - /// High-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, highp> highp_imat4x3; - - /// High-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, highp> highp_imat4x4; - - - /// Medium-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, mediump> mediump_imat2; - - /// Medium-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, mediump> mediump_imat3; - - /// Medium-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, mediump> mediump_imat4; - - - /// Medium-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, mediump> mediump_imat2x2; - - /// Medium-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, mediump> mediump_imat2x3; - - /// Medium-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, mediump> mediump_imat2x4; - - /// Medium-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, mediump> mediump_imat3x2; - - /// Medium-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, mediump> mediump_imat3x3; - - /// Medium-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, mediump> mediump_imat3x4; - - /// Medium-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, mediump> mediump_imat4x2; - - /// Medium-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, mediump> mediump_imat4x3; - - /// Medium-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, mediump> mediump_imat4x4; - - - /// Low-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, lowp> lowp_imat2; - - /// Low-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, lowp> lowp_imat3; - - /// Low-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, lowp> lowp_imat4; - - - /// Low-qualifier signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, lowp> lowp_imat2x2; - - /// Low-qualifier signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, lowp> lowp_imat2x3; - - /// Low-qualifier signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, lowp> lowp_imat2x4; - - /// Low-qualifier signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, lowp> lowp_imat3x2; - - /// Low-qualifier signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, lowp> lowp_imat3x3; - - /// Low-qualifier signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, lowp> lowp_imat3x4; - - /// Low-qualifier signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, lowp> lowp_imat4x2; - - /// Low-qualifier signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, lowp> lowp_imat4x3; - - /// Low-qualifier signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, lowp> lowp_imat4x4; - - - /// High-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, highp> highp_umat2; - - /// High-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, highp> highp_umat3; - - /// High-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, highp> highp_umat4; - - /// High-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, highp> highp_umat2x2; - - /// High-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, highp> highp_umat2x3; - - /// High-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, highp> highp_umat2x4; - - /// High-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, highp> highp_umat3x2; - - /// High-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, highp> highp_umat3x3; - - /// High-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, highp> highp_umat3x4; - - /// High-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, highp> highp_umat4x2; - - /// High-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, highp> highp_umat4x3; - - /// High-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, highp> highp_umat4x4; - - - /// Medium-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, mediump> mediump_umat2; - - /// Medium-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, mediump> mediump_umat3; - - /// Medium-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, mediump> mediump_umat4; - - - /// Medium-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, mediump> mediump_umat2x2; - - /// Medium-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, mediump> mediump_umat2x3; - - /// Medium-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, mediump> mediump_umat2x4; - - /// Medium-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, mediump> mediump_umat3x2; - - /// Medium-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, mediump> mediump_umat3x3; - - /// Medium-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, mediump> mediump_umat3x4; - - /// Medium-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, mediump> mediump_umat4x2; - - /// Medium-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, mediump> mediump_umat4x3; - - /// Medium-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, mediump> mediump_umat4x4; - - - /// Low-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, lowp> lowp_umat2; - - /// Low-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, lowp> lowp_umat3; - - /// Low-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, lowp> lowp_umat4; - - - /// Low-qualifier unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, lowp> lowp_umat2x2; - - /// Low-qualifier unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, lowp> lowp_umat2x3; - - /// Low-qualifier unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, lowp> lowp_umat2x4; - - /// Low-qualifier unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, lowp> lowp_umat3x2; - - /// Low-qualifier unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, lowp> lowp_umat3x3; - - /// Low-qualifier unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, lowp> lowp_umat3x4; - - /// Low-qualifier unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, lowp> lowp_umat4x2; - - /// Low-qualifier unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, lowp> lowp_umat4x3; - - /// Low-qualifier unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, lowp> lowp_umat4x4; - - - - /// Signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, defaultp> imat2; - - /// Signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, defaultp> imat3; - - /// Signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, defaultp> imat4; - - /// Signed integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, int, defaultp> imat2x2; - - /// Signed integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, int, defaultp> imat2x3; - - /// Signed integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, int, defaultp> imat2x4; - - /// Signed integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, int, defaultp> imat3x2; - - /// Signed integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, int, defaultp> imat3x3; - - /// Signed integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, int, defaultp> imat3x4; - - /// Signed integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, int, defaultp> imat4x2; - - /// Signed integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, int, defaultp> imat4x3; - - /// Signed integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, int, defaultp> imat4x4; - - - - /// Unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, defaultp> umat2; - - /// Unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, defaultp> umat3; - - /// Unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, defaultp> umat4; - - /// Unsigned integer 2x2 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 2, uint, defaultp> umat2x2; - - /// Unsigned integer 2x3 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 3, uint, defaultp> umat2x3; - - /// Unsigned integer 2x4 matrix. - /// @see gtc_matrix_integer - typedef mat<2, 4, uint, defaultp> umat2x4; - - /// Unsigned integer 3x2 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 2, uint, defaultp> umat3x2; - - /// Unsigned integer 3x3 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 3, uint, defaultp> umat3x3; - - /// Unsigned integer 3x4 matrix. - /// @see gtc_matrix_integer - typedef mat<3, 4, uint, defaultp> umat3x4; - - /// Unsigned integer 4x2 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 2, uint, defaultp> umat4x2; - - /// Unsigned integer 4x3 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 3, uint, defaultp> umat4x3; - - /// Unsigned integer 4x4 matrix. - /// @see gtc_matrix_integer - typedef mat<4, 4, uint, defaultp> umat4x4; - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/matrix_inverse.hpp b/src/qged/display/glm/glm/gtc/matrix_inverse.hpp deleted file mode 100644 index 4b22c576554..00000000000 --- a/src/qged/display/glm/glm/gtc/matrix_inverse.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_matrix_inverse -/// @file glm/gtc/matrix_inverse.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_matrix_inverse GLM_GTC_matrix_inverse -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines additional matrix inverting functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../matrix.hpp" -#include "../mat2x2.hpp" -#include "../mat3x3.hpp" -#include "../mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_inverse extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_matrix_inverse - /// @{ - - /// Fast matrix inverse for affine matrix. - /// - /// @param m Input matrix to invert. - /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. - /// @see gtc_matrix_inverse - template - GLM_FUNC_DECL genType affineInverse(genType const& m); - - /// Compute the inverse transpose of a matrix. - /// - /// @param m Input matrix to invert transpose. - /// @tparam genType Squared floating-point matrix: half, float or double. Inverse of matrix based of half-qualifier floating point value is highly innacurate. - /// @see gtc_matrix_inverse - template - GLM_FUNC_DECL genType inverseTranspose(genType const& m); - - /// @} -}//namespace glm - -#include "matrix_inverse.inl" diff --git a/src/qged/display/glm/glm/gtc/matrix_inverse.inl b/src/qged/display/glm/glm/gtc/matrix_inverse.inl deleted file mode 100644 index c004b9e1467..00000000000 --- a/src/qged/display/glm/glm/gtc/matrix_inverse.inl +++ /dev/null @@ -1,118 +0,0 @@ -/// @ref gtc_matrix_inverse - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> affineInverse(mat<3, 3, T, Q> const& m) - { - mat<2, 2, T, Q> const Inv(inverse(mat<2, 2, T, Q>(m))); - - return mat<3, 3, T, Q>( - vec<3, T, Q>(Inv[0], static_cast(0)), - vec<3, T, Q>(Inv[1], static_cast(0)), - vec<3, T, Q>(-Inv * vec<2, T, Q>(m[2]), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> affineInverse(mat<4, 4, T, Q> const& m) - { - mat<3, 3, T, Q> const Inv(inverse(mat<3, 3, T, Q>(m))); - - return mat<4, 4, T, Q>( - vec<4, T, Q>(Inv[0], static_cast(0)), - vec<4, T, Q>(Inv[1], static_cast(0)), - vec<4, T, Q>(Inv[2], static_cast(0)), - vec<4, T, Q>(-Inv * vec<3, T, Q>(m[3]), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> inverseTranspose(mat<2, 2, T, Q> const& m) - { - T Determinant = m[0][0] * m[1][1] - m[1][0] * m[0][1]; - - mat<2, 2, T, Q> Inverse( - + m[1][1] / Determinant, - - m[0][1] / Determinant, - - m[1][0] / Determinant, - + m[0][0] / Determinant); - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> inverseTranspose(mat<3, 3, T, Q> const& m) - { - T Determinant = - + m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]) - - m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]) - + m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); - - mat<3, 3, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * m[2][2] - m[2][1] * m[1][2]); - Inverse[0][1] = - (m[1][0] * m[2][2] - m[2][0] * m[1][2]); - Inverse[0][2] = + (m[1][0] * m[2][1] - m[2][0] * m[1][1]); - Inverse[1][0] = - (m[0][1] * m[2][2] - m[2][1] * m[0][2]); - Inverse[1][1] = + (m[0][0] * m[2][2] - m[2][0] * m[0][2]); - Inverse[1][2] = - (m[0][0] * m[2][1] - m[2][0] * m[0][1]); - Inverse[2][0] = + (m[0][1] * m[1][2] - m[1][1] * m[0][2]); - Inverse[2][1] = - (m[0][0] * m[1][2] - m[1][0] * m[0][2]); - Inverse[2][2] = + (m[0][0] * m[1][1] - m[1][0] * m[0][1]); - Inverse /= Determinant; - - return Inverse; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> inverseTranspose(mat<4, 4, T, Q> const& m) - { - T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - T SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - T SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - T SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - T SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - T SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - T SubFactor11 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - T SubFactor12 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - T SubFactor13 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - T SubFactor14 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - T SubFactor15 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - T SubFactor16 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - T SubFactor17 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - mat<4, 4, T, Q> Inverse; - Inverse[0][0] = + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02); - Inverse[0][1] = - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04); - Inverse[0][2] = + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05); - Inverse[0][3] = - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05); - - Inverse[1][0] = - (m[0][1] * SubFactor00 - m[0][2] * SubFactor01 + m[0][3] * SubFactor02); - Inverse[1][1] = + (m[0][0] * SubFactor00 - m[0][2] * SubFactor03 + m[0][3] * SubFactor04); - Inverse[1][2] = - (m[0][0] * SubFactor01 - m[0][1] * SubFactor03 + m[0][3] * SubFactor05); - Inverse[1][3] = + (m[0][0] * SubFactor02 - m[0][1] * SubFactor04 + m[0][2] * SubFactor05); - - Inverse[2][0] = + (m[0][1] * SubFactor06 - m[0][2] * SubFactor07 + m[0][3] * SubFactor08); - Inverse[2][1] = - (m[0][0] * SubFactor06 - m[0][2] * SubFactor09 + m[0][3] * SubFactor10); - Inverse[2][2] = + (m[0][0] * SubFactor07 - m[0][1] * SubFactor09 + m[0][3] * SubFactor11); - Inverse[2][3] = - (m[0][0] * SubFactor08 - m[0][1] * SubFactor10 + m[0][2] * SubFactor11); - - Inverse[3][0] = - (m[0][1] * SubFactor12 - m[0][2] * SubFactor13 + m[0][3] * SubFactor14); - Inverse[3][1] = + (m[0][0] * SubFactor12 - m[0][2] * SubFactor15 + m[0][3] * SubFactor16); - Inverse[3][2] = - (m[0][0] * SubFactor13 - m[0][1] * SubFactor15 + m[0][3] * SubFactor17); - Inverse[3][3] = + (m[0][0] * SubFactor14 - m[0][1] * SubFactor16 + m[0][2] * SubFactor17); - - T Determinant = - + m[0][0] * Inverse[0][0] - + m[0][1] * Inverse[0][1] - + m[0][2] * Inverse[0][2] - + m[0][3] * Inverse[0][3]; - - Inverse /= Determinant; - - return Inverse; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/matrix_transform.hpp b/src/qged/display/glm/glm/gtc/matrix_transform.hpp deleted file mode 100644 index b696cee4a86..00000000000 --- a/src/qged/display/glm/glm/gtc/matrix_transform.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_matrix_transform -/// @file glm/gtc/matrix_transform.hpp -/// -/// @see core (dependence) -/// @see gtx_transform -/// @see gtx_transform2 -/// -/// @defgroup gtc_matrix_transform GLM_GTC_matrix_transform -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines functions that generate common transformation matrices. -/// -/// The matrices generated by this extension use standard OpenGL fixed-function -/// conventions. For example, the lookAt function generates a transform from world -/// space into the specific eye space that the projective matrix functions -/// (perspective, ortho, etc) are designed to expect. The OpenGL compatibility -/// specifications defines the particular layout of this eye space. - -#pragma once - -// Dependencies -#include "../mat4x4.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../ext/matrix_projection.hpp" -#include "../ext/matrix_clip_space.hpp" -#include "../ext/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_matrix_transform extension included") -#endif - -#include "matrix_transform.inl" diff --git a/src/qged/display/glm/glm/gtc/matrix_transform.inl b/src/qged/display/glm/glm/gtc/matrix_transform.inl deleted file mode 100644 index 15b46bc9db6..00000000000 --- a/src/qged/display/glm/glm/gtc/matrix_transform.inl +++ /dev/null @@ -1,3 +0,0 @@ -#include "../geometric.hpp" -#include "../trigonometric.hpp" -#include "../matrix.hpp" diff --git a/src/qged/display/glm/glm/gtc/noise.hpp b/src/qged/display/glm/glm/gtc/noise.hpp deleted file mode 100644 index 3578a2ce2ea..00000000000 --- a/src/qged/display/glm/glm/gtc/noise.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_noise -/// @file glm/gtc/noise.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_noise GLM_GTC_noise -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines 2D, 3D and 4D procedural noise functions -/// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": -/// https://github.com/ashima/webgl-noise -/// Following Stefan Gustavson's paper "Simplex noise demystified": -/// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_noise.hpp" -#include "../geometric.hpp" -#include "../common.hpp" -#include "../vector_relational.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_noise extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_noise - /// @{ - - /// Classic perlin noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T perlin( - vec const& p); - - /// Periodic perlin noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T perlin( - vec const& p, - vec const& rep); - - /// Simplex noise. - /// @see gtc_noise - template - GLM_FUNC_DECL T simplex( - vec const& p); - - /// @} -}//namespace glm - -#include "noise.inl" diff --git a/src/qged/display/glm/glm/gtc/noise.inl b/src/qged/display/glm/glm/gtc/noise.inl deleted file mode 100644 index 30d0b274d33..00000000000 --- a/src/qged/display/glm/glm/gtc/noise.inl +++ /dev/null @@ -1,807 +0,0 @@ -/// @ref gtc_noise -/// -// Based on the work of Stefan Gustavson and Ashima Arts on "webgl-noise": -// https://github.com/ashima/webgl-noise -// Following Stefan Gustavson's paper "Simplex noise demystified": -// http://www.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf - -namespace glm{ -namespace gtc -{ - template - GLM_FUNC_QUALIFIER vec<4, T, Q> grad4(T const& j, vec<4, T, Q> const& ip) - { - vec<3, T, Q> pXYZ = floor(fract(vec<3, T, Q>(j) * vec<3, T, Q>(ip)) * T(7)) * ip[2] - T(1); - T pW = static_cast(1.5) - dot(abs(pXYZ), vec<3, T, Q>(1)); - vec<4, T, Q> s = vec<4, T, Q>(lessThan(vec<4, T, Q>(pXYZ, pW), vec<4, T, Q>(0.0))); - pXYZ = pXYZ + (vec<3, T, Q>(s) * T(2) - T(1)) * s.w; - return vec<4, T, Q>(pXYZ, pW); - } -}//namespace gtc - - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position) - { - vec<4, T, Q> Pi = glm::floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - vec<4, T, Q> Pf = glm::fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation - vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); - vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); - vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); - vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); - - vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); - - vec<4, T, Q> gx = static_cast(2) * glm::fract(i / T(41)) - T(1); - vec<4, T, Q> gy = glm::abs(gx) - T(0.5); - vec<4, T, Q> tx = glm::floor(gx + T(0.5)); - gx = gx - tx; - - vec<2, T, Q> g00(gx.x, gy.x); - vec<2, T, Q> g10(gx.y, gy.y); - vec<2, T, Q> g01(gx.z, gy.z); - vec<2, T, Q> g11(gx.w, gy.w); - - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); - T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); - T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); - T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); - - vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); - vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); - T n_xy = mix(n_x.x, n_x.y, fade_xy.y); - return T(2.3) * n_xy; - } - - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position) - { - vec<3, T, Q> Pi0 = floor(Position); // Integer part for indexing - vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = detail::mod289(Pi0); - Pi1 = detail::mod289(Pi1); - vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(vec<2, T, Q>(Pi0.y), vec<2, T, Q>(Pi1.y)); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 * T(1.0 / 7.0); - vec<4, T, Q> gy0 = fract(floor(gx0) * T(1.0 / 7.0)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); - gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); - gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 * T(1.0 / 7.0); - vec<4, T, Q> gy1 = fract(floor(gx1) * T(1.0 / 7.0)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = detail::fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - /* - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& P) - { - vec<3, T, Q> Pi0 = floor(P); // Integer part for indexing - vec<3, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = mod(Pi0, T(289)); - Pi1 = mod(Pi1, T(289)); - vec<3, T, Q> Pf0 = fract(P); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = permute(permute(ix) + iy); - vec<4, T, Q> ixy0 = permute(ixy + iz0); - vec<4, T, Q> ixy1 = permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 / T(7); - vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0.0)); - gx0 -= sz0 * (step(0.0, gx0) - T(0.5)); - gy0 -= sz0 * (step(0.0, gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 / T(7); - vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(0.0)); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix( - vec<2, T, Q>(n_z.x, n_z.y), - vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - */ - // Classic Perlin noise - template - GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position) - { - vec<4, T, Q> Pi0 = floor(Position); // Integer part for indexing - vec<4, T, Q> Pi1 = Pi0 + T(1); // Integer part + 1 - Pi0 = mod(Pi0, vec<4, T, Q>(289)); - Pi1 = mod(Pi1, vec<4, T, Q>(289)); - vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - vec<4, T, Q> iw0(Pi0.w); - vec<4, T, Q> iw1(Pi1.w); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); - vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); - vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); - vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); - - vec<4, T, Q> gx00 = ixy00 / T(7); - vec<4, T, Q> gy00 = floor(gx00) / T(7); - vec<4, T, Q> gz00 = floor(gy00) / T(6); - gx00 = fract(gx00) - T(0.5); - gy00 = fract(gy00) - T(0.5); - gz00 = fract(gz00) - T(0.5); - vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0.0)); - gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); - gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); - - vec<4, T, Q> gx01 = ixy01 / T(7); - vec<4, T, Q> gy01 = floor(gx01) / T(7); - vec<4, T, Q> gz01 = floor(gy01) / T(6); - gx01 = fract(gx01) - T(0.5); - gy01 = fract(gy01) - T(0.5); - gz01 = fract(gz01) - T(0.5); - vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); - gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); - gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); - - vec<4, T, Q> gx10 = ixy10 / T(7); - vec<4, T, Q> gy10 = floor(gx10) / T(7); - vec<4, T, Q> gz10 = floor(gy10) / T(6); - gx10 = fract(gx10) - T(0.5); - gy10 = fract(gy10) - T(0.5); - gz10 = fract(gz10) - T(0.5); - vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0)); - gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); - gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); - - vec<4, T, Q> gx11 = ixy11 / T(7); - vec<4, T, Q> gy11 = floor(gx11) / T(7); - vec<4, T, Q> gz11 = floor(gy11) / T(6); - gx11 = fract(gx11) - T(0.5); - gy11 = fract(gy11) - T(0.5); - gz11 = fract(gz11) - T(0.5); - vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(0.0)); - gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); - gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); - - vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); - vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); - vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); - vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); - vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); - vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); - vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); - vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); - vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); - vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); - vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); - vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); - vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); - vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); - vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); - vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); - - vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - T n0000 = dot(g0000, Pf0); - T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); - T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); - T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); - T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); - T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); - T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); - T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); - T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); - T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); - T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); - T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); - T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); - T n1111 = dot(g1111, Pf1); - - vec<4, T, Q> fade_xyzw = detail::fade(Pf0); - vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); - vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); - vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); - vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); - T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); - return T(2.2) * n_xyzw; - } - - // Classic Perlin noise, periodic variant - template - GLM_FUNC_QUALIFIER T perlin(vec<2, T, Q> const& Position, vec<2, T, Q> const& rep) - { - vec<4, T, Q> Pi = floor(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) + vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - vec<4, T, Q> Pf = fract(vec<4, T, Q>(Position.x, Position.y, Position.x, Position.y)) - vec<4, T, Q>(0.0, 0.0, 1.0, 1.0); - Pi = mod(Pi, vec<4, T, Q>(rep.x, rep.y, rep.x, rep.y)); // To create noise with explicit period - Pi = mod(Pi, vec<4, T, Q>(289)); // To avoid truncation effects in permutation - vec<4, T, Q> ix(Pi.x, Pi.z, Pi.x, Pi.z); - vec<4, T, Q> iy(Pi.y, Pi.y, Pi.w, Pi.w); - vec<4, T, Q> fx(Pf.x, Pf.z, Pf.x, Pf.z); - vec<4, T, Q> fy(Pf.y, Pf.y, Pf.w, Pf.w); - - vec<4, T, Q> i = detail::permute(detail::permute(ix) + iy); - - vec<4, T, Q> gx = static_cast(2) * fract(i / T(41)) - T(1); - vec<4, T, Q> gy = abs(gx) - T(0.5); - vec<4, T, Q> tx = floor(gx + T(0.5)); - gx = gx - tx; - - vec<2, T, Q> g00(gx.x, gy.x); - vec<2, T, Q> g10(gx.y, gy.y); - vec<2, T, Q> g01(gx.z, gy.z); - vec<2, T, Q> g11(gx.w, gy.w); - - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(g00, g00), dot(g01, g01), dot(g10, g10), dot(g11, g11))); - g00 *= norm.x; - g01 *= norm.y; - g10 *= norm.z; - g11 *= norm.w; - - T n00 = dot(g00, vec<2, T, Q>(fx.x, fy.x)); - T n10 = dot(g10, vec<2, T, Q>(fx.y, fy.y)); - T n01 = dot(g01, vec<2, T, Q>(fx.z, fy.z)); - T n11 = dot(g11, vec<2, T, Q>(fx.w, fy.w)); - - vec<2, T, Q> fade_xy = detail::fade(vec<2, T, Q>(Pf.x, Pf.y)); - vec<2, T, Q> n_x = mix(vec<2, T, Q>(n00, n01), vec<2, T, Q>(n10, n11), fade_xy.x); - T n_xy = mix(n_x.x, n_x.y, fade_xy.y); - return T(2.3) * n_xy; - } - - // Classic Perlin noise, periodic variant - template - GLM_FUNC_QUALIFIER T perlin(vec<3, T, Q> const& Position, vec<3, T, Q> const& rep) - { - vec<3, T, Q> Pi0 = mod(floor(Position), rep); // Integer part, modulo period - vec<3, T, Q> Pi1 = mod(Pi0 + vec<3, T, Q>(T(1)), rep); // Integer part + 1, mod period - Pi0 = mod(Pi0, vec<3, T, Q>(289)); - Pi1 = mod(Pi1, vec<3, T, Q>(289)); - vec<3, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<3, T, Q> Pf1 = Pf0 - vec<3, T, Q>(T(1)); // Fractional part - 1.0 - vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - - vec<4, T, Q> gx0 = ixy0 / T(7); - vec<4, T, Q> gy0 = fract(floor(gx0) / T(7)) - T(0.5); - gx0 = fract(gx0); - vec<4, T, Q> gz0 = vec<4, T, Q>(0.5) - abs(gx0) - abs(gy0); - vec<4, T, Q> sz0 = step(gz0, vec<4, T, Q>(0)); - gx0 -= sz0 * (step(T(0), gx0) - T(0.5)); - gy0 -= sz0 * (step(T(0), gy0) - T(0.5)); - - vec<4, T, Q> gx1 = ixy1 / T(7); - vec<4, T, Q> gy1 = fract(floor(gx1) / T(7)) - T(0.5); - gx1 = fract(gx1); - vec<4, T, Q> gz1 = vec<4, T, Q>(0.5) - abs(gx1) - abs(gy1); - vec<4, T, Q> sz1 = step(gz1, vec<4, T, Q>(T(0))); - gx1 -= sz1 * (step(T(0), gx1) - T(0.5)); - gy1 -= sz1 * (step(T(0), gy1) - T(0.5)); - - vec<3, T, Q> g000 = vec<3, T, Q>(gx0.x, gy0.x, gz0.x); - vec<3, T, Q> g100 = vec<3, T, Q>(gx0.y, gy0.y, gz0.y); - vec<3, T, Q> g010 = vec<3, T, Q>(gx0.z, gy0.z, gz0.z); - vec<3, T, Q> g110 = vec<3, T, Q>(gx0.w, gy0.w, gz0.w); - vec<3, T, Q> g001 = vec<3, T, Q>(gx1.x, gy1.x, gz1.x); - vec<3, T, Q> g101 = vec<3, T, Q>(gx1.y, gy1.y, gz1.y); - vec<3, T, Q> g011 = vec<3, T, Q>(gx1.z, gy1.z, gz1.z); - vec<3, T, Q> g111 = vec<3, T, Q>(gx1.w, gy1.w, gz1.w); - - vec<4, T, Q> norm0 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g000, g000), dot(g010, g010), dot(g100, g100), dot(g110, g110))); - g000 *= norm0.x; - g010 *= norm0.y; - g100 *= norm0.z; - g110 *= norm0.w; - vec<4, T, Q> norm1 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g001, g001), dot(g011, g011), dot(g101, g101), dot(g111, g111))); - g001 *= norm1.x; - g011 *= norm1.y; - g101 *= norm1.z; - g111 *= norm1.w; - - T n000 = dot(g000, Pf0); - T n100 = dot(g100, vec<3, T, Q>(Pf1.x, Pf0.y, Pf0.z)); - T n010 = dot(g010, vec<3, T, Q>(Pf0.x, Pf1.y, Pf0.z)); - T n110 = dot(g110, vec<3, T, Q>(Pf1.x, Pf1.y, Pf0.z)); - T n001 = dot(g001, vec<3, T, Q>(Pf0.x, Pf0.y, Pf1.z)); - T n101 = dot(g101, vec<3, T, Q>(Pf1.x, Pf0.y, Pf1.z)); - T n011 = dot(g011, vec<3, T, Q>(Pf0.x, Pf1.y, Pf1.z)); - T n111 = dot(g111, Pf1); - - vec<3, T, Q> fade_xyz = detail::fade(Pf0); - vec<4, T, Q> n_z = mix(vec<4, T, Q>(n000, n100, n010, n110), vec<4, T, Q>(n001, n101, n011, n111), fade_xyz.z); - vec<2, T, Q> n_yz = mix(vec<2, T, Q>(n_z.x, n_z.y), vec<2, T, Q>(n_z.z, n_z.w), fade_xyz.y); - T n_xyz = mix(n_yz.x, n_yz.y, fade_xyz.x); - return T(2.2) * n_xyz; - } - - // Classic Perlin noise, periodic version - template - GLM_FUNC_QUALIFIER T perlin(vec<4, T, Q> const& Position, vec<4, T, Q> const& rep) - { - vec<4, T, Q> Pi0 = mod(floor(Position), rep); // Integer part modulo rep - vec<4, T, Q> Pi1 = mod(Pi0 + T(1), rep); // Integer part + 1 mod rep - vec<4, T, Q> Pf0 = fract(Position); // Fractional part for interpolation - vec<4, T, Q> Pf1 = Pf0 - T(1); // Fractional part - 1.0 - vec<4, T, Q> ix = vec<4, T, Q>(Pi0.x, Pi1.x, Pi0.x, Pi1.x); - vec<4, T, Q> iy = vec<4, T, Q>(Pi0.y, Pi0.y, Pi1.y, Pi1.y); - vec<4, T, Q> iz0(Pi0.z); - vec<4, T, Q> iz1(Pi1.z); - vec<4, T, Q> iw0(Pi0.w); - vec<4, T, Q> iw1(Pi1.w); - - vec<4, T, Q> ixy = detail::permute(detail::permute(ix) + iy); - vec<4, T, Q> ixy0 = detail::permute(ixy + iz0); - vec<4, T, Q> ixy1 = detail::permute(ixy + iz1); - vec<4, T, Q> ixy00 = detail::permute(ixy0 + iw0); - vec<4, T, Q> ixy01 = detail::permute(ixy0 + iw1); - vec<4, T, Q> ixy10 = detail::permute(ixy1 + iw0); - vec<4, T, Q> ixy11 = detail::permute(ixy1 + iw1); - - vec<4, T, Q> gx00 = ixy00 / T(7); - vec<4, T, Q> gy00 = floor(gx00) / T(7); - vec<4, T, Q> gz00 = floor(gy00) / T(6); - gx00 = fract(gx00) - T(0.5); - gy00 = fract(gy00) - T(0.5); - gz00 = fract(gz00) - T(0.5); - vec<4, T, Q> gw00 = vec<4, T, Q>(0.75) - abs(gx00) - abs(gy00) - abs(gz00); - vec<4, T, Q> sw00 = step(gw00, vec<4, T, Q>(0)); - gx00 -= sw00 * (step(T(0), gx00) - T(0.5)); - gy00 -= sw00 * (step(T(0), gy00) - T(0.5)); - - vec<4, T, Q> gx01 = ixy01 / T(7); - vec<4, T, Q> gy01 = floor(gx01) / T(7); - vec<4, T, Q> gz01 = floor(gy01) / T(6); - gx01 = fract(gx01) - T(0.5); - gy01 = fract(gy01) - T(0.5); - gz01 = fract(gz01) - T(0.5); - vec<4, T, Q> gw01 = vec<4, T, Q>(0.75) - abs(gx01) - abs(gy01) - abs(gz01); - vec<4, T, Q> sw01 = step(gw01, vec<4, T, Q>(0.0)); - gx01 -= sw01 * (step(T(0), gx01) - T(0.5)); - gy01 -= sw01 * (step(T(0), gy01) - T(0.5)); - - vec<4, T, Q> gx10 = ixy10 / T(7); - vec<4, T, Q> gy10 = floor(gx10) / T(7); - vec<4, T, Q> gz10 = floor(gy10) / T(6); - gx10 = fract(gx10) - T(0.5); - gy10 = fract(gy10) - T(0.5); - gz10 = fract(gz10) - T(0.5); - vec<4, T, Q> gw10 = vec<4, T, Q>(0.75) - abs(gx10) - abs(gy10) - abs(gz10); - vec<4, T, Q> sw10 = step(gw10, vec<4, T, Q>(0.0)); - gx10 -= sw10 * (step(T(0), gx10) - T(0.5)); - gy10 -= sw10 * (step(T(0), gy10) - T(0.5)); - - vec<4, T, Q> gx11 = ixy11 / T(7); - vec<4, T, Q> gy11 = floor(gx11) / T(7); - vec<4, T, Q> gz11 = floor(gy11) / T(6); - gx11 = fract(gx11) - T(0.5); - gy11 = fract(gy11) - T(0.5); - gz11 = fract(gz11) - T(0.5); - vec<4, T, Q> gw11 = vec<4, T, Q>(0.75) - abs(gx11) - abs(gy11) - abs(gz11); - vec<4, T, Q> sw11 = step(gw11, vec<4, T, Q>(T(0))); - gx11 -= sw11 * (step(T(0), gx11) - T(0.5)); - gy11 -= sw11 * (step(T(0), gy11) - T(0.5)); - - vec<4, T, Q> g0000(gx00.x, gy00.x, gz00.x, gw00.x); - vec<4, T, Q> g1000(gx00.y, gy00.y, gz00.y, gw00.y); - vec<4, T, Q> g0100(gx00.z, gy00.z, gz00.z, gw00.z); - vec<4, T, Q> g1100(gx00.w, gy00.w, gz00.w, gw00.w); - vec<4, T, Q> g0010(gx10.x, gy10.x, gz10.x, gw10.x); - vec<4, T, Q> g1010(gx10.y, gy10.y, gz10.y, gw10.y); - vec<4, T, Q> g0110(gx10.z, gy10.z, gz10.z, gw10.z); - vec<4, T, Q> g1110(gx10.w, gy10.w, gz10.w, gw10.w); - vec<4, T, Q> g0001(gx01.x, gy01.x, gz01.x, gw01.x); - vec<4, T, Q> g1001(gx01.y, gy01.y, gz01.y, gw01.y); - vec<4, T, Q> g0101(gx01.z, gy01.z, gz01.z, gw01.z); - vec<4, T, Q> g1101(gx01.w, gy01.w, gz01.w, gw01.w); - vec<4, T, Q> g0011(gx11.x, gy11.x, gz11.x, gw11.x); - vec<4, T, Q> g1011(gx11.y, gy11.y, gz11.y, gw11.y); - vec<4, T, Q> g0111(gx11.z, gy11.z, gz11.z, gw11.z); - vec<4, T, Q> g1111(gx11.w, gy11.w, gz11.w, gw11.w); - - vec<4, T, Q> norm00 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0000, g0000), dot(g0100, g0100), dot(g1000, g1000), dot(g1100, g1100))); - g0000 *= norm00.x; - g0100 *= norm00.y; - g1000 *= norm00.z; - g1100 *= norm00.w; - - vec<4, T, Q> norm01 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0001, g0001), dot(g0101, g0101), dot(g1001, g1001), dot(g1101, g1101))); - g0001 *= norm01.x; - g0101 *= norm01.y; - g1001 *= norm01.z; - g1101 *= norm01.w; - - vec<4, T, Q> norm10 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0010, g0010), dot(g0110, g0110), dot(g1010, g1010), dot(g1110, g1110))); - g0010 *= norm10.x; - g0110 *= norm10.y; - g1010 *= norm10.z; - g1110 *= norm10.w; - - vec<4, T, Q> norm11 = detail::taylorInvSqrt(vec<4, T, Q>(dot(g0011, g0011), dot(g0111, g0111), dot(g1011, g1011), dot(g1111, g1111))); - g0011 *= norm11.x; - g0111 *= norm11.y; - g1011 *= norm11.z; - g1111 *= norm11.w; - - T n0000 = dot(g0000, Pf0); - T n1000 = dot(g1000, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf0.w)); - T n0100 = dot(g0100, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf0.w)); - T n1100 = dot(g1100, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf0.w)); - T n0010 = dot(g0010, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf0.w)); - T n1010 = dot(g1010, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf0.w)); - T n0110 = dot(g0110, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf0.w)); - T n1110 = dot(g1110, vec<4, T, Q>(Pf1.x, Pf1.y, Pf1.z, Pf0.w)); - T n0001 = dot(g0001, vec<4, T, Q>(Pf0.x, Pf0.y, Pf0.z, Pf1.w)); - T n1001 = dot(g1001, vec<4, T, Q>(Pf1.x, Pf0.y, Pf0.z, Pf1.w)); - T n0101 = dot(g0101, vec<4, T, Q>(Pf0.x, Pf1.y, Pf0.z, Pf1.w)); - T n1101 = dot(g1101, vec<4, T, Q>(Pf1.x, Pf1.y, Pf0.z, Pf1.w)); - T n0011 = dot(g0011, vec<4, T, Q>(Pf0.x, Pf0.y, Pf1.z, Pf1.w)); - T n1011 = dot(g1011, vec<4, T, Q>(Pf1.x, Pf0.y, Pf1.z, Pf1.w)); - T n0111 = dot(g0111, vec<4, T, Q>(Pf0.x, Pf1.y, Pf1.z, Pf1.w)); - T n1111 = dot(g1111, Pf1); - - vec<4, T, Q> fade_xyzw = detail::fade(Pf0); - vec<4, T, Q> n_0w = mix(vec<4, T, Q>(n0000, n1000, n0100, n1100), vec<4, T, Q>(n0001, n1001, n0101, n1101), fade_xyzw.w); - vec<4, T, Q> n_1w = mix(vec<4, T, Q>(n0010, n1010, n0110, n1110), vec<4, T, Q>(n0011, n1011, n0111, n1111), fade_xyzw.w); - vec<4, T, Q> n_zw = mix(n_0w, n_1w, fade_xyzw.z); - vec<2, T, Q> n_yzw = mix(vec<2, T, Q>(n_zw.x, n_zw.y), vec<2, T, Q>(n_zw.z, n_zw.w), fade_xyzw.y); - T n_xyzw = mix(n_yzw.x, n_yzw.y, fade_xyzw.x); - return T(2.2) * n_xyzw; - } - - template - GLM_FUNC_QUALIFIER T simplex(glm::vec<2, T, Q> const& v) - { - vec<4, T, Q> const C = vec<4, T, Q>( - T( 0.211324865405187), // (3.0 - sqrt(3.0)) / 6.0 - T( 0.366025403784439), // 0.5 * (sqrt(3.0) - 1.0) - T(-0.577350269189626), // -1.0 + 2.0 * C.x - T( 0.024390243902439)); // 1.0 / 41.0 - - // First corner - vec<2, T, Q> i = floor(v + dot(v, vec<2, T, Q>(C[1]))); - vec<2, T, Q> x0 = v - i + dot(i, vec<2, T, Q>(C[0])); - - // Other corners - //i1.x = step( x0.y, x0.x ); // x0.x > x0.y ? 1.0 : 0.0 - //i1.y = 1.0 - i1.x; - vec<2, T, Q> i1 = (x0.x > x0.y) ? vec<2, T, Q>(1, 0) : vec<2, T, Q>(0, 1); - // x0 = x0 - 0.0 + 0.0 * C.xx ; - // x1 = x0 - i1 + 1.0 * C.xx ; - // x2 = x0 - 1.0 + 2.0 * C.xx ; - vec<4, T, Q> x12 = vec<4, T, Q>(x0.x, x0.y, x0.x, x0.y) + vec<4, T, Q>(C.x, C.x, C.z, C.z); - x12 = vec<4, T, Q>(vec<2, T, Q>(x12) - i1, x12.z, x12.w); - - // Permutations - i = mod(i, vec<2, T, Q>(289)); // Avoid truncation effects in permutation - vec<3, T, Q> p = detail::permute( - detail::permute(i.y + vec<3, T, Q>(T(0), i1.y, T(1))) - + i.x + vec<3, T, Q>(T(0), i1.x, T(1))); - - vec<3, T, Q> m = max(vec<3, T, Q>(0.5) - vec<3, T, Q>( - dot(x0, x0), - dot(vec<2, T, Q>(x12.x, x12.y), vec<2, T, Q>(x12.x, x12.y)), - dot(vec<2, T, Q>(x12.z, x12.w), vec<2, T, Q>(x12.z, x12.w))), vec<3, T, Q>(0)); - m = m * m ; - m = m * m ; - - // Gradients: 41 points uniformly over a line, mapped onto a diamond. - // The ring size 17*17 = 289 is close to a multiple of 41 (41*7 = 287) - - vec<3, T, Q> x = static_cast(2) * fract(p * C.w) - T(1); - vec<3, T, Q> h = abs(x) - T(0.5); - vec<3, T, Q> ox = floor(x + T(0.5)); - vec<3, T, Q> a0 = x - ox; - - // Normalise gradients implicitly by scaling m - // Inlined for speed: m *= taylorInvSqrt( a0*a0 + h*h ); - m *= static_cast(1.79284291400159) - T(0.85373472095314) * (a0 * a0 + h * h); - - // Compute final noise value at P - vec<3, T, Q> g; - g.x = a0.x * x0.x + h.x * x0.y; - //g.yz = a0.yz * x12.xz + h.yz * x12.yw; - g.y = a0.y * x12.x + h.y * x12.y; - g.z = a0.z * x12.z + h.z * x12.w; - return T(130) * dot(m, g); - } - - template - GLM_FUNC_QUALIFIER T simplex(vec<3, T, Q> const& v) - { - vec<2, T, Q> const C(1.0 / 6.0, 1.0 / 3.0); - vec<4, T, Q> const D(0.0, 0.5, 1.0, 2.0); - - // First corner - vec<3, T, Q> i(floor(v + dot(v, vec<3, T, Q>(C.y)))); - vec<3, T, Q> x0(v - i + dot(i, vec<3, T, Q>(C.x))); - - // Other corners - vec<3, T, Q> g(step(vec<3, T, Q>(x0.y, x0.z, x0.x), x0)); - vec<3, T, Q> l(T(1) - g); - vec<3, T, Q> i1(min(g, vec<3, T, Q>(l.z, l.x, l.y))); - vec<3, T, Q> i2(max(g, vec<3, T, Q>(l.z, l.x, l.y))); - - // x0 = x0 - 0.0 + 0.0 * C.xxx; - // x1 = x0 - i1 + 1.0 * C.xxx; - // x2 = x0 - i2 + 2.0 * C.xxx; - // x3 = x0 - 1.0 + 3.0 * C.xxx; - vec<3, T, Q> x1(x0 - i1 + C.x); - vec<3, T, Q> x2(x0 - i2 + C.y); // 2.0*C.x = 1/3 = C.y - vec<3, T, Q> x3(x0 - D.y); // -1.0+3.0*C.x = -0.5 = -D.y - - // Permutations - i = detail::mod289(i); - vec<4, T, Q> p(detail::permute(detail::permute(detail::permute( - i.z + vec<4, T, Q>(T(0), i1.z, i2.z, T(1))) + - i.y + vec<4, T, Q>(T(0), i1.y, i2.y, T(1))) + - i.x + vec<4, T, Q>(T(0), i1.x, i2.x, T(1)))); - - // Gradients: 7x7 points over a square, mapped onto an octahedron. - // The ring size 17*17 = 289 is close to a multiple of 49 (49*6 = 294) - T n_ = static_cast(0.142857142857); // 1.0/7.0 - vec<3, T, Q> ns(n_ * vec<3, T, Q>(D.w, D.y, D.z) - vec<3, T, Q>(D.x, D.z, D.x)); - - vec<4, T, Q> j(p - T(49) * floor(p * ns.z * ns.z)); // mod(p,7*7) - - vec<4, T, Q> x_(floor(j * ns.z)); - vec<4, T, Q> y_(floor(j - T(7) * x_)); // mod(j,N) - - vec<4, T, Q> x(x_ * ns.x + ns.y); - vec<4, T, Q> y(y_ * ns.x + ns.y); - vec<4, T, Q> h(T(1) - abs(x) - abs(y)); - - vec<4, T, Q> b0(x.x, x.y, y.x, y.y); - vec<4, T, Q> b1(x.z, x.w, y.z, y.w); - - // vec4 s0 = vec4(lessThan(b0,0.0))*2.0 - 1.0; - // vec4 s1 = vec4(lessThan(b1,0.0))*2.0 - 1.0; - vec<4, T, Q> s0(floor(b0) * T(2) + T(1)); - vec<4, T, Q> s1(floor(b1) * T(2) + T(1)); - vec<4, T, Q> sh(-step(h, vec<4, T, Q>(0.0))); - - vec<4, T, Q> a0 = vec<4, T, Q>(b0.x, b0.z, b0.y, b0.w) + vec<4, T, Q>(s0.x, s0.z, s0.y, s0.w) * vec<4, T, Q>(sh.x, sh.x, sh.y, sh.y); - vec<4, T, Q> a1 = vec<4, T, Q>(b1.x, b1.z, b1.y, b1.w) + vec<4, T, Q>(s1.x, s1.z, s1.y, s1.w) * vec<4, T, Q>(sh.z, sh.z, sh.w, sh.w); - - vec<3, T, Q> p0(a0.x, a0.y, h.x); - vec<3, T, Q> p1(a0.z, a0.w, h.y); - vec<3, T, Q> p2(a1.x, a1.y, h.z); - vec<3, T, Q> p3(a1.z, a1.w, h.w); - - // Normalise gradients - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - - // Mix final noise value - vec<4, T, Q> m = max(T(0.6) - vec<4, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2), dot(x3, x3)), vec<4, T, Q>(0)); - m = m * m; - return T(42) * dot(m * m, vec<4, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2), dot(p3, x3))); - } - - template - GLM_FUNC_QUALIFIER T simplex(vec<4, T, Q> const& v) - { - vec<4, T, Q> const C( - 0.138196601125011, // (5 - sqrt(5))/20 G4 - 0.276393202250021, // 2 * G4 - 0.414589803375032, // 3 * G4 - -0.447213595499958); // -1 + 4 * G4 - - // (sqrt(5) - 1)/4 = F4, used once below - T const F4 = static_cast(0.309016994374947451); - - // First corner - vec<4, T, Q> i = floor(v + dot(v, vec<4, T, Q>(F4))); - vec<4, T, Q> x0 = v - i + dot(i, vec<4, T, Q>(C.x)); - - // Other corners - - // Rank sorting originally contributed by Bill Licea-Kane, AMD (formerly ATI) - vec<4, T, Q> i0; - vec<3, T, Q> isX = step(vec<3, T, Q>(x0.y, x0.z, x0.w), vec<3, T, Q>(x0.x)); - vec<3, T, Q> isYZ = step(vec<3, T, Q>(x0.z, x0.w, x0.w), vec<3, T, Q>(x0.y, x0.y, x0.z)); - // i0.x = dot(isX, vec3(1.0)); - //i0.x = isX.x + isX.y + isX.z; - //i0.yzw = static_cast(1) - isX; - i0 = vec<4, T, Q>(isX.x + isX.y + isX.z, T(1) - isX); - // i0.y += dot(isYZ.xy, vec2(1.0)); - i0.y += isYZ.x + isYZ.y; - //i0.zw += 1.0 - vec<2, T, Q>(isYZ.x, isYZ.y); - i0.z += static_cast(1) - isYZ.x; - i0.w += static_cast(1) - isYZ.y; - i0.z += isYZ.z; - i0.w += static_cast(1) - isYZ.z; - - // i0 now contains the unique values 0,1,2,3 in each channel - vec<4, T, Q> i3 = clamp(i0, T(0), T(1)); - vec<4, T, Q> i2 = clamp(i0 - T(1), T(0), T(1)); - vec<4, T, Q> i1 = clamp(i0 - T(2), T(0), T(1)); - - // x0 = x0 - 0.0 + 0.0 * C.xxxx - // x1 = x0 - i1 + 0.0 * C.xxxx - // x2 = x0 - i2 + 0.0 * C.xxxx - // x3 = x0 - i3 + 0.0 * C.xxxx - // x4 = x0 - 1.0 + 4.0 * C.xxxx - vec<4, T, Q> x1 = x0 - i1 + C.x; - vec<4, T, Q> x2 = x0 - i2 + C.y; - vec<4, T, Q> x3 = x0 - i3 + C.z; - vec<4, T, Q> x4 = x0 + C.w; - - // Permutations - i = mod(i, vec<4, T, Q>(289)); - T j0 = detail::permute(detail::permute(detail::permute(detail::permute(i.w) + i.z) + i.y) + i.x); - vec<4, T, Q> j1 = detail::permute(detail::permute(detail::permute(detail::permute( - i.w + vec<4, T, Q>(i1.w, i2.w, i3.w, T(1))) + - i.z + vec<4, T, Q>(i1.z, i2.z, i3.z, T(1))) + - i.y + vec<4, T, Q>(i1.y, i2.y, i3.y, T(1))) + - i.x + vec<4, T, Q>(i1.x, i2.x, i3.x, T(1))); - - // Gradients: 7x7x6 points over a cube, mapped onto a 4-cross polytope - // 7*7*6 = 294, which is close to the ring size 17*17 = 289. - vec<4, T, Q> ip = vec<4, T, Q>(T(1) / T(294), T(1) / T(49), T(1) / T(7), T(0)); - - vec<4, T, Q> p0 = gtc::grad4(j0, ip); - vec<4, T, Q> p1 = gtc::grad4(j1.x, ip); - vec<4, T, Q> p2 = gtc::grad4(j1.y, ip); - vec<4, T, Q> p3 = gtc::grad4(j1.z, ip); - vec<4, T, Q> p4 = gtc::grad4(j1.w, ip); - - // Normalise gradients - vec<4, T, Q> norm = detail::taylorInvSqrt(vec<4, T, Q>(dot(p0, p0), dot(p1, p1), dot(p2, p2), dot(p3, p3))); - p0 *= norm.x; - p1 *= norm.y; - p2 *= norm.z; - p3 *= norm.w; - p4 *= detail::taylorInvSqrt(dot(p4, p4)); - - // Mix contributions from the five corners - vec<3, T, Q> m0 = max(T(0.6) - vec<3, T, Q>(dot(x0, x0), dot(x1, x1), dot(x2, x2)), vec<3, T, Q>(0)); - vec<2, T, Q> m1 = max(T(0.6) - vec<2, T, Q>(dot(x3, x3), dot(x4, x4) ), vec<2, T, Q>(0)); - m0 = m0 * m0; - m1 = m1 * m1; - return T(49) * - (dot(m0 * m0, vec<3, T, Q>(dot(p0, x0), dot(p1, x1), dot(p2, x2))) + - dot(m1 * m1, vec<2, T, Q>(dot(p3, x3), dot(p4, x4)))); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/packing.hpp b/src/qged/display/glm/glm/gtc/packing.hpp deleted file mode 100644 index d2e19667c5a..00000000000 --- a/src/qged/display/glm/glm/gtc/packing.hpp +++ /dev/null @@ -1,759 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_packing -/// @file glm/gtc/packing.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_packing GLM_GTC_packing -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// This extension provides a set of function to convert vertors to packed -/// formats. - -#pragma once - -// Dependency: -#include "type_precision.hpp" -#include "../ext/vector_packing.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_packing extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_packing - /// @{ - - /// First, converts the normalized floating-point value v into a 8-bit integer value. - /// Then, the results are packed into the returned 8-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm1x8: round(clamp(c, 0, +1) * 255.0) - /// - /// @see gtc_packing - /// @see uint16 packUnorm2x8(vec2 const& v) - /// @see uint32 packUnorm4x8(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint8 packUnorm1x8(float v); - - /// Convert a single 8-bit integer to a normalized floating-point value. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x8(uint16 p) - /// @see vec4 unpackUnorm4x8(uint32 p) - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackUnorm1x8(uint8 p); - - /// First, converts each component of the normalized floating-point value v into 8-bit integer values. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm2x8: round(clamp(c, 0, +1) * 255.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint8 packUnorm1x8(float const& v) - /// @see uint32 packUnorm4x8(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packUnorm2x8(vec2 const& v); - - /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit unsigned integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackUnorm1x8(uint8 v) - /// @see vec4 unpackUnorm4x8(uint32 p) - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackUnorm2x8(uint16 p); - - /// First, converts the normalized floating-point value v into 8-bit integer value. - /// Then, the results are packed into the returned 8-bit unsigned integer. - /// - /// The conversion to fixed point is done as follows: - /// packSnorm1x8: round(clamp(s, -1, +1) * 127.0) - /// - /// @see gtc_packing - /// @see uint16 packSnorm2x8(vec2 const& v) - /// @see uint32 packSnorm4x8(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint8 packSnorm1x8(float s); - - /// First, unpacks a single 8-bit unsigned integer p into a single 8-bit signed integers. - /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm1x8: clamp(f / 127.0, -1, +1) - /// - /// @see gtc_packing - /// @see vec2 unpackSnorm2x8(uint16 p) - /// @see vec4 unpackSnorm4x8(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackSnorm1x8(uint8 p); - - /// First, converts each component of the normalized floating-point value v into 8-bit integer values. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x8: round(clamp(c, -1, +1) * 127.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint8 packSnorm1x8(float const& v) - /// @see uint32 packSnorm4x8(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packSnorm2x8(vec2 const& v); - - /// First, unpacks a single 16-bit unsigned integer p into a pair of 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm2x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackSnorm1x8(uint8 p) - /// @see vec4 unpackSnorm4x8(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackSnorm2x8(uint16 p); - - /// First, converts the normalized floating-point value v into a 16-bit integer value. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm1x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// @see gtc_packing - /// @see uint16 packSnorm1x16(float const& v) - /// @see uint64 packSnorm4x16(vec4 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packUnorm1x16(float v); - - /// First, unpacks a single 16-bit unsigned integer p into a of 16-bit unsigned integers. - /// Then, the value is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm1x16: f / 65535.0 - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x16(uint32 p) - /// @see vec4 unpackUnorm4x16(uint64 p) - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackUnorm1x16(uint16 p); - - /// First, converts each component of the normalized floating-point value v into 16-bit integer values. - /// Then, the results are packed into the returned 64-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm4x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint16 packUnorm1x16(float const& v) - /// @see uint32 packUnorm2x16(vec2 const& v) - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packUnorm4x16(vec4 const& v); - - /// First, unpacks a single 64-bit unsigned integer p into four 16-bit unsigned integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnormx4x16: f / 65535.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackUnorm1x16(uint16 p) - /// @see vec2 unpackUnorm2x16(uint32 p) - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackUnorm4x16(uint64 p); - - /// First, converts the normalized floating-point value v into 16-bit integer value. - /// Then, the results are packed into the returned 16-bit unsigned integer. - /// - /// The conversion to fixed point is done as follows: - /// packSnorm1x8: round(clamp(s, -1, +1) * 32767.0) - /// - /// @see gtc_packing - /// @see uint32 packSnorm2x16(vec2 const& v) - /// @see uint64 packSnorm4x16(vec4 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packSnorm1x16(float v); - - /// First, unpacks a single 16-bit unsigned integer p into a single 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned scalar. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm1x16: clamp(f / 32767.0, -1, +1) - /// - /// @see gtc_packing - /// @see vec2 unpackSnorm2x16(uint32 p) - /// @see vec4 unpackSnorm4x16(uint64 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackSnorm1x16(uint16 p); - - /// First, converts each component of the normalized floating-point value v into 16-bit integer values. - /// Then, the results are packed into the returned 64-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x8: round(clamp(c, -1, +1) * 32767.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see gtc_packing - /// @see uint16 packSnorm1x16(float const& v) - /// @see uint32 packSnorm2x16(vec2 const& v) - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packSnorm4x16(vec4 const& v); - - /// First, unpacks a single 64-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x16: clamp(f / 32767.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see float unpackSnorm1x16(uint16 p) - /// @see vec2 unpackSnorm2x16(uint32 p) - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackSnorm4x16(uint64 p); - - /// Returns an unsigned integer obtained by converting the components of a floating-point scalar - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing this 16-bit value into a 16-bit unsigned integer. - /// - /// @see gtc_packing - /// @see uint32 packHalf2x16(vec2 const& v) - /// @see uint64 packHalf4x16(vec4 const& v) - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint16 packHalf1x16(float v); - - /// Returns a floating-point scalar with components obtained by unpacking a 16-bit unsigned integer into a 16-bit value, - /// interpreted as a 16-bit floating-point number according to the OpenGL Specification, - /// and converting it to 32-bit floating-point values. - /// - /// @see gtc_packing - /// @see vec2 unpackHalf2x16(uint32 const& v) - /// @see vec4 unpackHalf4x16(uint64 const& v) - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL float unpackHalf1x16(uint16 v); - - /// Returns an unsigned integer obtained by converting the components of a four-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these four 16-bit values into a 64-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see uint16 packHalf1x16(float const& v) - /// @see uint32 packHalf2x16(vec2 const& v) - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint64 packHalf4x16(vec4 const& v); - - /// Returns a four-component floating-point vector with components obtained by unpacking a 64-bit unsigned integer into four 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see float unpackHalf1x16(uint16 const& v) - /// @see vec2 unpackHalf2x16(uint32 const& v) - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackHalf4x16(uint64 p); - - /// Returns an unsigned integer obtained by converting the components of a four-component signed integer vector - /// to the 10-10-10-2-bit signed integer representation found in the OpenGL Specification, - /// and then packing these four values into a 32-bit unsigned integer. - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see uint32 packI3x10_1x2(uvec4 const& v) - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see ivec4 unpackI3x10_1x2(uint32 const& p) - GLM_FUNC_DECL uint32 packI3x10_1x2(ivec4 const& v); - - /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit signed integers. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); - /// @see uvec4 unpackI3x10_1x2(uint32 const& p); - GLM_FUNC_DECL ivec4 unpackI3x10_1x2(uint32 p); - - /// Returns an unsigned integer obtained by converting the components of a four-component unsigned integer vector - /// to the 10-10-10-2-bit unsigned integer representation found in the OpenGL Specification, - /// and then packing these four values into a 32-bit unsigned integer. - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see uint32 packI3x10_1x2(ivec4 const& v) - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see ivec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL uint32 packU3x10_1x2(uvec4 const& v); - - /// Unpacks a single 32-bit unsigned integer p into three 10-bit and one 2-bit unsigned integers. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p); - /// @see uvec4 unpackI3x10_1x2(uint32 const& p); - GLM_FUNC_DECL uvec4 unpackU3x10_1x2(uint32 p); - - /// First, converts the first three components of the normalized floating-point value v into 10-bit signed integer values. - /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm3x10_1x2(xyz): round(clamp(c, -1, +1) * 511.0) - /// packSnorm3x10_1x2(w): round(clamp(c, -1, +1) * 1.0) - /// - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see vec4 unpackSnorm3x10_1x2(uint32 const& p) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see uint32 packI3x10_1x2(ivec4 const& v) - GLM_FUNC_DECL uint32 packSnorm3x10_1x2(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm3x10_1x2(xyz): clamp(f / 511.0, -1, +1) - /// unpackSnorm3x10_1x2(w): clamp(f / 511.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p)) - /// @see uvec4 unpackI3x10_1x2(uint32 const& p) - /// @see uvec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL vec4 unpackSnorm3x10_1x2(uint32 p); - - /// First, converts the first three components of the normalized floating-point value v into 10-bit unsigned integer values. - /// Then, converts the forth component of the normalized floating-point value v into 2-bit signed uninteger values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm3x10_1x2(xyz): round(clamp(c, 0, +1) * 1023.0) - /// packUnorm3x10_1x2(w): round(clamp(c, 0, +1) * 3.0) - /// - /// The first vector component specifies the 10 least-significant bits of the result; - /// the forth component specifies the 2 most-significant bits. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm3x10_1x2(uint32 const& p) - /// @see uint32 packUnorm3x10_1x2(vec4 const& v) - /// @see uint32 packU3x10_1x2(uvec4 const& v) - /// @see uint32 packI3x10_1x2(ivec4 const& v) - GLM_FUNC_DECL uint32 packUnorm3x10_1x2(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into four 16-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm3x10_1x2(xyz): clamp(f / 1023.0, 0, +1) - /// unpackSnorm3x10_1x2(w): clamp(f / 3.0, 0, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packSnorm3x10_1x2(vec4 const& v) - /// @see vec4 unpackInorm3x10_1x2(uint32 const& p)) - /// @see uvec4 unpackI3x10_1x2(uint32 const& p) - /// @see uvec4 unpackU3x10_1x2(uint32 const& p) - GLM_FUNC_DECL vec4 unpackUnorm3x10_1x2(uint32 p); - - /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. - /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The first vector component specifies the 11 least-significant bits of the result; - /// the last component specifies the 10 most-significant bits. - /// - /// @see gtc_packing - /// @see vec3 unpackF2x11_1x10(uint32 const& p) - GLM_FUNC_DECL uint32 packF2x11_1x10(vec3 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . - /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see gtc_packing - /// @see uint32 packF2x11_1x10(vec3 const& v) - GLM_FUNC_DECL vec3 unpackF2x11_1x10(uint32 p); - - - /// First, converts the first two components of the normalized floating-point value v into 11-bit signless floating-point values. - /// Then, converts the third component of the normalized floating-point value v into a 10-bit signless floating-point value. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The first vector component specifies the 11 least-significant bits of the result; - /// the last component specifies the 10 most-significant bits. - /// - /// packF3x9_E1x5 allows encoding into RGBE / RGB9E5 format - /// - /// @see gtc_packing - /// @see vec3 unpackF3x9_E1x5(uint32 const& p) - GLM_FUNC_DECL uint32 packF3x9_E1x5(vec3 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into two 11-bit signless floating-point values and one 10-bit signless floating-point value . - /// Then, each component is converted to a normalized floating-point value to generate the returned three-component vector. - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// unpackF3x9_E1x5 allows decoding RGBE / RGB9E5 data - /// - /// @see gtc_packing - /// @see uint32 packF3x9_E1x5(vec3 const& v) - GLM_FUNC_DECL vec3 unpackF3x9_E1x5(uint32 p); - - /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& p) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb); - - /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see vec<4, T, Q> packRGBM(vec<3, float, Q> const& v) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm); - - /// Returns an unsigned integer vector obtained by converting the components of a floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the forth component specifies the 16 most-significant bits. - /// - /// @see gtc_packing - /// @see vec unpackHalf(vec const& p) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec packHalf(vec const& v); - - /// Returns a floating-point vector with components obtained by reinterpreting an integer vector as 16-bit floating-point numbers and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the forth component is obtained from the 16 most-significant bits of v. - /// - /// @see gtc_packing - /// @see vec packHalf(vec const& v) - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - template - GLM_FUNC_DECL vec unpackHalf(vec const& p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec unpackUnorm(vec const& p); - template - GLM_FUNC_DECL vec packUnorm(vec const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see vec packUnorm(vec const& v) - template - GLM_FUNC_DECL vec unpackUnorm(vec const& v); - - /// Convert each component of the normalized floating-point vector into signed integer values. - /// - /// @see gtc_packing - /// @see vec unpackSnorm(vec const& p); - template - GLM_FUNC_DECL vec packSnorm(vec const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see vec packSnorm(vec const& v) - template - GLM_FUNC_DECL vec unpackSnorm(vec const& v); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec2 unpackUnorm2x4(uint8 p) - GLM_FUNC_DECL uint8 packUnorm2x4(vec2 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint8 packUnorm2x4(vec2 const& v) - GLM_FUNC_DECL vec2 unpackUnorm2x4(uint8 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm4x4(uint16 p) - GLM_FUNC_DECL uint16 packUnorm4x4(vec4 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm4x4(vec4 const& v) - GLM_FUNC_DECL vec4 unpackUnorm4x4(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec3 unpackUnorm1x5_1x6_1x5(uint16 p) - GLM_FUNC_DECL uint16 packUnorm1x5_1x6_1x5(vec3 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm1x5_1x6_1x5(vec3 const& v) - GLM_FUNC_DECL vec3 unpackUnorm1x5_1x6_1x5(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec4 unpackUnorm3x5_1x1(uint16 p) - GLM_FUNC_DECL uint16 packUnorm3x5_1x1(vec4 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint16 packUnorm3x5_1x1(vec4 const& v) - GLM_FUNC_DECL vec4 unpackUnorm3x5_1x1(uint16 p); - - /// Convert each component of the normalized floating-point vector into unsigned integer values. - /// - /// @see gtc_packing - /// @see vec3 unpackUnorm2x3_1x2(uint8 p) - GLM_FUNC_DECL uint8 packUnorm2x3_1x2(vec3 const& v); - - /// Convert a packed integer to a normalized floating-point vector. - /// - /// @see gtc_packing - /// @see uint8 packUnorm2x3_1x2(vec3 const& v) - GLM_FUNC_DECL vec3 unpackUnorm2x3_1x2(uint8 p); - - - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i8vec2 unpackInt2x8(int16 p) - GLM_FUNC_DECL int16 packInt2x8(i8vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int16 packInt2x8(i8vec2 const& v) - GLM_FUNC_DECL i8vec2 unpackInt2x8(int16 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u8vec2 unpackInt2x8(uint16 p) - GLM_FUNC_DECL uint16 packUint2x8(u8vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint16 packInt2x8(u8vec2 const& v) - GLM_FUNC_DECL u8vec2 unpackUint2x8(uint16 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i8vec4 unpackInt4x8(int32 p) - GLM_FUNC_DECL int32 packInt4x8(i8vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int32 packInt2x8(i8vec4 const& v) - GLM_FUNC_DECL i8vec4 unpackInt4x8(int32 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u8vec4 unpackUint4x8(uint32 p) - GLM_FUNC_DECL uint32 packUint4x8(u8vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint32 packUint4x8(u8vec2 const& v) - GLM_FUNC_DECL u8vec4 unpackUint4x8(uint32 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i16vec2 unpackInt2x16(int p) - GLM_FUNC_DECL int packInt2x16(i16vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packInt2x16(i16vec2 const& v) - GLM_FUNC_DECL i16vec2 unpackInt2x16(int p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i16vec4 unpackInt4x16(int64 p) - GLM_FUNC_DECL int64 packInt4x16(i16vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int64 packInt4x16(i16vec4 const& v) - GLM_FUNC_DECL i16vec4 unpackInt4x16(int64 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u16vec2 unpackUint2x16(uint p) - GLM_FUNC_DECL uint packUint2x16(u16vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint packUint2x16(u16vec2 const& v) - GLM_FUNC_DECL u16vec2 unpackUint2x16(uint p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u16vec4 unpackUint4x16(uint64 p) - GLM_FUNC_DECL uint64 packUint4x16(u16vec4 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see uint64 packUint4x16(u16vec4 const& v) - GLM_FUNC_DECL u16vec4 unpackUint4x16(uint64 p); - - /// Convert each component from an integer vector into a packed integer. - /// - /// @see gtc_packing - /// @see i32vec2 unpackInt2x32(int p) - GLM_FUNC_DECL int64 packInt2x32(i32vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packInt2x16(i32vec2 const& v) - GLM_FUNC_DECL i32vec2 unpackInt2x32(int64 p); - - /// Convert each component from an integer vector into a packed unsigned integer. - /// - /// @see gtc_packing - /// @see u32vec2 unpackUint2x32(int p) - GLM_FUNC_DECL uint64 packUint2x32(u32vec2 const& v); - - /// Convert a packed integer into an integer vector. - /// - /// @see gtc_packing - /// @see int packUint2x16(u32vec2 const& v) - GLM_FUNC_DECL u32vec2 unpackUint2x32(uint64 p); - - /// @} -}// namespace glm - -#include "packing.inl" diff --git a/src/qged/display/glm/glm/gtc/packing.inl b/src/qged/display/glm/glm/gtc/packing.inl deleted file mode 100644 index 8c906e16c11..00000000000 --- a/src/qged/display/glm/glm/gtc/packing.inl +++ /dev/null @@ -1,938 +0,0 @@ -/// @ref gtc_packing - -#include "../ext/scalar_relational.hpp" -#include "../ext/vector_relational.hpp" -#include "../common.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../detail/type_half.hpp" -#include -#include - -namespace glm{ -namespace detail -{ - GLM_FUNC_QUALIFIER glm::uint16 float2half(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((f >> 16) & 0x8000) | // sign - ((((f & 0x7f800000) - 0x38000000) >> 13) & 0x7c00) | // exponential - ((f >> 13) & 0x03ff); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 float2packed11(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x000007c0 => 00000000 00000000 00000111 11000000 - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((f & 0x7f800000) - 0x38000000) >> 17) & 0x07c0) | // exponential - ((f >> 17) & 0x003f); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 packed11ToFloat(glm::uint32 p) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x000007c0 => 00000000 00000000 00000111 11000000 - // 0x00007c00 => 00000000 00000000 01111100 00000000 - // 0x000003ff => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((p & 0x07c0) << 17) + 0x38000000) & 0x7f800000) | // exponential - ((p & 0x003f) << 17); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 float2packed10(glm::uint32 f) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x0000001F => 00000000 00000000 00000000 00011111 - // 0x0000003F => 00000000 00000000 00000000 00111111 - // 0x000003E0 => 00000000 00000000 00000011 11100000 - // 0x000007C0 => 00000000 00000000 00000111 11000000 - // 0x00007C00 => 00000000 00000000 01111100 00000000 - // 0x000003FF => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((f & 0x7f800000) - 0x38000000) >> 18) & 0x03E0) | // exponential - ((f >> 18) & 0x001f); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint32 packed10ToFloat(glm::uint32 p) - { - // 10 bits => EE EEEFFFFF - // 11 bits => EEE EEFFFFFF - // Half bits => SEEEEEFF FFFFFFFF - // Float bits => SEEEEEEE EFFFFFFF FFFFFFFF FFFFFFFF - - // 0x0000001F => 00000000 00000000 00000000 00011111 - // 0x0000003F => 00000000 00000000 00000000 00111111 - // 0x000003E0 => 00000000 00000000 00000011 11100000 - // 0x000007C0 => 00000000 00000000 00000111 11000000 - // 0x00007C00 => 00000000 00000000 01111100 00000000 - // 0x000003FF => 00000000 00000000 00000011 11111111 - // 0x38000000 => 00111000 00000000 00000000 00000000 - // 0x7f800000 => 01111111 10000000 00000000 00000000 - // 0x00008000 => 00000000 00000000 10000000 00000000 - return - ((((p & 0x03E0) << 18) + 0x38000000) & 0x7f800000) | // exponential - ((p & 0x001f) << 18); // Mantissa - } - - GLM_FUNC_QUALIFIER glm::uint half2float(glm::uint h) - { - return ((h & 0x8000) << 16) | ((( h & 0x7c00) + 0x1C000) << 13) | ((h & 0x03FF) << 13); - } - - GLM_FUNC_QUALIFIER glm::uint floatTo11bit(float x) - { - if(x == 0.0f) - return 0u; - else if(glm::isnan(x)) - return ~0u; - else if(glm::isinf(x)) - return 0x1Fu << 6u; - - uint Pack = 0u; - memcpy(&Pack, &x, sizeof(Pack)); - return float2packed11(Pack); - } - - GLM_FUNC_QUALIFIER float packed11bitToFloat(glm::uint x) - { - if(x == 0) - return 0.0f; - else if(x == ((1 << 11) - 1)) - return ~0;//NaN - else if(x == (0x1f << 6)) - return ~0;//Inf - - uint Result = packed11ToFloat(x); - - float Temp = 0; - memcpy(&Temp, &Result, sizeof(Temp)); - return Temp; - } - - GLM_FUNC_QUALIFIER glm::uint floatTo10bit(float x) - { - if(x == 0.0f) - return 0u; - else if(glm::isnan(x)) - return ~0u; - else if(glm::isinf(x)) - return 0x1Fu << 5u; - - uint Pack = 0; - memcpy(&Pack, &x, sizeof(Pack)); - return float2packed10(Pack); - } - - GLM_FUNC_QUALIFIER float packed10bitToFloat(glm::uint x) - { - if(x == 0) - return 0.0f; - else if(x == ((1 << 10) - 1)) - return ~0;//NaN - else if(x == (0x1f << 5)) - return ~0;//Inf - - uint Result = packed10ToFloat(x); - - float Temp = 0; - memcpy(&Temp, &Result, sizeof(Temp)); - return Temp; - } - -// GLM_FUNC_QUALIFIER glm::uint f11_f11_f10(float x, float y, float z) -// { -// return ((floatTo11bit(x) & ((1 << 11) - 1)) << 0) | ((floatTo11bit(y) & ((1 << 11) - 1)) << 11) | ((floatTo10bit(z) & ((1 << 10) - 1)) << 22); -// } - - union u3u3u2 - { - struct - { - uint x : 3; - uint y : 3; - uint z : 2; - } data; - uint8 pack; - }; - - union u4u4 - { - struct - { - uint x : 4; - uint y : 4; - } data; - uint8 pack; - }; - - union u4u4u4u4 - { - struct - { - uint x : 4; - uint y : 4; - uint z : 4; - uint w : 4; - } data; - uint16 pack; - }; - - union u5u6u5 - { - struct - { - uint x : 5; - uint y : 6; - uint z : 5; - } data; - uint16 pack; - }; - - union u5u5u5u1 - { - struct - { - uint x : 5; - uint y : 5; - uint z : 5; - uint w : 1; - } data; - uint16 pack; - }; - - union u10u10u10u2 - { - struct - { - uint x : 10; - uint y : 10; - uint z : 10; - uint w : 2; - } data; - uint32 pack; - }; - - union i10i10i10i2 - { - struct - { - int x : 10; - int y : 10; - int z : 10; - int w : 2; - } data; - uint32 pack; - }; - - union u9u9u9e5 - { - struct - { - uint x : 9; - uint y : 9; - uint z : 9; - uint w : 5; - } data; - uint32 pack; - }; - - template - struct compute_half - {}; - - template - struct compute_half<1, Q> - { - GLM_FUNC_QUALIFIER static vec<1, uint16, Q> pack(vec<1, float, Q> const& v) - { - int16 const Unpack(detail::toFloat16(v.x)); - u16vec1 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<1, float, Q> unpack(vec<1, uint16, Q> const& v) - { - i16vec1 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<1, float, Q>(detail::toFloat32(v.x)); - } - }; - - template - struct compute_half<2, Q> - { - GLM_FUNC_QUALIFIER static vec<2, uint16, Q> pack(vec<2, float, Q> const& v) - { - vec<2, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y)); - u16vec2 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<2, float, Q> unpack(vec<2, uint16, Q> const& v) - { - i16vec2 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<2, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y)); - } - }; - - template - struct compute_half<3, Q> - { - GLM_FUNC_QUALIFIER static vec<3, uint16, Q> pack(vec<3, float, Q> const& v) - { - vec<3, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z)); - u16vec3 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<3, float, Q> unpack(vec<3, uint16, Q> const& v) - { - i16vec3 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<3, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z)); - } - }; - - template - struct compute_half<4, Q> - { - GLM_FUNC_QUALIFIER static vec<4, uint16, Q> pack(vec<4, float, Q> const& v) - { - vec<4, int16, Q> const Unpack(detail::toFloat16(v.x), detail::toFloat16(v.y), detail::toFloat16(v.z), detail::toFloat16(v.w)); - u16vec4 Packed; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER static vec<4, float, Q> unpack(vec<4, uint16, Q> const& v) - { - i16vec4 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec<4, float, Q>(detail::toFloat32(v.x), detail::toFloat32(v.y), detail::toFloat32(v.z), detail::toFloat32(v.w)); - } - }; -}//namespace detail - - GLM_FUNC_QUALIFIER uint8 packUnorm1x8(float v) - { - return static_cast(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - } - - GLM_FUNC_QUALIFIER float unpackUnorm1x8(uint8 p) - { - float const Unpack(p); - return Unpack * static_cast(0.0039215686274509803921568627451); // 1 / 255 - } - - GLM_FUNC_QUALIFIER uint16 packUnorm2x8(vec2 const& v) - { - u8vec2 const Topack(round(clamp(v, 0.0f, 1.0f) * 255.0f)); - - uint16 Unpack = 0; - memcpy(&Unpack, &Topack, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x8(uint16 p) - { - u8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return vec2(Unpack) * float(0.0039215686274509803921568627451); // 1 / 255 - } - - GLM_FUNC_QUALIFIER uint8 packSnorm1x8(float v) - { - int8 const Topack(static_cast(round(clamp(v ,-1.0f, 1.0f) * 127.0f))); - uint8 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackSnorm1x8(uint8 p) - { - int8 Unpack = 0; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - static_cast(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packSnorm2x8(vec2 const& v) - { - i8vec2 const Topack(round(clamp(v, -1.0f, 1.0f) * 127.0f)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec2 unpackSnorm2x8(uint16 p) - { - i8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - vec2(Unpack) * 0.00787401574803149606299212598425f, // 1.0f / 127.0f - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packUnorm1x16(float s) - { - return static_cast(round(clamp(s, 0.0f, 1.0f) * 65535.0f)); - } - - GLM_FUNC_QUALIFIER float unpackUnorm1x16(uint16 p) - { - float const Unpack(p); - return Unpack * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 - } - - GLM_FUNC_QUALIFIER uint64 packUnorm4x16(vec4 const& v) - { - u16vec4 const Topack(round(clamp(v , 0.0f, 1.0f) * 65535.0f)); - uint64 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x16(uint64 p) - { - u16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return vec4(Unpack) * 1.5259021896696421759365224689097e-5f; // 1.0 / 65535.0 - } - - GLM_FUNC_QUALIFIER uint16 packSnorm1x16(float v) - { - int16 const Topack = static_cast(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackSnorm1x16(uint16 p) - { - int16 Unpack = 0; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - static_cast(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint64 packSnorm4x16(vec4 const& v) - { - i16vec4 const Topack(round(clamp(v ,-1.0f, 1.0f) * 32767.0f)); - uint64 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER vec4 unpackSnorm4x16(uint64 p) - { - i16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return clamp( - vec4(Unpack) * 3.0518509475997192297128208258309e-5f, //1.0f / 32767.0f, - -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint16 packHalf1x16(float v) - { - int16 const Topack(detail::toFloat16(v)); - uint16 Packed = 0; - memcpy(&Packed, &Topack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER float unpackHalf1x16(uint16 v) - { - int16 Unpack = 0; - memcpy(&Unpack, &v, sizeof(Unpack)); - return detail::toFloat32(Unpack); - } - - GLM_FUNC_QUALIFIER uint64 packHalf4x16(glm::vec4 const& v) - { - i16vec4 const Unpack( - detail::toFloat16(v.x), - detail::toFloat16(v.y), - detail::toFloat16(v.z), - detail::toFloat16(v.w)); - uint64 Packed = 0; - memcpy(&Packed, &Unpack, sizeof(Packed)); - return Packed; - } - - GLM_FUNC_QUALIFIER glm::vec4 unpackHalf4x16(uint64 v) - { - i16vec4 Unpack; - memcpy(&Unpack, &v, sizeof(Unpack)); - return vec4( - detail::toFloat32(Unpack.x), - detail::toFloat32(Unpack.y), - detail::toFloat32(Unpack.z), - detail::toFloat32(Unpack.w)); - } - - GLM_FUNC_QUALIFIER uint32 packI3x10_1x2(ivec4 const& v) - { - detail::i10i10i10i2 Result; - Result.data.x = v.x; - Result.data.y = v.y; - Result.data.z = v.z; - Result.data.w = v.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER ivec4 unpackI3x10_1x2(uint32 v) - { - detail::i10i10i10i2 Unpack; - Unpack.pack = v; - return ivec4( - Unpack.data.x, - Unpack.data.y, - Unpack.data.z, - Unpack.data.w); - } - - GLM_FUNC_QUALIFIER uint32 packU3x10_1x2(uvec4 const& v) - { - detail::u10u10u10u2 Result; - Result.data.x = v.x; - Result.data.y = v.y; - Result.data.z = v.z; - Result.data.w = v.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER uvec4 unpackU3x10_1x2(uint32 v) - { - detail::u10u10u10u2 Unpack; - Unpack.pack = v; - return uvec4( - Unpack.data.x, - Unpack.data.y, - Unpack.data.z, - Unpack.data.w); - } - - GLM_FUNC_QUALIFIER uint32 packSnorm3x10_1x2(vec4 const& v) - { - ivec4 const Pack(round(clamp(v,-1.0f, 1.0f) * vec4(511.f, 511.f, 511.f, 1.f))); - - detail::i10i10i10i2 Result; - Result.data.x = Pack.x; - Result.data.y = Pack.y; - Result.data.z = Pack.z; - Result.data.w = Pack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackSnorm3x10_1x2(uint32 v) - { - detail::i10i10i10i2 Unpack; - Unpack.pack = v; - - vec4 const Result(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w); - - return clamp(Result * vec4(1.f / 511.f, 1.f / 511.f, 1.f / 511.f, 1.f), -1.0f, 1.0f); - } - - GLM_FUNC_QUALIFIER uint32 packUnorm3x10_1x2(vec4 const& v) - { - uvec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(1023.f, 1023.f, 1023.f, 3.f))); - - detail::u10u10u10u2 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm3x10_1x2(uint32 v) - { - vec4 const ScaleFactors(1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 1023.f, 1.0f / 3.f); - - detail::u10u10u10u2 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactors; - } - - GLM_FUNC_QUALIFIER uint32 packF2x11_1x10(vec3 const& v) - { - return - ((detail::floatTo11bit(v.x) & ((1 << 11) - 1)) << 0) | - ((detail::floatTo11bit(v.y) & ((1 << 11) - 1)) << 11) | - ((detail::floatTo10bit(v.z) & ((1 << 10) - 1)) << 22); - } - - GLM_FUNC_QUALIFIER vec3 unpackF2x11_1x10(uint32 v) - { - return vec3( - detail::packed11bitToFloat(v >> 0), - detail::packed11bitToFloat(v >> 11), - detail::packed10bitToFloat(v >> 22)); - } - - GLM_FUNC_QUALIFIER uint32 packF3x9_E1x5(vec3 const& v) - { - float const SharedExpMax = (pow(2.0f, 9.0f - 1.0f) / pow(2.0f, 9.0f)) * pow(2.0f, 31.f - 15.f); - vec3 const Color = clamp(v, 0.0f, SharedExpMax); - float const MaxColor = max(Color.x, max(Color.y, Color.z)); - - float const ExpSharedP = max(-15.f - 1.f, floor(log2(MaxColor))) + 1.0f + 15.f; - float const MaxShared = floor(MaxColor / pow(2.0f, (ExpSharedP - 15.f - 9.f)) + 0.5f); - float const ExpShared = equal(MaxShared, pow(2.0f, 9.0f), epsilon()) ? ExpSharedP + 1.0f : ExpSharedP; - - uvec3 const ColorComp(floor(Color / pow(2.f, (ExpShared - 15.f - 9.f)) + 0.5f)); - - detail::u9u9u9e5 Unpack; - Unpack.data.x = ColorComp.x; - Unpack.data.y = ColorComp.y; - Unpack.data.z = ColorComp.z; - Unpack.data.w = uint(ExpShared); - return Unpack.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackF3x9_E1x5(uint32 v) - { - detail::u9u9u9e5 Unpack; - Unpack.pack = v; - - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * pow(2.0f, Unpack.data.w - 15.f - 9.f); - } - - // Based on Brian Karis http://graphicrants.blogspot.fr/2009/04/rgbm-color-encoding.html - template - GLM_FUNC_QUALIFIER vec<4, T, Q> packRGBM(vec<3, T, Q> const& rgb) - { - vec<3, T, Q> const Color(rgb * static_cast(1.0 / 6.0)); - T Alpha = clamp(max(max(Color.x, Color.y), max(Color.z, static_cast(1e-6))), static_cast(0), static_cast(1)); - Alpha = ceil(Alpha * static_cast(255.0)) / static_cast(255.0); - return vec<4, T, Q>(Color / Alpha, Alpha); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> unpackRGBM(vec<4, T, Q> const& rgbm) - { - return vec<3, T, Q>(rgbm.x, rgbm.y, rgbm.z) * rgbm.w * static_cast(6); - } - - template - GLM_FUNC_QUALIFIER vec packHalf(vec const& v) - { - return detail::compute_half::pack(v); - } - - template - GLM_FUNC_QUALIFIER vec unpackHalf(vec const& v) - { - return detail::compute_half::unpack(v); - } - - template - GLM_FUNC_QUALIFIER vec packUnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(round(clamp(v, static_cast(0), static_cast(1)) * static_cast(std::numeric_limits::max()))); - } - - template - GLM_FUNC_QUALIFIER vec unpackUnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())); - } - - template - GLM_FUNC_QUALIFIER vec packSnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return vec(round(clamp(v , static_cast(-1), static_cast(1)) * static_cast(std::numeric_limits::max()))); - } - - template - GLM_FUNC_QUALIFIER vec unpackSnorm(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_integer, "uintType must be an integer type"); - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "floatType must be a floating point type"); - - return clamp(vec(v) * (static_cast(1) / static_cast(std::numeric_limits::max())), static_cast(-1), static_cast(1)); - } - - GLM_FUNC_QUALIFIER uint8 packUnorm2x4(vec2 const& v) - { - u32vec2 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); - detail::u4u4 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec2 unpackUnorm2x4(uint8 v) - { - float const ScaleFactor(1.f / 15.f); - detail::u4u4 Unpack; - Unpack.pack = v; - return vec2(Unpack.data.x, Unpack.data.y) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm4x4(vec4 const& v) - { - u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * 15.0f)); - detail::u4u4u4u4 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm4x4(uint16 v) - { - float const ScaleFactor(1.f / 15.f); - detail::u4u4u4u4 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm1x5_1x6_1x5(vec3 const& v) - { - u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(31.f, 63.f, 31.f))); - detail::u5u6u5 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackUnorm1x5_1x6_1x5(uint16 v) - { - vec3 const ScaleFactor(1.f / 31.f, 1.f / 63.f, 1.f / 31.f); - detail::u5u6u5 Unpack; - Unpack.pack = v; - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint16 packUnorm3x5_1x1(vec4 const& v) - { - u32vec4 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec4(31.f, 31.f, 31.f, 1.f))); - detail::u5u5u5u1 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - Result.data.w = Unpack.w; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec4 unpackUnorm3x5_1x1(uint16 v) - { - vec4 const ScaleFactor(1.f / 31.f, 1.f / 31.f, 1.f / 31.f, 1.f); - detail::u5u5u5u1 Unpack; - Unpack.pack = v; - return vec4(Unpack.data.x, Unpack.data.y, Unpack.data.z, Unpack.data.w) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER uint8 packUnorm2x3_1x2(vec3 const& v) - { - u32vec3 const Unpack(round(clamp(v, 0.0f, 1.0f) * vec3(7.f, 7.f, 3.f))); - detail::u3u3u2 Result; - Result.data.x = Unpack.x; - Result.data.y = Unpack.y; - Result.data.z = Unpack.z; - return Result.pack; - } - - GLM_FUNC_QUALIFIER vec3 unpackUnorm2x3_1x2(uint8 v) - { - vec3 const ScaleFactor(1.f / 7.f, 1.f / 7.f, 1.f / 3.f); - detail::u3u3u2 Unpack; - Unpack.pack = v; - return vec3(Unpack.data.x, Unpack.data.y, Unpack.data.z) * ScaleFactor; - } - - GLM_FUNC_QUALIFIER int16 packInt2x8(i8vec2 const& v) - { - int16 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i8vec2 unpackInt2x8(int16 p) - { - i8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint16 packUint2x8(u8vec2 const& v) - { - uint16 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u8vec2 unpackUint2x8(uint16 p) - { - u8vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int32 packInt4x8(i8vec4 const& v) - { - int32 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i8vec4 unpackInt4x8(int32 p) - { - i8vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint32 packUint4x8(u8vec4 const& v) - { - uint32 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u8vec4 unpackUint4x8(uint32 p) - { - u8vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int packInt2x16(i16vec2 const& v) - { - int Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i16vec2 unpackInt2x16(int p) - { - i16vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int64 packInt4x16(i16vec4 const& v) - { - int64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i16vec4 unpackInt4x16(int64 p) - { - i16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint packUint2x16(u16vec2 const& v) - { - uint Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u16vec2 unpackUint2x16(uint p) - { - u16vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint64 packUint4x16(u16vec4 const& v) - { - uint64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u16vec4 unpackUint4x16(uint64 p) - { - u16vec4 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER int64 packInt2x32(i32vec2 const& v) - { - int64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER i32vec2 unpackInt2x32(int64 p) - { - i32vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } - - GLM_FUNC_QUALIFIER uint64 packUint2x32(u32vec2 const& v) - { - uint64 Pack = 0; - memcpy(&Pack, &v, sizeof(Pack)); - return Pack; - } - - GLM_FUNC_QUALIFIER u32vec2 unpackUint2x32(uint64 p) - { - u32vec2 Unpack; - memcpy(&Unpack, &p, sizeof(Unpack)); - return Unpack; - } -}//namespace glm - diff --git a/src/qged/display/glm/glm/gtc/quaternion.hpp b/src/qged/display/glm/glm/gtc/quaternion.hpp deleted file mode 100644 index 673f5131754..00000000000 --- a/src/qged/display/glm/glm/gtc/quaternion.hpp +++ /dev/null @@ -1,204 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_quaternion -/// @file glm/gtc/quaternion.hpp -/// -/// @see core (dependence) -/// @see gtc_constants (dependence) -/// -/// @defgroup gtc_quaternion GLM_GTC_quaternion -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines a templated quaternion type and several quaternion operations. - -#pragma once - -// Dependency: -#include "../gtc/constants.hpp" -#include "../gtc/matrix_transform.hpp" -#include "../ext/vector_relational.hpp" -#include "../ext/quaternion_common.hpp" -#include "../ext/quaternion_float.hpp" -#include "../ext/quaternion_float_precision.hpp" -#include "../ext/quaternion_double.hpp" -#include "../ext/quaternion_double_precision.hpp" -#include "../ext/quaternion_relational.hpp" -#include "../ext/quaternion_geometric.hpp" -#include "../ext/quaternion_trigonometric.hpp" -#include "../ext/quaternion_transform.hpp" -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat4x4.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_quaternion extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_quaternion - /// @{ - - /// Returns euler angles, pitch as x, yaw as y, roll as z. - /// The result is expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> eulerAngles(qua const& x); - - /// Returns roll value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T roll(qua const& x); - - /// Returns pitch value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T pitch(qua const& x); - - /// Returns yaw value of euler angles expressed in radians. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL T yaw(qua const& x); - - /// Converts a quaternion to a 3 * 3 matrix. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL mat<3, 3, T, Q> mat3_cast(qua const& x); - - /// Converts a quaternion to a 4 * 4 matrix. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL mat<4, 4, T, Q> mat4_cast(qua const& x); - - /// Converts a pure rotation 3 * 3 matrix to a quaternion. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL qua quat_cast(mat<3, 3, T, Q> const& x); - - /// Converts a pure rotation 4 * 4 matrix to a quaternion. - /// - /// @tparam T Floating-point scalar types. - /// - /// @see gtc_quaternion - template - GLM_FUNC_DECL qua quat_cast(mat<4, 4, T, Q> const& x); - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> lessThan(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> greaterThan(qua const& x, qua const& y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_quaternion_relational - template - GLM_FUNC_DECL vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y); - - /// Build a look at quaternion based on the default handedness. - /// - /// @param direction Desired forward direction. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAt( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - - /// Build a right-handed look at quaternion. - /// - /// @param direction Desired forward direction onto which the -z-axis gets mapped. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAtRH( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - - /// Build a left-handed look at quaternion. - /// - /// @param direction Desired forward direction onto which the +z-axis gets mapped. Needs to be normalized. - /// @param up Up vector, how the camera is oriented. Typically (0, 1, 0). - template - GLM_FUNC_DECL qua quatLookAtLH( - vec<3, T, Q> const& direction, - vec<3, T, Q> const& up); - /// @} -} //namespace glm - -#include "quaternion.inl" diff --git a/src/qged/display/glm/glm/gtc/quaternion.inl b/src/qged/display/glm/glm/gtc/quaternion.inl deleted file mode 100644 index 06f9f020b86..00000000000 --- a/src/qged/display/glm/glm/gtc/quaternion.inl +++ /dev/null @@ -1,202 +0,0 @@ -#include "../trigonometric.hpp" -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "epsilon.hpp" -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> eulerAngles(qua const& x) - { - return vec<3, T, Q>(pitch(x), yaw(x), roll(x)); - } - - template - GLM_FUNC_QUALIFIER T roll(qua const& q) - { - return static_cast(atan(static_cast(2) * (q.x * q.y + q.w * q.z), q.w * q.w + q.x * q.x - q.y * q.y - q.z * q.z)); - } - - template - GLM_FUNC_QUALIFIER T pitch(qua const& q) - { - //return T(atan(T(2) * (q.y * q.z + q.w * q.x), q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z)); - T const y = static_cast(2) * (q.y * q.z + q.w * q.x); - T const x = q.w * q.w - q.x * q.x - q.y * q.y + q.z * q.z; - - if(all(equal(vec<2, T, Q>(x, y), vec<2, T, Q>(0), epsilon()))) //avoid atan2(0,0) - handle singularity - Matiis - return static_cast(static_cast(2) * atan(q.x, q.w)); - - return static_cast(atan(y, x)); - } - - template - GLM_FUNC_QUALIFIER T yaw(qua const& q) - { - return asin(clamp(static_cast(-2) * (q.x * q.z - q.w * q.y), static_cast(-1), static_cast(1))); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> mat3_cast(qua const& q) - { - mat<3, 3, T, Q> Result(T(1)); - T qxx(q.x * q.x); - T qyy(q.y * q.y); - T qzz(q.z * q.z); - T qxz(q.x * q.z); - T qxy(q.x * q.y); - T qyz(q.y * q.z); - T qwx(q.w * q.x); - T qwy(q.w * q.y); - T qwz(q.w * q.z); - - Result[0][0] = T(1) - T(2) * (qyy + qzz); - Result[0][1] = T(2) * (qxy + qwz); - Result[0][2] = T(2) * (qxz - qwy); - - Result[1][0] = T(2) * (qxy - qwz); - Result[1][1] = T(1) - T(2) * (qxx + qzz); - Result[1][2] = T(2) * (qyz + qwx); - - Result[2][0] = T(2) * (qxz + qwy); - Result[2][1] = T(2) * (qyz - qwx); - Result[2][2] = T(1) - T(2) * (qxx + qyy); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> mat4_cast(qua const& q) - { - return mat<4, 4, T, Q>(mat3_cast(q)); - } - - template - GLM_FUNC_QUALIFIER qua quat_cast(mat<3, 3, T, Q> const& m) - { - T fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2]; - T fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2]; - T fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1]; - T fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2]; - - int biggestIndex = 0; - T fourBiggestSquaredMinus1 = fourWSquaredMinus1; - if(fourXSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourXSquaredMinus1; - biggestIndex = 1; - } - if(fourYSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourYSquaredMinus1; - biggestIndex = 2; - } - if(fourZSquaredMinus1 > fourBiggestSquaredMinus1) - { - fourBiggestSquaredMinus1 = fourZSquaredMinus1; - biggestIndex = 3; - } - - T biggestVal = sqrt(fourBiggestSquaredMinus1 + static_cast(1)) * static_cast(0.5); - T mult = static_cast(0.25) / biggestVal; - - switch(biggestIndex) - { - case 0: - return qua(biggestVal, (m[1][2] - m[2][1]) * mult, (m[2][0] - m[0][2]) * mult, (m[0][1] - m[1][0]) * mult); - case 1: - return qua((m[1][2] - m[2][1]) * mult, biggestVal, (m[0][1] + m[1][0]) * mult, (m[2][0] + m[0][2]) * mult); - case 2: - return qua((m[2][0] - m[0][2]) * mult, (m[0][1] + m[1][0]) * mult, biggestVal, (m[1][2] + m[2][1]) * mult); - case 3: - return qua((m[0][1] - m[1][0]) * mult, (m[2][0] + m[0][2]) * mult, (m[1][2] + m[2][1]) * mult, biggestVal); - default: // Silence a -Wswitch-default warning in GCC. Should never actually get here. Assert is just for sanity. - assert(false); - return qua(1, 0, 0, 0); - } - } - - template - GLM_FUNC_QUALIFIER qua quat_cast(mat<4, 4, T, Q> const& m4) - { - return quat_cast(mat<3, 3, T, Q>(m4)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThan(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] < y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> lessThanEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] <= y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThan(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] > y[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> greaterThanEqual(qua const& x, qua const& y) - { - vec<4, bool, Q> Result; - for(length_t i = 0; i < x.length(); ++i) - Result[i] = x[i] >= y[i]; - return Result; - } - - - template - GLM_FUNC_QUALIFIER qua quatLookAt(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { -# if GLM_CONFIG_CLIP_CONTROL & GLM_CLIP_CONTROL_LH_BIT - return quatLookAtLH(direction, up); -# else - return quatLookAtRH(direction, up); -# endif - } - - template - GLM_FUNC_QUALIFIER qua quatLookAtRH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { - mat<3, 3, T, Q> Result; - - Result[2] = -direction; - vec<3, T, Q> const& Right = cross(up, Result[2]); - Result[0] = Right * inversesqrt(max(static_cast(0.00001), dot(Right, Right))); - Result[1] = cross(Result[2], Result[0]); - - return quat_cast(Result); - } - - template - GLM_FUNC_QUALIFIER qua quatLookAtLH(vec<3, T, Q> const& direction, vec<3, T, Q> const& up) - { - mat<3, 3, T, Q> Result; - - Result[2] = direction; - vec<3, T, Q> const& Right = cross(up, Result[2]); - Result[0] = Right * inversesqrt(max(static_cast(0.00001), dot(Right, Right))); - Result[1] = cross(Result[2], Result[0]); - - return quat_cast(Result); - } -}//namespace glm - -#if GLM_CONFIG_SIMD == GLM_ENABLE -# include "quaternion_simd.inl" -#endif - diff --git a/src/qged/display/glm/glm/gtc/quaternion_simd.inl b/src/qged/display/glm/glm/gtc/quaternion_simd.inl deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/src/qged/display/glm/glm/gtc/random.hpp b/src/qged/display/glm/glm/gtc/random.hpp deleted file mode 100644 index 2c5a3665a13..00000000000 --- a/src/qged/display/glm/glm/gtc/random.hpp +++ /dev/null @@ -1,113 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_random -/// @file glm/gtc/random.hpp -/// -/// @see core (dependence) -/// @see gtx_random (extended) -/// -/// @defgroup gtc_random GLM_GTC_random -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Generate random number from various distribution methods. - -#pragma once - -// Dependency: -#include "../ext/scalar_int_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_random extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_random - /// @{ - - /// Generate random numbers in the interval [Min, Max], according a linear distribution - /// - /// @param Min Minimum value included in the sampling - /// @param Max Maximum value included in the sampling - /// @tparam genType Value type. Currently supported: float or double scalars. - /// @see gtc_random - template - GLM_FUNC_DECL genType linearRand(genType Min, genType Max); - - /// Generate random numbers in the interval [Min, Max], according a linear distribution - /// - /// @param Min Minimum value included in the sampling - /// @param Max Maximum value included in the sampling - /// @tparam T Value type. Currently supported: float or double. - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec linearRand(vec const& Min, vec const& Max); - - /// Generate random numbers in the interval [Min, Max], according a gaussian distribution - /// - /// @see gtc_random - template - GLM_FUNC_DECL genType gaussRand(genType Mean, genType Deviation); - - /// Generate a random 2D vector which coordinates are regulary distributed on a circle of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<2, T, defaultp> circularRand(T Radius); - - /// Generate a random 3D vector which coordinates are regulary distributed on a sphere of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<3, T, defaultp> sphericalRand(T Radius); - - /// Generate a random 2D vector which coordinates are regulary distributed within the area of a disk of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<2, T, defaultp> diskRand(T Radius); - - /// Generate a random 3D vector which coordinates are regulary distributed within the volume of a ball of a given radius - /// - /// @see gtc_random - template - GLM_FUNC_DECL vec<3, T, defaultp> ballRand(T Radius); - - /// @} -}//namespace glm - -#include "random.inl" diff --git a/src/qged/display/glm/glm/gtc/random.inl b/src/qged/display/glm/glm/gtc/random.inl deleted file mode 100644 index 704850987c6..00000000000 --- a/src/qged/display/glm/glm/gtc/random.inl +++ /dev/null @@ -1,303 +0,0 @@ -#include "../geometric.hpp" -#include "../exponential.hpp" -#include "../trigonometric.hpp" -#include "../detail/type_vec1.hpp" -#include -#include -#include -#include - -namespace glm{ -namespace detail -{ - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call(); - }; - - template - struct compute_rand<1, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<1, uint8, P> call() - { - return vec<1, uint8, P>( - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<2, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<2, uint8, P> call() - { - return vec<2, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<3, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<3, uint8, P> call() - { - return vec<3, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand<4, uint8, P> - { - GLM_FUNC_QUALIFIER static vec<4, uint8, P> call() - { - return vec<4, uint8, P>( - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max(), - std::rand() % std::numeric_limits::max()); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(8)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(16)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_rand - { - GLM_FUNC_QUALIFIER static vec call() - { - return - (vec(compute_rand::call()) << static_cast(32)) | - (vec(compute_rand::call()) << static_cast(0)); - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max); - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (vec(compute_rand::call() % vec(Max + static_cast(1) - Min))) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return (compute_rand::call() % (Max + static_cast(1) - Min)) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; - - template - struct compute_linearRand - { - GLM_FUNC_QUALIFIER static vec call(vec const& Min, vec const& Max) - { - return vec(compute_rand::call()) / static_cast(std::numeric_limits::max()) * (Max - Min) + Min; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER genType linearRand(genType Min, genType Max) - { - return detail::compute_linearRand<1, genType, highp>::call( - vec<1, genType, highp>(Min), - vec<1, genType, highp>(Max)).x; - } - - template - GLM_FUNC_QUALIFIER vec linearRand(vec const& Min, vec const& Max) - { - return detail::compute_linearRand::call(Min, Max); - } - - template - GLM_FUNC_QUALIFIER genType gaussRand(genType Mean, genType Deviation) - { - genType w, x1, x2; - - do - { - x1 = linearRand(genType(-1), genType(1)); - x2 = linearRand(genType(-1), genType(1)); - - w = x1 * x1 + x2 * x2; - } while(w > genType(1)); - - return static_cast(x2 * Deviation * Deviation * sqrt((genType(-2) * log(w)) / w) + Mean); - } - - template - GLM_FUNC_QUALIFIER vec gaussRand(vec const& Mean, vec const& Deviation) - { - return detail::functor2::call(gaussRand, Mean, Deviation); - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> diskRand(T Radius) - { - assert(Radius > static_cast(0)); - - vec<2, T, defaultp> Result(T(0)); - T LenRadius(T(0)); - - do - { - Result = linearRand( - vec<2, T, defaultp>(-Radius), - vec<2, T, defaultp>(Radius)); - LenRadius = length(Result); - } - while(LenRadius > Radius); - - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> ballRand(T Radius) - { - assert(Radius > static_cast(0)); - - vec<3, T, defaultp> Result(T(0)); - T LenRadius(T(0)); - - do - { - Result = linearRand( - vec<3, T, defaultp>(-Radius), - vec<3, T, defaultp>(Radius)); - LenRadius = length(Result); - } - while(LenRadius > Radius); - - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> circularRand(T Radius) - { - assert(Radius > static_cast(0)); - - T a = linearRand(T(0), static_cast(6.283185307179586476925286766559)); - return vec<2, T, defaultp>(glm::cos(a), glm::sin(a)) * Radius; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> sphericalRand(T Radius) - { - assert(Radius > static_cast(0)); - - T theta = linearRand(T(0), T(6.283185307179586476925286766559f)); - T phi = std::acos(linearRand(T(-1.0f), T(1.0f))); - - T x = std::sin(phi) * std::cos(theta); - T y = std::sin(phi) * std::sin(theta); - T z = std::cos(phi); - - return vec<3, T, defaultp>(x, y, z) * Radius; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/reciprocal.hpp b/src/qged/display/glm/glm/gtc/reciprocal.hpp deleted file mode 100644 index 6520edee84a..00000000000 --- a/src/qged/display/glm/glm/gtc/reciprocal.hpp +++ /dev/null @@ -1,166 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_reciprocal -/// @file glm/gtc/reciprocal.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_reciprocal GLM_GTC_reciprocal -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Define secant, cosecant and cotangent functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_reciprocal extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_reciprocal - /// @{ - - /// Secant function. - /// hypotenuse / adjacent or 1 / cos(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType sec(genType angle); - - /// Cosecant function. - /// hypotenuse / opposite or 1 / sin(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType csc(genType angle); - - /// Cotangent function. - /// adjacent / opposite or 1 / tan(x) - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType cot(genType angle); - - /// Inverse secant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType asec(genType x); - - /// Inverse cosecant function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acsc(genType x); - - /// Inverse cotangent function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acot(genType x); - - /// Secant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType sech(genType angle); - - /// Cosecant hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType csch(genType angle); - - /// Cotangent hyperbolic function. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType coth(genType angle); - - /// Inverse secant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType asech(genType x); - - /// Inverse cosecant hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acsch(genType x); - - /// Inverse cotangent hyperbolic function. - /// - /// @return Return an angle expressed in radians. - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see gtc_reciprocal - template - GLM_FUNC_DECL genType acoth(genType x); - - /// @} -}//namespace glm - -#include "reciprocal.inl" diff --git a/src/qged/display/glm/glm/gtc/reciprocal.inl b/src/qged/display/glm/glm/gtc/reciprocal.inl deleted file mode 100644 index d88729e88f4..00000000000 --- a/src/qged/display/glm/glm/gtc/reciprocal.inl +++ /dev/null @@ -1,191 +0,0 @@ -/// @ref gtc_reciprocal - -#include "../trigonometric.hpp" -#include - -namespace glm -{ - // sec - template - GLM_FUNC_QUALIFIER genType sec(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point values"); - return genType(1) / glm::cos(angle); - } - - template - GLM_FUNC_QUALIFIER vec sec(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sec' only accept floating-point inputs"); - return detail::functor1::call(sec, x); - } - - // csc - template - GLM_FUNC_QUALIFIER genType csc(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point values"); - return genType(1) / glm::sin(angle); - } - - template - GLM_FUNC_QUALIFIER vec csc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csc' only accept floating-point inputs"); - return detail::functor1::call(csc, x); - } - - // cot - template - GLM_FUNC_QUALIFIER genType cot(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point values"); - - genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); - return glm::tan(pi_over_2 - angle); - } - - template - GLM_FUNC_QUALIFIER vec cot(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cot' only accept floating-point inputs"); - return detail::functor1::call(cot, x); - } - - // asec - template - GLM_FUNC_QUALIFIER genType asec(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point values"); - return acos(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec asec(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asec' only accept floating-point inputs"); - return detail::functor1::call(asec, x); - } - - // acsc - template - GLM_FUNC_QUALIFIER genType acsc(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point values"); - return asin(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec acsc(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsc' only accept floating-point inputs"); - return detail::functor1::call(acsc, x); - } - - // acot - template - GLM_FUNC_QUALIFIER genType acot(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point values"); - - genType const pi_over_2 = genType(3.1415926535897932384626433832795 / 2.0); - return pi_over_2 - atan(x); - } - - template - GLM_FUNC_QUALIFIER vec acot(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acot' only accept floating-point inputs"); - return detail::functor1::call(acot, x); - } - - // sech - template - GLM_FUNC_QUALIFIER genType sech(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point values"); - return genType(1) / glm::cosh(angle); - } - - template - GLM_FUNC_QUALIFIER vec sech(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'sech' only accept floating-point inputs"); - return detail::functor1::call(sech, x); - } - - // csch - template - GLM_FUNC_QUALIFIER genType csch(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point values"); - return genType(1) / glm::sinh(angle); - } - - template - GLM_FUNC_QUALIFIER vec csch(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'csch' only accept floating-point inputs"); - return detail::functor1::call(csch, x); - } - - // coth - template - GLM_FUNC_QUALIFIER genType coth(genType angle) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point values"); - return glm::cosh(angle) / glm::sinh(angle); - } - - template - GLM_FUNC_QUALIFIER vec coth(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'coth' only accept floating-point inputs"); - return detail::functor1::call(coth, x); - } - - // asech - template - GLM_FUNC_QUALIFIER genType asech(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point values"); - return acosh(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec asech(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'asech' only accept floating-point inputs"); - return detail::functor1::call(asech, x); - } - - // acsch - template - GLM_FUNC_QUALIFIER genType acsch(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point values"); - return asinh(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec acsch(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acsch' only accept floating-point inputs"); - return detail::functor1::call(acsch, x); - } - - // acoth - template - GLM_FUNC_QUALIFIER genType acoth(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point values"); - return atanh(genType(1) / x); - } - - template - GLM_FUNC_QUALIFIER vec acoth(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'acoth' only accept floating-point inputs"); - return detail::functor1::call(acoth, x); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/round.hpp b/src/qged/display/glm/glm/gtc/round.hpp deleted file mode 100644 index cd2cb5572fb..00000000000 --- a/src/qged/display/glm/glm/gtc/round.hpp +++ /dev/null @@ -1,191 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_round -/// @file glm/gtc/round.hpp -/// -/// @see core (dependence) -/// @see gtc_round (dependence) -/// -/// @defgroup gtc_round GLM_GTC_round -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Rounding value to specific boundings - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../vector_relational.hpp" -#include "../common.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_round extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_round - /// @{ - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType ceilPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just higher the input value, - /// round up to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec ceilPowerOfTwo(vec const& v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType floorPowerOfTwo(genIUType v); - - /// Return the power of two number which value is just lower the input value, - /// round down to a power of two. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec floorPowerOfTwo(vec const& v); - - /// Return the power of two number which value is the closet to the input value. - /// - /// @see gtc_round - template - GLM_FUNC_DECL genIUType roundPowerOfTwo(genIUType v); - - /// Return the power of two number which value is the closet to the input value. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec roundPowerOfTwo(vec const& v); - - /// Higher multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType ceilMultiple(genType v, genType Multiple); - - /// Higher multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec ceilMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType floorMultiple(genType v, genType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec floorMultiple(vec const& v, vec const& Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam genType Floating-point or integer scalar or vector types. - /// - /// @param v Source value to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL genType roundMultiple(genType v, genType Multiple); - - /// Lower multiple number of Source. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @param v Source values to which is applied the function - /// @param Multiple Must be a null or positive value - /// - /// @see gtc_round - template - GLM_FUNC_DECL vec roundMultiple(vec const& v, vec const& Multiple); - - /// @} -} //namespace glm - -#include "round.inl" diff --git a/src/qged/display/glm/glm/gtc/round.inl b/src/qged/display/glm/glm/gtc/round.inl deleted file mode 100644 index 48411e41dc3..00000000000 --- a/src/qged/display/glm/glm/gtc/round.inl +++ /dev/null @@ -1,155 +0,0 @@ -/// @ref gtc_round - -#include "../integer.hpp" -#include "../ext/vector_integer.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_roundMultiple {}; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - std::fmod(Source, Multiple); - else - { - genType Tmp = Source + genType(1); - return Tmp - std::fmod(Tmp, Multiple) - Multiple; - } - } - }; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; - - template<> - struct compute_roundMultiple - { - template - GLM_FUNC_QUALIFIER static genType call(genType Source, genType Multiple) - { - if (Source >= genType(0)) - return Source - Source % Multiple; - else - { - genType Tmp = Source + genType(1); - return Tmp - Tmp % Multiple - Multiple; - } - } - }; -}//namespace detail - - ////////////////// - // ceilPowerOfTwo - - template - GLM_FUNC_QUALIFIER genType ceilPowerOfTwo(genType value) - { - return detail::compute_ceilPowerOfTwo<1, genType, defaultp, std::numeric_limits::is_signed>::call(vec<1, genType, defaultp>(value)).x; - } - - template - GLM_FUNC_QUALIFIER vec ceilPowerOfTwo(vec const& v) - { - return detail::compute_ceilPowerOfTwo::is_signed>::call(v); - } - - /////////////////// - // floorPowerOfTwo - - template - GLM_FUNC_QUALIFIER genType floorPowerOfTwo(genType value) - { - return isPowerOfTwo(value) ? value : static_cast(1) << findMSB(value); - } - - template - GLM_FUNC_QUALIFIER vec floorPowerOfTwo(vec const& v) - { - return detail::functor1::call(floorPowerOfTwo, v); - } - - /////////////////// - // roundPowerOfTwo - - template - GLM_FUNC_QUALIFIER genIUType roundPowerOfTwo(genIUType value) - { - if(isPowerOfTwo(value)) - return value; - - genIUType const prev = static_cast(1) << findMSB(value); - genIUType const next = prev << static_cast(1); - return (next - value) < (value - prev) ? next : prev; - } - - template - GLM_FUNC_QUALIFIER vec roundPowerOfTwo(vec const& v) - { - return detail::functor1::call(roundPowerOfTwo, v); - } - - ////////////////////// - // ceilMultiple - - template - GLM_FUNC_QUALIFIER genType ceilMultiple(genType Source, genType Multiple) - { - return detail::compute_ceilMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec ceilMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(ceilMultiple, Source, Multiple); - } - - ////////////////////// - // floorMultiple - - template - GLM_FUNC_QUALIFIER genType floorMultiple(genType Source, genType Multiple) - { - return detail::compute_floorMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec floorMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(floorMultiple, Source, Multiple); - } - - ////////////////////// - // roundMultiple - - template - GLM_FUNC_QUALIFIER genType roundMultiple(genType Source, genType Multiple) - { - return detail::compute_roundMultiple::is_iec559, std::numeric_limits::is_signed>::call(Source, Multiple); - } - - template - GLM_FUNC_QUALIFIER vec roundMultiple(vec const& Source, vec const& Multiple) - { - return detail::functor2::call(roundMultiple, Source, Multiple); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/type_aligned.hpp b/src/qged/display/glm/glm/gtc/type_aligned.hpp deleted file mode 100644 index 81e13a43435..00000000000 --- a/src/qged/display/glm/glm/gtc/type_aligned.hpp +++ /dev/null @@ -1,1346 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_type_aligned -/// @file glm/gtc/type_aligned.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_type_aligned GLM_GTC_type_aligned -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Aligned types allowing SIMD optimizations of vectors and matrices types - -#pragma once - -#if (GLM_CONFIG_ALIGNED_GENTYPES == GLM_DISABLE) -# error "GLM: Aligned gentypes require to enable C++ language extensions. Define GLM_FORCE_ALIGNED_GENTYPES before including GLM headers to use aligned types." -#endif - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_aligned extension included") -#endif - -#include "../mat4x4.hpp" -#include "../mat4x3.hpp" -#include "../mat4x2.hpp" -#include "../mat3x4.hpp" -#include "../mat3x3.hpp" -#include "../mat3x2.hpp" -#include "../mat2x4.hpp" -#include "../mat2x3.hpp" -#include "../mat2x2.hpp" -#include "../gtc/vec1.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" - -namespace glm -{ - /// @addtogroup gtc_type_aligned - /// @{ - - // -- *vec1 -- - - /// 1 component vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_highp> aligned_highp_vec1; - - /// 1 component vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_mediump> aligned_mediump_vec1; - - /// 1 component vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, aligned_lowp> aligned_lowp_vec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_highp> aligned_highp_dvec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_mediump> aligned_mediump_dvec1; - - /// 1 component vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, aligned_lowp> aligned_lowp_dvec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_highp> aligned_highp_ivec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_mediump> aligned_mediump_ivec1; - - /// 1 component vector aligned in memory of signed integer numbers. - typedef vec<1, int, aligned_lowp> aligned_lowp_ivec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_highp> aligned_highp_uvec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_mediump> aligned_mediump_uvec1; - - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef vec<1, uint, aligned_lowp> aligned_lowp_uvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_highp> aligned_highp_bvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_mediump> aligned_mediump_bvec1; - - /// 1 component vector aligned in memory of bool values. - typedef vec<1, bool, aligned_lowp> aligned_lowp_bvec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, float, packed_highp> packed_highp_vec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, float, packed_mediump> packed_mediump_vec1; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, float, packed_lowp> packed_lowp_vec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<1, double, packed_highp> packed_highp_dvec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<1, double, packed_mediump> packed_mediump_dvec1; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<1, double, packed_lowp> packed_lowp_dvec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_highp> packed_highp_ivec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_mediump> packed_mediump_ivec1; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef vec<1, int, packed_lowp> packed_lowp_ivec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_highp> packed_highp_uvec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_mediump> packed_mediump_uvec1; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef vec<1, uint, packed_lowp> packed_lowp_uvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_highp> packed_highp_bvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_mediump> packed_mediump_bvec1; - - /// 1 component vector tightly packed in memory of bool values. - typedef vec<1, bool, packed_lowp> packed_lowp_bvec1; - - // -- *vec2 -- - - /// 2 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_highp> aligned_highp_vec2; - - /// 2 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_mediump> aligned_mediump_vec2; - - /// 2 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, float, aligned_lowp> aligned_lowp_vec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_highp> aligned_highp_dvec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_mediump> aligned_mediump_dvec2; - - /// 2 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, double, aligned_lowp> aligned_lowp_dvec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_highp> aligned_highp_ivec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_mediump> aligned_mediump_ivec2; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef vec<2, int, aligned_lowp> aligned_lowp_ivec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_highp> aligned_highp_uvec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_mediump> aligned_mediump_uvec2; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef vec<2, uint, aligned_lowp> aligned_lowp_uvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_highp> aligned_highp_bvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_mediump> aligned_mediump_bvec2; - - /// 2 components vector aligned in memory of bool values. - typedef vec<2, bool, aligned_lowp> aligned_lowp_bvec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, float, packed_highp> packed_highp_vec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, float, packed_mediump> packed_mediump_vec2; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, float, packed_lowp> packed_lowp_vec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<2, double, packed_highp> packed_highp_dvec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<2, double, packed_mediump> packed_mediump_dvec2; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<2, double, packed_lowp> packed_lowp_dvec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_highp> packed_highp_ivec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_mediump> packed_mediump_ivec2; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef vec<2, int, packed_lowp> packed_lowp_ivec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_highp> packed_highp_uvec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_mediump> packed_mediump_uvec2; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<2, uint, packed_lowp> packed_lowp_uvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_highp> packed_highp_bvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_mediump> packed_mediump_bvec2; - - /// 2 components vector tightly packed in memory of bool values. - typedef vec<2, bool, packed_lowp> packed_lowp_bvec2; - - // -- *vec3 -- - - /// 3 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_highp> aligned_highp_vec3; - - /// 3 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_mediump> aligned_mediump_vec3; - - /// 3 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, float, aligned_lowp> aligned_lowp_vec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_highp> aligned_highp_dvec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_mediump> aligned_mediump_dvec3; - - /// 3 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, double, aligned_lowp> aligned_lowp_dvec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_highp> aligned_highp_ivec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_mediump> aligned_mediump_ivec3; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef vec<3, int, aligned_lowp> aligned_lowp_ivec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_highp> aligned_highp_uvec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_mediump> aligned_mediump_uvec3; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef vec<3, uint, aligned_lowp> aligned_lowp_uvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_highp> aligned_highp_bvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_mediump> aligned_mediump_bvec3; - - /// 3 components vector aligned in memory of bool values. - typedef vec<3, bool, aligned_lowp> aligned_lowp_bvec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, float, packed_highp> packed_highp_vec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, float, packed_mediump> packed_mediump_vec3; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, float, packed_lowp> packed_lowp_vec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<3, double, packed_highp> packed_highp_dvec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<3, double, packed_mediump> packed_mediump_dvec3; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<3, double, packed_lowp> packed_lowp_dvec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_highp> packed_highp_ivec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_mediump> packed_mediump_ivec3; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef vec<3, int, packed_lowp> packed_lowp_ivec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_highp> packed_highp_uvec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_mediump> packed_mediump_uvec3; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<3, uint, packed_lowp> packed_lowp_uvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_highp> packed_highp_bvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_mediump> packed_mediump_bvec3; - - /// 3 components vector tightly packed in memory of bool values. - typedef vec<3, bool, packed_lowp> packed_lowp_bvec3; - - // -- *vec4 -- - - /// 4 components vector aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_highp> aligned_highp_vec4; - - /// 4 components vector aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_mediump> aligned_mediump_vec4; - - /// 4 components vector aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, float, aligned_lowp> aligned_lowp_vec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_highp> aligned_highp_dvec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_mediump> aligned_mediump_dvec4; - - /// 4 components vector aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, double, aligned_lowp> aligned_lowp_dvec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_highp> aligned_highp_ivec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_mediump> aligned_mediump_ivec4; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef vec<4, int, aligned_lowp> aligned_lowp_ivec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_highp> aligned_highp_uvec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_mediump> aligned_mediump_uvec4; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef vec<4, uint, aligned_lowp> aligned_lowp_uvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_highp> aligned_highp_bvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_mediump> aligned_mediump_bvec4; - - /// 4 components vector aligned in memory of bool values. - typedef vec<4, bool, aligned_lowp> aligned_lowp_bvec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, float, packed_highp> packed_highp_vec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, float, packed_mediump> packed_mediump_vec4; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, float, packed_lowp> packed_lowp_vec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef vec<4, double, packed_highp> packed_highp_dvec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef vec<4, double, packed_mediump> packed_mediump_dvec4; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef vec<4, double, packed_lowp> packed_lowp_dvec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_highp> packed_highp_ivec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_mediump> packed_mediump_ivec4; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef vec<4, int, packed_lowp> packed_lowp_ivec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_highp> packed_highp_uvec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_mediump> packed_mediump_uvec4; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef vec<4, uint, packed_lowp> packed_lowp_uvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_highp> packed_highp_bvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_mediump> packed_mediump_bvec4; - - /// 4 components vector tightly packed in memory of bool values. - typedef vec<4, bool, packed_lowp> packed_lowp_bvec4; - - // -- *mat2 -- - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_highp> packed_highp_mat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_highp> packed_highp_dmat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2; - - // -- *mat3 -- - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_highp> packed_highp_mat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_highp> packed_highp_dmat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3; - - // -- *mat4 -- - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_highp> packed_highp_mat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_highp> packed_highp_dmat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4; - - // -- *mat2x2 -- - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_highp> aligned_highp_mat2x2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_mediump> aligned_mediump_mat2x2; - - /// 2 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, aligned_lowp> aligned_lowp_mat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_highp> aligned_highp_dmat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_mediump> aligned_mediump_dmat2x2; - - /// 2 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, aligned_lowp> aligned_lowp_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_highp> packed_highp_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_mediump> packed_mediump_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, float, packed_lowp> packed_lowp_mat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_highp> packed_highp_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_mediump> packed_mediump_dmat2x2; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 2, double, packed_lowp> packed_lowp_dmat2x2; - - // -- *mat2x3 -- - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_highp> aligned_highp_mat2x3; - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_mediump> aligned_mediump_mat2x3; - - /// 2 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, float, aligned_lowp> aligned_lowp_mat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_highp> aligned_highp_dmat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_mediump> aligned_mediump_dmat2x3; - - /// 2 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, double, aligned_lowp> aligned_lowp_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_highp> packed_highp_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_mediump> packed_mediump_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, float, packed_lowp> packed_lowp_mat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_highp> packed_highp_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_mediump> packed_mediump_dmat2x3; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 3, double, packed_lowp> packed_lowp_dmat2x3; - - // -- *mat2x4 -- - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_highp> aligned_highp_mat2x4; - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_mediump> aligned_mediump_mat2x4; - - /// 2 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, float, aligned_lowp> aligned_lowp_mat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_highp> aligned_highp_dmat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_mediump> aligned_mediump_dmat2x4; - - /// 2 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, double, aligned_lowp> aligned_lowp_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_highp> packed_highp_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_mediump> packed_mediump_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, float, packed_lowp> packed_lowp_mat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_highp> packed_highp_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_mediump> packed_mediump_dmat2x4; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<2, 4, double, packed_lowp> packed_lowp_dmat2x4; - - // -- *mat3x2 -- - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_highp> aligned_highp_mat3x2; - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_mediump> aligned_mediump_mat3x2; - - /// 3 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, float, aligned_lowp> aligned_lowp_mat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_highp> aligned_highp_dmat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_mediump> aligned_mediump_dmat3x2; - - /// 3 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, double, aligned_lowp> aligned_lowp_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_highp> packed_highp_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_mediump> packed_mediump_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, float, packed_lowp> packed_lowp_mat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_highp> packed_highp_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_mediump> packed_mediump_dmat3x2; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 2, double, packed_lowp> packed_lowp_dmat3x2; - - // -- *mat3x3 -- - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_highp> aligned_highp_mat3x3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_mediump> aligned_mediump_mat3x3; - - /// 3 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, aligned_lowp> aligned_lowp_mat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_highp> aligned_highp_dmat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_mediump> aligned_mediump_dmat3x3; - - /// 3 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, aligned_lowp> aligned_lowp_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_highp> packed_highp_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_mediump> packed_mediump_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, float, packed_lowp> packed_lowp_mat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_highp> packed_highp_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_mediump> packed_mediump_dmat3x3; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 3, double, packed_lowp> packed_lowp_dmat3x3; - - // -- *mat3x4 -- - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_highp> aligned_highp_mat3x4; - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_mediump> aligned_mediump_mat3x4; - - /// 3 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, float, aligned_lowp> aligned_lowp_mat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_highp> aligned_highp_dmat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_mediump> aligned_mediump_dmat3x4; - - /// 3 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, double, aligned_lowp> aligned_lowp_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_highp> packed_highp_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_mediump> packed_mediump_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, float, packed_lowp> packed_lowp_mat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_highp> packed_highp_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_mediump> packed_mediump_dmat3x4; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<3, 4, double, packed_lowp> packed_lowp_dmat3x4; - - // -- *mat4x2 -- - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_highp> aligned_highp_mat4x2; - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_mediump> aligned_mediump_mat4x2; - - /// 4 by 2 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, float, aligned_lowp> aligned_lowp_mat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_highp> aligned_highp_dmat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_mediump> aligned_mediump_dmat4x2; - - /// 4 by 2 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, double, aligned_lowp> aligned_lowp_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_highp> packed_highp_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_mediump> packed_mediump_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, float, packed_lowp> packed_lowp_mat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_highp> packed_highp_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_mediump> packed_mediump_dmat4x2; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 2, double, packed_lowp> packed_lowp_dmat4x2; - - // -- *mat4x3 -- - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_highp> aligned_highp_mat4x3; - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_mediump> aligned_mediump_mat4x3; - - /// 4 by 3 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, float, aligned_lowp> aligned_lowp_mat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_highp> aligned_highp_dmat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_mediump> aligned_mediump_dmat4x3; - - /// 4 by 3 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, double, aligned_lowp> aligned_lowp_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_highp> packed_highp_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_mediump> packed_mediump_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, float, packed_lowp> packed_lowp_mat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_highp> packed_highp_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_mediump> packed_mediump_dmat4x3; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 3, double, packed_lowp> packed_lowp_dmat4x3; - - // -- *mat4x4 -- - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_highp> aligned_highp_mat4x4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_mediump> aligned_mediump_mat4x4; - - /// 4 by 4 matrix aligned in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, aligned_lowp> aligned_lowp_mat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_highp> aligned_highp_dmat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_mediump> aligned_mediump_dmat4x4; - - /// 4 by 4 matrix aligned in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, aligned_lowp> aligned_lowp_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_highp> packed_highp_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_mediump> packed_mediump_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, float, packed_lowp> packed_lowp_mat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using high precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_highp> packed_highp_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using medium precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_mediump> packed_mediump_dmat4x4; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers using low precision arithmetic in term of ULPs. - typedef mat<4, 4, double, packed_lowp> packed_lowp_dmat4x4; - - // -- default -- - -#if(defined(GLM_PRECISION_LOWP_FLOAT)) - typedef aligned_lowp_vec1 aligned_vec1; - typedef aligned_lowp_vec2 aligned_vec2; - typedef aligned_lowp_vec3 aligned_vec3; - typedef aligned_lowp_vec4 aligned_vec4; - typedef packed_lowp_vec1 packed_vec1; - typedef packed_lowp_vec2 packed_vec2; - typedef packed_lowp_vec3 packed_vec3; - typedef packed_lowp_vec4 packed_vec4; - - typedef aligned_lowp_mat2 aligned_mat2; - typedef aligned_lowp_mat3 aligned_mat3; - typedef aligned_lowp_mat4 aligned_mat4; - typedef packed_lowp_mat2 packed_mat2; - typedef packed_lowp_mat3 packed_mat3; - typedef packed_lowp_mat4 packed_mat4; - - typedef aligned_lowp_mat2x2 aligned_mat2x2; - typedef aligned_lowp_mat2x3 aligned_mat2x3; - typedef aligned_lowp_mat2x4 aligned_mat2x4; - typedef aligned_lowp_mat3x2 aligned_mat3x2; - typedef aligned_lowp_mat3x3 aligned_mat3x3; - typedef aligned_lowp_mat3x4 aligned_mat3x4; - typedef aligned_lowp_mat4x2 aligned_mat4x2; - typedef aligned_lowp_mat4x3 aligned_mat4x3; - typedef aligned_lowp_mat4x4 aligned_mat4x4; - typedef packed_lowp_mat2x2 packed_mat2x2; - typedef packed_lowp_mat2x3 packed_mat2x3; - typedef packed_lowp_mat2x4 packed_mat2x4; - typedef packed_lowp_mat3x2 packed_mat3x2; - typedef packed_lowp_mat3x3 packed_mat3x3; - typedef packed_lowp_mat3x4 packed_mat3x4; - typedef packed_lowp_mat4x2 packed_mat4x2; - typedef packed_lowp_mat4x3 packed_mat4x3; - typedef packed_lowp_mat4x4 packed_mat4x4; -#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) - typedef aligned_mediump_vec1 aligned_vec1; - typedef aligned_mediump_vec2 aligned_vec2; - typedef aligned_mediump_vec3 aligned_vec3; - typedef aligned_mediump_vec4 aligned_vec4; - typedef packed_mediump_vec1 packed_vec1; - typedef packed_mediump_vec2 packed_vec2; - typedef packed_mediump_vec3 packed_vec3; - typedef packed_mediump_vec4 packed_vec4; - - typedef aligned_mediump_mat2 aligned_mat2; - typedef aligned_mediump_mat3 aligned_mat3; - typedef aligned_mediump_mat4 aligned_mat4; - typedef packed_mediump_mat2 packed_mat2; - typedef packed_mediump_mat3 packed_mat3; - typedef packed_mediump_mat4 packed_mat4; - - typedef aligned_mediump_mat2x2 aligned_mat2x2; - typedef aligned_mediump_mat2x3 aligned_mat2x3; - typedef aligned_mediump_mat2x4 aligned_mat2x4; - typedef aligned_mediump_mat3x2 aligned_mat3x2; - typedef aligned_mediump_mat3x3 aligned_mat3x3; - typedef aligned_mediump_mat3x4 aligned_mat3x4; - typedef aligned_mediump_mat4x2 aligned_mat4x2; - typedef aligned_mediump_mat4x3 aligned_mat4x3; - typedef aligned_mediump_mat4x4 aligned_mat4x4; - typedef packed_mediump_mat2x2 packed_mat2x2; - typedef packed_mediump_mat2x3 packed_mat2x3; - typedef packed_mediump_mat2x4 packed_mat2x4; - typedef packed_mediump_mat3x2 packed_mat3x2; - typedef packed_mediump_mat3x3 packed_mat3x3; - typedef packed_mediump_mat3x4 packed_mat3x4; - typedef packed_mediump_mat4x2 packed_mat4x2; - typedef packed_mediump_mat4x3 packed_mat4x3; - typedef packed_mediump_mat4x4 packed_mat4x4; -#else //defined(GLM_PRECISION_HIGHP_FLOAT) - /// 1 component vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec1 aligned_vec1; - - /// 2 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec2 aligned_vec2; - - /// 3 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec3 aligned_vec3; - - /// 4 components vector aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_vec4 aligned_vec4; - - /// 1 component vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec1 packed_vec1; - - /// 2 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec2 packed_vec2; - - /// 3 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec3 packed_vec3; - - /// 4 components vector tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_vec4 packed_vec4; - - /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2 aligned_mat2; - - /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3 aligned_mat3; - - /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4 aligned_mat4; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2 packed_mat2; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3 packed_mat3; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4 packed_mat4; - - /// 2 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x2 aligned_mat2x2; - - /// 2 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x3 aligned_mat2x3; - - /// 2 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat2x4 aligned_mat2x4; - - /// 3 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x2 aligned_mat3x2; - - /// 3 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x3 aligned_mat3x3; - - /// 3 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat3x4 aligned_mat3x4; - - /// 4 by 2 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x2 aligned_mat4x2; - - /// 4 by 3 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x3 aligned_mat4x3; - - /// 4 by 4 matrix tightly aligned in memory of single-precision floating-point numbers. - typedef aligned_highp_mat4x4 aligned_mat4x4; - - /// 2 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x2 packed_mat2x2; - - /// 2 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x3 packed_mat2x3; - - /// 2 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat2x4 packed_mat2x4; - - /// 3 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x2 packed_mat3x2; - - /// 3 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x3 packed_mat3x3; - - /// 3 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat3x4 packed_mat3x4; - - /// 4 by 2 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x2 packed_mat4x2; - - /// 4 by 3 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x3 packed_mat4x3; - - /// 4 by 4 matrix tightly packed in memory of single-precision floating-point numbers. - typedef packed_highp_mat4x4 packed_mat4x4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef aligned_lowp_dvec1 aligned_dvec1; - typedef aligned_lowp_dvec2 aligned_dvec2; - typedef aligned_lowp_dvec3 aligned_dvec3; - typedef aligned_lowp_dvec4 aligned_dvec4; - typedef packed_lowp_dvec1 packed_dvec1; - typedef packed_lowp_dvec2 packed_dvec2; - typedef packed_lowp_dvec3 packed_dvec3; - typedef packed_lowp_dvec4 packed_dvec4; - - typedef aligned_lowp_dmat2 aligned_dmat2; - typedef aligned_lowp_dmat3 aligned_dmat3; - typedef aligned_lowp_dmat4 aligned_dmat4; - typedef packed_lowp_dmat2 packed_dmat2; - typedef packed_lowp_dmat3 packed_dmat3; - typedef packed_lowp_dmat4 packed_dmat4; - - typedef aligned_lowp_dmat2x2 aligned_dmat2x2; - typedef aligned_lowp_dmat2x3 aligned_dmat2x3; - typedef aligned_lowp_dmat2x4 aligned_dmat2x4; - typedef aligned_lowp_dmat3x2 aligned_dmat3x2; - typedef aligned_lowp_dmat3x3 aligned_dmat3x3; - typedef aligned_lowp_dmat3x4 aligned_dmat3x4; - typedef aligned_lowp_dmat4x2 aligned_dmat4x2; - typedef aligned_lowp_dmat4x3 aligned_dmat4x3; - typedef aligned_lowp_dmat4x4 aligned_dmat4x4; - typedef packed_lowp_dmat2x2 packed_dmat2x2; - typedef packed_lowp_dmat2x3 packed_dmat2x3; - typedef packed_lowp_dmat2x4 packed_dmat2x4; - typedef packed_lowp_dmat3x2 packed_dmat3x2; - typedef packed_lowp_dmat3x3 packed_dmat3x3; - typedef packed_lowp_dmat3x4 packed_dmat3x4; - typedef packed_lowp_dmat4x2 packed_dmat4x2; - typedef packed_lowp_dmat4x3 packed_dmat4x3; - typedef packed_lowp_dmat4x4 packed_dmat4x4; -#elif(defined(GLM_PRECISION_MEDIUMP_DOUBLE)) - typedef aligned_mediump_dvec1 aligned_dvec1; - typedef aligned_mediump_dvec2 aligned_dvec2; - typedef aligned_mediump_dvec3 aligned_dvec3; - typedef aligned_mediump_dvec4 aligned_dvec4; - typedef packed_mediump_dvec1 packed_dvec1; - typedef packed_mediump_dvec2 packed_dvec2; - typedef packed_mediump_dvec3 packed_dvec3; - typedef packed_mediump_dvec4 packed_dvec4; - - typedef aligned_mediump_dmat2 aligned_dmat2; - typedef aligned_mediump_dmat3 aligned_dmat3; - typedef aligned_mediump_dmat4 aligned_dmat4; - typedef packed_mediump_dmat2 packed_dmat2; - typedef packed_mediump_dmat3 packed_dmat3; - typedef packed_mediump_dmat4 packed_dmat4; - - typedef aligned_mediump_dmat2x2 aligned_dmat2x2; - typedef aligned_mediump_dmat2x3 aligned_dmat2x3; - typedef aligned_mediump_dmat2x4 aligned_dmat2x4; - typedef aligned_mediump_dmat3x2 aligned_dmat3x2; - typedef aligned_mediump_dmat3x3 aligned_dmat3x3; - typedef aligned_mediump_dmat3x4 aligned_dmat3x4; - typedef aligned_mediump_dmat4x2 aligned_dmat4x2; - typedef aligned_mediump_dmat4x3 aligned_dmat4x3; - typedef aligned_mediump_dmat4x4 aligned_dmat4x4; - typedef packed_mediump_dmat2x2 packed_dmat2x2; - typedef packed_mediump_dmat2x3 packed_dmat2x3; - typedef packed_mediump_dmat2x4 packed_dmat2x4; - typedef packed_mediump_dmat3x2 packed_dmat3x2; - typedef packed_mediump_dmat3x3 packed_dmat3x3; - typedef packed_mediump_dmat3x4 packed_dmat3x4; - typedef packed_mediump_dmat4x2 packed_dmat4x2; - typedef packed_mediump_dmat4x3 packed_dmat4x3; - typedef packed_mediump_dmat4x4 packed_dmat4x4; -#else //defined(GLM_PRECISION_HIGHP_DOUBLE) - /// 1 component vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec1 aligned_dvec1; - - /// 2 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec2 aligned_dvec2; - - /// 3 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec3 aligned_dvec3; - - /// 4 components vector aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dvec4 aligned_dvec4; - - /// 1 component vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec1 packed_dvec1; - - /// 2 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec2 packed_dvec2; - - /// 3 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec3 packed_dvec3; - - /// 4 components vector tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dvec4 packed_dvec4; - - /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2 aligned_dmat2; - - /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3 aligned_dmat3; - - /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4 aligned_dmat4; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2 packed_dmat2; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3 packed_dmat3; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4 packed_dmat4; - - /// 2 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x2 aligned_dmat2x2; - - /// 2 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x3 aligned_dmat2x3; - - /// 2 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat2x4 aligned_dmat2x4; - - /// 3 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x2 aligned_dmat3x2; - - /// 3 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x3 aligned_dmat3x3; - - /// 3 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat3x4 aligned_dmat3x4; - - /// 4 by 2 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x2 aligned_dmat4x2; - - /// 4 by 3 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x3 aligned_dmat4x3; - - /// 4 by 4 matrix tightly aligned in memory of double-precision floating-point numbers. - typedef aligned_highp_dmat4x4 aligned_dmat4x4; - - /// 2 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x2 packed_dmat2x2; - - /// 2 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x3 packed_dmat2x3; - - /// 2 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat2x4 packed_dmat2x4; - - /// 3 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x2 packed_dmat3x2; - - /// 3 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x3 packed_dmat3x3; - - /// 3 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat3x4 packed_dmat3x4; - - /// 4 by 2 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x2 packed_dmat4x2; - - /// 4 by 3 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x3 packed_dmat4x3; - - /// 4 by 4 matrix tightly packed in memory of double-precision floating-point numbers. - typedef packed_highp_dmat4x4 packed_dmat4x4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_INT)) - typedef aligned_lowp_ivec1 aligned_ivec1; - typedef aligned_lowp_ivec2 aligned_ivec2; - typedef aligned_lowp_ivec3 aligned_ivec3; - typedef aligned_lowp_ivec4 aligned_ivec4; -#elif(defined(GLM_PRECISION_MEDIUMP_INT)) - typedef aligned_mediump_ivec1 aligned_ivec1; - typedef aligned_mediump_ivec2 aligned_ivec2; - typedef aligned_mediump_ivec3 aligned_ivec3; - typedef aligned_mediump_ivec4 aligned_ivec4; -#else //defined(GLM_PRECISION_HIGHP_INT) - /// 1 component vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec1 aligned_ivec1; - - /// 2 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec2 aligned_ivec2; - - /// 3 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec3 aligned_ivec3; - - /// 4 components vector aligned in memory of signed integer numbers. - typedef aligned_highp_ivec4 aligned_ivec4; - - /// 1 component vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec1 packed_ivec1; - - /// 2 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec2 packed_ivec2; - - /// 3 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec3 packed_ivec3; - - /// 4 components vector tightly packed in memory of signed integer numbers. - typedef packed_highp_ivec4 packed_ivec4; -#endif//GLM_PRECISION - - // -- Unsigned integer definition -- - -#if(defined(GLM_PRECISION_LOWP_UINT)) - typedef aligned_lowp_uvec1 aligned_uvec1; - typedef aligned_lowp_uvec2 aligned_uvec2; - typedef aligned_lowp_uvec3 aligned_uvec3; - typedef aligned_lowp_uvec4 aligned_uvec4; -#elif(defined(GLM_PRECISION_MEDIUMP_UINT)) - typedef aligned_mediump_uvec1 aligned_uvec1; - typedef aligned_mediump_uvec2 aligned_uvec2; - typedef aligned_mediump_uvec3 aligned_uvec3; - typedef aligned_mediump_uvec4 aligned_uvec4; -#else //defined(GLM_PRECISION_HIGHP_UINT) - /// 1 component vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec1 aligned_uvec1; - - /// 2 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec2 aligned_uvec2; - - /// 3 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec3 aligned_uvec3; - - /// 4 components vector aligned in memory of unsigned integer numbers. - typedef aligned_highp_uvec4 aligned_uvec4; - - /// 1 component vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec1 packed_uvec1; - - /// 2 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec2 packed_uvec2; - - /// 3 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec3 packed_uvec3; - - /// 4 components vector tightly packed in memory of unsigned integer numbers. - typedef packed_highp_uvec4 packed_uvec4; -#endif//GLM_PRECISION - -#if(defined(GLM_PRECISION_LOWP_BOOL)) - typedef aligned_lowp_bvec1 aligned_bvec1; - typedef aligned_lowp_bvec2 aligned_bvec2; - typedef aligned_lowp_bvec3 aligned_bvec3; - typedef aligned_lowp_bvec4 aligned_bvec4; -#elif(defined(GLM_PRECISION_MEDIUMP_BOOL)) - typedef aligned_mediump_bvec1 aligned_bvec1; - typedef aligned_mediump_bvec2 aligned_bvec2; - typedef aligned_mediump_bvec3 aligned_bvec3; - typedef aligned_mediump_bvec4 aligned_bvec4; -#else //defined(GLM_PRECISION_HIGHP_BOOL) - /// 1 component vector aligned in memory of bool values. - typedef aligned_highp_bvec1 aligned_bvec1; - - /// 2 components vector aligned in memory of bool values. - typedef aligned_highp_bvec2 aligned_bvec2; - - /// 3 components vector aligned in memory of bool values. - typedef aligned_highp_bvec3 aligned_bvec3; - - /// 4 components vector aligned in memory of bool values. - typedef aligned_highp_bvec4 aligned_bvec4; - - /// 1 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec1 packed_bvec1; - - /// 2 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec2 packed_bvec2; - - /// 3 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec3 packed_bvec3; - - /// 4 components vector tightly packed in memory of bool values. - typedef packed_highp_bvec4 packed_bvec4; -#endif//GLM_PRECISION - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/gtc/type_precision.hpp b/src/qged/display/glm/glm/gtc/type_precision.hpp deleted file mode 100644 index 266c93f9571..00000000000 --- a/src/qged/display/glm/glm/gtc/type_precision.hpp +++ /dev/null @@ -1,2125 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_type_precision -/// @file glm/gtc/type_precision.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_type_precision GLM_GTC_type_precision -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Defines specific C++-based qualifier types. - -#pragma once - -// Dependency: -#include "../gtc/quaternion.hpp" -#include "../gtc/vec1.hpp" -#include "../ext/vector_int1_sized.hpp" -#include "../ext/vector_int2_sized.hpp" -#include "../ext/vector_int3_sized.hpp" -#include "../ext/vector_int4_sized.hpp" -#include "../ext/scalar_int_sized.hpp" -#include "../ext/vector_uint1_sized.hpp" -#include "../ext/vector_uint2_sized.hpp" -#include "../ext/vector_uint3_sized.hpp" -#include "../ext/vector_uint4_sized.hpp" -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/type_vec2.hpp" -#include "../detail/type_vec3.hpp" -#include "../detail/type_vec4.hpp" -#include "../detail/type_mat2x2.hpp" -#include "../detail/type_mat2x3.hpp" -#include "../detail/type_mat2x4.hpp" -#include "../detail/type_mat3x2.hpp" -#include "../detail/type_mat3x3.hpp" -#include "../detail/type_mat3x4.hpp" -#include "../detail/type_mat4x2.hpp" -#include "../detail/type_mat4x3.hpp" -#include "../detail/type_mat4x4.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_precision extension included") -#endif - -namespace glm -{ - /////////////////////////// - // Signed int vector types - - /// @addtogroup gtc_type_precision - /// @{ - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_int8; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_int16; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_int32; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_int64; - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_int8_t; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_int16_t; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_int32_t; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_int64_t; - - /// Low qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 lowp_i8; - - /// Low qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 lowp_i16; - - /// Low qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 lowp_i32; - - /// Low qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 lowp_i64; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_int8; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_int16; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_int32; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_int64; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_int8_t; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_int16_t; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_int32_t; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_int64_t; - - /// Medium qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 mediump_i8; - - /// Medium qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 mediump_i16; - - /// Medium qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 mediump_i32; - - /// Medium qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 mediump_i64; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_int8; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_int16; - - /// High qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_int32; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_int64; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_int8_t; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_int16_t; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_int32_t; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_int64_t; - - /// High qualifier 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 highp_i8; - - /// High qualifier 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 highp_i16; - - /// High qualifier 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 highp_i32; - - /// High qualifier 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 highp_i64; - - -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::int8_t; - using std::int16_t; - using std::int32_t; - using std::int64_t; -#else - /// 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 int8_t; - - /// 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 int16_t; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 int32_t; - - /// 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 int64_t; -#endif - - /// 8 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int8 i8; - - /// 16 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int16 i16; - - /// 32 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int32 i32; - - /// 64 bit signed integer type. - /// @see gtc_type_precision - typedef detail::int64 i64; - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_uint8; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_uint16; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_uint32; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_uint64; - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_uint8_t; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_uint16_t; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_uint32_t; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_uint64_t; - - /// Low qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 lowp_u8; - - /// Low qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 lowp_u16; - - /// Low qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 lowp_u32; - - /// Low qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 lowp_u64; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_uint8; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_uint16; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_uint32; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_uint64; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_uint8_t; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_uint16_t; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_uint32_t; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_uint64_t; - - /// Medium qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 mediump_u8; - - /// Medium qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 mediump_u16; - - /// Medium qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 mediump_u32; - - /// Medium qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 mediump_u64; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_uint8; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_uint16; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_uint32; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_uint64; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_uint8_t; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_uint16_t; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_uint32_t; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_uint64_t; - - /// High qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 highp_u8; - - /// High qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 highp_u16; - - /// High qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 highp_u32; - - /// High qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 highp_u64; - -#if GLM_HAS_EXTENDED_INTEGER_TYPE - using std::uint8_t; - using std::uint16_t; - using std::uint32_t; - using std::uint64_t; -#else - /// Default qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 uint8_t; - - /// Default qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 uint16_t; - - /// Default qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 uint32_t; - - /// Default qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 uint64_t; -#endif - - /// Default qualifier 8 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint8 u8; - - /// Default qualifier 16 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint16 u16; - - /// Default qualifier 32 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint32 u32; - - /// Default qualifier 64 bit unsigned integer type. - /// @see gtc_type_precision - typedef detail::uint64 u64; - - - - - - ////////////////////// - // Float vector types - - /// Single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float float32; - - /// Double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef double float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_float32_t; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_float64_t; - - /// Low 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 lowp_f32; - - /// Low 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 lowp_f64; - - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_float32; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_float64; - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_float32_t; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_float64_t; - - /// Medium 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 mediump_f32; - - /// Medium 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 mediump_f64; - - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_float32; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_float64; - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_float32_t; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_float64_t; - - /// High 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 highp_f32; - - /// High 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 highp_f64; - - -#if(defined(GLM_PRECISION_LOWP_FLOAT)) - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_float32_t float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_float64_t float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_f32 f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef lowp_f64 f64; - -#elif(defined(GLM_PRECISION_MEDIUMP_FLOAT)) - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float32 float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float64 float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float32 f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef mediump_float64 f64; - -#else//(defined(GLM_PRECISION_HIGHP_FLOAT)) - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float32_t float32_t; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float64_t float64_t; - - /// Default 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float32_t f32; - - /// Default 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef highp_float64_t f64; -#endif - - - /// Low single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, lowp> lowp_fvec1; - - /// Low single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, lowp> lowp_fvec2; - - /// Low single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, lowp> lowp_fvec3; - - /// Low single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, lowp> lowp_fvec4; - - - /// Medium single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, mediump> mediump_fvec1; - - /// Medium Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, mediump> mediump_fvec2; - - /// Medium Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, mediump> mediump_fvec3; - - /// Medium Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, mediump> mediump_fvec4; - - - /// High single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, highp> highp_fvec1; - - /// High Single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, float, highp> highp_fvec2; - - /// High Single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, float, highp> highp_fvec3; - - /// High Single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, float, highp> highp_fvec4; - - - /// Low single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, lowp> lowp_f32vec1; - - /// Low single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, f32, lowp> lowp_f32vec2; - - /// Low single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, f32, lowp> lowp_f32vec3; - - /// Low single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, f32, lowp> lowp_f32vec4; - - /// Medium single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, mediump> mediump_f32vec1; - - /// Medium single-qualifier floating-point vector of 2 components. - /// @see core_precision - typedef vec<2, f32, mediump> mediump_f32vec2; - - /// Medium single-qualifier floating-point vector of 3 components. - /// @see core_precision - typedef vec<3, f32, mediump> mediump_f32vec3; - - /// Medium single-qualifier floating-point vector of 4 components. - /// @see core_precision - typedef vec<4, f32, mediump> mediump_f32vec4; - - /// High single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, highp> highp_f32vec1; - - /// High single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f32, highp> highp_f32vec2; - - /// High single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f32, highp> highp_f32vec3; - - /// High single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f32, highp> highp_f32vec4; - - - /// Low double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, lowp> lowp_f64vec1; - - /// Low double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, lowp> lowp_f64vec2; - - /// Low double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, lowp> lowp_f64vec3; - - /// Low double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, lowp> lowp_f64vec4; - - /// Medium double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, mediump> mediump_f64vec1; - - /// Medium double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, mediump> mediump_f64vec2; - - /// Medium double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, mediump> mediump_f64vec3; - - /// Medium double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, mediump> mediump_f64vec4; - - /// High double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, highp> highp_f64vec1; - - /// High double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, highp> highp_f64vec2; - - /// High double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, highp> highp_f64vec3; - - /// High double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, highp> highp_f64vec4; - - - - ////////////////////// - // Float matrix types - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_f32 lowp_fmat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, lowp> lowp_fmat2x2; - - /// Low single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, lowp> lowp_fmat2x3; - - /// Low single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, lowp> lowp_fmat2x4; - - /// Low single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, lowp> lowp_fmat3x2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, lowp> lowp_fmat3x3; - - /// Low single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, lowp> lowp_fmat3x4; - - /// Low single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, lowp> lowp_fmat4x2; - - /// Low single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, lowp> lowp_fmat4x3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, lowp> lowp_fmat4x4; - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_fmat1x1 lowp_fmat1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_fmat2x2 lowp_fmat2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_fmat3x3 lowp_fmat3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_fmat4x4 lowp_fmat4; - - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_f32 mediump_fmat1x1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, mediump> mediump_fmat2x2; - - /// Medium single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, mediump> mediump_fmat2x3; - - /// Medium single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, mediump> mediump_fmat2x4; - - /// Medium single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, mediump> mediump_fmat3x2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, mediump> mediump_fmat3x3; - - /// Medium single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, mediump> mediump_fmat3x4; - - /// Medium single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, mediump> mediump_fmat4x2; - - /// Medium single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, mediump> mediump_fmat4x3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, mediump> mediump_fmat4x4; - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_fmat1x1 mediump_fmat1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_fmat2x2 mediump_fmat2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_fmat3x3 mediump_fmat3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_fmat4x4 mediump_fmat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_f32 highp_fmat1x1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, highp> highp_fmat2x2; - - /// High single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, highp> highp_fmat2x3; - - /// High single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, highp> highp_fmat2x4; - - /// High single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, highp> highp_fmat3x2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, highp> highp_fmat3x3; - - /// High single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, highp> highp_fmat3x4; - - /// High single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, highp> highp_fmat4x2; - - /// High single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, highp> highp_fmat4x3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, highp> highp_fmat4x4; - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_fmat1x1 highp_fmat1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_fmat2x2 highp_fmat2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_fmat3x3 highp_fmat3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_fmat4x4 highp_fmat4; - - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 lowp_f32mat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, lowp> lowp_f32mat2x2; - - /// Low single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, lowp> lowp_f32mat2x3; - - /// Low single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, lowp> lowp_f32mat2x4; - - /// Low single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, lowp> lowp_f32mat3x2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, lowp> lowp_f32mat3x3; - - /// Low single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, lowp> lowp_f32mat3x4; - - /// Low single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, lowp> lowp_f32mat4x2; - - /// Low single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, lowp> lowp_f32mat4x3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, lowp> lowp_f32mat4x4; - - /// Low single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 lowp_f32mat1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat2x2 lowp_f32mat2; - - /// Low single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat3x3 lowp_f32mat3; - - /// Low single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_f32mat4x4 lowp_f32mat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 mediump_f32mat1x1; - - /// Low single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, mediump> mediump_f32mat2x2; - - /// Medium single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, mediump> mediump_f32mat2x3; - - /// Medium single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, mediump> mediump_f32mat2x4; - - /// Medium single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, mediump> mediump_f32mat3x2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, mediump> mediump_f32mat3x3; - - /// Medium single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, mediump> mediump_f32mat3x4; - - /// Medium single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, mediump> mediump_f32mat4x2; - - /// Medium single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, mediump> mediump_f32mat4x3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, mediump> mediump_f32mat4x4; - - /// Medium single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// Medium single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat2x2 mediump_f32mat2; - - /// Medium single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat3x3 mediump_f32mat3; - - /// Medium single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_f32mat4x4 mediump_f32mat4; - - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 highp_f32mat1x1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, highp> highp_f32mat2x2; - - /// High single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, highp> highp_f32mat2x3; - - /// High single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, highp> highp_f32mat2x4; - - /// High single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, highp> highp_f32mat3x2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, highp> highp_f32mat3x3; - - /// High single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, highp> highp_f32mat3x4; - - /// High single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, highp> highp_f32mat4x2; - - /// High single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, highp> highp_f32mat4x3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, highp> highp_f32mat4x4; - - /// High single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// High single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_f32mat2x2 highp_f32mat2; - - /// High single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_f32mat3x3 highp_f32mat3; - - /// High single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_f32mat4x4 highp_f32mat4; - - - /// Low double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 lowp_f64mat1x1; - - /// Low double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, lowp> lowp_f64mat2x2; - - /// Low double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, lowp> lowp_f64mat2x3; - - /// Low double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, lowp> lowp_f64mat2x4; - - /// Low double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, lowp> lowp_f64mat3x2; - - /// Low double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, lowp> lowp_f64mat3x3; - - /// Low double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, lowp> lowp_f64mat3x4; - - /// Low double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, lowp> lowp_f64mat4x2; - - /// Low double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, lowp> lowp_f64mat4x3; - - /// Low double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, lowp> lowp_f64mat4x4; - - /// Low double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef lowp_f64mat1x1 lowp_f64mat1; - - /// Low double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat2x2 lowp_f64mat2; - - /// Low double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat3x3 lowp_f64mat3; - - /// Low double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef lowp_f64mat4x4 lowp_f64mat4; - - - /// Medium double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 Highp_f64mat1x1; - - /// Medium double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, mediump> mediump_f64mat2x2; - - /// Medium double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, mediump> mediump_f64mat2x3; - - /// Medium double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, mediump> mediump_f64mat2x4; - - /// Medium double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, mediump> mediump_f64mat3x2; - - /// Medium double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, mediump> mediump_f64mat3x3; - - /// Medium double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, mediump> mediump_f64mat3x4; - - /// Medium double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, mediump> mediump_f64mat4x2; - - /// Medium double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, mediump> mediump_f64mat4x3; - - /// Medium double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, mediump> mediump_f64mat4x4; - - /// Medium double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef mediump_f64mat1x1 mediump_f64mat1; - - /// Medium double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat2x2 mediump_f64mat2; - - /// Medium double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat3x3 mediump_f64mat3; - - /// Medium double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mediump_f64mat4x4 mediump_f64mat4; - - /// High double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 highp_f64mat1x1; - - /// High double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, highp> highp_f64mat2x2; - - /// High double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, highp> highp_f64mat2x3; - - /// High double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, highp> highp_f64mat2x4; - - /// High double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, highp> highp_f64mat3x2; - - /// High double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, highp> highp_f64mat3x3; - - /// High double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, highp> highp_f64mat3x4; - - /// High double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, highp> highp_f64mat4x2; - - /// High double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, highp> highp_f64mat4x3; - - /// High double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, highp> highp_f64mat4x4; - - /// High double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef highp_f64mat1x1 highp_f64mat1; - - /// High double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef highp_f64mat2x2 highp_f64mat2; - - /// High double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef highp_f64mat3x3 highp_f64mat3; - - /// High double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef highp_f64mat4x4 highp_f64mat4; - - - ///////////////////////////// - // Signed int vector types - - /// Low qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, lowp> lowp_ivec1; - - /// Low qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, lowp> lowp_ivec2; - - /// Low qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, lowp> lowp_ivec3; - - /// Low qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, lowp> lowp_ivec4; - - - /// Medium qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, mediump> mediump_ivec1; - - /// Medium qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, mediump> mediump_ivec2; - - /// Medium qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, mediump> mediump_ivec3; - - /// Medium qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, mediump> mediump_ivec4; - - - /// High qualifier signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, int, highp> highp_ivec1; - - /// High qualifier signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, int, highp> highp_ivec2; - - /// High qualifier signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, int, highp> highp_ivec3; - - /// High qualifier signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, int, highp> highp_ivec4; - - - /// Low qualifier 8 bit signed integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, i8, lowp> lowp_i8vec1; - - /// Low qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, lowp> lowp_i8vec2; - - /// Low qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, lowp> lowp_i8vec3; - - /// Low qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, lowp> lowp_i8vec4; - - - /// Medium qualifier 8 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i8, mediump> mediump_i8vec1; - - /// Medium qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, mediump> mediump_i8vec2; - - /// Medium qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, mediump> mediump_i8vec3; - - /// Medium qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, mediump> mediump_i8vec4; - - - /// High qualifier 8 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i8, highp> highp_i8vec1; - - /// High qualifier 8 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i8, highp> highp_i8vec2; - - /// High qualifier 8 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i8, highp> highp_i8vec3; - - /// High qualifier 8 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i8, highp> highp_i8vec4; - - - /// Low qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, lowp> lowp_i16vec1; - - /// Low qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, lowp> lowp_i16vec2; - - /// Low qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, lowp> lowp_i16vec3; - - /// Low qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, lowp> lowp_i16vec4; - - - /// Medium qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, mediump> mediump_i16vec1; - - /// Medium qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, mediump> mediump_i16vec2; - - /// Medium qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, mediump> mediump_i16vec3; - - /// Medium qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, mediump> mediump_i16vec4; - - - /// High qualifier 16 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i16, highp> highp_i16vec1; - - /// High qualifier 16 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i16, highp> highp_i16vec2; - - /// High qualifier 16 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i16, highp> highp_i16vec3; - - /// High qualifier 16 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i16, highp> highp_i16vec4; - - - /// Low qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, lowp> lowp_i32vec1; - - /// Low qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, lowp> lowp_i32vec2; - - /// Low qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, lowp> lowp_i32vec3; - - /// Low qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, lowp> lowp_i32vec4; - - - /// Medium qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, mediump> mediump_i32vec1; - - /// Medium qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, mediump> mediump_i32vec2; - - /// Medium qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, mediump> mediump_i32vec3; - - /// Medium qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, mediump> mediump_i32vec4; - - - /// High qualifier 32 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i32, highp> highp_i32vec1; - - /// High qualifier 32 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i32, highp> highp_i32vec2; - - /// High qualifier 32 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i32, highp> highp_i32vec3; - - /// High qualifier 32 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i32, highp> highp_i32vec4; - - - /// Low qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, lowp> lowp_i64vec1; - - /// Low qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, lowp> lowp_i64vec2; - - /// Low qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, lowp> lowp_i64vec3; - - /// Low qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, lowp> lowp_i64vec4; - - - /// Medium qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, mediump> mediump_i64vec1; - - /// Medium qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, mediump> mediump_i64vec2; - - /// Medium qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, mediump> mediump_i64vec3; - - /// Medium qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, mediump> mediump_i64vec4; - - - /// High qualifier 64 bit signed integer scalar type. - /// @see gtc_type_precision - typedef vec<1, i64, highp> highp_i64vec1; - - /// High qualifier 64 bit signed integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, i64, highp> highp_i64vec2; - - /// High qualifier 64 bit signed integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, i64, highp> highp_i64vec3; - - /// High qualifier 64 bit signed integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, i64, highp> highp_i64vec4; - - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, lowp> lowp_uvec1; - - /// Low qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, lowp> lowp_uvec2; - - /// Low qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, lowp> lowp_uvec3; - - /// Low qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, lowp> lowp_uvec4; - - - /// Medium qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, mediump> mediump_uvec1; - - /// Medium qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, mediump> mediump_uvec2; - - /// Medium qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, mediump> mediump_uvec3; - - /// Medium qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, mediump> mediump_uvec4; - - - /// High qualifier unsigned integer vector of 1 component type. - /// @see gtc_type_precision - typedef vec<1, uint, highp> highp_uvec1; - - /// High qualifier unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, uint, highp> highp_uvec2; - - /// High qualifier unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, uint, highp> highp_uvec3; - - /// High qualifier unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, uint, highp> highp_uvec4; - - - /// Low qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, lowp> lowp_u8vec1; - - /// Low qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, lowp> lowp_u8vec2; - - /// Low qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, lowp> lowp_u8vec3; - - /// Low qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, lowp> lowp_u8vec4; - - - /// Medium qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, mediump> mediump_u8vec1; - - /// Medium qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, mediump> mediump_u8vec2; - - /// Medium qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, mediump> mediump_u8vec3; - - /// Medium qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, mediump> mediump_u8vec4; - - - /// High qualifier 8 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u8, highp> highp_u8vec1; - - /// High qualifier 8 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u8, highp> highp_u8vec2; - - /// High qualifier 8 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u8, highp> highp_u8vec3; - - /// High qualifier 8 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u8, highp> highp_u8vec4; - - - /// Low qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, lowp> lowp_u16vec1; - - /// Low qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, lowp> lowp_u16vec2; - - /// Low qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, lowp> lowp_u16vec3; - - /// Low qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, lowp> lowp_u16vec4; - - - /// Medium qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, mediump> mediump_u16vec1; - - /// Medium qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, mediump> mediump_u16vec2; - - /// Medium qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, mediump> mediump_u16vec3; - - /// Medium qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, mediump> mediump_u16vec4; - - - /// High qualifier 16 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u16, highp> highp_u16vec1; - - /// High qualifier 16 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u16, highp> highp_u16vec2; - - /// High qualifier 16 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u16, highp> highp_u16vec3; - - /// High qualifier 16 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u16, highp> highp_u16vec4; - - - /// Low qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, lowp> lowp_u32vec1; - - /// Low qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, lowp> lowp_u32vec2; - - /// Low qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, lowp> lowp_u32vec3; - - /// Low qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, lowp> lowp_u32vec4; - - - /// Medium qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, mediump> mediump_u32vec1; - - /// Medium qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, mediump> mediump_u32vec2; - - /// Medium qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, mediump> mediump_u32vec3; - - /// Medium qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, mediump> mediump_u32vec4; - - - /// High qualifier 32 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u32, highp> highp_u32vec1; - - /// High qualifier 32 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u32, highp> highp_u32vec2; - - /// High qualifier 32 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u32, highp> highp_u32vec3; - - /// High qualifier 32 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u32, highp> highp_u32vec4; - - - /// Low qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, lowp> lowp_u64vec1; - - /// Low qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, lowp> lowp_u64vec2; - - /// Low qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, lowp> lowp_u64vec3; - - /// Low qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, lowp> lowp_u64vec4; - - - /// Medium qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, mediump> mediump_u64vec1; - - /// Medium qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, mediump> mediump_u64vec2; - - /// Medium qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, mediump> mediump_u64vec3; - - /// Medium qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, mediump> mediump_u64vec4; - - - /// High qualifier 64 bit unsigned integer scalar type. - /// @see gtc_type_precision - typedef vec<1, u64, highp> highp_u64vec1; - - /// High qualifier 64 bit unsigned integer vector of 2 components type. - /// @see gtc_type_precision - typedef vec<2, u64, highp> highp_u64vec2; - - /// High qualifier 64 bit unsigned integer vector of 3 components type. - /// @see gtc_type_precision - typedef vec<3, u64, highp> highp_u64vec3; - - /// High qualifier 64 bit unsigned integer vector of 4 components type. - /// @see gtc_type_precision - typedef vec<4, u64, highp> highp_u64vec4; - - - ////////////////////// - // Float vector types - - /// 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 float32_t; - - /// 32 bit single-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float32 f32; - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 float64_t; - - /// 64 bit double-qualifier floating-point scalar. - /// @see gtc_type_precision - typedef float64 f64; -# endif//GLM_FORCE_SINGLE_ONLY - - /// Single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, float, defaultp> fvec1; - - /// Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, float, defaultp> fvec2; - - /// Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, float, defaultp> fvec3; - - /// Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, float, defaultp> fvec4; - - - /// Single-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f32, defaultp> f32vec1; - - /// Single-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f32, defaultp> f32vec2; - - /// Single-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f32, defaultp> f32vec3; - - /// Single-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f32, defaultp> f32vec4; - -# ifndef GLM_FORCE_SINGLE_ONLY - /// Double-qualifier floating-point vector of 1 component. - /// @see gtc_type_precision - typedef vec<1, f64, defaultp> f64vec1; - - /// Double-qualifier floating-point vector of 2 components. - /// @see gtc_type_precision - typedef vec<2, f64, defaultp> f64vec2; - - /// Double-qualifier floating-point vector of 3 components. - /// @see gtc_type_precision - typedef vec<3, f64, defaultp> f64vec3; - - /// Double-qualifier floating-point vector of 4 components. - /// @see gtc_type_precision - typedef vec<4, f64, defaultp> f64vec4; -# endif//GLM_FORCE_SINGLE_ONLY - - - ////////////////////// - // Float matrix types - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 fmat1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> fmat2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> fmat3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> fmat4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 fmat1x1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> fmat2x2; - - /// Single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, defaultp> fmat2x3; - - /// Single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, defaultp> fmat2x4; - - /// Single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, defaultp> fmat3x2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> fmat3x3; - - /// Single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, defaultp> fmat3x4; - - /// Single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, defaultp> fmat4x2; - - /// Single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, defaultp> fmat4x3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> fmat4x4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f32mat1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> f32mat2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> f32mat3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> f32mat4; - - - /// Single-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f32 f32mat1x1; - - /// Single-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f32, defaultp> f32mat2x2; - - /// Single-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f32, defaultp> f32mat2x3; - - /// Single-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f32, defaultp> f32mat2x4; - - /// Single-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f32, defaultp> f32mat3x2; - - /// Single-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f32, defaultp> f32mat3x3; - - /// Single-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f32, defaultp> f32mat3x4; - - /// Single-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f32, defaultp> f32mat4x2; - - /// Single-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f32, defaultp> f32mat4x3; - - /// Single-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f32, defaultp> f32mat4x4; - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef detail::tmat1x1 f64mat1; - - /// Double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, defaultp> f64mat2; - - /// Double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, defaultp> f64mat3; - - /// Double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, defaultp> f64mat4; - - - /// Double-qualifier floating-point 1x1 matrix. - /// @see gtc_type_precision - //typedef f64 f64mat1x1; - - /// Double-qualifier floating-point 2x2 matrix. - /// @see gtc_type_precision - typedef mat<2, 2, f64, defaultp> f64mat2x2; - - /// Double-qualifier floating-point 2x3 matrix. - /// @see gtc_type_precision - typedef mat<2, 3, f64, defaultp> f64mat2x3; - - /// Double-qualifier floating-point 2x4 matrix. - /// @see gtc_type_precision - typedef mat<2, 4, f64, defaultp> f64mat2x4; - - /// Double-qualifier floating-point 3x2 matrix. - /// @see gtc_type_precision - typedef mat<3, 2, f64, defaultp> f64mat3x2; - - /// Double-qualifier floating-point 3x3 matrix. - /// @see gtc_type_precision - typedef mat<3, 3, f64, defaultp> f64mat3x3; - - /// Double-qualifier floating-point 3x4 matrix. - /// @see gtc_type_precision - typedef mat<3, 4, f64, defaultp> f64mat3x4; - - /// Double-qualifier floating-point 4x2 matrix. - /// @see gtc_type_precision - typedef mat<4, 2, f64, defaultp> f64mat4x2; - - /// Double-qualifier floating-point 4x3 matrix. - /// @see gtc_type_precision - typedef mat<4, 3, f64, defaultp> f64mat4x3; - - /// Double-qualifier floating-point 4x4 matrix. - /// @see gtc_type_precision - typedef mat<4, 4, f64, defaultp> f64mat4x4; - -# endif//GLM_FORCE_SINGLE_ONLY - - ////////////////////////// - // Quaternion types - - /// Single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua f32quat; - - /// Low single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua lowp_f32quat; - - /// Low double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua lowp_f64quat; - - /// Medium single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua mediump_f32quat; - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Medium double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua mediump_f64quat; - - /// High single-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua highp_f32quat; - - /// High double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua highp_f64quat; - - /// Double-qualifier floating-point quaternion. - /// @see gtc_type_precision - typedef qua f64quat; - -# endif//GLM_FORCE_SINGLE_ONLY - - /// @} -}//namespace glm - -#include "type_precision.inl" diff --git a/src/qged/display/glm/glm/gtc/type_precision.inl b/src/qged/display/glm/glm/gtc/type_precision.inl deleted file mode 100644 index ae8091206bd..00000000000 --- a/src/qged/display/glm/glm/gtc/type_precision.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtc_precision - -namespace glm -{ - -} diff --git a/src/qged/display/glm/glm/gtc/type_ptr.hpp b/src/qged/display/glm/glm/gtc/type_ptr.hpp deleted file mode 100644 index f9499471109..00000000000 --- a/src/qged/display/glm/glm/gtc/type_ptr.hpp +++ /dev/null @@ -1,261 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_type_ptr -/// @file glm/gtc/type_ptr.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtc_type_ptr GLM_GTC_type_ptr -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Handles the interaction between pointers and vector, matrix types. -/// -/// This extension defines an overloaded function, glm::value_ptr. It returns -/// a pointer to the memory layout of the object. Matrix types store their values -/// in column-major order. -/// -/// This is useful for uploading data to matrices or copying data to buffer objects. -/// -/// Example: -/// @code -/// #include -/// #include -/// -/// glm::vec3 aVector(3); -/// glm::mat4 someMatrix(1.0); -/// -/// glUniform3fv(uniformLoc, 1, glm::value_ptr(aVector)); -/// glUniformMatrix4fv(uniformMatrixLoc, 1, GL_FALSE, glm::value_ptr(someMatrix)); -/// @endcode -/// -/// need to be included to use the features of this extension. - -#pragma once - -// Dependency: -#include "../gtc/quaternion.hpp" -#include "../gtc/vec1.hpp" -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_type_ptr extension included") -#endif - -namespace glm -{ - /// @addtogroup gtc_type_ptr - /// @{ - - /// Return the constant address to the data of the input parameter. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL typename genType::value_type const * value_ptr(genType const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<1, T, Q> make_vec1(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, Q> make_vec2(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, Q> make_vec3(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<1, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<2, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<3, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, Q> make_vec4(vec<4, T, Q> const& v); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<2, T, defaultp> make_vec2(T const * const ptr); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<3, T, defaultp> make_vec3(T const * const ptr); - - /// Build a vector from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL vec<4, T, defaultp> make_vec4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 3, T, defaultp> make_mat2x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 4, T, defaultp> make_mat2x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 2, T, defaultp> make_mat3x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 4, T, defaultp> make_mat3x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 2, T, defaultp> make_mat4x2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 3, T, defaultp> make_mat4x3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4x4(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> make_mat2(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> make_mat3(T const * const ptr); - - /// Build a matrix from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> make_mat4(T const * const ptr); - - /// Build a quaternion from a pointer. - /// @see gtc_type_ptr - template - GLM_FUNC_DECL qua make_quat(T const * const ptr); - - /// @} -}//namespace glm - -#include "type_ptr.inl" diff --git a/src/qged/display/glm/glm/gtc/type_ptr.inl b/src/qged/display/glm/glm/gtc/type_ptr.inl deleted file mode 100644 index 71df4d30d00..00000000000 --- a/src/qged/display/glm/glm/gtc/type_ptr.inl +++ /dev/null @@ -1,386 +0,0 @@ -/// @ref gtc_type_ptr - -#include - -namespace glm -{ - /// @addtogroup gtc_type_ptr - /// @{ - - template - GLM_FUNC_QUALIFIER T const* value_ptr(vec<2, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<2, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const * value_ptr(vec<3, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<3, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(vec<4, T, Q> const& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(vec<4, T, Q>& v) - { - return &(v.x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<2, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<2, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 2, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<4, 2, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<3, 4, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(mat<3, 4, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const* value_ptr(mat<4, 3, T, Q> const& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T * value_ptr(mat<4, 3, T, Q>& m) - { - return &(m[0].x); - } - - template - GLM_FUNC_QUALIFIER T const * value_ptr(qua const& q) - { - return &(q[0]); - } - - template - GLM_FUNC_QUALIFIER T* value_ptr(qua& q) - { - return &(q[0]); - } - - template - inline vec<1, T, Q> make_vec1(vec<1, T, Q> const& v) - { - return v; - } - - template - inline vec<1, T, Q> make_vec1(vec<2, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - inline vec<1, T, Q> make_vec1(vec<3, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - inline vec<1, T, Q> make_vec1(vec<4, T, Q> const& v) - { - return vec<1, T, Q>(v); - } - - template - inline vec<2, T, Q> make_vec2(vec<1, T, Q> const& v) - { - return vec<2, T, Q>(v.x, static_cast(0)); - } - - template - inline vec<2, T, Q> make_vec2(vec<2, T, Q> const& v) - { - return v; - } - - template - inline vec<2, T, Q> make_vec2(vec<3, T, Q> const& v) - { - return vec<2, T, Q>(v); - } - - template - inline vec<2, T, Q> make_vec2(vec<4, T, Q> const& v) - { - return vec<2, T, Q>(v); - } - - template - inline vec<3, T, Q> make_vec3(vec<1, T, Q> const& v) - { - return vec<3, T, Q>(v.x, static_cast(0), static_cast(0)); - } - - template - inline vec<3, T, Q> make_vec3(vec<2, T, Q> const& v) - { - return vec<3, T, Q>(v.x, v.y, static_cast(0)); - } - - template - inline vec<3, T, Q> make_vec3(vec<3, T, Q> const& v) - { - return v; - } - - template - inline vec<3, T, Q> make_vec3(vec<4, T, Q> const& v) - { - return vec<3, T, Q>(v); - } - - template - inline vec<4, T, Q> make_vec4(vec<1, T, Q> const& v) - { - return vec<4, T, Q>(v.x, static_cast(0), static_cast(0), static_cast(1)); - } - - template - inline vec<4, T, Q> make_vec4(vec<2, T, Q> const& v) - { - return vec<4, T, Q>(v.x, v.y, static_cast(0), static_cast(1)); - } - - template - inline vec<4, T, Q> make_vec4(vec<3, T, Q> const& v) - { - return vec<4, T, Q>(v.x, v.y, v.z, static_cast(1)); - } - - template - inline vec<4, T, Q> make_vec4(vec<4, T, Q> const& v) - { - return v; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, defaultp> make_vec2(T const *const ptr) - { - vec<2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, defaultp> make_vec3(T const *const ptr) - { - vec<3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, defaultp> make_vec4(T const *const ptr) - { - vec<4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(vec<4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2x2(T const *const ptr) - { - mat<2, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, defaultp> make_mat2x3(T const *const ptr) - { - mat<2, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, defaultp> make_mat2x4(T const *const ptr) - { - mat<2, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<2, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, defaultp> make_mat3x2(T const *const ptr) - { - mat<3, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3x3(T const *const ptr) - { - mat<3, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, defaultp> make_mat3x4(T const *const ptr) - { - mat<3, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<3, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, defaultp> make_mat4x2(T const *const ptr) - { - mat<4, 2, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 2, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, defaultp> make_mat4x3(T const *const ptr) - { - mat<4, 3, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 3, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4x4(T const *const ptr) - { - mat<4, 4, T, defaultp> Result; - memcpy(value_ptr(Result), ptr, sizeof(mat<4, 4, T, defaultp>)); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> make_mat2(T const *const ptr) - { - return make_mat2x2(ptr); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> make_mat3(T const *const ptr) - { - return make_mat3x3(ptr); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> make_mat4(T const *const ptr) - { - return make_mat4x4(ptr); - } - - template - GLM_FUNC_QUALIFIER qua make_quat(T const *const ptr) - { - qua Result; - memcpy(value_ptr(Result), ptr, sizeof(qua)); - return Result; - } - - /// @} -}//namespace glm - diff --git a/src/qged/display/glm/glm/gtc/ulp.hpp b/src/qged/display/glm/glm/gtc/ulp.hpp deleted file mode 100644 index fd45d04d3e4..00000000000 --- a/src/qged/display/glm/glm/gtc/ulp.hpp +++ /dev/null @@ -1,183 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_ulp -/// @file glm/gtc/ulp.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_ulp GLM_GTC_ulp -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Allow the measurement of the accuracy of a function against a reference -/// implementation. This extension works on floating-point data and provide results -/// in ULP. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/_vectorize.hpp" -#include "../ext/scalar_int_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_ulp extension included") -#endif - -namespace glm -{ - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType next_float(genType x); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType prev_float(genType x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType next_float(genType x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam genType A floating-point scalar type. - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL genType prev_float(genType x, int ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @see gtc_ulp - GLM_FUNC_DECL int float_distance(float x, float y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @see gtc_ulp - GLM_FUNC_DECL int64 float_distance(double x, double y); - - /// Return the next ULP value(s) after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x, int ULPs); - - /// Return the value(s) ULP distance after the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec next_float(vec const& x, vec const& ULPs); - - /// Return the previous ULP value(s) before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x, int ULPs); - - /// Return the value(s) ULP distance before the input value(s). - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec prev_float(vec const& x, vec const& ULPs); - - /// Return the distance in the number of ULP between 2 single-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); - - /// Return the distance in the number of ULP between 2 double-precision floating-point scalars. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam Q Value from qualifier enum - /// - /// @see gtc_ulp - template - GLM_FUNC_DECL vec float_distance(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "ulp.inl" diff --git a/src/qged/display/glm/glm/gtc/ulp.inl b/src/qged/display/glm/glm/gtc/ulp.inl deleted file mode 100644 index 4ecbd3f437a..00000000000 --- a/src/qged/display/glm/glm/gtc/ulp.inl +++ /dev/null @@ -1,173 +0,0 @@ -/// @ref gtc_ulp - -#include "../ext/scalar_ulp.hpp" - -namespace glm -{ - template<> - GLM_FUNC_QUALIFIER float next_float(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MAX); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MAX); -# else - return nextafterf(x, FLT_MAX); -# endif - } - - template<> - GLM_FUNC_QUALIFIER double next_float(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::max()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafter(x, std::numeric_limits::max()); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MAX); -# else - return nextafter(x, DBL_MAX); -# endif - } - - template - GLM_FUNC_QUALIFIER T next_float(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'next_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for (int i = 0; i < ULPs; ++i) - temp = next_float(temp); - return temp; - } - - GLM_FUNC_QUALIFIER float prev_float(float x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return detail::nextafterf(x, FLT_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafterf(x, FLT_MIN); -# else - return nextafterf(x, FLT_MIN); -# endif - } - - GLM_FUNC_QUALIFIER double prev_float(double x) - { -# if GLM_HAS_CXX11_STL - return std::nextafter(x, std::numeric_limits::min()); -# elif((GLM_COMPILER & GLM_COMPILER_VC) || ((GLM_COMPILER & GLM_COMPILER_INTEL) && (GLM_PLATFORM & GLM_PLATFORM_WINDOWS))) - return _nextafter(x, DBL_MIN); -# elif(GLM_PLATFORM & GLM_PLATFORM_ANDROID) - return __builtin_nextafter(x, DBL_MIN); -# else - return nextafter(x, DBL_MIN); -# endif - } - - template - GLM_FUNC_QUALIFIER T prev_float(T x, int ULPs) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'prev_float' only accept floating-point input"); - assert(ULPs >= 0); - - T temp = x; - for (int i = 0; i < ULPs; ++i) - temp = prev_float(temp); - return temp; - } - - GLM_FUNC_QUALIFIER int float_distance(float x, float y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - GLM_FUNC_QUALIFIER int64 float_distance(double x, double y) - { - detail::float_t const a(x); - detail::float_t const b(y); - - return abs(a.i - b.i); - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x, int ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec next_float(vec const& x, vec const& ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = next_float(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x, int ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i], ULPs); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec prev_float(vec const& x, vec const& ULPs) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = prev_float(x[i], ULPs[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = float_distance(x[i], y[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER vec float_distance(vec const& x, vec const& y) - { - vec Result; - for (length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = float_distance(x[i], y[i]); - return Result; - } -}//namespace glm - diff --git a/src/qged/display/glm/glm/gtc/vec1.hpp b/src/qged/display/glm/glm/gtc/vec1.hpp deleted file mode 100644 index 48064ca2ff9..00000000000 --- a/src/qged/display/glm/glm/gtc/vec1.hpp +++ /dev/null @@ -1,61 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtc_vec1 -/// @file glm/gtc/vec1.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtc_vec1 GLM_GTC_vec1 -/// @ingroup gtc -/// -/// Include to use the features of this extension. -/// -/// Add vec1, ivec1, uvec1 and bvec1 types. - -#pragma once - -// Dependency: -#include "../ext/vector_bool1.hpp" -#include "../ext/vector_bool1_precision.hpp" -#include "../ext/vector_float1.hpp" -#include "../ext/vector_float1_precision.hpp" -#include "../ext/vector_double1.hpp" -#include "../ext/vector_double1_precision.hpp" -#include "../ext/vector_int1.hpp" -#include "../ext/vector_int1_sized.hpp" -#include "../ext/vector_uint1.hpp" -#include "../ext/vector_uint1_sized.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# pragma message("GLM: GLM_GTC_vec1 extension included") -#endif - diff --git a/src/qged/display/glm/glm/gtx/associated_min_max.hpp b/src/qged/display/glm/glm/gtx/associated_min_max.hpp deleted file mode 100644 index e0d2f2204ee..00000000000 --- a/src/qged/display/glm/glm/gtx/associated_min_max.hpp +++ /dev/null @@ -1,238 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_associated_min_max -/// @file glm/gtx/associated_min_max.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_associated_min_max GLM_GTX_associated_min_max -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Min and max functions that return associated values not the compared onces. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_associated_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_associated_min_max extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_associated_min_max - /// @{ - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin(T x, U a, T y, U b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec<2, U, Q> associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - T x, const vec& a, - T y, const vec& b); - - /// Minimum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, U a, - vec const& y, U b); - - /// Minimum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin( - T x, U a, - T y, U b, - T z, U c); - - /// Minimum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMin( - T x, U a, - T y, U b, - T z, U c, - T w, U d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d); - - /// Minimum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMin( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax(T x, U a, T y, U b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec<2, U, Q> associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b); - - /// Maximum comparison between 2 variables and returns 2 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax( - T x, U a, - T y, U b, - T z, U c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c); - - /// Maximum comparison between 3 variables and returns 3 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL U associatedMax( - T x, U a, - T y, U b, - T z, U c, - T w, U d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d); - - /// Maximum comparison between 4 variables and returns 4 associated variable values - /// @see gtx_associated_min_max - template - GLM_FUNC_DECL vec associatedMax( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d); - - /// @} -} //namespace glm - -#include "associated_min_max.inl" diff --git a/src/qged/display/glm/glm/gtx/associated_min_max.inl b/src/qged/display/glm/glm/gtx/associated_min_max.inl deleted file mode 100644 index 5186c471c28..00000000000 --- a/src/qged/display/glm/glm/gtx/associated_min_max.inl +++ /dev/null @@ -1,354 +0,0 @@ -/// @ref gtx_associated_min_max - -namespace glm{ - -// Min comparison between 2 variables -template -GLM_FUNC_QUALIFIER U associatedMin(T x, U a, T y, U b) -{ - return x < y ? a : b; -} - -template -GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? a[i] : b[i]; - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - T x, const vec& a, - T y, const vec& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x < y ? a[i] : b[i]; - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, U a, - vec const& y, U b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? a : b; - return Result; -} - -// Min comparison between 3 variables -template -GLM_FUNC_QUALIFIER U associatedMin -( - T x, U a, - T y, U b, - T z, U c -) -{ - U Result = x < y ? (x < z ? a : c) : (y < z ? b : c); - return Result; -} - -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] < y[i] ? (x[i] < z[i] ? a[i] : c[i]) : (y[i] < z[i] ? b[i] : c[i]); - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER U associatedMin -( - T x, U a, - T y, U b, - T z, U c, - T w, U d -) -{ - T Test1 = min(x, y); - T Test2 = min(z, w); - U Result1 = x < y ? a : b; - U Result2 = z < w ? c : d; - U Result = Test1 < Test2 ? Result1 : Result2; - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = min(x[i], y[i]); - T Test2 = min(z[i], w[i]); - U Result1 = x[i] < y[i] ? a[i] : b[i]; - U Result2 = z[i] < w[i] ? c[i] : d[i]; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d -) -{ - T Test1 = min(x, y); - T Test2 = min(z, w); - - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - U Result1 = x < y ? a[i] : b[i]; - U Result2 = z < w ? c[i] : d[i]; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Min comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMin -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = min(x[i], y[i]); - T Test2 = min(z[i], w[i]); - U Result1 = x[i] < y[i] ? a : b; - U Result2 = z[i] < w[i] ? c : d; - Result[i] = Test1 < Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER U associatedMax(T x, U a, T y, U b) -{ - return x > y ? a : b; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec<2, U, Q> associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? a[i] : b[i]; - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x > y ? a[i] : b[i]; - return Result; -} - -// Max comparison between 2 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? a : b; - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER U associatedMax -( - T x, U a, - T y, U b, - T z, U c -) -{ - U Result = x > y ? (x > z ? a : c) : (y > z ? b : c); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a[i] : c[i]) : (y[i] > z[i] ? b[i] : c[i]); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x > y ? (x > z ? a[i] : c[i]) : (y > z ? b[i] : c[i]); - return Result; -} - -// Max comparison between 3 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - Result[i] = x[i] > y[i] ? (x[i] > z[i] ? a : c) : (y[i] > z[i] ? b : c); - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER U associatedMax -( - T x, U a, - T y, U b, - T z, U c, - T w, U d -) -{ - T Test1 = max(x, y); - T Test2 = max(z, w); - U Result1 = x > y ? a : b; - U Result2 = z > w ? c : d; - U Result = Test1 > Test2 ? Result1 : Result2; - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, vec const& a, - vec const& y, vec const& b, - vec const& z, vec const& c, - vec const& w, vec const& d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = max(x[i], y[i]); - T Test2 = max(z[i], w[i]); - U Result1 = x[i] > y[i] ? a[i] : b[i]; - U Result2 = z[i] > w[i] ? c[i] : d[i]; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - T x, vec const& a, - T y, vec const& b, - T z, vec const& c, - T w, vec const& d -) -{ - T Test1 = max(x, y); - T Test2 = max(z, w); - - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - U Result1 = x > y ? a[i] : b[i]; - U Result2 = z > w ? c[i] : d[i]; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} - -// Max comparison between 4 variables -template -GLM_FUNC_QUALIFIER vec associatedMax -( - vec const& x, U a, - vec const& y, U b, - vec const& z, U c, - vec const& w, U d -) -{ - vec Result; - for(length_t i = 0, n = Result.length(); i < n; ++i) - { - T Test1 = max(x[i], y[i]); - T Test2 = max(z[i], w[i]); - U Result1 = x[i] > y[i] ? a : b; - U Result2 = z[i] > w[i] ? c : d; - Result[i] = Test1 > Test2 ? Result1 : Result2; - } - return Result; -} -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/bit.hpp b/src/qged/display/glm/glm/gtx/bit.hpp deleted file mode 100644 index c9c7df30d70..00000000000 --- a/src/qged/display/glm/glm/gtx/bit.hpp +++ /dev/null @@ -1,129 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_bit -/// @file glm/gtx/bit.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_bit GLM_GTX_bit -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../gtc/bitfield.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_bit is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_bit extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_bit - /// @{ - - /// @see gtx_bit - template - GLM_FUNC_DECL genIUType highestBitValue(genIUType Value); - - /// @see gtx_bit - template - GLM_FUNC_DECL genIUType lowestBitValue(genIUType Value); - - /// Find the highest bit set to 1 in a integer variable and return its value. - /// - /// @see gtx_bit - template - GLM_FUNC_DECL vec highestBitValue(vec const& value); - - /// Return the power of two number which value is just higher the input value. - /// Deprecated, use ceilPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoAbove(genIUType Value); - - /// Return the power of two number which value is just higher the input value. - /// Deprecated, use ceilPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoAbove(vec const& value); - - /// Return the power of two number which value is just lower the input value. - /// Deprecated, use floorPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoBelow(genIUType Value); - - /// Return the power of two number which value is just lower the input value. - /// Deprecated, use floorPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoBelow(vec const& value); - - /// Return the power of two number which value is the closet to the input value. - /// Deprecated, use roundPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL genIUType powerOfTwoNearest(genIUType Value); - - /// Return the power of two number which value is the closet to the input value. - /// Deprecated, use roundPowerOfTwo from GTC_round instead - /// - /// @see gtc_round - /// @see gtx_bit - template - GLM_DEPRECATED GLM_FUNC_DECL vec powerOfTwoNearest(vec const& value); - - /// @} -} //namespace glm - - -#include "bit.inl" - diff --git a/src/qged/display/glm/glm/gtx/bit.inl b/src/qged/display/glm/glm/gtx/bit.inl deleted file mode 100644 index 621b6262406..00000000000 --- a/src/qged/display/glm/glm/gtx/bit.inl +++ /dev/null @@ -1,92 +0,0 @@ -/// @ref gtx_bit - -namespace glm -{ - /////////////////// - // highestBitValue - - template - GLM_FUNC_QUALIFIER genIUType highestBitValue(genIUType Value) - { - genIUType tmp = Value; - genIUType result = genIUType(0); - while(tmp) - { - result = (tmp & (~tmp + 1)); // grab lowest bit - tmp &= ~result; // clear lowest bit - } - return result; - } - - template - GLM_FUNC_QUALIFIER vec highestBitValue(vec const& v) - { - return detail::functor1::call(highestBitValue, v); - } - - /////////////////// - // lowestBitValue - - template - GLM_FUNC_QUALIFIER genIUType lowestBitValue(genIUType Value) - { - return (Value & (~Value + 1)); - } - - template - GLM_FUNC_QUALIFIER vec lowestBitValue(vec const& v) - { - return detail::functor1::call(lowestBitValue, v); - } - - /////////////////// - // powerOfTwoAbove - - template - GLM_FUNC_QUALIFIER genType powerOfTwoAbove(genType value) - { - return isPowerOfTwo(value) ? value : highestBitValue(value) << 1; - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoAbove(vec const& v) - { - return detail::functor1::call(powerOfTwoAbove, v); - } - - /////////////////// - // powerOfTwoBelow - - template - GLM_FUNC_QUALIFIER genType powerOfTwoBelow(genType value) - { - return isPowerOfTwo(value) ? value : highestBitValue(value); - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoBelow(vec const& v) - { - return detail::functor1::call(powerOfTwoBelow, v); - } - - ///////////////////// - // powerOfTwoNearest - - template - GLM_FUNC_QUALIFIER genType powerOfTwoNearest(genType value) - { - if(isPowerOfTwo(value)) - return value; - - genType const prev = highestBitValue(value); - genType const next = prev << 1; - return (next - value) < (value - prev) ? next : prev; - } - - template - GLM_FUNC_QUALIFIER vec powerOfTwoNearest(vec const& v) - { - return detail::functor1::call(powerOfTwoNearest, v); - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/closest_point.hpp b/src/qged/display/glm/glm/gtx/closest_point.hpp deleted file mode 100644 index 98c19e9069a..00000000000 --- a/src/qged/display/glm/glm/gtx/closest_point.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_closest_point -/// @file glm/gtx/closest_point.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_closest_point GLM_GTX_closest_point -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Find the point on a straight line which is the closet of a point. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_closest_point extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_closest_point - /// @{ - - /// Find the point on a straight line which is the closet of a point. - /// @see gtx_closest_point - template - GLM_FUNC_DECL vec<3, T, Q> closestPointOnLine( - vec<3, T, Q> const& point, - vec<3, T, Q> const& a, - vec<3, T, Q> const& b); - - /// 2d lines work as well - template - GLM_FUNC_DECL vec<2, T, Q> closestPointOnLine( - vec<2, T, Q> const& point, - vec<2, T, Q> const& a, - vec<2, T, Q> const& b); - - /// @} -}// namespace glm - -#include "closest_point.inl" diff --git a/src/qged/display/glm/glm/gtx/closest_point.inl b/src/qged/display/glm/glm/gtx/closest_point.inl deleted file mode 100644 index 0a39b042b88..00000000000 --- a/src/qged/display/glm/glm/gtx/closest_point.inl +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_closest_point - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> closestPointOnLine - ( - vec<3, T, Q> const& point, - vec<3, T, Q> const& a, - vec<3, T, Q> const& b - ) - { - T LineLength = distance(a, b); - vec<3, T, Q> Vector = point - a; - vec<3, T, Q> LineDirection = (b - a) / LineLength; - - // Project Vector to LineDirection to get the distance of point from a - T Distance = dot(Vector, LineDirection); - - if(Distance <= T(0)) return a; - if(Distance >= LineLength) return b; - return a + LineDirection * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> closestPointOnLine - ( - vec<2, T, Q> const& point, - vec<2, T, Q> const& a, - vec<2, T, Q> const& b - ) - { - T LineLength = distance(a, b); - vec<2, T, Q> Vector = point - a; - vec<2, T, Q> LineDirection = (b - a) / LineLength; - - // Project Vector to LineDirection to get the distance of point from a - T Distance = dot(Vector, LineDirection); - - if(Distance <= T(0)) return a; - if(Distance >= LineLength) return b; - return a + LineDirection * Distance; - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/color_encoding.hpp b/src/qged/display/glm/glm/gtx/color_encoding.hpp deleted file mode 100644 index a18ef1bf398..00000000000 --- a/src/qged/display/glm/glm/gtx/color_encoding.hpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_color_encoding -/// @file glm/gtx/color_encoding.hpp -/// -/// @see core (dependence) -/// @see gtx_color_encoding (dependence) -/// -/// @defgroup gtx_color_encoding GLM_GTX_color_encoding -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../vec3.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTC_color_encoding is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTC_color_encoding extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_encoding - /// @{ - - /// Convert a linear sRGB color to D65 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB); - - /// Convert a linear sRGB color to D50 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB); - - /// Convert a D65 YUV color to linear sRGB. - template - GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ); - - /// Convert a D65 YUV color to D50 YUV. - template - GLM_FUNC_DECL vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ); - - /// @} -} //namespace glm - -#include "color_encoding.inl" diff --git a/src/qged/display/glm/glm/gtx/color_encoding.inl b/src/qged/display/glm/glm/gtx/color_encoding.inl deleted file mode 100644 index e50fa3efa42..00000000000 --- a/src/qged/display/glm/glm/gtx/color_encoding.inl +++ /dev/null @@ -1,45 +0,0 @@ -/// @ref gtx_color_encoding - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD65XYZ(vec<3, T, Q> const& ColorLinearSRGB) - { - vec<3, T, Q> const M(0.490f, 0.17697f, 0.2f); - vec<3, T, Q> const N(0.31f, 0.8124f, 0.01063f); - vec<3, T, Q> const O(0.490f, 0.01f, 0.99f); - - return (M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB) * static_cast(5.650675255693055f); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertLinearSRGBToD50XYZ(vec<3, T, Q> const& ColorLinearSRGB) - { - vec<3, T, Q> const M(0.436030342570117f, 0.222438466210245f, 0.013897440074263f); - vec<3, T, Q> const N(0.385101860087134f, 0.716942745571917f, 0.097076381494207f); - vec<3, T, Q> const O(0.143067806654203f, 0.060618777416563f, 0.713926257896652f); - - return M * ColorLinearSRGB + N * ColorLinearSRGB + O * ColorLinearSRGB; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToLinearSRGB(vec<3, T, Q> const& ColorD65XYZ) - { - vec<3, T, Q> const M(0.41847f, -0.091169f, 0.0009209f); - vec<3, T, Q> const N(-0.15866f, 0.25243f, 0.015708f); - vec<3, T, Q> const O(0.0009209f, -0.0025498f, 0.1786f); - - return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> convertD65XYZToD50XYZ(vec<3, T, Q> const& ColorD65XYZ) - { - vec<3, T, Q> const M(+1.047844353856414f, +0.029549007606644f, -0.009250984365223f); - vec<3, T, Q> const N(+0.022898981050086f, +0.990508028941971f, +0.015072338237051f); - vec<3, T, Q> const O(-0.050206647741605f, -0.017074711360960f, +0.751717835079977f); - - return M * ColorD65XYZ + N * ColorD65XYZ + O * ColorD65XYZ; - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/color_space.hpp b/src/qged/display/glm/glm/gtx/color_space.hpp deleted file mode 100644 index af3fb72f37a..00000000000 --- a/src/qged/display/glm/glm/gtx/color_space.hpp +++ /dev/null @@ -1,103 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_color_space -/// @file glm/gtx/color_space.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_color_space GLM_GTX_color_space -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Related to RGB to HSV conversions and operations. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_color_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_color_space extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_space - /// @{ - - /// Converts a color from HSV color space to its color in RGB color space. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> rgbColor( - vec<3, T, Q> const& hsvValue); - - /// Converts a color from RGB color space to its color in HSV color space. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> hsvColor( - vec<3, T, Q> const& rgbValue); - - /// Build a saturation matrix. - /// @see gtx_color_space - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> saturation( - T const s); - - /// Modify the saturation of a color. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<3, T, Q> saturation( - T const s, - vec<3, T, Q> const& color); - - /// Modify the saturation of a color. - /// @see gtx_color_space - template - GLM_FUNC_DECL vec<4, T, Q> saturation( - T const s, - vec<4, T, Q> const& color); - - /// Compute color luminosity associating ratios (0.33, 0.59, 0.11) to RGB canals. - /// @see gtx_color_space - template - GLM_FUNC_DECL T luminosity( - vec<3, T, Q> const& color); - - /// @} -}//namespace glm - -#include "color_space.inl" diff --git a/src/qged/display/glm/glm/gtx/color_space.inl b/src/qged/display/glm/glm/gtx/color_space.inl deleted file mode 100644 index f698afe1e1b..00000000000 --- a/src/qged/display/glm/glm/gtx/color_space.inl +++ /dev/null @@ -1,141 +0,0 @@ -/// @ref gtx_color_space - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgbColor(const vec<3, T, Q>& hsvColor) - { - vec<3, T, Q> hsv = hsvColor; - vec<3, T, Q> rgbColor; - - if(hsv.y == static_cast(0)) - // achromatic (grey) - rgbColor = vec<3, T, Q>(hsv.z); - else - { - T sector = floor(hsv.x * (T(1) / T(60))); - T frac = (hsv.x * (T(1) / T(60))) - sector; - // factorial part of h - T o = hsv.z * (T(1) - hsv.y); - T p = hsv.z * (T(1) - hsv.y * frac); - T q = hsv.z * (T(1) - hsv.y * (T(1) - frac)); - - switch(int(sector)) - { - default: - case 0: - rgbColor.r = hsv.z; - rgbColor.g = q; - rgbColor.b = o; - break; - case 1: - rgbColor.r = p; - rgbColor.g = hsv.z; - rgbColor.b = o; - break; - case 2: - rgbColor.r = o; - rgbColor.g = hsv.z; - rgbColor.b = q; - break; - case 3: - rgbColor.r = o; - rgbColor.g = p; - rgbColor.b = hsv.z; - break; - case 4: - rgbColor.r = q; - rgbColor.g = o; - rgbColor.b = hsv.z; - break; - case 5: - rgbColor.r = hsv.z; - rgbColor.g = o; - rgbColor.b = p; - break; - } - } - - return rgbColor; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> hsvColor(const vec<3, T, Q>& rgbColor) - { - vec<3, T, Q> hsv = rgbColor; - float Min = min(min(rgbColor.r, rgbColor.g), rgbColor.b); - float Max = max(max(rgbColor.r, rgbColor.g), rgbColor.b); - float Delta = Max - Min; - - hsv.z = Max; - - if(Max != static_cast(0)) - { - hsv.y = Delta / hsv.z; - T h = static_cast(0); - - if(rgbColor.r == Max) - // between yellow & magenta - h = static_cast(0) + T(60) * (rgbColor.g - rgbColor.b) / Delta; - else if(rgbColor.g == Max) - // between cyan & yellow - h = static_cast(120) + T(60) * (rgbColor.b - rgbColor.r) / Delta; - else - // between magenta & cyan - h = static_cast(240) + T(60) * (rgbColor.r - rgbColor.g) / Delta; - - if(h < T(0)) - hsv.x = h + T(360); - else - hsv.x = h; - } - else - { - // If r = g = b = 0 then s = 0, h is undefined - hsv.y = static_cast(0); - hsv.x = static_cast(0); - } - - return hsv; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> saturation(T const s) - { - vec<3, T, defaultp> rgbw = vec<3, T, defaultp>(T(0.2126), T(0.7152), T(0.0722)); - - vec<3, T, defaultp> const col((T(1) - s) * rgbw); - - mat<4, 4, T, defaultp> result(T(1)); - result[0][0] = col.x + s; - result[0][1] = col.x; - result[0][2] = col.x; - result[1][0] = col.y; - result[1][1] = col.y + s; - result[1][2] = col.y; - result[2][0] = col.z; - result[2][1] = col.z; - result[2][2] = col.z + s; - - return result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> saturation(const T s, const vec<3, T, Q>& color) - { - return vec<3, T, Q>(saturation(s) * vec<4, T, Q>(color, T(0))); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> saturation(const T s, const vec<4, T, Q>& color) - { - return saturation(s) * color; - } - - template - GLM_FUNC_QUALIFIER T luminosity(const vec<3, T, Q>& color) - { - const vec<3, T, Q> tmp = vec<3, T, Q>(0.33, 0.59, 0.11); - return dot(color, tmp); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/color_space_YCoCg.hpp b/src/qged/display/glm/glm/gtx/color_space_YCoCg.hpp deleted file mode 100644 index 1d49c0da416..00000000000 --- a/src/qged/display/glm/glm/gtx/color_space_YCoCg.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_color_space_YCoCg -/// @file glm/gtx/color_space_YCoCg.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_color_space_YCoCg GLM_GTX_color_space_YCoCg -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// RGB to YCoCg conversions and operations - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_color_space_YCoCg is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_color_space_YCoCg extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_color_space_YCoCg - /// @{ - - /// Convert a color from RGB color space to YCoCg color space. - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCg( - vec<3, T, Q> const& rgbColor); - - /// Convert a color from YCoCg color space to RGB color space. - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> YCoCg2rgb( - vec<3, T, Q> const& YCoCgColor); - - /// Convert a color from RGB color space to YCoCgR color space. - /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> rgb2YCoCgR( - vec<3, T, Q> const& rgbColor); - - /// Convert a color from YCoCgR color space to RGB color space. - /// @see "YCoCg-R: A Color Space with RGB Reversibility and Low Dynamic Range" - /// @see gtx_color_space_YCoCg - template - GLM_FUNC_DECL vec<3, T, Q> YCoCgR2rgb( - vec<3, T, Q> const& YCoCgColor); - - /// @} -}//namespace glm - -#include "color_space_YCoCg.inl" diff --git a/src/qged/display/glm/glm/gtx/color_space_YCoCg.inl b/src/qged/display/glm/glm/gtx/color_space_YCoCg.inl deleted file mode 100644 index 83ba857c08b..00000000000 --- a/src/qged/display/glm/glm/gtx/color_space_YCoCg.inl +++ /dev/null @@ -1,107 +0,0 @@ -/// @ref gtx_color_space_YCoCg - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCg - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.x/*Y */ = rgbColor.r / T(4) + rgbColor.g / T(2) + rgbColor.b / T(4); - result.y/*Co*/ = rgbColor.r / T(2) + rgbColor.g * T(0) - rgbColor.b / T(2); - result.z/*Cg*/ = - rgbColor.r / T(4) + rgbColor.g / T(2) - rgbColor.b / T(4); - return result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCg2rgb - ( - vec<3, T, Q> const& YCoCgColor - ) - { - vec<3, T, Q> result; - result.r = YCoCgColor.x + YCoCgColor.y - YCoCgColor.z; - result.g = YCoCgColor.x + YCoCgColor.z; - result.b = YCoCgColor.x - YCoCgColor.y - YCoCgColor.z; - return result; - } - - template - class compute_YCoCgR { - public: - static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.x/*Y */ = rgbColor.g * static_cast(0.5) + (rgbColor.r + rgbColor.b) * static_cast(0.25); - result.y/*Co*/ = rgbColor.r - rgbColor.b; - result.z/*Cg*/ = rgbColor.g - (rgbColor.r + rgbColor.b) * static_cast(0.5); - return result; - } - - static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - vec<3, T, Q> result; - T tmp = YCoCgRColor.x - (YCoCgRColor.z * static_cast(0.5)); - result.g = YCoCgRColor.z + tmp; - result.b = tmp - (YCoCgRColor.y * static_cast(0.5)); - result.r = result.b + YCoCgRColor.y; - return result; - } - }; - - template - class compute_YCoCgR { - public: - static GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - vec<3, T, Q> result; - result.y/*Co*/ = rgbColor.r - rgbColor.b; - T tmp = rgbColor.b + (result.y >> 1); - result.z/*Cg*/ = rgbColor.g - tmp; - result.x/*Y */ = tmp + (result.z >> 1); - return result; - } - - static GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - vec<3, T, Q> result; - T tmp = YCoCgRColor.x - (YCoCgRColor.z >> 1); - result.g = YCoCgRColor.z + tmp; - result.b = tmp - (YCoCgRColor.y >> 1); - result.r = result.b + YCoCgRColor.y; - return result; - } - }; - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rgb2YCoCgR - ( - vec<3, T, Q> const& rgbColor - ) - { - return compute_YCoCgR::is_integer>::rgb2YCoCgR(rgbColor); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> YCoCgR2rgb - ( - vec<3, T, Q> const& YCoCgRColor - ) - { - return compute_YCoCgR::is_integer>::YCoCgR2rgb(YCoCgRColor); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/common.hpp b/src/qged/display/glm/glm/gtx/common.hpp deleted file mode 100644 index 484f0faeb86..00000000000 --- a/src/qged/display/glm/glm/gtx/common.hpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_common -/// @file glm/gtx/common.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_common GLM_GTX_common -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Provide functions to increase the compatibility with Cg and HLSL languages - -#pragma once - -// Dependencies: -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../gtc/vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_common is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_common extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_common - /// @{ - - /// Returns true if x is a denormalized number - /// Numbers whose absolute value is too small to be represented in the normal format are represented in an alternate, denormalized format. - /// This format is less precise but can represent values closer to zero. - /// - /// @tparam genType Floating-point scalar or vector types. - /// - /// @see GLSL isnan man page - /// @see GLSL 4.20.8 specification, section 8.3 Common Functions - template - GLM_FUNC_DECL typename genType::bool_type isdenormal(genType const& x); - - /// Similar to 'mod' but with a different rounding and integer support. - /// Returns 'x - y * trunc(x/y)' instead of 'x - y * floor(x/y)' - /// - /// @see GLSL mod vs HLSL fmod - /// @see GLSL mod man page - template - GLM_FUNC_DECL vec fmod(vec const& v); - - /// Returns whether vector components values are within an interval. A open interval excludes its endpoints, and is denoted with square brackets. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_relational - template - GLM_FUNC_DECL vec openBounded(vec const& Value, vec const& Min, vec const& Max); - - /// Returns whether vector components values are within an interval. A closed interval includes its endpoints, and is denoted with square brackets. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see ext_vector_relational - template - GLM_FUNC_DECL vec closeBounded(vec const& Value, vec const& Min, vec const& Max); - - /// @} -}//namespace glm - -#include "common.inl" diff --git a/src/qged/display/glm/glm/gtx/common.inl b/src/qged/display/glm/glm/gtx/common.inl deleted file mode 100644 index 4ad2126d965..00000000000 --- a/src/qged/display/glm/glm/gtx/common.inl +++ /dev/null @@ -1,125 +0,0 @@ -/// @ref gtx_common - -#include -#include "../gtc/epsilon.hpp" -#include "../gtc/constants.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_fmod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - return detail::functor2::call(std::fmod, a, b); - } - }; - - template - struct compute_fmod - { - GLM_FUNC_QUALIFIER static vec call(vec const& a, vec const& b) - { - return a % b; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool isdenormal(T const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - -# if GLM_HAS_CXX11_STL - return std::fpclassify(x) == FP_SUBNORMAL; -# else - return epsilonNotEqual(x, static_cast(0), epsilon()) && std::fabs(x) < std::numeric_limits::min(); -# endif - } - - template - GLM_FUNC_QUALIFIER typename vec<1, T, Q>::bool_type isdenormal - ( - vec<1, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<1, T, Q>::bool_type( - isdenormal(x.x)); - } - - template - GLM_FUNC_QUALIFIER typename vec<2, T, Q>::bool_type isdenormal - ( - vec<2, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<2, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y)); - } - - template - GLM_FUNC_QUALIFIER typename vec<3, T, Q>::bool_type isdenormal - ( - vec<3, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<3, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y), - isdenormal(x.z)); - } - - template - GLM_FUNC_QUALIFIER typename vec<4, T, Q>::bool_type isdenormal - ( - vec<4, T, Q> const& x - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isdenormal' only accept floating-point inputs"); - - return typename vec<4, T, Q>::bool_type( - isdenormal(x.x), - isdenormal(x.y), - isdenormal(x.z), - isdenormal(x.w)); - } - - // fmod - template - GLM_FUNC_QUALIFIER genType fmod(genType x, genType y) - { - return fmod(vec<1, genType>(x), y).x; - } - - template - GLM_FUNC_QUALIFIER vec fmod(vec const& x, T y) - { - return detail::compute_fmod::is_iec559>::call(x, vec(y)); - } - - template - GLM_FUNC_QUALIFIER vec fmod(vec const& x, vec const& y) - { - return detail::compute_fmod::is_iec559>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER vec openBounded(vec const& Value, vec const& Min, vec const& Max) - { - return greaterThan(Value, Min) && lessThan(Value, Max); - } - - template - GLM_FUNC_QUALIFIER vec closeBounded(vec const& Value, vec const& Min, vec const& Max) - { - return greaterThanEqual(Value, Min) && lessThanEqual(Value, Max); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/compatibility.hpp b/src/qged/display/glm/glm/gtx/compatibility.hpp deleted file mode 100644 index c160c8fd4ee..00000000000 --- a/src/qged/display/glm/glm/gtx/compatibility.hpp +++ /dev/null @@ -1,164 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_compatibility -/// @file glm/gtx/compatibility.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_compatibility GLM_GTX_compatibility -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Provide functions to increase the compatibility with Cg and HLSL languages - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_compatibility is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_compatibility extension included") -# endif -#endif - -#if GLM_COMPILER & GLM_COMPILER_VC -# include -#elif GLM_COMPILER & GLM_COMPILER_GCC -# include -# if(GLM_PLATFORM & GLM_PLATFORM_ANDROID) -# undef isfinite -# endif -#endif//GLM_COMPILER - -namespace glm -{ - /// @addtogroup gtx_compatibility - /// @{ - - template GLM_FUNC_QUALIFIER T lerp(T x, T y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, T a){return mix(x, y, a);} //!< \brief Returns x * (1.0 - a) + y * a, i.e., the linear blend of x and y using the floating-point value a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> lerp(const vec<2, T, Q>& x, const vec<2, T, Q>& y, const vec<2, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> lerp(const vec<3, T, Q>& x, const vec<3, T, Q>& y, const vec<3, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> lerp(const vec<4, T, Q>& x, const vec<4, T, Q>& y, const vec<4, T, Q>& a){return mix(x, y, a);} //!< \brief Returns the component-wise result of x * (1.0 - a) + y * a, i.e., the linear blend of x and y using vector a. The value for a is not restricted to the range [0, 1]. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER T saturate(T x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> saturate(const vec<2, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> saturate(const vec<3, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> saturate(const vec<4, T, Q>& x){return clamp(x, T(0), T(1));} //!< \brief Returns clamp(x, 0, 1) for each component in x. (From GLM_GTX_compatibility) - - template GLM_FUNC_QUALIFIER T atan2(T x, T y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<2, T, Q> atan2(const vec<2, T, Q>& x, const vec<2, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<3, T, Q> atan2(const vec<3, T, Q>& x, const vec<3, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - template GLM_FUNC_QUALIFIER vec<4, T, Q> atan2(const vec<4, T, Q>& x, const vec<4, T, Q>& y){return atan(x, y);} //!< \brief Arc tangent. Returns an angle whose tangent is y/x. The signs of x and y are used to determine what quadrant the angle is in. The range of values returned by this function is [-PI, PI]. Results are undefined if x and y are both 0. (From GLM_GTX_compatibility) - - template GLM_FUNC_DECL bool isfinite(genType const& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<1, bool, Q> isfinite(const vec<1, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<2, bool, Q> isfinite(const vec<2, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<3, bool, Q> isfinite(const vec<3, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - template GLM_FUNC_DECL vec<4, bool, Q> isfinite(const vec<4, T, Q>& x); //!< \brief Test whether or not a scalar or each vector component is a finite value. (From GLM_GTX_compatibility) - - typedef bool bool1; //!< \brief boolean type with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, bool, highp> bool2; //!< \brief boolean type with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, bool, highp> bool3; //!< \brief boolean type with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, bool, highp> bool4; //!< \brief boolean type with 4 components. (From GLM_GTX_compatibility extension) - - typedef bool bool1x1; //!< \brief boolean matrix with 1 x 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, bool, highp> bool2x2; //!< \brief boolean matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, bool, highp> bool2x3; //!< \brief boolean matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, bool, highp> bool2x4; //!< \brief boolean matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, bool, highp> bool3x2; //!< \brief boolean matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, bool, highp> bool3x3; //!< \brief boolean matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, bool, highp> bool3x4; //!< \brief boolean matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, bool, highp> bool4x2; //!< \brief boolean matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, bool, highp> bool4x3; //!< \brief boolean matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, bool, highp> bool4x4; //!< \brief boolean matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef int int1; //!< \brief integer vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, int, highp> int2; //!< \brief integer vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, int, highp> int3; //!< \brief integer vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, int, highp> int4; //!< \brief integer vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef int int1x1; //!< \brief integer matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, int, highp> int2x2; //!< \brief integer matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, int, highp> int2x3; //!< \brief integer matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, int, highp> int2x4; //!< \brief integer matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, int, highp> int3x2; //!< \brief integer matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, int, highp> int3x3; //!< \brief integer matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, int, highp> int3x4; //!< \brief integer matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, int, highp> int4x2; //!< \brief integer matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, int, highp> int4x3; //!< \brief integer matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, int, highp> int4x4; //!< \brief integer matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef float float1; //!< \brief single-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, float, highp> float2; //!< \brief single-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, float, highp> float3; //!< \brief single-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, float, highp> float4; //!< \brief single-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef float float1x1; //!< \brief single-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, float, highp> float2x2; //!< \brief single-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, float, highp> float2x3; //!< \brief single-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, float, highp> float2x4; //!< \brief single-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, float, highp> float3x2; //!< \brief single-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, float, highp> float3x3; //!< \brief single-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, float, highp> float3x4; //!< \brief single-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, float, highp> float4x2; //!< \brief single-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, float, highp> float4x3; //!< \brief single-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, float, highp> float4x4; //!< \brief single-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - typedef double double1; //!< \brief double-qualifier floating-point vector with 1 component. (From GLM_GTX_compatibility extension) - typedef vec<2, double, highp> double2; //!< \brief double-qualifier floating-point vector with 2 components. (From GLM_GTX_compatibility extension) - typedef vec<3, double, highp> double3; //!< \brief double-qualifier floating-point vector with 3 components. (From GLM_GTX_compatibility extension) - typedef vec<4, double, highp> double4; //!< \brief double-qualifier floating-point vector with 4 components. (From GLM_GTX_compatibility extension) - - typedef double double1x1; //!< \brief double-qualifier floating-point matrix with 1 component. (From GLM_GTX_compatibility extension) - typedef mat<2, 2, double, highp> double2x2; //!< \brief double-qualifier floating-point matrix with 2 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 3, double, highp> double2x3; //!< \brief double-qualifier floating-point matrix with 2 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<2, 4, double, highp> double2x4; //!< \brief double-qualifier floating-point matrix with 2 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 2, double, highp> double3x2; //!< \brief double-qualifier floating-point matrix with 3 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 3, double, highp> double3x3; //!< \brief double-qualifier floating-point matrix with 3 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<3, 4, double, highp> double3x4; //!< \brief double-qualifier floating-point matrix with 3 x 4 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 2, double, highp> double4x2; //!< \brief double-qualifier floating-point matrix with 4 x 2 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 3, double, highp> double4x3; //!< \brief double-qualifier floating-point matrix with 4 x 3 components. (From GLM_GTX_compatibility extension) - typedef mat<4, 4, double, highp> double4x4; //!< \brief double-qualifier floating-point matrix with 4 x 4 components. (From GLM_GTX_compatibility extension) - - /// @} -}//namespace glm - -#include "compatibility.inl" diff --git a/src/qged/display/glm/glm/gtx/compatibility.inl b/src/qged/display/glm/glm/gtx/compatibility.inl deleted file mode 100644 index 1d49496b6c6..00000000000 --- a/src/qged/display/glm/glm/gtx/compatibility.inl +++ /dev/null @@ -1,62 +0,0 @@ -#include - -namespace glm -{ - // isfinite - template - GLM_FUNC_QUALIFIER bool isfinite( - genType const& x) - { -# if GLM_HAS_CXX11_STL - return std::isfinite(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_VC - return _finite(x) != 0; -# elif GLM_COMPILER & GLM_COMPILER_GCC && GLM_PLATFORM & GLM_PLATFORM_ANDROID - return _isfinite(x) != 0; -# else - if (std::numeric_limits::is_integer || std::denorm_absent == std::numeric_limits::has_denorm) - return std::numeric_limits::min() <= x && std::numeric_limits::max() >= x; - else - return -std::numeric_limits::max() <= x && std::numeric_limits::max() >= x; -# endif - } - - template - GLM_FUNC_QUALIFIER vec<1, bool, Q> isfinite( - vec<1, T, Q> const& x) - { - return vec<1, bool, Q>( - isfinite(x.x)); - } - - template - GLM_FUNC_QUALIFIER vec<2, bool, Q> isfinite( - vec<2, T, Q> const& x) - { - return vec<2, bool, Q>( - isfinite(x.x), - isfinite(x.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, bool, Q> isfinite( - vec<3, T, Q> const& x) - { - return vec<3, bool, Q>( - isfinite(x.x), - isfinite(x.y), - isfinite(x.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isfinite( - vec<4, T, Q> const& x) - { - return vec<4, bool, Q>( - isfinite(x.x), - isfinite(x.y), - isfinite(x.z), - isfinite(x.w)); - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/component_wise.hpp b/src/qged/display/glm/glm/gtx/component_wise.hpp deleted file mode 100644 index 49366b6dcc7..00000000000 --- a/src/qged/display/glm/glm/gtx/component_wise.hpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_component_wise -/// @file glm/gtx/component_wise.hpp -/// @date 2007-05-21 / 2011-06-07 -/// @author Christophe Riccio -/// -/// @see core (dependence) -/// -/// @defgroup gtx_component_wise GLM_GTX_component_wise -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Operations between components of a type - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_component_wise is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_component_wise extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_component_wise - /// @{ - - /// Convert an integer vector to a normalized float vector. - /// If the parameter value type is already a floating qualifier type, the value is passed through. - /// @see gtx_component_wise - template - GLM_FUNC_DECL vec compNormalize(vec const& v); - - /// Convert a normalized float vector to an integer vector. - /// If the parameter value type is already a floating qualifier type, the value is passed through. - /// @see gtx_component_wise - template - GLM_FUNC_DECL vec compScale(vec const& v); - - /// Add all vector components together. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compAdd(genType const& v); - - /// Multiply all vector components together. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMul(genType const& v); - - /// Find the minimum value between single vector components. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMin(genType const& v); - - /// Find the maximum value between single vector components. - /// @see gtx_component_wise - template - GLM_FUNC_DECL typename genType::value_type compMax(genType const& v); - - /// @} -}//namespace glm - -#include "component_wise.inl" diff --git a/src/qged/display/glm/glm/gtx/component_wise.inl b/src/qged/display/glm/glm/gtx/component_wise.inl deleted file mode 100644 index cbbc7d41ec0..00000000000 --- a/src/qged/display/glm/glm/gtx/component_wise.inl +++ /dev/null @@ -1,127 +0,0 @@ -/// @ref gtx_component_wise - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_compNormalize - {}; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - floatType const Min = static_cast(std::numeric_limits::min()); - floatType const Max = static_cast(std::numeric_limits::max()); - return (vec(v) - Min) / (Max - Min) * static_cast(2) - static_cast(1); - } - }; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return vec(v) / static_cast(std::numeric_limits::max()); - } - }; - - template - struct compute_compNormalize - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return v; - } - }; - - template - struct compute_compScale - {}; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - floatType const Max = static_cast(std::numeric_limits::max()) + static_cast(0.5); - vec const Scaled(v * Max); - vec const Result(Scaled - static_cast(0.5)); - return Result; - } - }; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return vec(vec(v) * static_cast(std::numeric_limits::max())); - } - }; - - template - struct compute_compScale - { - GLM_FUNC_QUALIFIER static vec call(vec const& v) - { - return v; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER vec compNormalize(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compNormalize' accepts only floating-point types for 'floatType' template parameter"); - - return detail::compute_compNormalize::is_integer, std::numeric_limits::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER vec compScale(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'compScale' accepts only floating-point types for 'floatType' template parameter"); - - return detail::compute_compScale::is_integer, std::numeric_limits::is_signed>::call(v); - } - - template - GLM_FUNC_QUALIFIER T compAdd(vec const& v) - { - T Result(0); - for(length_t i = 0, n = v.length(); i < n; ++i) - Result += v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMul(vec const& v) - { - T Result(1); - for(length_t i = 0, n = v.length(); i < n; ++i) - Result *= v[i]; - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMin(vec const& v) - { - T Result(v[0]); - for(length_t i = 1, n = v.length(); i < n; ++i) - Result = min(Result, v[i]); - return Result; - } - - template - GLM_FUNC_QUALIFIER T compMax(vec const& v) - { - T Result(v[0]); - for(length_t i = 1, n = v.length(); i < n; ++i) - Result = max(Result, v[i]); - return Result; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/dual_quaternion.hpp b/src/qged/display/glm/glm/gtx/dual_quaternion.hpp deleted file mode 100644 index 65452c3bdd0..00000000000 --- a/src/qged/display/glm/glm/gtx/dual_quaternion.hpp +++ /dev/null @@ -1,305 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_dual_quaternion -/// @file glm/gtx/dual_quaternion.hpp -/// @author Maksim Vorobiev (msomeone@gmail.com) -/// -/// @see core (dependence) -/// @see gtc_constants (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_dual_quaternion GLM_GTX_dual_quaternion -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines a templated dual-quaternion type and several dual-quaternion operations. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_dual_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_dual_quaternion extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_dual_quaternion - /// @{ - - template - struct tdualquat - { - // -- Implementation detail -- - - typedef T value_type; - typedef qua part_type; - - // -- Data -- - - qua real, dual; - - // -- Component accesses -- - - typedef length_t length_type; - /// Return the count of components of a dual quaternion - GLM_FUNC_DECL static GLM_CONSTEXPR length_type length(){return 2;} - - GLM_FUNC_DECL part_type & operator[](length_type i); - GLM_FUNC_DECL part_type const& operator[](length_type i) const; - - // -- Implicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat() GLM_DEFAULT; - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d) GLM_DEFAULT; - template - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(tdualquat const& d); - - // -- Explicit basic constructors -- - - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real); - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& orientation, vec<3, T, Q> const& translation); - GLM_FUNC_DECL GLM_CONSTEXPR tdualquat(qua const& real, qua const& dual); - - // -- Conversion constructors -- - - template - GLM_FUNC_DECL GLM_CONSTEXPR GLM_EXPLICIT tdualquat(tdualquat const& q); - - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<2, 4, T, Q> const& holder_mat); - GLM_FUNC_DECL GLM_EXPLICIT GLM_CONSTEXPR tdualquat(mat<3, 4, T, Q> const& aug_mat); - - // -- Unary arithmetic operators -- - - GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m) GLM_DEFAULT; - - template - GLM_FUNC_DECL tdualquat & operator=(tdualquat const& m); - template - GLM_FUNC_DECL tdualquat & operator*=(U s); - template - GLM_FUNC_DECL tdualquat & operator/=(U s); - }; - - // -- Unary bit operators -- - - template - GLM_FUNC_DECL tdualquat operator+(tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator-(tdualquat const& q); - - // -- Binary operators -- - - template - GLM_FUNC_DECL tdualquat operator+(tdualquat const& q, tdualquat const& p); - - template - GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, tdualquat const& p); - - template - GLM_FUNC_DECL vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v); - - template - GLM_FUNC_DECL vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q); - - template - GLM_FUNC_DECL vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v); - - template - GLM_FUNC_DECL vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator*(tdualquat const& q, T const& s); - - template - GLM_FUNC_DECL tdualquat operator*(T const& s, tdualquat const& q); - - template - GLM_FUNC_DECL tdualquat operator/(tdualquat const& q, T const& s); - - // -- Boolean operators -- - - template - GLM_FUNC_DECL bool operator==(tdualquat const& q1, tdualquat const& q2); - - template - GLM_FUNC_DECL bool operator!=(tdualquat const& q1, tdualquat const& q2); - - /// Creates an identity dual quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dual_quat_identity(); - - /// Returns the normalized quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat normalize(tdualquat const& q); - - /// Returns the linear interpolation of two dual quaternion. - /// - /// @see gtc_dual_quaternion - template - GLM_FUNC_DECL tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a); - - /// Returns the q inverse. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat inverse(tdualquat const& q); - - /// Converts a quaternion to a 2 * 4 matrix. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x); - - /// Converts a quaternion to a 3 * 4 matrix. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x); - - /// Converts a 2 * 4 matrix (matrix which holds real and dual parts) to a quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dualquat_cast(mat<2, 4, T, Q> const& x); - - /// Converts a 3 * 4 matrix (augmented matrix rotation + translation) to a quaternion. - /// - /// @see gtx_dual_quaternion - template - GLM_FUNC_DECL tdualquat dualquat_cast(mat<3, 4, T, Q> const& x); - - - /// Dual-quaternion of low single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_dualquat; - - /// Dual-quaternion of medium single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_dualquat; - - /// Dual-quaternion of high single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_dualquat; - - - /// Dual-quaternion of low single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_fdualquat; - - /// Dual-quaternion of medium single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_fdualquat; - - /// Dual-quaternion of high single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_fdualquat; - - - /// Dual-quaternion of low double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat lowp_ddualquat; - - /// Dual-quaternion of medium double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat mediump_ddualquat; - - /// Dual-quaternion of high double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef tdualquat highp_ddualquat; - - -#if(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - /// Dual-quaternion of floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_fdualquat dualquat; - - /// Dual-quaternion of single-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_fdualquat fdualquat; -#elif(defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - typedef highp_fdualquat dualquat; - typedef highp_fdualquat fdualquat; -#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && defined(GLM_PRECISION_MEDIUMP_FLOAT) && !defined(GLM_PRECISION_LOWP_FLOAT)) - typedef mediump_fdualquat dualquat; - typedef mediump_fdualquat fdualquat; -#elif(!defined(GLM_PRECISION_HIGHP_FLOAT) && !defined(GLM_PRECISION_MEDIUMP_FLOAT) && defined(GLM_PRECISION_LOWP_FLOAT)) - typedef lowp_fdualquat dualquat; - typedef lowp_fdualquat fdualquat; -#else -# error "GLM error: multiple default precision requested for single-precision floating-point types" -#endif - - -#if(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - /// Dual-quaternion of default double-qualifier floating-point numbers. - /// - /// @see gtx_dual_quaternion - typedef highp_ddualquat ddualquat; -#elif(defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef highp_ddualquat ddualquat; -#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && defined(GLM_PRECISION_MEDIUMP_DOUBLE) && !defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef mediump_ddualquat ddualquat; -#elif(!defined(GLM_PRECISION_HIGHP_DOUBLE) && !defined(GLM_PRECISION_MEDIUMP_DOUBLE) && defined(GLM_PRECISION_LOWP_DOUBLE)) - typedef lowp_ddualquat ddualquat; -#else -# error "GLM error: Multiple default precision requested for double-precision floating-point types" -#endif - - /// @} -} //namespace glm - -#include "dual_quaternion.inl" diff --git a/src/qged/display/glm/glm/gtx/dual_quaternion.inl b/src/qged/display/glm/glm/gtx/dual_quaternion.inl deleted file mode 100644 index fad07ea842c..00000000000 --- a/src/qged/display/glm/glm/gtx/dual_quaternion.inl +++ /dev/null @@ -1,352 +0,0 @@ -/// @ref gtx_dual_quaternion - -#include "../geometric.hpp" -#include - -namespace glm -{ - // -- Component accesses -- - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type & tdualquat::operator[](typename tdualquat::length_type i) - { - assert(i >= 0 && i < this->length()); - return (&real)[i]; - } - - template - GLM_FUNC_QUALIFIER typename tdualquat::part_type const& tdualquat::operator[](typename tdualquat::length_type i) const - { - assert(i >= 0 && i < this->length()); - return (&real)[i]; - } - - // -- Implicit basic constructors -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat() -# if GLM_CONFIG_DEFAULTED_FUNCTIONS != GLM_DISABLE - : real(qua()) - , dual(qua(0, 0, 0, 0)) -# endif - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) - : real(d.real) - , dual(d.dual) - {} -# endif - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& d) - : real(d.real) - , dual(d.dual) - {} - - // -- Explicit basic constructors -- - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r) - : real(r), dual(qua(0, 0, 0, 0)) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& q, vec<3, T, Q> const& p) - : real(q), dual( - T(-0.5) * ( p.x*q.x + p.y*q.y + p.z*q.z), - T(+0.5) * ( p.x*q.w + p.y*q.z - p.z*q.y), - T(+0.5) * (-p.x*q.z + p.y*q.w + p.z*q.x), - T(+0.5) * ( p.x*q.y - p.y*q.x + p.z*q.w)) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(qua const& r, qua const& d) - : real(r), dual(d) - {} - - // -- Conversion constructors -- - - template - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(tdualquat const& q) - : real(q.real) - , dual(q.dual) - {} - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<2, 4, T, Q> const& m) - { - *this = dualquat_cast(m); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR tdualquat::tdualquat(mat<3, 4, T, Q> const& m) - { - *this = dualquat_cast(m); - } - - // -- Unary arithmetic operators -- - -# if GLM_CONFIG_DEFAULTED_FUNCTIONS == GLM_DISABLE - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) - { - this->real = q.real; - this->dual = q.dual; - return *this; - } -# endif - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator=(tdualquat const& q) - { - this->real = q.real; - this->dual = q.dual; - return *this; - } - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator*=(U s) - { - this->real *= static_cast(s); - this->dual *= static_cast(s); - return *this; - } - - template - template - GLM_FUNC_QUALIFIER tdualquat & tdualquat::operator/=(U s) - { - this->real /= static_cast(s); - this->dual /= static_cast(s); - return *this; - } - - // -- Unary bit operators -- - - template - GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q) - { - return q; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator-(tdualquat const& q) - { - return tdualquat(-q.real, -q.dual); - } - - // -- Binary operators -- - - template - GLM_FUNC_QUALIFIER tdualquat operator+(tdualquat const& q, tdualquat const& p) - { - return tdualquat(q.real + p.real,q.dual + p.dual); - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& p, tdualquat const& o) - { - return tdualquat(p.real * o.real,p.real * o.dual + p.dual * o.real); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(tdualquat const& q, vec<3, T, Q> const& v) - { - vec<3, T, Q> const real_v3(q.real.x,q.real.y,q.real.z); - vec<3, T, Q> const dual_v3(q.dual.x,q.dual.y,q.dual.z); - return (cross(real_v3, cross(real_v3,v) + v * q.real.w + dual_v3) + dual_v3 * q.real.w - real_v3 * q.dual.w) * T(2) + v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> operator*(vec<3, T, Q> const& v, tdualquat const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(tdualquat const& q, vec<4, T, Q> const& v) - { - return vec<4, T, Q>(q * vec<3, T, Q>(v), v.w); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> operator*(vec<4, T, Q> const& v, tdualquat const& q) - { - return glm::inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(tdualquat const& q, T const& s) - { - return tdualquat(q.real * s, q.dual * s); - } - - template - GLM_FUNC_QUALIFIER tdualquat operator*(T const& s, tdualquat const& q) - { - return q * s; - } - - template - GLM_FUNC_QUALIFIER tdualquat operator/(tdualquat const& q, T const& s) - { - return tdualquat(q.real / s, q.dual / s); - } - - // -- Boolean operators -- - - template - GLM_FUNC_QUALIFIER bool operator==(tdualquat const& q1, tdualquat const& q2) - { - return (q1.real == q2.real) && (q1.dual == q2.dual); - } - - template - GLM_FUNC_QUALIFIER bool operator!=(tdualquat const& q1, tdualquat const& q2) - { - return (q1.real != q2.real) || (q1.dual != q2.dual); - } - - // -- Operations -- - - template - GLM_FUNC_QUALIFIER tdualquat dual_quat_identity() - { - return tdualquat( - qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)), - qua(static_cast(0), static_cast(0), static_cast(0), static_cast(0))); - } - - template - GLM_FUNC_QUALIFIER tdualquat normalize(tdualquat const& q) - { - return q / length(q.real); - } - - template - GLM_FUNC_QUALIFIER tdualquat lerp(tdualquat const& x, tdualquat const& y, T const& a) - { - // Dual Quaternion Linear blend aka DLB: - // Lerp is only defined in [0, 1] - assert(a >= static_cast(0)); - assert(a <= static_cast(1)); - T const k = dot(x.real,y.real) < static_cast(0) ? -a : a; - T const one(1); - return tdualquat(x * (one - a) + y * k); - } - - template - GLM_FUNC_QUALIFIER tdualquat inverse(tdualquat const& q) - { - const glm::qua real = conjugate(q.real); - const glm::qua dual = conjugate(q.dual); - return tdualquat(real, dual + (real * (-2.0f * dot(real,dual)))); - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> mat2x4_cast(tdualquat const& x) - { - return mat<2, 4, T, Q>( x[0].x, x[0].y, x[0].z, x[0].w, x[1].x, x[1].y, x[1].z, x[1].w ); - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> mat3x4_cast(tdualquat const& x) - { - qua r = x.real / length2(x.real); - - qua const rr(r.w * x.real.w, r.x * x.real.x, r.y * x.real.y, r.z * x.real.z); - r *= static_cast(2); - - T const xy = r.x * x.real.y; - T const xz = r.x * x.real.z; - T const yz = r.y * x.real.z; - T const wx = r.w * x.real.x; - T const wy = r.w * x.real.y; - T const wz = r.w * x.real.z; - - vec<4, T, Q> const a( - rr.w + rr.x - rr.y - rr.z, - xy - wz, - xz + wy, - -(x.dual.w * r.x - x.dual.x * r.w + x.dual.y * r.z - x.dual.z * r.y)); - - vec<4, T, Q> const b( - xy + wz, - rr.w + rr.y - rr.x - rr.z, - yz - wx, - -(x.dual.w * r.y - x.dual.x * r.z - x.dual.y * r.w + x.dual.z * r.x)); - - vec<4, T, Q> const c( - xz - wy, - yz + wx, - rr.w + rr.z - rr.x - rr.y, - -(x.dual.w * r.z + x.dual.x * r.y - x.dual.y * r.x - x.dual.z * r.w)); - - return mat<3, 4, T, Q>(a, b, c); - } - - template - GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<2, 4, T, Q> const& x) - { - return tdualquat( - qua( x[0].w, x[0].x, x[0].y, x[0].z ), - qua( x[1].w, x[1].x, x[1].y, x[1].z )); - } - - template - GLM_FUNC_QUALIFIER tdualquat dualquat_cast(mat<3, 4, T, Q> const& x) - { - qua real; - - T const trace = x[0].x + x[1].y + x[2].z; - if(trace > static_cast(0)) - { - T const r = sqrt(T(1) + trace); - T const invr = static_cast(0.5) / r; - real.w = static_cast(0.5) * r; - real.x = (x[2].y - x[1].z) * invr; - real.y = (x[0].z - x[2].x) * invr; - real.z = (x[1].x - x[0].y) * invr; - } - else if(x[0].x > x[1].y && x[0].x > x[2].z) - { - T const r = sqrt(T(1) + x[0].x - x[1].y - x[2].z); - T const invr = static_cast(0.5) / r; - real.x = static_cast(0.5)*r; - real.y = (x[1].x + x[0].y) * invr; - real.z = (x[0].z + x[2].x) * invr; - real.w = (x[2].y - x[1].z) * invr; - } - else if(x[1].y > x[2].z) - { - T const r = sqrt(T(1) + x[1].y - x[0].x - x[2].z); - T const invr = static_cast(0.5) / r; - real.x = (x[1].x + x[0].y) * invr; - real.y = static_cast(0.5) * r; - real.z = (x[2].y + x[1].z) * invr; - real.w = (x[0].z - x[2].x) * invr; - } - else - { - T const r = sqrt(T(1) + x[2].z - x[0].x - x[1].y); - T const invr = static_cast(0.5) / r; - real.x = (x[0].z + x[2].x) * invr; - real.y = (x[2].y + x[1].z) * invr; - real.z = static_cast(0.5) * r; - real.w = (x[1].x - x[0].y) * invr; - } - - qua dual; - dual.x = static_cast(0.5) * ( x[0].w * real.w + x[1].w * real.z - x[2].w * real.y); - dual.y = static_cast(0.5) * (-x[0].w * real.z + x[1].w * real.w + x[2].w * real.x); - dual.z = static_cast(0.5) * ( x[0].w * real.y - x[1].w * real.x + x[2].w * real.w); - dual.w = -static_cast(0.5) * ( x[0].w * real.x + x[1].w * real.y + x[2].w * real.z); - return tdualquat(real, dual); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/easing.hpp b/src/qged/display/glm/glm/gtx/easing.hpp deleted file mode 100644 index 61d8e5937d0..00000000000 --- a/src/qged/display/glm/glm/gtx/easing.hpp +++ /dev/null @@ -1,250 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_easing -/// @file glm/gtx/easing.hpp -/// @author Robert Chisholm -/// -/// @see core (dependence) -/// -/// @defgroup gtx_easing GLM_GTX_easing -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Easing functions for animations and transitons -/// All functions take a parameter x in the range [0.0,1.0] -/// -/// Based on the AHEasing project of Warren Moore (https://github.com/warrenm/AHEasing) - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_easing is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_easing extension included") -# endif -#endif - -namespace glm{ - /// @addtogroup gtx_easing - /// @{ - - /// Modelled after the line y = x - /// @see gtx_easing - template - GLM_FUNC_DECL genType linearInterpolation(genType const & a); - - /// Modelled after the parabola y = x^2 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseIn(genType const & a); - - /// Modelled after the parabola y = -x^2 + 2x - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseOut(genType const & a); - - /// Modelled after the piecewise quadratic - /// y = (1/2)((2x)^2) ; [0, 0.5) - /// y = -(1/2)((2x-1)*(2x-3) - 1) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quadraticEaseInOut(genType const & a); - - /// Modelled after the cubic y = x^3 - template - GLM_FUNC_DECL genType cubicEaseIn(genType const & a); - - /// Modelled after the cubic y = (x - 1)^3 + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType cubicEaseOut(genType const & a); - - /// Modelled after the piecewise cubic - /// y = (1/2)((2x)^3) ; [0, 0.5) - /// y = (1/2)((2x-2)^3 + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType cubicEaseInOut(genType const & a); - - /// Modelled after the quartic x^4 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseIn(genType const & a); - - /// Modelled after the quartic y = 1 - (x - 1)^4 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseOut(genType const & a); - - /// Modelled after the piecewise quartic - /// y = (1/2)((2x)^4) ; [0, 0.5) - /// y = -(1/2)((2x-2)^4 - 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quarticEaseInOut(genType const & a); - - /// Modelled after the quintic y = x^5 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseIn(genType const & a); - - /// Modelled after the quintic y = (x - 1)^5 + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseOut(genType const & a); - - /// Modelled after the piecewise quintic - /// y = (1/2)((2x)^5) ; [0, 0.5) - /// y = (1/2)((2x-2)^5 + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType quinticEaseInOut(genType const & a); - - /// Modelled after quarter-cycle of sine wave - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseIn(genType const & a); - - /// Modelled after quarter-cycle of sine wave (different phase) - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseOut(genType const & a); - - /// Modelled after half sine wave - /// @see gtx_easing - template - GLM_FUNC_DECL genType sineEaseInOut(genType const & a); - - /// Modelled after shifted quadrant IV of unit circle - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseIn(genType const & a); - - /// Modelled after shifted quadrant II of unit circle - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseOut(genType const & a); - - /// Modelled after the piecewise circular function - /// y = (1/2)(1 - sqrt(1 - 4x^2)) ; [0, 0.5) - /// y = (1/2)(sqrt(-(2x - 3)*(2x - 1)) + 1) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType circularEaseInOut(genType const & a); - - /// Modelled after the exponential function y = 2^(10(x - 1)) - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseIn(genType const & a); - - /// Modelled after the exponential function y = -2^(-10x) + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseOut(genType const & a); - - /// Modelled after the piecewise exponential - /// y = (1/2)2^(10(2x - 1)) ; [0,0.5) - /// y = -(1/2)*2^(-10(2x - 1))) + 1 ; [0.5,1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType exponentialEaseInOut(genType const & a); - - /// Modelled after the damped sine wave y = sin(13pi/2*x)*pow(2, 10 * (x - 1)) - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseIn(genType const & a); - - /// Modelled after the damped sine wave y = sin(-13pi/2*(x + 1))*pow(2, -10x) + 1 - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseOut(genType const & a); - - /// Modelled after the piecewise exponentially-damped sine wave: - /// y = (1/2)*sin(13pi/2*(2*x))*pow(2, 10 * ((2*x) - 1)) ; [0,0.5) - /// y = (1/2)*(sin(-13pi/2*((2x-1)+1))*pow(2,-10(2*x-1)) + 2) ; [0.5, 1] - /// @see gtx_easing - template - GLM_FUNC_DECL genType elasticEaseInOut(genType const & a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseIn(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseOut(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseInOut(genType const& a); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseIn(genType const& a, genType const& o); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseOut(genType const& a, genType const& o); - - /// @param a parameter - /// @param o Optional overshoot modifier - /// @see gtx_easing - template - GLM_FUNC_DECL genType backEaseInOut(genType const& a, genType const& o); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseIn(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseOut(genType const& a); - - /// @see gtx_easing - template - GLM_FUNC_DECL genType bounceEaseInOut(genType const& a); - - /// @} -}//namespace glm - -#include "easing.inl" diff --git a/src/qged/display/glm/glm/gtx/easing.inl b/src/qged/display/glm/glm/gtx/easing.inl deleted file mode 100644 index 4b7d05b7196..00000000000 --- a/src/qged/display/glm/glm/gtx/easing.inl +++ /dev/null @@ -1,436 +0,0 @@ -/// @ref gtx_easing - -#include - -namespace glm{ - - template - GLM_FUNC_QUALIFIER genType linearInterpolation(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a; - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a; - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return -(a * (a - static_cast(2))); - } - - template - GLM_FUNC_QUALIFIER genType quadraticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(2) * a * a; - } - else - { - return (-static_cast(2) * a * a) + (4 * a) - one(); - } - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = a - one(); - return f * f * f + one(); - } - - template - GLM_FUNC_QUALIFIER genType cubicEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if (a < static_cast(0.5)) - { - return static_cast(4) * a * a * a; - } - else - { - genType const f = ((static_cast(2) * a) - static_cast(2)); - return static_cast(0.5) * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = (a - one()); - return f * f * f * (one() - a) + one(); - } - - template - GLM_FUNC_QUALIFIER genType quarticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(8) * a * a * a * a; - } - else - { - genType const f = (a - one()); - return -static_cast(8) * f * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return a * a * a * a * a; - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType const f = (a - one()); - return f * f * f * f * f + one(); - } - - template - GLM_FUNC_QUALIFIER genType quinticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(16) * a * a * a * a * a; - } - else - { - genType const f = ((static_cast(2) * a) - static_cast(2)); - return static_cast(0.5) * f * f * f * f * f + one(); - } - } - - template - GLM_FUNC_QUALIFIER genType sineEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sin((a - one()) * half_pi()) + one(); - } - - template - GLM_FUNC_QUALIFIER genType sineEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sin(a * half_pi()); - } - - template - GLM_FUNC_QUALIFIER genType sineEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return static_cast(0.5) * (one() - cos(a * pi())); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return one() - sqrt(one() - (a * a)); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return sqrt((static_cast(2) - a) * a); - } - - template - GLM_FUNC_QUALIFIER genType circularEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(0.5) * (one() - std::sqrt(one() - static_cast(4) * (a * a))); - } - else - { - return static_cast(0.5) * (std::sqrt(-((static_cast(2) * a) - static_cast(3)) * ((static_cast(2) * a) - one())) + one()); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a <= zero()) - return a; - else - { - genType const Complementary = a - one(); - genType const Two = static_cast(2); - - return glm::pow(Two, Complementary * static_cast(10)); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a >= one()) - return a; - else - { - return one() - glm::pow(static_cast(2), -static_cast(10) * a); - } - } - - template - GLM_FUNC_QUALIFIER genType exponentialEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - return static_cast(0.5) * glm::pow(static_cast(2), (static_cast(20) * a) - static_cast(10)); - else - return -static_cast(0.5) * glm::pow(static_cast(2), (-static_cast(20) * a) + static_cast(10)) + one(); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return std::sin(static_cast(13) * half_pi() * a) * glm::pow(static_cast(2), static_cast(10) * (a - one())); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return std::sin(-static_cast(13) * half_pi() * (a + one())) * glm::pow(static_cast(2), -static_cast(10) * a) + one(); - } - - template - GLM_FUNC_QUALIFIER genType elasticEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - return static_cast(0.5) * std::sin(static_cast(13) * half_pi() * (static_cast(2) * a)) * glm::pow(static_cast(2), static_cast(10) * ((static_cast(2) * a) - one())); - else - return static_cast(0.5) * (std::sin(-static_cast(13) * half_pi() * ((static_cast(2) * a - one()) + one())) * glm::pow(static_cast(2), -static_cast(10) * (static_cast(2) * a - one())) + static_cast(2)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType z = ((o + one()) * a) - o; - return (a * a * z); - } - - template - GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType n = a - one(); - genType z = ((o + one()) * n) + o; - return (n * n * z) + one(); - } - - template - GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a, genType const& o) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - genType s = o * static_cast(1.525); - genType x = static_cast(0.5); - genType n = a / static_cast(0.5); - - if (n < static_cast(1)) - { - genType z = ((s + static_cast(1)) * n) - s; - genType m = n * n * z; - return x * m; - } - else - { - n -= static_cast(2); - genType z = ((s + static_cast(1)) * n) + s; - genType m = (n*n*z) + static_cast(2); - return x * m; - } - } - - template - GLM_FUNC_QUALIFIER genType backEaseIn(genType const& a) - { - return backEaseIn(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseOut(genType const& a) - { - return backEaseOut(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType backEaseInOut(genType const& a) - { - return backEaseInOut(a, static_cast(1.70158)); - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(4.0 / 11.0)) - { - return (static_cast(121) * a * a) / static_cast(16); - } - else if(a < static_cast(8.0 / 11.0)) - { - return (static_cast(363.0 / 40.0) * a * a) - (static_cast(99.0 / 10.0) * a) + static_cast(17.0 / 5.0); - } - else if(a < static_cast(9.0 / 10.0)) - { - return (static_cast(4356.0 / 361.0) * a * a) - (static_cast(35442.0 / 1805.0) * a) + static_cast(16061.0 / 1805.0); - } - else - { - return (static_cast(54.0 / 5.0) * a * a) - (static_cast(513.0 / 25.0) * a) + static_cast(268.0 / 25.0); - } - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseIn(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - return one() - bounceEaseOut(one() - a); - } - - template - GLM_FUNC_QUALIFIER genType bounceEaseInOut(genType const& a) - { - // Only defined in [0, 1] - assert(a >= zero()); - assert(a <= one()); - - if(a < static_cast(0.5)) - { - return static_cast(0.5) * (one() - bounceEaseOut(a * static_cast(2))); - } - else - { - return static_cast(0.5) * bounceEaseOut(a * static_cast(2) - one()) + static_cast(0.5); - } - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/euler_angles.hpp b/src/qged/display/glm/glm/gtx/euler_angles.hpp deleted file mode 100644 index 55e5cef9c06..00000000000 --- a/src/qged/display/glm/glm/gtx/euler_angles.hpp +++ /dev/null @@ -1,366 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_euler_angles -/// @file glm/gtx/euler_angles.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_euler_angles GLM_GTX_euler_angles -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build matrices from Euler angles. -/// -/// Extraction of Euler angles from rotation matrix. -/// Based on the original paper 2014 Mike Day - Extracting Euler Angles from a Rotation Matrix. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_euler_angles is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_euler_angles extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_euler_angles - /// @{ - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle X. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleX( - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Y. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleY( - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from an euler angle Z. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZ( - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about X-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleX( - T const & angleX, T const & angularVelocityX); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Y-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleY( - T const & angleY, T const & angularVelocityY); - - /// Creates a 3D 4 * 4 homogeneous derived matrix from the rotation matrix about Z-axis. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> derivedEulerAngleZ( - T const & angleZ, T const & angularVelocityZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXY( - T const& angleX, - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYX( - T const& angleY, - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZ( - T const& angleX, - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZX( - T const& angle, - T const& angleX); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZ( - T const& angleY, - T const& angleZ); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZY( - T const& angleZ, - T const& angleY); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYZ( - T const& t1, - T const& t2, - T const& t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXZ( - T const& yaw, - T const& pitch, - T const& roll); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXYX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYXY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYZ( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXZ( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (X * Z * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleXZY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * Z * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleYZX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * Y * X). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZYX( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Z * X * Y). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> eulerAngleZXY( - T const & t1, - T const & t2, - T const & t3); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, defaultp> yawPitchRoll( - T const& yaw, - T const& pitch, - T const& roll); - - /// Creates a 2D 2 * 2 rotation matrix from an euler angle. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<2, 2, T, defaultp> orientate2(T const& angle); - - /// Creates a 2D 4 * 4 homogeneous rotation matrix from an euler angle. - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<3, 3, T, defaultp> orientate3(T const& angle); - - /// Creates a 3D 3 * 3 rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<3, 3, T, Q> orientate3(vec<3, T, Q> const& angles); - - /// Creates a 3D 4 * 4 homogeneous rotation matrix from euler angles (Y * X * Z). - /// @see gtx_euler_angles - template - GLM_FUNC_DECL mat<4, 4, T, Q> orientate4(vec<3, T, Q> const& angles); - - /// Extracts the (X * Y * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * X * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Z * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Y * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * X * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * Z * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * Y * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * X * Z) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (X * Z * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Y * Z * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * Y * X) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// Extracts the (Z * X * Y) Euler angles from the rotation matrix M - /// @see gtx_euler_angles - template - GLM_FUNC_DECL void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3); - - /// @} -}//namespace glm - -#include "euler_angles.inl" diff --git a/src/qged/display/glm/glm/gtx/euler_angles.inl b/src/qged/display/glm/glm/gtx/euler_angles.inl deleted file mode 100644 index 68c50124e80..00000000000 --- a/src/qged/display/glm/glm/gtx/euler_angles.inl +++ /dev/null @@ -1,899 +0,0 @@ -/// @ref gtx_euler_angles - -#include "compatibility.hpp" // glm::atan2 - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleX - ( - T const& angleX - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - - return mat<4, 4, T, defaultp>( - T(1), T(0), T(0), T(0), - T(0), cosX, sinX, T(0), - T(0),-sinX, cosX, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleY - ( - T const& angleY - ) - { - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, T(0), -sinY, T(0), - T(0), T(1), T(0), T(0), - sinY, T(0), cosY, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZ - ( - T const& angleZ - ) - { - T cosZ = glm::cos(angleZ); - T sinZ = glm::sin(angleZ); - - return mat<4, 4, T, defaultp>( - cosZ, sinZ, T(0), T(0), - -sinZ, cosZ, T(0), T(0), - T(0), T(0), T(1), T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleX - ( - T const & angleX, - T const & angularVelocityX - ) - { - T cosX = glm::cos(angleX) * angularVelocityX; - T sinX = glm::sin(angleX) * angularVelocityX; - - return mat<4, 4, T, defaultp>( - T(0), T(0), T(0), T(0), - T(0),-sinX, cosX, T(0), - T(0),-cosX,-sinX, T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleY - ( - T const & angleY, - T const & angularVelocityY - ) - { - T cosY = glm::cos(angleY) * angularVelocityY; - T sinY = glm::sin(angleY) * angularVelocityY; - - return mat<4, 4, T, defaultp>( - -sinY, T(0), -cosY, T(0), - T(0), T(0), T(0), T(0), - cosY, T(0), -sinY, T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> derivedEulerAngleZ - ( - T const & angleZ, - T const & angularVelocityZ - ) - { - T cosZ = glm::cos(angleZ) * angularVelocityZ; - T sinZ = glm::sin(angleZ) * angularVelocityZ; - - return mat<4, 4, T, defaultp>( - -sinZ, cosZ, T(0), T(0), - -cosZ, -sinZ, T(0), T(0), - T(0), T(0), T(0), T(0), - T(0), T(0), T(0), T(0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXY - ( - T const& angleX, - T const& angleY - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, -sinX * -sinY, cosX * -sinY, T(0), - T(0), cosX, sinX, T(0), - sinY, -sinX * cosY, cosX * cosY, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYX - ( - T const& angleY, - T const& angleX - ) - { - T cosX = glm::cos(angleX); - T sinX = glm::sin(angleX); - T cosY = glm::cos(angleY); - T sinY = glm::sin(angleY); - - return mat<4, 4, T, defaultp>( - cosY, 0, -sinY, T(0), - sinY * sinX, cosX, cosY * sinX, T(0), - sinY * cosX, -sinX, cosY * cosX, T(0), - T(0), T(0), T(0), T(1)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZ - ( - T const& angleX, - T const& angleZ - ) - { - return eulerAngleX(angleX) * eulerAngleZ(angleZ); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZX - ( - T const& angleZ, - T const& angleX - ) - { - return eulerAngleZ(angleZ) * eulerAngleX(angleX); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZ - ( - T const& angleY, - T const& angleZ - ) - { - return eulerAngleY(angleY) * eulerAngleZ(angleZ); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZY - ( - T const& angleZ, - T const& angleY - ) - { - return eulerAngleZ(angleZ) * eulerAngleY(angleY); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYZ - ( - T const& t1, - T const& t2, - T const& t3 - ) - { - T c1 = glm::cos(-t1); - T c2 = glm::cos(-t2); - T c3 = glm::cos(-t3); - T s1 = glm::sin(-t1); - T s2 = glm::sin(-t2); - T s3 = glm::sin(-t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2 * c3; - Result[0][1] =-c1 * s3 + s1 * s2 * c3; - Result[0][2] = s1 * s3 + c1 * s2 * c3; - Result[0][3] = static_cast(0); - Result[1][0] = c2 * s3; - Result[1][1] = c1 * c3 + s1 * s2 * s3; - Result[1][2] =-s1 * c3 + c1 * s2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] =-s2; - Result[2][1] = s1 * c2; - Result[2][2] = c1 * c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXZ - ( - T const& yaw, - T const& pitch, - T const& roll - ) - { - T tmp_ch = glm::cos(yaw); - T tmp_sh = glm::sin(yaw); - T tmp_cp = glm::cos(pitch); - T tmp_sp = glm::sin(pitch); - T tmp_cb = glm::cos(roll); - T tmp_sb = glm::sin(roll); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; - Result[0][1] = tmp_sb * tmp_cp; - Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; - Result[0][3] = static_cast(0); - Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; - Result[1][1] = tmp_cb * tmp_cp; - Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; - Result[1][3] = static_cast(0); - Result[2][0] = tmp_sh * tmp_cp; - Result[2][1] = -tmp_sp; - Result[2][2] = tmp_ch * tmp_cp; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2; - Result[0][1] = c1 * s2; - Result[0][2] = s1 * s2; - Result[0][3] = static_cast(0); - Result[1][0] =-c3 * s2; - Result[1][1] = c1 * c2 * c3 - s1 * s3; - Result[1][2] = c1 * s3 + c2 * c3 * s1; - Result[1][3] = static_cast(0); - Result[2][0] = s2 * s3; - Result[2][1] =-c3 * s1 - c1 * c2 * s3; - Result[2][2] = c1 * c3 - c2 * s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXYX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2; - Result[0][1] = s1 * s2; - Result[0][2] =-c1 * s2; - Result[0][3] = static_cast(0); - Result[1][0] = s2 * s3; - Result[1][1] = c1 * c3 - c2 * s1 * s3; - Result[1][2] = c3 * s1 + c1 * c2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s2; - Result[2][1] =-c1 * s3 - c2 * c3 * s1; - Result[2][2] = c1 * c2 * c3 - s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYXY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - c2 * s1 * s3; - Result[0][1] = s2* s3; - Result[0][2] =-c3 * s1 - c1 * c2 * s3; - Result[0][3] = static_cast(0); - Result[1][0] = s1 * s2; - Result[1][1] = c2; - Result[1][2] = c1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s3 + c2 * c3 * s1; - Result[2][1] =-c3 * s2; - Result[2][2] = c1 * c2 * c3 - s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2 * c3 - s1 * s3; - Result[0][1] = c3 * s2; - Result[0][2] =-c1 * s3 - c2 * c3 * s1; - Result[0][3] = static_cast(0); - Result[1][0] =-c1 * s2; - Result[1][1] = c2; - Result[1][2] = s1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s1 + c1 * c2 * s3; - Result[2][1] = s2 * s3; - Result[2][2] = c1 * c3 - c2 * s1 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYZ - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2 * c3 - s1 * s3; - Result[0][1] = c1 * s3 + c2 * c3 * s1; - Result[0][2] =-c3 * s2; - Result[0][3] = static_cast(0); - Result[1][0] =-c3 * s1 - c1 * c2 * s3; - Result[1][1] = c1 * c3 - c2 * s1 * s3; - Result[1][2] = s2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s2; - Result[2][1] = s1 * s2; - Result[2][2] = c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXZ - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - c2 * s1 * s3; - Result[0][1] = c3 * s1 + c1 * c2 * s3; - Result[0][2] = s2 *s3; - Result[0][3] = static_cast(0); - Result[1][0] =-c1 * s3 - c2 * c3 * s1; - Result[1][1] = c1 * c2 * c3 - s1 * s3; - Result[1][2] = c3 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = s1 * s2; - Result[2][1] =-c1 * s2; - Result[2][2] = c2; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleXZY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c2 * c3; - Result[0][1] = s1 * s3 + c1 * c3 * s2; - Result[0][2] = c3 * s1 * s2 - c1 * s3; - Result[0][3] = static_cast(0); - Result[1][0] =-s2; - Result[1][1] = c1 * c2; - Result[1][2] = c2 * s1; - Result[1][3] = static_cast(0); - Result[2][0] = c2 * s3; - Result[2][1] = c1 * s2 * s3 - c3 * s1; - Result[2][2] = c1 * c3 + s1 * s2 *s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleYZX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2; - Result[0][1] = s2; - Result[0][2] =-c2 * s1; - Result[0][3] = static_cast(0); - Result[1][0] = s1 * s3 - c1 * c3 * s2; - Result[1][1] = c2 * c3; - Result[1][2] = c1 * s3 + c3 * s1 * s2; - Result[1][3] = static_cast(0); - Result[2][0] = c3 * s1 + c1 * s2 * s3; - Result[2][1] =-c2 * s3; - Result[2][2] = c1 * c3 - s1 * s2 * s3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZYX - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c2; - Result[0][1] = c2 * s1; - Result[0][2] =-s2; - Result[0][3] = static_cast(0); - Result[1][0] = c1 * s2 * s3 - c3 * s1; - Result[1][1] = c1 * c3 + s1 * s2 * s3; - Result[1][2] = c2 * s3; - Result[1][3] = static_cast(0); - Result[2][0] = s1 * s3 + c1 * c3 * s2; - Result[2][1] = c3 * s1 * s2 - c1 * s3; - Result[2][2] = c2 * c3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> eulerAngleZXY - ( - T const & t1, - T const & t2, - T const & t3 - ) - { - T c1 = glm::cos(t1); - T s1 = glm::sin(t1); - T c2 = glm::cos(t2); - T s2 = glm::sin(t2); - T c3 = glm::cos(t3); - T s3 = glm::sin(t3); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = c1 * c3 - s1 * s2 * s3; - Result[0][1] = c3 * s1 + c1 * s2 * s3; - Result[0][2] =-c2 * s3; - Result[0][3] = static_cast(0); - Result[1][0] =-c2 * s1; - Result[1][1] = c1 * c2; - Result[1][2] = s2; - Result[1][3] = static_cast(0); - Result[2][0] = c1 * s3 + c3 * s1 * s2; - Result[2][1] = s1 * s3 - c1 * c3 * s2; - Result[2][2] = c2 * c3; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, defaultp> yawPitchRoll - ( - T const& yaw, - T const& pitch, - T const& roll - ) - { - T tmp_ch = glm::cos(yaw); - T tmp_sh = glm::sin(yaw); - T tmp_cp = glm::cos(pitch); - T tmp_sp = glm::sin(pitch); - T tmp_cb = glm::cos(roll); - T tmp_sb = glm::sin(roll); - - mat<4, 4, T, defaultp> Result; - Result[0][0] = tmp_ch * tmp_cb + tmp_sh * tmp_sp * tmp_sb; - Result[0][1] = tmp_sb * tmp_cp; - Result[0][2] = -tmp_sh * tmp_cb + tmp_ch * tmp_sp * tmp_sb; - Result[0][3] = static_cast(0); - Result[1][0] = -tmp_ch * tmp_sb + tmp_sh * tmp_sp * tmp_cb; - Result[1][1] = tmp_cb * tmp_cp; - Result[1][2] = tmp_sb * tmp_sh + tmp_ch * tmp_sp * tmp_cb; - Result[1][3] = static_cast(0); - Result[2][0] = tmp_sh * tmp_cp; - Result[2][1] = -tmp_sp; - Result[2][2] = tmp_ch * tmp_cp; - Result[2][3] = static_cast(0); - Result[3][0] = static_cast(0); - Result[3][1] = static_cast(0); - Result[3][2] = static_cast(0); - Result[3][3] = static_cast(1); - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, defaultp> orientate2 - ( - T const& angle - ) - { - T c = glm::cos(angle); - T s = glm::sin(angle); - - mat<2, 2, T, defaultp> Result; - Result[0][0] = c; - Result[0][1] = s; - Result[1][0] = -s; - Result[1][1] = c; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, defaultp> orientate3 - ( - T const& angle - ) - { - T c = glm::cos(angle); - T s = glm::sin(angle); - - mat<3, 3, T, defaultp> Result; - Result[0][0] = c; - Result[0][1] = s; - Result[0][2] = 0.0f; - Result[1][0] = -s; - Result[1][1] = c; - Result[1][2] = 0.0f; - Result[2][0] = 0.0f; - Result[2][1] = 0.0f; - Result[2][2] = 1.0f; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orientate3 - ( - vec<3, T, Q> const& angles - ) - { - return mat<3, 3, T, Q>(yawPitchRoll(angles.z, angles.x, angles.y)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientate4 - ( - vec<3, T, Q> const& angles - ) - { - return yawPitchRoll(angles.z, angles.x, angles.y); - } - - template - GLM_FUNC_DECL void extractEulerAngleXYZ(mat<4, 4, T, defaultp> const& M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][1], M[2][2]); - T C2 = glm::sqrt(M[0][0]*M[0][0] + M[1][0]*M[1][0]); - T T2 = glm::atan2(-M[2][0], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[0][2] - C1*M[0][1], C1*M[1][1] - S1*M[1][2 ]); - t1 = -T1; - t2 = -T2; - t3 = -T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][0], M[2][2]); - T C2 = glm::sqrt(M[0][1]*M[0][1] + M[1][1]*M[1][1]); - T T2 = glm::atan2(-M[2][1], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[1][2] - C1*M[1][0], C1*M[0][0] - S1*M[0][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][2], M[0][1]); - T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(S2, M[0][0]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[1][2] - S1*M[1][1], C1*M[2][2] - S1*M[2][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][1], -M[0][2]); - T S2 = glm::sqrt(M[1][0]*M[1][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(S2, M[0][0]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-C1*M[2][1] - S1*M[2][2], C1*M[1][1] + S1*M[1][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][0], M[1][2]); - T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(S2, M[1][1]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[2][0] - S1*M[2][2], C1*M[0][0] - S1*M[0][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][2], -M[1][0]); - T S2 = glm::sqrt(M[0][1]*M[0][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(S2, M[1][1]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-S1*M[0][0] - C1*M[0][2], S1*M[2][0] + C1*M[2][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZYZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][1], M[2][0]); - T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); - T T2 = glm::atan2(S2, M[2][2]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[0][1] - S1*M[0][0], C1*M[1][1] - S1*M[1][0]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZXZ(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[2][0], -M[2][1]); - T S2 = glm::sqrt(M[0][2]*M[0][2] + M[1][2]*M[1][2]); - T T2 = glm::atan2(S2, M[2][2]); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(-C1*M[1][0] - S1*M[1][1], C1*M[0][0] + S1*M[0][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleXZY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[1][2], M[1][1]); - T C2 = glm::sqrt(M[0][0]*M[0][0] + M[2][0]*M[2][0]); - T T2 = glm::atan2(-M[1][0], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[0][1] - C1*M[0][2], C1*M[2][2] - S1*M[2][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleYZX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(-M[0][2], M[0][0]); - T C2 = glm::sqrt(M[1][1]*M[1][1] + M[2][1]*M[2][1]); - T T2 = glm::atan2(M[0][1], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[1][0] + C1*M[1][2], S1*M[2][0] + C1*M[2][2]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZYX(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(M[0][1], M[0][0]); - T C2 = glm::sqrt(M[1][2]*M[1][2] + M[2][2]*M[2][2]); - T T2 = glm::atan2(-M[0][2], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(S1*M[2][0] - C1*M[2][1], C1*M[1][1] - S1*M[1][0]); - t1 = T1; - t2 = T2; - t3 = T3; - } - - template - GLM_FUNC_QUALIFIER void extractEulerAngleZXY(mat<4, 4, T, defaultp> const & M, - T & t1, - T & t2, - T & t3) - { - T T1 = glm::atan2(-M[1][0], M[1][1]); - T C2 = glm::sqrt(M[0][2]*M[0][2] + M[2][2]*M[2][2]); - T T2 = glm::atan2(M[1][2], C2); - T S1 = glm::sin(T1); - T C1 = glm::cos(T1); - T T3 = glm::atan2(C1*M[2][0] + S1*M[2][1], C1*M[0][0] + S1*M[0][1]); - t1 = T1; - t2 = T2; - t3 = T3; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/extend.hpp b/src/qged/display/glm/glm/gtx/extend.hpp deleted file mode 100644 index e71b7974216..00000000000 --- a/src/qged/display/glm/glm/gtx/extend.hpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_extend -/// @file glm/gtx/extend.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_extend GLM_GTX_extend -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extend a position from a source to a position at a defined length. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extend extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_extend - /// @{ - - /// Extends of Length the Origin position using the (Source - Origin) direction. - /// @see gtx_extend - template - GLM_FUNC_DECL genType extend( - genType const& Origin, - genType const& Source, - typename genType::value_type const Length); - - /// @} -}//namespace glm - -#include "extend.inl" diff --git a/src/qged/display/glm/glm/gtx/extend.inl b/src/qged/display/glm/glm/gtx/extend.inl deleted file mode 100644 index 32128eb209a..00000000000 --- a/src/qged/display/glm/glm/gtx/extend.inl +++ /dev/null @@ -1,48 +0,0 @@ -/// @ref gtx_extend - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType extend - ( - genType const& Origin, - genType const& Source, - genType const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> extend - ( - vec<2, T, Q> const& Origin, - vec<2, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> extend - ( - vec<3, T, Q> const& Origin, - vec<3, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> extend - ( - vec<4, T, Q> const& Origin, - vec<4, T, Q> const& Source, - T const& Distance - ) - { - return Origin + (Source - Origin) * Distance; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/extended_min_max.hpp b/src/qged/display/glm/glm/gtx/extended_min_max.hpp deleted file mode 100644 index e936378bdcb..00000000000 --- a/src/qged/display/glm/glm/gtx/extended_min_max.hpp +++ /dev/null @@ -1,168 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_extended_min_max -/// @file glm/gtx/extended_min_max.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_extended_min_max GLM_GTX_extented_min_max -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Min and max functions for 3 to 4 parameters. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../ext/vector_common.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extented_min_max is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extented_min_max extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_extended_min_max - /// @{ - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T min( - T const& x, - T const& y, - T const& z); - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - typename C::T const& y, - typename C::T const& z); - - /// Return the minimum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - C const& y, - C const& z); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T min( - T const& x, - T const& y, - T const& z, - T const& w); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w); - - /// Return the minimum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C min( - C const& x, - C const& y, - C const& z, - C const& w); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T max( - T const& x, - T const& y, - T const& z); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - typename C::T const& y, - typename C::T const& z); - - /// Return the maximum component-wise values of 3 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - C const& y, - C const& z); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template - GLM_FUNC_DECL T max( - T const& x, - T const& y, - T const& z, - T const& w); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w); - - /// Return the maximum component-wise values of 4 inputs - /// @see gtx_extented_min_max - template class C> - GLM_FUNC_DECL C max( - C const& x, - C const& y, - C const& z, - C const& w); - - /// @} -}//namespace glm - -#include "extended_min_max.inl" diff --git a/src/qged/display/glm/glm/gtx/extended_min_max.inl b/src/qged/display/glm/glm/gtx/extended_min_max.inl deleted file mode 100644 index de5998fadd6..00000000000 --- a/src/qged/display/glm/glm/gtx/extended_min_max.inl +++ /dev/null @@ -1,138 +0,0 @@ -/// @ref gtx_extended_min_max - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T min( - T const& x, - T const& y, - T const& z) - { - return glm::min(glm::min(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - typename C::T const& y, - typename C::T const& z - ) - { - return glm::min(glm::min(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - C const& y, - C const& z - ) - { - return glm::min(glm::min(x, y), z); - } - - template - GLM_FUNC_QUALIFIER T min - ( - T const& x, - T const& y, - T const& z, - T const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C min - ( - C const& x, - C const& y, - C const& z, - C const& w - ) - { - return glm::min(glm::min(x, y), glm::min(z, w)); - } - - template - GLM_FUNC_QUALIFIER T max( - T const& x, - T const& y, - T const& z) - { - return glm::max(glm::max(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - typename C::T const& y, - typename C::T const& z - ) - { - return glm::max(glm::max(x, y), z); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - C const& y, - C const& z - ) - { - return glm::max(glm::max(x, y), z); - } - - template - GLM_FUNC_QUALIFIER T max - ( - T const& x, - T const& y, - T const& z, - T const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - typename C::T const& y, - typename C::T const& z, - typename C::T const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } - - template class C> - GLM_FUNC_QUALIFIER C max - ( - C const& x, - C const& y, - C const& z, - C const& w - ) - { - return glm::max(glm::max(x, y), glm::max(z, w)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/exterior_product.hpp b/src/qged/display/glm/glm/gtx/exterior_product.hpp deleted file mode 100644 index e5b154eb450..00000000000 --- a/src/qged/display/glm/glm/gtx/exterior_product.hpp +++ /dev/null @@ -1,76 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_exterior_product -/// @file glm/gtx/exterior_product.hpp -/// -/// @see core (dependence) -/// @see gtx_exterior_product (dependence) -/// -/// @defgroup gtx_exterior_product GLM_GTX_exterior_product -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// @brief Allow to perform bit operations on integer values - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_exterior_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_exterior_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_exterior_product - /// @{ - - /// Returns the cross product of x and y. - /// - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see Exterior product - template - GLM_FUNC_DECL T cross(vec<2, T, Q> const& v, vec<2, T, Q> const& u); - - /// @} -} //namespace glm - -#include "exterior_product.inl" diff --git a/src/qged/display/glm/glm/gtx/exterior_product.inl b/src/qged/display/glm/glm/gtx/exterior_product.inl deleted file mode 100644 index 93661fd3fd7..00000000000 --- a/src/qged/display/glm/glm/gtx/exterior_product.inl +++ /dev/null @@ -1,26 +0,0 @@ -/// @ref gtx_exterior_product - -#include - -namespace glm { -namespace detail -{ - template - struct compute_cross_vec2 - { - GLM_FUNC_QUALIFIER static T call(vec<2, T, Q> const& v, vec<2, T, Q> const& u) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'cross' accepts only floating-point inputs"); - - return v.x * u.y - u.x * v.y; - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER T cross(vec<2, T, Q> const& x, vec<2, T, Q> const& y) - { - return detail::compute_cross_vec2::value>::call(x, y); - } -}//namespace glm - diff --git a/src/qged/display/glm/glm/gtx/fast_exponential.hpp b/src/qged/display/glm/glm/gtx/fast_exponential.hpp deleted file mode 100644 index 4a30e84fc50..00000000000 --- a/src/qged/display/glm/glm/gtx/fast_exponential.hpp +++ /dev/null @@ -1,126 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_fast_exponential -/// @file glm/gtx/fast_exponential.hpp -/// -/// @see core (dependence) -/// @see gtx_half_float (dependence) -/// -/// @defgroup gtx_fast_exponential GLM_GTX_fast_exponential -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of exponential based functions. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_exponential is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_exponential extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_exponential - /// @{ - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL genType fastPow(genType x, genType y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastPow(vec const& x, vec const& y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL genTypeT fastPow(genTypeT x, genTypeU y); - - /// Faster than the common pow function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastPow(vec const& x); - - /// Faster than the common exp function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastExp(T x); - - /// Faster than the common exp function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastExp(vec const& x); - - /// Faster than the common log function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastLog(T x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastLog(vec const& x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastExp2(T x); - - /// Faster than the common exp2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastExp2(vec const& x); - - /// Faster than the common log2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL T fastLog2(T x); - - /// Faster than the common log2 function but less accurate. - /// @see gtx_fast_exponential - template - GLM_FUNC_DECL vec fastLog2(vec const& x); - - /// @} -}//namespace glm - -#include "fast_exponential.inl" diff --git a/src/qged/display/glm/glm/gtx/fast_exponential.inl b/src/qged/display/glm/glm/gtx/fast_exponential.inl deleted file mode 100644 index f139e505636..00000000000 --- a/src/qged/display/glm/glm/gtx/fast_exponential.inl +++ /dev/null @@ -1,136 +0,0 @@ -/// @ref gtx_fast_exponential - -namespace glm -{ - // fastPow: - template - GLM_FUNC_QUALIFIER genType fastPow(genType x, genType y) - { - return exp(y * log(x)); - } - - template - GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) - { - return exp(y * log(x)); - } - - template - GLM_FUNC_QUALIFIER T fastPow(T x, int y) - { - T f = static_cast(1); - for(int i = 0; i < y; ++i) - f *= x; - return f; - } - - template - GLM_FUNC_QUALIFIER vec fastPow(vec const& x, vec const& y) - { - vec Result; - for(length_t i = 0, n = x.length(); i < n; ++i) - Result[i] = fastPow(x[i], y[i]); - return Result; - } - - // fastExp - // Note: This function provides accurate results only for value between -1 and 1, else avoid it. - template - GLM_FUNC_QUALIFIER T fastExp(T x) - { - // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. - // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); - T x2 = x * x; - T x3 = x2 * x; - T x4 = x3 * x; - T x5 = x4 * x; - return T(1) + x + (x2 * T(0.5)) + (x3 * T(0.1666666667)) + (x4 * T(0.041666667)) + (x5 * T(0.008333333333)); - } - /* // Try to handle all values of float... but often shower than std::exp, glm::floor and the loop kill the performance - GLM_FUNC_QUALIFIER float fastExp(float x) - { - const float e = 2.718281828f; - const float IntegerPart = floor(x); - const float FloatPart = x - IntegerPart; - float z = 1.f; - - for(int i = 0; i < int(IntegerPart); ++i) - z *= e; - - const float x2 = FloatPart * FloatPart; - const float x3 = x2 * FloatPart; - const float x4 = x3 * FloatPart; - const float x5 = x4 * FloatPart; - return z * (1.0f + FloatPart + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)); - } - - // Increase accuracy on number bigger that 1 and smaller than -1 but it's not enough for high and negative numbers - GLM_FUNC_QUALIFIER float fastExp(float x) - { - // This has a better looking and same performance in release mode than the following code. However, in debug mode it's slower. - // return 1.0f + x * (1.0f + x * 0.5f * (1.0f + x * 0.3333333333f * (1.0f + x * 0.25 * (1.0f + x * 0.2f)))); - float x2 = x * x; - float x3 = x2 * x; - float x4 = x3 * x; - float x5 = x4 * x; - float x6 = x5 * x; - float x7 = x6 * x; - float x8 = x7 * x; - return 1.0f + x + (x2 * 0.5f) + (x3 * 0.1666666667f) + (x4 * 0.041666667f) + (x5 * 0.008333333333f)+ (x6 * 0.00138888888888f) + (x7 * 0.000198412698f) + (x8 * 0.0000248015873f);; - } - */ - - template - GLM_FUNC_QUALIFIER vec fastExp(vec const& x) - { - return detail::functor1::call(fastExp, x); - } - - // fastLog - template - GLM_FUNC_QUALIFIER genType fastLog(genType x) - { - return std::log(x); - } - - /* Slower than the VC7.1 function... - GLM_FUNC_QUALIFIER float fastLog(float x) - { - float y1 = (x - 1.0f) / (x + 1.0f); - float y2 = y1 * y1; - return 2.0f * y1 * (1.0f + y2 * (0.3333333333f + y2 * (0.2f + y2 * 0.1428571429f))); - } - */ - - template - GLM_FUNC_QUALIFIER vec fastLog(vec const& x) - { - return detail::functor1::call(fastLog, x); - } - - //fastExp2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType fastExp2(genType x) - { - return fastExp(0.69314718055994530941723212145818f * x); - } - - template - GLM_FUNC_QUALIFIER vec fastExp2(vec const& x) - { - return detail::functor1::call(fastExp2, x); - } - - // fastLog2, ln2 = 0.69314718055994530941723212145818f - template - GLM_FUNC_QUALIFIER genType fastLog2(genType x) - { - return fastLog(x) / 0.69314718055994530941723212145818f; - } - - template - GLM_FUNC_QUALIFIER vec fastLog2(vec const& x) - { - return detail::functor1::call(fastLog2, x); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/fast_square_root.hpp b/src/qged/display/glm/glm/gtx/fast_square_root.hpp deleted file mode 100644 index ed99af60aa7..00000000000 --- a/src/qged/display/glm/glm/gtx/fast_square_root.hpp +++ /dev/null @@ -1,123 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_fast_square_root -/// @file glm/gtx/fast_square_root.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_fast_square_root GLM_GTX_fast_square_root -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of square root based functions. -/// - Sqrt optimisation based on Newton's method, -/// www.gamedev.net/community/forums/topic.asp?topic id=139956 - -#pragma once - -// Dependency: -#include "../common.hpp" -#include "../exponential.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_square_root is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_square_root extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_square_root - /// @{ - - /// Faster than the common sqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastSqrt(genType x); - - /// Faster than the common sqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL vec fastSqrt(vec const& x); - - /// Faster than the common inversesqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastInverseSqrt(genType x); - - /// Faster than the common inversesqrt function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL vec fastInverseSqrt(vec const& x); - - /// Faster than the common length function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastLength(genType x); - - /// Faster than the common length function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL T fastLength(vec const& x); - - /// Faster than the common distance function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastDistance(genType x, genType y); - - /// Faster than the common distance function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL T fastDistance(vec const& x, vec const& y); - - /// Faster than the common normalize function but less accurate. - /// - /// @see gtx_fast_square_root extension. - template - GLM_FUNC_DECL genType fastNormalize(genType const& x); - - /// @} -}// namespace glm - -#include "fast_square_root.inl" diff --git a/src/qged/display/glm/glm/gtx/fast_square_root.inl b/src/qged/display/glm/glm/gtx/fast_square_root.inl deleted file mode 100644 index 4e6c6de90e2..00000000000 --- a/src/qged/display/glm/glm/gtx/fast_square_root.inl +++ /dev/null @@ -1,75 +0,0 @@ -/// @ref gtx_fast_square_root - -namespace glm -{ - // fastSqrt - template - GLM_FUNC_QUALIFIER genType fastSqrt(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastSqrt' only accept floating-point input"); - - return genType(1) / fastInverseSqrt(x); - } - - template - GLM_FUNC_QUALIFIER vec fastSqrt(vec const& x) - { - return detail::functor1::call(fastSqrt, x); - } - - // fastInversesqrt - template - GLM_FUNC_QUALIFIER genType fastInverseSqrt(genType x) - { - return detail::compute_inversesqrt<1, genType, lowp, detail::is_aligned::value>::call(vec<1, genType, lowp>(x)).x; - } - - template - GLM_FUNC_QUALIFIER vec fastInverseSqrt(vec const& x) - { - return detail::compute_inversesqrt::value>::call(x); - } - - // fastLength - template - GLM_FUNC_QUALIFIER genType fastLength(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); - - return abs(x); - } - - template - GLM_FUNC_QUALIFIER T fastLength(vec const& x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'fastLength' only accept floating-point inputs"); - - return fastSqrt(dot(x, x)); - } - - // fastDistance - template - GLM_FUNC_QUALIFIER genType fastDistance(genType x, genType y) - { - return fastLength(y - x); - } - - template - GLM_FUNC_QUALIFIER T fastDistance(vec const& x, vec const& y) - { - return fastLength(y - x); - } - - // fastNormalize - template - GLM_FUNC_QUALIFIER genType fastNormalize(genType x) - { - return x > genType(0) ? genType(1) : -genType(1); - } - - template - GLM_FUNC_QUALIFIER vec fastNormalize(vec const& x) - { - return x * fastInverseSqrt(dot(x, x)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/fast_trigonometry.hpp b/src/qged/display/glm/glm/gtx/fast_trigonometry.hpp deleted file mode 100644 index 5929d28ad11..00000000000 --- a/src/qged/display/glm/glm/gtx/fast_trigonometry.hpp +++ /dev/null @@ -1,110 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_fast_trigonometry -/// @file glm/gtx/fast_trigonometry.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_fast_trigonometry GLM_GTX_fast_trigonometry -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Fast but less accurate implementations of trigonometric functions. - -#pragma once - -// Dependency: -#include "../gtc/constants.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_fast_trigonometry is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_fast_trigonometry extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_fast_trigonometry - /// @{ - - /// Wrap an angle to [0 2pi[ - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T wrapAngle(T angle); - - /// Faster than the common sin function but less accurate. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastSin(T angle); - - /// Faster than the common cos function but less accurate. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastCos(T angle); - - /// Faster than the common tan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastTan(T angle); - - /// Faster than the common asin function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAsin(T angle); - - /// Faster than the common acos function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAcos(T angle); - - /// Faster than the common atan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAtan(T y, T x); - - /// Faster than the common atan function but less accurate. - /// Defined between -2pi and 2pi. - /// From GLM_GTX_fast_trigonometry extension. - template - GLM_FUNC_DECL T fastAtan(T angle); - - /// @} -}//namespace glm - -#include "fast_trigonometry.inl" diff --git a/src/qged/display/glm/glm/gtx/fast_trigonometry.inl b/src/qged/display/glm/glm/gtx/fast_trigonometry.inl deleted file mode 100644 index 1a710cbcd08..00000000000 --- a/src/qged/display/glm/glm/gtx/fast_trigonometry.inl +++ /dev/null @@ -1,142 +0,0 @@ -/// @ref gtx_fast_trigonometry - -namespace glm{ -namespace detail -{ - template - GLM_FUNC_QUALIFIER vec taylorCos(vec const& x) - { - return static_cast(1) - - (x * x) * (1.f / 2.f) - + ((x * x) * (x * x)) * (1.f / 24.f) - - (((x * x) * (x * x)) * (x * x)) * (1.f / 720.f) - + (((x * x) * (x * x)) * ((x * x) * (x * x))) * (1.f / 40320.f); - } - - template - GLM_FUNC_QUALIFIER T cos_52s(T x) - { - T const xx(x * x); - return (T(0.9999932946) + xx * (T(-0.4999124376) + xx * (T(0.0414877472) + xx * T(-0.0012712095)))); - } - - template - GLM_FUNC_QUALIFIER vec cos_52s(vec const& x) - { - return detail::functor1::call(cos_52s, x); - } -}//namespace detail - - // wrapAngle - template - GLM_FUNC_QUALIFIER T wrapAngle(T angle) - { - return abs(mod(angle, two_pi())); - } - - template - GLM_FUNC_QUALIFIER vec wrapAngle(vec const& x) - { - return detail::functor1::call(wrapAngle, x); - } - - // cos - template - GLM_FUNC_QUALIFIER T fastCos(T x) - { - T const angle(wrapAngle(x)); - - if(angle < half_pi()) - return detail::cos_52s(angle); - if(angle < pi()) - return -detail::cos_52s(pi() - angle); - if(angle < (T(3) * half_pi())) - return -detail::cos_52s(angle - pi()); - - return detail::cos_52s(two_pi() - angle); - } - - template - GLM_FUNC_QUALIFIER vec fastCos(vec const& x) - { - return detail::functor1::call(fastCos, x); - } - - // sin - template - GLM_FUNC_QUALIFIER T fastSin(T x) - { - return fastCos(half_pi() - x); - } - - template - GLM_FUNC_QUALIFIER vec fastSin(vec const& x) - { - return detail::functor1::call(fastSin, x); - } - - // tan - template - GLM_FUNC_QUALIFIER T fastTan(T x) - { - return x + (x * x * x * T(0.3333333333)) + (x * x * x * x * x * T(0.1333333333333)) + (x * x * x * x * x * x * x * T(0.0539682539)); - } - - template - GLM_FUNC_QUALIFIER vec fastTan(vec const& x) - { - return detail::functor1::call(fastTan, x); - } - - // asin - template - GLM_FUNC_QUALIFIER T fastAsin(T x) - { - return x + (x * x * x * T(0.166666667)) + (x * x * x * x * x * T(0.075)) + (x * x * x * x * x * x * x * T(0.0446428571)) + (x * x * x * x * x * x * x * x * x * T(0.0303819444));// + (x * x * x * x * x * x * x * x * x * x * x * T(0.022372159)); - } - - template - GLM_FUNC_QUALIFIER vec fastAsin(vec const& x) - { - return detail::functor1::call(fastAsin, x); - } - - // acos - template - GLM_FUNC_QUALIFIER T fastAcos(T x) - { - return T(1.5707963267948966192313216916398) - fastAsin(x); //(PI / 2) - } - - template - GLM_FUNC_QUALIFIER vec fastAcos(vec const& x) - { - return detail::functor1::call(fastAcos, x); - } - - // atan - template - GLM_FUNC_QUALIFIER T fastAtan(T y, T x) - { - T sgn = sign(y) * sign(x); - return abs(fastAtan(y / x)) * sgn; - } - - template - GLM_FUNC_QUALIFIER vec fastAtan(vec const& y, vec const& x) - { - return detail::functor2::call(fastAtan, y, x); - } - - template - GLM_FUNC_QUALIFIER T fastAtan(T x) - { - return x - (x * x * x * T(0.333333333333)) + (x * x * x * x * x * T(0.2)) - (x * x * x * x * x * x * x * T(0.1428571429)) + (x * x * x * x * x * x * x * x * x * T(0.111111111111)) - (x * x * x * x * x * x * x * x * x * x * x * T(0.0909090909)); - } - - template - GLM_FUNC_QUALIFIER vec fastAtan(vec const& x) - { - return detail::functor1::call(fastAtan, x); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/float_notmalize.inl b/src/qged/display/glm/glm/gtx/float_notmalize.inl deleted file mode 100644 index 8cdbc5aaa9c..00000000000 --- a/src/qged/display/glm/glm/gtx/float_notmalize.inl +++ /dev/null @@ -1,13 +0,0 @@ -/// @ref gtx_float_normalize - -#include - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec floatNormalize(vec const& v) - { - return vec(v) / static_cast(std::numeric_limits::max()); - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/functions.hpp b/src/qged/display/glm/glm/gtx/functions.hpp deleted file mode 100644 index cc0ccc02af9..00000000000 --- a/src/qged/display/glm/glm/gtx/functions.hpp +++ /dev/null @@ -1,87 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_functions -/// @file glm/gtx/functions.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_functions GLM_GTX_functions -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// List of useful common functions. - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" -#include "../detail/qualifier.hpp" -#include "../detail/type_vec2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_functions is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_functions extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_functions - /// @{ - - /// 1D gauss function - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL T gauss( - T x, - T ExpectedValue, - T StandardDeviation); - - /// 2D gauss function - /// - /// @see gtc_epsilon - template - GLM_FUNC_DECL T gauss( - vec<2, T, Q> const& Coord, - vec<2, T, Q> const& ExpectedValue, - vec<2, T, Q> const& StandardDeviation); - - /// @} -}//namespace glm - -#include "functions.inl" - diff --git a/src/qged/display/glm/glm/gtx/functions.inl b/src/qged/display/glm/glm/gtx/functions.inl deleted file mode 100644 index 29cbb20b80f..00000000000 --- a/src/qged/display/glm/glm/gtx/functions.inl +++ /dev/null @@ -1,30 +0,0 @@ -/// @ref gtx_functions - -#include "../exponential.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T gauss - ( - T x, - T ExpectedValue, - T StandardDeviation - ) - { - return exp(-((x - ExpectedValue) * (x - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation)) / (StandardDeviation * sqrt(static_cast(6.28318530717958647692528676655900576))); - } - - template - GLM_FUNC_QUALIFIER T gauss - ( - vec<2, T, Q> const& Coord, - vec<2, T, Q> const& ExpectedValue, - vec<2, T, Q> const& StandardDeviation - ) - { - vec<2, T, Q> const Squared = ((Coord - ExpectedValue) * (Coord - ExpectedValue)) / (static_cast(2) * StandardDeviation * StandardDeviation); - return exp(-(Squared.x + Squared.y)); - } -}//namespace glm - diff --git a/src/qged/display/glm/glm/gtx/gradient_paint.hpp b/src/qged/display/glm/glm/gtx/gradient_paint.hpp deleted file mode 100644 index e75c581d2cc..00000000000 --- a/src/qged/display/glm/glm/gtx/gradient_paint.hpp +++ /dev/null @@ -1,84 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_gradient_paint -/// @file glm/gtx/gradient_paint.hpp -/// -/// @see core (dependence) -/// @see gtx_optimum_pow (dependence) -/// -/// @defgroup gtx_gradient_paint GLM_GTX_gradient_paint -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions that return the color of procedural gradient for specific coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/optimum_pow.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_gradient_paint is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_gradient_paint extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_gradient_paint - /// @{ - - /// Return a color from a radial gradient. - /// @see - gtx_gradient_paint - template - GLM_FUNC_DECL T radialGradient( - vec<2, T, Q> const& Center, - T const& Radius, - vec<2, T, Q> const& Focal, - vec<2, T, Q> const& Position); - - /// Return a color from a linear gradient. - /// @see - gtx_gradient_paint - template - GLM_FUNC_DECL T linearGradient( - vec<2, T, Q> const& Point0, - vec<2, T, Q> const& Point1, - vec<2, T, Q> const& Position); - - /// @} -}// namespace glm - -#include "gradient_paint.inl" diff --git a/src/qged/display/glm/glm/gtx/gradient_paint.inl b/src/qged/display/glm/glm/gtx/gradient_paint.inl deleted file mode 100644 index 4c495e62cbf..00000000000 --- a/src/qged/display/glm/glm/gtx/gradient_paint.inl +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_gradient_paint - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T radialGradient - ( - vec<2, T, Q> const& Center, - T const& Radius, - vec<2, T, Q> const& Focal, - vec<2, T, Q> const& Position - ) - { - vec<2, T, Q> F = Focal - Center; - vec<2, T, Q> D = Position - Focal; - T Radius2 = pow2(Radius); - T Fx2 = pow2(F.x); - T Fy2 = pow2(F.y); - - T Numerator = (D.x * F.x + D.y * F.y) + sqrt(Radius2 * (pow2(D.x) + pow2(D.y)) - pow2(D.x * F.y - D.y * F.x)); - T Denominator = Radius2 - (Fx2 + Fy2); - return Numerator / Denominator; - } - - template - GLM_FUNC_QUALIFIER T linearGradient - ( - vec<2, T, Q> const& Point0, - vec<2, T, Q> const& Point1, - vec<2, T, Q> const& Position - ) - { - vec<2, T, Q> Dist = Point1 - Point0; - return (Dist.x * (Position.x - Point0.x) + Dist.y * (Position.y - Point0.y)) / glm::dot(Dist, Dist); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/handed_coordinate_space.hpp b/src/qged/display/glm/glm/gtx/handed_coordinate_space.hpp deleted file mode 100644 index cef45ca156e..00000000000 --- a/src/qged/display/glm/glm/gtx/handed_coordinate_space.hpp +++ /dev/null @@ -1,81 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_handed_coordinate_space -/// @file glm/gtx/handed_coordinate_space.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_handed_coordinate_space GLM_GTX_handed_coordinate_space -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// To know if a set of three basis vectors defines a right or left-handed coordinate system. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_handed_coordinate_space is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_handed_coordinate_space extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_handed_coordinate_space - /// @{ - - //! Return if a trihedron right handed or not. - //! From GLM_GTX_handed_coordinate_space extension. - template - GLM_FUNC_DECL bool rightHanded( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal); - - //! Return if a trihedron left handed or not. - //! From GLM_GTX_handed_coordinate_space extension. - template - GLM_FUNC_DECL bool leftHanded( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal); - - /// @} -}// namespace glm - -#include "handed_coordinate_space.inl" diff --git a/src/qged/display/glm/glm/gtx/handed_coordinate_space.inl b/src/qged/display/glm/glm/gtx/handed_coordinate_space.inl deleted file mode 100644 index e43c17bd312..00000000000 --- a/src/qged/display/glm/glm/gtx/handed_coordinate_space.inl +++ /dev/null @@ -1,26 +0,0 @@ -/// @ref gtx_handed_coordinate_space - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool rightHanded - ( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal - ) - { - return dot(cross(normal, tangent), binormal) > T(0); - } - - template - GLM_FUNC_QUALIFIER bool leftHanded - ( - vec<3, T, Q> const& tangent, - vec<3, T, Q> const& binormal, - vec<3, T, Q> const& normal - ) - { - return dot(cross(normal, tangent), binormal) < T(0); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/hash.hpp b/src/qged/display/glm/glm/gtx/hash.hpp deleted file mode 100644 index 57f4b328bca..00000000000 --- a/src/qged/display/glm/glm/gtx/hash.hpp +++ /dev/null @@ -1,173 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_hash -/// @file glm/gtx/hash.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_hash GLM_GTX_hash -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add std::hash support for glm types - -#pragma once - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_hash is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_hash extension included") -# endif -#endif - -#include - -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../gtc/vec1.hpp" - -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" - -#include "../mat2x2.hpp" -#include "../mat2x3.hpp" -#include "../mat2x4.hpp" - -#include "../mat3x2.hpp" -#include "../mat3x3.hpp" -#include "../mat3x4.hpp" - -#include "../mat4x2.hpp" -#include "../mat4x3.hpp" -#include "../mat4x4.hpp" - -#if !GLM_HAS_CXX11_STL -# error "GLM_GTX_hash requires C++11 standard library support" -#endif - -namespace std -{ - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<1, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<2, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<3, T, Q> const& v) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::vec<4, T, Q> const& v) const; - }; - - template - struct hash> - { - GLM_FUNC_DECL size_t operator()(glm::qua const& q) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::tdualquat const& q) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<2, 4, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<3, 4, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 2, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 3, T,Q> const& m) const; - }; - - template - struct hash > - { - GLM_FUNC_DECL size_t operator()(glm::mat<4, 4, T,Q> const& m) const; - }; -} // namespace std - -#include "hash.inl" diff --git a/src/qged/display/glm/glm/gtx/hash.inl b/src/qged/display/glm/glm/gtx/hash.inl deleted file mode 100644 index ff71ca9f7ea..00000000000 --- a/src/qged/display/glm/glm/gtx/hash.inl +++ /dev/null @@ -1,184 +0,0 @@ -/// @ref gtx_hash -/// -/// @see core (dependence) -/// -/// @defgroup gtx_hash GLM_GTX_hash -/// @ingroup gtx -/// -/// @brief Add std::hash support for glm types -/// -/// need to be included to use the features of this extension. - -namespace glm { -namespace detail -{ - GLM_INLINE void hash_combine(size_t &seed, size_t hash) - { - hash += 0x9e3779b9 + (seed << 6) + (seed >> 2); - seed ^= hash; - } -}} - -namespace std -{ - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<1, T, Q> const& v) const - { - hash hasher; - return hasher(v.x); - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<2, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<3, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - glm::detail::hash_combine(seed, hasher(v.z)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::vec<4, T, Q> const& v) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(v.x)); - glm::detail::hash_combine(seed, hasher(v.y)); - glm::detail::hash_combine(seed, hasher(v.z)); - glm::detail::hash_combine(seed, hasher(v.w)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::qua const& q) const - { - size_t seed = 0; - hash hasher; - glm::detail::hash_combine(seed, hasher(q.x)); - glm::detail::hash_combine(seed, hasher(q.y)); - glm::detail::hash_combine(seed, hasher(q.z)); - glm::detail::hash_combine(seed, hasher(q.w)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::tdualquat const& q) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(q.real)); - glm::detail::hash_combine(seed, hasher(q.dual)); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 2, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 3, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<2, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 2, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 3, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<3, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 2, T,Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 3, T,Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } - - template - GLM_FUNC_QUALIFIER size_t hash>::operator()(glm::mat<4, 4, T, Q> const& m) const - { - size_t seed = 0; - hash> hasher; - glm::detail::hash_combine(seed, hasher(m[0])); - glm::detail::hash_combine(seed, hasher(m[1])); - glm::detail::hash_combine(seed, hasher(m[2])); - glm::detail::hash_combine(seed, hasher(m[3])); - return seed; - } -} diff --git a/src/qged/display/glm/glm/gtx/integer.hpp b/src/qged/display/glm/glm/gtx/integer.hpp deleted file mode 100644 index 1b568023c08..00000000000 --- a/src/qged/display/glm/glm/gtx/integer.hpp +++ /dev/null @@ -1,107 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_integer -/// @file glm/gtx/integer.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_integer GLM_GTX_integer -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add support for integer for core functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/integer.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_integer is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_integer extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_integer - /// @{ - - //! Returns x raised to the y power. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int pow(int x, uint y); - - //! Returns the positive square root of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int sqrt(int x); - - //! Returns the floor log2 of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL unsigned int floor_log2(unsigned int x); - - //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL int mod(int x, int y); - - //! Return the factorial value of a number (!12 max, integer only) - //! From GLM_GTX_integer extension. - template - GLM_FUNC_DECL genType factorial(genType const& x); - - //! 32bit signed integer. - //! From GLM_GTX_integer extension. - typedef signed int sint; - - //! Returns x raised to the y power. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint pow(uint x, uint y); - - //! Returns the positive square root of x. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint sqrt(uint x); - - //! Modulus. Returns x - y * floor(x / y) for each component in x using the floating point value y. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint mod(uint x, uint y); - - //! Returns the number of leading zeros. - //! From GLM_GTX_integer extension. - GLM_FUNC_DECL uint nlz(uint x); - - /// @} -}//namespace glm - -#include "integer.inl" diff --git a/src/qged/display/glm/glm/gtx/integer.inl b/src/qged/display/glm/glm/gtx/integer.inl deleted file mode 100644 index 956366b250f..00000000000 --- a/src/qged/display/glm/glm/gtx/integer.inl +++ /dev/null @@ -1,185 +0,0 @@ -/// @ref gtx_integer - -namespace glm -{ - // pow - GLM_FUNC_QUALIFIER int pow(int x, uint y) - { - if(y == 0) - return x >= 0 ? 1 : -1; - - int result = x; - for(uint i = 1; i < y; ++i) - result *= x; - return result; - } - - // sqrt: From Christopher J. Musial, An integer square root, Graphics Gems, 1990, page 387 - GLM_FUNC_QUALIFIER int sqrt(int x) - { - if(x <= 1) return x; - - int NextTrial = x >> 1; - int CurrentAnswer; - - do - { - CurrentAnswer = NextTrial; - NextTrial = (NextTrial + x / NextTrial) >> 1; - } while(NextTrial < CurrentAnswer); - - return CurrentAnswer; - } - -// Henry Gordon Dietz: http://aggregate.org/MAGIC/ -namespace detail -{ - GLM_FUNC_QUALIFIER unsigned int ones32(unsigned int x) - { - /* 32-bit recursive reduction using SWAR... - but first step is mapping 2-bit values - into sum of 2 1-bit values in sneaky way - */ - x -= ((x >> 1) & 0x55555555); - x = (((x >> 2) & 0x33333333) + (x & 0x33333333)); - x = (((x >> 4) + x) & 0x0f0f0f0f); - x += (x >> 8); - x += (x >> 16); - return(x & 0x0000003f); - } -}//namespace detail - - // Henry Gordon Dietz: http://aggregate.org/MAGIC/ -/* - GLM_FUNC_QUALIFIER unsigned int floor_log2(unsigned int x) - { - x |= (x >> 1); - x |= (x >> 2); - x |= (x >> 4); - x |= (x >> 8); - x |= (x >> 16); - - return _detail::ones32(x) >> 1; - } -*/ - // mod - GLM_FUNC_QUALIFIER int mod(int x, int y) - { - return ((x % y) + y) % y; - } - - // factorial (!12 max, integer only) - template - GLM_FUNC_QUALIFIER genType factorial(genType const& x) - { - genType Temp = x; - genType Result; - for(Result = 1; Temp > 1; --Temp) - Result *= Temp; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> factorial( - vec<2, T, Q> const& x) - { - return vec<2, T, Q>( - factorial(x.x), - factorial(x.y)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> factorial( - vec<3, T, Q> const& x) - { - return vec<3, T, Q>( - factorial(x.x), - factorial(x.y), - factorial(x.z)); - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> factorial( - vec<4, T, Q> const& x) - { - return vec<4, T, Q>( - factorial(x.x), - factorial(x.y), - factorial(x.z), - factorial(x.w)); - } - - GLM_FUNC_QUALIFIER uint pow(uint x, uint y) - { - if (y == 0) - return 1u; - - uint result = x; - for(uint i = 1; i < y; ++i) - result *= x; - return result; - } - - GLM_FUNC_QUALIFIER uint sqrt(uint x) - { - if(x <= 1) return x; - - uint NextTrial = x >> 1; - uint CurrentAnswer; - - do - { - CurrentAnswer = NextTrial; - NextTrial = (NextTrial + x / NextTrial) >> 1; - } while(NextTrial < CurrentAnswer); - - return CurrentAnswer; - } - - GLM_FUNC_QUALIFIER uint mod(uint x, uint y) - { - return x - y * (x / y); - } - -#if(GLM_COMPILER & (GLM_COMPILER_VC | GLM_COMPILER_GCC)) - - GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) - { - return 31u - findMSB(x); - } - -#else - - // Hackers Delight: http://www.hackersdelight.org/HDcode/nlz.c.txt - GLM_FUNC_QUALIFIER unsigned int nlz(unsigned int x) - { - int y, m, n; - - y = -int(x >> 16); // If left half of x is 0, - m = (y >> 16) & 16; // set n = 16. If left half - n = 16 - m; // is nonzero, set n = 0 and - x = x >> m; // shift x right 16. - // Now x is of the form 0000xxxx. - y = x - 0x100; // If positions 8-15 are 0, - m = (y >> 16) & 8; // add 8 to n and shift x left 8. - n = n + m; - x = x << m; - - y = x - 0x1000; // If positions 12-15 are 0, - m = (y >> 16) & 4; // add 4 to n and shift x left 4. - n = n + m; - x = x << m; - - y = x - 0x4000; // If positions 14-15 are 0, - m = (y >> 16) & 2; // add 2 to n and shift x left 2. - n = n + m; - x = x << m; - - y = x >> 14; // Set y = 0, 1, 2, or 3. - m = y & ~(y >> 1); // Set m = 0, 1, 2, or 2 resp. - return unsigned(n + 2 - m); - } - -#endif//(GLM_COMPILER) - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/intersect.hpp b/src/qged/display/glm/glm/gtx/intersect.hpp deleted file mode 100644 index d2aa9c6ff24..00000000000 --- a/src/qged/display/glm/glm/gtx/intersect.hpp +++ /dev/null @@ -1,123 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_intersect -/// @file glm/gtx/intersect.hpp -/// -/// @see core (dependence) -/// @see gtx_closest_point (dependence) -/// -/// @defgroup gtx_intersect GLM_GTX_intersect -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add intersection functions - -#pragma once - -// Dependency: -#include -#include -#include "../glm.hpp" -#include "../geometric.hpp" -#include "../gtx/closest_point.hpp" -#include "../gtx/vector_query.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_closest_point is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_closest_point extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_intersect - /// @{ - - //! Compute the intersection of a ray and a plane. - //! Ray direction and plane normal must be unit length. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRayPlane( - genType const& orig, genType const& dir, - genType const& planeOrig, genType const& planeNormal, - typename genType::value_type & intersectionDistance); - - //! Compute the intersection of a ray and a triangle. - /// Based om Tomas Möller implementation http://fileadmin.cs.lth.se/cs/Personal/Tomas_Akenine-Moller/raytri/ - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRayTriangle( - vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, - vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, vec<3, T, Q> const& v2, - vec<2, T, Q>& baryPosition, T& distance); - - //! Compute the intersection of a line and a triangle. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectLineTriangle( - genType const& orig, genType const& dir, - genType const& vert0, genType const& vert1, genType const& vert2, - genType & position); - - //! Compute the intersection distance of a ray and a sphere. - //! The ray direction vector is unit length. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRaySphere( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, typename genType::value_type const sphereRadiusSquered, - typename genType::value_type & intersectionDistance); - - //! Compute the intersection of a ray and a sphere. - //! From GLM_GTX_intersect extension. - template - GLM_FUNC_DECL bool intersectRaySphere( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadius, - genType & intersectionPosition, genType & intersectionNormal); - - //! Compute the intersection of a line and a sphere. - //! From GLM_GTX_intersect extension - template - GLM_FUNC_DECL bool intersectLineSphere( - genType const& point0, genType const& point1, - genType const& sphereCenter, typename genType::value_type sphereRadius, - genType & intersectionPosition1, genType & intersectionNormal1, - genType & intersectionPosition2 = genType(), genType & intersectionNormal2 = genType()); - - /// @} -}//namespace glm - -#include "intersect.inl" diff --git a/src/qged/display/glm/glm/gtx/intersect.inl b/src/qged/display/glm/glm/gtx/intersect.inl deleted file mode 100644 index 54ecb4d909c..00000000000 --- a/src/qged/display/glm/glm/gtx/intersect.inl +++ /dev/null @@ -1,200 +0,0 @@ -/// @ref gtx_intersect - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool intersectRayPlane - ( - genType const& orig, genType const& dir, - genType const& planeOrig, genType const& planeNormal, - typename genType::value_type & intersectionDistance - ) - { - typename genType::value_type d = glm::dot(dir, planeNormal); - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - - if(glm::abs(d) > Epsilon) // if dir and planeNormal are not perpendicular - { - typename genType::value_type const tmp_intersectionDistance = glm::dot(planeOrig - orig, planeNormal) / d; - if (tmp_intersectionDistance > static_cast(0)) { // allow only intersections - intersectionDistance = tmp_intersectionDistance; - return true; - } - } - - return false; - } - - template - GLM_FUNC_QUALIFIER bool intersectRayTriangle - ( - vec<3, T, Q> const& orig, vec<3, T, Q> const& dir, - vec<3, T, Q> const& vert0, vec<3, T, Q> const& vert1, vec<3, T, Q> const& vert2, - vec<2, T, Q>& baryPosition, T& distance - ) - { - // find vectors for two edges sharing vert0 - vec<3, T, Q> const edge1 = vert1 - vert0; - vec<3, T, Q> const edge2 = vert2 - vert0; - - // begin calculating determinant - also used to calculate U parameter - vec<3, T, Q> const p = glm::cross(dir, edge2); - - // if determinant is near zero, ray lies in plane of triangle - T const det = glm::dot(edge1, p); - - vec<3, T, Q> Perpendicular(0); - - if(det > std::numeric_limits::epsilon()) - { - // calculate distance from vert0 to ray origin - vec<3, T, Q> const dist = orig - vert0; - - // calculate U parameter and test bounds - baryPosition.x = glm::dot(dist, p); - if(baryPosition.x < static_cast(0) || baryPosition.x > det) - return false; - - // prepare to test V parameter - Perpendicular = glm::cross(dist, edge1); - - // calculate V parameter and test bounds - baryPosition.y = glm::dot(dir, Perpendicular); - if((baryPosition.y < static_cast(0)) || ((baryPosition.x + baryPosition.y) > det)) - return false; - } - else if(det < -std::numeric_limits::epsilon()) - { - // calculate distance from vert0 to ray origin - vec<3, T, Q> const dist = orig - vert0; - - // calculate U parameter and test bounds - baryPosition.x = glm::dot(dist, p); - if((baryPosition.x > static_cast(0)) || (baryPosition.x < det)) - return false; - - // prepare to test V parameter - Perpendicular = glm::cross(dist, edge1); - - // calculate V parameter and test bounds - baryPosition.y = glm::dot(dir, Perpendicular); - if((baryPosition.y > static_cast(0)) || (baryPosition.x + baryPosition.y < det)) - return false; - } - else - return false; // ray is parallel to the plane of the triangle - - T inv_det = static_cast(1) / det; - - // calculate distance, ray intersects triangle - distance = glm::dot(edge2, Perpendicular) * inv_det; - baryPosition *= inv_det; - - return true; - } - - template - GLM_FUNC_QUALIFIER bool intersectLineTriangle - ( - genType const& orig, genType const& dir, - genType const& vert0, genType const& vert1, genType const& vert2, - genType & position - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - - genType edge1 = vert1 - vert0; - genType edge2 = vert2 - vert0; - - genType Perpendicular = cross(dir, edge2); - - float det = dot(edge1, Perpendicular); - - if (det > -Epsilon && det < Epsilon) - return false; - typename genType::value_type inv_det = typename genType::value_type(1) / det; - - genType Tengant = orig - vert0; - - position.y = dot(Tengant, Perpendicular) * inv_det; - if (position.y < typename genType::value_type(0) || position.y > typename genType::value_type(1)) - return false; - - genType Cotengant = cross(Tengant, edge1); - - position.z = dot(dir, Cotengant) * inv_det; - if (position.z < typename genType::value_type(0) || position.y + position.z > typename genType::value_type(1)) - return false; - - position.x = dot(edge2, Cotengant) * inv_det; - - return true; - } - - template - GLM_FUNC_QUALIFIER bool intersectRaySphere - ( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadiusSquered, - typename genType::value_type & intersectionDistance - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - genType diff = sphereCenter - rayStarting; - typename genType::value_type t0 = dot(diff, rayNormalizedDirection); - typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; - if( dSquared > sphereRadiusSquered ) - { - return false; - } - typename genType::value_type t1 = sqrt( sphereRadiusSquered - dSquared ); - intersectionDistance = t0 > t1 + Epsilon ? t0 - t1 : t0 + t1; - return intersectionDistance > Epsilon; - } - - template - GLM_FUNC_QUALIFIER bool intersectRaySphere - ( - genType const& rayStarting, genType const& rayNormalizedDirection, - genType const& sphereCenter, const typename genType::value_type sphereRadius, - genType & intersectionPosition, genType & intersectionNormal - ) - { - typename genType::value_type distance; - if( intersectRaySphere( rayStarting, rayNormalizedDirection, sphereCenter, sphereRadius * sphereRadius, distance ) ) - { - intersectionPosition = rayStarting + rayNormalizedDirection * distance; - intersectionNormal = (intersectionPosition - sphereCenter) / sphereRadius; - return true; - } - return false; - } - - template - GLM_FUNC_QUALIFIER bool intersectLineSphere - ( - genType const& point0, genType const& point1, - genType const& sphereCenter, typename genType::value_type sphereRadius, - genType & intersectionPoint1, genType & intersectionNormal1, - genType & intersectionPoint2, genType & intersectionNormal2 - ) - { - typename genType::value_type Epsilon = std::numeric_limits::epsilon(); - genType dir = normalize(point1 - point0); - genType diff = sphereCenter - point0; - typename genType::value_type t0 = dot(diff, dir); - typename genType::value_type dSquared = dot(diff, diff) - t0 * t0; - if( dSquared > sphereRadius * sphereRadius ) - { - return false; - } - typename genType::value_type t1 = sqrt( sphereRadius * sphereRadius - dSquared ); - if( t0 < t1 + Epsilon ) - t1 = -t1; - intersectionPoint1 = point0 + dir * (t0 - t1); - intersectionNormal1 = (intersectionPoint1 - sphereCenter) / sphereRadius; - intersectionPoint2 = point0 + dir * (t0 + t1); - intersectionNormal2 = (intersectionPoint2 - sphereCenter) / sphereRadius; - return true; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/io.hpp b/src/qged/display/glm/glm/gtx/io.hpp deleted file mode 100644 index e035448d5c2..00000000000 --- a/src/qged/display/glm/glm/gtx/io.hpp +++ /dev/null @@ -1,232 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_io -/// @file glm/gtx/io.hpp -/// @author Jan P Springer (regnirpsj@gmail.com) -/// -/// @see core (dependence) -/// @see gtc_matrix_access (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_io GLM_GTX_io -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// std::[w]ostream support for glm types -/// -/// std::[w]ostream support for glm types + qualifier/width/etc. manipulators -/// based on howard hinnant's std::chrono io proposal -/// [http://home.roadrunner.com/~hinnant/bloomington/chrono_io.html] - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_io is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_io extension included") -# endif -#endif - -#include // std::basic_ostream<> (fwd) -#include // std::locale, std::locale::facet, std::locale::id -#include // std::pair<> - -namespace glm -{ - /// @addtogroup gtx_io - /// @{ - - namespace io - { - enum order_type { column_major, row_major}; - - template - class format_punct : public std::locale::facet - { - typedef CTy char_type; - - public: - - static std::locale::id id; - - bool formatted; - unsigned precision; - unsigned width; - char_type separator; - char_type delim_left; - char_type delim_right; - char_type space; - char_type newline; - order_type order; - - GLM_FUNC_DECL explicit format_punct(size_t a = 0); - GLM_FUNC_DECL explicit format_punct(format_punct const&); - }; - - template > - class basic_state_saver { - - public: - - GLM_FUNC_DECL explicit basic_state_saver(std::basic_ios&); - GLM_FUNC_DECL ~basic_state_saver(); - - private: - - typedef ::std::basic_ios state_type; - typedef typename state_type::char_type char_type; - typedef ::std::ios_base::fmtflags flags_type; - typedef ::std::streamsize streamsize_type; - typedef ::std::locale const locale_type; - - state_type& state_; - flags_type flags_; - streamsize_type precision_; - streamsize_type width_; - char_type fill_; - locale_type locale_; - - GLM_FUNC_DECL basic_state_saver& operator=(basic_state_saver const&); - }; - - typedef basic_state_saver state_saver; - typedef basic_state_saver wstate_saver; - - template > - class basic_format_saver - { - public: - - GLM_FUNC_DECL explicit basic_format_saver(std::basic_ios&); - GLM_FUNC_DECL ~basic_format_saver(); - - private: - - basic_state_saver const bss_; - - GLM_FUNC_DECL basic_format_saver& operator=(basic_format_saver const&); - }; - - typedef basic_format_saver format_saver; - typedef basic_format_saver wformat_saver; - - struct precision - { - unsigned value; - - GLM_FUNC_DECL explicit precision(unsigned); - }; - - struct width - { - unsigned value; - - GLM_FUNC_DECL explicit width(unsigned); - }; - - template - struct delimeter - { - CTy value[3]; - - GLM_FUNC_DECL explicit delimeter(CTy /* left */, CTy /* right */, CTy /* separator */ = ','); - }; - - struct order - { - order_type value; - - GLM_FUNC_DECL explicit order(order_type); - }; - - // functions, inlined (inline) - - template - FTy const& get_facet(std::basic_ios&); - template - std::basic_ios& formatted(std::basic_ios&); - template - std::basic_ios& unformattet(std::basic_ios&); - - template - std::basic_ostream& operator<<(std::basic_ostream&, precision const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, width const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, delimeter const&); - template - std::basic_ostream& operator<<(std::basic_ostream&, order const&); - }//namespace io - - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, qua const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<1, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, vec<4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<2, 4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<3, 4, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 2, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 3, T, Q> const&); - template - GLM_FUNC_DECL std::basic_ostream& operator<<(std::basic_ostream&, mat<4, 4, T, Q> const&); - - template - GLM_FUNC_DECL std::basic_ostream & operator<<(std::basic_ostream &, - std::pair const, mat<4, 4, T, Q> const> const&); - - /// @} -}//namespace glm - -#include "io.inl" diff --git a/src/qged/display/glm/glm/gtx/io.inl b/src/qged/display/glm/glm/gtx/io.inl deleted file mode 100644 index a3a1bb6c26b..00000000000 --- a/src/qged/display/glm/glm/gtx/io.inl +++ /dev/null @@ -1,440 +0,0 @@ -/// @ref gtx_io -/// @author Jan P Springer (regnirpsj@gmail.com) - -#include // std::fixed, std::setfill<>, std::setprecision, std::right, std::setw -#include // std::basic_ostream<> -#include "../gtc/matrix_access.hpp" // glm::col, glm::row -#include "../gtx/type_trait.hpp" // glm::type<> - -namespace glm{ -namespace io -{ - template - GLM_FUNC_QUALIFIER format_punct::format_punct(size_t a) - : std::locale::facet(a) - , formatted(true) - , precision(3) - , width(1 + 4 + 1 + precision) - , separator(',') - , delim_left('[') - , delim_right(']') - , space(' ') - , newline('\n') - , order(column_major) - {} - - template - GLM_FUNC_QUALIFIER format_punct::format_punct(format_punct const& a) - : std::locale::facet(0) - , formatted(a.formatted) - , precision(a.precision) - , width(a.width) - , separator(a.separator) - , delim_left(a.delim_left) - , delim_right(a.delim_right) - , space(a.space) - , newline(a.newline) - , order(a.order) - {} - - template std::locale::id format_punct::id; - - template - GLM_FUNC_QUALIFIER basic_state_saver::basic_state_saver(std::basic_ios& a) - : state_(a) - , flags_(a.flags()) - , precision_(a.precision()) - , width_(a.width()) - , fill_(a.fill()) - , locale_(a.getloc()) - {} - - template - GLM_FUNC_QUALIFIER basic_state_saver::~basic_state_saver() - { - state_.imbue(locale_); - state_.fill(fill_); - state_.width(width_); - state_.precision(precision_); - state_.flags(flags_); - } - - template - GLM_FUNC_QUALIFIER basic_format_saver::basic_format_saver(std::basic_ios& a) - : bss_(a) - { - a.imbue(std::locale(a.getloc(), new format_punct(get_facet >(a)))); - } - - template - GLM_FUNC_QUALIFIER - basic_format_saver::~basic_format_saver() - {} - - GLM_FUNC_QUALIFIER precision::precision(unsigned a) - : value(a) - {} - - GLM_FUNC_QUALIFIER width::width(unsigned a) - : value(a) - {} - - template - GLM_FUNC_QUALIFIER delimeter::delimeter(CTy a, CTy b, CTy c) - : value() - { - value[0] = a; - value[1] = b; - value[2] = c; - } - - GLM_FUNC_QUALIFIER order::order(order_type a) - : value(a) - {} - - template - GLM_FUNC_QUALIFIER FTy const& get_facet(std::basic_ios& ios) - { - if(!std::has_facet(ios.getloc())) - ios.imbue(std::locale(ios.getloc(), new FTy)); - - return std::use_facet(ios.getloc()); - } - - template - GLM_FUNC_QUALIFIER std::basic_ios& formatted(std::basic_ios& ios) - { - const_cast&>(get_facet >(ios)).formatted = true; - return ios; - } - - template - GLM_FUNC_QUALIFIER std::basic_ios& unformatted(std::basic_ios& ios) - { - const_cast&>(get_facet >(ios)).formatted = false; - return ios; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, precision const& a) - { - const_cast&>(get_facet >(os)).precision = a.value; - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, width const& a) - { - const_cast&>(get_facet >(os)).width = a.value; - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, delimeter const& a) - { - format_punct & fmt(const_cast&>(get_facet >(os))); - - fmt.delim_left = a.value[0]; - fmt.delim_right = a.value[1]; - fmt.separator = a.value[2]; - - return os; - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, order const& a) - { - const_cast&>(get_facet >(os)).order = a.value; - return os; - } -} // namespace io - -namespace detail -{ - template - GLM_FUNC_QUALIFIER std::basic_ostream& - print_vector_on(std::basic_ostream& os, V const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - - length_t const& components(type::components); - - if(fmt.formatted) - { - io::basic_state_saver const bss(os); - - os << std::fixed << std::right << std::setprecision(fmt.precision) << std::setfill(fmt.space) << fmt.delim_left; - - for(length_t i(0); i < components; ++i) - { - os << std::setw(fmt.width) << a[i]; - if(components-1 != i) - os << fmt.separator; - } - - os << fmt.delim_right; - } - else - { - for(length_t i(0); i < components; ++i) - { - os << a[i]; - - if(components-1 != i) - os << fmt.space; - } - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, qua const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<1, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<2, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<3, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, vec<4, T, Q> const& a) - { - return detail::print_vector_on(os, a); - } - -namespace detail -{ - template class M, length_t C, length_t R, typename T, qualifier Q> - GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_on(std::basic_ostream& os, M const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - - length_t const& cols(type >::cols); - length_t const& rows(type >::rows); - - if(fmt.formatted) - { - os << fmt.newline << fmt.delim_left; - - switch(fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < rows; ++i) - { - if (0 != i) - os << fmt.space; - - os << row(a, i); - - if(rows-1 != i) - os << fmt.newline; - } - } - break; - - case io::row_major: - { - for(length_t i(0); i < cols; ++i) - { - if(0 != i) - os << fmt.space; - - os << column(a, i); - - if(cols-1 != i) - os << fmt.newline; - } - } - break; - } - - os << fmt.delim_right; - } - else - { - switch (fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < cols; ++i) - { - os << column(a, i); - - if(cols - 1 != i) - os << fmt.space; - } - } - break; - - case io::row_major: - { - for (length_t i(0); i < rows; ++i) - { - os << row(a, i); - - if (rows-1 != i) - os << fmt.space; - } - } - break; - } - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<2, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<(std::basic_ostream& os, mat<3, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<3, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 2, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 3, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - - template - GLM_FUNC_QUALIFIER std::basic_ostream & operator<<(std::basic_ostream& os, mat<4, 4, T, Q> const& a) - { - return detail::print_matrix_on(os, a); - } - -namespace detail -{ - template class M, length_t C, length_t R, typename T, qualifier Q> - GLM_FUNC_QUALIFIER std::basic_ostream& print_matrix_pair_on(std::basic_ostream& os, std::pair const, M const> const& a) - { - typename std::basic_ostream::sentry const cerberus(os); - - if(cerberus) - { - io::format_punct const& fmt(io::get_facet >(os)); - M const& ml(a.first); - M const& mr(a.second); - length_t const& cols(type >::cols); - length_t const& rows(type >::rows); - - if(fmt.formatted) - { - os << fmt.newline << fmt.delim_left; - - switch(fmt.order) - { - case io::column_major: - { - for(length_t i(0); i < rows; ++i) - { - if(0 != i) - os << fmt.space; - - os << row(ml, i) << ((rows-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << row(mr, i); - - if(rows-1 != i) - os << fmt.newline; - } - } - break; - case io::row_major: - { - for(length_t i(0); i < cols; ++i) - { - if(0 != i) - os << fmt.space; - - os << column(ml, i) << ((cols-1 != i) ? fmt.space : fmt.delim_right) << fmt.space << ((0 != i) ? fmt.space : fmt.delim_left) << column(mr, i); - - if(cols-1 != i) - os << fmt.newline; - } - } - break; - } - - os << fmt.delim_right; - } - else - { - os << ml << fmt.space << mr; - } - } - - return os; - } -}//namespace detail - - template - GLM_FUNC_QUALIFIER std::basic_ostream& operator<<( - std::basic_ostream & os, - std::pair const, - mat<4, 4, T, Q> const> const& a) - { - return detail::print_matrix_pair_on(os, a); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/log_base.hpp b/src/qged/display/glm/glm/gtx/log_base.hpp deleted file mode 100644 index 2241f4690a8..00000000000 --- a/src/qged/display/glm/glm/gtx/log_base.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_log_base -/// @file glm/gtx/log_base.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_log_base GLM_GTX_log_base -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Logarithm for any base. base can be a vector or a scalar. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_log_base is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_log_base extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_log_base - /// @{ - - /// Logarithm for any base. - /// From GLM_GTX_log_base. - template - GLM_FUNC_DECL genType log( - genType const& x, - genType const& base); - - /// Logarithm for any base. - /// From GLM_GTX_log_base. - template - GLM_FUNC_DECL vec sign( - vec const& x, - vec const& base); - - /// @} -}//namespace glm - -#include "log_base.inl" diff --git a/src/qged/display/glm/glm/gtx/log_base.inl b/src/qged/display/glm/glm/gtx/log_base.inl deleted file mode 100644 index 4bbb8e895ab..00000000000 --- a/src/qged/display/glm/glm/gtx/log_base.inl +++ /dev/null @@ -1,16 +0,0 @@ -/// @ref gtx_log_base - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType log(genType const& x, genType const& base) - { - return glm::log(x) / glm::log(base); - } - - template - GLM_FUNC_QUALIFIER vec log(vec const& x, vec const& base) - { - return glm::log(x) / glm::log(base); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/matrix_cross_product.hpp b/src/qged/display/glm/glm/gtx/matrix_cross_product.hpp deleted file mode 100644 index a85bdd4d3b2..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_cross_product.hpp +++ /dev/null @@ -1,78 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_matrix_cross_product -/// @file glm/gtx/matrix_cross_product.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_matrix_cross_product GLM_GTX_matrix_cross_product -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build cross product matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_cross_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_cross_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_cross_product - /// @{ - - //! Build a cross product matrix. - //! From GLM_GTX_matrix_cross_product extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> matrixCross3( - vec<3, T, Q> const& x); - - //! Build a cross product matrix. - //! From GLM_GTX_matrix_cross_product extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> matrixCross4( - vec<3, T, Q> const& x); - - /// @} -}//namespace glm - -#include "matrix_cross_product.inl" diff --git a/src/qged/display/glm/glm/gtx/matrix_cross_product.inl b/src/qged/display/glm/glm/gtx/matrix_cross_product.inl deleted file mode 100644 index 3a153977cf5..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_cross_product.inl +++ /dev/null @@ -1,37 +0,0 @@ -/// @ref gtx_matrix_cross_product - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> matrixCross3 - ( - vec<3, T, Q> const& x - ) - { - mat<3, 3, T, Q> Result(T(0)); - Result[0][1] = x.z; - Result[1][0] = -x.z; - Result[0][2] = -x.y; - Result[2][0] = x.y; - Result[1][2] = x.x; - Result[2][1] = -x.x; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> matrixCross4 - ( - vec<3, T, Q> const& x - ) - { - mat<4, 4, T, Q> Result(T(0)); - Result[0][1] = x.z; - Result[1][0] = -x.z; - Result[0][2] = -x.y; - Result[2][0] = x.y; - Result[1][2] = x.x; - Result[2][1] = -x.x; - return Result; - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/matrix_decompose.hpp b/src/qged/display/glm/glm/gtx/matrix_decompose.hpp deleted file mode 100644 index 39209577a11..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_decompose.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_matrix_decompose -/// @file glm/gtx/matrix_decompose.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_decompose GLM_GTX_matrix_decompose -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Decomposes a model matrix to translations, rotation and scale components - -#pragma once - -// Dependencies -#include "../mat4x4.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../geometric.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtc/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_decompose is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_decompose extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_decompose - /// @{ - - /// Decomposes a model matrix to translations, rotation and scale components - /// @see gtx_matrix_decompose - template - GLM_FUNC_DECL bool decompose( - mat<4, 4, T, Q> const& modelMatrix, - vec<3, T, Q> & scale, qua & orientation, vec<3, T, Q> & translation, vec<3, T, Q> & skew, vec<4, T, Q> & perspective); - - /// @} -}//namespace glm - -#include "matrix_decompose.inl" diff --git a/src/qged/display/glm/glm/gtx/matrix_decompose.inl b/src/qged/display/glm/glm/gtx/matrix_decompose.inl deleted file mode 100644 index 694f5eca74a..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_decompose.inl +++ /dev/null @@ -1,186 +0,0 @@ -/// @ref gtx_matrix_decompose - -#include "../gtc/constants.hpp" -#include "../gtc/epsilon.hpp" - -namespace glm{ -namespace detail -{ - /// Make a linear combination of two vectors and return the result. - // result = (a * ascl) + (b * bscl) - template - GLM_FUNC_QUALIFIER vec<3, T, Q> combine( - vec<3, T, Q> const& a, - vec<3, T, Q> const& b, - T ascl, T bscl) - { - return (a * ascl) + (b * bscl); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> scale(vec<3, T, Q> const& v, T desiredLength) - { - return v * desiredLength / length(v); - } -}//namespace detail - - // Matrix decompose - // http://www.opensource.apple.com/source/WebCore/WebCore-514/platform/graphics/transforms/TransformationMatrix.cpp - // Decomposes the mode matrix to translations,rotation scale components - - template - GLM_FUNC_QUALIFIER bool decompose(mat<4, 4, T, Q> const& ModelMatrix, vec<3, T, Q> & Scale, qua & Orientation, vec<3, T, Q> & Translation, vec<3, T, Q> & Skew, vec<4, T, Q> & Perspective) - { - mat<4, 4, T, Q> LocalMatrix(ModelMatrix); - - // Normalize the matrix. - if(epsilonEqual(LocalMatrix[3][3], static_cast(0), epsilon())) - return false; - - for(length_t i = 0; i < 4; ++i) - for(length_t j = 0; j < 4; ++j) - LocalMatrix[i][j] /= LocalMatrix[3][3]; - - // perspectiveMatrix is used to solve for perspective, but it also provides - // an easy way to test for singularity of the upper 3x3 component. - mat<4, 4, T, Q> PerspectiveMatrix(LocalMatrix); - - for(length_t i = 0; i < 3; i++) - PerspectiveMatrix[i][3] = static_cast(0); - PerspectiveMatrix[3][3] = static_cast(1); - - /// TODO: Fixme! - if(epsilonEqual(determinant(PerspectiveMatrix), static_cast(0), epsilon())) - return false; - - // First, isolate perspective. This is the messiest. - if( - epsilonNotEqual(LocalMatrix[0][3], static_cast(0), epsilon()) || - epsilonNotEqual(LocalMatrix[1][3], static_cast(0), epsilon()) || - epsilonNotEqual(LocalMatrix[2][3], static_cast(0), epsilon())) - { - // rightHandSide is the right hand side of the equation. - vec<4, T, Q> RightHandSide; - RightHandSide[0] = LocalMatrix[0][3]; - RightHandSide[1] = LocalMatrix[1][3]; - RightHandSide[2] = LocalMatrix[2][3]; - RightHandSide[3] = LocalMatrix[3][3]; - - // Solve the equation by inverting PerspectiveMatrix and multiplying - // rightHandSide by the inverse. (This is the easiest way, not - // necessarily the best.) - mat<4, 4, T, Q> InversePerspectiveMatrix = glm::inverse(PerspectiveMatrix);// inverse(PerspectiveMatrix, inversePerspectiveMatrix); - mat<4, 4, T, Q> TransposedInversePerspectiveMatrix = glm::transpose(InversePerspectiveMatrix);// transposeMatrix4(inversePerspectiveMatrix, transposedInversePerspectiveMatrix); - - Perspective = TransposedInversePerspectiveMatrix * RightHandSide; - // v4MulPointByMatrix(rightHandSide, transposedInversePerspectiveMatrix, perspectivePoint); - - // Clear the perspective partition - LocalMatrix[0][3] = LocalMatrix[1][3] = LocalMatrix[2][3] = static_cast(0); - LocalMatrix[3][3] = static_cast(1); - } - else - { - // No perspective. - Perspective = vec<4, T, Q>(0, 0, 0, 1); - } - - // Next take care of translation (easy). - Translation = vec<3, T, Q>(LocalMatrix[3]); - LocalMatrix[3] = vec<4, T, Q>(0, 0, 0, LocalMatrix[3].w); - - vec<3, T, Q> Row[3], Pdum3; - - // Now get scale and shear. - for(length_t i = 0; i < 3; ++i) - for(length_t j = 0; j < 3; ++j) - Row[i][j] = LocalMatrix[i][j]; - - // Compute X scale factor and normalize first row. - Scale.x = length(Row[0]);// v3Length(Row[0]); - - Row[0] = detail::scale(Row[0], static_cast(1)); - - // Compute XY shear factor and make 2nd row orthogonal to 1st. - Skew.z = dot(Row[0], Row[1]); - Row[1] = detail::combine(Row[1], Row[0], static_cast(1), -Skew.z); - - // Now, compute Y scale and normalize 2nd row. - Scale.y = length(Row[1]); - Row[1] = detail::scale(Row[1], static_cast(1)); - Skew.z /= Scale.y; - - // Compute XZ and YZ shears, orthogonalize 3rd row. - Skew.y = glm::dot(Row[0], Row[2]); - Row[2] = detail::combine(Row[2], Row[0], static_cast(1), -Skew.y); - Skew.x = glm::dot(Row[1], Row[2]); - Row[2] = detail::combine(Row[2], Row[1], static_cast(1), -Skew.x); - - // Next, get Z scale and normalize 3rd row. - Scale.z = length(Row[2]); - Row[2] = detail::scale(Row[2], static_cast(1)); - Skew.y /= Scale.z; - Skew.x /= Scale.z; - - // At this point, the matrix (in rows[]) is orthonormal. - // Check for a coordinate system flip. If the determinant - // is -1, then negate the matrix and the scaling factors. - Pdum3 = cross(Row[1], Row[2]); // v3Cross(row[1], row[2], Pdum3); - if(dot(Row[0], Pdum3) < 0) - { - for(length_t i = 0; i < 3; i++) - { - Scale[i] *= static_cast(-1); - Row[i] *= static_cast(-1); - } - } - - // Now, get the rotations out, as described in the gem. - - // FIXME - Add the ability to return either quaternions (which are - // easier to recompose with) or Euler angles (rx, ry, rz), which - // are easier for authors to deal with. The latter will only be useful - // when we fix https://bugs.webkit.org/show_bug.cgi?id=23799, so I - // will leave the Euler angle code here for now. - - // ret.rotateY = asin(-Row[0][2]); - // if (cos(ret.rotateY) != 0) { - // ret.rotateX = atan2(Row[1][2], Row[2][2]); - // ret.rotateZ = atan2(Row[0][1], Row[0][0]); - // } else { - // ret.rotateX = atan2(-Row[2][0], Row[1][1]); - // ret.rotateZ = 0; - // } - - int i, j, k = 0; - T root, trace = Row[0].x + Row[1].y + Row[2].z; - if(trace > static_cast(0)) - { - root = sqrt(trace + static_cast(1.0)); - Orientation.w = static_cast(0.5) * root; - root = static_cast(0.5) / root; - Orientation.x = root * (Row[1].z - Row[2].y); - Orientation.y = root * (Row[2].x - Row[0].z); - Orientation.z = root * (Row[0].y - Row[1].x); - } // End if > 0 - else - { - static int Next[3] = {1, 2, 0}; - i = 0; - if(Row[1].y > Row[0].x) i = 1; - if(Row[2].z > Row[i][i]) i = 2; - j = Next[i]; - k = Next[j]; - - root = sqrt(Row[i][i] - Row[j][j] - Row[k][k] + static_cast(1.0)); - - Orientation[i] = static_cast(0.5) * root; - root = static_cast(0.5) / root; - Orientation[j] = root * (Row[i][j] + Row[j][i]); - Orientation[k] = root * (Row[i][k] + Row[k][i]); - Orientation.w = root * (Row[j][k] - Row[k][j]); - } // End if <= 0 - - return true; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/matrix_factorisation.hpp b/src/qged/display/glm/glm/gtx/matrix_factorisation.hpp deleted file mode 100644 index 8011a548ee4..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_factorisation.hpp +++ /dev/null @@ -1,100 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_matrix_factorisation -/// @file glm/gtx/matrix_factorisation.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_factorisation GLM_GTX_matrix_factorisation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions to factor matrices in various forms - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_factorisation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_factorisation extension included") -# endif -#endif - -/* -Suggestions: - - Move helper functions flipud and fliplr to another file: They may be helpful in more general circumstances. - - Implement other types of matrix factorisation, such as: QL and LQ, L(D)U, eigendecompositions, etc... -*/ - -namespace glm -{ - /// @addtogroup gtx_matrix_factorisation - /// @{ - - /// Flips the matrix rows up and down. - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL mat flipud(mat const& in); - - /// Flips the matrix columns right and left. - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL mat fliplr(mat const& in); - - /// Performs QR factorisation of a matrix. - /// Returns 2 matrices, q and r, such that the columns of q are orthonormal and span the same subspace than those of the input matrix, r is an upper triangular matrix, and q*r=in. - /// Given an n-by-m input matrix, q has dimensions min(n,m)-by-m, and r has dimensions n-by-min(n,m). - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r); - - /// Performs RQ factorisation of a matrix. - /// Returns 2 matrices, r and q, such that r is an upper triangular matrix, the rows of q are orthonormal and span the same subspace than those of the input matrix, and r*q=in. - /// Note that in the context of RQ factorisation, the diagonal is seen as starting in the lower-right corner of the matrix, instead of the usual upper-left. - /// Given an n-by-m input matrix, r has dimensions min(n,m)-by-m, and q has dimensions n-by-min(n,m). - /// - /// From GLM_GTX_matrix_factorisation extension. - template - GLM_FUNC_DECL void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q); - - /// @} -} - -#include "matrix_factorisation.inl" diff --git a/src/qged/display/glm/glm/gtx/matrix_factorisation.inl b/src/qged/display/glm/glm/gtx/matrix_factorisation.inl deleted file mode 100644 index 3cfa24fd854..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_factorisation.inl +++ /dev/null @@ -1,84 +0,0 @@ -/// @ref gtx_matrix_factorisation - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat flipud(mat const& in) - { - mat tin = transpose(in); - tin = fliplr(tin); - mat out = transpose(tin); - - return out; - } - - template - GLM_FUNC_QUALIFIER mat fliplr(mat const& in) - { - mat out; - for (length_t i = 0; i < C; i++) - { - out[i] = in[(C - i) - 1]; - } - - return out; - } - - template - GLM_FUNC_QUALIFIER void qr_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& q, mat& r) - { - // Uses modified Gram-Schmidt method - // Source: https://en.wikipedia.org/wiki/Gram�Schmidt_process - // And https://en.wikipedia.org/wiki/QR_decomposition - - //For all the linearly independs columns of the input... - // (there can be no more linearly independents columns than there are rows.) - for (length_t i = 0; i < (C < R ? C : R); i++) - { - //Copy in Q the input's i-th column. - q[i] = in[i]; - - //j = [0,i[ - // Make that column orthogonal to all the previous ones by substracting to it the non-orthogonal projection of all the previous columns. - // Also: Fill the zero elements of R - for (length_t j = 0; j < i; j++) - { - q[i] -= dot(q[i], q[j])*q[j]; - r[j][i] = 0; - } - - //Now, Q i-th column is orthogonal to all the previous columns. Normalize it. - q[i] = normalize(q[i]); - - //j = [i,C[ - //Finally, compute the corresponding coefficients of R by computing the projection of the resulting column on the other columns of the input. - for (length_t j = i; j < C; j++) - { - r[j][i] = dot(in[j], q[i]); - } - } - } - - template - GLM_FUNC_QUALIFIER void rq_decompose(mat const& in, mat<(C < R ? C : R), R, T, Q>& r, mat& q) - { - // From https://en.wikipedia.org/wiki/QR_decomposition: - // The RQ decomposition transforms a matrix A into the product of an upper triangular matrix R (also known as right-triangular) and an orthogonal matrix Q. The only difference from QR decomposition is the order of these matrices. - // QR decomposition is Gram�Schmidt orthogonalization of columns of A, started from the first column. - // RQ decomposition is Gram�Schmidt orthogonalization of rows of A, started from the last row. - - mat tin = transpose(in); - tin = fliplr(tin); - - mat tr; - mat<(C < R ? C : R), C, T, Q> tq; - qr_decompose(tin, tq, tr); - - tr = fliplr(tr); - r = transpose(tr); - r = fliplr(r); - - tq = fliplr(tq); - q = transpose(tq); - } -} //namespace glm diff --git a/src/qged/display/glm/glm/gtx/matrix_interpolation.hpp b/src/qged/display/glm/glm/gtx/matrix_interpolation.hpp deleted file mode 100644 index 2376e62a82a..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_interpolation.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_matrix_interpolation -/// @file glm/gtx/matrix_interpolation.hpp -/// @author Ghenadii Ursachi (the.asteroth@gmail.com) -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_interpolation GLM_GTX_matrix_interpolation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Allows to directly interpolate two matrices. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_interpolation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_interpolation extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_interpolation - /// @{ - - /// Get the axis and angle of the rotation from a matrix. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL void axisAngle( - mat<4, 4, T, Q> const& Mat, vec<3, T, Q> & Axis, T & Angle); - - /// Build a matrix from axis and angle. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> axisAngleMatrix( - vec<3, T, Q> const& Axis, T const Angle); - - /// Extracts the rotation part of a matrix. - /// From GLM_GTX_matrix_interpolation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> extractMatrixRotation( - mat<4, 4, T, Q> const& Mat); - - /// Build a interpolation of 4 * 4 matrixes. - /// From GLM_GTX_matrix_interpolation extension. - /// Warning! works only with rotation and/or translation matrixes, scale will generate unexpected results. - template - GLM_FUNC_DECL mat<4, 4, T, Q> interpolate( - mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const Delta); - - /// @} -}//namespace glm - -#include "matrix_interpolation.inl" diff --git a/src/qged/display/glm/glm/gtx/matrix_interpolation.inl b/src/qged/display/glm/glm/gtx/matrix_interpolation.inl deleted file mode 100644 index de40b7d745e..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_interpolation.inl +++ /dev/null @@ -1,129 +0,0 @@ -/// @ref gtx_matrix_interpolation - -#include "../gtc/constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER void axisAngle(mat<4, 4, T, Q> const& m, vec<3, T, Q> & axis, T& angle) - { - T epsilon = static_cast(0.01); - T epsilon2 = static_cast(0.1); - - if((abs(m[1][0] - m[0][1]) < epsilon) && (abs(m[2][0] - m[0][2]) < epsilon) && (abs(m[2][1] - m[1][2]) < epsilon)) - { - if ((abs(m[1][0] + m[0][1]) < epsilon2) && (abs(m[2][0] + m[0][2]) < epsilon2) && (abs(m[2][1] + m[1][2]) < epsilon2) && (abs(m[0][0] + m[1][1] + m[2][2] - static_cast(3.0)) < epsilon2)) - { - angle = static_cast(0.0); - axis.x = static_cast(1.0); - axis.y = static_cast(0.0); - axis.z = static_cast(0.0); - return; - } - angle = static_cast(3.1415926535897932384626433832795); - T xx = (m[0][0] + static_cast(1.0)) * static_cast(0.5); - T yy = (m[1][1] + static_cast(1.0)) * static_cast(0.5); - T zz = (m[2][2] + static_cast(1.0)) * static_cast(0.5); - T xy = (m[1][0] + m[0][1]) * static_cast(0.25); - T xz = (m[2][0] + m[0][2]) * static_cast(0.25); - T yz = (m[2][1] + m[1][2]) * static_cast(0.25); - if((xx > yy) && (xx > zz)) - { - if(xx < epsilon) - { - axis.x = static_cast(0.0); - axis.y = static_cast(0.7071); - axis.z = static_cast(0.7071); - } - else - { - axis.x = sqrt(xx); - axis.y = xy / axis.x; - axis.z = xz / axis.x; - } - } - else if (yy > zz) - { - if(yy < epsilon) - { - axis.x = static_cast(0.7071); - axis.y = static_cast(0.0); - axis.z = static_cast(0.7071); - } - else - { - axis.y = sqrt(yy); - axis.x = xy / axis.y; - axis.z = yz / axis.y; - } - } - else - { - if (zz < epsilon) - { - axis.x = static_cast(0.7071); - axis.y = static_cast(0.7071); - axis.z = static_cast(0.0); - } - else - { - axis.z = sqrt(zz); - axis.x = xz / axis.z; - axis.y = yz / axis.z; - } - } - return; - } - T s = sqrt((m[2][1] - m[1][2]) * (m[2][1] - m[1][2]) + (m[2][0] - m[0][2]) * (m[2][0] - m[0][2]) + (m[1][0] - m[0][1]) * (m[1][0] - m[0][1])); - if (glm::abs(s) < T(0.001)) - s = static_cast(1); - T const angleCos = (m[0][0] + m[1][1] + m[2][2] - static_cast(1)) * static_cast(0.5); - if(angleCos - static_cast(1) < epsilon) - angle = pi() * static_cast(0.25); - else - angle = acos(angleCos); - axis.x = (m[1][2] - m[2][1]) / s; - axis.y = (m[2][0] - m[0][2]) / s; - axis.z = (m[0][1] - m[1][0]) / s; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> axisAngleMatrix(vec<3, T, Q> const& axis, T const angle) - { - T c = cos(angle); - T s = sin(angle); - T t = static_cast(1) - c; - vec<3, T, Q> n = normalize(axis); - - return mat<4, 4, T, Q>( - t * n.x * n.x + c, t * n.x * n.y + n.z * s, t * n.x * n.z - n.y * s, static_cast(0.0), - t * n.x * n.y - n.z * s, t * n.y * n.y + c, t * n.y * n.z + n.x * s, static_cast(0.0), - t * n.x * n.z + n.y * s, t * n.y * n.z - n.x * s, t * n.z * n.z + c, static_cast(0.0), - static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> extractMatrixRotation(mat<4, 4, T, Q> const& m) - { - return mat<4, 4, T, Q>( - m[0][0], m[0][1], m[0][2], static_cast(0.0), - m[1][0], m[1][1], m[1][2], static_cast(0.0), - m[2][0], m[2][1], m[2][2], static_cast(0.0), - static_cast(0.0), static_cast(0.0), static_cast(0.0), static_cast(1.0)); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> interpolate(mat<4, 4, T, Q> const& m1, mat<4, 4, T, Q> const& m2, T const delta) - { - mat<4, 4, T, Q> m1rot = extractMatrixRotation(m1); - mat<4, 4, T, Q> dltRotation = m2 * transpose(m1rot); - vec<3, T, Q> dltAxis; - T dltAngle; - axisAngle(dltRotation, dltAxis, dltAngle); - mat<4, 4, T, Q> out = axisAngleMatrix(dltAxis, dltAngle * delta) * m1rot; - out[3][0] = m1[3][0] + delta * (m2[3][0] - m1[3][0]); - out[3][1] = m1[3][1] + delta * (m2[3][1] - m1[3][1]); - out[3][2] = m1[3][2] + delta * (m2[3][2] - m1[3][2]); - return out; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/matrix_major_storage.hpp b/src/qged/display/glm/glm/gtx/matrix_major_storage.hpp deleted file mode 100644 index e4a040e05d3..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_major_storage.hpp +++ /dev/null @@ -1,150 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_matrix_major_storage -/// @file glm/gtx/matrix_major_storage.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_matrix_major_storage GLM_GTX_matrix_major_storage -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build matrices with specific matrix order, row or column - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_major_storage is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_major_storage extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_major_storage - /// @{ - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> rowMajor2( - mat<2, 2, T, Q> const& m); - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> rowMajor3( - mat<3, 3, T, Q> const& m); - - //! Build a row major matrix from row vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( - vec<4, T, Q> const& v1, - vec<4, T, Q> const& v2, - vec<4, T, Q> const& v3, - vec<4, T, Q> const& v4); - - //! Build a row major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> rowMajor4( - mat<4, 4, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> colMajor2( - mat<2, 2, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> colMajor3( - mat<3, 3, T, Q> const& m); - - //! Build a column major matrix from column vectors. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( - vec<4, T, Q> const& v1, - vec<4, T, Q> const& v2, - vec<4, T, Q> const& v3, - vec<4, T, Q> const& v4); - - //! Build a column major matrix from other matrix. - //! From GLM_GTX_matrix_major_storage extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> colMajor4( - mat<4, 4, T, Q> const& m); - - /// @} -}//namespace glm - -#include "matrix_major_storage.inl" diff --git a/src/qged/display/glm/glm/gtx/matrix_major_storage.inl b/src/qged/display/glm/glm/gtx/matrix_major_storage.inl deleted file mode 100644 index 279dd3433d0..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_major_storage.inl +++ /dev/null @@ -1,166 +0,0 @@ -/// @ref gtx_matrix_major_storage - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2 - ( - vec<2, T, Q> const& v1, - vec<2, T, Q> const& v2 - ) - { - mat<2, 2, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> rowMajor2( - const mat<2, 2, T, Q>& m) - { - mat<2, 2, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( - const vec<3, T, Q>& v1, - const vec<3, T, Q>& v2, - const vec<3, T, Q>& v3) - { - mat<3, 3, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[2][0] = v1.z; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - Result[2][1] = v2.z; - Result[0][2] = v3.x; - Result[1][2] = v3.y; - Result[2][2] = v3.z; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rowMajor3( - const mat<3, 3, T, Q>& m) - { - mat<3, 3, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( - const vec<4, T, Q>& v1, - const vec<4, T, Q>& v2, - const vec<4, T, Q>& v3, - const vec<4, T, Q>& v4) - { - mat<4, 4, T, Q> Result; - Result[0][0] = v1.x; - Result[1][0] = v1.y; - Result[2][0] = v1.z; - Result[3][0] = v1.w; - Result[0][1] = v2.x; - Result[1][1] = v2.y; - Result[2][1] = v2.z; - Result[3][1] = v2.w; - Result[0][2] = v3.x; - Result[1][2] = v3.y; - Result[2][2] = v3.z; - Result[3][2] = v3.w; - Result[0][3] = v4.x; - Result[1][3] = v4.y; - Result[2][3] = v4.z; - Result[3][3] = v4.w; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rowMajor4( - const mat<4, 4, T, Q>& m) - { - mat<4, 4, T, Q> Result; - Result[0][0] = m[0][0]; - Result[0][1] = m[1][0]; - Result[0][2] = m[2][0]; - Result[0][3] = m[3][0]; - Result[1][0] = m[0][1]; - Result[1][1] = m[1][1]; - Result[1][2] = m[2][1]; - Result[1][3] = m[3][1]; - Result[2][0] = m[0][2]; - Result[2][1] = m[1][2]; - Result[2][2] = m[2][2]; - Result[2][3] = m[3][2]; - Result[3][0] = m[0][3]; - Result[3][1] = m[1][3]; - Result[3][2] = m[2][3]; - Result[3][3] = m[3][3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( - const vec<2, T, Q>& v1, - const vec<2, T, Q>& v2) - { - return mat<2, 2, T, Q>(v1, v2); - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> colMajor2( - const mat<2, 2, T, Q>& m) - { - return mat<2, 2, T, Q>(m); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( - const vec<3, T, Q>& v1, - const vec<3, T, Q>& v2, - const vec<3, T, Q>& v3) - { - return mat<3, 3, T, Q>(v1, v2, v3); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> colMajor3( - const mat<3, 3, T, Q>& m) - { - return mat<3, 3, T, Q>(m); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( - const vec<4, T, Q>& v1, - const vec<4, T, Q>& v2, - const vec<4, T, Q>& v3, - const vec<4, T, Q>& v4) - { - return mat<4, 4, T, Q>(v1, v2, v3, v4); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> colMajor4( - const mat<4, 4, T, Q>& m) - { - return mat<4, 4, T, Q>(m); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/matrix_operation.hpp b/src/qged/display/glm/glm/gtx/matrix_operation.hpp deleted file mode 100644 index 87e416d3e56..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_operation.hpp +++ /dev/null @@ -1,134 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_matrix_operation -/// @file glm/gtx/matrix_operation.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_operation GLM_GTX_matrix_operation -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Build diagonal matrices from vectors. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_operation is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_operation extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_operation - /// @{ - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> diagonal2x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 3, T, Q> diagonal2x3( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 4, T, Q> diagonal2x4( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 2, T, Q> diagonal3x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> diagonal3x3( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 4, T, Q> diagonal3x4( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 2, T, Q> diagonal4x2( - vec<2, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 3, T, Q> diagonal4x3( - vec<3, T, Q> const& v); - - //! Build a diagonal matrix. - //! From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> diagonal4x4( - vec<4, T, Q> const& v); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m); - - /// Build an adjugate matrix. - /// From GLM_GTX_matrix_operation extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m); - - /// @} -}//namespace glm - -#include "matrix_operation.inl" diff --git a/src/qged/display/glm/glm/gtx/matrix_operation.inl b/src/qged/display/glm/glm/gtx/matrix_operation.inl deleted file mode 100644 index 9de83f82367..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_operation.inl +++ /dev/null @@ -1,176 +0,0 @@ -/// @ref gtx_matrix_operation - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> diagonal2x2 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 3, T, Q> diagonal2x3 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 4, T, Q> diagonal2x4 - ( - vec<2, T, Q> const& v - ) - { - mat<2, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 2, T, Q> diagonal3x2 - ( - vec<2, T, Q> const& v - ) - { - mat<3, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> diagonal3x3 - ( - vec<3, T, Q> const& v - ) - { - mat<3, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 4, T, Q> diagonal3x4 - ( - vec<3, T, Q> const& v - ) - { - mat<3, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> diagonal4x4 - ( - vec<4, T, Q> const& v - ) - { - mat<4, 4, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - Result[3][3] = v[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 3, T, Q> diagonal4x3 - ( - vec<3, T, Q> const& v - ) - { - mat<4, 3, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - Result[2][2] = v[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 2, T, Q> diagonal4x2 - ( - vec<2, T, Q> const& v - ) - { - mat<4, 2, T, Q> Result(static_cast(1)); - Result[0][0] = v[0]; - Result[1][1] = v[1]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<2, 2, T, Q> adjugate(mat<2, 2, T, Q> const& m) - { - return mat<2, 2, T, Q>( - +m[1][1], -m[1][0], - -m[0][1], +m[0][0]); - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> adjugate(mat<3, 3, T, Q> const& m) - { - T const m00 = determinant(mat<2, 2, T, Q>(m[1][1], m[2][1], m[1][2], m[2][2])); - T const m01 = determinant(mat<2, 2, T, Q>(m[0][1], m[2][1], m[0][2], m[2][2])); - T const m02 = determinant(mat<2, 2, T, Q>(m[0][1], m[1][1], m[0][2], m[1][2])); - - T const m10 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][2], m[2][2])); - T const m11 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][2], m[2][2])); - T const m12 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][2], m[1][2])); - - T const m20 = determinant(mat<2, 2, T, Q>(m[1][0], m[2][0], m[1][1], m[2][1])); - T const m21 = determinant(mat<2, 2, T, Q>(m[0][0], m[2][0], m[0][1], m[2][1])); - T const m22 = determinant(mat<2, 2, T, Q>(m[0][0], m[1][0], m[0][1], m[1][1])); - - return mat<3, 3, T, Q>( - +m00, -m01, +m02, - -m10, +m11, -m12, - +m20, -m21, +m22); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> adjugate(mat<4, 4, T, Q> const& m) - { - T const m00 = determinant(mat<3, 3, T, Q>(m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); - T const m01 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); - T const m02 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][1], m[3][3])); - T const m03 = determinant(mat<3, 3, T, Q>(m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); - - T const m10 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[2][1], m[2][2], m[2][3], m[3][1], m[3][2], m[3][3])); - T const m11 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[2][0], m[2][2], m[2][3], m[3][0], m[3][2], m[3][3])); - T const m12 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[2][0], m[2][1], m[2][3], m[3][0], m[3][1], m[3][3])); - T const m13 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[2][0], m[2][1], m[2][2], m[3][0], m[3][1], m[3][2])); - - T const m20 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[3][1], m[3][2], m[3][3])); - T const m21 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[3][0], m[3][2], m[3][3])); - T const m22 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[3][0], m[3][1], m[3][3])); - T const m23 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[3][0], m[3][1], m[3][2])); - - T const m30 = determinant(mat<3, 3, T, Q>(m[0][1], m[0][2], m[0][3], m[1][1], m[1][2], m[1][3], m[2][1], m[2][2], m[2][3])); - T const m31 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][2], m[0][3], m[1][0], m[1][2], m[1][3], m[2][0], m[2][2], m[2][3])); - T const m32 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][3], m[1][0], m[1][1], m[1][3], m[2][0], m[2][1], m[2][3])); - T const m33 = determinant(mat<3, 3, T, Q>(m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], m[2][2])); - - return mat<4, 4, T, Q>( - +m00, -m01, +m02, -m03, - -m10, +m11, -m12, +m13, - +m20, -m21, +m22, -m23, - -m30, +m31, -m32, +m33); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/matrix_query.hpp b/src/qged/display/glm/glm/gtx/matrix_query.hpp deleted file mode 100644 index befd8c31d58..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_query.hpp +++ /dev/null @@ -1,108 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_matrix_query -/// @file glm/gtx/matrix_query.hpp -/// -/// @see core (dependence) -/// @see gtx_vector_query (dependence) -/// -/// @defgroup gtx_matrix_query GLM_GTX_matrix_query -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Query to evaluate matrix properties - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/vector_query.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_query extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_query - /// @{ - - /// Return whether a matrix a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a null matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is an identity matrix. - /// From GLM_GTX_matrix_query extension. - template class matType> - GLM_FUNC_DECL bool isIdentity(matType const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is a normalized matrix. - /// From GLM_GTX_matrix_query extension. - template - GLM_FUNC_DECL bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon); - - /// Return whether a matrix is an orthonormalized matrix. - /// From GLM_GTX_matrix_query extension. - template class matType> - GLM_FUNC_DECL bool isOrthogonal(matType const& m, T const& epsilon); - - /// @} -}//namespace glm - -#include "matrix_query.inl" diff --git a/src/qged/display/glm/glm/gtx/matrix_query.inl b/src/qged/display/glm/glm/gtx/matrix_query.inl deleted file mode 100644 index 77bd23108e3..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_query.inl +++ /dev/null @@ -1,113 +0,0 @@ -/// @ref gtx_matrix_query - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool isNull(mat<2, 2, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNull(mat<3, 3, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNull(mat<4, 4, T, Q> const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m.length() ; ++i) - result = isNull(m[i], epsilon); - return result; - } - - template - GLM_FUNC_QUALIFIER bool isIdentity(mat const& m, T const& epsilon) - { - bool result = true; - for(length_t i = 0; result && i < m[0].length() ; ++i) - { - for(length_t j = 0; result && j < i ; ++j) - result = abs(m[i][j]) <= epsilon; - if(result) - result = abs(m[i][i] - 1) <= epsilon; - for(length_t j = i + 1; result && j < m.length(); ++j) - result = abs(m[i][j]) <= epsilon; - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<2, 2, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<2, 2, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<3, 3, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<3, 3, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(mat<4, 4, T, Q> const& m, T const& epsilon) - { - bool result(true); - for(length_t i = 0; result && i < m.length(); ++i) - result = isNormalized(m[i], epsilon); - for(length_t i = 0; result && i < m.length(); ++i) - { - typename mat<4, 4, T, Q>::col_type v; - for(length_t j = 0; j < m.length(); ++j) - v[j] = m[j][i]; - result = isNormalized(v, epsilon); - } - return result; - } - - template - GLM_FUNC_QUALIFIER bool isOrthogonal(mat const& m, T const& epsilon) - { - bool result = true; - for(length_t i(0); result && i < m.length() - 1; ++i) - for(length_t j(i + 1); result && j < m.length(); ++j) - result = areOrthogonal(m[i], m[j], epsilon); - - if(result) - { - mat tmp = transpose(m); - for(length_t i(0); result && i < m.length() - 1 ; ++i) - for(length_t j(i + 1); result && j < m.length(); ++j) - result = areOrthogonal(tmp[i], tmp[j], epsilon); - } - return result; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/matrix_transform_2d.hpp b/src/qged/display/glm/glm/gtx/matrix_transform_2d.hpp deleted file mode 100644 index 0a1b7210edb..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_transform_2d.hpp +++ /dev/null @@ -1,112 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_matrix_transform_2d -/// @file glm/gtx/matrix_transform_2d.hpp -/// @author Miguel Ángel Pérez Martínez -/// -/// @see core (dependence) -/// -/// @defgroup gtx_matrix_transform_2d GLM_GTX_matrix_transform_2d -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines functions that generate common 2d transformation matrices. - -#pragma once - -// Dependency: -#include "../mat3x3.hpp" -#include "../vec2.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_matrix_transform_2d is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_matrix_transform_2d extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_matrix_transform_2d - /// @{ - - /// Builds a translation 3 * 3 matrix created from a vector of 2 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a translation vector. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v); - - /// Builds a rotation 3 * 3 matrix created from an angle. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param angle Rotation angle expressed in radians. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( - mat<3, 3, T, Q> const& m, - T angle); - - /// Builds a scale 3 * 3 matrix created from a vector of 2 components. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param v Coordinates of a scale vector. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v); - - /// Builds an horizontal (parallel to the x axis) shear 3 * 3 matrix. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param y Shear factor. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( - mat<3, 3, T, Q> const& m, - T y); - - /// Builds a vertical (parallel to the y axis) shear 3 * 3 matrix. - /// - /// @param m Input matrix multiplied by this translation matrix. - /// @param x Shear factor. - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( - mat<3, 3, T, Q> const& m, - T x); - - /// @} -}//namespace glm - -#include "matrix_transform_2d.inl" diff --git a/src/qged/display/glm/glm/gtx/matrix_transform_2d.inl b/src/qged/display/glm/glm/gtx/matrix_transform_2d.inl deleted file mode 100644 index a68d24dc982..00000000000 --- a/src/qged/display/glm/glm/gtx/matrix_transform_2d.inl +++ /dev/null @@ -1,68 +0,0 @@ -/// @ref gtx_matrix_transform_2d -/// @author Miguel Ángel Pérez Martínez - -#include "../trigonometric.hpp" - -namespace glm -{ - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> translate( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v) - { - mat<3, 3, T, Q> Result(m); - Result[2] = m[0] * v[0] + m[1] * v[1] + m[2]; - return Result; - } - - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> rotate( - mat<3, 3, T, Q> const& m, - T angle) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - mat<3, 3, T, Q> Result; - Result[0] = m[0] * c + m[1] * s; - Result[1] = m[0] * -s + m[1] * c; - Result[2] = m[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> scale( - mat<3, 3, T, Q> const& m, - vec<2, T, Q> const& v) - { - mat<3, 3, T, Q> Result; - Result[0] = m[0] * v[0]; - Result[1] = m[1] * v[1]; - Result[2] = m[2]; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX( - mat<3, 3, T, Q> const& m, - T y) - { - mat<3, 3, T, Q> Result(1); - Result[0][1] = y; - return m * Result; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY( - mat<3, 3, T, Q> const& m, - T x) - { - mat<3, 3, T, Q> Result(1); - Result[1][0] = x; - return m * Result; - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/mixed_product.hpp b/src/qged/display/glm/glm/gtx/mixed_product.hpp deleted file mode 100644 index bebbb7e17b7..00000000000 --- a/src/qged/display/glm/glm/gtx/mixed_product.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_mixed_product -/// @file glm/gtx/mixed_product.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_mixed_product GLM_GTX_mixed_producte -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Mixed product of 3 vectors. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_mixed_product is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_mixed_product extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_mixed_product - /// @{ - - /// @brief Mixed product of 3 vectors (from GLM_GTX_mixed_product extension) - template - GLM_FUNC_DECL T mixedProduct( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3); - - /// @} -}// namespace glm - -#include "mixed_product.inl" diff --git a/src/qged/display/glm/glm/gtx/mixed_product.inl b/src/qged/display/glm/glm/gtx/mixed_product.inl deleted file mode 100644 index e5cdbdb49a2..00000000000 --- a/src/qged/display/glm/glm/gtx/mixed_product.inl +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref gtx_mixed_product - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T mixedProduct - ( - vec<3, T, Q> const& v1, - vec<3, T, Q> const& v2, - vec<3, T, Q> const& v3 - ) - { - return dot(cross(v1, v2), v3); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/norm.hpp b/src/qged/display/glm/glm/gtx/norm.hpp deleted file mode 100644 index 6165f0a663e..00000000000 --- a/src/qged/display/glm/glm/gtx/norm.hpp +++ /dev/null @@ -1,119 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_norm -/// @file glm/gtx/norm.hpp -/// -/// @see core (dependence) -/// @see gtx_quaternion (dependence) -/// @see gtx_component_wise (dependence) -/// -/// @defgroup gtx_norm GLM_GTX_norm -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Various ways to compute vector norms. - -#pragma once - -// Dependency: -#include "../geometric.hpp" -#include "../gtx/quaternion.hpp" -#include "../gtx/component_wise.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_norm is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_norm extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_norm - /// @{ - - /// Returns the squared length of x. - /// From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T length2(vec const& x); - - /// Returns the squared distance between p0 and p1, i.e., length2(p0 - p1). - /// From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T distance2(vec const& p0, vec const& p1); - - //! Returns the L1 norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the L1 norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l1Norm(vec<3, T, Q> const& v); - - //! Returns the L2 norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the L2 norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T l2Norm(vec<3, T, Q> const& x); - - //! Returns the L norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth); - - //! Returns the L norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lxNorm(vec<3, T, Q> const& x, unsigned int Depth); - - //! Returns the LMax norm between x and y. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - //! Returns the LMax norm of v. - //! From GLM_GTX_norm extension. - template - GLM_FUNC_DECL T lMaxNorm(vec<3, T, Q> const& x); - - /// @} -}//namespace glm - -#include "norm.inl" diff --git a/src/qged/display/glm/glm/gtx/norm.inl b/src/qged/display/glm/glm/gtx/norm.inl deleted file mode 100644 index 6db561b37e0..00000000000 --- a/src/qged/display/glm/glm/gtx/norm.inl +++ /dev/null @@ -1,95 +0,0 @@ -/// @ref gtx_norm - -#include "../detail/qualifier.hpp" - -namespace glm{ -namespace detail -{ - template - struct compute_length2 - { - GLM_FUNC_QUALIFIER static T call(vec const& v) - { - return dot(v, v); - } - }; -}//namespace detail - - template - GLM_FUNC_QUALIFIER genType length2(genType x) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); - return x * x; - } - - template - GLM_FUNC_QUALIFIER T length2(vec const& v) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'length2' accepts only floating-point inputs"); - return detail::compute_length2::value>::call(v); - } - - template - GLM_FUNC_QUALIFIER T distance2(T p0, T p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); - return length2(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T distance2(vec const& p0, vec const& p1) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'distance2' accepts only floating-point inputs"); - return length2(p1 - p0); - } - - template - GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return abs(b.x - a.x) + abs(b.y - a.y) + abs(b.z - a.z); - } - - template - GLM_FUNC_QUALIFIER T l1Norm(vec<3, T, Q> const& v) - { - return abs(v.x) + abs(v.y) + abs(v.z); - } - - template - GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& a, vec<3, T, Q> const& b - ) - { - return length(b - a); - } - - template - GLM_FUNC_QUALIFIER T l2Norm(vec<3, T, Q> const& v) - { - return length(v); - } - - template - GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& x, vec<3, T, Q> const& y, unsigned int Depth) - { - return pow(pow(abs(y.x - x.x), T(Depth)) + pow(abs(y.y - x.y), T(Depth)) + pow(abs(y.z - x.z), T(Depth)), T(1) / T(Depth)); - } - - template - GLM_FUNC_QUALIFIER T lxNorm(vec<3, T, Q> const& v, unsigned int Depth) - { - return pow(pow(abs(v.x), T(Depth)) + pow(abs(v.y), T(Depth)) + pow(abs(v.z), T(Depth)), T(1) / T(Depth)); - } - - template - GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& a, vec<3, T, Q> const& b) - { - return compMax(abs(b - a)); - } - - template - GLM_FUNC_QUALIFIER T lMaxNorm(vec<3, T, Q> const& v) - { - return compMax(abs(v)); - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/normal.hpp b/src/qged/display/glm/glm/gtx/normal.hpp deleted file mode 100644 index 7eedb43a8c3..00000000000 --- a/src/qged/display/glm/glm/gtx/normal.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_normal -/// @file glm/gtx/normal.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_normal GLM_GTX_normal -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Compute the normal of a triangle. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_normal is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_normal extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_normal - /// @{ - - /// Computes triangle normal from triangle points. - /// - /// @see gtx_normal - template - GLM_FUNC_DECL vec<3, T, Q> triangleNormal(vec<3, T, Q> const& p1, vec<3, T, Q> const& p2, vec<3, T, Q> const& p3); - - /// @} -}//namespace glm - -#include "normal.inl" diff --git a/src/qged/display/glm/glm/gtx/normal.inl b/src/qged/display/glm/glm/gtx/normal.inl deleted file mode 100644 index 74f9fc99458..00000000000 --- a/src/qged/display/glm/glm/gtx/normal.inl +++ /dev/null @@ -1,15 +0,0 @@ -/// @ref gtx_normal - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> triangleNormal - ( - vec<3, T, Q> const& p1, - vec<3, T, Q> const& p2, - vec<3, T, Q> const& p3 - ) - { - return normalize(cross(p1 - p2, p1 - p3)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/normalize_dot.hpp b/src/qged/display/glm/glm/gtx/normalize_dot.hpp deleted file mode 100644 index 85e0fe8f6e8..00000000000 --- a/src/qged/display/glm/glm/gtx/normalize_dot.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_normalize_dot -/// @file glm/gtx/normalize_dot.hpp -/// -/// @see core (dependence) -/// @see gtx_fast_square_root (dependence) -/// -/// @defgroup gtx_normalize_dot GLM_GTX_normalize_dot -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Dot product of vectors that need to be normalize with a single square root. - -#pragma once - -// Dependency: -#include "../gtx/fast_square_root.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_normalize_dot is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_normalize_dot extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_normalize_dot - /// @{ - - /// Normalize parameters and returns the dot product of x and y. - /// It's faster that dot(normalize(x), normalize(y)). - /// - /// @see gtx_normalize_dot extension. - template - GLM_FUNC_DECL T normalizeDot(vec const& x, vec const& y); - - /// Normalize parameters and returns the dot product of x and y. - /// Faster that dot(fastNormalize(x), fastNormalize(y)). - /// - /// @see gtx_normalize_dot extension. - template - GLM_FUNC_DECL T fastNormalizeDot(vec const& x, vec const& y); - - /// @} -}//namespace glm - -#include "normalize_dot.inl" diff --git a/src/qged/display/glm/glm/gtx/normalize_dot.inl b/src/qged/display/glm/glm/gtx/normalize_dot.inl deleted file mode 100644 index 7bcd9a534a8..00000000000 --- a/src/qged/display/glm/glm/gtx/normalize_dot.inl +++ /dev/null @@ -1,16 +0,0 @@ -/// @ref gtx_normalize_dot - -namespace glm -{ - template - GLM_FUNC_QUALIFIER T normalizeDot(vec const& x, vec const& y) - { - return glm::dot(x, y) * glm::inversesqrt(glm::dot(x, x) * glm::dot(y, y)); - } - - template - GLM_FUNC_QUALIFIER T fastNormalizeDot(vec const& x, vec const& y) - { - return glm::dot(x, y) * glm::fastInverseSqrt(glm::dot(x, x) * glm::dot(y, y)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/number_precision.hpp b/src/qged/display/glm/glm/gtx/number_precision.hpp deleted file mode 100644 index 3ee2342c57e..00000000000 --- a/src/qged/display/glm/glm/gtx/number_precision.hpp +++ /dev/null @@ -1,92 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_number_precision -/// @file glm/gtx/number_precision.hpp -/// -/// @see core (dependence) -/// @see gtc_type_precision (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_number_precision GLM_GTX_number_precision -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defined size types. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/type_precision.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_number_precision is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_number_precision extension included") -# endif -#endif - -namespace glm{ -namespace gtx -{ - ///////////////////////////// - // Unsigned int vector types - - /// @addtogroup gtx_number_precision - /// @{ - - typedef u8 u8vec1; //!< \brief 8bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u16 u16vec1; //!< \brief 16bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u32 u32vec1; //!< \brief 32bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - typedef u64 u64vec1; //!< \brief 64bit unsigned integer scalar. (from GLM_GTX_number_precision extension) - - ////////////////////// - // Float vector types - - typedef f32 f32vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64vec1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - - ////////////////////// - // Float matrix types - - typedef f32 f32mat1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f32 f32mat1x1; //!< \brief Single-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64mat1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - typedef f64 f64mat1x1; //!< \brief Double-qualifier floating-point scalar. (from GLM_GTX_number_precision extension) - - /// @} -}//namespace gtx -}//namespace glm - -#include "number_precision.inl" diff --git a/src/qged/display/glm/glm/gtx/number_precision.inl b/src/qged/display/glm/glm/gtx/number_precision.inl deleted file mode 100644 index b39d71c3b49..00000000000 --- a/src/qged/display/glm/glm/gtx/number_precision.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_number_precision - -namespace glm -{ - -} diff --git a/src/qged/display/glm/glm/gtx/optimum_pow.hpp b/src/qged/display/glm/glm/gtx/optimum_pow.hpp deleted file mode 100644 index 5dae67a7e8f..00000000000 --- a/src/qged/display/glm/glm/gtx/optimum_pow.hpp +++ /dev/null @@ -1,85 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_optimum_pow -/// @file glm/gtx/optimum_pow.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_optimum_pow GLM_GTX_optimum_pow -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Integer exponentiation of power functions. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_optimum_pow is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_optimum_pow extension included") -# endif -#endif - -namespace glm{ -namespace gtx -{ - /// @addtogroup gtx_optimum_pow - /// @{ - - /// Returns x raised to the power of 2. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow2(genType const& x); - - /// Returns x raised to the power of 3. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow3(genType const& x); - - /// Returns x raised to the power of 4. - /// - /// @see gtx_optimum_pow - template - GLM_FUNC_DECL genType pow4(genType const& x); - - /// @} -}//namespace gtx -}//namespace glm - -#include "optimum_pow.inl" diff --git a/src/qged/display/glm/glm/gtx/optimum_pow.inl b/src/qged/display/glm/glm/gtx/optimum_pow.inl deleted file mode 100644 index a26c19c18bf..00000000000 --- a/src/qged/display/glm/glm/gtx/optimum_pow.inl +++ /dev/null @@ -1,22 +0,0 @@ -/// @ref gtx_optimum_pow - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType pow2(genType const& x) - { - return x * x; - } - - template - GLM_FUNC_QUALIFIER genType pow3(genType const& x) - { - return x * x * x; - } - - template - GLM_FUNC_QUALIFIER genType pow4(genType const& x) - { - return (x * x) * (x * x); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/orthonormalize.hpp b/src/qged/display/glm/glm/gtx/orthonormalize.hpp deleted file mode 100644 index 5ba5a047ec9..00000000000 --- a/src/qged/display/glm/glm/gtx/orthonormalize.hpp +++ /dev/null @@ -1,80 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_orthonormalize -/// @file glm/gtx/orthonormalize.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_orthonormalize GLM_GTX_orthonormalize -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Orthonormalize matrices. - -#pragma once - -// Dependency: -#include "../vec3.hpp" -#include "../mat3x3.hpp" -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_orthonormalize is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_orthonormalize extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_orthonormalize - /// @{ - - /// Returns the orthonormalized matrix of m. - /// - /// @see gtx_orthonormalize - template - GLM_FUNC_DECL mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m); - - /// Orthonormalizes x according y. - /// - /// @see gtx_orthonormalize - template - GLM_FUNC_DECL vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y); - - /// @} -}//namespace glm - -#include "orthonormalize.inl" diff --git a/src/qged/display/glm/glm/gtx/orthonormalize.inl b/src/qged/display/glm/glm/gtx/orthonormalize.inl deleted file mode 100644 index cb553ba6215..00000000000 --- a/src/qged/display/glm/glm/gtx/orthonormalize.inl +++ /dev/null @@ -1,29 +0,0 @@ -/// @ref gtx_orthonormalize - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> orthonormalize(mat<3, 3, T, Q> const& m) - { - mat<3, 3, T, Q> r = m; - - r[0] = normalize(r[0]); - - T d0 = dot(r[0], r[1]); - r[1] -= r[0] * d0; - r[1] = normalize(r[1]); - - T d1 = dot(r[1], r[2]); - d0 = dot(r[0], r[2]); - r[2] -= r[0] * d0 + r[1] * d1; - r[2] = normalize(r[2]); - - return r; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> orthonormalize(vec<3, T, Q> const& x, vec<3, T, Q> const& y) - { - return normalize(x - y * dot(y, x)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/perpendicular.hpp b/src/qged/display/glm/glm/gtx/perpendicular.hpp deleted file mode 100644 index 4c1eece4d4f..00000000000 --- a/src/qged/display/glm/glm/gtx/perpendicular.hpp +++ /dev/null @@ -1,72 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_perpendicular -/// @file glm/gtx/perpendicular.hpp -/// -/// @see core (dependence) -/// @see gtx_projection (dependence) -/// -/// @defgroup gtx_perpendicular GLM_GTX_perpendicular -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Perpendicular of a vector from other one - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/projection.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_perpendicular is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_perpendicular extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_perpendicular - /// @{ - - //! Projects x a perpendicular axis of Normal. - //! From GLM_GTX_perpendicular extension. - template - GLM_FUNC_DECL genType perp(genType const& x, genType const& Normal); - - /// @} -}//namespace glm - -#include "perpendicular.inl" diff --git a/src/qged/display/glm/glm/gtx/perpendicular.inl b/src/qged/display/glm/glm/gtx/perpendicular.inl deleted file mode 100644 index 1e72f334230..00000000000 --- a/src/qged/display/glm/glm/gtx/perpendicular.inl +++ /dev/null @@ -1,10 +0,0 @@ -/// @ref gtx_perpendicular - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType perp(genType const& x, genType const& Normal) - { - return x - proj(x, Normal); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/polar_coordinates.hpp b/src/qged/display/glm/glm/gtx/polar_coordinates.hpp deleted file mode 100644 index f39dc4c5171..00000000000 --- a/src/qged/display/glm/glm/gtx/polar_coordinates.hpp +++ /dev/null @@ -1,79 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_polar_coordinates -/// @file glm/gtx/polar_coordinates.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_polar_coordinates GLM_GTX_polar_coordinates -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Conversion from Euclidean space to polar space and revert. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_polar_coordinates is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_polar_coordinates extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_polar_coordinates - /// @{ - - /// Convert Euclidean to Polar coordinates, x is the latitude, y the longitude and z the xz distance. - /// - /// @see gtx_polar_coordinates - template - GLM_FUNC_DECL vec<3, T, Q> polar( - vec<3, T, Q> const& euclidean); - - /// Convert Polar to Euclidean coordinates. - /// - /// @see gtx_polar_coordinates - template - GLM_FUNC_DECL vec<3, T, Q> euclidean( - vec<2, T, Q> const& polar); - - /// @} -}//namespace glm - -#include "polar_coordinates.inl" diff --git a/src/qged/display/glm/glm/gtx/polar_coordinates.inl b/src/qged/display/glm/glm/gtx/polar_coordinates.inl deleted file mode 100644 index 371c8dddebd..00000000000 --- a/src/qged/display/glm/glm/gtx/polar_coordinates.inl +++ /dev/null @@ -1,36 +0,0 @@ -/// @ref gtx_polar_coordinates - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> polar - ( - vec<3, T, Q> const& euclidean - ) - { - T const Length(length(euclidean)); - vec<3, T, Q> const tmp(euclidean / Length); - T const xz_dist(sqrt(tmp.x * tmp.x + tmp.z * tmp.z)); - - return vec<3, T, Q>( - asin(tmp.y), // latitude - atan(tmp.x, tmp.z), // longitude - xz_dist); // xz distance - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> euclidean - ( - vec<2, T, Q> const& polar - ) - { - T const latitude(polar.x); - T const longitude(polar.y); - - return vec<3, T, Q>( - cos(latitude) * sin(longitude), - sin(latitude), - cos(latitude) * cos(longitude)); - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/projection.hpp b/src/qged/display/glm/glm/gtx/projection.hpp deleted file mode 100644 index bb08eca350f..00000000000 --- a/src/qged/display/glm/glm/gtx/projection.hpp +++ /dev/null @@ -1,74 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_projection -/// @file glm/gtx/projection.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_projection GLM_GTX_projection -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Projection of a vector to other one - -#pragma once - -// Dependency: -#include "../geometric.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_projection is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_projection extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_projection - /// @{ - - /// Projects x on Normal. - /// - /// @param[in] x A vector to project - /// @param[in] Normal A normal that doesn't need to be of unit length. - /// - /// @see gtx_projection - template - GLM_FUNC_DECL genType proj(genType const& x, genType const& Normal); - - /// @} -}//namespace glm - -#include "projection.inl" diff --git a/src/qged/display/glm/glm/gtx/projection.inl b/src/qged/display/glm/glm/gtx/projection.inl deleted file mode 100644 index f23f884fb93..00000000000 --- a/src/qged/display/glm/glm/gtx/projection.inl +++ /dev/null @@ -1,10 +0,0 @@ -/// @ref gtx_projection - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType proj(genType const& x, genType const& Normal) - { - return glm::dot(x, Normal) / glm::dot(Normal, Normal) * Normal; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/quaternion.hpp b/src/qged/display/glm/glm/gtx/quaternion.hpp deleted file mode 100644 index ad87e6a9f0d..00000000000 --- a/src/qged/display/glm/glm/gtx/quaternion.hpp +++ /dev/null @@ -1,205 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_quaternion -/// @file glm/gtx/quaternion.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_quaternion GLM_GTX_quaternion -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extented quaternion types and functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/constants.hpp" -#include "../gtc/quaternion.hpp" -#include "../ext/quaternion_exponential.hpp" -#include "../gtx/norm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_quaternion is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_quaternion extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_quaternion - /// @{ - - /// Create an identity quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL GLM_CONSTEXPR qua quat_identity(); - - /// Compute a cross product between a quaternion and a vector. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> cross( - qua const& q, - vec<3, T, Q> const& v); - - //! Compute a cross product between a vector and a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> cross( - vec<3, T, Q> const& v, - qua const& q); - - //! Compute a point on a path according squad equation. - //! q1 and q2 are control points; s1 and s2 are intermediate control points. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua squad( - qua const& q1, - qua const& q2, - qua const& s1, - qua const& s2, - T const& h); - - //! Returns an intermediate control point for squad interpolation. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua intermediate( - qua const& prev, - qua const& curr, - qua const& next); - - //! Returns quarternion square root. - /// - /// @see gtx_quaternion - //template - //qua sqrt( - // qua const& q); - - //! Rotates a 3 components vector by a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<3, T, Q> rotate( - qua const& q, - vec<3, T, Q> const& v); - - /// Rotates a 4 components vector by a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL vec<4, T, Q> rotate( - qua const& q, - vec<4, T, Q> const& v); - - /// Extract the real component of a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL T extractRealComponent( - qua const& q); - - /// Converts a quaternion to a 3 * 3 matrix. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL mat<3, 3, T, Q> toMat3( - qua const& x){return mat3_cast(x);} - - /// Converts a quaternion to a 4 * 4 matrix. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL mat<4, 4, T, Q> toMat4( - qua const& x){return mat4_cast(x);} - - /// Converts a 3 * 3 matrix to a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua toQuat( - mat<3, 3, T, Q> const& x){return quat_cast(x);} - - /// Converts a 4 * 4 matrix to a quaternion. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua toQuat( - mat<4, 4, T, Q> const& x){return quat_cast(x);} - - /// Quaternion interpolation using the rotation short path. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua shortMix( - qua const& x, - qua const& y, - T const& a); - - /// Quaternion normalized linear interpolation. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua fastMix( - qua const& x, - qua const& y, - T const& a); - - /// Compute the rotation between two vectors. - /// @param orig vector, needs to be normalized - /// @param dest vector, needs to be normalized - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL qua rotation( - vec<3, T, Q> const& orig, - vec<3, T, Q> const& dest); - - /// Returns the squared length of x. - /// - /// @see gtx_quaternion - template - GLM_FUNC_DECL GLM_CONSTEXPR T length2(qua const& q); - - /// @} -}//namespace glm - -#include "quaternion.inl" diff --git a/src/qged/display/glm/glm/gtx/quaternion.inl b/src/qged/display/glm/glm/gtx/quaternion.inl deleted file mode 100644 index d125bccc9a7..00000000000 --- a/src/qged/display/glm/glm/gtx/quaternion.inl +++ /dev/null @@ -1,159 +0,0 @@ -/// @ref gtx_quaternion - -#include -#include "../gtc/constants.hpp" - -namespace glm -{ - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR qua quat_identity() - { - return qua(static_cast(1), static_cast(0), static_cast(0), static_cast(0)); - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(vec<3, T, Q> const& v, qua const& q) - { - return inverse(q) * v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> cross(qua const& q, vec<3, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER qua squad - ( - qua const& q1, - qua const& q2, - qua const& s1, - qua const& s2, - T const& h) - { - return mix(mix(q1, q2, h), mix(s1, s2, h), static_cast(2) * (static_cast(1) - h) * h); - } - - template - GLM_FUNC_QUALIFIER qua intermediate - ( - qua const& prev, - qua const& curr, - qua const& next - ) - { - qua invQuat = inverse(curr); - return exp((log(next * invQuat) + log(prev * invQuat)) / static_cast(-4)) * curr; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotate(qua const& q, vec<3, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotate(qua const& q, vec<4, T, Q> const& v) - { - return q * v; - } - - template - GLM_FUNC_QUALIFIER T extractRealComponent(qua const& q) - { - T w = static_cast(1) - q.x * q.x - q.y * q.y - q.z * q.z; - if(w < T(0)) - return T(0); - else - return -sqrt(w); - } - - template - GLM_FUNC_QUALIFIER GLM_CONSTEXPR T length2(qua const& q) - { - return q.x * q.x + q.y * q.y + q.z * q.z + q.w * q.w; - } - - template - GLM_FUNC_QUALIFIER qua shortMix(qua const& x, qua const& y, T const& a) - { - if(a <= static_cast(0)) return x; - if(a >= static_cast(1)) return y; - - T fCos = dot(x, y); - qua y2(y); //BUG!!! qua y2; - if(fCos < static_cast(0)) - { - y2 = -y; - fCos = -fCos; - } - - //if(fCos > 1.0f) // problem - T k0, k1; - if(fCos > (static_cast(1) - epsilon())) - { - k0 = static_cast(1) - a; - k1 = static_cast(0) + a; //BUG!!! 1.0f + a; - } - else - { - T fSin = sqrt(T(1) - fCos * fCos); - T fAngle = atan(fSin, fCos); - T fOneOverSin = static_cast(1) / fSin; - k0 = sin((static_cast(1) - a) * fAngle) * fOneOverSin; - k1 = sin((static_cast(0) + a) * fAngle) * fOneOverSin; - } - - return qua( - k0 * x.w + k1 * y2.w, - k0 * x.x + k1 * y2.x, - k0 * x.y + k1 * y2.y, - k0 * x.z + k1 * y2.z); - } - - template - GLM_FUNC_QUALIFIER qua fastMix(qua const& x, qua const& y, T const& a) - { - return glm::normalize(x * (static_cast(1) - a) + (y * a)); - } - - template - GLM_FUNC_QUALIFIER qua rotation(vec<3, T, Q> const& orig, vec<3, T, Q> const& dest) - { - T cosTheta = dot(orig, dest); - vec<3, T, Q> rotationAxis; - - if(cosTheta >= static_cast(1) - epsilon()) { - // orig and dest point in the same direction - return quat_identity(); - } - - if(cosTheta < static_cast(-1) + epsilon()) - { - // special case when vectors in opposite directions : - // there is no "ideal" rotation axis - // So guess one; any will do as long as it's perpendicular to start - // This implementation favors a rotation around the Up axis (Y), - // since it's often what you want to do. - rotationAxis = cross(vec<3, T, Q>(0, 0, 1), orig); - if(length2(rotationAxis) < epsilon()) // bad luck, they were parallel, try again! - rotationAxis = cross(vec<3, T, Q>(1, 0, 0), orig); - - rotationAxis = normalize(rotationAxis); - return angleAxis(pi(), rotationAxis); - } - - // Implementation from Stan Melax's Game Programming Gems 1 article - rotationAxis = cross(orig, dest); - - T s = sqrt((T(1) + cosTheta) * static_cast(2)); - T invs = static_cast(1) / s; - - return qua( - s * static_cast(0.5f), - rotationAxis.x * invs, - rotationAxis.y * invs, - rotationAxis.z * invs); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/range.hpp b/src/qged/display/glm/glm/gtx/range.hpp deleted file mode 100644 index 41505c00465..00000000000 --- a/src/qged/display/glm/glm/gtx/range.hpp +++ /dev/null @@ -1,129 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_range -/// @file glm/gtx/range.hpp -/// @author Joshua Moerman -/// -/// @defgroup gtx_range GLM_GTX_range -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines begin and end for vectors and matrices. Useful for range-based for loop. -/// The range is defined over the elements, not over columns or rows (e.g. mat4 has 16 elements). - -#pragma once - -// Dependencies -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_range is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_range extension included") -# endif -#endif - -#include "../gtc/type_ptr.hpp" -#include "../gtc/vec1.hpp" - -namespace glm -{ - /// @addtogroup gtx_range - /// @{ - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(push) -# pragma warning(disable : 4100) // unreferenced formal parameter -# endif - - template - inline length_t components(vec<1, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<2, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<3, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(vec<4, T, Q> const& v) - { - return v.length(); - } - - template - inline length_t components(genType const& m) - { - return m.length() * m[0].length(); - } - - template - inline typename genType::value_type const * begin(genType const& v) - { - return value_ptr(v); - } - - template - inline typename genType::value_type const * end(genType const& v) - { - return begin(v) + components(v); - } - - template - inline typename genType::value_type * begin(genType& v) - { - return value_ptr(v); - } - - template - inline typename genType::value_type * end(genType& v) - { - return begin(v) + components(v); - } - -# if GLM_COMPILER & GLM_COMPILER_VC -# pragma warning(pop) -# endif - - /// @} -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/raw_data.hpp b/src/qged/display/glm/glm/gtx/raw_data.hpp deleted file mode 100644 index b5604666840..00000000000 --- a/src/qged/display/glm/glm/gtx/raw_data.hpp +++ /dev/null @@ -1,82 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_raw_data -/// @file glm/gtx/raw_data.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_raw_data GLM_GTX_raw_data -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Projection of a vector to other one - -#pragma once - -// Dependencies -#include "../ext/scalar_uint_sized.hpp" -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_raw_data is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_raw_data extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_raw_data - /// @{ - - //! Type for byte numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint8 byte; - - //! Type for word numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint16 word; - - //! Type for dword numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint32 dword; - - //! Type for qword numbers. - //! From GLM_GTX_raw_data extension. - typedef detail::uint64 qword; - - /// @} -}// namespace glm - -#include "raw_data.inl" diff --git a/src/qged/display/glm/glm/gtx/raw_data.inl b/src/qged/display/glm/glm/gtx/raw_data.inl deleted file mode 100644 index c740317d334..00000000000 --- a/src/qged/display/glm/glm/gtx/raw_data.inl +++ /dev/null @@ -1,2 +0,0 @@ -/// @ref gtx_raw_data - diff --git a/src/qged/display/glm/glm/gtx/rotate_normalized_axis.hpp b/src/qged/display/glm/glm/gtx/rotate_normalized_axis.hpp deleted file mode 100644 index fa48566e206..00000000000 --- a/src/qged/display/glm/glm/gtx/rotate_normalized_axis.hpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_rotate_normalized_axis -/// @file glm/gtx/rotate_normalized_axis.hpp -/// -/// @see core (dependence) -/// @see gtc_matrix_transform -/// @see gtc_quaternion -/// -/// @defgroup gtx_rotate_normalized_axis GLM_GTX_rotate_normalized_axis -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Quaternions and matrices rotations around normalized axis. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/epsilon.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_rotate_normalized_axis is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_rotate_normalized_axis extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_rotate_normalized_axis - /// @{ - - /// Builds a rotation 4 * 4 matrix created from a normalized axis and an angle. - /// - /// @param m Input matrix multiplied by this rotation matrix. - /// @param angle Rotation angle expressed in radians. - /// @param axis Rotation axis, must be normalized. - /// @tparam T Value type used to build the matrix. Currently supported: half (not recommended), float or double. - /// - /// @see gtx_rotate_normalized_axis - /// @see - rotate(T angle, T x, T y, T z) - /// @see - rotate(mat<4, 4, T, Q> const& m, T angle, T x, T y, T z) - /// @see - rotate(T angle, vec<3, T, Q> const& v) - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotateNormalizedAxis( - mat<4, 4, T, Q> const& m, - T const& angle, - vec<3, T, Q> const& axis); - - /// Rotates a quaternion from a vector of 3 components normalized axis and an angle. - /// - /// @param q Source orientation - /// @param angle Angle expressed in radians. - /// @param axis Normalized axis of the rotation, must be normalized. - /// - /// @see gtx_rotate_normalized_axis - template - GLM_FUNC_DECL qua rotateNormalizedAxis( - qua const& q, - T const& angle, - vec<3, T, Q> const& axis); - - /// @} -}//namespace glm - -#include "rotate_normalized_axis.inl" diff --git a/src/qged/display/glm/glm/gtx/rotate_normalized_axis.inl b/src/qged/display/glm/glm/gtx/rotate_normalized_axis.inl deleted file mode 100644 index b2e9278c0ae..00000000000 --- a/src/qged/display/glm/glm/gtx/rotate_normalized_axis.inl +++ /dev/null @@ -1,58 +0,0 @@ -/// @ref gtx_rotate_normalized_axis - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotateNormalizedAxis - ( - mat<4, 4, T, Q> const& m, - T const& angle, - vec<3, T, Q> const& v - ) - { - T const a = angle; - T const c = cos(a); - T const s = sin(a); - - vec<3, T, Q> const axis(v); - - vec<3, T, Q> const temp((static_cast(1) - c) * axis); - - mat<4, 4, T, Q> Rotate; - Rotate[0][0] = c + temp[0] * axis[0]; - Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; - Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; - - Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; - Rotate[1][1] = c + temp[1] * axis[1]; - Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; - - Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; - Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; - Rotate[2][2] = c + temp[2] * axis[2]; - - mat<4, 4, T, Q> Result; - Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - Result[3] = m[3]; - return Result; - } - - template - GLM_FUNC_QUALIFIER qua rotateNormalizedAxis - ( - qua const& q, - T const& angle, - vec<3, T, Q> const& v - ) - { - vec<3, T, Q> const Tmp(v); - - T const AngleRad(angle); - T const Sin = sin(AngleRad * T(0.5)); - - return q * qua(cos(AngleRad * static_cast(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin); - //return gtc::quaternion::cross(q, tquat(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/rotate_vector.hpp b/src/qged/display/glm/glm/gtx/rotate_vector.hpp deleted file mode 100644 index 6be09248699..00000000000 --- a/src/qged/display/glm/glm/gtx/rotate_vector.hpp +++ /dev/null @@ -1,154 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_rotate_vector -/// @file glm/gtx/rotate_vector.hpp -/// -/// @see core (dependence) -/// @see gtx_transform (dependence) -/// -/// @defgroup gtx_rotate_vector GLM_GTX_rotate_vector -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Function to directly rotate a vector - -#pragma once - -// Dependency: -#include "../gtx/transform.hpp" -#include "../gtc/epsilon.hpp" -#include "../ext/vector_relational.hpp" -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_rotate_vector is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_rotate_vector extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_rotate_vector - /// @{ - - /// Returns Spherical interpolation between two vectors - /// - /// @param x A first vector - /// @param y A second vector - /// @param a Interpolation factor. The interpolation is defined beyond the range [0, 1]. - /// - /// @see gtx_rotate_vector - template - GLM_FUNC_DECL vec<3, T, Q> slerp( - vec<3, T, Q> const& x, - vec<3, T, Q> const& y, - T const& a); - - //! Rotate a two dimensional vector. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<2, T, Q> rotate( - vec<2, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around an axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotate( - vec<3, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal); - - //! Rotate a four dimensional vector around an axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotate( - vec<4, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal); - - //! Rotate a three dimensional vector around the X axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateX( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around the Y axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateY( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a three dimensional vector around the Z axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<3, T, Q> rotateZ( - vec<3, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the X axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateX( - vec<4, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the Y axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateY( - vec<4, T, Q> const& v, - T const& angle); - - //! Rotate a four dimensional vector around the Z axis. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL vec<4, T, Q> rotateZ( - vec<4, T, Q> const& v, - T const& angle); - - //! Build a rotation matrix from a normal and a up vector. - //! From GLM_GTX_rotate_vector extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> orientation( - vec<3, T, Q> const& Normal, - vec<3, T, Q> const& Up); - - /// @} -}//namespace glm - -#include "rotate_vector.inl" diff --git a/src/qged/display/glm/glm/gtx/rotate_vector.inl b/src/qged/display/glm/glm/gtx/rotate_vector.inl deleted file mode 100644 index f8136e765e0..00000000000 --- a/src/qged/display/glm/glm/gtx/rotate_vector.inl +++ /dev/null @@ -1,187 +0,0 @@ -/// @ref gtx_rotate_vector - -namespace glm -{ - template - GLM_FUNC_QUALIFIER vec<3, T, Q> slerp - ( - vec<3, T, Q> const& x, - vec<3, T, Q> const& y, - T const& a - ) - { - // get cosine of angle between vectors (-1 -> 1) - T CosAlpha = dot(x, y); - // get angle (0 -> pi) - T Alpha = acos(CosAlpha); - // get sine of angle between vectors (0 -> 1) - T SinAlpha = sin(Alpha); - // this breaks down when SinAlpha = 0, i.e. Alpha = 0 or pi - T t1 = sin((static_cast(1) - a) * Alpha) / SinAlpha; - T t2 = sin(a * Alpha) / SinAlpha; - - // interpolate src vectors - return x * t1 + y * t2; - } - - template - GLM_FUNC_QUALIFIER vec<2, T, Q> rotate - ( - vec<2, T, Q> const& v, - T const& angle - ) - { - vec<2, T, Q> Result; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotate - ( - vec<3, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal - ) - { - return mat<3, 3, T, Q>(glm::rotate(angle, normal)) * v; - } - /* - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateGTX( - const vec<3, T, Q>& x, - T angle, - const vec<3, T, Q>& normal) - { - const T Cos = cos(radians(angle)); - const T Sin = sin(radians(angle)); - return x * Cos + ((x * normal) * (T(1) - Cos)) * normal + cross(x, normal) * Sin; - } - */ - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotate - ( - vec<4, T, Q> const& v, - T const& angle, - vec<3, T, Q> const& normal - ) - { - return rotate(angle, normal) * v; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateX - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result(v); - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.y = v.y * Cos - v.z * Sin; - Result.z = v.y * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateY - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos + v.z * Sin; - Result.z = -v.x * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<3, T, Q> rotateZ - ( - vec<3, T, Q> const& v, - T const& angle - ) - { - vec<3, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateX - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.y = v.y * Cos - v.z * Sin; - Result.z = v.y * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateY - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos + v.z * Sin; - Result.z = -v.x * Sin + v.z * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER vec<4, T, Q> rotateZ - ( - vec<4, T, Q> const& v, - T const& angle - ) - { - vec<4, T, Q> Result = v; - T const Cos(cos(angle)); - T const Sin(sin(angle)); - - Result.x = v.x * Cos - v.y * Sin; - Result.y = v.x * Sin + v.y * Cos; - return Result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> orientation - ( - vec<3, T, Q> const& Normal, - vec<3, T, Q> const& Up - ) - { - if(all(equal(Normal, Up, epsilon()))) - return mat<4, 4, T, Q>(static_cast(1)); - - vec<3, T, Q> RotationAxis = cross(Up, Normal); - T Angle = acos(dot(Normal, Up)); - - return rotate(Angle, RotationAxis); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/scalar_multiplication.hpp b/src/qged/display/glm/glm/gtx/scalar_multiplication.hpp deleted file mode 100644 index 443e745d468..00000000000 --- a/src/qged/display/glm/glm/gtx/scalar_multiplication.hpp +++ /dev/null @@ -1,106 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx -/// @file glm/gtx/scalar_multiplication.hpp -/// @author Joshua Moerman -/// -/// Include to use the features of this extension. -/// -/// Enables scalar multiplication for all types -/// -/// Since GLSL is very strict about types, the following (often used) combinations do not work: -/// double * vec4 -/// int * vec4 -/// vec4 / int -/// So we'll fix that! Of course "float * vec4" should remain the same (hence the enable_if magic) - -#pragma once - -#include "../detail/setup.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_scalar_multiplication is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_scalar_multiplication extension included") -# endif -#endif - -#include "../vec2.hpp" -#include "../vec3.hpp" -#include "../vec4.hpp" -#include "../mat2x2.hpp" -#include - -namespace glm -{ - template - using return_type_scalar_multiplication = typename std::enable_if< - !std::is_same::value // T may not be a float - && std::is_arithmetic::value, Vec // But it may be an int or double (no vec3 or mat3, ...) - >::type; - -#define GLM_IMPLEMENT_SCAL_MULT(Vec) \ - template \ - return_type_scalar_multiplication \ - operator*(T const& s, Vec rh){ \ - return rh *= static_cast(s); \ - } \ - \ - template \ - return_type_scalar_multiplication \ - operator*(Vec lh, T const& s){ \ - return lh *= static_cast(s); \ - } \ - \ - template \ - return_type_scalar_multiplication \ - operator/(Vec lh, T const& s){ \ - return lh *= 1.0f / static_cast(s); \ - } - -GLM_IMPLEMENT_SCAL_MULT(vec2) -GLM_IMPLEMENT_SCAL_MULT(vec3) -GLM_IMPLEMENT_SCAL_MULT(vec4) - -GLM_IMPLEMENT_SCAL_MULT(mat2) -GLM_IMPLEMENT_SCAL_MULT(mat2x3) -GLM_IMPLEMENT_SCAL_MULT(mat2x4) -GLM_IMPLEMENT_SCAL_MULT(mat3x2) -GLM_IMPLEMENT_SCAL_MULT(mat3) -GLM_IMPLEMENT_SCAL_MULT(mat3x4) -GLM_IMPLEMENT_SCAL_MULT(mat4x2) -GLM_IMPLEMENT_SCAL_MULT(mat4x3) -GLM_IMPLEMENT_SCAL_MULT(mat4) - -#undef GLM_IMPLEMENT_SCAL_MULT -} // namespace glm diff --git a/src/qged/display/glm/glm/gtx/scalar_relational.hpp b/src/qged/display/glm/glm/gtx/scalar_relational.hpp deleted file mode 100644 index 9fca6bb5e1b..00000000000 --- a/src/qged/display/glm/glm/gtx/scalar_relational.hpp +++ /dev/null @@ -1,67 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_scalar_relational -/// @file glm/gtx/scalar_relational.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_scalar_relational GLM_GTX_scalar_relational -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Extend a position from a source to a position at a defined length. - -#pragma once - -// Dependency: -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_extend is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_extend extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_scalar_relational - /// @{ - - - - /// @} -}//namespace glm - -#include "scalar_relational.inl" diff --git a/src/qged/display/glm/glm/gtx/scalar_relational.inl b/src/qged/display/glm/glm/gtx/scalar_relational.inl deleted file mode 100644 index c2a121cff97..00000000000 --- a/src/qged/display/glm/glm/gtx/scalar_relational.inl +++ /dev/null @@ -1,88 +0,0 @@ -/// @ref gtx_scalar_relational - -namespace glm -{ - template - GLM_FUNC_QUALIFIER bool lessThan - ( - T const& x, - T const& y - ) - { - return x < y; - } - - template - GLM_FUNC_QUALIFIER bool lessThanEqual - ( - T const& x, - T const& y - ) - { - return x <= y; - } - - template - GLM_FUNC_QUALIFIER bool greaterThan - ( - T const& x, - T const& y - ) - { - return x > y; - } - - template - GLM_FUNC_QUALIFIER bool greaterThanEqual - ( - T const& x, - T const& y - ) - { - return x >= y; - } - - template - GLM_FUNC_QUALIFIER bool equal - ( - T const& x, - T const& y - ) - { - return detail::compute_equal::is_iec559>::call(x, y); - } - - template - GLM_FUNC_QUALIFIER bool notEqual - ( - T const& x, - T const& y - ) - { - return !detail::compute_equal::is_iec559>::call(x, y); - } - - GLM_FUNC_QUALIFIER bool any - ( - bool const& x - ) - { - return x; - } - - GLM_FUNC_QUALIFIER bool all - ( - bool const& x - ) - { - return x; - } - - GLM_FUNC_QUALIFIER bool not_ - ( - bool const& x - ) - { - return !x; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/spline.hpp b/src/qged/display/glm/glm/gtx/spline.hpp deleted file mode 100644 index 258cf775074..00000000000 --- a/src/qged/display/glm/glm/gtx/spline.hpp +++ /dev/null @@ -1,96 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_spline -/// @file glm/gtx/spline.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_spline GLM_GTX_spline -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Spline functions - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/optimum_pow.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_spline is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_spline extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_spline - /// @{ - - /// Return a point from a catmull rom curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType catmullRom( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s); - - /// Return a point from a hermite curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType hermite( - genType const& v1, - genType const& t1, - genType const& v2, - genType const& t2, - typename genType::value_type const& s); - - /// Return a point from a cubic curve. - /// @see gtx_spline extension. - template - GLM_FUNC_DECL genType cubic( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s); - - /// @} -}//namespace glm - -#include "spline.inl" diff --git a/src/qged/display/glm/glm/gtx/spline.inl b/src/qged/display/glm/glm/gtx/spline.inl deleted file mode 100644 index c3fd0565629..00000000000 --- a/src/qged/display/glm/glm/gtx/spline.inl +++ /dev/null @@ -1,60 +0,0 @@ -/// @ref gtx_spline - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType catmullRom - ( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s - ) - { - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); - - typename genType::value_type f1 = -s3 + typename genType::value_type(2) * s2 - s; - typename genType::value_type f2 = typename genType::value_type(3) * s3 - typename genType::value_type(5) * s2 + typename genType::value_type(2); - typename genType::value_type f3 = typename genType::value_type(-3) * s3 + typename genType::value_type(4) * s2 + s; - typename genType::value_type f4 = s3 - s2; - - return (f1 * v1 + f2 * v2 + f3 * v3 + f4 * v4) / typename genType::value_type(2); - - } - - template - GLM_FUNC_QUALIFIER genType hermite - ( - genType const& v1, - genType const& t1, - genType const& v2, - genType const& t2, - typename genType::value_type const& s - ) - { - typename genType::value_type s2 = pow2(s); - typename genType::value_type s3 = pow3(s); - - typename genType::value_type f1 = typename genType::value_type(2) * s3 - typename genType::value_type(3) * s2 + typename genType::value_type(1); - typename genType::value_type f2 = typename genType::value_type(-2) * s3 + typename genType::value_type(3) * s2; - typename genType::value_type f3 = s3 - typename genType::value_type(2) * s2 + s; - typename genType::value_type f4 = s3 - s2; - - return f1 * v1 + f2 * v2 + f3 * t1 + f4 * t2; - } - - template - GLM_FUNC_QUALIFIER genType cubic - ( - genType const& v1, - genType const& v2, - genType const& v3, - genType const& v4, - typename genType::value_type const& s - ) - { - return ((v1 * s + v2) * s + v3) * s + v4; - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/std_based_type.hpp b/src/qged/display/glm/glm/gtx/std_based_type.hpp deleted file mode 100644 index c0edf861e49..00000000000 --- a/src/qged/display/glm/glm/gtx/std_based_type.hpp +++ /dev/null @@ -1,99 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_std_based_type -/// @file glm/gtx/std_based_type.hpp -/// -/// @see core (dependence) -/// @see gtx_extented_min_max (dependence) -/// -/// @defgroup gtx_std_based_type GLM_GTX_std_based_type -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Adds vector types based on STL value types. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_std_based_type is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_std_based_type extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_std_based_type - /// @{ - - /// Vector type based of one std::size_t component. - /// @see GLM_GTX_std_based_type - typedef vec<1, std::size_t, defaultp> size1; - - /// Vector type based of two std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<2, std::size_t, defaultp> size2; - - /// Vector type based of three std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<3, std::size_t, defaultp> size3; - - /// Vector type based of four std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<4, std::size_t, defaultp> size4; - - /// Vector type based of one std::size_t component. - /// @see GLM_GTX_std_based_type - typedef vec<1, std::size_t, defaultp> size1_t; - - /// Vector type based of two std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<2, std::size_t, defaultp> size2_t; - - /// Vector type based of three std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<3, std::size_t, defaultp> size3_t; - - /// Vector type based of four std::size_t components. - /// @see GLM_GTX_std_based_type - typedef vec<4, std::size_t, defaultp> size4_t; - - /// @} -}//namespace glm - -#include "std_based_type.inl" diff --git a/src/qged/display/glm/glm/gtx/std_based_type.inl b/src/qged/display/glm/glm/gtx/std_based_type.inl deleted file mode 100644 index 9c34bdb6e0f..00000000000 --- a/src/qged/display/glm/glm/gtx/std_based_type.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_std_based_type - -namespace glm -{ - -} diff --git a/src/qged/display/glm/glm/gtx/string_cast.hpp b/src/qged/display/glm/glm/gtx/string_cast.hpp deleted file mode 100644 index a578e4ca514..00000000000 --- a/src/qged/display/glm/glm/gtx/string_cast.hpp +++ /dev/null @@ -1,83 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_string_cast -/// @file glm/gtx/string_cast.hpp -/// -/// @see core (dependence) -/// @see gtx_integer (dependence) -/// @see gtx_quaternion (dependence) -/// -/// @defgroup gtx_string_cast GLM_GTX_string_cast -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Setup strings for GLM type values -/// -/// This extension is not supported with CUDA - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/type_precision.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" -#include -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_string_cast is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_string_cast extension included") -# endif -#endif - -#if(GLM_COMPILER & GLM_COMPILER_CUDA) -# error "GLM_GTX_string_cast is not supported on CUDA compiler" -#endif - -namespace glm -{ - /// @addtogroup gtx_string_cast - /// @{ - - /// Create a string from a GLM vector or matrix typed variable. - /// @see gtx_string_cast extension. - template - GLM_FUNC_DECL std::string to_string(genType const& x); - - /// @} -}//namespace glm - -#include "string_cast.inl" diff --git a/src/qged/display/glm/glm/gtx/string_cast.inl b/src/qged/display/glm/glm/gtx/string_cast.inl deleted file mode 100644 index f67751d41c2..00000000000 --- a/src/qged/display/glm/glm/gtx/string_cast.inl +++ /dev/null @@ -1,492 +0,0 @@ -/// @ref gtx_string_cast - -#include -#include - -namespace glm{ -namespace detail -{ - template - struct cast - { - typedef T value_type; - }; - - template <> - struct cast - { - typedef double value_type; - }; - - GLM_FUNC_QUALIFIER std::string format(const char* msg, ...) - { - std::size_t const STRING_BUFFER(4096); - char text[STRING_BUFFER]; - va_list list; - - if(msg == GLM_NULLPTR) - return std::string(); - - va_start(list, msg); -# if (GLM_COMPILER & GLM_COMPILER_VC) - vsprintf_s(text, STRING_BUFFER, msg, list); -# else// - std::vsprintf(text, msg, list); -# endif// - va_end(list); - - return std::string(text); - } - - static const char* LabelTrue = "true"; - static const char* LabelFalse = "false"; - - template - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%d";} - }; - - template - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%f";} - }; - -# if GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - template<> - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} - }; - - template<> - struct literal - { - GLM_FUNC_QUALIFIER static char const * value() {return "%lld";} - }; -# endif//GLM_MODEL == GLM_MODEL_32 && GLM_COMPILER && GLM_COMPILER_VC - - template - struct prefix{}; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "d";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "b";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u8";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i8";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u16";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i16";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "u64";} - }; - - template<> - struct prefix - { - GLM_FUNC_QUALIFIER static char const * value() {return "i64";} - }; - - template - struct compute_to_string - {}; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<1, bool, Q> const& x) - { - return detail::format("bvec1(%s)", - x[0] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<2, bool, Q> const& x) - { - return detail::format("bvec2(%s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<3, bool, Q> const& x) - { - return detail::format("bvec3(%s, %s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse, - x[2] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<4, bool, Q> const& x) - { - return detail::format("bvec4(%s, %s, %s, %s)", - x[0] ? detail::LabelTrue : detail::LabelFalse, - x[1] ? detail::LabelTrue : detail::LabelFalse, - x[2] ? detail::LabelTrue : detail::LabelFalse, - x[3] ? detail::LabelTrue : detail::LabelFalse); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<1, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec1(%s)", - PrefixStr, - LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec2(%s, %s)", - PrefixStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec3(%s, %s, %s)", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1]), - static_cast::value_type>(x[2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(vec<4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%svec4(%s, %s, %s, %s)", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0]), - static_cast::value_type>(x[1]), - static_cast::value_type>(x[2]), - static_cast::value_type>(x[3])); - } - }; - - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x2((%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x3((%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<2, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat2x4((%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x2((%s, %s), (%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<3, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat3x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 2, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x2((%s, %s), (%s, %s), (%s, %s), (%s, %s))", - PrefixStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr, - LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 3, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x3((%s, %s, %s), (%s, %s, %s), (%s, %s, %s), (%s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2])); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(mat<4, 4, T, Q> const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%smat4x4((%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s), (%s, %s, %s, %s))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x[0][0]), static_cast::value_type>(x[0][1]), static_cast::value_type>(x[0][2]), static_cast::value_type>(x[0][3]), - static_cast::value_type>(x[1][0]), static_cast::value_type>(x[1][1]), static_cast::value_type>(x[1][2]), static_cast::value_type>(x[1][3]), - static_cast::value_type>(x[2][0]), static_cast::value_type>(x[2][1]), static_cast::value_type>(x[2][2]), static_cast::value_type>(x[2][3]), - static_cast::value_type>(x[3][0]), static_cast::value_type>(x[3][1]), static_cast::value_type>(x[3][2]), static_cast::value_type>(x[3][3])); - } - }; - - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(qua const& q) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%squat(%s, {%s, %s, %s})", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(q.w), - static_cast::value_type>(q.x), - static_cast::value_type>(q.y), - static_cast::value_type>(q.z)); - } - }; - - template - struct compute_to_string > - { - GLM_FUNC_QUALIFIER static std::string call(tdualquat const& x) - { - char const * PrefixStr = prefix::value(); - char const * LiteralStr = literal::is_iec559>::value(); - std::string FormatStr(detail::format("%sdualquat((%s, {%s, %s, %s}), (%s, {%s, %s, %s}))", - PrefixStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr, - LiteralStr, LiteralStr, LiteralStr, LiteralStr)); - - return detail::format(FormatStr.c_str(), - static_cast::value_type>(x.real.w), - static_cast::value_type>(x.real.x), - static_cast::value_type>(x.real.y), - static_cast::value_type>(x.real.z), - static_cast::value_type>(x.dual.w), - static_cast::value_type>(x.dual.x), - static_cast::value_type>(x.dual.y), - static_cast::value_type>(x.dual.z)); - } - }; - -}//namespace detail - -template -GLM_FUNC_QUALIFIER std::string to_string(matType const& x) -{ - return detail::compute_to_string::call(x); -} - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/texture.hpp b/src/qged/display/glm/glm/gtx/texture.hpp deleted file mode 100644 index 5aac0311606..00000000000 --- a/src/qged/display/glm/glm/gtx/texture.hpp +++ /dev/null @@ -1,77 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_texture -/// @file glm/gtx/texture.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_texture GLM_GTX_texture -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Wrapping mode of texture coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/integer.hpp" -#include "../gtx/component_wise.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_texture is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_texture extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_texture - /// @{ - - /// Compute the number of mipmaps levels necessary to create a mipmap complete texture - /// - /// @param Extent Extent of the texture base level mipmap - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - template - T levels(vec const& Extent); - - /// @} -}// namespace glm - -#include "texture.inl" - diff --git a/src/qged/display/glm/glm/gtx/texture.inl b/src/qged/display/glm/glm/gtx/texture.inl deleted file mode 100644 index 593c826141b..00000000000 --- a/src/qged/display/glm/glm/gtx/texture.inl +++ /dev/null @@ -1,17 +0,0 @@ -/// @ref gtx_texture - -namespace glm -{ - template - inline T levels(vec const& Extent) - { - return glm::log2(compMax(Extent)) + static_cast(1); - } - - template - inline T levels(T Extent) - { - return vec<1, T, defaultp>(Extent).x; - } -}//namespace glm - diff --git a/src/qged/display/glm/glm/gtx/transform.hpp b/src/qged/display/glm/glm/gtx/transform.hpp deleted file mode 100644 index f5652e1e247..00000000000 --- a/src/qged/display/glm/glm/gtx/transform.hpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_transform -/// @file glm/gtx/transform.hpp -/// -/// @see core (dependence) -/// @see gtc_matrix_transform (dependence) -/// @see gtx_transform -/// @see gtx_transform2 -/// -/// @defgroup gtx_transform GLM_GTX_transform -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add transformation matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/matrix_transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_transform is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_transform extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_transform - /// @{ - - /// Transforms a matrix with a translation 4 * 4 matrix created from 3 scalars. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> translate( - vec<3, T, Q> const& v); - - /// Builds a rotation 4 * 4 matrix created from an axis of 3 scalars and an angle expressed in radians. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> rotate( - T angle, - vec<3, T, Q> const& v); - - /// Transforms a matrix with a scale 4 * 4 matrix created from a vector of 3 components. - /// @see gtc_matrix_transform - /// @see gtx_transform - template - GLM_FUNC_DECL mat<4, 4, T, Q> scale( - vec<3, T, Q> const& v); - - /// @} -}// namespace glm - -#include "transform.inl" diff --git a/src/qged/display/glm/glm/gtx/transform.inl b/src/qged/display/glm/glm/gtx/transform.inl deleted file mode 100644 index 48ee6801b65..00000000000 --- a/src/qged/display/glm/glm/gtx/transform.inl +++ /dev/null @@ -1,23 +0,0 @@ -/// @ref gtx_transform - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> translate(vec<3, T, Q> const& v) - { - return translate(mat<4, 4, T, Q>(static_cast(1)), v); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> rotate(T angle, vec<3, T, Q> const& v) - { - return rotate(mat<4, 4, T, Q>(static_cast(1)), angle, v); - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scale(vec<3, T, Q> const& v) - { - return scale(mat<4, 4, T, Q>(static_cast(1)), v); - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/transform2.hpp b/src/qged/display/glm/glm/gtx/transform2.hpp deleted file mode 100644 index c4c8d919552..00000000000 --- a/src/qged/display/glm/glm/gtx/transform2.hpp +++ /dev/null @@ -1,120 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_transform2 -/// @file glm/gtx/transform2.hpp -/// -/// @see core (dependence) -/// @see gtx_transform (dependence) -/// -/// @defgroup gtx_transform2 GLM_GTX_transform2 -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Add extra transformation matrices - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtx/transform.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_transform2 is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_transform2 extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_transform2 - /// @{ - - //! Transforms a matrix with a shearing on X axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T y); - - //! Transforms a matrix with a shearing on Y axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T x); - - //! Transforms a matrix with a shearing on X axis - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T y, T z); - - //! Transforms a matrix with a shearing on Y axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T x, T z); - - //! Transforms a matrix with a shearing on Z axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T x, T y); - - //template GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shear(const mat<4, 4, T, Q> & m, shearPlane, planePoint, angle) - // Identity + tan(angle) * cross(Normal, OnPlaneVector) 0 - // - dot(PointOnPlane, normal) * OnPlaneVector 1 - - // Reflect functions seem to don't work - //template mat<3, 3, T, Q> reflect2D(const mat<3, 3, T, Q> & m, const vec<3, T, Q>& normal){return reflect2DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) - //template mat<4, 4, T, Q> reflect3D(const mat<4, 4, T, Q> & m, const vec<3, T, Q>& normal){return reflect3DGTX(m, normal);} //!< \brief Build a reflection matrix (from GLM_GTX_transform2 extension) - - //! Build planar projection matrix along normal axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<3, 3, T, Q> proj2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal); - - //! Build planar projection matrix along normal axis. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> proj3D(mat<4, 4, T, Q> const & m, vec<3, T, Q> const& normal); - - //! Build a scale bias matrix. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(T scale, T bias); - - //! Build a scale bias matrix. - //! From GLM_GTX_transform2 extension. - template - GLM_FUNC_DECL mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias); - - /// @} -}// namespace glm - -#include "transform2.inl" diff --git a/src/qged/display/glm/glm/gtx/transform2.inl b/src/qged/display/glm/glm/gtx/transform2.inl deleted file mode 100644 index 2b53198b330..00000000000 --- a/src/qged/display/glm/glm/gtx/transform2.inl +++ /dev/null @@ -1,125 +0,0 @@ -/// @ref gtx_transform2 - -namespace glm -{ - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearX2D(mat<3, 3, T, Q> const& m, T s) - { - mat<3, 3, T, Q> r(1); - r[1][0] = s; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> shearY2D(mat<3, 3, T, Q> const& m, T s) - { - mat<3, 3, T, Q> r(1); - r[0][1] = s; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearX3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[0][1] = s; - r[0][2] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearY3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[1][0] = s; - r[1][2] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> shearZ3D(mat<4, 4, T, Q> const& m, T s, T t) - { - mat<4, 4, T, Q> r(1); - r[2][0] = s; - r[2][1] = t; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> reflect2D(mat<3, 3, T, Q> const& m, vec<3, T, Q> const& normal) - { - mat<3, 3, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; - r[0][1] = -static_cast(2) * normal.x * normal.y; - r[1][0] = -static_cast(2) * normal.x * normal.y; - r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> reflect3D(mat<4, 4, T, Q> const& m, vec<3, T, Q> const& normal) - { - mat<4, 4, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - static_cast(2) * normal.x * normal.x; - r[0][1] = -static_cast(2) * normal.x * normal.y; - r[0][2] = -static_cast(2) * normal.x * normal.z; - - r[1][0] = -static_cast(2) * normal.x * normal.y; - r[1][1] = static_cast(1) - static_cast(2) * normal.y * normal.y; - r[1][2] = -static_cast(2) * normal.y * normal.z; - - r[2][0] = -static_cast(2) * normal.x * normal.z; - r[2][1] = -static_cast(2) * normal.y * normal.z; - r[2][2] = static_cast(1) - static_cast(2) * normal.z * normal.z; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<3, 3, T, Q> proj2D( - const mat<3, 3, T, Q>& m, - const vec<3, T, Q>& normal) - { - mat<3, 3, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - normal.x * normal.x; - r[0][1] = - normal.x * normal.y; - r[1][0] = - normal.x * normal.y; - r[1][1] = static_cast(1) - normal.y * normal.y; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> proj3D( - const mat<4, 4, T, Q>& m, - const vec<3, T, Q>& normal) - { - mat<4, 4, T, Q> r(static_cast(1)); - r[0][0] = static_cast(1) - normal.x * normal.x; - r[0][1] = - normal.x * normal.y; - r[0][2] = - normal.x * normal.z; - r[1][0] = - normal.x * normal.y; - r[1][1] = static_cast(1) - normal.y * normal.y; - r[1][2] = - normal.y * normal.z; - r[2][0] = - normal.x * normal.z; - r[2][1] = - normal.y * normal.z; - r[2][2] = static_cast(1) - normal.z * normal.z; - return m * r; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(T scale, T bias) - { - mat<4, 4, T, Q> result; - result[3] = vec<4, T, Q>(vec<3, T, Q>(bias), static_cast(1)); - result[0][0] = scale; - result[1][1] = scale; - result[2][2] = scale; - return result; - } - - template - GLM_FUNC_QUALIFIER mat<4, 4, T, Q> scaleBias(mat<4, 4, T, Q> const& m, T scale, T bias) - { - return m * scaleBias(scale, bias); - } -}//namespace glm - diff --git a/src/qged/display/glm/glm/gtx/type_aligned.hpp b/src/qged/display/glm/glm/gtx/type_aligned.hpp deleted file mode 100644 index c39df55efbe..00000000000 --- a/src/qged/display/glm/glm/gtx/type_aligned.hpp +++ /dev/null @@ -1,1013 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_type_aligned -/// @file glm/gtx/type_aligned.hpp -/// -/// @see core (dependence) -/// @see gtc_quaternion (dependence) -/// -/// @defgroup gtx_type_aligned GLM_GTX_type_aligned -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines aligned types. - -#pragma once - -// Dependency: -#include "../gtc/type_precision.hpp" -#include "../gtc/quaternion.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_type_aligned is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_type_aligned extension included") -# endif -#endif - -namespace glm -{ - /////////////////////////// - // Signed int vector types - - /// @addtogroup gtx_type_aligned - /// @{ - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int8, aligned_lowp_int8, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int16, aligned_lowp_int16, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int32, aligned_lowp_int32, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int64, aligned_lowp_int64, 8); - - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int8_t, aligned_lowp_int8_t, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int16_t, aligned_lowp_int16_t, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int32_t, aligned_lowp_int32_t, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_int64_t, aligned_lowp_int64_t, 8); - - - /// Low qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i8, aligned_lowp_i8, 1); - - /// Low qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i16, aligned_lowp_i16, 2); - - /// Low qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i32, aligned_lowp_i32, 4); - - /// Low qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_i64, aligned_lowp_i64, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int8, aligned_mediump_int8, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int16, aligned_mediump_int16, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int32, aligned_mediump_int32, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int64, aligned_mediump_int64, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int8_t, aligned_mediump_int8_t, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int16_t, aligned_mediump_int16_t, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int32_t, aligned_mediump_int32_t, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_int64_t, aligned_mediump_int64_t, 8); - - - /// Medium qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i8, aligned_mediump_i8, 1); - - /// Medium qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i16, aligned_mediump_i16, 2); - - /// Medium qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i32, aligned_mediump_i32, 4); - - /// Medium qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_i64, aligned_mediump_i64, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int8, aligned_highp_int8, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int16, aligned_highp_int16, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int32, aligned_highp_int32, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int64, aligned_highp_int64, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int8_t, aligned_highp_int8_t, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int16_t, aligned_highp_int16_t, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int32_t, aligned_highp_int32_t, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_int64_t, aligned_highp_int64_t, 8); - - - /// High qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i8, aligned_highp_i8, 1); - - /// High qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i16, aligned_highp_i16, 2); - - /// High qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i32, aligned_highp_i32, 4); - - /// High qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_i64, aligned_highp_i64, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int8, aligned_int8, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int16, aligned_int16, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int32, aligned_int32, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int64, aligned_int64, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int8_t, aligned_int8_t, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int16_t, aligned_int16_t, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int32_t, aligned_int32_t, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(int64_t, aligned_int64_t, 8); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8, aligned_i8, 1); - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16, aligned_i16, 2); - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32, aligned_i32, 4); - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64, aligned_i64, 8); - - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec1, aligned_ivec1, 4); - - /// Default qualifier 32 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec2, aligned_ivec2, 8); - - /// Default qualifier 32 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec3, aligned_ivec3, 16); - - /// Default qualifier 32 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(ivec4, aligned_ivec4, 16); - - - /// Default qualifier 8 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec1, aligned_i8vec1, 1); - - /// Default qualifier 8 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec2, aligned_i8vec2, 2); - - /// Default qualifier 8 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec3, aligned_i8vec3, 4); - - /// Default qualifier 8 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i8vec4, aligned_i8vec4, 4); - - - /// Default qualifier 16 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec1, aligned_i16vec1, 2); - - /// Default qualifier 16 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec2, aligned_i16vec2, 4); - - /// Default qualifier 16 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec3, aligned_i16vec3, 8); - - /// Default qualifier 16 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i16vec4, aligned_i16vec4, 8); - - - /// Default qualifier 32 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec1, aligned_i32vec1, 4); - - /// Default qualifier 32 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec2, aligned_i32vec2, 8); - - /// Default qualifier 32 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec3, aligned_i32vec3, 16); - - /// Default qualifier 32 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i32vec4, aligned_i32vec4, 16); - - - /// Default qualifier 64 bit signed integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec1, aligned_i64vec1, 8); - - /// Default qualifier 64 bit signed integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec2, aligned_i64vec2, 16); - - /// Default qualifier 64 bit signed integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec3, aligned_i64vec3, 32); - - /// Default qualifier 64 bit signed integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(i64vec4, aligned_i64vec4, 32); - - - ///////////////////////////// - // Unsigned int vector types - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint8, aligned_lowp_uint8, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint16, aligned_lowp_uint16, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint32, aligned_lowp_uint32, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint64, aligned_lowp_uint64, 8); - - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint8_t, aligned_lowp_uint8_t, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint16_t, aligned_lowp_uint16_t, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint32_t, aligned_lowp_uint32_t, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_uint64_t, aligned_lowp_uint64_t, 8); - - - /// Low qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u8, aligned_lowp_u8, 1); - - /// Low qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u16, aligned_lowp_u16, 2); - - /// Low qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u32, aligned_lowp_u32, 4); - - /// Low qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(lowp_u64, aligned_lowp_u64, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint8, aligned_mediump_uint8, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint16, aligned_mediump_uint16, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint32, aligned_mediump_uint32, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint64, aligned_mediump_uint64, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint8_t, aligned_mediump_uint8_t, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint16_t, aligned_mediump_uint16_t, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint32_t, aligned_mediump_uint32_t, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_uint64_t, aligned_mediump_uint64_t, 8); - - - /// Medium qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u8, aligned_mediump_u8, 1); - - /// Medium qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u16, aligned_mediump_u16, 2); - - /// Medium qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u32, aligned_mediump_u32, 4); - - /// Medium qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mediump_u64, aligned_mediump_u64, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint8, aligned_highp_uint8, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint16, aligned_highp_uint16, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint32, aligned_highp_uint32, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint64, aligned_highp_uint64, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint8_t, aligned_highp_uint8_t, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint16_t, aligned_highp_uint16_t, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint32_t, aligned_highp_uint32_t, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_uint64_t, aligned_highp_uint64_t, 8); - - - /// High qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u8, aligned_highp_u8, 1); - - /// High qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u16, aligned_highp_u16, 2); - - /// High qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u32, aligned_highp_u32, 4); - - /// High qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(highp_u64, aligned_highp_u64, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint8, aligned_uint8, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint16, aligned_uint16, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint32, aligned_uint32, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint64, aligned_uint64, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint8_t, aligned_uint8_t, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint16_t, aligned_uint16_t, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint32_t, aligned_uint32_t, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uint64_t, aligned_uint64_t, 8); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8, aligned_u8, 1); - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16, aligned_u16, 2); - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32, aligned_u32, 4); - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64, aligned_u64, 8); - - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec1, aligned_uvec1, 4); - - /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec2, aligned_uvec2, 8); - - /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec3, aligned_uvec3, 16); - - /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(uvec4, aligned_uvec4, 16); - - - /// Default qualifier 8 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec1, aligned_u8vec1, 1); - - /// Default qualifier 8 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec2, aligned_u8vec2, 2); - - /// Default qualifier 8 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec3, aligned_u8vec3, 4); - - /// Default qualifier 8 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u8vec4, aligned_u8vec4, 4); - - - /// Default qualifier 16 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec1, aligned_u16vec1, 2); - - /// Default qualifier 16 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec2, aligned_u16vec2, 4); - - /// Default qualifier 16 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec3, aligned_u16vec3, 8); - - /// Default qualifier 16 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u16vec4, aligned_u16vec4, 8); - - - /// Default qualifier 32 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec1, aligned_u32vec1, 4); - - /// Default qualifier 32 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec2, aligned_u32vec2, 8); - - /// Default qualifier 32 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec3, aligned_u32vec3, 16); - - /// Default qualifier 32 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u32vec4, aligned_u32vec4, 16); - - - /// Default qualifier 64 bit unsigned integer aligned scalar type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec1, aligned_u64vec1, 8); - - /// Default qualifier 64 bit unsigned integer aligned vector of 2 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec2, aligned_u64vec2, 16); - - /// Default qualifier 64 bit unsigned integer aligned vector of 3 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec3, aligned_u64vec3, 32); - - /// Default qualifier 64 bit unsigned integer aligned vector of 4 components type. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(u64vec4, aligned_u64vec4, 32); - - - ////////////////////// - // Float vector types - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32, aligned_float32, 4); - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32_t, aligned_float32_t, 4); - - /// 32 bit single-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float32, aligned_f32, 4); - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64, aligned_float64, 8); - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64_t, aligned_float64_t, 8); - - /// 64 bit double-qualifier floating-point aligned scalar. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(float64, aligned_f64, 8); - -# endif//GLM_FORCE_SINGLE_ONLY - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec1, aligned_vec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec2, aligned_vec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec3, aligned_vec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(vec4, aligned_vec4, 16); - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec1, aligned_fvec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec2, aligned_fvec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec3, aligned_fvec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fvec4, aligned_fvec4, 16); - - - /// Single-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec1, aligned_f32vec1, 4); - - /// Single-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec2, aligned_f32vec2, 8); - - /// Single-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec3, aligned_f32vec3, 16); - - /// Single-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32vec4, aligned_f32vec4, 16); - - - /// Double-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec1, aligned_dvec1, 8); - - /// Double-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec2, aligned_dvec2, 16); - - /// Double-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec3, aligned_dvec3, 32); - - /// Double-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dvec4, aligned_dvec4, 32); - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned vector of 1 component. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec1, aligned_f64vec1, 8); - - /// Double-qualifier floating-point aligned vector of 2 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec2, aligned_f64vec2, 16); - - /// Double-qualifier floating-point aligned vector of 3 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec3, aligned_f64vec3, 32); - - /// Double-qualifier floating-point aligned vector of 4 components. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64vec4, aligned_f64vec4, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - ////////////////////// - // Float matrix types - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1 mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat2, aligned_mat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat3, aligned_mat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat4, aligned_mat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat2x2, aligned_mat2x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat3x3, aligned_mat3x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(mat4x4, aligned_mat4x4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 fmat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f32 fmat1x1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x2, aligned_fmat2x2, 16); - - /// Single-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x3, aligned_fmat2x3, 16); - - /// Single-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat2x4, aligned_fmat2x4, 16); - - /// Single-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x2, aligned_fmat3x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x3, aligned_fmat3x3, 16); - - /// Single-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat3x4, aligned_fmat3x4, 16); - - /// Single-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x2, aligned_fmat4x2, 16); - - /// Single-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x3, aligned_fmat4x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(fmat4x4, aligned_fmat4x4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 f32mat1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4, 16); - - - /// Single-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f32 f32mat1x1; - - /// Single-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x2, aligned_f32mat2x2, 16); - - /// Single-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x3, aligned_f32mat2x3, 16); - - /// Single-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat2x4, aligned_f32mat2x4, 16); - - /// Single-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x2, aligned_f32mat3x2, 16); - - /// Single-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x3, aligned_f32mat3x3, 16); - - /// Single-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat3x4, aligned_f32mat3x4, 16); - - /// Single-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x2, aligned_f32mat4x2, 16); - - /// Single-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x3, aligned_f32mat4x3, 16); - - /// Single-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32mat4x4, aligned_f32mat4x4, 16); - - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef detail::tmat1x1 f64mat1; - - /// Double-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2, 32); - - /// Double-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3, 32); - - /// Double-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4, 32); - - - /// Double-qualifier floating-point aligned 1x1 matrix. - /// @see gtx_type_aligned - //typedef f64 f64mat1x1; - - /// Double-qualifier floating-point aligned 2x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x2, aligned_f64mat2x2, 32); - - /// Double-qualifier floating-point aligned 2x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x3, aligned_f64mat2x3, 32); - - /// Double-qualifier floating-point aligned 2x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat2x4, aligned_f64mat2x4, 32); - - /// Double-qualifier floating-point aligned 3x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x2, aligned_f64mat3x2, 32); - - /// Double-qualifier floating-point aligned 3x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x3, aligned_f64mat3x3, 32); - - /// Double-qualifier floating-point aligned 3x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat3x4, aligned_f64mat3x4, 32); - - /// Double-qualifier floating-point aligned 4x2 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x2, aligned_f64mat4x2, 32); - - /// Double-qualifier floating-point aligned 4x3 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x3, aligned_f64mat4x3, 32); - - /// Double-qualifier floating-point aligned 4x4 matrix. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64mat4x4, aligned_f64mat4x4, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - - ////////////////////////// - // Quaternion types - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(quat, aligned_quat, 16); - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(quat, aligned_fquat, 16); - - /// Double-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(dquat, aligned_dquat, 32); - - /// Single-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f32quat, aligned_f32quat, 16); - -# ifndef GLM_FORCE_SINGLE_ONLY - - /// Double-qualifier floating-point aligned quaternion. - /// @see gtx_type_aligned - GLM_ALIGNED_TYPEDEF(f64quat, aligned_f64quat, 32); - -# endif//GLM_FORCE_SINGLE_ONLY - - /// @} -}//namespace glm - -#include "type_aligned.inl" diff --git a/src/qged/display/glm/glm/gtx/type_aligned.inl b/src/qged/display/glm/glm/gtx/type_aligned.inl deleted file mode 100644 index 54c1b818b64..00000000000 --- a/src/qged/display/glm/glm/gtx/type_aligned.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtc_type_aligned - -namespace glm -{ - -} diff --git a/src/qged/display/glm/glm/gtx/type_trait.hpp b/src/qged/display/glm/glm/gtx/type_trait.hpp deleted file mode 100644 index 69bf6b43b1e..00000000000 --- a/src/qged/display/glm/glm/gtx/type_trait.hpp +++ /dev/null @@ -1,116 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_type_trait -/// @file glm/gtx/type_trait.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_type_trait GLM_GTX_type_trait -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Defines traits for each type. - -#pragma once - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_type_trait is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_type_trait extension included") -# endif -#endif - -// Dependency: -#include "../detail/qualifier.hpp" -#include "../gtc/quaternion.hpp" -#include "../gtx/dual_quaternion.hpp" - -namespace glm -{ - /// @addtogroup gtx_type_trait - /// @{ - - template - struct type - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = false; - static length_t const components = 0; - static length_t const cols = 0; - static length_t const rows = 0; - }; - - template - struct type > - { - static bool const is_vec = true; - static bool const is_mat = false; - static bool const is_quat = false; - static length_t const components = L; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = true; - static bool const is_quat = false; - static length_t const components = C; - static length_t const cols = C; - static length_t const rows = R; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = true; - static length_t const components = 4; - }; - - template - struct type > - { - static bool const is_vec = false; - static bool const is_mat = false; - static bool const is_quat = true; - static length_t const components = 8; - }; - - /// @} -}//namespace glm - -#include "type_trait.inl" diff --git a/src/qged/display/glm/glm/gtx/type_trait.inl b/src/qged/display/glm/glm/gtx/type_trait.inl deleted file mode 100644 index 045de959cc2..00000000000 --- a/src/qged/display/glm/glm/gtx/type_trait.inl +++ /dev/null @@ -1,61 +0,0 @@ -/// @ref gtx_type_trait - -namespace glm -{ - template - bool const type::is_vec; - template - bool const type::is_mat; - template - bool const type::is_quat; - template - length_t const type::components; - template - length_t const type::cols; - template - length_t const type::rows; - - // vec - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - - // mat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - template - length_t const type >::cols; - template - length_t const type >::rows; - - // tquat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; - - // tdualquat - template - bool const type >::is_vec; - template - bool const type >::is_mat; - template - bool const type >::is_quat; - template - length_t const type >::components; -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/vec_swizzle.hpp b/src/qged/display/glm/glm/gtx/vec_swizzle.hpp deleted file mode 100644 index a96a58a3421..00000000000 --- a/src/qged/display/glm/glm/gtx/vec_swizzle.hpp +++ /dev/null @@ -1,2813 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_vec_swizzle -/// @file glm/gtx/vec_swizzle.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_vec_swizzle GLM_GTX_vec_swizzle -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Functions to perform swizzle operation. - -#pragma once - -#include "../glm.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vec_swizzle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vec_swizzle extension included") -# endif -#endif - -namespace glm { - // xx - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<1, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> xx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.x); - } - - // xy - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> xy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.y); - } - - // xz - template - GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> xz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.z); - } - - // xw - template - GLM_INLINE glm::vec<2, T, Q> xw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.x, v.w); - } - - // yx - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> yx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.x); - } - - // yy - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<2, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> yy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.y); - } - - // yz - template - GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> yz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.z); - } - - // yw - template - GLM_INLINE glm::vec<2, T, Q> yw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.y, v.w); - } - - // zx - template - GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.x); - } - - template - GLM_INLINE glm::vec<2, T, Q> zx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.x); - } - - // zy - template - GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.y); - } - - template - GLM_INLINE glm::vec<2, T, Q> zy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.y); - } - - // zz - template - GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<3, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.z); - } - - template - GLM_INLINE glm::vec<2, T, Q> zz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.z); - } - - // zw - template - GLM_INLINE glm::vec<2, T, Q> zw(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.z, v.w); - } - - // wx - template - GLM_INLINE glm::vec<2, T, Q> wx(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.x); - } - - // wy - template - GLM_INLINE glm::vec<2, T, Q> wy(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.y); - } - - // wz - template - GLM_INLINE glm::vec<2, T, Q> wz(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.z); - } - - // ww - template - GLM_INLINE glm::vec<2, T, Q> ww(const glm::vec<4, T, Q> &v) { - return glm::vec<2, T, Q>(v.w, v.w); - } - - // xxx - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<1, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.x); - } - - // xxy - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.y); - } - - // xxz - template - GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.z); - } - - // xxw - template - GLM_INLINE glm::vec<3, T, Q> xxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.x, v.w); - } - - // xyx - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.x); - } - - // xyy - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.y); - } - - // xyz - template - GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.z); - } - - // xyw - template - GLM_INLINE glm::vec<3, T, Q> xyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.y, v.w); - } - - // xzx - template - GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.x); - } - - // xzy - template - GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.y); - } - - // xzz - template - GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> xzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.z); - } - - // xzw - template - GLM_INLINE glm::vec<3, T, Q> xzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.z, v.w); - } - - // xwx - template - GLM_INLINE glm::vec<3, T, Q> xwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.x); - } - - // xwy - template - GLM_INLINE glm::vec<3, T, Q> xwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.y); - } - - // xwz - template - GLM_INLINE glm::vec<3, T, Q> xwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.z); - } - - // xww - template - GLM_INLINE glm::vec<3, T, Q> xww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.x, v.w, v.w); - } - - // yxx - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.x); - } - - // yxy - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.y); - } - - // yxz - template - GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.z); - } - - // yxw - template - GLM_INLINE glm::vec<3, T, Q> yxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.x, v.w); - } - - // yyx - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.x); - } - - // yyy - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<2, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.y); - } - - // yyz - template - GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.z); - } - - // yyw - template - GLM_INLINE glm::vec<3, T, Q> yyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.y, v.w); - } - - // yzx - template - GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.x); - } - - // yzy - template - GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.y); - } - - // yzz - template - GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> yzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.z); - } - - // yzw - template - GLM_INLINE glm::vec<3, T, Q> yzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.z, v.w); - } - - // ywx - template - GLM_INLINE glm::vec<3, T, Q> ywx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.x); - } - - // ywy - template - GLM_INLINE glm::vec<3, T, Q> ywy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.y); - } - - // ywz - template - GLM_INLINE glm::vec<3, T, Q> ywz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.z); - } - - // yww - template - GLM_INLINE glm::vec<3, T, Q> yww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.y, v.w, v.w); - } - - // zxx - template - GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.x); - } - - // zxy - template - GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.y); - } - - // zxz - template - GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.z); - } - - // zxw - template - GLM_INLINE glm::vec<3, T, Q> zxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.x, v.w); - } - - // zyx - template - GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.x); - } - - // zyy - template - GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.y); - } - - // zyz - template - GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.z); - } - - // zyw - template - GLM_INLINE glm::vec<3, T, Q> zyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.y, v.w); - } - - // zzx - template - GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.x); - } - - // zzy - template - GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.y); - } - - // zzz - template - GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<3, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<3, T, Q> zzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.z); - } - - // zzw - template - GLM_INLINE glm::vec<3, T, Q> zzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.z, v.w); - } - - // zwx - template - GLM_INLINE glm::vec<3, T, Q> zwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.x); - } - - // zwy - template - GLM_INLINE glm::vec<3, T, Q> zwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.y); - } - - // zwz - template - GLM_INLINE glm::vec<3, T, Q> zwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.z); - } - - // zww - template - GLM_INLINE glm::vec<3, T, Q> zww(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.z, v.w, v.w); - } - - // wxx - template - GLM_INLINE glm::vec<3, T, Q> wxx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.x); - } - - // wxy - template - GLM_INLINE glm::vec<3, T, Q> wxy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.y); - } - - // wxz - template - GLM_INLINE glm::vec<3, T, Q> wxz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.z); - } - - // wxw - template - GLM_INLINE glm::vec<3, T, Q> wxw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.x, v.w); - } - - // wyx - template - GLM_INLINE glm::vec<3, T, Q> wyx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.x); - } - - // wyy - template - GLM_INLINE glm::vec<3, T, Q> wyy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.y); - } - - // wyz - template - GLM_INLINE glm::vec<3, T, Q> wyz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.z); - } - - // wyw - template - GLM_INLINE glm::vec<3, T, Q> wyw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.y, v.w); - } - - // wzx - template - GLM_INLINE glm::vec<3, T, Q> wzx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.x); - } - - // wzy - template - GLM_INLINE glm::vec<3, T, Q> wzy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.y); - } - - // wzz - template - GLM_INLINE glm::vec<3, T, Q> wzz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.z); - } - - // wzw - template - GLM_INLINE glm::vec<3, T, Q> wzw(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.z, v.w); - } - - // wwx - template - GLM_INLINE glm::vec<3, T, Q> wwx(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.x); - } - - // wwy - template - GLM_INLINE glm::vec<3, T, Q> wwy(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.y); - } - - // wwz - template - GLM_INLINE glm::vec<3, T, Q> wwz(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.z); - } - - // www - template - GLM_INLINE glm::vec<3, T, Q> www(const glm::vec<4, T, Q> &v) { - return glm::vec<3, T, Q>(v.w, v.w, v.w); - } - - // xxxx - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<1, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.x); - } - - // xxxy - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.y); - } - - // xxxz - template - GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.z); - } - - // xxxw - template - GLM_INLINE glm::vec<4, T, Q> xxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.x, v.w); - } - - // xxyx - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.x); - } - - // xxyy - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.y); - } - - // xxyz - template - GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.z); - } - - // xxyw - template - GLM_INLINE glm::vec<4, T, Q> xxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.y, v.w); - } - - // xxzx - template - GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.x); - } - - // xxzy - template - GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.y); - } - - // xxzz - template - GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.z); - } - - // xxzw - template - GLM_INLINE glm::vec<4, T, Q> xxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.z, v.w); - } - - // xxwx - template - GLM_INLINE glm::vec<4, T, Q> xxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.x); - } - - // xxwy - template - GLM_INLINE glm::vec<4, T, Q> xxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.y); - } - - // xxwz - template - GLM_INLINE glm::vec<4, T, Q> xxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.z); - } - - // xxww - template - GLM_INLINE glm::vec<4, T, Q> xxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.x, v.w, v.w); - } - - // xyxx - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.x); - } - - // xyxy - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.y); - } - - // xyxz - template - GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.z); - } - - // xyxw - template - GLM_INLINE glm::vec<4, T, Q> xyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.x, v.w); - } - - // xyyx - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.x); - } - - // xyyy - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.y); - } - - // xyyz - template - GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.z); - } - - // xyyw - template - GLM_INLINE glm::vec<4, T, Q> xyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.y, v.w); - } - - // xyzx - template - GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.x); - } - - // xyzy - template - GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.y); - } - - // xyzz - template - GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.z); - } - - // xyzw - template - GLM_INLINE glm::vec<4, T, Q> xyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.z, v.w); - } - - // xywx - template - GLM_INLINE glm::vec<4, T, Q> xywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.x); - } - - // xywy - template - GLM_INLINE glm::vec<4, T, Q> xywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.y); - } - - // xywz - template - GLM_INLINE glm::vec<4, T, Q> xywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.z); - } - - // xyww - template - GLM_INLINE glm::vec<4, T, Q> xyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.y, v.w, v.w); - } - - // xzxx - template - GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.x); - } - - // xzxy - template - GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.y); - } - - // xzxz - template - GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.z); - } - - // xzxw - template - GLM_INLINE glm::vec<4, T, Q> xzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.x, v.w); - } - - // xzyx - template - GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.x); - } - - // xzyy - template - GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.y); - } - - // xzyz - template - GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.z); - } - - // xzyw - template - GLM_INLINE glm::vec<4, T, Q> xzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.y, v.w); - } - - // xzzx - template - GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.x); - } - - // xzzy - template - GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.y); - } - - // xzzz - template - GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> xzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.z); - } - - // xzzw - template - GLM_INLINE glm::vec<4, T, Q> xzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.z, v.w); - } - - // xzwx - template - GLM_INLINE glm::vec<4, T, Q> xzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.x); - } - - // xzwy - template - GLM_INLINE glm::vec<4, T, Q> xzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.y); - } - - // xzwz - template - GLM_INLINE glm::vec<4, T, Q> xzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.z); - } - - // xzww - template - GLM_INLINE glm::vec<4, T, Q> xzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.z, v.w, v.w); - } - - // xwxx - template - GLM_INLINE glm::vec<4, T, Q> xwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.x); - } - - // xwxy - template - GLM_INLINE glm::vec<4, T, Q> xwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.y); - } - - // xwxz - template - GLM_INLINE glm::vec<4, T, Q> xwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.z); - } - - // xwxw - template - GLM_INLINE glm::vec<4, T, Q> xwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.x, v.w); - } - - // xwyx - template - GLM_INLINE glm::vec<4, T, Q> xwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.x); - } - - // xwyy - template - GLM_INLINE glm::vec<4, T, Q> xwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.y); - } - - // xwyz - template - GLM_INLINE glm::vec<4, T, Q> xwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.z); - } - - // xwyw - template - GLM_INLINE glm::vec<4, T, Q> xwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.y, v.w); - } - - // xwzx - template - GLM_INLINE glm::vec<4, T, Q> xwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.x); - } - - // xwzy - template - GLM_INLINE glm::vec<4, T, Q> xwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.y); - } - - // xwzz - template - GLM_INLINE glm::vec<4, T, Q> xwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.z); - } - - // xwzw - template - GLM_INLINE glm::vec<4, T, Q> xwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.z, v.w); - } - - // xwwx - template - GLM_INLINE glm::vec<4, T, Q> xwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.x); - } - - // xwwy - template - GLM_INLINE glm::vec<4, T, Q> xwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.y); - } - - // xwwz - template - GLM_INLINE glm::vec<4, T, Q> xwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.z); - } - - // xwww - template - GLM_INLINE glm::vec<4, T, Q> xwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.x, v.w, v.w, v.w); - } - - // yxxx - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.x); - } - - // yxxy - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.y); - } - - // yxxz - template - GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.z); - } - - // yxxw - template - GLM_INLINE glm::vec<4, T, Q> yxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.x, v.w); - } - - // yxyx - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.x); - } - - // yxyy - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.y); - } - - // yxyz - template - GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.z); - } - - // yxyw - template - GLM_INLINE glm::vec<4, T, Q> yxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.y, v.w); - } - - // yxzx - template - GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.x); - } - - // yxzy - template - GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.y); - } - - // yxzz - template - GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.z); - } - - // yxzw - template - GLM_INLINE glm::vec<4, T, Q> yxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.z, v.w); - } - - // yxwx - template - GLM_INLINE glm::vec<4, T, Q> yxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.x); - } - - // yxwy - template - GLM_INLINE glm::vec<4, T, Q> yxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.y); - } - - // yxwz - template - GLM_INLINE glm::vec<4, T, Q> yxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.z); - } - - // yxww - template - GLM_INLINE glm::vec<4, T, Q> yxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.x, v.w, v.w); - } - - // yyxx - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.x); - } - - // yyxy - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.y); - } - - // yyxz - template - GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.z); - } - - // yyxw - template - GLM_INLINE glm::vec<4, T, Q> yyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.x, v.w); - } - - // yyyx - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.x); - } - - // yyyy - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<2, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.y); - } - - // yyyz - template - GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.z); - } - - // yyyw - template - GLM_INLINE glm::vec<4, T, Q> yyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.y, v.w); - } - - // yyzx - template - GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.x); - } - - // yyzy - template - GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.y); - } - - // yyzz - template - GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.z); - } - - // yyzw - template - GLM_INLINE glm::vec<4, T, Q> yyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.z, v.w); - } - - // yywx - template - GLM_INLINE glm::vec<4, T, Q> yywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.x); - } - - // yywy - template - GLM_INLINE glm::vec<4, T, Q> yywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.y); - } - - // yywz - template - GLM_INLINE glm::vec<4, T, Q> yywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.z); - } - - // yyww - template - GLM_INLINE glm::vec<4, T, Q> yyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.y, v.w, v.w); - } - - // yzxx - template - GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.x); - } - - // yzxy - template - GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.y); - } - - // yzxz - template - GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.z); - } - - // yzxw - template - GLM_INLINE glm::vec<4, T, Q> yzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.x, v.w); - } - - // yzyx - template - GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.x); - } - - // yzyy - template - GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.y); - } - - // yzyz - template - GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.z); - } - - // yzyw - template - GLM_INLINE glm::vec<4, T, Q> yzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.y, v.w); - } - - // yzzx - template - GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.x); - } - - // yzzy - template - GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.y); - } - - // yzzz - template - GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> yzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.z); - } - - // yzzw - template - GLM_INLINE glm::vec<4, T, Q> yzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.z, v.w); - } - - // yzwx - template - GLM_INLINE glm::vec<4, T, Q> yzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.x); - } - - // yzwy - template - GLM_INLINE glm::vec<4, T, Q> yzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.y); - } - - // yzwz - template - GLM_INLINE glm::vec<4, T, Q> yzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.z); - } - - // yzww - template - GLM_INLINE glm::vec<4, T, Q> yzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.z, v.w, v.w); - } - - // ywxx - template - GLM_INLINE glm::vec<4, T, Q> ywxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.x); - } - - // ywxy - template - GLM_INLINE glm::vec<4, T, Q> ywxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.y); - } - - // ywxz - template - GLM_INLINE glm::vec<4, T, Q> ywxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.z); - } - - // ywxw - template - GLM_INLINE glm::vec<4, T, Q> ywxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.x, v.w); - } - - // ywyx - template - GLM_INLINE glm::vec<4, T, Q> ywyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.x); - } - - // ywyy - template - GLM_INLINE glm::vec<4, T, Q> ywyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.y); - } - - // ywyz - template - GLM_INLINE glm::vec<4, T, Q> ywyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.z); - } - - // ywyw - template - GLM_INLINE glm::vec<4, T, Q> ywyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.y, v.w); - } - - // ywzx - template - GLM_INLINE glm::vec<4, T, Q> ywzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.x); - } - - // ywzy - template - GLM_INLINE glm::vec<4, T, Q> ywzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.y); - } - - // ywzz - template - GLM_INLINE glm::vec<4, T, Q> ywzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.z); - } - - // ywzw - template - GLM_INLINE glm::vec<4, T, Q> ywzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.z, v.w); - } - - // ywwx - template - GLM_INLINE glm::vec<4, T, Q> ywwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.x); - } - - // ywwy - template - GLM_INLINE glm::vec<4, T, Q> ywwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.y); - } - - // ywwz - template - GLM_INLINE glm::vec<4, T, Q> ywwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.z); - } - - // ywww - template - GLM_INLINE glm::vec<4, T, Q> ywww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.y, v.w, v.w, v.w); - } - - // zxxx - template - GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.x); - } - - // zxxy - template - GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.y); - } - - // zxxz - template - GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.z); - } - - // zxxw - template - GLM_INLINE glm::vec<4, T, Q> zxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.x, v.w); - } - - // zxyx - template - GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.x); - } - - // zxyy - template - GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.y); - } - - // zxyz - template - GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.z); - } - - // zxyw - template - GLM_INLINE glm::vec<4, T, Q> zxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.y, v.w); - } - - // zxzx - template - GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.x); - } - - // zxzy - template - GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.y); - } - - // zxzz - template - GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.z); - } - - // zxzw - template - GLM_INLINE glm::vec<4, T, Q> zxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.z, v.w); - } - - // zxwx - template - GLM_INLINE glm::vec<4, T, Q> zxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.x); - } - - // zxwy - template - GLM_INLINE glm::vec<4, T, Q> zxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.y); - } - - // zxwz - template - GLM_INLINE glm::vec<4, T, Q> zxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.z); - } - - // zxww - template - GLM_INLINE glm::vec<4, T, Q> zxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.x, v.w, v.w); - } - - // zyxx - template - GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.x); - } - - // zyxy - template - GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.y); - } - - // zyxz - template - GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.z); - } - - // zyxw - template - GLM_INLINE glm::vec<4, T, Q> zyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.x, v.w); - } - - // zyyx - template - GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.x); - } - - // zyyy - template - GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.y); - } - - // zyyz - template - GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.z); - } - - // zyyw - template - GLM_INLINE glm::vec<4, T, Q> zyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.y, v.w); - } - - // zyzx - template - GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.x); - } - - // zyzy - template - GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.y); - } - - // zyzz - template - GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.z); - } - - // zyzw - template - GLM_INLINE glm::vec<4, T, Q> zyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.z, v.w); - } - - // zywx - template - GLM_INLINE glm::vec<4, T, Q> zywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.x); - } - - // zywy - template - GLM_INLINE glm::vec<4, T, Q> zywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.y); - } - - // zywz - template - GLM_INLINE glm::vec<4, T, Q> zywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.z); - } - - // zyww - template - GLM_INLINE glm::vec<4, T, Q> zyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.y, v.w, v.w); - } - - // zzxx - template - GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.x); - } - - // zzxy - template - GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.y); - } - - // zzxz - template - GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.z); - } - - // zzxw - template - GLM_INLINE glm::vec<4, T, Q> zzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.x, v.w); - } - - // zzyx - template - GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.x); - } - - // zzyy - template - GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.y); - } - - // zzyz - template - GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.z); - } - - // zzyw - template - GLM_INLINE glm::vec<4, T, Q> zzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.y, v.w); - } - - // zzzx - template - GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.x); - } - - // zzzy - template - GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.y); - } - - // zzzz - template - GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<3, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); - } - - template - GLM_INLINE glm::vec<4, T, Q> zzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.z); - } - - // zzzw - template - GLM_INLINE glm::vec<4, T, Q> zzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.z, v.w); - } - - // zzwx - template - GLM_INLINE glm::vec<4, T, Q> zzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.x); - } - - // zzwy - template - GLM_INLINE glm::vec<4, T, Q> zzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.y); - } - - // zzwz - template - GLM_INLINE glm::vec<4, T, Q> zzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.z); - } - - // zzww - template - GLM_INLINE glm::vec<4, T, Q> zzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.z, v.w, v.w); - } - - // zwxx - template - GLM_INLINE glm::vec<4, T, Q> zwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.x); - } - - // zwxy - template - GLM_INLINE glm::vec<4, T, Q> zwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.y); - } - - // zwxz - template - GLM_INLINE glm::vec<4, T, Q> zwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.z); - } - - // zwxw - template - GLM_INLINE glm::vec<4, T, Q> zwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.x, v.w); - } - - // zwyx - template - GLM_INLINE glm::vec<4, T, Q> zwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.x); - } - - // zwyy - template - GLM_INLINE glm::vec<4, T, Q> zwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.y); - } - - // zwyz - template - GLM_INLINE glm::vec<4, T, Q> zwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.z); - } - - // zwyw - template - GLM_INLINE glm::vec<4, T, Q> zwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.y, v.w); - } - - // zwzx - template - GLM_INLINE glm::vec<4, T, Q> zwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.x); - } - - // zwzy - template - GLM_INLINE glm::vec<4, T, Q> zwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.y); - } - - // zwzz - template - GLM_INLINE glm::vec<4, T, Q> zwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.z); - } - - // zwzw - template - GLM_INLINE glm::vec<4, T, Q> zwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.z, v.w); - } - - // zwwx - template - GLM_INLINE glm::vec<4, T, Q> zwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.x); - } - - // zwwy - template - GLM_INLINE glm::vec<4, T, Q> zwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.y); - } - - // zwwz - template - GLM_INLINE glm::vec<4, T, Q> zwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.z); - } - - // zwww - template - GLM_INLINE glm::vec<4, T, Q> zwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.z, v.w, v.w, v.w); - } - - // wxxx - template - GLM_INLINE glm::vec<4, T, Q> wxxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.x); - } - - // wxxy - template - GLM_INLINE glm::vec<4, T, Q> wxxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.y); - } - - // wxxz - template - GLM_INLINE glm::vec<4, T, Q> wxxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.z); - } - - // wxxw - template - GLM_INLINE glm::vec<4, T, Q> wxxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.x, v.w); - } - - // wxyx - template - GLM_INLINE glm::vec<4, T, Q> wxyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.x); - } - - // wxyy - template - GLM_INLINE glm::vec<4, T, Q> wxyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.y); - } - - // wxyz - template - GLM_INLINE glm::vec<4, T, Q> wxyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.z); - } - - // wxyw - template - GLM_INLINE glm::vec<4, T, Q> wxyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.y, v.w); - } - - // wxzx - template - GLM_INLINE glm::vec<4, T, Q> wxzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.x); - } - - // wxzy - template - GLM_INLINE glm::vec<4, T, Q> wxzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.y); - } - - // wxzz - template - GLM_INLINE glm::vec<4, T, Q> wxzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.z); - } - - // wxzw - template - GLM_INLINE glm::vec<4, T, Q> wxzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.z, v.w); - } - - // wxwx - template - GLM_INLINE glm::vec<4, T, Q> wxwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.x); - } - - // wxwy - template - GLM_INLINE glm::vec<4, T, Q> wxwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.y); - } - - // wxwz - template - GLM_INLINE glm::vec<4, T, Q> wxwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.z); - } - - // wxww - template - GLM_INLINE glm::vec<4, T, Q> wxww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.x, v.w, v.w); - } - - // wyxx - template - GLM_INLINE glm::vec<4, T, Q> wyxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.x); - } - - // wyxy - template - GLM_INLINE glm::vec<4, T, Q> wyxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.y); - } - - // wyxz - template - GLM_INLINE glm::vec<4, T, Q> wyxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.z); - } - - // wyxw - template - GLM_INLINE glm::vec<4, T, Q> wyxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.x, v.w); - } - - // wyyx - template - GLM_INLINE glm::vec<4, T, Q> wyyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.x); - } - - // wyyy - template - GLM_INLINE glm::vec<4, T, Q> wyyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.y); - } - - // wyyz - template - GLM_INLINE glm::vec<4, T, Q> wyyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.z); - } - - // wyyw - template - GLM_INLINE glm::vec<4, T, Q> wyyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.y, v.w); - } - - // wyzx - template - GLM_INLINE glm::vec<4, T, Q> wyzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.x); - } - - // wyzy - template - GLM_INLINE glm::vec<4, T, Q> wyzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.y); - } - - // wyzz - template - GLM_INLINE glm::vec<4, T, Q> wyzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.z); - } - - // wyzw - template - GLM_INLINE glm::vec<4, T, Q> wyzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.z, v.w); - } - - // wywx - template - GLM_INLINE glm::vec<4, T, Q> wywx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.x); - } - - // wywy - template - GLM_INLINE glm::vec<4, T, Q> wywy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.y); - } - - // wywz - template - GLM_INLINE glm::vec<4, T, Q> wywz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.z); - } - - // wyww - template - GLM_INLINE glm::vec<4, T, Q> wyww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.y, v.w, v.w); - } - - // wzxx - template - GLM_INLINE glm::vec<4, T, Q> wzxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.x); - } - - // wzxy - template - GLM_INLINE glm::vec<4, T, Q> wzxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.y); - } - - // wzxz - template - GLM_INLINE glm::vec<4, T, Q> wzxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.z); - } - - // wzxw - template - GLM_INLINE glm::vec<4, T, Q> wzxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.x, v.w); - } - - // wzyx - template - GLM_INLINE glm::vec<4, T, Q> wzyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.x); - } - - // wzyy - template - GLM_INLINE glm::vec<4, T, Q> wzyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.y); - } - - // wzyz - template - GLM_INLINE glm::vec<4, T, Q> wzyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.z); - } - - // wzyw - template - GLM_INLINE glm::vec<4, T, Q> wzyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.y, v.w); - } - - // wzzx - template - GLM_INLINE glm::vec<4, T, Q> wzzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.x); - } - - // wzzy - template - GLM_INLINE glm::vec<4, T, Q> wzzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.y); - } - - // wzzz - template - GLM_INLINE glm::vec<4, T, Q> wzzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.z); - } - - // wzzw - template - GLM_INLINE glm::vec<4, T, Q> wzzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.z, v.w); - } - - // wzwx - template - GLM_INLINE glm::vec<4, T, Q> wzwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.x); - } - - // wzwy - template - GLM_INLINE glm::vec<4, T, Q> wzwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.y); - } - - // wzwz - template - GLM_INLINE glm::vec<4, T, Q> wzwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.z); - } - - // wzww - template - GLM_INLINE glm::vec<4, T, Q> wzww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.z, v.w, v.w); - } - - // wwxx - template - GLM_INLINE glm::vec<4, T, Q> wwxx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.x); - } - - // wwxy - template - GLM_INLINE glm::vec<4, T, Q> wwxy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.y); - } - - // wwxz - template - GLM_INLINE glm::vec<4, T, Q> wwxz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.z); - } - - // wwxw - template - GLM_INLINE glm::vec<4, T, Q> wwxw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.x, v.w); - } - - // wwyx - template - GLM_INLINE glm::vec<4, T, Q> wwyx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.x); - } - - // wwyy - template - GLM_INLINE glm::vec<4, T, Q> wwyy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.y); - } - - // wwyz - template - GLM_INLINE glm::vec<4, T, Q> wwyz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.z); - } - - // wwyw - template - GLM_INLINE glm::vec<4, T, Q> wwyw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.y, v.w); - } - - // wwzx - template - GLM_INLINE glm::vec<4, T, Q> wwzx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.x); - } - - // wwzy - template - GLM_INLINE glm::vec<4, T, Q> wwzy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.y); - } - - // wwzz - template - GLM_INLINE glm::vec<4, T, Q> wwzz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.z); - } - - // wwzw - template - GLM_INLINE glm::vec<4, T, Q> wwzw(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.z, v.w); - } - - // wwwx - template - GLM_INLINE glm::vec<4, T, Q> wwwx(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.x); - } - - // wwwy - template - GLM_INLINE glm::vec<4, T, Q> wwwy(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.y); - } - - // wwwz - template - GLM_INLINE glm::vec<4, T, Q> wwwz(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.z); - } - - // wwww - template - GLM_INLINE glm::vec<4, T, Q> wwww(const glm::vec<4, T, Q> &v) { - return glm::vec<4, T, Q>(v.w, v.w, v.w, v.w); - } - -} diff --git a/src/qged/display/glm/glm/gtx/vector_angle.hpp b/src/qged/display/glm/glm/gtx/vector_angle.hpp deleted file mode 100644 index e2f8b7dd057..00000000000 --- a/src/qged/display/glm/glm/gtx/vector_angle.hpp +++ /dev/null @@ -1,88 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_vector_angle -/// @file glm/gtx/vector_angle.hpp -/// -/// @see core (dependence) -/// @see gtx_quaternion (dependence) -/// @see gtx_epsilon (dependence) -/// -/// @defgroup gtx_vector_angle GLM_GTX_vector_angle -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Compute angle between vectors - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../gtc/epsilon.hpp" -#include "../gtx/quaternion.hpp" -#include "../gtx/rotate_vector.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vector_angle is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vector_angle extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_vector_angle - /// @{ - - //! Returns the absolute angle between two vectors. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T angle(vec const& x, vec const& y); - - //! Returns the oriented angle between two 2d vectors. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y); - - //! Returns the oriented angle between two 3d vectors based from a reference axis. - //! Parameters need to be normalized. - /// @see gtx_vector_angle extension. - template - GLM_FUNC_DECL T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref); - - /// @} -}// namespace glm - -#include "vector_angle.inl" diff --git a/src/qged/display/glm/glm/gtx/vector_angle.inl b/src/qged/display/glm/glm/gtx/vector_angle.inl deleted file mode 100644 index a1f957a594f..00000000000 --- a/src/qged/display/glm/glm/gtx/vector_angle.inl +++ /dev/null @@ -1,44 +0,0 @@ -/// @ref gtx_vector_angle - -namespace glm -{ - template - GLM_FUNC_QUALIFIER genType angle - ( - genType const& x, - genType const& y - ) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); - return acos(clamp(dot(x, y), genType(-1), genType(1))); - } - - template - GLM_FUNC_QUALIFIER T angle(vec const& x, vec const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'angle' only accept floating-point inputs"); - return acos(clamp(dot(x, y), T(-1), T(1))); - } - - //! \todo epsilon is hard coded to 0.01 - template - GLM_FUNC_QUALIFIER T orientedAngle(vec<2, T, Q> const& x, vec<2, T, Q> const& y) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); - T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); - - if(all(epsilonEqual(y, glm::rotate(x, Angle), T(0.0001)))) - return Angle; - else - return -Angle; - } - - template - GLM_FUNC_QUALIFIER T orientedAngle(vec<3, T, Q> const& x, vec<3, T, Q> const& y, vec<3, T, Q> const& ref) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'orientedAngle' only accept floating-point inputs"); - - T const Angle(acos(clamp(dot(x, y), T(-1), T(1)))); - return mix(Angle, -Angle, dot(ref, cross(x, y)) < T(0)); - } -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/vector_query.hpp b/src/qged/display/glm/glm/gtx/vector_query.hpp deleted file mode 100644 index 590c35eae18..00000000000 --- a/src/qged/display/glm/glm/gtx/vector_query.hpp +++ /dev/null @@ -1,97 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_vector_query -/// @file glm/gtx/vector_query.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_vector_query GLM_GTX_vector_query -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Query informations of vector types - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include -#include - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_vector_query is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_vector_query extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_vector_query - /// @{ - - //! Check whether two vectors are collinears. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areCollinear(vec const& v0, vec const& v1, T const& epsilon); - - //! Check whether two vectors are orthogonals. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon); - - //! Check whether a vector is normalized. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool isNormalized(vec const& v, T const& epsilon); - - //! Check whether a vector is null. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool isNull(vec const& v, T const& epsilon); - - //! Check whether a each component of a vector is null. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL vec isCompNull(vec const& v, T const& epsilon); - - //! Check whether two vectors are orthonormal. - /// @see gtx_vector_query extensions. - template - GLM_FUNC_DECL bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon); - - /// @} -}// namespace glm - -#include "vector_query.inl" diff --git a/src/qged/display/glm/glm/gtx/vector_query.inl b/src/qged/display/glm/glm/gtx/vector_query.inl deleted file mode 100644 index d1a5c9be46b..00000000000 --- a/src/qged/display/glm/glm/gtx/vector_query.inl +++ /dev/null @@ -1,154 +0,0 @@ -/// @ref gtx_vector_query - -#include - -namespace glm{ -namespace detail -{ - template - struct compute_areCollinear{}; - - template - struct compute_areCollinear<2, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<2, T, Q> const& v0, vec<2, T, Q> const& v1, T const& epsilon) - { - return length(cross(vec<3, T, Q>(v0, static_cast(0)), vec<3, T, Q>(v1, static_cast(0)))) < epsilon; - } - }; - - template - struct compute_areCollinear<3, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<3, T, Q> const& v0, vec<3, T, Q> const& v1, T const& epsilon) - { - return length(cross(v0, v1)) < epsilon; - } - }; - - template - struct compute_areCollinear<4, T, Q> - { - GLM_FUNC_QUALIFIER static bool call(vec<4, T, Q> const& v0, vec<4, T, Q> const& v1, T const& epsilon) - { - return length(cross(vec<3, T, Q>(v0), vec<3, T, Q>(v1))) < epsilon; - } - }; - - template - struct compute_isCompNull{}; - - template - struct compute_isCompNull<2, T, Q> - { - GLM_FUNC_QUALIFIER static vec<2, bool, Q> call(vec<2, T, Q> const& v, T const& epsilon) - { - return vec<2, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon)); - } - }; - - template - struct compute_isCompNull<3, T, Q> - { - GLM_FUNC_QUALIFIER static vec<3, bool, Q> call(vec<3, T, Q> const& v, T const& epsilon) - { - return vec<3, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon), - (abs(v.z) < epsilon)); - } - }; - - template - struct compute_isCompNull<4, T, Q> - { - GLM_FUNC_QUALIFIER static vec<4, bool, Q> call(vec<4, T, Q> const& v, T const& epsilon) - { - return vec<4, bool, Q>( - (abs(v.x) < epsilon), - (abs(v.y) < epsilon), - (abs(v.z) < epsilon), - (abs(v.w) < epsilon)); - } - }; - -}//namespace detail - - template - GLM_FUNC_QUALIFIER bool areCollinear(vec const& v0, vec const& v1, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areCollinear' only accept floating-point inputs"); - - return detail::compute_areCollinear::call(v0, v1, epsilon); - } - - template - GLM_FUNC_QUALIFIER bool areOrthogonal(vec const& v0, vec const& v1, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'areOrthogonal' only accept floating-point inputs"); - - return abs(dot(v0, v1)) <= max( - static_cast(1), - length(v0)) * max(static_cast(1), length(v1)) * epsilon; - } - - template - GLM_FUNC_QUALIFIER bool isNormalized(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNormalized' only accept floating-point inputs"); - - return abs(length(v) - static_cast(1)) <= static_cast(2) * epsilon; - } - - template - GLM_FUNC_QUALIFIER bool isNull(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isNull' only accept floating-point inputs"); - - return length(v) <= epsilon; - } - - template - GLM_FUNC_QUALIFIER vec isCompNull(vec const& v, T const& epsilon) - { - GLM_STATIC_ASSERT(std::numeric_limits::is_iec559, "'isCompNull' only accept floating-point inputs"); - - return detail::compute_isCompNull::call(v, epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<2, bool, Q> isCompNull(vec<2, T, Q> const& v, T const& epsilon) - { - return vec<2, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<3, bool, Q> isCompNull(vec<3, T, Q> const& v, T const& epsilon) - { - return vec<3, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon, - abs(v.z) < epsilon); - } - - template - GLM_FUNC_QUALIFIER vec<4, bool, Q> isCompNull(vec<4, T, Q> const& v, T const& epsilon) - { - return vec<4, bool, Q>( - abs(v.x) < epsilon, - abs(v.y) < epsilon, - abs(v.z) < epsilon, - abs(v.w) < epsilon); - } - - template - GLM_FUNC_QUALIFIER bool areOrthonormal(vec const& v0, vec const& v1, T const& epsilon) - { - return isNormalized(v0, epsilon) && isNormalized(v1, epsilon) && (abs(dot(v0, v1)) <= epsilon); - } - -}//namespace glm diff --git a/src/qged/display/glm/glm/gtx/wrap.hpp b/src/qged/display/glm/glm/gtx/wrap.hpp deleted file mode 100644 index 2449e8059e1..00000000000 --- a/src/qged/display/glm/glm/gtx/wrap.hpp +++ /dev/null @@ -1,68 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref gtx_wrap -/// @file glm/gtx/wrap.hpp -/// -/// @see core (dependence) -/// -/// @defgroup gtx_wrap GLM_GTX_wrap -/// @ingroup gtx -/// -/// Include to use the features of this extension. -/// -/// Wrapping mode of texture coordinates. - -#pragma once - -// Dependency: -#include "../glm.hpp" -#include "../ext/scalar_common.hpp" -#include "../ext/vector_common.hpp" -#include "../gtc/vec1.hpp" - -#if GLM_MESSAGES == GLM_ENABLE && !defined(GLM_EXT_INCLUDED) -# ifndef GLM_ENABLE_EXPERIMENTAL -# pragma message("GLM: GLM_GTX_wrap is an experimental extension and may change in the future. Use #define GLM_ENABLE_EXPERIMENTAL before including it, if you really want to use it.") -# else -# pragma message("GLM: GLM_GTX_wrap extension included") -# endif -#endif - -namespace glm -{ - /// @addtogroup gtx_wrap - /// @{ - - /// @} -}// namespace glm - -#include "wrap.inl" diff --git a/src/qged/display/glm/glm/gtx/wrap.inl b/src/qged/display/glm/glm/gtx/wrap.inl deleted file mode 100644 index 4be3b4c38ae..00000000000 --- a/src/qged/display/glm/glm/gtx/wrap.inl +++ /dev/null @@ -1,6 +0,0 @@ -/// @ref gtx_wrap - -namespace glm -{ - -}//namespace glm diff --git a/src/qged/display/glm/glm/integer.hpp b/src/qged/display/glm/glm/integer.hpp deleted file mode 100644 index 5a2dc45f766..00000000000 --- a/src/qged/display/glm/glm/integer.hpp +++ /dev/null @@ -1,243 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/integer.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.8 Integer Functions -/// -/// @defgroup core_func_integer Integer functions -/// @ingroup core -/// -/// Provides GLSL functions on integer types -/// -/// These all operate component-wise. The description is per component. -/// The notation [a, b] means the set of bits from bit-number a through bit-number -/// b, inclusive. The lowest-order bit is bit 0. -/// -/// Include to use these core features. - -#pragma once - -#include "detail/qualifier.hpp" -#include "common.hpp" -#include "vector_relational.hpp" - -namespace glm -{ - /// @addtogroup core_func_integer - /// @{ - - /// Adds 32-bit unsigned integer x and y, returning the sum - /// modulo pow(2, 32). The value carry is set to 0 if the sum was - /// less than pow(2, 32), or to 1 otherwise. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL uaddCarry man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec uaddCarry( - vec const& x, - vec const& y, - vec & carry); - - /// Subtracts the 32-bit unsigned integer y from x, returning - /// the difference if non-negative, or pow(2, 32) plus the difference - /// otherwise. The value borrow is set to 0 if x >= y, or to 1 otherwise. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL usubBorrow man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec usubBorrow( - vec const& x, - vec const& y, - vec & borrow); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL umulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL void umulExtended( - vec const& x, - vec const& y, - vec & msb, - vec & lsb); - - /// Multiplies 32-bit integers x and y, producing a 64-bit - /// result. The 32 least-significant bits are returned in lsb. - /// The 32 most-significant bits are returned in msb. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL imulExtended man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL void imulExtended( - vec const& x, - vec const& y, - vec & msb, - vec & lsb); - - /// Extracts bits [offset, offset + bits - 1] from value, - /// returning them in the least significant bits of the result. - /// For unsigned data types, the most significant bits of the - /// result will be set to zero. For signed data types, the - /// most significant bits will be set to the value of bit offset + base - 1. - /// - /// If bits is zero, the result will be zero. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used - /// to store the operand. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL bitfieldExtract man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldExtract( - vec const& Value, - int Offset, - int Bits); - - /// Returns the insertion the bits least-significant bits of insert into base. - /// - /// The result will have bits [offset, offset + bits - 1] taken - /// from bits [0, bits - 1] of insert, and all other bits taken - /// directly from the corresponding bits of base. If bits is - /// zero, the result will simply be base. The result will be - /// undefined if offset or bits is negative, or if the sum of - /// offset and bits is greater than the number of bits used to - /// store the operand. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldInsert man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldInsert( - vec const& Base, - vec const& Insert, - int Offset, - int Bits); - - /// Returns the reversal of the bits of value. - /// The bit numbered n of the result will be taken from bit (bits - 1) - n of value, - /// where bits is the total number of bits used to represent value. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitfieldReverse man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitfieldReverse(vec const& v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam genType Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitCount man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int bitCount(genType v); - - /// Returns the number of bits set to 1 in the binary representation of value. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar or vector types. - /// - /// @see GLSL bitCount man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec bitCount(vec const& v); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see GLSL findLSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int findLSB(genIUType x); - - /// Returns the bit number of the least significant bit set to - /// 1 in the binary representation of value. - /// If value is zero, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL findLSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec findLSB(vec const& v); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam genIUType Signed or unsigned integer scalar types. - /// - /// @see GLSL findMSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL int findMSB(genIUType x); - - /// Returns the bit number of the most significant bit in the binary representation of value. - /// For positive integers, the result will be the bit number of the most significant bit set to 1. - /// For negative integers, the result will be the bit number of the most significant - /// bit set to 0. For a value of zero or negative one, -1 will be returned. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T Signed or unsigned integer scalar types. - /// - /// @see GLSL findMSB man page - /// @see GLSL 4.20.8 specification, section 8.8 Integer Functions - template - GLM_FUNC_DECL vec findMSB(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_integer.inl" diff --git a/src/qged/display/glm/glm/mat2x2.hpp b/src/qged/display/glm/glm/mat2x2.hpp deleted file mode 100644 index a881864e3f1..00000000000 --- a/src/qged/display/glm/glm/mat2x2.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/mat2x2.hpp - -#pragma once -#include "./ext/matrix_double2x2.hpp" -#include "./ext/matrix_double2x2_precision.hpp" -#include "./ext/matrix_float2x2.hpp" -#include "./ext/matrix_float2x2_precision.hpp" - diff --git a/src/qged/display/glm/glm/mat2x3.hpp b/src/qged/display/glm/glm/mat2x3.hpp deleted file mode 100644 index b68d01183aa..00000000000 --- a/src/qged/display/glm/glm/mat2x3.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/mat2x3.hpp - -#pragma once -#include "./ext/matrix_double2x3.hpp" -#include "./ext/matrix_double2x3_precision.hpp" -#include "./ext/matrix_float2x3.hpp" -#include "./ext/matrix_float2x3_precision.hpp" - diff --git a/src/qged/display/glm/glm/mat2x4.hpp b/src/qged/display/glm/glm/mat2x4.hpp deleted file mode 100644 index f409f610295..00000000000 --- a/src/qged/display/glm/glm/mat2x4.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/mat2x4.hpp - -#pragma once -#include "./ext/matrix_double2x4.hpp" -#include "./ext/matrix_double2x4_precision.hpp" -#include "./ext/matrix_float2x4.hpp" -#include "./ext/matrix_float2x4_precision.hpp" - diff --git a/src/qged/display/glm/glm/mat3x2.hpp b/src/qged/display/glm/glm/mat3x2.hpp deleted file mode 100644 index 3cb0980509c..00000000000 --- a/src/qged/display/glm/glm/mat3x2.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/mat3x2.hpp - -#pragma once -#include "./ext/matrix_double3x2.hpp" -#include "./ext/matrix_double3x2_precision.hpp" -#include "./ext/matrix_float3x2.hpp" -#include "./ext/matrix_float3x2_precision.hpp" - diff --git a/src/qged/display/glm/glm/mat3x3.hpp b/src/qged/display/glm/glm/mat3x3.hpp deleted file mode 100644 index 44f0df778d6..00000000000 --- a/src/qged/display/glm/glm/mat3x3.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/mat3x3.hpp - -#pragma once -#include "./ext/matrix_double3x3.hpp" -#include "./ext/matrix_double3x3_precision.hpp" -#include "./ext/matrix_float3x3.hpp" -#include "./ext/matrix_float3x3_precision.hpp" diff --git a/src/qged/display/glm/glm/mat3x4.hpp b/src/qged/display/glm/glm/mat3x4.hpp deleted file mode 100644 index 014bfcb410f..00000000000 --- a/src/qged/display/glm/glm/mat3x4.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/mat3x4.hpp - -#pragma once -#include "./ext/matrix_double3x4.hpp" -#include "./ext/matrix_double3x4_precision.hpp" -#include "./ext/matrix_float3x4.hpp" -#include "./ext/matrix_float3x4_precision.hpp" diff --git a/src/qged/display/glm/glm/mat4x2.hpp b/src/qged/display/glm/glm/mat4x2.hpp deleted file mode 100644 index 7266f3ed211..00000000000 --- a/src/qged/display/glm/glm/mat4x2.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/mat4x2.hpp - -#pragma once -#include "./ext/matrix_double4x2.hpp" -#include "./ext/matrix_double4x2_precision.hpp" -#include "./ext/matrix_float4x2.hpp" -#include "./ext/matrix_float4x2_precision.hpp" - diff --git a/src/qged/display/glm/glm/mat4x3.hpp b/src/qged/display/glm/glm/mat4x3.hpp deleted file mode 100644 index 037c75a6ad3..00000000000 --- a/src/qged/display/glm/glm/mat4x3.hpp +++ /dev/null @@ -1,39 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/mat4x3.hpp - -#pragma once -#include "./ext/matrix_double4x3.hpp" -#include "./ext/matrix_double4x3_precision.hpp" -#include "./ext/matrix_float4x3.hpp" -#include "./ext/matrix_float4x3_precision.hpp" diff --git a/src/qged/display/glm/glm/mat4x4.hpp b/src/qged/display/glm/glm/mat4x4.hpp deleted file mode 100644 index e7f8438f354..00000000000 --- a/src/qged/display/glm/glm/mat4x4.hpp +++ /dev/null @@ -1,40 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/mat4x4.hpp - -#pragma once -#include "./ext/matrix_double4x4.hpp" -#include "./ext/matrix_double4x4_precision.hpp" -#include "./ext/matrix_float4x4.hpp" -#include "./ext/matrix_float4x4_precision.hpp" - diff --git a/src/qged/display/glm/glm/matrix.hpp b/src/qged/display/glm/glm/matrix.hpp deleted file mode 100644 index 219fa2e6ebf..00000000000 --- a/src/qged/display/glm/glm/matrix.hpp +++ /dev/null @@ -1,192 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/matrix.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions -/// -/// @defgroup core_func_matrix Matrix functions -/// @ingroup core -/// -/// Provides GLSL matrix functions. -/// -/// Include to use these core features. - -#pragma once - -// Dependencies -#include "detail/qualifier.hpp" -#include "detail/setup.hpp" -#include "vec2.hpp" -#include "vec3.hpp" -#include "vec4.hpp" -#include "mat2x2.hpp" -#include "mat2x3.hpp" -#include "mat2x4.hpp" -#include "mat3x2.hpp" -#include "mat3x3.hpp" -#include "mat3x4.hpp" -#include "mat4x2.hpp" -#include "mat4x3.hpp" -#include "mat4x4.hpp" - -namespace glm { -namespace detail -{ - template - struct outerProduct_trait{}; - - template - struct outerProduct_trait<2, 2, T, Q> - { - typedef mat<2, 2, T, Q> type; - }; - - template - struct outerProduct_trait<2, 3, T, Q> - { - typedef mat<3, 2, T, Q> type; - }; - - template - struct outerProduct_trait<2, 4, T, Q> - { - typedef mat<4, 2, T, Q> type; - }; - - template - struct outerProduct_trait<3, 2, T, Q> - { - typedef mat<2, 3, T, Q> type; - }; - - template - struct outerProduct_trait<3, 3, T, Q> - { - typedef mat<3, 3, T, Q> type; - }; - - template - struct outerProduct_trait<3, 4, T, Q> - { - typedef mat<4, 3, T, Q> type; - }; - - template - struct outerProduct_trait<4, 2, T, Q> - { - typedef mat<2, 4, T, Q> type; - }; - - template - struct outerProduct_trait<4, 3, T, Q> - { - typedef mat<3, 4, T, Q> type; - }; - - template - struct outerProduct_trait<4, 4, T, Q> - { - typedef mat<4, 4, T, Q> type; - }; -}//namespace detail - - /// @addtogroup core_func_matrix - /// @{ - - /// Multiply matrix x by matrix y component-wise, i.e., - /// result[i][j] is the scalar product of x[i][j] and y[i][j]. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL matrixCompMult man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL mat matrixCompMult(mat const& x, mat const& y); - - /// Treats the first parameter c as a column vector - /// and the second parameter r as a row vector - /// and does a linear algebraic matrix multiply c * r. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL outerProduct man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename detail::outerProduct_trait::type outerProduct(vec const& c, vec const& r); - - /// Returns the transposed matrix of x - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL transpose man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL typename mat::transpose_type transpose(mat const& x); - - /// Return the determinant of a squared matrix. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL determinant man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL T determinant(mat const& m); - - /// Return the inverse of a squared matrix. - /// - /// @tparam C Integer between 1 and 4 included that qualify the number a column - /// @tparam R Integer between 1 and 4 included that qualify the number a row - /// @tparam T Floating-point or signed integer scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL inverse man page - /// @see GLSL 4.20.8 specification, section 8.6 Matrix Functions - template - GLM_FUNC_DECL mat inverse(mat const& m); - - /// @} -}//namespace glm - -#include "detail/func_matrix.inl" diff --git a/src/qged/display/glm/glm/packing.hpp b/src/qged/display/glm/glm/packing.hpp deleted file mode 100644 index bfa7da38125..00000000000 --- a/src/qged/display/glm/glm/packing.hpp +++ /dev/null @@ -1,204 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/packing.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions -/// @see gtc_packing -/// -/// @defgroup core_func_packing Floating-Point Pack and Unpack Functions -/// @ingroup core -/// -/// Provides GLSL functions to pack and unpack half, single and double-precision floating point values into more compact integer types. -/// -/// These functions do not operate component-wise, rather as described in each case. -/// -/// Include to use these core features. - -#pragma once - -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float4.hpp" - -namespace glm -{ - /// @addtogroup core_func_packing - /// @{ - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm2x16: round(clamp(c, 0, +1) * 65535.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packUnorm2x16(vec2 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm2x16: round(clamp(v, -1, +1) * 32767.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packSnorm2x16(vec2 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packUnorm4x8: round(clamp(c, 0, +1) * 255.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packUnorm4x8(vec4 const& v); - - /// First, converts each component of the normalized floating-point value v into 8- or 16-bit integer values. - /// Then, the results are packed into the returned 32-bit unsigned integer. - /// - /// The conversion for component c of v to fixed point is done as follows: - /// packSnorm4x8: round(clamp(c, -1, +1) * 127.0) - /// - /// The first component of the vector will be written to the least significant bits of the output; - /// the last component will be written to the most significant bits. - /// - /// @see GLSL packSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packSnorm4x8(vec4 const& v); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm2x16: f / 65535.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackUnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackUnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm2x16: clamp(f / 32767.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackSnorm2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackSnorm2x16(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackUnorm4x8: f / 255.0 - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackUnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackUnorm4x8(uint p); - - /// First, unpacks a single 32-bit unsigned integer p into a pair of 16-bit unsigned integers, four 8-bit unsigned integers, or four 8-bit signed integers. - /// Then, each component is converted to a normalized floating-point value to generate the returned two- or four-component vector. - /// - /// The conversion for unpacked fixed-point value f to floating point is done as follows: - /// unpackSnorm4x8: clamp(f / 127.0, -1, +1) - /// - /// The first component of the returned vector will be extracted from the least significant bits of the input; - /// the last component will be extracted from the most significant bits. - /// - /// @see GLSL unpackSnorm4x8 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec4 unpackSnorm4x8(uint p); - - /// Returns a double-qualifier value obtained by packing the components of v into a 64-bit value. - /// If an IEEE 754 Inf or NaN is created, it will not signal, and the resulting floating point value is unspecified. - /// Otherwise, the bit- level representation of v is preserved. - /// The first vector component specifies the 32 least significant bits; - /// the second component specifies the 32 most significant bits. - /// - /// @see GLSL packDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL double packDouble2x32(uvec2 const& v); - - /// Returns a two-component unsigned integer vector representation of v. - /// The bit-level representation of v is preserved. - /// The first component of the vector contains the 32 least significant bits of the double; - /// the second component consists the 32 most significant bits. - /// - /// @see GLSL unpackDouble2x32 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uvec2 unpackDouble2x32(double v); - - /// Returns an unsigned integer obtained by converting the components of a two-component floating-point vector - /// to the 16-bit floating-point representation found in the OpenGL Specification, - /// and then packing these two 16- bit integers into a 32-bit unsigned integer. - /// The first vector component specifies the 16 least-significant bits of the result; - /// the second component specifies the 16 most-significant bits. - /// - /// @see GLSL packHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL uint packHalf2x16(vec2 const& v); - - /// Returns a two-component floating-point vector with components obtained by unpacking a 32-bit unsigned integer into a pair of 16-bit values, - /// interpreting those values as 16-bit floating-point numbers according to the OpenGL Specification, - /// and converting them to 32-bit floating-point values. - /// The first component of the vector is obtained from the 16 least-significant bits of v; - /// the second component is obtained from the 16 most-significant bits of v. - /// - /// @see GLSL unpackHalf2x16 man page - /// @see GLSL 4.20.8 specification, section 8.4 Floating-Point Pack and Unpack Functions - GLM_FUNC_DECL vec2 unpackHalf2x16(uint v); - - /// @} -}//namespace glm - -#include "detail/func_packing.inl" diff --git a/src/qged/display/glm/glm/simd/common.h b/src/qged/display/glm/glm/simd/common.h deleted file mode 100644 index 6812d7493a5..00000000000 --- a/src/qged/display/glm/glm/simd/common.h +++ /dev/null @@ -1,271 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref simd -/// @file glm/simd/common.h - -#pragma once - -#include "platform.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_add(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_add_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_add(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_add_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sub(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_sub_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sub(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_sub_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_mul(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_mul_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_mul(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_mul_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_div_ps(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_div(glm_f32vec4 a, glm_f32vec4 b) -{ - return _mm_div_ss(a, b); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_div_lowp(glm_f32vec4 a, glm_f32vec4 b) -{ - return glm_vec4_mul(a, _mm_rcp_ps(b)); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_swizzle_xyzw(glm_f32vec4 a) -{ -# if GLM_ARCH & GLM_ARCH_AVX2_BIT - return _mm_permute_ps(a, _MM_SHUFFLE(3, 2, 1, 0)); -# else - return _mm_shuffle_ps(a, a, _MM_SHUFFLE(3, 2, 1, 0)); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) -{ -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) - return _mm_fmadd_ss(a, b, c); -# else - return _mm_add_ss(_mm_mul_ss(a, b), c); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_fma(glm_f32vec4 a, glm_f32vec4 b, glm_f32vec4 c) -{ -# if (GLM_ARCH & GLM_ARCH_AVX2_BIT) && !(GLM_COMPILER & GLM_COMPILER_CLANG) - return _mm_fmadd_ps(a, b, c); -# else - return glm_vec4_add(glm_vec4_mul(a, b), c); -# endif -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_abs(glm_f32vec4 x) -{ - return _mm_and_ps(x, _mm_castsi128_ps(_mm_set1_epi32(0x7FFFFFFF))); -} - -GLM_FUNC_QUALIFIER glm_ivec4 glm_ivec4_abs(glm_ivec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSSE3_BIT - return _mm_sign_epi32(x, x); -# else - glm_ivec4 const sgn0 = _mm_srai_epi32(x, 31); - glm_ivec4 const inv0 = _mm_xor_si128(x, sgn0); - glm_ivec4 const sub0 = _mm_sub_epi32(inv0, sgn0); - return sub0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_sign(glm_vec4 x) -{ - glm_vec4 const zro0 = _mm_setzero_ps(); - glm_vec4 const cmp0 = _mm_cmplt_ps(x, zro0); - glm_vec4 const cmp1 = _mm_cmpgt_ps(x, zro0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(-1.0f)); - glm_vec4 const and1 = _mm_and_ps(cmp1, _mm_set1_ps(1.0f)); - glm_vec4 const or0 = _mm_or_ps(and0, and1); - return or0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_round(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_round_ps(x, _MM_FROUND_TO_NEAREST_INT); -# else - glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); - glm_vec4 const and0 = _mm_and_ps(sgn0, x); - glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); - glm_vec4 const add0 = glm_vec4_add(x, or0); - glm_vec4 const sub0 = glm_vec4_sub(add0, or0); - return sub0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_floor(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_floor_ps(x); -# else - glm_vec4 const rnd0 = glm_vec4_round(x); - glm_vec4 const cmp0 = _mm_cmplt_ps(x, rnd0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); - glm_vec4 const sub0 = glm_vec4_sub(rnd0, and0); - return sub0; -# endif -} - -/* trunc TODO -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_trunc(glm_vec4 x) -{ - return glm_vec4(); -} -*/ - -//roundEven -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_roundEven(glm_vec4 x) -{ - glm_vec4 const sgn0 = _mm_castsi128_ps(_mm_set1_epi32(int(0x80000000))); - glm_vec4 const and0 = _mm_and_ps(sgn0, x); - glm_vec4 const or0 = _mm_or_ps(and0, _mm_set_ps1(8388608.0f)); - glm_vec4 const add0 = glm_vec4_add(x, or0); - glm_vec4 const sub0 = glm_vec4_sub(add0, or0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_ceil(glm_vec4 x) -{ -# if GLM_ARCH & GLM_ARCH_SSE41_BIT - return _mm_ceil_ps(x); -# else - glm_vec4 const rnd0 = glm_vec4_round(x); - glm_vec4 const cmp0 = _mm_cmpgt_ps(x, rnd0); - glm_vec4 const and0 = _mm_and_ps(cmp0, _mm_set1_ps(1.0f)); - glm_vec4 const add0 = glm_vec4_add(rnd0, and0); - return add0; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_fract(glm_vec4 x) -{ - glm_vec4 const flr0 = glm_vec4_floor(x); - glm_vec4 const sub0 = glm_vec4_sub(x, flr0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mod(glm_vec4 x, glm_vec4 y) -{ - glm_vec4 const div0 = glm_vec4_div(x, y); - glm_vec4 const flr0 = glm_vec4_floor(div0); - glm_vec4 const mul0 = glm_vec4_mul(y, flr0); - glm_vec4 const sub0 = glm_vec4_sub(x, mul0); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_clamp(glm_vec4 v, glm_vec4 minVal, glm_vec4 maxVal) -{ - glm_vec4 const min0 = _mm_min_ps(v, maxVal); - glm_vec4 const max0 = _mm_max_ps(min0, minVal); - return max0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_mix(glm_vec4 v1, glm_vec4 v2, glm_vec4 a) -{ - glm_vec4 const sub0 = glm_vec4_sub(_mm_set1_ps(1.0f), a); - glm_vec4 const mul0 = glm_vec4_mul(v1, sub0); - glm_vec4 const mad0 = glm_vec4_fma(v2, a, mul0); - return mad0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_step(glm_vec4 edge, glm_vec4 x) -{ - glm_vec4 const cmp = _mm_cmple_ps(x, edge); - return _mm_movemask_ps(cmp) == 0 ? _mm_set1_ps(1.0f) : _mm_setzero_ps(); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_smoothstep(glm_vec4 edge0, glm_vec4 edge1, glm_vec4 x) -{ - glm_vec4 const sub0 = glm_vec4_sub(x, edge0); - glm_vec4 const sub1 = glm_vec4_sub(edge1, edge0); - glm_vec4 const div0 = glm_vec4_sub(sub0, sub1); - glm_vec4 const clp0 = glm_vec4_clamp(div0, _mm_setzero_ps(), _mm_set1_ps(1.0f)); - glm_vec4 const mul0 = glm_vec4_mul(_mm_set1_ps(2.0f), clp0); - glm_vec4 const sub2 = glm_vec4_sub(_mm_set1_ps(3.0f), mul0); - glm_vec4 const mul1 = glm_vec4_mul(clp0, clp0); - glm_vec4 const mul2 = glm_vec4_mul(mul1, sub2); - return mul2; -} - -// Agner Fog method -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_nan(glm_vec4 x) -{ - glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer - glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit - glm_ivec4 const t3 = _mm_set1_epi32(int(0xFF000000)); // exponent mask - glm_ivec4 const t4 = _mm_and_si128(t2, t3); // exponent - glm_ivec4 const t5 = _mm_andnot_si128(t3, t2); // fraction - glm_ivec4 const Equal = _mm_cmpeq_epi32(t3, t4); - glm_ivec4 const Nequal = _mm_cmpeq_epi32(t5, _mm_setzero_si128()); - glm_ivec4 const And = _mm_and_si128(Equal, Nequal); - return _mm_castsi128_ps(And); // exponent = all 1s and fraction != 0 -} - -// Agner Fog method -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_inf(glm_vec4 x) -{ - glm_ivec4 const t1 = _mm_castps_si128(x); // reinterpret as 32-bit integer - glm_ivec4 const t2 = _mm_sll_epi32(t1, _mm_cvtsi32_si128(1)); // shift out sign bit - return _mm_castsi128_ps(_mm_cmpeq_epi32(t2, _mm_set1_epi32(int(0xFF000000)))); // exponent is all 1s, fraction is 0 -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/simd/exponential.h b/src/qged/display/glm/glm/simd/exponential.h deleted file mode 100644 index 059e902fe3c..00000000000 --- a/src/qged/display/glm/glm/simd/exponential.h +++ /dev/null @@ -1,51 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref simd -/// @file glm/simd/experimental.h - -#pragma once - -#include "platform.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec1_sqrt_lowp(glm_f32vec4 x) -{ - return _mm_mul_ss(_mm_rsqrt_ss(x), x); -} - -GLM_FUNC_QUALIFIER glm_f32vec4 glm_vec4_sqrt_lowp(glm_f32vec4 x) -{ - return _mm_mul_ps(_mm_rsqrt_ps(x), x); -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/simd/geometric.h b/src/qged/display/glm/glm/simd/geometric.h deleted file mode 100644 index bc7874ddefb..00000000000 --- a/src/qged/display/glm/glm/simd/geometric.h +++ /dev/null @@ -1,155 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref simd -/// @file glm/simd/geometric.h - -#pragma once - -#include "common.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_DECL glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2); -GLM_FUNC_DECL glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2); - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_length(glm_vec4 x) -{ - glm_vec4 const dot0 = glm_vec4_dot(x, x); - glm_vec4 const sqt0 = _mm_sqrt_ps(dot0); - return sqt0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_distance(glm_vec4 p0, glm_vec4 p1) -{ - glm_vec4 const sub0 = _mm_sub_ps(p0, p1); - glm_vec4 const len0 = glm_vec4_length(sub0); - return len0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_dot(glm_vec4 v1, glm_vec4 v2) -{ -# if GLM_ARCH & GLM_ARCH_AVX_BIT - return _mm_dp_ps(v1, v2, 0xff); -# elif GLM_ARCH & GLM_ARCH_SSE3_BIT - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const hadd0 = _mm_hadd_ps(mul0, mul0); - glm_vec4 const hadd1 = _mm_hadd_ps(hadd0, hadd0); - return hadd1; -# else - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const swp0 = _mm_shuffle_ps(mul0, mul0, _MM_SHUFFLE(2, 3, 0, 1)); - glm_vec4 const add0 = _mm_add_ps(mul0, swp0); - glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, _MM_SHUFFLE(0, 1, 2, 3)); - glm_vec4 const add1 = _mm_add_ps(add0, swp1); - return add1; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec1_dot(glm_vec4 v1, glm_vec4 v2) -{ -# if GLM_ARCH & GLM_ARCH_AVX_BIT - return _mm_dp_ps(v1, v2, 0xff); -# elif GLM_ARCH & GLM_ARCH_SSE3_BIT - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const had0 = _mm_hadd_ps(mul0, mul0); - glm_vec4 const had1 = _mm_hadd_ps(had0, had0); - return had1; -# else - glm_vec4 const mul0 = _mm_mul_ps(v1, v2); - glm_vec4 const mov0 = _mm_movehl_ps(mul0, mul0); - glm_vec4 const add0 = _mm_add_ps(mov0, mul0); - glm_vec4 const swp1 = _mm_shuffle_ps(add0, add0, 1); - glm_vec4 const add1 = _mm_add_ss(add0, swp1); - return add1; -# endif -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_cross(glm_vec4 v1, glm_vec4 v2) -{ - glm_vec4 const swp0 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 0, 2, 1)); - glm_vec4 const swp1 = _mm_shuffle_ps(v1, v1, _MM_SHUFFLE(3, 1, 0, 2)); - glm_vec4 const swp2 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 0, 2, 1)); - glm_vec4 const swp3 = _mm_shuffle_ps(v2, v2, _MM_SHUFFLE(3, 1, 0, 2)); - glm_vec4 const mul0 = _mm_mul_ps(swp0, swp3); - glm_vec4 const mul1 = _mm_mul_ps(swp1, swp2); - glm_vec4 const sub0 = _mm_sub_ps(mul0, mul1); - return sub0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_normalize(glm_vec4 v) -{ - glm_vec4 const dot0 = glm_vec4_dot(v, v); - glm_vec4 const isr0 = _mm_rsqrt_ps(dot0); - glm_vec4 const mul0 = _mm_mul_ps(v, isr0); - return mul0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_faceforward(glm_vec4 N, glm_vec4 I, glm_vec4 Nref) -{ - glm_vec4 const dot0 = glm_vec4_dot(Nref, I); - glm_vec4 const sgn0 = glm_vec4_sign(dot0); - glm_vec4 const mul0 = _mm_mul_ps(sgn0, _mm_set1_ps(-1.0f)); - glm_vec4 const mul1 = _mm_mul_ps(N, mul0); - return mul1; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_vec4_reflect(glm_vec4 I, glm_vec4 N) -{ - glm_vec4 const dot0 = glm_vec4_dot(N, I); - glm_vec4 const mul0 = _mm_mul_ps(N, dot0); - glm_vec4 const mul1 = _mm_mul_ps(mul0, _mm_set1_ps(2.0f)); - glm_vec4 const sub0 = _mm_sub_ps(I, mul1); - return sub0; -} - -GLM_FUNC_QUALIFIER __m128 glm_vec4_refract(glm_vec4 I, glm_vec4 N, glm_vec4 eta) -{ - glm_vec4 const dot0 = glm_vec4_dot(N, I); - glm_vec4 const mul0 = _mm_mul_ps(eta, eta); - glm_vec4 const mul1 = _mm_mul_ps(dot0, dot0); - glm_vec4 const sub0 = _mm_sub_ps(_mm_set1_ps(1.0f), mul0); - glm_vec4 const sub1 = _mm_sub_ps(_mm_set1_ps(1.0f), mul1); - glm_vec4 const mul2 = _mm_mul_ps(sub0, sub1); - - if(_mm_movemask_ps(_mm_cmplt_ss(mul2, _mm_set1_ps(0.0f))) == 0) - return _mm_set1_ps(0.0f); - - glm_vec4 const sqt0 = _mm_sqrt_ps(mul2); - glm_vec4 const mad0 = glm_vec4_fma(eta, dot0, sqt0); - glm_vec4 const mul4 = _mm_mul_ps(mad0, N); - glm_vec4 const mul5 = _mm_mul_ps(eta, I); - glm_vec4 const sub2 = _mm_sub_ps(mul5, mul4); - - return sub2; -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/simd/integer.h b/src/qged/display/glm/glm/simd/integer.h deleted file mode 100644 index 15100677b47..00000000000 --- a/src/qged/display/glm/glm/simd/integer.h +++ /dev/null @@ -1,146 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref simd -/// @file glm/simd/integer.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave(glm_uvec4 x) -{ - glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); - glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); - glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); - glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); - glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); - - glm_uvec4 Reg1; - glm_uvec4 Reg2; - - // REG1 = x; - // REG2 = y; - //Reg1 = _mm_unpacklo_epi64(x, y); - Reg1 = x; - - //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); - //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); - Reg2 = _mm_slli_si128(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask4); - - //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); - //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); - Reg2 = _mm_slli_si128(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask3); - - //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); - //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); - Reg2 = _mm_slli_epi32(Reg1, 4); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask2); - - //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); - //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); - Reg2 = _mm_slli_epi32(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask1); - - //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); - //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask0); - - //return REG1 | (REG2 << 1); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg2 = _mm_srli_si128(Reg2, 8); - Reg1 = _mm_or_si128(Reg1, Reg2); - - return Reg1; -} - -GLM_FUNC_QUALIFIER glm_uvec4 glm_i128_interleave2(glm_uvec4 x, glm_uvec4 y) -{ - glm_uvec4 const Mask4 = _mm_set1_epi32(0x0000FFFF); - glm_uvec4 const Mask3 = _mm_set1_epi32(0x00FF00FF); - glm_uvec4 const Mask2 = _mm_set1_epi32(0x0F0F0F0F); - glm_uvec4 const Mask1 = _mm_set1_epi32(0x33333333); - glm_uvec4 const Mask0 = _mm_set1_epi32(0x55555555); - - glm_uvec4 Reg1; - glm_uvec4 Reg2; - - // REG1 = x; - // REG2 = y; - Reg1 = _mm_unpacklo_epi64(x, y); - - //REG1 = ((REG1 << 16) | REG1) & glm::uint64(0x0000FFFF0000FFFF); - //REG2 = ((REG2 << 16) | REG2) & glm::uint64(0x0000FFFF0000FFFF); - Reg2 = _mm_slli_si128(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask4); - - //REG1 = ((REG1 << 8) | REG1) & glm::uint64(0x00FF00FF00FF00FF); - //REG2 = ((REG2 << 8) | REG2) & glm::uint64(0x00FF00FF00FF00FF); - Reg2 = _mm_slli_si128(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask3); - - //REG1 = ((REG1 << 4) | REG1) & glm::uint64(0x0F0F0F0F0F0F0F0F); - //REG2 = ((REG2 << 4) | REG2) & glm::uint64(0x0F0F0F0F0F0F0F0F); - Reg2 = _mm_slli_epi32(Reg1, 4); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask2); - - //REG1 = ((REG1 << 2) | REG1) & glm::uint64(0x3333333333333333); - //REG2 = ((REG2 << 2) | REG2) & glm::uint64(0x3333333333333333); - Reg2 = _mm_slli_epi32(Reg1, 2); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask1); - - //REG1 = ((REG1 << 1) | REG1) & glm::uint64(0x5555555555555555); - //REG2 = ((REG2 << 1) | REG2) & glm::uint64(0x5555555555555555); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg1 = _mm_or_si128(Reg2, Reg1); - Reg1 = _mm_and_si128(Reg1, Mask0); - - //return REG1 | (REG2 << 1); - Reg2 = _mm_slli_epi32(Reg1, 1); - Reg2 = _mm_srli_si128(Reg2, 8); - Reg1 = _mm_or_si128(Reg1, Reg2); - - return Reg1; -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/simd/matrix.h b/src/qged/display/glm/glm/simd/matrix.h deleted file mode 100644 index e38e408de4d..00000000000 --- a/src/qged/display/glm/glm/simd/matrix.h +++ /dev/null @@ -1,1059 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref simd -/// @file glm/simd/matrix.h - -#pragma once - -#include "geometric.h" - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -GLM_FUNC_QUALIFIER void glm_mat4_matrixCompMult(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_mul_ps(in1[0], in2[0]); - out[1] = _mm_mul_ps(in1[1], in2[1]); - out[2] = _mm_mul_ps(in1[2], in2[2]); - out[3] = _mm_mul_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER void glm_mat4_add(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_add_ps(in1[0], in2[0]); - out[1] = _mm_add_ps(in1[1], in2[1]); - out[2] = _mm_add_ps(in1[2], in2[2]); - out[3] = _mm_add_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER void glm_mat4_sub(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - out[0] = _mm_sub_ps(in1[0], in2[0]); - out[1] = _mm_sub_ps(in1[1], in2[1]); - out[2] = _mm_sub_ps(in1[2], in2[2]); - out[3] = _mm_sub_ps(in1[3], in2[3]); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_mul_vec4(glm_vec4 const m[4], glm_vec4 v) -{ - __m128 v0 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 v1 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 v2 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 v3 = _mm_shuffle_ps(v, v, _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(m[0], v0); - __m128 m1 = _mm_mul_ps(m[1], v1); - __m128 m2 = _mm_mul_ps(m[2], v2); - __m128 m3 = _mm_mul_ps(m[3], v3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - return a2; -} - -GLM_FUNC_QUALIFIER __m128 glm_vec4_mul_mat4(glm_vec4 v, glm_vec4 const m[4]) -{ - __m128 i0 = m[0]; - __m128 i1 = m[1]; - __m128 i2 = m[2]; - __m128 i3 = m[3]; - - __m128 m0 = _mm_mul_ps(v, i0); - __m128 m1 = _mm_mul_ps(v, i1); - __m128 m2 = _mm_mul_ps(v, i2); - __m128 m3 = _mm_mul_ps(v, i3); - - __m128 u0 = _mm_unpacklo_ps(m0, m1); - __m128 u1 = _mm_unpackhi_ps(m0, m1); - __m128 a0 = _mm_add_ps(u0, u1); - - __m128 u2 = _mm_unpacklo_ps(m2, m3); - __m128 u3 = _mm_unpackhi_ps(m2, m3); - __m128 a1 = _mm_add_ps(u2, u3); - - __m128 f0 = _mm_movelh_ps(a0, a1); - __m128 f1 = _mm_movehl_ps(a1, a0); - __m128 f2 = _mm_add_ps(f0, f1); - - return f2; -} - -GLM_FUNC_QUALIFIER void glm_mat4_mul(glm_vec4 const in1[4], glm_vec4 const in2[4], glm_vec4 out[4]) -{ - { - __m128 e0 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[0], in2[0], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[0] = a2; - } - - { - __m128 e0 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[1], in2[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[1] = a2; - } - - { - __m128 e0 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[2], in2[2], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[2] = a2; - } - - { - //(__m128&)_mm_shuffle_epi32(__m128i&)in2[0], _MM_SHUFFLE(3, 3, 3, 3)) - __m128 e0 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 e1 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 e2 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 e3 = _mm_shuffle_ps(in2[3], in2[3], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 m0 = _mm_mul_ps(in1[0], e0); - __m128 m1 = _mm_mul_ps(in1[1], e1); - __m128 m2 = _mm_mul_ps(in1[2], e2); - __m128 m3 = _mm_mul_ps(in1[3], e3); - - __m128 a0 = _mm_add_ps(m0, m1); - __m128 a1 = _mm_add_ps(m2, m3); - __m128 a2 = _mm_add_ps(a0, a1); - - out[3] = a2; - } -} - -GLM_FUNC_QUALIFIER void glm_mat4_transpose(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 tmp0 = _mm_shuffle_ps(in[0], in[1], 0x44); - __m128 tmp2 = _mm_shuffle_ps(in[0], in[1], 0xEE); - __m128 tmp1 = _mm_shuffle_ps(in[2], in[3], 0x44); - __m128 tmp3 = _mm_shuffle_ps(in[2], in[3], 0xEE); - - out[0] = _mm_shuffle_ps(tmp0, tmp1, 0x88); - out[1] = _mm_shuffle_ps(tmp0, tmp1, 0xDD); - out[2] = _mm_shuffle_ps(tmp2, tmp3, 0x88); - out[3] = _mm_shuffle_ps(tmp2, tmp3, 0xDD); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_highp(glm_vec4 const in[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - return Det0; -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant_lowp(glm_vec4 const m[4]) -{ - // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128( - - //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - // First 2 columns - __m128 Swp2A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 1, 1, 2))); - __m128 Swp3A = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(3, 2, 3, 3))); - __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); - - // Second 2 columns - __m128 Swp2B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(3, 2, 3, 3))); - __m128 Swp3B = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(0, 1, 1, 2))); - __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); - - // Columns subtraction - __m128 SubE = _mm_sub_ps(MulA, MulB); - - // Last 2 rows - __m128 Swp2C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[2]), _MM_SHUFFLE(0, 0, 1, 2))); - __m128 Swp3C = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[3]), _MM_SHUFFLE(1, 2, 0, 0))); - __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); - __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); - - //vec<4, T, Q> DetCof( - // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - __m128 SubFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubE), _MM_SHUFFLE(2, 1, 0, 0))); - __m128 SwpFacA = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(0, 0, 0, 1))); - __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); - - __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); - __m128 SubFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpB), _MM_SHUFFLE(3, 1, 1, 0)));//SubF[0], SubE[3], SubE[3], SubE[1]; - __m128 SwpFacB = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(1, 1, 2, 2))); - __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); - - __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); - - __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); - __m128 SubFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(SubTmpC), _MM_SHUFFLE(3, 3, 2, 0))); - __m128 SwpFacC = _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(m[1]), _MM_SHUFFLE(2, 3, 3, 3))); - __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); - - __m128 AddRes = _mm_add_ps(SubRes, MulFacC); - __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); - - //return m[0][0] * DetCof[0] - // + m[0][1] * DetCof[1] - // + m[0][2] * DetCof[2] - // + m[0][3] * DetCof[3]; - - return glm_vec4_dot(m[0], DetCof); -} - -GLM_FUNC_QUALIFIER glm_vec4 glm_mat4_determinant(glm_vec4 const m[4]) -{ - // _mm_castsi128_ps(_mm_shuffle_epi32(_mm_castps_si128(add) - - //T SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - //T SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - //T SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - //T SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - //T SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - //T SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - - // First 2 columns - __m128 Swp2A = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 1, 1, 2)); - __m128 Swp3A = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(3, 2, 3, 3)); - __m128 MulA = _mm_mul_ps(Swp2A, Swp3A); - - // Second 2 columns - __m128 Swp2B = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(3, 2, 3, 3)); - __m128 Swp3B = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(0, 1, 1, 2)); - __m128 MulB = _mm_mul_ps(Swp2B, Swp3B); - - // Columns subtraction - __m128 SubE = _mm_sub_ps(MulA, MulB); - - // Last 2 rows - __m128 Swp2C = _mm_shuffle_ps(m[2], m[2], _MM_SHUFFLE(0, 0, 1, 2)); - __m128 Swp3C = _mm_shuffle_ps(m[3], m[3], _MM_SHUFFLE(1, 2, 0, 0)); - __m128 MulC = _mm_mul_ps(Swp2C, Swp3C); - __m128 SubF = _mm_sub_ps(_mm_movehl_ps(MulC, MulC), MulC); - - //vec<4, T, Q> DetCof( - // + (m[1][1] * SubFactor00 - m[1][2] * SubFactor01 + m[1][3] * SubFactor02), - // - (m[1][0] * SubFactor00 - m[1][2] * SubFactor03 + m[1][3] * SubFactor04), - // + (m[1][0] * SubFactor01 - m[1][1] * SubFactor03 + m[1][3] * SubFactor05), - // - (m[1][0] * SubFactor02 - m[1][1] * SubFactor04 + m[1][2] * SubFactor05)); - - __m128 SubFacA = _mm_shuffle_ps(SubE, SubE, _MM_SHUFFLE(2, 1, 0, 0)); - __m128 SwpFacA = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(0, 0, 0, 1)); - __m128 MulFacA = _mm_mul_ps(SwpFacA, SubFacA); - - __m128 SubTmpB = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(0, 0, 3, 1)); - __m128 SubFacB = _mm_shuffle_ps(SubTmpB, SubTmpB, _MM_SHUFFLE(3, 1, 1, 0));//SubF[0], SubE[3], SubE[3], SubE[1]; - __m128 SwpFacB = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(1, 1, 2, 2)); - __m128 MulFacB = _mm_mul_ps(SwpFacB, SubFacB); - - __m128 SubRes = _mm_sub_ps(MulFacA, MulFacB); - - __m128 SubTmpC = _mm_shuffle_ps(SubE, SubF, _MM_SHUFFLE(1, 0, 2, 2)); - __m128 SubFacC = _mm_shuffle_ps(SubTmpC, SubTmpC, _MM_SHUFFLE(3, 3, 2, 0)); - __m128 SwpFacC = _mm_shuffle_ps(m[1], m[1], _MM_SHUFFLE(2, 3, 3, 3)); - __m128 MulFacC = _mm_mul_ps(SwpFacC, SubFacC); - - __m128 AddRes = _mm_add_ps(SubRes, MulFacC); - __m128 DetCof = _mm_mul_ps(AddRes, _mm_setr_ps( 1.0f,-1.0f, 1.0f,-1.0f)); - - //return m[0][0] * DetCof[0] - // + m[0][1] * DetCof[1] - // + m[0][2] * DetCof[2] - // + m[0][3] * DetCof[3]; - - return glm_vec4_dot(m[0], DetCof); -} - -GLM_FUNC_QUALIFIER void glm_mat4_inverse(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - __m128 Rcp0 = _mm_div_ps(_mm_set1_ps(1.0f), Det0); - //__m128 Rcp0 = _mm_rcp_ps(Det0); - - // Inverse /= Determinant; - out[0] = _mm_mul_ps(Inv0, Rcp0); - out[1] = _mm_mul_ps(Inv1, Rcp0); - out[2] = _mm_mul_ps(Inv2, Rcp0); - out[3] = _mm_mul_ps(Inv3, Rcp0); -} - -GLM_FUNC_QUALIFIER void glm_mat4_inverse_lowp(glm_vec4 const in[4], glm_vec4 out[4]) -{ - __m128 Fac0; - { - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor00 = m[2][2] * m[3][3] - m[3][2] * m[2][3]; - // valType SubFactor06 = m[1][2] * m[3][3] - m[3][2] * m[1][3]; - // valType SubFactor13 = m[1][2] * m[2][3] - m[2][2] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac0 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac1; - { - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor01 = m[2][1] * m[3][3] - m[3][1] * m[2][3]; - // valType SubFactor07 = m[1][1] * m[3][3] - m[3][1] * m[1][3]; - // valType SubFactor14 = m[1][1] * m[2][3] - m[2][1] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac1 = _mm_sub_ps(Mul00, Mul01); - } - - - __m128 Fac2; - { - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor02 = m[2][1] * m[3][2] - m[3][1] * m[2][2]; - // valType SubFactor08 = m[1][1] * m[3][2] - m[3][1] * m[1][2]; - // valType SubFactor15 = m[1][1] * m[2][2] - m[2][1] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac2 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac3; - { - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor03 = m[2][0] * m[3][3] - m[3][0] * m[2][3]; - // valType SubFactor09 = m[1][0] * m[3][3] - m[3][0] * m[1][3]; - // valType SubFactor16 = m[1][0] * m[2][3] - m[2][0] * m[1][3]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(3, 3, 3, 3)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac3 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac4; - { - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor04 = m[2][0] * m[3][2] - m[3][0] * m[2][2]; - // valType SubFactor10 = m[1][0] * m[3][2] - m[3][0] * m[1][2]; - // valType SubFactor17 = m[1][0] * m[2][2] - m[2][0] * m[1][2]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(2, 2, 2, 2)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac4 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 Fac5; - { - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor05 = m[2][0] * m[3][1] - m[3][0] * m[2][1]; - // valType SubFactor12 = m[1][0] * m[3][1] - m[3][0] * m[1][1]; - // valType SubFactor18 = m[1][0] * m[2][1] - m[2][0] * m[1][1]; - - __m128 Swp0a = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Swp0b = _mm_shuffle_ps(in[3], in[2], _MM_SHUFFLE(0, 0, 0, 0)); - - __m128 Swp00 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Swp01 = _mm_shuffle_ps(Swp0a, Swp0a, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp02 = _mm_shuffle_ps(Swp0b, Swp0b, _MM_SHUFFLE(2, 0, 0, 0)); - __m128 Swp03 = _mm_shuffle_ps(in[2], in[1], _MM_SHUFFLE(1, 1, 1, 1)); - - __m128 Mul00 = _mm_mul_ps(Swp00, Swp01); - __m128 Mul01 = _mm_mul_ps(Swp02, Swp03); - Fac5 = _mm_sub_ps(Mul00, Mul01); - } - - __m128 SignA = _mm_set_ps( 1.0f,-1.0f, 1.0f,-1.0f); - __m128 SignB = _mm_set_ps(-1.0f, 1.0f,-1.0f, 1.0f); - - // m[1][0] - // m[0][0] - // m[0][0] - // m[0][0] - __m128 Temp0 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Vec0 = _mm_shuffle_ps(Temp0, Temp0, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][1] - // m[0][1] - // m[0][1] - // m[0][1] - __m128 Temp1 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(1, 1, 1, 1)); - __m128 Vec1 = _mm_shuffle_ps(Temp1, Temp1, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][2] - // m[0][2] - // m[0][2] - // m[0][2] - __m128 Temp2 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(2, 2, 2, 2)); - __m128 Vec2 = _mm_shuffle_ps(Temp2, Temp2, _MM_SHUFFLE(2, 2, 2, 0)); - - // m[1][3] - // m[0][3] - // m[0][3] - // m[0][3] - __m128 Temp3 = _mm_shuffle_ps(in[1], in[0], _MM_SHUFFLE(3, 3, 3, 3)); - __m128 Vec3 = _mm_shuffle_ps(Temp3, Temp3, _MM_SHUFFLE(2, 2, 2, 0)); - - // col0 - // + (Vec1[0] * Fac0[0] - Vec2[0] * Fac1[0] + Vec3[0] * Fac2[0]), - // - (Vec1[1] * Fac0[1] - Vec2[1] * Fac1[1] + Vec3[1] * Fac2[1]), - // + (Vec1[2] * Fac0[2] - Vec2[2] * Fac1[2] + Vec3[2] * Fac2[2]), - // - (Vec1[3] * Fac0[3] - Vec2[3] * Fac1[3] + Vec3[3] * Fac2[3]), - __m128 Mul00 = _mm_mul_ps(Vec1, Fac0); - __m128 Mul01 = _mm_mul_ps(Vec2, Fac1); - __m128 Mul02 = _mm_mul_ps(Vec3, Fac2); - __m128 Sub00 = _mm_sub_ps(Mul00, Mul01); - __m128 Add00 = _mm_add_ps(Sub00, Mul02); - __m128 Inv0 = _mm_mul_ps(SignB, Add00); - - // col1 - // - (Vec0[0] * Fac0[0] - Vec2[0] * Fac3[0] + Vec3[0] * Fac4[0]), - // + (Vec0[0] * Fac0[1] - Vec2[1] * Fac3[1] + Vec3[1] * Fac4[1]), - // - (Vec0[0] * Fac0[2] - Vec2[2] * Fac3[2] + Vec3[2] * Fac4[2]), - // + (Vec0[0] * Fac0[3] - Vec2[3] * Fac3[3] + Vec3[3] * Fac4[3]), - __m128 Mul03 = _mm_mul_ps(Vec0, Fac0); - __m128 Mul04 = _mm_mul_ps(Vec2, Fac3); - __m128 Mul05 = _mm_mul_ps(Vec3, Fac4); - __m128 Sub01 = _mm_sub_ps(Mul03, Mul04); - __m128 Add01 = _mm_add_ps(Sub01, Mul05); - __m128 Inv1 = _mm_mul_ps(SignA, Add01); - - // col2 - // + (Vec0[0] * Fac1[0] - Vec1[0] * Fac3[0] + Vec3[0] * Fac5[0]), - // - (Vec0[0] * Fac1[1] - Vec1[1] * Fac3[1] + Vec3[1] * Fac5[1]), - // + (Vec0[0] * Fac1[2] - Vec1[2] * Fac3[2] + Vec3[2] * Fac5[2]), - // - (Vec0[0] * Fac1[3] - Vec1[3] * Fac3[3] + Vec3[3] * Fac5[3]), - __m128 Mul06 = _mm_mul_ps(Vec0, Fac1); - __m128 Mul07 = _mm_mul_ps(Vec1, Fac3); - __m128 Mul08 = _mm_mul_ps(Vec3, Fac5); - __m128 Sub02 = _mm_sub_ps(Mul06, Mul07); - __m128 Add02 = _mm_add_ps(Sub02, Mul08); - __m128 Inv2 = _mm_mul_ps(SignB, Add02); - - // col3 - // - (Vec1[0] * Fac2[0] - Vec1[0] * Fac4[0] + Vec2[0] * Fac5[0]), - // + (Vec1[0] * Fac2[1] - Vec1[1] * Fac4[1] + Vec2[1] * Fac5[1]), - // - (Vec1[0] * Fac2[2] - Vec1[2] * Fac4[2] + Vec2[2] * Fac5[2]), - // + (Vec1[0] * Fac2[3] - Vec1[3] * Fac4[3] + Vec2[3] * Fac5[3])); - __m128 Mul09 = _mm_mul_ps(Vec0, Fac2); - __m128 Mul10 = _mm_mul_ps(Vec1, Fac4); - __m128 Mul11 = _mm_mul_ps(Vec2, Fac5); - __m128 Sub03 = _mm_sub_ps(Mul09, Mul10); - __m128 Add03 = _mm_add_ps(Sub03, Mul11); - __m128 Inv3 = _mm_mul_ps(SignA, Add03); - - __m128 Row0 = _mm_shuffle_ps(Inv0, Inv1, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row1 = _mm_shuffle_ps(Inv2, Inv3, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Row2 = _mm_shuffle_ps(Row0, Row1, _MM_SHUFFLE(2, 0, 2, 0)); - - // valType Determinant = m[0][0] * Inverse[0][0] - // + m[0][1] * Inverse[1][0] - // + m[0][2] * Inverse[2][0] - // + m[0][3] * Inverse[3][0]; - __m128 Det0 = glm_vec4_dot(in[0], Row2); - __m128 Rcp0 = _mm_rcp_ps(Det0); - //__m128 Rcp0 = _mm_div_ps(one, Det0); - // Inverse /= Determinant; - out[0] = _mm_mul_ps(Inv0, Rcp0); - out[1] = _mm_mul_ps(Inv1, Rcp0); - out[2] = _mm_mul_ps(Inv2, Rcp0); - out[3] = _mm_mul_ps(Inv3, Rcp0); -} -/* -GLM_FUNC_QUALIFIER void glm_mat4_rotate(__m128 const in[4], float Angle, float const v[3], __m128 out[4]) -{ - float a = glm::radians(Angle); - float c = cos(a); - float s = sin(a); - - glm::vec4 AxisA(v[0], v[1], v[2], float(0)); - __m128 AxisB = _mm_set_ps(AxisA.w, AxisA.z, AxisA.y, AxisA.x); - __m128 AxisC = detail::sse_nrm_ps(AxisB); - - __m128 Cos0 = _mm_set_ss(c); - __m128 CosA = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 Sin0 = _mm_set_ss(s); - __m128 SinA = _mm_shuffle_ps(Sin0, Sin0, _MM_SHUFFLE(0, 0, 0, 0)); - - // vec<3, T, Q> temp = (valType(1) - c) * axis; - __m128 Temp0 = _mm_sub_ps(one, CosA); - __m128 Temp1 = _mm_mul_ps(Temp0, AxisC); - - //Rotate[0][0] = c + temp[0] * axis[0]; - //Rotate[0][1] = 0 + temp[0] * axis[1] + s * axis[2]; - //Rotate[0][2] = 0 + temp[0] * axis[2] - s * axis[1]; - __m128 Axis0 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(0, 0, 0, 0)); - __m128 TmpA0 = _mm_mul_ps(Axis0, AxisC); - __m128 CosA0 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 1, 0)); - __m128 TmpA1 = _mm_add_ps(CosA0, TmpA0); - __m128 SinA0 = SinA;//_mm_set_ps(0.0f, s, -s, 0.0f); - __m128 TmpA2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 1, 2, 3)); - __m128 TmpA3 = _mm_mul_ps(SinA0, TmpA2); - __m128 TmpA4 = _mm_add_ps(TmpA1, TmpA3); - - //Rotate[1][0] = 0 + temp[1] * axis[0] - s * axis[2]; - //Rotate[1][1] = c + temp[1] * axis[1]; - //Rotate[1][2] = 0 + temp[1] * axis[2] + s * axis[0]; - __m128 Axis1 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(1, 1, 1, 1)); - __m128 TmpB0 = _mm_mul_ps(Axis1, AxisC); - __m128 CosA1 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 1, 0, 1)); - __m128 TmpB1 = _mm_add_ps(CosA1, TmpB0); - __m128 SinB0 = SinA;//_mm_set_ps(-s, 0.0f, s, 0.0f); - __m128 TmpB2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 0, 3, 2)); - __m128 TmpB3 = _mm_mul_ps(SinA0, TmpB2); - __m128 TmpB4 = _mm_add_ps(TmpB1, TmpB3); - - //Rotate[2][0] = 0 + temp[2] * axis[0] + s * axis[1]; - //Rotate[2][1] = 0 + temp[2] * axis[1] - s * axis[0]; - //Rotate[2][2] = c + temp[2] * axis[2]; - __m128 Axis2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(2, 2, 2, 2)); - __m128 TmpC0 = _mm_mul_ps(Axis2, AxisC); - __m128 CosA2 = _mm_shuffle_ps(Cos0, Cos0, _MM_SHUFFLE(1, 0, 1, 1)); - __m128 TmpC1 = _mm_add_ps(CosA2, TmpC0); - __m128 SinC0 = SinA;//_mm_set_ps(s, -s, 0.0f, 0.0f); - __m128 TmpC2 = _mm_shuffle_ps(AxisC, AxisC, _MM_SHUFFLE(3, 3, 0, 1)); - __m128 TmpC3 = _mm_mul_ps(SinA0, TmpC2); - __m128 TmpC4 = _mm_add_ps(TmpC1, TmpC3); - - __m128 Result[4]; - Result[0] = TmpA4; - Result[1] = TmpB4; - Result[2] = TmpC4; - Result[3] = _mm_set_ps(1, 0, 0, 0); - - //mat<4, 4, valType> Result; - //Result[0] = m[0] * Rotate[0][0] + m[1] * Rotate[0][1] + m[2] * Rotate[0][2]; - //Result[1] = m[0] * Rotate[1][0] + m[1] * Rotate[1][1] + m[2] * Rotate[1][2]; - //Result[2] = m[0] * Rotate[2][0] + m[1] * Rotate[2][1] + m[2] * Rotate[2][2]; - //Result[3] = m[3]; - //return Result; - sse_mul_ps(in, Result, out); -} -*/ -GLM_FUNC_QUALIFIER void glm_mat4_outerProduct(__m128 const& c, __m128 const& r, __m128 out[4]) -{ - out[0] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(0, 0, 0, 0))); - out[1] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(1, 1, 1, 1))); - out[2] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(2, 2, 2, 2))); - out[3] = _mm_mul_ps(c, _mm_shuffle_ps(r, r, _MM_SHUFFLE(3, 3, 3, 3))); -} - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/simd/neon.h b/src/qged/display/glm/glm/simd/neon.h deleted file mode 100644 index 07e278f4cb7..00000000000 --- a/src/qged/display/glm/glm/simd/neon.h +++ /dev/null @@ -1,186 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref simd_neon -/// @file glm/simd/neon.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_NEON_BIT -#include - -namespace glm { - namespace neon { - static float32x4_t dupq_lane(float32x4_t vsrc, int lane) { - switch(lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - case 0: return vdupq_laneq_f32(vsrc, 0); - case 1: return vdupq_laneq_f32(vsrc, 1); - case 2: return vdupq_laneq_f32(vsrc, 2); - case 3: return vdupq_laneq_f32(vsrc, 3); -#else - case 0: return vdupq_n_f32(vgetq_lane_f32(vsrc, 0)); - case 1: return vdupq_n_f32(vgetq_lane_f32(vsrc, 1)); - case 2: return vdupq_n_f32(vgetq_lane_f32(vsrc, 2)); - case 3: return vdupq_n_f32(vgetq_lane_f32(vsrc, 3)); -#endif - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); - } - - static float32x2_t dup_lane(float32x4_t vsrc, int lane) { - switch(lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - case 0: return vdup_laneq_f32(vsrc, 0); - case 1: return vdup_laneq_f32(vsrc, 1); - case 2: return vdup_laneq_f32(vsrc, 2); - case 3: return vdup_laneq_f32(vsrc, 3); -#else - case 0: return vdup_n_f32(vgetq_lane_f32(vsrc, 0)); - case 1: return vdup_n_f32(vgetq_lane_f32(vsrc, 1)); - case 2: return vdup_n_f32(vgetq_lane_f32(vsrc, 2)); - case 3: return vdup_n_f32(vgetq_lane_f32(vsrc, 3)); -#endif - } - assert(!"Unreachable code executed!"); - return vdup_n_f32(0.0f); - } - - static float32x4_t copy_lane(float32x4_t vdst, int dlane, float32x4_t vsrc, int slane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - switch(dlane) { - case 0: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 0, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 0, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 0, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 0, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 1: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 1, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 1, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 1, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 1, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 2: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 2, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 2, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 2, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 2, vsrc, 3); - } - assert(!"Unreachable code executed!"); - case 3: - switch(slane) { - case 0: return vcopyq_laneq_f32(vdst, 3, vsrc, 0); - case 1: return vcopyq_laneq_f32(vdst, 3, vsrc, 1); - case 2: return vcopyq_laneq_f32(vdst, 3, vsrc, 2); - case 3: return vcopyq_laneq_f32(vdst, 3, vsrc, 3); - } - assert(!"Unreachable code executed!"); - } -#else - - float l; - switch(slane) { - case 0: l = vgetq_lane_f32(vsrc, 0); break; - case 1: l = vgetq_lane_f32(vsrc, 1); break; - case 2: l = vgetq_lane_f32(vsrc, 2); break; - case 3: l = vgetq_lane_f32(vsrc, 3); break; - default: - assert(!"Unreachable code executed!"); - } - switch(dlane) { - case 0: return vsetq_lane_f32(l, vdst, 0); - case 1: return vsetq_lane_f32(l, vdst, 1); - case 2: return vsetq_lane_f32(l, vdst, 2); - case 3: return vsetq_lane_f32(l, vdst, 3); - } -#endif - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); - } - - static float32x4_t mul_lane(float32x4_t v, float32x4_t vlane, int lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT - switch(lane) { - case 0: return vmulq_laneq_f32(v, vlane, 0); break; - case 1: return vmulq_laneq_f32(v, vlane, 1); break; - case 2: return vmulq_laneq_f32(v, vlane, 2); break; - case 3: return vmulq_laneq_f32(v, vlane, 3); break; - default: - assert(!"Unreachable code executed!"); - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); -#else - return vmulq_f32(v, dupq_lane(vlane, lane)); -#endif - } - - static float32x4_t madd_lane(float32x4_t acc, float32x4_t v, float32x4_t vlane, int lane) { -#if GLM_ARCH & GLM_ARCH_ARMV8_BIT -#ifdef GLM_CONFIG_FORCE_FMA -# define FMADD_LANE(acc, x, y, L) do { asm volatile ("fmla %0.4s, %1.4s, %2.4s" : "+w"(acc) : "w"(x), "w"(dup_lane(y, L))); } while(0) -#else -# define FMADD_LANE(acc, x, y, L) do { acc = vmlaq_laneq_f32(acc, x, y, L); } while(0) -#endif - - switch(lane) { - case 0: - FMADD_LANE(acc, v, vlane, 0); - return acc; - case 1: - FMADD_LANE(acc, v, vlane, 1); - return acc; - case 2: - FMADD_LANE(acc, v, vlane, 2); - return acc; - case 3: - FMADD_LANE(acc, v, vlane, 3); - return acc; - default: - assert(!"Unreachable code executed!"); - } - assert(!"Unreachable code executed!"); - return vdupq_n_f32(0.0f); -# undef FMADD_LANE -#else - return vaddq_f32(acc, vmulq_f32(v, dupq_lane(vlane, lane))); -#endif - } - } //namespace neon -} // namespace glm -#endif // GLM_ARCH & GLM_ARCH_NEON_BIT diff --git a/src/qged/display/glm/glm/simd/packing.h b/src/qged/display/glm/glm/simd/packing.h deleted file mode 100644 index 81d9cc2b1f4..00000000000 --- a/src/qged/display/glm/glm/simd/packing.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref simd -/// @file glm/simd/packing.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/simd/platform.h b/src/qged/display/glm/glm/simd/platform.h deleted file mode 100644 index 7c483b861ea..00000000000 --- a/src/qged/display/glm/glm/simd/platform.h +++ /dev/null @@ -1,429 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -#pragma once - -/////////////////////////////////////////////////////////////////////////////////// -// Platform - -#define GLM_PLATFORM_UNKNOWN 0x00000000 -#define GLM_PLATFORM_WINDOWS 0x00010000 -#define GLM_PLATFORM_LINUX 0x00020000 -#define GLM_PLATFORM_APPLE 0x00040000 -//#define GLM_PLATFORM_IOS 0x00080000 -#define GLM_PLATFORM_ANDROID 0x00100000 -#define GLM_PLATFORM_CHROME_NACL 0x00200000 -#define GLM_PLATFORM_UNIX 0x00400000 -#define GLM_PLATFORM_QNXNTO 0x00800000 -#define GLM_PLATFORM_WINCE 0x01000000 -#define GLM_PLATFORM_CYGWIN 0x02000000 - -#ifdef GLM_FORCE_PLATFORM_UNKNOWN -# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN -#elif defined(__CYGWIN__) -# define GLM_PLATFORM GLM_PLATFORM_CYGWIN -#elif defined(__QNXNTO__) -# define GLM_PLATFORM GLM_PLATFORM_QNXNTO -#elif defined(__APPLE__) -# define GLM_PLATFORM GLM_PLATFORM_APPLE -#elif defined(WINCE) -# define GLM_PLATFORM GLM_PLATFORM_WINCE -#elif defined(_WIN32) -# define GLM_PLATFORM GLM_PLATFORM_WINDOWS -#elif defined(__native_client__) -# define GLM_PLATFORM GLM_PLATFORM_CHROME_NACL -#elif defined(__ANDROID__) -# define GLM_PLATFORM GLM_PLATFORM_ANDROID -#elif defined(__linux) -# define GLM_PLATFORM GLM_PLATFORM_LINUX -#elif defined(__unix) -# define GLM_PLATFORM GLM_PLATFORM_UNIX -#else -# define GLM_PLATFORM GLM_PLATFORM_UNKNOWN -#endif// - -/////////////////////////////////////////////////////////////////////////////////// -// Compiler - -#define GLM_COMPILER_UNKNOWN 0x00000000 - -// Intel -#define GLM_COMPILER_INTEL 0x00100000 -#define GLM_COMPILER_INTEL14 0x00100040 -#define GLM_COMPILER_INTEL15 0x00100050 -#define GLM_COMPILER_INTEL16 0x00100060 -#define GLM_COMPILER_INTEL17 0x00100070 - -// Visual C++ defines -#define GLM_COMPILER_VC 0x01000000 -#define GLM_COMPILER_VC12 0x01000001 -#define GLM_COMPILER_VC14 0x01000002 -#define GLM_COMPILER_VC15 0x01000003 -#define GLM_COMPILER_VC15_3 0x01000004 -#define GLM_COMPILER_VC15_5 0x01000005 -#define GLM_COMPILER_VC15_6 0x01000006 -#define GLM_COMPILER_VC15_7 0x01000007 -#define GLM_COMPILER_VC15_8 0x01000008 -#define GLM_COMPILER_VC15_9 0x01000009 -#define GLM_COMPILER_VC16 0x0100000A - -// GCC defines -#define GLM_COMPILER_GCC 0x02000000 -#define GLM_COMPILER_GCC46 0x020000D0 -#define GLM_COMPILER_GCC47 0x020000E0 -#define GLM_COMPILER_GCC48 0x020000F0 -#define GLM_COMPILER_GCC49 0x02000100 -#define GLM_COMPILER_GCC5 0x02000200 -#define GLM_COMPILER_GCC6 0x02000300 -#define GLM_COMPILER_GCC7 0x02000400 -#define GLM_COMPILER_GCC8 0x02000500 - -// CUDA -#define GLM_COMPILER_CUDA 0x10000000 -#define GLM_COMPILER_CUDA75 0x10000001 -#define GLM_COMPILER_CUDA80 0x10000002 -#define GLM_COMPILER_CUDA90 0x10000004 - -// SYCL -#define GLM_COMPILER_SYCL 0x00300000 - -// Clang -#define GLM_COMPILER_CLANG 0x20000000 -#define GLM_COMPILER_CLANG34 0x20000050 -#define GLM_COMPILER_CLANG35 0x20000060 -#define GLM_COMPILER_CLANG36 0x20000070 -#define GLM_COMPILER_CLANG37 0x20000080 -#define GLM_COMPILER_CLANG38 0x20000090 -#define GLM_COMPILER_CLANG39 0x200000A0 -#define GLM_COMPILER_CLANG40 0x200000B0 -#define GLM_COMPILER_CLANG41 0x200000C0 -#define GLM_COMPILER_CLANG42 0x200000D0 - -// Build model -#define GLM_MODEL_32 0x00000010 -#define GLM_MODEL_64 0x00000020 - -// Force generic C++ compiler -#ifdef GLM_FORCE_COMPILER_UNKNOWN -# define GLM_COMPILER GLM_COMPILER_UNKNOWN - -#elif defined(__INTEL_COMPILER) -# if __INTEL_COMPILER >= 1700 -# define GLM_COMPILER GLM_COMPILER_INTEL17 -# elif __INTEL_COMPILER >= 1600 -# define GLM_COMPILER GLM_COMPILER_INTEL16 -# elif __INTEL_COMPILER >= 1500 -# define GLM_COMPILER GLM_COMPILER_INTEL15 -# elif __INTEL_COMPILER >= 1400 -# define GLM_COMPILER GLM_COMPILER_INTEL14 -# elif __INTEL_COMPILER < 1400 -# error "GLM requires ICC 2013 SP1 or newer" -# endif - -// CUDA -#elif defined(__CUDACC__) -# if !defined(CUDA_VERSION) && !defined(GLM_FORCE_CUDA) -# include // make sure version is defined since nvcc does not define it itself! -# endif -# if CUDA_VERSION >= 8000 -# define GLM_COMPILER GLM_COMPILER_CUDA80 -# elif CUDA_VERSION >= 7500 -# define GLM_COMPILER GLM_COMPILER_CUDA75 -# elif CUDA_VERSION >= 7000 -# define GLM_COMPILER GLM_COMPILER_CUDA70 -# elif CUDA_VERSION < 7000 -# error "GLM requires CUDA 7.0 or higher" -# endif - -// SYCL -#elif defined(__SYCL_DEVICE_ONLY__) -# define GLM_COMPILER GLM_COMPILER_SYCL - -// Clang -#elif defined(__clang__) -# if defined(__apple_build_version__) -# if (__clang_major__ < 6) -# error "GLM requires Clang 3.4 / Apple Clang 6.0 or higher" -# elif __clang_major__ == 6 && __clang_minor__ == 0 -# define GLM_COMPILER GLM_COMPILER_CLANG35 -# elif __clang_major__ == 6 && __clang_minor__ >= 1 -# define GLM_COMPILER GLM_COMPILER_CLANG36 -# elif __clang_major__ >= 7 -# define GLM_COMPILER GLM_COMPILER_CLANG37 -# endif -# else -# if ((__clang_major__ == 3) && (__clang_minor__ < 4)) || (__clang_major__ < 3) -# error "GLM requires Clang 3.4 or higher" -# elif __clang_major__ == 3 && __clang_minor__ == 4 -# define GLM_COMPILER GLM_COMPILER_CLANG34 -# elif __clang_major__ == 3 && __clang_minor__ == 5 -# define GLM_COMPILER GLM_COMPILER_CLANG35 -# elif __clang_major__ == 3 && __clang_minor__ == 6 -# define GLM_COMPILER GLM_COMPILER_CLANG36 -# elif __clang_major__ == 3 && __clang_minor__ == 7 -# define GLM_COMPILER GLM_COMPILER_CLANG37 -# elif __clang_major__ == 3 && __clang_minor__ == 8 -# define GLM_COMPILER GLM_COMPILER_CLANG38 -# elif __clang_major__ == 3 && __clang_minor__ >= 9 -# define GLM_COMPILER GLM_COMPILER_CLANG39 -# elif __clang_major__ == 4 && __clang_minor__ == 0 -# define GLM_COMPILER GLM_COMPILER_CLANG40 -# elif __clang_major__ == 4 && __clang_minor__ == 1 -# define GLM_COMPILER GLM_COMPILER_CLANG41 -# elif __clang_major__ == 4 && __clang_minor__ >= 2 -# define GLM_COMPILER GLM_COMPILER_CLANG42 -# elif __clang_major__ >= 4 -# define GLM_COMPILER GLM_COMPILER_CLANG42 -# endif -# endif - -// Visual C++ -#elif defined(_MSC_VER) -# if _MSC_VER >= 1920 -# define GLM_COMPILER GLM_COMPILER_VC16 -# elif _MSC_VER >= 1916 -# define GLM_COMPILER GLM_COMPILER_VC15_9 -# elif _MSC_VER >= 1915 -# define GLM_COMPILER GLM_COMPILER_VC15_8 -# elif _MSC_VER >= 1914 -# define GLM_COMPILER GLM_COMPILER_VC15_7 -# elif _MSC_VER >= 1913 -# define GLM_COMPILER GLM_COMPILER_VC15_6 -# elif _MSC_VER >= 1912 -# define GLM_COMPILER GLM_COMPILER_VC15_5 -# elif _MSC_VER >= 1911 -# define GLM_COMPILER GLM_COMPILER_VC15_3 -# elif _MSC_VER >= 1910 -# define GLM_COMPILER GLM_COMPILER_VC15 -# elif _MSC_VER >= 1900 -# define GLM_COMPILER GLM_COMPILER_VC14 -# elif _MSC_VER >= 1800 -# define GLM_COMPILER GLM_COMPILER_VC12 -# elif _MSC_VER < 1800 -# error "GLM requires Visual C++ 12 - 2013 or higher" -# endif//_MSC_VER - -// G++ -#elif defined(__GNUC__) || defined(__MINGW32__) -# if __GNUC__ >= 8 -# define GLM_COMPILER GLM_COMPILER_GCC8 -# elif __GNUC__ >= 7 -# define GLM_COMPILER GLM_COMPILER_GCC7 -# elif __GNUC__ >= 6 -# define GLM_COMPILER GLM_COMPILER_GCC6 -# elif __GNUC__ >= 5 -# define GLM_COMPILER GLM_COMPILER_GCC5 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 9 -# define GLM_COMPILER GLM_COMPILER_GCC49 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 8 -# define GLM_COMPILER GLM_COMPILER_GCC48 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 7 -# define GLM_COMPILER GLM_COMPILER_GCC47 -# elif __GNUC__ == 4 && __GNUC_MINOR__ >= 6 -# define GLM_COMPILER GLM_COMPILER_GCC46 -# elif ((__GNUC__ == 4) && (__GNUC_MINOR__ < 6)) || (__GNUC__ < 4) -# error "GLM requires GCC 4.6 or higher" -# endif - -#else -# define GLM_COMPILER GLM_COMPILER_UNKNOWN -#endif - -#ifndef GLM_COMPILER -# error "GLM_COMPILER undefined, your compiler may not be supported by GLM. Add #define GLM_COMPILER 0 to ignore this message." -#endif//GLM_COMPILER - -/////////////////////////////////////////////////////////////////////////////////// -// Instruction sets - -// User defines: GLM_FORCE_PURE GLM_FORCE_INTRINSICS GLM_FORCE_SSE2 GLM_FORCE_SSE3 GLM_FORCE_AVX GLM_FORCE_AVX2 GLM_FORCE_AVX2 - -#define GLM_ARCH_MIPS_BIT (0x10000000) -#define GLM_ARCH_PPC_BIT (0x20000000) -#define GLM_ARCH_ARM_BIT (0x40000000) -#define GLM_ARCH_ARMV8_BIT (0x01000000) -#define GLM_ARCH_X86_BIT (0x80000000) - -#define GLM_ARCH_SIMD_BIT (0x00001000) - -#define GLM_ARCH_NEON_BIT (0x00000001) -#define GLM_ARCH_SSE_BIT (0x00000002) -#define GLM_ARCH_SSE2_BIT (0x00000004) -#define GLM_ARCH_SSE3_BIT (0x00000008) -#define GLM_ARCH_SSSE3_BIT (0x00000010) -#define GLM_ARCH_SSE41_BIT (0x00000020) -#define GLM_ARCH_SSE42_BIT (0x00000040) -#define GLM_ARCH_AVX_BIT (0x00000080) -#define GLM_ARCH_AVX2_BIT (0x00000100) - -#define GLM_ARCH_UNKNOWN (0) -#define GLM_ARCH_X86 (GLM_ARCH_X86_BIT) -#define GLM_ARCH_SSE (GLM_ARCH_SSE_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_X86) -#define GLM_ARCH_SSE2 (GLM_ARCH_SSE2_BIT | GLM_ARCH_SSE) -#define GLM_ARCH_SSE3 (GLM_ARCH_SSE3_BIT | GLM_ARCH_SSE2) -#define GLM_ARCH_SSSE3 (GLM_ARCH_SSSE3_BIT | GLM_ARCH_SSE3) -#define GLM_ARCH_SSE41 (GLM_ARCH_SSE41_BIT | GLM_ARCH_SSSE3) -#define GLM_ARCH_SSE42 (GLM_ARCH_SSE42_BIT | GLM_ARCH_SSE41) -#define GLM_ARCH_AVX (GLM_ARCH_AVX_BIT | GLM_ARCH_SSE42) -#define GLM_ARCH_AVX2 (GLM_ARCH_AVX2_BIT | GLM_ARCH_AVX) -#define GLM_ARCH_ARM (GLM_ARCH_ARM_BIT) -#define GLM_ARCH_ARMV8 (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM | GLM_ARCH_ARMV8_BIT) -#define GLM_ARCH_NEON (GLM_ARCH_NEON_BIT | GLM_ARCH_SIMD_BIT | GLM_ARCH_ARM) -#define GLM_ARCH_MIPS (GLM_ARCH_MIPS_BIT) -#define GLM_ARCH_PPC (GLM_ARCH_PPC_BIT) - -#if defined(GLM_FORCE_ARCH_UNKNOWN) || defined(GLM_FORCE_PURE) -# define GLM_ARCH GLM_ARCH_UNKNOWN -#elif defined(GLM_FORCE_NEON) -# if __ARM_ARCH >= 8 -# define GLM_ARCH (GLM_ARCH_ARMV8) -# else -# define GLM_ARCH (GLM_ARCH_NEON) -# endif -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_AVX2) -# define GLM_ARCH (GLM_ARCH_AVX2) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_AVX) -# define GLM_ARCH (GLM_ARCH_AVX) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE42) -# define GLM_ARCH (GLM_ARCH_SSE42) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE41) -# define GLM_ARCH (GLM_ARCH_SSE41) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSSE3) -# define GLM_ARCH (GLM_ARCH_SSSE3) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE3) -# define GLM_ARCH (GLM_ARCH_SSE3) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE2) -# define GLM_ARCH (GLM_ARCH_SSE2) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_SSE) -# define GLM_ARCH (GLM_ARCH_SSE) -# define GLM_FORCE_INTRINSICS -#elif defined(GLM_FORCE_INTRINSICS) && !defined(GLM_FORCE_XYZW_ONLY) -# if defined(__AVX2__) -# define GLM_ARCH (GLM_ARCH_AVX2) -# elif defined(__AVX__) -# define GLM_ARCH (GLM_ARCH_AVX) -# elif defined(__SSE4_2__) -# define GLM_ARCH (GLM_ARCH_SSE42) -# elif defined(__SSE4_1__) -# define GLM_ARCH (GLM_ARCH_SSE41) -# elif defined(__SSSE3__) -# define GLM_ARCH (GLM_ARCH_SSSE3) -# elif defined(__SSE3__) -# define GLM_ARCH (GLM_ARCH_SSE3) -# elif defined(__SSE2__) || defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86_FP) -# define GLM_ARCH (GLM_ARCH_SSE2) -# elif defined(__i386__) -# define GLM_ARCH (GLM_ARCH_X86) -# elif defined(__ARM_ARCH) && (__ARM_ARCH >= 8) -# define GLM_ARCH (GLM_ARCH_ARMV8) -# elif defined(__ARM_NEON) -# define GLM_ARCH (GLM_ARCH_ARM | GLM_ARCH_NEON) -# elif defined(__arm__ ) || defined(_M_ARM) -# define GLM_ARCH (GLM_ARCH_ARM) -# elif defined(__mips__ ) -# define GLM_ARCH (GLM_ARCH_MIPS) -# elif defined(__powerpc__ ) || defined(_M_PPC) -# define GLM_ARCH (GLM_ARCH_PPC) -# else -# define GLM_ARCH (GLM_ARCH_UNKNOWN) -# endif -#else -# if defined(__x86_64__) || defined(_M_X64) || defined(_M_IX86) || defined(__i386__) -# define GLM_ARCH (GLM_ARCH_X86) -# elif defined(__arm__) || defined(_M_ARM) -# define GLM_ARCH (GLM_ARCH_ARM) -# elif defined(__powerpc__) || defined(_M_PPC) -# define GLM_ARCH (GLM_ARCH_PPC) -# elif defined(__mips__) -# define GLM_ARCH (GLM_ARCH_MIPS) -# else -# define GLM_ARCH (GLM_ARCH_UNKNOWN) -# endif -#endif - -#if GLM_ARCH & GLM_ARCH_AVX2_BIT -# include -#elif GLM_ARCH & GLM_ARCH_AVX_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE42_BIT -# if GLM_COMPILER & GLM_COMPILER_CLANG -# include -# endif -# include -#elif GLM_ARCH & GLM_ARCH_SSE41_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSSE3_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE3_BIT -# include -#elif GLM_ARCH & GLM_ARCH_SSE2_BIT -# include -#elif GLM_ARCH & GLM_ARCH_NEON_BIT -# include "neon.h" -#endif//GLM_ARCH - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - typedef __m128 glm_f32vec4; - typedef __m128i glm_i32vec4; - typedef __m128i glm_u32vec4; - typedef __m128d glm_f64vec2; - typedef __m128i glm_i64vec2; - typedef __m128i glm_u64vec2; - - typedef glm_f32vec4 glm_vec4; - typedef glm_i32vec4 glm_ivec4; - typedef glm_u32vec4 glm_uvec4; - typedef glm_f64vec2 glm_dvec2; -#endif - -#if GLM_ARCH & GLM_ARCH_AVX_BIT - typedef __m256d glm_f64vec4; - typedef glm_f64vec4 glm_dvec4; -#endif - -#if GLM_ARCH & GLM_ARCH_AVX2_BIT - typedef __m256i glm_i64vec4; - typedef __m256i glm_u64vec4; -#endif - -#if GLM_ARCH & GLM_ARCH_NEON_BIT - typedef float32x4_t glm_f32vec4; - typedef int32x4_t glm_i32vec4; - typedef uint32x4_t glm_u32vec4; -#endif diff --git a/src/qged/display/glm/glm/simd/trigonometric.h b/src/qged/display/glm/glm/simd/trigonometric.h deleted file mode 100644 index 9aa90e17281..00000000000 --- a/src/qged/display/glm/glm/simd/trigonometric.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref simd -/// @file glm/simd/trigonometric.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT - diff --git a/src/qged/display/glm/glm/simd/vector_relational.h b/src/qged/display/glm/glm/simd/vector_relational.h deleted file mode 100644 index 885518a71e4..00000000000 --- a/src/qged/display/glm/glm/simd/vector_relational.h +++ /dev/null @@ -1,39 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref simd -/// @file glm/simd/vector_relational.h - -#pragma once - -#if GLM_ARCH & GLM_ARCH_SSE2_BIT - -#endif//GLM_ARCH & GLM_ARCH_SSE2_BIT diff --git a/src/qged/display/glm/glm/trigonometric.hpp b/src/qged/display/glm/glm/trigonometric.hpp deleted file mode 100644 index 682a004e299..00000000000 --- a/src/qged/display/glm/glm/trigonometric.hpp +++ /dev/null @@ -1,241 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/trigonometric.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions -/// -/// @defgroup core_func_trigonometric Angle and Trigonometry Functions -/// @ingroup core -/// -/// Function parameters specified as angle are assumed to be in units of radians. -/// In no case will any of these functions result in a divide by zero error. If -/// the divisor of a ratio is 0, then results will be undefined. -/// -/// These all operate component-wise. The description is per component. -/// -/// Include to use these core features. -/// -/// @see ext_vector_trigonometric - -#pragma once - -#include "detail/setup.hpp" -#include "detail/qualifier.hpp" - -namespace glm -{ - /// @addtogroup core_func_trigonometric - /// @{ - - /// Converts degrees to radians and returns the result. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL radians man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec radians(vec const& degrees); - - /// Converts radians to degrees and returns the result. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL degrees man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec degrees(vec const& radians); - - /// The standard trigonometric sine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec sin(vec const& angle); - - /// The standard trigonometric cosine function. - /// The values returned by this function will range from [-1, 1]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL cos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec cos(vec const& angle); - - /// The standard trigonometric tangent function. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL tan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec tan(vec const& angle); - - /// Arc sine. Returns an angle whose sine is x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// Results are undefined if |x| > 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL asin man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec asin(vec const& x); - - /// Arc cosine. Returns an angle whose sine is x. - /// The range of values returned by this function is [0, PI]. - /// Results are undefined if |x| > 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL acos man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec acos(vec const& x); - - /// Arc tangent. Returns an angle whose tangent is y/x. - /// The signs of x and y are used to determine what - /// quadrant the angle is in. The range of values returned - /// by this function is [-PI, PI]. Results are undefined - /// if x and y are both 0. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atan(vec const& y, vec const& x); - - /// Arc tangent. Returns an angle whose tangent is y_over_x. - /// The range of values returned by this function is [-PI/2, PI/2]. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atan man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atan(vec const& y_over_x); - - /// Returns the hyperbolic sine function, (exp(x) - exp(-x)) / 2 - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL sinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec sinh(vec const& angle); - - /// Returns the hyperbolic cosine function, (exp(x) + exp(-x)) / 2 - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL cosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec cosh(vec const& angle); - - /// Returns the hyperbolic tangent function, sinh(angle) / cosh(angle) - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL tanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec tanh(vec const& angle); - - /// Arc hyperbolic sine; returns the inverse of sinh. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL asinh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec asinh(vec const& x); - - /// Arc hyperbolic cosine; returns the non-negative inverse - /// of cosh. Results are undefined if x < 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL acosh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec acosh(vec const& x); - - /// Arc hyperbolic tangent; returns the inverse of tanh. - /// Results are undefined if abs(x) >= 1. - /// - /// @tparam L Integer between 1 and 4 included that qualify the dimension of the vector - /// @tparam T Floating-point scalar types - /// @tparam Q Value from qualifier enum - /// - /// @see GLSL atanh man page - /// @see GLSL 4.20.8 specification, section 8.1 Angle and Trigonometry Functions - template - GLM_FUNC_DECL vec atanh(vec const& x); - - /// @} -}//namespace glm - -#include "detail/func_trigonometric.inl" diff --git a/src/qged/display/glm/glm/vec2.hpp b/src/qged/display/glm/glm/vec2.hpp deleted file mode 100644 index d336305ff87..00000000000 --- a/src/qged/display/glm/glm/vec2.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/vec2.hpp - -#pragma once -#include "./ext/vector_bool2.hpp" -#include "./ext/vector_bool2_precision.hpp" -#include "./ext/vector_float2.hpp" -#include "./ext/vector_float2_precision.hpp" -#include "./ext/vector_double2.hpp" -#include "./ext/vector_double2_precision.hpp" -#include "./ext/vector_int2.hpp" -#include "./ext/vector_int2_sized.hpp" -#include "./ext/vector_uint2.hpp" -#include "./ext/vector_uint2_sized.hpp" diff --git a/src/qged/display/glm/glm/vec3.hpp b/src/qged/display/glm/glm/vec3.hpp deleted file mode 100644 index 8b859297b05..00000000000 --- a/src/qged/display/glm/glm/vec3.hpp +++ /dev/null @@ -1,45 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/vec3.hpp - -#pragma once -#include "./ext/vector_bool3.hpp" -#include "./ext/vector_bool3_precision.hpp" -#include "./ext/vector_float3.hpp" -#include "./ext/vector_float3_precision.hpp" -#include "./ext/vector_double3.hpp" -#include "./ext/vector_double3_precision.hpp" -#include "./ext/vector_int3.hpp" -#include "./ext/vector_int3_sized.hpp" -#include "./ext/vector_uint3.hpp" -#include "./ext/vector_uint3_sized.hpp" diff --git a/src/qged/display/glm/glm/vec4.hpp b/src/qged/display/glm/glm/vec4.hpp deleted file mode 100644 index 57c8203147b..00000000000 --- a/src/qged/display/glm/glm/vec4.hpp +++ /dev/null @@ -1,46 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/vec4.hpp - -#pragma once -#include "./ext/vector_bool4.hpp" -#include "./ext/vector_bool4_precision.hpp" -#include "./ext/vector_float4.hpp" -#include "./ext/vector_float4_precision.hpp" -#include "./ext/vector_double4.hpp" -#include "./ext/vector_double4_precision.hpp" -#include "./ext/vector_int4.hpp" -#include "./ext/vector_int4_sized.hpp" -#include "./ext/vector_uint4.hpp" -#include "./ext/vector_uint4_sized.hpp" - diff --git a/src/qged/display/glm/glm/vector_relational.hpp b/src/qged/display/glm/glm/vector_relational.hpp deleted file mode 100644 index 7843c1fbd96..00000000000 --- a/src/qged/display/glm/glm/vector_relational.hpp +++ /dev/null @@ -1,152 +0,0 @@ -/* - * OpenGL Mathematics (GLM) - * -------------------------------------------------------------------------------- - * GLM is licensed under The Happy Bunny License or MIT License - * - * BRL-CAD will use glm under the standard MIT license - * - * ================================================================================ - * The MIT License - * -------------------------------------------------------------------------------- - * Copyright (c) 2005 - G-Truc Creation - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - -/// @ref core -/// @file glm/vector_relational.hpp -/// -/// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions -/// -/// @defgroup core_func_vector_relational Vector Relational Functions -/// @ingroup core -/// -/// Relational and equality operators (<, <=, >, >=, ==, !=) are defined to -/// operate on scalars and produce scalar Boolean results. For vector results, -/// use the following built-in functions. -/// -/// In all cases, the sizes of all the input and return vectors for any particular -/// call must match. -/// -/// Include to use these core features. -/// -/// @see ext_vector_relational - -#pragma once - -#include "detail/qualifier.hpp" -#include "detail/setup.hpp" - -namespace glm -{ - /// @addtogroup core_func_vector_relational - /// @{ - - /// Returns the component-wise comparison result of x < y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL lessThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec lessThan(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x <= y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL lessThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec lessThanEqual(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x > y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL greaterThan man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThan(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x >= y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point or integer scalar type. - /// - /// @see GLSL greaterThanEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec greaterThanEqual(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x == y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point, integer or bool scalar type. - /// - /// @see GLSL equal man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec equal(vec const& x, vec const& y); - - /// Returns the component-wise comparison of result x != y. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// @tparam T A floating-point, integer or bool scalar type. - /// - /// @see GLSL notEqual man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec notEqual(vec const& x, vec const& y); - - /// Returns true if any component of x is true. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL any man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR bool any(vec const& v); - - /// Returns true if all components of x are true. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL all man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR bool all(vec const& v); - - /// Returns the component-wise logical complement of x. - /// /!\ Because of language incompatibilities between C++ and GLSL, GLM defines the function not but not_ instead. - /// - /// @tparam L An integer between 1 and 4 included that qualify the dimension of the vector. - /// - /// @see GLSL not man page - /// @see GLSL 4.20.8 specification, section 8.7 Vector Relational Functions - template - GLM_FUNC_DECL GLM_CONSTEXPR vec not_(vec const& v); - - /// @} -}//namespace glm - -#include "detail/func_vector_relational.inl" diff --git a/src/qged/display/glm/manual.md b/src/qged/display/glm/manual.md deleted file mode 100644 index a7f6956f74f..00000000000 --- a/src/qged/display/glm/manual.md +++ /dev/null @@ -1,2411 +0,0 @@ -![Alt](./doc/manual/logo-mini.png "GLM Logo") - -# GLM 0.9.9 Manual - -![Alt](./doc/manual/g-truc.png "G-Truc Logo") - ---- -

- -## Table of Contents -+ [0. Licenses](#section0) -+ [1. Getting started](#section1) -+ [1.1. Using global headers](#section1_1) -+ [1.2. Using separated headers](#section1_2) -+ [1.3. Using extension headers](#section1_3) -+ [1.4. Dependencies](#section1_4) -+ [1.5. Finding GLM with CMake](#section1_5) -+ [2. Preprocessor configurations](#section2) -+ [2.1. GLM\_FORCE\_MESSAGES: Platform auto detection and default configuration](#section2_1) -+ [2.2. GLM\_FORCE\_PLATFORM\_UNKNOWN: Force GLM to no detect the build platform](#section2_2) -+ [2.3. GLM\_FORCE\_COMPILER\_UNKNOWN: Force GLM to no detect the C++ compiler](#section2_3) -+ [2.4. GLM\_FORCE\_ARCH\_UNKNOWN: Force GLM to no detect the build architecture](#section2_4) -+ [2.5. GLM\_FORCE\_CXX\_UNKNOWN: Force GLM to no detect the C++ standard](#section2_5) -+ [2.6. GLM\_FORCE\_CXX**: C++ language detection](#section2_6) -+ [2.7. GLM\_FORCE\_EXPLICIT\_CTOR: Requiring explicit conversions](#section2_7) -+ [2.8. GLM\_FORCE\_INLINE: Force inline](#section2_8) -+ [2.9. GLM\_FORCE\_ALIGNED\_GENTYPES: Force GLM to enable aligned types](#section2_9) -+ [2.10. GLM\_FORCE\_DEFAULT\_ALIGNED\_GENTYPES: Force GLM to use aligned types by default](#section2_10) -+ [2.11. GLM\_FORCE\_INTRINSICS: Using SIMD optimizations](#section2_11) -+ [2.12. GLM\_FORCE\_PRECISION\_**: Default precision](#section2_12) -+ [2.13. GLM\_FORCE\_SINGLE\_ONLY: Removed explicit 64-bits floating point types](#section2_13) -+ [2.14. GLM\_FORCE\_SWIZZLE: Enable swizzle operators](#section2_14) -+ [2.15. GLM\_FORCE\_XYZW\_ONLY: Only exposes x, y, z and w components](#section2_15) -+ [2.16. GLM\_FORCE\_LEFT\_HANDED: Force left handed coordinate system](#section2_16) -+ [2.17. GLM\_FORCE\_DEPTH\_ZERO\_TO\_ONE: Force the use of a clip space between 0 to 1](#section2_17) -+ [2.18. GLM\_FORCE\_SIZE\_T\_LENGTH: Vector and matrix static size type](#section2_18) -+ [2.19. GLM\_FORCE\_UNRESTRICTED\_GENTYPE: Removing genType restriction](#section2_19) -+ [2.20. GLM\_FORCE\_SILENT\_WARNINGS: Silent C++ warnings from language extensions](#section2_20) -+ [2.21. GLM\_FORCE\_QUAT\_DATA\_WXYZ: Force GLM to store quat data as w,x,y,z instead of x,y,z,w](#section2_21) -+ [3. Stable extensions](#section3) -+ [3.1. Scalar types](#section3_1) -+ [3.2. Scalar functions](#section3_2) -+ [3.3. Vector types](#section3_3) -+ [3.4. Vector types with precision qualifiers](#section3_4) -+ [3.5. Vector functions](#section3_5) -+ [3.6. Matrix types](#section3_6) -+ [3.7. Matrix types with precision qualifiers](#section3_7) -+ [3.8. Matrix functions](#section3_8) -+ [3.9. Quaternion types](#section3_9) -+ [3.10. Quaternion types with precision qualifiers](#section3_10) -+ [3.11. Quaternion functions](#section3_11) -+ [4. Recommended extensions](#section4) -+ [4.1. GLM_GTC_bitfield](#section4_1) -+ [4.2. GLM_GTC_color_space](#section4_2) -+ [4.3. GLM_GTC_constants](#section4_3) -+ [4.4. GLM_GTC_epsilon](#section4_4) -+ [4.5. GLM_GTC_integer](#section4_5) -+ [4.6. GLM_GTC_matrix_access](#section4_6) -+ [4.7. GLM_GTC_matrix_integer](#section4_7) -+ [4.8. GLM_GTC_matrix_inverse](#section4_8) -+ [4.9. GLM_GTC_matrix_transform](#section4_9) -+ [4.10. GLM_GTC_noise](#section4_10) -+ [4.11. GLM_GTC_packing](#section4_11) -+ [4.12. GLM_GTC_quaternion](#section4_12) -+ [4.13. GLM_GTC_random](#section4_13) -+ [4.14. GLM_GTC_reciprocal](#section4_14) -+ [4.15. GLM_GTC_round](#section4_15) -+ [4.16. GLM_GTC_type_alignment](#section4_16) -+ [4.17. GLM_GTC_type_precision](#section4_17) -+ [4.18. GLM_GTC_type_ptr](#section4_18) -+ [4.19. GLM_GTC_ulp](#section4_19) -+ [4.20. GLM_GTC_vec1](#section4_20) -+ [5. OpenGL interoperability](#section5) -+ [5.1. GLM Replacements for deprecated OpenGL functions](#section5_1) -+ [5.2. GLM Replacements for GLU functions](#section5_2) -+ [6. Known issues](#section6) -+ [6.1. Not function](#section6_1) -+ [6.2. Precision qualifiers support](#section6_2) -+ [7. FAQ](#section7) -+ [7.1 Why GLM follows GLSL specification and conventions?](#section7_1) -+ [7.2. Does GLM run GLSL programs?](#section7_2) -+ [7.3. Does a GLSL compiler build GLM codes?](#section7_3) -+ [7.4. Should I use ‘GTX’ extensions?](#section7_4) -+ [7.5. Where can I ask my questions?](#section7_5) -+ [7.6. Where can I find the documentation of extensions?](#section7_6) -+ [7.7. Should I use 'using namespace glm;'?](#section7_7) -+ [7.8. Is GLM fast?](#section7_8) -+ [7.9. When I build with Visual C++ with /w4 warning level, I have warnings...](#section7_9) -+ [7.10. Why some GLM functions can crash because of division by zero?](#section7_10) -+ [7.11. What unit for angles us used in GLM?](#section7_11) -+ [7.12. Windows headers cause build errors...](#section7_12) -+ [7.13. Constant expressions support](#section7_13) -+ [8. Code samples](#section8) -+ [8.1. Compute a triangle normal](#section8_1) -+ [8.2. Matrix transform](#section8_2) -+ [8.3. Vector types](#section8_3) -+ [8.4. Lighting](#section8_4) -+ [9. Contributing to GLM](#section9) -+ [9.1. Submitting bug reports](#section9_1) -+ [9.2. Contributing to GLM with pull request](#section9_2) -+ [9.3. Coding style](#section9_3) -+ [10. References](#section10) -+ [10.1. OpenGL specifications](#section10_1) -+ [10.2. External links](#section10_2) -+ [10.3. Projects using GLM](#section10_3) -+ [10.4. Tutorials using GLM](#section10_4) -+ [10.5. Equivalent for other languages](#section10_5) -+ [10.6. Alternatives to GLM](#section10_6) -+ [10.7. Acknowledgements](#section10_7) - ---- -
- -## Licenses - -### The Happy Bunny License (Modified MIT License) - -Copyright (c) 2005 - G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -Restrictions: By making use of the Software for military purposes, you -choose to make a Bunny unhappy. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -![](./doc/manual/frontpage1.png) - -### The MIT License - -Copyright (c) 2005 - G-Truc Creation - -Permission is hereby granted, free of charge, to any person obtaining a -copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be included -in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. -IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY -CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, -TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE -SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -![](./doc/manual/frontpage2.png) - ---- -
- -## 1. Getting started -### 1.1. Using global headers - -GLM is a header-only library, and thus does not need to be compiled. We can use GLM's implementation of GLSL's mathematics functionality by including the `` header: - -```cpp -#include -``` - -To extend the feature set supported by GLM and keeping the library as close to GLSL as possible, new features are implemented as extensions that can be included thought a separated header: -```cpp -// Include all GLM core / GLSL features -#include // vec2, vec3, mat4, radians - -// Include all GLM extensions -#include // perspective, translate, rotate - -glm::mat4 transform(glm::vec2 const& Orientation, glm::vec3 const& Translate, glm::vec3 const& Up) -{ - glm::mat4 Proj = glm::perspective(glm::radians(45.f), 1.33f, 0.1f, 10.f); - glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.f), Translate); - glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Orientation.y, Up); - glm::mat4 View = glm::rotate(ViewRotateX, Orientation.x, Up); - glm::mat4 Model = glm::mat4(1.0f); - return Proj * View * Model; -} -``` - -*Note: Including `` and `` is convenient but pull a lot of code which will significantly increase build time, particularly if these files are included in all source files. We may prefer to use the approaches describe in the two following sections to keep the project build fast.* - -### 1.2. Using separated headers - -GLM relies on C++ templates heavily, and may significantly increase compilation times for projects that use it. Hence, user projects could only include the features they actually use. Following is the list of all the core features, based on GLSL specification, headers: -```cpp -#include // vec2, bvec2, dvec2, ivec2 and uvec2 -#include // vec3, bvec3, dvec3, ivec3 and uvec3 -#include // vec4, bvec4, dvec4, ivec4 and uvec4 -#include // mat2, dmat2 -#include // mat2x3, dmat2x3 -#include // mat2x4, dmat2x4 -#include // mat3x2, dmat3x2 -#include // mat3, dmat3 -#include // mat3x4, dmat2 -#include // mat4x2, dmat4x2 -#include // mat4x3, dmat4x3 -#include // mat4, dmat4 -#include // all the GLSL common functions: abs, min, mix, isnan, fma, etc. -#include // all the GLSL exponential functions: pow, log, exp2, sqrt, etc. -#include // all the GLSL geometry functions: dot, cross, reflect, etc. -#include // all the GLSL integer functions: findMSB, bitfieldExtract, etc. -#include // all the GLSL matrix functions: transpose, inverse, etc. -#include // all the GLSL packing functions: packUnorm4x8, unpackHalf2x16, etc. -#include // all the GLSL trigonometric functions: radians, cos, asin, etc. -#include // all the GLSL vector relational functions: equal, less, etc. -``` - -The following is a code sample using separated core headers and an extension: -```cpp -// Include GLM core features -#include // vec2 -#include // vec3 -#include // mat4 -#include //radians - -// Include GLM extension -#include // perspective, translate, rotate - -glm::mat4 transform(glm::vec2 const& Orientation, glm::vec3 const& Translate, glm::vec3 const& Up) -{ - glm::mat4 Proj = glm::perspective(glm::radians(45.f), 1.33f, 0.1f, 10.f); - glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.f), Translate); - glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Orientation.y, Up); - glm::mat4 View = glm::rotate(ViewRotateX, Orientation.x, Up); - glm::mat4 Model = glm::mat4(1.0f); - return Proj * View * Model; -} -``` - -### 1.3. Using extension headers - -Using GLM through split headers to minimize the project build time: -```cpp -// Include GLM vector extensions: -#include // vec2 -#include // vec3 -#include // radians - -// Include GLM matrix extensions: -#include // mat4 -#include // perspective, translate, rotate - -glm::mat4 transform(glm::vec2 const& Orientation, glm::vec3 const& Translate, glm::vec3 const& Up) -{ - glm::mat4 Proj = glm::perspective(glm::radians(45.f), 1.33f, 0.1f, 10.f); - glm::mat4 ViewTranslate = glm::translate(glm::mat4(1.f), Translate); - glm::mat4 ViewRotateX = glm::rotate(ViewTranslate, Orientation.y, Up); - glm::mat4 View = glm::rotate(ViewRotateX, Orientation.x, Up); - glm::mat4 Model = glm::mat4(1.0f); - return Proj * View * Model; -} -``` - -### 1.4. Dependencies - -GLM does not depend on external libraries or headers such as ``, [``](http://www.opengl.org/registry/api/GL/glcorearb.h), ``, ``, or ``. - -### 1.5. Finding GLM with CMake - -GLM packages a `glmConfig.cmake` and `glmConfig-version.cmake` in the root of the repository and the release archives. To find GLM with CMake you can pass `-Dglm_DIR=/cmake/glm/` when running CMake. You can then either add `${GLM_INCLUDE_DIRS}` to your target's include directories, or link against the imported `glm::glm` target. - ---- -
- -## 2. Preprocessor configurations - -### 2.1. GLM\_FORCE\_MESSAGES: Platform auto detection and default configuration - -When included, GLM will first automatically detect the compiler used, the C++ standard supported, the compiler arguments used to configure itself matching the build environment. - -For example, if the compiler arguments request AVX code generation, GLM will rely on its code path providing AVX optimizations when available. - -We can change GLM configuration using specific C++ preprocessor defines that must be declared before including any GLM headers. - -Using `GLM_FORCE_MESSAGES`, GLM will report the configuration as part of the build log. - -```cpp -#define GLM_FORCE_MESSAGES // Or defined when building (e.g. -DGLM_FORCE_SWIZZLE) -#include -``` - -Example of configuration log generated by `GLM_FORCE_MESSAGES`: -```cpp -GLM: version 0.9.9.1 -GLM: C++ 17 with extensions -GLM: Clang compiler detected -GLM: x86 64 bits with AVX instruction set build target -GLM: Linux platform detected -GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled. -GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL. -GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes. -GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space. -GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system. -``` - -The following subsections describe each configurations and defines. - -### 2.2. GLM\_FORCE\_PLATFORM\_UNKNOWN: Force GLM to no detect the build platform - -`GLM_FORCE_PLATFORM_UNKNOWN` prevents GLM from detecting the build platform. - -### 2.3. GLM\_FORCE\_COMPILER\_UNKNOWN: Force GLM to no detect the C++ compiler - -`GLM_FORCE_COMPILER_UNKNOWN` prevents GLM from detecting the C++ compiler. - -### 2.4. GLM\_FORCE\_ARCH\_UNKNOWN: Force GLM to no detect the build architecture - -`GLM_FORCE_ARCH_UNKNOWN` prevents GLM from detecting the build target architecture. - -### 2.5. GLM\_FORCE\_CXX\_UNKNOWN: Force GLM to no detect the C++ standard - -`GLM_FORCE_CSS_UNKNOWN` prevents GLM from detecting the C++ compiler standard support. - -### 2.6. GLM\_FORCE\_CXX**: C++ language detection - -GLM will automatically take advantage of compilers’ language extensions when enabled. To increase cross platform compatibility and to avoid compiler extensions, a programmer can define `GLM_FORCE_CXX98` before -any inclusion of `` to restrict the language feature set C++98: - -```cpp -#define GLM_FORCE_CXX98 -#include -``` - -For C++11, C++14, and C++17 equivalent defines are available: -* `GLM_FORCE_CXX11` -* `GLM_FORCE_CXX14` -* `GLM_FORCE_CXX17` - -```cpp -#define GLM_FORCE_CXX11 -#include - -// If the compiler doesn’t support C++11, compiler errors will happen. -``` - -`GLM_FORCE_CXX17` overrides `GLM_FORCE_CXX14`; `GLM_FORCE_CXX14` overrides `GLM_FORCE_CXX11`; and `GLM_FORCE_CXX11` overrides `GLM_FORCE_CXX98` defines. - -### 2.7. GLM\_FORCE\_EXPLICIT\_CTOR: Requiring explicit conversions - -GLSL supports implicit conversions of vector and matrix types. For example, an ivec4 can be implicitly converted into `vec4`. - -Often, this behaviour is not desirable but following the spirit of the library, this is the default behavior in GLM. However, GLM 0.9.6 introduced the define `GLM_FORCE_EXPLICIT_CTOR` to require explicit conversion for GLM types. - -```cpp -#include - -void foo() -{ - glm::ivec4 a; - ... - - glm::vec4 b(a); // Explicit conversion, OK - glm::vec4 c = a; // Implicit conversion, OK - ... -} -``` - -With `GLM_FORCE_EXPLICIT_CTOR` define, implicit conversions are not allowed: - -```cpp -#define GLM_FORCE_EXPLICIT_CTOR -#include - -void foo() -{ - glm::ivec4 a; - { - glm::vec4 b(a); // Explicit conversion, OK - glm::vec4 c = a; // Implicit conversion, ERROR - ... -} -``` - -### 2.8. GLM\_FORCE\_INLINE: Force inline - -To push further the software performance, a programmer can define `GLM_FORCE_INLINE` before any inclusion of `` to force the compiler to inline GLM code. - -```cpp -#define GLM_FORCE_INLINE -#include -``` - -### 2.9. GLM\_FORCE\_ALIGNED\_GENTYPES: Force GLM to enable aligned types - -Every object type has the property called alignment requirement, which is an integer value (of type `std::size_t`, always a power of 2) representing the number of bytes between successive addresses at which objects of this type can be allocated. The alignment requirement of a type can be queried with alignof or `std::alignment_of`. The pointer alignment function `std::align` can be used to obtain a suitably-aligned pointer within some buffer, and `std::aligned_storage` can be used to obtain suitably-aligned storage. - -Each object type imposes its alignment requirement on every object of that type; stricter alignment (with larger alignment requirement) can be requested using C++11 `alignas`. - -In order to satisfy alignment requirements of all non-static members of a class, padding may be inserted after some of its members. - -GLM supports both packed and aligned types. Packed types allow filling data structure without inserting extra padding. Aligned GLM types align addresses based on the size of the value type of a GLM type. - -```cpp -#define GLM_FORCE_ALIGNED_GENTYPES -#include -#include - -typedef glm::aligned_vec4 vec4a; -typedef glm::packed_vec4 vec4p; -``` - -### 2.10. GLM\_FORCE\_DEFAULT\_ALIGNED\_GENTYPES: Force GLM to use aligned types by default - -GLM allows using aligned types by default for vector types using `GLM_FORCE_DEFAULT_ALIGNED_GENTYPES`: - -```cpp -#define GLM_FORCE_DEFAULT_ALIGNED_GENTYPES -#include - -struct MyStruct -{ - glm::vec4 a; - float b; - glm::vec3 c; -}; - -void foo() -{ - printf("MyStruct requires memory padding: %d bytes\n", sizeof(MyStruct)); -} - ->>> MyStruct requires memory padding: 48 bytes -``` - -```cpp -#include - -struct MyStruct -{ - glm::vec4 a; - float b; - glm::vec3 c; -}; - -void foo() -{ - printf("MyStruct is tightly packed: %d bytes\n", sizeof(MyStruct)); -} - ->>> MyStruct is tightly packed: 32 bytes -``` - -*Note: GLM SIMD optimizations require the use of aligned types* - -### 2.11. GLM\_FORCE\_INTRINSICS: Using SIMD optimizations - -GLM provides some SIMD optimizations based on [compiler intrinsics](https://msdn.microsoft.com/en-us/library/26td21ds.aspx). -These optimizations will be automatically thanks to compiler arguments when `GLM_FORCE_INTRINSICS` is defined before including GLM files. -For example, if a program is compiled with Visual Studio using `/arch:AVX`, GLM will detect this argument and generate code using AVX instructions automatically when available. - -It’s possible to avoid the instruction set detection by forcing the use of a specific instruction set with one of the fallowing define: -`GLM_FORCE_SSE2`, `GLM_FORCE_SSE3`, `GLM_FORCE_SSSE3`, `GLM_FORCE_SSE41`, `GLM_FORCE_SSE42`, `GLM_FORCE_AVX`, `GLM_FORCE_AVX2` or `GLM_FORCE_AVX512`. - -The use of intrinsic functions by GLM implementation can be avoided using the define `GLM_FORCE_PURE` before any inclusion of GLM headers. This can be particularly useful if we want to rely on C++14 `constexpr`. - -```cpp -#define GLM_FORCE_PURE -#include - -static_assert(glm::vec4::length() == 4, "Using GLM C++ 14 constexpr support for compile time tests"); - -// GLM code will be compiled using pure C++ code without any intrinsics -``` - -```cpp -#define GLM_FORCE_SIMD_AVX2 -#include - -// If the compiler doesn’t support AVX2 instrinsics, compiler errors will happen. -``` - -Additionally, GLM provides a low level SIMD API in glm/simd directory for users who are really interested in writing fast algorithms. - -### 2.12. GLM\_FORCE\_PRECISION\_**: Default precision - -C++ does not provide a way to implement GLSL default precision selection (as defined in GLSL 4.10 specification section 4.5.3) with GLSL-like syntax. - -```glsl -precision mediump int; -precision highp float; -``` - -To use the default precision functionality, GLM provides some defines that need to added before any include of `glm.hpp`: - -```cpp -#define GLM_FORCE_PRECISION_MEDIUMP_INT -#define GLM_FORCE_PRECISION_HIGHP_FLOAT -#include -``` - -Available defines for floating point types (`glm::vec\*`, `glm::mat\*`): - -* `GLM_FORCE_PRECISION_LOWP_FLOAT`: Low precision -* `GLM_FORCE_PRECISION_MEDIUMP_FLOAT`: Medium precision -* `GLM_FORCE_PRECISION_HIGHP_FLOAT`: High precision (default) - -Available defines for floating point types (`glm::dvec\*`, `glm::dmat\*`): - -* `GLM_FORCE_PRECISION_LOWP_DOUBLE`: Low precision -* `GLM_FORCE_PRECISION_MEDIUMP_DOUBLE`: Medium precision -* `GLM_FORCE_PRECISION_HIGHP_DOUBLE`: High precision (default) - -Available defines for signed integer types (`glm::ivec\*`): - -* `GLM_FORCE_PRECISION_LOWP_INT`: Low precision -* `GLM_FORCE_PRECISION_MEDIUMP_INT`: Medium precision -* `GLM_FORCE_PRECISION_HIGHP_INT`: High precision (default) - -Available defines for unsigned integer types (`glm::uvec\*`): - -* `GLM_FORCE_PRECISION_LOWP_UINT`: Low precision -* `GLM_FORCE_PRECISION_MEDIUMP_UINT`: Medium precision -* `GLM_FORCE_PRECISION_HIGHP_UINT`: High precision (default) - -### 2.13. GLM\_FORCE\_SINGLE\_ONLY: Removed explicit 64-bits floating point types - -Some platforms (Dreamcast) doesn't support double precision floating point values. To compile on such platforms, GCC has the `--m4-single-only` build argument. When defining `GLM_FORCE_SINGLE_ONLY` before including GLM headers, GLM releases the requirement of double precision floating point values support. Effectivement, all the float64 types are no longer defined and double behaves like float. - -### 2.14. GLM\_FORCE\_SWIZZLE: Enable swizzle operators - -Shader languages like GLSL often feature so-called swizzle expressions, which may be used to freely select and arrange a vector's components. For example, `variable.x`, `variable.xzy` and `variable.zxyy` respectively form a scalar, a 3D vector and a 4D vector. The result of a swizzle expression in GLSL can be either an R-value or an L-value. Swizzle expressions can be written with characters from exactly one of `xyzw` (usually for positions), `rgba` (usually for colors), and `stpq` (usually for texture coordinates). - -```glsl -vec4 A; -vec2 B; - -B.yx = A.wy; -B = A.xx; -vec3 C = A.bgr; -vec3 D = B.rsz; // Invalid, won't compile -``` - -GLM supports some of this functionality. Swizzling can be enabled by defining `GLM_FORCE_SWIZZLE`. - -*Note: Enabling swizzle expressions will massively increase the size of your binaries and the time it takes to compile them!* - -GLM has two levels of swizzling support described in the following subsections. - -#### 2.14.1. Swizzle functions for standard C++ 98 - -When compiling GLM as C++98, R-value swizzle expressions are simulated through member functions of each vector type. - -```cpp -#define GLM_FORCE_SWIZZLE // Or defined when building (e.g. -DGLM_FORCE_SWIZZLE) -#include - -void foo() -{ - glm::vec4 const ColorRGBA = glm::vec4(1.0f, 0.5f, 0.0f, 1.0f); - glm::vec3 const ColorBGR = ColorRGBA.bgr(); - - glm::vec3 const PositionA = glm::vec3(1.0f, 0.5f, 0.0f); - glm::vec3 const PositionB = PositionXYZ.xyz() * 2.0f; - - glm::vec2 const TexcoordST = glm::vec2(1.0f, 0.5f); - glm::vec4 const TexcoordSTPQ = TexcoordST.stst(); -} -``` - -Swizzle operators return a **copy** of the component values, and thus *can't* be used as L-values to change a vector's values. - -```cpp -#define GLM_FORCE_SWIZZLE -#include - -void foo() -{ - glm::vec3 const A = glm::vec3(1.0f, 0.5f, 0.0f); - - // No compiler error, but A is not modified. - // An anonymous copy is being modified (and then discarded). - A.bgr() = glm::vec3(2.0f, 1.5f, 1.0f); // A is not modified! -} -``` - -#### 2.14.2. Swizzle operations for C++ 98 with language extensions - -Visual C++, GCC and Clang support, as a _non-standard language extension_, anonymous `struct`s as `union` members. This permits a powerful swizzling implementation that both allows L-value swizzle expressions and GLSL-like syntax. To use this feature, the language extension must be enabled by a supporting compiler and `GLM_FORCE_SWIZZLE` must be `#define`d. - -```cpp -#define GLM_FORCE_SWIZZLE -#include - -// Only guaranteed to work with Visual C++! -// Some compilers that support Microsoft extensions may compile this. -void foo() -{ - glm::vec4 ColorRGBA = glm::vec4(1.0f, 0.5f, 0.0f, 1.0f); - - // l-value: - glm::vec4 ColorBGRA = ColorRGBA.bgra; - - // r-value: - ColorRGBA.bgra = ColorRGBA; - - // Both l-value and r-value - ColorRGBA.bgra = ColorRGBA.rgba; -} -``` - -This version returns implementation-specific objects that _implicitly convert_ to their respective vector types. As a consequence of this design, these extra types **can't be directly used** as C++ function arguments; they must be converted through constructors or `operator()`. - -```cpp -#define GLM_FORCE_SWIZZLE -#include - -using namespace glm; - -void foo() -{ - vec4 Color = vec4(1.0f, 0.5f, 0.0f, 1.0f); - - // Generates compiler errors. Color.rgba is not a vector type. - vec4 ClampedA = clamp(Color.rgba, 0.f, 1.f); // ERROR - - // Explicit conversion through a constructor - vec4 ClampedB = clamp(vec4(Color.rgba), 0.f, 1.f); // OK - - // Explicit conversion through operator() - vec4 ClampedC = clamp(Color.rgba(), 0.f, 1.f); // OK -} -``` - -*Note: The implementation has a caveat: Swizzle operator types must be different on both size of the equal operator or the operation will fail. There is no known fix for this issue to date* - -### 2.15. GLM\_FORCE\_XYZW\_ONLY: Only exposes x, y, z and w components - -Following GLSL specifications, GLM supports three sets of components to access vector types member: x, y, z, w; r, g, b, a; and s, t, p, q. -Also, this is making vector component very expressive in the code, it may make debugging vector types a little cubersom as the debuggers will typically display three time the values for each compoenents due to the existence of the three sets. - -To simplify vector types, GLM allows exposing only x, y, z and w components thanks to `GLM_FORCE_XYZW_ONLY` define. - -### 2.16. GLM\_FORCE\_LEFT\_HANDED: Force left handed coordinate system - -By default, OpenGL is using a right handed coordinate system. However, others APIs such as Direct3D have done different choice and relies on the left handed coordinate system. - -GLM allows switching the coordinate system to left handed by defining `GLM_FORCE_LEFT_HANDED`. - -### 2.17. GLM\_FORCE\_DEPTH\_ZERO\_TO\_ONE: Force the use of a clip space between 0 to 1 - -By default, OpenGL is using a -1 to 1 clip space in Z-axis. However, others APIs such as Direct3D relies on a clip space between 0 to 1 in Z-axis. - -GLM allows switching the clip space in Z-axis to 0 to 1 by defining `GLM_FORCE_DEPTH_ZERO_TO_ONE`. - -### 2.18. GLM\_FORCE\_SIZE\_T\_LENGTH: Vector and matrix static size - -GLSL supports the member function .length() for all vector and matrix types. - -```cpp -#include - -void foo(vec4 const& v) -{ - int Length = v.length(); - ... -} -``` - -This function returns an `int` however this function typically interacts with STL `size_t` based code. GLM provides `GLM_FORCE_SIZE_T_LENGTH` pre-processor configuration so that member functions `length()` return a `size_t`. - -Additionally, GLM defines the type `glm::length_t` to identify `length()` returned type, independently from `GLM_FORCE_SIZE_T_LENGTH`. - -```cpp -#define GLM_FORCE_SIZE_T_LENGTH -#include - -void foo(vec4 const& v) -{ - glm::length_t Length = v.length(); - ... -} -``` - -### 2.19. GLM\_FORCE\_UNRESTRICTED\_GENTYPE: Removing genType restriction - -GLSL has restrictions on types supported by certain functions that may appear excessive. -By default, GLM follows the GLSL specification as accurately as possible however it's possible to relax these rules using `GLM_FORCE_UNRESTRICTED_GENTYPE` define. - -```cpp -#include - -float average(float const A, float const B) -{ - return glm::mix(A, B, 0.5f); // By default glm::mix only supports floating-point types -} -``` - -By defining GLM\_FORCE\_UNRESTRICTED\_GENTYPE, we allow using integer types: - -```cpp -#define GLM_FORCE_UNRESTRICTED_GENTYPE -#include - -int average(int const A, int const B) -{ - return glm::mix(A, B, 0.5f); // integers are ok thanks to GLM_FORCE_UNRESTRICTED_GENTYPE -} -``` - -### 2.20. GLM\_FORCE\_SILENT\_WARNINGS: Silent C++ warnings from language extensions - -When using /W4 on Visual C++ or -Wpedantic on GCC, for example, the compilers will generate warnings for using C++ language extensions (/Za with Visual C++) such as anonymous struct. -GLM relies on anonymous structs for swizzle operators and aligned vector types. To silent those warnings define `GLM_FORCE_SILENT_WARNINGS` before including GLM headers. - - -### 2.21. GLM\_FORCE\_QUAT\_DATA\_WXYZ: Force GLM to store quat data as w,x,y,z instead of x,y,z,w - -By default GLM store quaternion components with the x, y, z, w order. `GLM_FORCE_QUAT_DATA_WXYZ` allows switching the quaternion data storage to the w, x, y, z order. - ---- -
- -## 3. Stable extensions - -### 3.1. Scalar types - -#### 3.1.1. GLM_EXT_scalar_int_sized - -This extension exposes sized and signed integer types. - -Include `` to use these features. - -#### 3.1.2. GLM_EXT_scalar_uint_sized - -This extension exposes sized and unsigned integer types. - -```cpp -#include - -glm::uint64 pack(glm::uint32 A, glm::uint16 B, glm::uint8 C, glm::uint8 D) -{ - glm::uint64 ShiftA = 0; - glm::uint64 ShiftB = sizeof(glm::uint32) * 8; - glm::uint64 ShiftC = (sizeof(glm::uint32) + sizeof(glm::uint16)) * 8; - glm::uint64 ShiftD = (sizeof(glm::uint32) + sizeof(glm::uint16) + sizeof(glm::uint8)) * 8; - return (glm::uint64(A) << ShiftA) | (glm::uint64(B) << ShiftB) | (glm::uint64(C) << ShiftC) | (glm::uint64(D) << ShiftD); -} -``` - -Include `` to use these features. - -### 3.2. Scalar functions - -#### 3.2.1. GLM_EXT_scalar_common - -This extension exposes support for `min` and `max` functions taking more than two scalar arguments. Also, it adds `fmin` and `fmax` variants which prevents `NaN` propagation. - -```cpp -#include - -float positiveMax(float const a, float const b) -{ - return glm::fmax(a, b, 0.0f); -} -``` - -Include `` to use these features. - -#### 3.2.2. GLM_EXT_scalar_relational - -This extension exposes `equal` and `notEqual` scalar variants which takes an epsilon argument. - -```cpp -#include - -bool epsilonEqual(float const a, float const b) -{ - float const CustomEpsilon = 0.0001f; - return glm::equal(a, b, CustomEpsilon); -} -``` - -Include `` to use these features. - -#### 3.2.3. GLM_EXT_scalar_constants - -This extension exposes useful constants such as `epsilon` and `pi`. - -```cpp -#include - -float circumference(float const Diameter) -{ - return glm::pi() * Diameter; -} -``` - -```cpp -#include // abs -#include // epsilon - -bool equalULP1(float const a, float const b) -{ - return glm::abs(a - b) <= glm::epsilon(); -} -``` - -Include `` to use these features. - -#### 3.2.4. GLM_EXT_scalar_ulp - -This extension exposes function that measure of accuracy in numeric calculations. - -```cpp -#include - -bool test_ulp(float x) -{ - float const a = glm::next_float(x); // return a float a ULP away from the float argument. - return float_distance(a, x) == 1; // check both float are a single ULP away. -} -``` - -Include `` to use these features. - -### 3.3. Vector types - -#### 3.3.1. GLM_EXT_vector_float1 - -This extension exposes single-precision floating point vector with 1 component: `vec1`. - -Include `` to use these features. - -#### 3.3.2. GLM_EXT_vector_float2 - -This extension exposes single-precision floating point vector with 2 components: `vec2`. - -Include `` to use these features. - -#### 3.3.3. GLM_EXT_vector_float3 - -This extension exposes single-precision floating point vector with 3 components: `vec3`. - -Include `` to use these features. - -#### 3.3.4. GLM_EXT_vector_float4 - -This extension exposes single-precision floating point vector with 4 components: `vec4`. - -Include `` to use these features. - -#### 3.3.5. GLM_EXT_vector_double1 - -This extension exposes double-precision floating point vector with 1 component: `dvec1`. - -Include `` to use these features. - -#### 3.3.6. GLM_EXT_vector_double2 - -This extension exposes double-precision floating point vector with 2 components: `dvec2`. - -Include `` to use these features. - -#### 3.3.7. GLM_EXT_vector_double3 - -This extension exposes double-precision floating point vector with 3 components: `dvec3`. - -Include `` to use these features. - -#### 3.3.8. GLM_EXT_vector_double4 - -This extension exposes double-precision floating point vector with 4 components: `dvec4`. - -Include `` to use these features. - -#### 3.3.9. GLM_EXT_vector_int1 - -This extension exposes signed integer vector with 1 component: `ivec1`. - -Include `` to use these features. - -#### 3.3.10. GLM_EXT_vector_int2 - -This extension exposes signed integer vector with 2 components: `ivec2`. - -Include `` to use these features. - -#### 3.3.11. GLM_EXT_vector_int3 - -This extension exposes signed integer vector with 3 components: `ivec3`. - -Include `` to use these features. - -#### 3.3.12. GLM_EXT_vector_int4 - -This extension exposes signed integer vector with 4 components: `ivec4`. - -Include `` to use these features. - -#### 3.3.13. GLM_EXT_vector_int1 - -This extension exposes unsigned integer vector with 1 component: `uvec1`. - -Include `` to use these features. - -#### 3.3.14. GLM_EXT_vector_uint2 - -This extension exposes unsigned integer vector with 2 components: `uvec2`. - -Include `` to use these features. - -#### 3.3.15. GLM_EXT_vector_uint3 - -This extension exposes unsigned integer vector with 3 components: `uvec3`. - -Include `` to use these features. - -#### 3.3.16. GLM_EXT_vector_uint4 - -This extension exposes unsigned integer vector with 4 components: `uvec4`. - -Include `` to use these features. - -#### 3.3.17. GLM_EXT_vector_bool1 - -This extension exposes boolean vector with 1 component: `bvec1`. - -Include `` to use these features. - -#### 3.3.18. GLM_EXT_vector_bool2 - -This extension exposes boolean vector with 2 components: `bvec2`. - -Include `` to use these features. - -#### 3.3.19. GLM_EXT_vector_bool3 - -This extension exposes boolean vector with 3 components: `bvec3`. - -Include `` to use these features. - -#### 3.3.20. GLM_EXT_vector_bool4 - -This extension exposes boolean vector with 4 components: `bvec4`. - -Include `` to use these features. - -### 3.4. Vector types with precision qualifiers - -#### 3.4.1. GLM_EXT_vector_float1_precision - -This extension exposes single-precision floating point vector with 1 component using various precision in term of ULPs: `lowp_vec1`, `mediump_vec1` and `highp_vec1`. - -Include `` to use these features. - -#### 3.4.2. GLM_EXT_vector_float2_precision - -This extension exposes single-precision floating point vector with 2 components using various precision in term of ULPs: `lowp_vec2`, `mediump_vec2` and `highp_vec2`. - -Include `` to use these features. - -#### 3.4.3. GLM_EXT_vector_float3_precision - -This extension exposes single-precision floating point vector with 3 components using various precision in term of ULPs: `lowp_vec3`, `mediump_vec3` and `highp_vec3`. - -Include `` to use these features. - -#### 3.4.4. GLM_EXT_vector_float4_precision - -This extension exposes single-precision floating point vector with 4 components using various precision in term of ULPs: `lowp_vec4`, `mediump_vec4` and `highp_vec4`. - -Include `` to use these features. - -#### 3.4.5. GLM_EXT_vector_double1_precision - -This extension exposes double-precision floating point vector with 1 component using various precision in term of ULPs: `lowp_dvec1`, `mediump_dvec1` and `highp_dvec1`. - -Include `` to use these features. - -#### 3.4.6. GLM_EXT_vector_double2_precision - -This extension exposes double-precision floating point vector with 2 components using various precision in term of ULPs: `lowp_dvec2`, `mediump_dvec2` and `highp_dvec2`. - -Include `` to use these features. - -#### 3.4.7. GLM_EXT_vector_double3_precision - -This extension exposes double-precision floating point vector with 3 components using various precision in term of ULPs: `lowp_dvec3`, `mediump_dvec3` and `highp_dvec3`. - -Include `` to use these features. - -#### 3.4.8. GLM_EXT_vector_double4_precision - -This extension exposes double-precision floating point vector with 4 components using various precision in term of ULPs: `lowp_dvec4`, `mediump_dvec4` and `highp_dvec4`. - -Include `` to use these features. - -### 3.5. Vector functions - -#### 3.5.1. GLM_EXT_vector_common - -This extension exposes support for `min` and `max` functions taking more than two vector arguments. Also, it adds `fmin` and `fmax` variants which prevents `NaN` propagation. - -```cpp -#include // vec2 -#include // fmax - -float positiveMax(float const a, float const b) -{ - return glm::fmax(a, b, 0.0f); -} -``` - -Include `` to use these features. - -#### 3.5.2. GLM_EXT_vector_relational - -This extension exposes `equal` and `notEqual` vector variants which takes an epsilon argument. - -```cpp -#include // vec2 -#include // equal, all - -bool epsilonEqual(glm::vec2 const& A, glm::vec2 const& B) -{ - float const CustomEpsilon = 0.0001f; - return glm::all(glm::equal(A, B, CustomEpsilon)); -} -``` - -Include `` to use these features. - -#### 3.5.3. GLM_EXT_vector_ulp - -This extension exposes function that measure of accuracy in numeric calculations. - -```cpp -#include -#include -#include - -bool test_ulp(glm::vec4 const& x) -{ - glm::vec4 const a = glm::next_float(x); // return a float a ULP away from the float argument. - return glm::all(float_distance(a, x) == glm::ivec4(1)); // check both float are a single ULP away. -} -``` - -Include `` to use these features. - -### 3.6. Matrix types - -#### 3.6.1. GLM_EXT_matrix_float2x2 - -This extension exposes single-precision floating point vector with 2 columns by 2 rows: `mat2x2`. - -Include `` to use these features. - -#### 3.6.2. GLM_EXT_matrix_float2x3 - -This extension exposes single-precision floating point vector with 2 columns by 3 rows: `mat2x3`. - -Include `` to use these features. - -#### 3.6.3. GLM_EXT_matrix_float2x4 - -This extension exposes single-precision floating point vector with 2 columns by 4 rows: `mat2x4`. - -Include `` to use these features. - -#### 3.6.4. GLM_EXT_matrix_float3x2 - -This extension exposes single-precision floating point vector with 3 columns by 2 rows: `mat3x2`. - -Include `` to use these features. - -#### 3.6.5. GLM_EXT_matrix_float3x3 - -This extension exposes single-precision floating point vector with 3 columns by 3 rows: `mat3x3`. - -Include `` to use these features. - -#### 3.6.6. GLM_EXT_matrix_float3x4 - -This extension exposes single-precision floating point vector with 3 columns by 4 rows: `mat3x4`. - -Include `` to use these features. - -#### 3.6.7. GLM_EXT_matrix_float4x2 - -This extension exposes single-precision floating point vector with 4 columns by 2 rows: `mat4x2`. - -Include `` to use these features. - -#### 3.6.8. GLM_EXT_matrix_float4x3 - -This extension exposes single-precision floating point vector with 4 columns by 3 rows: `mat4x3`. - -Include `` to use these features. - -#### 3.6.9. GLM_EXT_matrix_float4x4 - -This extension exposes single-precision floating point vector with 4 columns by 4 rows: `mat4x4`. - -Include `` to use these features. - -#### 3.6.10. GLM_EXT_matrix_double2x2 - -This extension exposes double-precision floating point vector with 2 columns by 2 rows: `dmat2x2`. - -Include `` to use these features. - -#### 3.6.11. GLM_EXT_matrix_double2x3 - -This extension exposes double-precision floating point vector with 2 columns by 3 rows: `dmat2x3`. - -Include `` to use these features. - -#### 3.6.12. GLM_EXT_matrix_double2x4 - -This extension exposes double-precision floating point vector with 2 columns by 4 rows: `dmat2x4`. - -Include `` to use these features. - -#### 3.6.13. GLM_EXT_matrix_double3x2 - -This extension exposes double-precision floating point vector with 3 columns by 2 rows: `dmat3x2`. - -Include `` to use these features. - -#### 3.6.14. GLM_EXT_matrix_double3x3 - -This extension exposes double-precision floating point vector with 3 columns by 3 rows: `dmat3x3`. - -Include `` to use these features. - -#### 3.6.15. GLM_EXT_matrix_double3x4 - -This extension exposes double-precision floating point vector with 3 columns by 4 rows: `dmat3x4`. - -Include `` to use these features. - -#### 3.6.16. GLM_EXT_matrix_double4x2 - -This extension exposes double-precision floating point vector with 4 columns by 2 rows: `dmat4x2`. - -Include `` to use these features. - -#### 3.6.17. GLM_EXT_matrix_double4x3 - -This extension exposes double-precision floating point vector with 4 columns by 3 rows: `dmat4x3`. - -Include `` to use these features. - -#### 3.6.18. GLM_EXT_matrix_double4x4 - -This extension exposes double-precision floating point vector with 4 columns by 4 rows: `dmat4x4`. - -Include `` to use these features. - -### 3.7. Matrix types with precision qualifiers - -#### 3.7.1. GLM_EXT_matrix_float2x2_precision - -This extension exposes single-precision floating point vector with 2 columns by 2 rows using various precision in term of ULPs: `lowp_mat2x2`, `mediump_mat2x2` and `highp_mat2x2`. - -Include `` to use these features. - -#### 3.7.2. GLM_EXT_matrix_float2x3_precision - -This extension exposes single-precision floating point vector with 2 columns by 3 rows using various precision in term of ULPs: `lowp_mat2x3`, `mediump_mat2x3` and `highp_mat2x3`. - -Include `` to use these features. - -#### 3.7.3. GLM_EXT_matrix_float2x4_precision - -This extension exposes single-precision floating point vector with 2 columns by 4 rows using various precision in term of ULPs: `lowp_mat2x4`, `mediump_mat2x4` and `highp_mat2x4`. - -Include `` to use these features. - -#### 3.7.4. GLM_EXT_matrix_float3x2_precision - -This extension exposes single-precision floating point vector with 3 columns by 2 rows using various precision in term of ULPs: `lowp_mat3x2`, `mediump_mat3x2` and `highp_mat3x2`. - -Include `` to use these features. - -#### 3.7.5. GLM_EXT_matrix_float3x3_precision - -This extension exposes single-precision floating point vector with 3 columns by 3 rows using various precision in term of ULPs: `lowp_mat3x3`, `mediump_mat3x3` and `highp_mat3x3`. - -Include `` to use these features. - -#### 3.7.6. GLM_EXT_matrix_float3x4_precision - -This extension exposes single-precision floating point vector with 3 columns by 4 rows using various precision in term of ULPs: `lowp_mat3x4`, `mediump_mat3x4` and `highp_mat3x4`. - -Include `` to use these features. - -#### 3.7.7. GLM_EXT_matrix_float4x2_precision - -This extension exposes single-precision floating point vector with 4 columns by 2 rows using various precision in term of ULPs: `lowp_mat4x2`, `mediump_mat4x2` and `highp_mat4x2`. - -Include `` to use these features. - -#### 3.7.8. GLM_EXT_matrix_float4x3_precision - -This extension exposes single-precision floating point vector with 4 columns by 3 rows using various precision in term of ULPs: `lowp_mat4x3`, `mediump_mat4x3` and `highp_mat4x3`. - -Include `` to use these features. - -#### 3.7.9. GLM_EXT_matrix_float4x4_precision - -This extension exposes single-precision floating point vector with 4 columns by 4 rows using various precision in term of ULPs: `lowp_mat4x4`, `mediump_mat4x4` and `highp_mat4x4`. - -Include `` to use these features. - -#### 3.7.10. GLM_EXT_matrix_double2x2_precision - -This extension exposes double-precision floating point vector with 2 columns by 2 rows using various precision in term of ULPs: `lowp_dmat2x2`, `mediump_dmat2x2` and `highp_dmat2x2`. - -Include `` to use these features. - -#### 3.7.11. GLM_EXT_matrix_double2x3_precision - -This extension exposes double-precision floating point vector with 2 columns by 3 rows using various precision in term of ULPs: `lowp_dmat2x3`, `mediump_dmat2x3` and `highp_dmat2x3`. - -Include `` to use these features. - -#### 3.7.12. GLM_EXT_matrix_double2x4_precision - -This extension exposes double-precision floating point vector with 2 columns by 4 rows using various precision in term of ULPs: `lowp_dmat2x4`, `mediump_dmat2x4` and `highp_dmat2x4`. - -Include `` to use these features. - -#### 3.7.13. GLM_EXT_matrix_double3x2_precision - -This extension exposes double-precision floating point vector with 3 columns by 2 rows using various precision in term of ULPs: `lowp_dmat3x2`, `mediump_dmat3x2` and `highp_dmat3x2`. - -Include `` to use these features. - -#### 3.7.14. GLM_EXT_matrix_double3x3_precision - -This extension exposes double-precision floating point vector with 3 columns by 3 rows using various precision in term of ULPs: `lowp_dmat3x3`, `mediump_dmat3x3` and `highp_dmat3x3`. - -Include `` to use these features. - -#### 3.7.15. GLM_EXT_matrix_double3x4_precision - -This extension exposes double-precision floating point vector with 3 columns by 4 rows using various precision in term of ULPs: `lowp_dmat3x4`, `mediump_dmat3x4` and `highp_dmat3x4`. - -Include `` to use these features. - -#### 3.7.16. GLM_EXT_matrix_double4x2_precision - -This extension exposes double-precision floating point vector with 4 columns by 2 rows using various precision in term of ULPs: `lowp_dmat4x2`, `mediump_dmat4x2` and `highp_dmat4x2`. - -Include `` to use these features. - -#### 3.7.17. GLM_EXT_matrix_double4x3_precision - -This extension exposes double-precision floating point vector with 4 columns by 3 rows using various precision in term of ULPs: `lowp_dmat4x3`, `mediump_dmat4x3` and `highp_dmat4x3`. - -Include `` to use these features. - -#### 3.7.18. GLM_EXT_matrix_double4x4_precision - -This extension exposes double-precision floating point vector with 4 columns by 4 rows using various precision in term of ULPs: `lowp_dmat4x4`, `mediump_dmat4x4` and `highp_dmat4x4`. - -Include `` to use these features. - -### 3.8. Matrix functions - -#### 3.8.1. GLM_EXT_matrix_relational - -This extension exposes `equal` and `notEqual` matrix variants which takes an optional epsilon argument. - -```cpp -#include // bvec4 -#include // mat4 -#include // equal, all - -bool epsilonEqual(glm::mat4 const& A, glm::mat4 const& B) -{ - float const CustomEpsilon = 0.0001f; - glm::bvec4 const ColumnEqual = glm::equal(A, B, CustomEpsilon); // Evaluation per column - return glm::all(ColumnEqual); -} -``` - -Include `` to use these features. - -#### 3.8.2. GLM_EXT_matrix_transform - -This extension exposes matrix transformation functions: `translate`, `rotate` and `scale`. - -```cpp -#include // vec2 -#include // vec3 -#include // mat4x4 -#include // translate, rotate, scale, identity - -glm::mat4 computeModelViewMatrix(float Translate, glm::vec2 const & Rotate) -{ - glm::mat4 View = glm::translate(glm::identity(), glm::vec3(0.0f, 0.0f, -Translate)); - View = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f)); - View = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f)); - glm::mat4 Model = glm::scale(glm::identity(), glm::vec3(0.5f)); - return View * Model; -} -``` - -Include `` to use these features. - -#### 3.8.3. GLM_EXT_matrix_clip_space - -This extension exposes functions to transform scenes into the clip space. - -```cpp -#include // mat4x4 -#include // perspective -#include // radians - -glm::mat4 computeProjection(float Width, float Height) -{ - return glm::perspective(glm::radians(45.0f), Width / Height, 0.1f, 100.f); -} -``` - -Include `` to use these features. - -#### 3.8.4. GLM_EXT_matrix_projection - -This extension exposes functions to map object coordinates into window coordinates and reverse - -Include `` to use these features. - -### 3.9. Quaternion types - -#### 3.9.1. GLM_EXT_quaternion_float - -This extension exposes single-precision floating point quaternion: `quat`. - -Include `` to use these features. - -#### 3.9.2. GLM_EXT_quaternion_double - -This extension exposes double-precision floating point quaternion: `dquat`. - -Include `` to use these features. - -### 3.10. Quaternion types with precision qualifiers - -#### 3.10.1. GLM_EXT_quaternion_float_precision - -This extension exposes single-precision floating point quaternion using various precision in term of ULPs: `lowp_quat`, `mediump_quat` and `highp_quat`. - -Include `` to use these features. - -#### 3.10.2. GLM_EXT_quaternion_double_precision - -This extension exposes double-precision floating point quaternion using various precision in term of ULPs: `lowp_dquat`, `mediump_dquat` and `highp_dquat`. - -Include `` to use these features. - -### 3.11. Quaternion functions - -#### 3.11.1. GLM_EXT_quaternion_common - -This extension exposes common quaternion functions such as `slerp`, `conjugate` and `inverse`. - -Include `` to use these features. - -#### 3.11.2. GLM_EXT_quaternion_geometric - -This extension exposes geometric quaternion functions such as `length`, `normalize`, `dot` and `cross`. - -Include `` to use these features. - -#### 3.11.3. GLM_EXT_quaternion_trigonometric - -This extension exposes trigonometric quaternion functions such as `angle` and `axis`. - -Include `` to use these features. - -#### 3.11.4. GLM_EXT_quaternion_exponential - -This extensions expose exponential functions for quaternions such as `exp`, `log`, `pow` and `sqrt`. - -Include `` to use these features. - -#### 3.11.5. GLM_EXT_quaternion_relational - -This extension exposes relational functions to compare quaternions. - -Include `` to use these features. - -#### 3.11.6. GLM_EXT_quaternion_transform - -This extension exposes functions to transform objects. - -Include `` to use these features. - ---- -
- -## 4. Recommended extensions - -GLM extends the core GLSL feature set with extensions. These extensions include: quaternion, transformation, spline, matrix inverse, color spaces, etc. - -To include an extension, we only need to include the dedicated header file. Once included, the features are added to the GLM namespace. - -```cpp -#include -#include - -int foo() -{ - glm::vec4 Position = glm::vec4(glm:: vec3(0.0f), 1.0f); - glm::mat4 Model = glm::translate(glm::mat4(1.0f), glm::vec3(1.0f)); - - glm::vec4 Transformed = Model * Position; - ... - - return 0; -} -``` - -When an extension is included, all the dependent core functionalities and extensions will be included as well. - -### 4.1. GLM_GTC_bitfield - -Fast bitfield operations on scalar and vector variables. - -`` need to be included to use these features. - -### 4.2. GLM_GTC_color_space - -Conversion between linear RGB and sRGB color spaces. - -`` need to be included to use these features. - -### 4.3. GLM_GTC_constants - -Provide a list of built-in constants. - -`` need to be included to use these features. - -### 4.4. GLM\_GTC\_epsilon - -Approximate equality comparisons for floating-point numbers, possibly with a user-defined epsilon. - -`` need to be included to use these features. - -### 4.5. GLM\_GTC\_integer - -Integer variants of core GLM functions. - -`` need to be included to use these features. - -### 4.6. GLM\_GTC\_matrix\_access - -Functions to conveniently access the individual rows or columns of a matrix. - -`` need to be included to use these features. - -### 4.7. GLM\_GTC\_matrix\_integer - -Integer matrix types similar to the core floating-point matrices. Some operations (such as inverse and determinant) are not supported. - -`` need to be included to use these features. - -### 4.8. GLM\_GTC\_matrix\_inverse - -Additional matrix inverse functions. - -`` need to be included to use these features. - -### 4.9. GLM\_GTC\_matrix\_transform - -Matrix transformation functions that follow the OpenGL fixed-function conventions. - -For example, the `lookAt` function generates a transformation matrix that projects world coordinates into eye coordinates suitable for projection matrices (e.g. `perspective`, `ortho`). See the OpenGL compatibility specifications for more information about the layout of these generated matrices. - -The matrices generated by this extension use standard OpenGL fixed-function conventions. For example, the `lookAt` function generates a transform from world space into the specific eye space that the -projective matrix functions (`perspective`, `ortho`, etc) are designed to expect. The OpenGL compatibility specifications define the particular layout of this eye space. - -`` need to be included to use these features. - -### 4.10. GLM\_GTC\_noise - -Define 2D, 3D and 4D procedural noise functions. - -<`glm/gtc/noise.hpp>` need to be included to use these features. - -![](/doc/manual/noise-simplex1.jpg) - -Figure 4.10.1: glm::simplex(glm::vec2(x / 16.f, y / 16.f)); - -![](/doc/manual/noise-simplex2.jpg) - -Figure 4.10.2: glm::simplex(glm::vec3(x / 16.f, y / 16.f, 0.5f)); - -![](/doc/manual/noise-simplex3.jpg) - -Figure 4.10.3: glm::simplex(glm::vec4(x / 16.f, y / 16.f, 0.5f, 0.5f)); - -![](/doc/manual/noise-perlin1.jpg) - -Figure 4.10.4: glm::perlin(glm::vec2(x / 16.f, y / 16.f)); - -![](/doc/manual/noise-perlin2.jpg) - -Figure 4.10.5: glm::perlin(glm::vec3(x / 16.f, y / 16.f, 0.5f)); - -![](/doc/manual/noise-perlin3.jpg) - -Figure 4.10.6: glm::perlin(glm::vec4(x / 16.f, y / 16.f, 0.5f, 0.5f))); - -![](/doc/manual/noise-perlin4.png) - -Figure 4.10.7: glm::perlin(glm::vec2(x / 16.f, y / 16.f), glm::vec2(2.0f)); - -![](/doc/manual/noise-perlin5.png) - -Figure 4.10.8: glm::perlin(glm::vec3(x / 16.f, y / 16.f, 0.5f), glm::vec3(2.0f)); - -![](/doc/manual/noise-perlin6.png) - -Figure 4.10.9: glm::perlin(glm::vec4(x / 16.f, y / 16.f, glm::vec2(0.5f)), glm::vec4(2.0f)); - -### 4.11. GLM\_GTC\_packing - -Convert scalar and vector types to and from packed formats, saving space at the cost of precision. However, packing a value into a format that it was previously unpacked from is guaranteed to be lossless. - -`` need to be included to use these features. - -### 4.12. GLM\_GTC\_quaternion - -Quaternions and operations upon thereof. - -`` need to be included to use these features. - -### 4.13. GLM\_GTC\_random - -Probability distributions in up to four dimensions. - -`` need to be included to use these features. - -![](/doc/manual/random-linearrand.png) - -Figure 4.13.1: glm::vec4(glm::linearRand(glm::vec2(-1), glm::vec2(1)), 0, 1); - -![](/doc/manual/random-circularrand.png) - -Figure 4.13.2: glm::vec4(glm::circularRand(1.0f), 0, 1); - -![](/doc/manual/random-sphericalrand.png) - -Figure 4.13.3: glm::vec4(glm::sphericalRand(1.0f), 1); - -![](/doc/manual/random-diskrand.png) - -Figure 4.13.4: glm::vec4(glm::diskRand(1.0f), 0, 1); - -![](/doc/manual/random-ballrand.png) - -Figure 4.13.5: glm::vec4(glm::ballRand(1.0f), 1); - -![](/doc/manual/random-gaussrand.png) - -Figure 4.13.6: glm::vec4(glm::gaussRand(glm::vec3(0), glm::vec3(1)), 1); - -### 4.14. GLM\_GTC\_reciprocal - -Reciprocal trigonometric functions (e.g. secant, cosecant, tangent). - -`` need to be included to use the features of this extension. - -### 4.15. GLM\_GTC\_round - -Various rounding operations and common special cases thereof. - -`` need to be included to use the features of this extension. - -### 4.16. GLM\_GTC\_type\_aligned - -Aligned vector types. - -`` need to be included to use the features of this extension. - -### 4.17. GLM\_GTC\_type\_precision - -Vector and matrix types with defined precisions, e.g. `i8vec4`, which is a 4D vector of signed 8-bit integers. - -`` need to be included to use the features of this extension. - -### 4.18. GLM\_GTC\_type\_ptr - -Facilitate interactions between pointers to basic types (e.g. `float*`) and GLM types (e.g. `mat4`). - -This extension defines an overloaded function, `glm::value_ptr`, which returns a pointer to the memory layout of any GLM vector or matrix (`vec3`, `mat4`, etc.). Matrix types store their values in column-major order. This is useful for uploading data to matrices or for copying data to buffer objects. - -```cpp -// GLM_GTC_type_ptr provides a safe solution: -#include -#include - -void foo() -{ - glm::vec4 v(0.0f); - glm::mat4 m(1.0f); - ... - glVertex3fv(glm::value_ptr(v)) - glLoadMatrixfv(glm::value_ptr(m)); -} - -// Another solution, this one inspired by the STL: -#include - -void foo() -{ - glm::vec4 v(0.0f); - glm::mat4 m(1.0f); - ... - glVertex3fv(&v[0]); - glLoadMatrixfv(&m[0][0]); -} -``` - -*Note: It would be possible to implement [`glVertex3fv`](http://www.opengl.org/sdk/docs/man2/xhtml/glVertex.xml)(glm::vec3(0)) in C++ with the appropriate cast operator that would result as an -implicit cast in this example. However cast operators may produce programs running with unexpected behaviours without build error or any form of notification. * - -`` need to be included to use these features. - -### 4.19. GLM\_GTC\_ulp - -Measure a function's accuracy given a reference implementation of it. This extension works on floating-point data and provides results in [ULP](http://ljk.imag.fr/membres/Carine.Lucas/TPScilab/JMMuller/ulp-toms.pdf). - -`` need to be included to use these features. - -### 4.20. GLM\_GTC\_vec1 - -Add \*vec1 types. - -`` need to be included to use these features. - ---- -
- -## 5. OpenGL interoperability - -### 5.1. GLM replacements for deprecated OpenGL functions - -OpenGL 3.1 specification has deprecated some features that have been removed from OpenGL 3.2 core profile specification. GLM provides some replacement functions. - -[***glRotate{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glRotate.xml) - -```cpp -glm::mat4 glm::rotate(glm::mat4 const& m, float angle, glm::vec3 const& axis); -glm::dmat4 glm::rotate(glm::dmat4 const& m, double angle, glm::dvec3 const& axis); -``` - -From `GLM_GTC_matrix_transform` extension: <glm/gtc/matrix\_transform.hpp> - -[***glScale{f, d}:***](http://www.opengl.org/sdk/docs/man2/xhtml/glScale.xml) - -```cpp -glm::mat4 glm::scale(glm::mat4 const& m, glm::vec3 const& factors); -glm::dmat4 glm::scale(glm::dmat4 const& m, glm::dvec3 const& factors); -``` - -From `GLM_GTC_matrix_transform` extension: <glm/gtc/matrix\_transform.hpp> - -[***glTranslate{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glTranslate.xml) - -```cpp -glm::mat4 glm::translate(glm::mat4 const& m, glm::vec3 const& translation); -glm::dmat4 glm::translate(glm::dmat4 const& m, glm::dvec3 const& translation); -``` - -From `GLM_GTC_matrix_transform` extension: <glm/gtc/matrix\_transform.hpp> - -[***glLoadIdentity:***](https://www.opengl.org/sdk/docs/man2/xhtml/glLoadIdentity.xml) - -```cpp -glm::mat4(1.0) or glm::mat4(); -glm::dmat4(1.0) or glm::dmat4(); -``` - -From GLM core library: `` - -[***glMultMatrix{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glMultMatrix.xml) - -```cpp -glm::mat4() * glm::mat4(); -glm::dmat4() * glm::dmat4(); -``` - -From GLM core library: `` - -[***glLoadTransposeMatrix{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glLoadTransposeMatrix.xml) - -```cpp -glm::transpose(glm::mat4()); -glm::transpose(glm::dmat4()); -``` - -From GLM core library: `` - -[***glMultTransposeMatrix{f, d}:***](https://www.opengl.org/sdk/docs/man2/xhtml/glMultTransposeMatrix.xml) - -```cpp -glm::mat4() * glm::transpose(glm::mat4()); -glm::dmat4() * glm::transpose(glm::dmat4()); -``` - -From GLM core library: `` - -[***glFrustum:***](http://www.opengl.org/sdk/docs/man2/xhtml/glFrustum.xml) - -```cpp -glm::mat4 glm::frustum(float left, float right, float bottom, float top, float zNear, float zFar); -glm::dmat4 glm::frustum(double left, double right, double bottom, double top, double zNear, double zFar); -``` - -From `GLM_GTC_matrix_transform` extension: `` - -[***glOrtho:***](https://www.opengl.org/sdk/docs/man2/xhtml/glOrtho.xml) - -```cpp -glm::mat4 glm::ortho(float left, float right, float bottom, float top, float zNear, float zFar); -glm::dmat4 glm::ortho(double left, double right, double bottom, double top, double zNear, double zFar); -``` - -From `GLM_GTC_matrix_transform` extension: `` - -### 5.2. GLM replacements for GLU functions - -[***gluLookAt:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluLookAt.xml) - -```cpp -glm::mat4 glm::lookAt(glm::vec3 const& eye, glm::vec3 const& center, glm::vec3 const& up); -glm::dmat4 glm::lookAt(glm::dvec3 const& eye, glm::dvec3 const& center, glm::dvec3 const& up); -``` - -From `GLM_GTC_matrix_transform` extension: `` - -[***gluOrtho2D:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluOrtho2D.xml) - -```cpp -glm::mat4 glm::ortho(float left, float right, float bottom, float top); -glm::dmat4 glm::ortho(double left, double right, double bottom, double top); -``` - -From `GLM_GTC_matrix_transform` extension: `` - -[***gluPerspective:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluPerspective.xml) - -```cpp -glm::mat4 perspective(float fovy, float aspect, float zNear, float zFar); -glm::dmat4 perspective(double fovy, double aspect, double zNear, double zFar); -``` - -Note that in GLM, fovy is expressed in radians, not degrees. - -From `GLM_GTC_matrix_transform` extension: `` - -[***gluPickMatrix:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluPickMatrix.xml) - -```cpp -glm::mat4 pickMatrix(glm::vec2 const& center, glm::vec2 const& delta, glm::ivec4 const& viewport); -glm::dmat4 pickMatrix(glm::dvec2 const& center, glm::dvec2 const& delta, glm::ivec4 const& viewport); -``` - -From `GLM_GTC_matrix_transform` extension: `` - -[***gluProject:***](http://www.opengl.org/sdk/docs/man2/xhtml/gluProject.xml) - -```cpp -glm::vec3 project(glm::vec3 const& obj, glm::mat4 const& model, glm::mat4 const& proj, glm::ivec4 const& viewport); -glm::dvec3 project(glm::dvec3 const& obj, glm::dmat4 const& model, glm::dmat4 const& proj, glm::ivec4 const& viewport); -``` - -From `GLM_GTC_matrix_transform` extension: `` - -[***gluUnProject:***](https://www.opengl.org/sdk/docs/man2/xhtml/gluUnProject.xml) - -```cpp -glm::vec3 unProject(glm::vec3 const& win, glm::mat4 const& model, glm::mat4 const& proj, glm::ivec4 const& viewport); -glm::dvec3 unProject(glm::dvec3 const& win, glm::dmat4 const& model, glm::dmat4 const& proj, glm::ivec4 const& viewport); -``` - -From `GLM_GTC_matrix_transform` extension: `` - ---- -
- -## 6. Known issues - -This section reports GLSL features that GLM can't accurately emulate due to language restrictions. - -### 6.1. not function - -The GLSL function 'not' is a keyword in C++. To prevent name collisions and ensure a consistent API, the name `not\_` (note the underscore) is used instead. - -### 6.2. Precision qualifiers support - -GLM supports GLSL precision qualifiers through prefixes instead of qualifiers. For example, GLM exposes \verb|lowp_vec4|, \verb|mediump_vec4| and \verb|highp_vec4| as variations of \verb|vec4|. - -Similarly to GLSL, GLM precision qualifiers are used to trade precision of operations in term of [ULPs](http://en.wikipedia.org/wiki/Unit_in_the_last_place) for better performance. By default, all the types use high precision. - -```cpp -// Using precision qualifier in GLSL: - -ivec3 foo(in vec4 v) -{ - highp vec4 a = v; - mediump vec4 b = a; - lowp ivec3 c = ivec3(b); - return c; -} - -// Using precision qualifier in GLM: - -#include - -ivec3 foo(const vec4 & v) -{ - highp_vec4 a = v; - medium_vec4 b = a; - lowp_ivec3 c = glm::ivec3(b); - return c; -} -``` - ---- -
- -## 7. FAQ - -### 7.1 Why GLM follows GLSL specification and conventions? - -Following GLSL conventions is a really strict policy of GLM. It has been designed following the idea that everyone does its own math library with his own conventions. The idea is that brilliant developers (the OpenGL ARB) worked together and agreed to make GLSL. Following GLSL conventions -is a way to find consensus. Moreover, basically when a developer knows GLSL, he knows GLM. - -### 7.2. Does GLM run GLSL program? - -No, GLM is a C++ implementation of a subset of GLSL. - -### 7.3. Does a GLSL compiler build GLM codes? - -No, this is not what GLM attends to do. - -### 7.4. Should I use ‘GTX’ extensions? - -GTX extensions are qualified to be experimental extensions. In GLM this means that these extensions might change from version to version without any restriction. In practice, it doesn’t really change except time to -time. GTC extensions are stabled, tested and perfectly reliable in time. Many GTX extensions extend GTC extensions and provide a way to explore features and implementations and APIs and then are promoted to GTC -extensions. This is fairly the way OpenGL features are developed; through extensions. - -Stating with GLM 0.9.9, to use experimental extensions, an application must define GLM_ENABLE_EXPERIMENTAL. - -### 7.5. Where can I ask my questions? - -A good place is [stackoverflow](http://stackoverflow.com/search?q=GLM) using the GLM tag. - -### 7.6. Where can I find the documentation of extensions? - -The Doxygen generated documentation includes a complete list of all extensions available. Explore this [*API documentation*](http://glm.g-truc.net/html/index.html) to get a complete -view of all GLM capabilities! - -### 7.7. Should I use ‘using namespace glm;’? - -NO! Chances are that if using namespace glm; is called, especially in a header file, name collisions will happen as GLM is based on GLSL which uses common tokens for types and functions. Avoiding using namespace -glm; will a higher compatibility with third party library and SDKs. - -### 7.8. Is GLM fast? - -GLM is mainly designed to be convenient and that's why it is written against the GLSL specification. - -Following the Pareto principle where 20% of the code consumes 80% of the execution time, GLM operates perfectly on the 80% of the code that consumes 20% of the performances. Furthermore, thanks to the lowp, -mediump and highp qualifiers, GLM provides approximations which trade precision for performance. Finally, GLM can automatically produce SIMD optimized code for functions of its implementation. - -However, on performance critical code paths, we should expect that dedicated algorithms should be written to reach peak performance. - -### 7.9. When I build with Visual C++ with /W4 warning level, I have warnings... - -You should not have any warnings even in `/W4` mode. However, if you expect such level for your code, then you should ask for the same level to the compiler by at least disabling the Visual C++ language extensions -(`/Za`) which generates warnings when used. If these extensions are enabled, then GLM will take advantage of them and the compiler will generate warnings. - -### 7.10. Why some GLM functions can crash because of division by zero? - -GLM functions crashing is the result of a domain error. Such behavior follows the precedent set by C and C++'s standard library. For example, it’s a domain error to pass a null vector (all zeroes) to glm::normalize function, or to pass a negative number into std::sqrt. - -### 7.11. What unit for angles is used in GLM? - -GLSL is using radians but GLU is using degrees to express angles. This has caused GLM to use inconsistent units for angles. Starting with GLM 0.9.6, all GLM functions are using radians. For more information, follow -the [link](http://www.g-truc.net/post-0693.html#menu). - -### 7.12. Windows headers cause build errors... - -Some Windows headers define min and max as macros which may cause compatibility with third party libraries such as GLM. -It is highly recommended to [`define NOMINMAX`](http://stackoverflow.com/questions/4913922/possible-problems-with-nominmax-on-visual-c) before including Windows headers to workaround this issue. -To workaround the incompatibility with these macros, GLM will systematically undef these macros if they are defined. - -### 7.13. Constant expressions support - -GLM has some C++ constant expressions support. However, GLM automatically detects the use of SIMD instruction sets through compiler arguments to populate its implementation with SIMD intrinsics. -Unfortunately, GCC and Clang doesn't support SIMD instrinsics as constant expressions. To allow constant expressions on all vectors and matrices types, define `GLM_FORCE_PURE` before including GLM headers. - ---- -
- -## 8. Code samples - -This series of samples only shows various GLM features without consideration of any sort. - -### 8.1. Compute a triangle normal - -```cpp -#include // vec3 normalize cross - -glm::vec3 computeNormal(glm::vec3 const& a, glm::vec3 const& b, glm::vec3 const& c) -{ - return glm::normalize(glm::cross(c - a, b - a)); -} - -// A much faster but less accurate alternative: -#include // vec3 cross -#include // fastNormalize - -glm::vec3 computeNormal(glm::vec3 const& a, glm::vec3 const& b, glm::vec3 const& c) -{ - return glm::fastNormalize(glm::cross(c - a, b - a)); -} -``` - -### 8.2. Matrix transform - -```cpp -#include // vec3, vec4, ivec4, mat4 -#include // translate, rotate, scale, perspective -#include // value_ptr - -void setUniformMVP(GLuint Location, glm::vec3 const& Translate, glm::vec3 const& Rotate) -{ - glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.f); - glm::mat4 ViewTranslate = glm::translate( - glm::mat4(1.0f), Translate); - glm::mat4 ViewRotateX = glm::rotate( - ViewTranslate, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f)); - glm::mat4 View = glm::rotate(ViewRotateX, - Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f)); - glm::mat4 Model = glm::scale( - glm::mat4(1.0f), glm::vec3(0.5f)); - glm::mat4 MVP = Projection * View * Model; - glUniformMatrix4fv(Location, 1, GL_FALSE, glm::value_ptr(MVP)); -} -``` - -### 8.3. Vector types - -```cpp -#include // vec2 -#include // hvec2, i8vec2, i32vec2 - -std::size_t const VertexCount = 4; - -// Float quad geometry -std::size_t const PositionSizeF32 = VertexCount * sizeof(glm::vec2); -glm::vec2 const PositionDataF32[VertexCount] = -{ - glm::vec2(-1.0f,-1.0f), - glm::vec2( 1.0f,-1.0f), - glm::vec2( 1.0f, 1.0f), - glm::vec2(-1.0f, 1.0f) -}; - -// Half-float quad geometry -std::size_t const PositionSizeF16 = VertexCount * sizeof(glm::hvec2); -glm::hvec2 const PositionDataF16[VertexCount] = -{ - glm::hvec2(-1.0f, -1.0f), - glm::hvec2( 1.0f, -1.0f), - glm::hvec2( 1.0f, 1.0f), - glm::hvec2(-1.0f, 1.0f) -}; - -// 8 bits signed integer quad geometry -std::size_t const PositionSizeI8 = VertexCount * sizeof(glm::i8vec2); -glm::i8vec2 const PositionDataI8[VertexCount] = -{ - glm::i8vec2(-1,-1), - glm::i8vec2( 1,-1), - glm::i8vec2( 1, 1), - glm::i8vec2(-1, 1) -}; - -// 32 bits signed integer quad geometry -std::size_t const PositionSizeI32 = VertexCount * sizeof(glm::i32vec2); -glm::i32vec2 const PositionDataI32[VertexCount] = -{ - glm::i32vec2(-1,-1), - glm::i32vec2( 1,-1), - glm::i32vec2( 1, 1), - glm::i32vec2(-1, 1) -}; -``` - -### 8.4. Lighting - -```cpp -#include // vec3 normalize reflect dot pow -#include // ballRand - -// vecRand3, generate a random and equiprobable normalized vec3 -glm::vec3 lighting(intersection const& Intersection, material const& Material, light const& Light, glm::vec3 const& View) -{ - glm::vec3 Color = glm::vec3(0.0f); - glm::vec3 LightVertor = glm::normalize( - Light.position() - Intersection.globalPosition() + - glm::ballRand(0.0f, Light.inaccuracy()); - - if(!shadow(Intersection.globalPosition(), Light.position(), LightVertor)) - { - float Diffuse = glm::dot(Intersection.normal(), LightVector); - if(Diffuse <= 0.0f) - return Color; - - if(Material.isDiffuse()) - Color += Light.color() * Material.diffuse() * Diffuse; - - if(Material.isSpecular()) - { - glm::vec3 Reflect = glm::reflect(-LightVector, Intersection.normal()); - float Dot = glm::dot(Reflect, View); - float Base = Dot > 0.0f ? Dot : 0.0f; - float Specular = glm::pow(Base, Material.exponent()); - Color += Material.specular() \* Specular; - } - } - - return Color; -} -``` - ---- -
- -## 9. Contributing to GLM - -### 9.1. Submitting bug reports - -Bug should be reported on Github using the [issue page](https://github.com/g-truc/glm/issues). - -A minimal code to reproduce the issue will help. - -Additional, bugs can be configuration specific. We can report the configuration by defining `GLM_FORCE_MESSAGES` before including GLM headers then build and copy paste the build messages GLM will output. - -```cpp -#define GLM_FORCE_MESSAGES -#include -``` - -An example of build messages generated by GLM: -``` -GLM: 0.9.9.1 -GLM: C++ 17 with extensions -GLM: GCC compiler detected" -GLM: x86 64 bits with AVX instruction set build target -GLM: Linux platform detected -GLM: GLM_FORCE_SWIZZLE is undefined. swizzling functions or operators are disabled. -GLM: GLM_FORCE_SIZE_T_LENGTH is undefined. .length() returns a glm::length_t, a typedef of int following GLSL. -GLM: GLM_FORCE_UNRESTRICTED_GENTYPE is undefined. Follows strictly GLSL on valid function genTypes. -GLM: GLM_FORCE_DEPTH_ZERO_TO_ONE is undefined. Using negative one to one depth clip space. -GLM: GLM_FORCE_LEFT_HANDED is undefined. Using right handed coordinate system. -``` - -### 9.2. Contributing to GLM with pull request - -This tutorial will show us how to successfully contribute a bug-fix to GLM using GitHub's Pull Request workflow. - -We will be typing git commands in the Terminal. Mac and Linux users may have git pre-installed. You can download git from [here](http://git-scm.com/downloads). - -The tutorial assumes you have some basic understanding of git concepts - repositories, branches, commits, etc. Explaining it all from scratch is beyond the scope of this tutorial. Some good links to learn git basics are: [Link 1](http://git-scm.com/book/en/Getting-Started-Git-Basics), [Link 2](https://www.atlassian.com/git/tutorial/git-basics) - -#### Step 1: Setup our GLM Fork - -We will make our changes in our own copy of the GLM sitory. On the GLM GitHub repo and we press the Fork button. -We need to download a copy of our fork to our local machine. In the terminal, type: - -``` ->>> git clone -``` - -This will clone our fork repository into the current folder. - -We can find our repository git url on the Github reposotory page. The url looks like this: `https://github.com//.git` - -#### Step 2: Synchronizing our fork - -We can use the following command to add `upstream` (original project repository) as a remote repository so that we can fetch the latest GLM commits into our branch and keep our forked copy is synchronized. - -``` ->>> git remote add upstream https://github.com/processing/processing.git -``` - -To synchronize our fork to the latest commit in the GLM repository, we can use the following command: - -``` ->>> git fetch upstream -``` - -Then, we can merge the remote master branch to our current branch: - -``` ->>> git merge upstream/master -``` - -Now our local copy of our fork has been synchronized. However, the fork's copy is not updated on GitHub's servers yet. To do that, use: - -``` ->>> git push origin master -``` - -#### Step 3: Modifying our GLM Fork - -Our fork is now setup and we are ready to modify GLM to fix a bug. - -It's a good practice to make changes in our fork in a separate branch than the master branch because we can submit only one pull request per branch. - -Before creating a new branch, it's best to synchronize our fork and then create a new branch from the latest master branch. - -If we are not on the master branch, we should switch to it using: -``` ->>> git checkout master -``` - -To create a new branch called `bugifx`, we use: -``` -git branch bugfix -``` - -Once the code changes for the fix is done, we need to commit the changes: -``` ->>> git commit -m "Resolve the issue that caused problem with a specific fix #432" -``` - -The commit message should be as specific as possible and finished by the bug number in the [GLM GitHub issue page](https://github.com/g-truc/glm/issues) - -Finally, we need to push our changes in our branch to our GitHub fork using: -``` ->>> git push origin bugfix -``` - -Some things to keep in mind for a pull request: -* Keep it minimal: Try to make the minimum required changes to fix the issue. If we have added any debugging code, we should remove it. -* A fix at a time: The pull request should deal with one issue at a time only, unless two issue are so interlinked they must be fixed together. -* Write a test: GLM is largely unit tests. Unit tests are in `glm/test` directory. We should also add tests for the fixes we provide to ensure future regression doesn't happen. -* No whitespace changes: Avoid unnecessary formatting or whitespace changes in other parts of the code. Be careful with auto-format options in the code editor which can cause wide scale formatting changes. -* Follow [GLM Code Style](#section9_3) for consistency. -* Tests passes: Make sure GLM build and tests don't fail because of the changes. - -#### Step 4: Submitting a Pull Request - -We need to submit a pull request from the `bugfix` branch to GLM's master branch. - -On the fork github page, we can click on the *Pull Request* button. Then we can describe our pull request. Finally we press *Send Pull Request*. - -Please be patient and give them some time to go through it. - -The pull request review may suggest additional changes. So we can make those changes in our branch, and push those changes to our fork repository. Our pull request will always include the latest changes in our branch on GitHub, so we don't need to resubmit the pull request. - -Once your changes have been accepted, a project maintainer will merge our pull request. - -We are grateful to the users for their time and effort in contributing fixes. - -### 9.3. Coding style - -#### Indentation - -Always tabs. Never spaces. - -#### Spacing - -No space after if. Use if(blah) not if (blah). Example if/else block: - -```cpp -if(blah) -{ - // yes like this -} -else -{ - // something besides -} -``` - -Single line if blocks: -```cpp -if(blah) - // yes like this -else - // something besides -``` - -No spaces inside parens: -```cpp -if (blah) // No -if( blah ) // No -if ( blah ) // No -if(blah) // Yes -``` - -Use spaces before/after commas: -```cpp -someFunction(apple,bear,cat); // No -someFunction(apple, bear, cat); // Yes -``` - -Use spaces before/after use of `+, -, *, /, %, >>, <<, |, &, ^, ||, &&` operators: -```cpp -vec4 v = a + b; -``` - -#### Blank lines - -One blank line after the function blocks. - -#### Comments - -Always one space after the // in single line comments - -One space before // at the end of a line (that has code as well) - -Try to use // comments inside functions, to make it easier to remove a whole block via /* */ - -#### Cases - -```cpp -#define GLM_MY_DEFINE 76 - -class myClass -{}; - -myClass const MyClass; - -namespace glm{ // glm namespace is for public code -namespace detail // glm::detail namespace is for implementation detail -{ - float myFunction(vec2 const& V) - { - return V.x + V.y; - } - - float myFunction(vec2 const* const V) - { - return V->x + V->y; - } -}//namespace detail -}//namespace glm -``` - ---- -
- -## 10. References - -### 10.1. OpenGL specifications - -* OpenGL 4.3 core specification -* [GLSL 4.30 specification](http://www.opengl.org/registry/doc/GLSLangSpec.4.30.7.diff.pdf) -![](media/image21.png){width="2.859722222222222in" height="1.6083333333333334in"}- [*GLU 1.3 specification*](http://www.opengl.org/documentation/specs/glu/glu1_3.pdf) - -### 10.2. External links - -* [GLM on stackoverflow](http://stackoverflow.com/search?q=GLM) - -### 10.3. Projects using GLM - -***[Leo’s Fortune](http://www.leosfortune.com/)*** - -Leo’s Fortune is a platform adventure game where you hunt down the cunning and mysterious thief that stole your gold. Available on PS4, Xbox One, PC, Mac, iOS and Android. - -Beautifully hand-crafted levels bring the story of Leo to life in this epic adventure. - -“I just returned home to find all my gold has been stolen! For some devious purpose, the thief has dropped pieces of my gold like breadcrumbs through the woods.” - -“Despite this pickle of a trap, I am left with no choice but to follow the trail.” - -“Whatever lies ahead, I must recover my fortune.” -Leopold - -![](/doc/manual/references-leosfortune.jpeg) - -![](/doc/manual/references-leosfortune2.jpg) - -[***OpenGL 4.0 Shading Language Cookbook***](http://www.packtpub.com/opengl-4-0-shading-language-cookbook/book?tag=rk/opengl4-abr1/0811) - -A set of recipes that demonstrates a wide of techniques for producing high-quality, real-time 3D graphics with GLSL 4.0, such as: - -* Using GLSL 4.0 to implement lighting and shading techniques. -* Using the new features of GLSL 4.0 including tessellation and geometry shaders. -* Using textures in GLSL as part of a wide variety of techniques from basic texture mapping to deferred shading. - -Simple, easy-to-follow examples with GLSL source code are provided, as well as a basic description of the theory behind each technique. - -![](/doc/manual/references-glsl4book.jpg) - -[***Outerra***](http://outerra.com/) - -A 3D planetary engine for seamless planet rendering from space down to the surface. Can use arbitrary resolution of elevation data, refining it to centimetre resolution using fractal algorithms. - -![](/doc/manual/references-outerra1.jpg) - -![](/doc/manual/references-outerra2.jpg) - -![](/doc/manual/references-outerra3.jpg) - -![](/doc/manual/references-outerra4.jpg) - -[***Falcor***](https://github.com/NVIDIA/Falcor) - -Real-time rendering research framework by NVIDIA. - -[***Cinder***](https://libcinder.org/) - -Cinder is a free and open source library for professional-quality creative coding in C++. - -Cinder is a C++ library for programming with aesthetic intent - the sort of development often called creative coding. This includes domains like graphics, audio, video, and computational geometry. Cinder is cross-platform, with official support for OS X, Windows, iOS, and WinRT. - -Cinder is production-proven, powerful enough to be the primary tool for professionals, but still suitable for learning and experimentation. Cinder is released under the [2-Clause BSD License](http://opensource.org/licenses/BSD-2-Clause). - -![](/doc/manual/references-cinder.png) - -[***opencloth***](http://code.google.com/p/opencloth/) - -A collection of source codes implementing cloth simulation algorithms in OpenGL. - -Simple, easy-to-follow examples with GLSL source code, as well as a basic description of the theory behind each technique. - -![](/doc/manual/references-opencloth1.png) - -![](/doc/manual/references-opencloth3.png) - -[***LibreOffice***](https://www.libreoffice.org/) - -LibreOffice includes several applications that make it the most powerful Free and Open Source office suite on the market. - -[***Are you using GLM in a project?***](mailto:glm@g-truc.net) - -### 10.4. Tutorials using GLM - -* [Sascha Willems' Vulkan examples](https://github.com/SaschaWillems/Vulkan), Examples and demos for the new Vulkan API -* [VKTS](https://github.com/McNopper/Vulkan) Vulkan examples using VulKan ToolS (VKTS) -* [*The OpenGL Samples Pack*](http://www.g-truc.net/project-0026.html#menu), samples that show how to set up all the different new features -* [*Learning Modern 3D Graphics programming*](http://www.arcsynthesis.org/gltut/), a great OpenGL tutorial using GLM by Jason L. McKesson -* [*Morten Nobel-Jørgensen’s*](http://blog.nobel-joergensen.com/2011/04/02/glm-brilliant-math-library-for-opengl/) review and use an [*OpenGL renderer*](https://github.com/mortennobel/RenderE) -* [*Swiftless’ OpenGL tutorial*](http://www.swiftless.com/opengltuts.html) using GLM by Donald Urquhart -* [*Rastergrid*](http://rastergrid.com/blog/), many technical articles with companion programs using GLM by Daniel Rákos\ -* [*OpenGL Tutorial*](http://www.opengl-tutorial.org), tutorials for OpenGL 3.1 and later -* [*OpenGL Programming on Wikibooks*](http://en.wikibooks.org/wiki/OpenGL_Programming): For beginners who are discovering OpenGL. -* [*3D Game Engine Programming*](http://3dgep.com/): Learning the latest 3D Game Engine Programming techniques. -* [Game Tutorials](http://www.gametutorials.com/opengl-4-matrices-and-glm/), graphics and game programming. -* [open.gl](https://open.gl/), OpenGL tutorial -* [c-jump](http://www.c-jump.com/bcc/common/Talk3/Math/GLM/GLM.html), GLM tutorial -* [Learn OpenGL](http://learnopengl.com/), OpenGL tutorial -* [***Are you using GLM in a tutorial?***](mailto:glm@g-truc.net) - -### 10.5. Equivalent for other languages - -* [*cglm*](https://github.com/recp/cglm): OpenGL Mathematics (glm) for C. -* [*GlmSharp*](https://github.com/Philip-Trettner/GlmSharp): Open-source semi-generated GLM-flavored math library for .NET/C\#. -* [glm-js](https://github.com/humbletim/glm-js): JavaScript adaptation of the OpenGL Mathematics (GLM) C++ library interfaces -* [JVM OpenGL Mathematics (GLM)](https://github.com/kotlin-graphics/glm): written in Kotlin, Java compatible -* [JGLM](https://github.com/jroyalty/jglm) - Java OpenGL Mathematics Library -* [SwiftGL Math Library](https://github.com/SwiftGL/Math/blob/master/Sources/glm.swift) GLM for Swift -* [glm-go](https://github.com/jbowtie/glm-go): Simple linear algebra library similar in spirit to GLM -* [openll](https://github.com/Polkm/openll): Lua bindings for OpenGL, GLM, GLFW, OpenAL, SOIL and PhysicsFS -* [glm-rs](https://github.com/dche/glm-rs): GLSL mathematics for Rust programming language -* [glmpython](https://github.com/Queatz/glmpython): GLM math library for Python - -### 10.6. Alternatives to GLM - -* [*CML*](http://cmldev.net/): The CML (Configurable Math Library) is a free C++ math library for games and graphics. -* [*Eigen*](http://eigen.tuxfamily.org/): A more heavy weight math library for general linear algebra in C++. -* [*glhlib*](http://glhlib.sourceforge.net/): A much more than glu C library. -* Are you using or developing an alternative library to GLM? - -### 10.7. Acknowledgements - -GLM is developed and maintained by [*Christophe Riccio*](http://www.g-truc.net) but many contributors have made this project what it is. - -Special thanks to: -* Ashima Arts and Stefan Gustavson for their work on [*webgl-noise*](https://github.com/ashima/webgl-noise) which has been used for GLM noises implementation. -* [*Arthur Winters*](http://athile.net/library/wiki/index.php?title=Athile_Technologies) for the C++11 and Visual C++ swizzle operators implementation and tests. -* Joshua Smith and Christoph Schied for the discussions and the experiments around the swizzle operators implementation issues. -* Guillaume Chevallereau for providing and maintaining the [*nightlight build system*](http://my.cdash.org/index.php?project=GLM). -* Ghenadii Ursachi for GLM\_GTX\_matrix\_interpolation implementation. -* Mathieu Roumillac for providing some implementation ideas. -* [*Grant James*](http://www.zeuscmd.com/) for the implementation of all combination of none-squared matrix products. -* Jesse Talavera-Greenberg for his work on the manual amount other things. -* All the GLM users that have report bugs and hence help GLM to become a great library! diff --git a/src/qged/display/glm/readme.md b/src/qged/display/glm/readme.md deleted file mode 100644 index 611c2576658..00000000000 --- a/src/qged/display/glm/readme.md +++ /dev/null @@ -1,1209 +0,0 @@ -![glm](/doc/manual/logo-mini.png) - -[OpenGL Mathematics](http://glm.g-truc.net/) (*GLM*) is a header only C++ mathematics library for graphics software based on the [OpenGL Shading Language (GLSL) specifications](https://www.opengl.org/registry/doc/GLSLangSpec.4.50.diff.pdf). - -*GLM* provides classes and functions designed and implemented with the same naming conventions and functionality than *GLSL* so that anyone who knows *GLSL*, can use *GLM* as well in C++. - -This project isn't limited to *GLSL* features. An extension system, based on the *GLSL* extension conventions, provides extended capabilities: matrix transformations, quaternions, data packing, random numbers, noise, etc... - -This library works perfectly with *[OpenGL](https://www.opengl.org)* but it also ensures interoperability with other third party libraries and SDK. It is a good candidate for software rendering (raytracing / rasterisation), image processing, physic simulations and any development context that requires a simple and convenient mathematics library. - -*GLM* is written in C++98 but can take advantage of C++11 when supported by the compiler. It is a platform independent library with no dependence and it officially supports the following compilers: -- [Apple Clang 6.0](https://developer.apple.com/library/mac/documentation/CompilerTools/Conceptual/LLVMCompilerOverview/index.html) and higher -- [GCC](http://gcc.gnu.org/) 4.7 and higher -- [Intel C++ Composer](https://software.intel.com/en-us/intel-compilers) XE 2013 and higher -- [LLVM](http://llvm.org/) 3.4 and higher -- [Visual C++](http://www.visualstudio.com/) 2013 and higher -- [CUDA](https://developer.nvidia.com/about-cuda) 9.0 and higher (experimental) -- [SYCL](https://www.khronos.org/sycl/) (experimental: only [ComputeCpp](https://codeplay.com/products/computesuite/computecpp) implementation has been tested). -- Any C++11 compiler - -For more information about *GLM*, please have a look at the [manual](manual.md) and the [API reference documentation](http://glm.g-truc.net/0.9.8/api/index.html). -The source code and the documentation are licensed under either the [Happy Bunny License (Modified MIT) or the MIT License](manual.md#section0). - -Thanks for contributing to the project by [submitting issues](https://github.com/g-truc/glm/issues) for bug reports and feature requests. Any feedback is welcome at [glm@g-truc.net](mailto://glm@g-truc.net). - -```cpp -#include // glm::vec3 -#include // glm::vec4 -#include // glm::mat4 -#include // glm::translate, glm::rotate, glm::scale -#include // glm::perspective -#include // glm::pi - -glm::mat4 camera(float Translate, glm::vec2 const& Rotate) -{ - glm::mat4 Projection = glm::perspective(glm::pi() * 0.25f, 4.0f / 3.0f, 0.1f, 100.f); - glm::mat4 View = glm::translate(glm::mat4(1.0f), glm::vec3(0.0f, 0.0f, -Translate)); - View = glm::rotate(View, Rotate.y, glm::vec3(-1.0f, 0.0f, 0.0f)); - View = glm::rotate(View, Rotate.x, glm::vec3(0.0f, 1.0f, 0.0f)); - glm::mat4 Model = glm::scale(glm::mat4(1.0f), glm::vec3(0.5f)); - return Projection * View * Model; -} -``` - -## [Lastest release](https://github.com/g-truc/glm/releases/latest) - -## Project Health - -| Service | System | Compiler | Status | -| ------- | ------ | -------- | ------ | -| [Travis CI](https://travis-ci.org/g-truc/glm)| MacOSX, Linux 64 bits | Clang 3.6, Clang 5.0, GCC 4.9, GCC 7.3 | [![Travis CI](https://travis-ci.org/g-truc/glm.svg?branch=master)](https://travis-ci.org/g-truc/glm) -| [AppVeyor](https://ci.appveyor.com/project/Groovounet/glm)| Windows 32 and 64 | Visual Studio 2013, Visual Studio 2015, Visual Studio 2017 | [![AppVeyor](https://ci.appveyor.com/api/projects/status/32r7s2skrgm9ubva?svg=true)](https://ci.appveyor.com/project/Groovounet/glm) - -## Release notes - -### [GLM 0.9.9.8](https://github.com/g-truc/glm/releases/tag/0.9.9.8) - 2020-04-13 -#### Features: -- Added GLM_EXT_vector_intX* and GLM_EXT_vector_uintX* extensions -- Added GLM_EXT_matrix_intX* and GLM_EXT_matrix_uintX* extensions - -#### Improvements: -- Added clamp, repeat, mirrorClamp and mirrorRepeat function to GLM_EXT_scalar_commond and GLM_EXT_vector_commond extensions with tests - -#### Fixes: -- Fixed unnecessary warnings from matrix_projection.inl #995 -- Fixed quaternion slerp overload which interpolates with extra spins #996 -- Fixed for glm::length using arch64 #992 -- Fixed singularity check for quatLookAt #770 - -### [GLM 0.9.9.7](https://github.com/g-truc/glm/releases/tag/0.9.9.7) - 2020-01-05 -#### Improvements: -- Improved Neon support with more functions optimized #950 -- Added CMake GLM interface #963 -- Added fma implementation based on std::fma #969 -- Added missing quat constexpr #955 -- Added GLM_FORCE_QUAT_DATA_WXYZ to store quat data as w,x,y,z instead of x,y,z,w #983 - -#### Fixes: -- Fixed equal ULP variation when using negative sign #965 -- Fixed for intersection ray/plane and added related tests #953 -- Fixed ARM 64bit detection #949 -- Fixed GLM_EXT_matrix_clip_space warnings #980 -- Fixed Wimplicit-int-float-conversion warnings with clang 10+ #986 -- Fixed EXT_matrix_clip_space perspectiveFov - -### [GLM 0.9.9.6](https://github.com/g-truc/glm/releases/tag/0.9.9.6) - 2019-09-08 -#### Features: -- Added Neon support #945 -- Added SYCL support #914 -- Added EXT_scalar_integer extension with power of two and multiple scalar functions -- Added EXT_vector_integer extension with power of two and multiple vector functions - -#### Improvements: -- Added Visual C++ 2019 detection -- Added Visual C++ 2017 15.8 and 15.9 detection -- Added missing genType check for bitCount and bitfieldReverse #893 - -#### Fixes: -- Fixed for g++6 where -std=c++1z sets __cplusplus to 201500 instead of 201402 #921 -- Fixed hash hashes qua instead of tquat #919 -- Fixed .natvis as structs renamed #915 -- Fixed ldexp and frexp declaration #895 -- Fixed missing const to quaternion conversion operators #890 -- Fixed EXT_scalar_ulp and EXT_vector_ulp API coding style -- Fixed quaternion componant order: w, {x, y, z} #916 -- Fixed GLM_HAS_CXX11_STL broken on Clang with Linux #926 -- Fixed Clang or GCC build due to wrong GLM_HAS_IF_CONSTEXPR definition #907 -- Fixed CUDA 9 build #910 - -#### Deprecation: - - Removed CMake install and uninstall scripts - -### [GLM 0.9.9.5](https://github.com/g-truc/glm/releases/tag/0.9.9.5) - 2019-04-01 -#### Fixes: -- Fixed build errors when defining GLM_ENABLE_EXPERIMENTAL #884 #883 -- Fixed 'if constexpr' warning #887 -- Fixed missing declarations for frexp and ldexp #886 - -### [GLM 0.9.9.4](https://github.com/g-truc/glm/releases/tag/0.9.9.4) - 2019-03-19 -#### Features: -- Added mix implementation for matrices in EXT_matrix_common #842 -- Added BUILD_SHARED_LIBS and BUILD_STATIC_LIBS build options #871 - -#### Improvements: -- Added GLM_FORCE_INTRINSICS to enable SIMD instruction code path. By default, it's disabled allowing constexpr support by default. #865 -- Optimized inverseTransform #867 - -#### Fixes: -- Fixed in mat4x3 conversion #829 -- Fixed constexpr issue on GCC #832 #865 -- Fixed mix implementation to improve GLSL conformance #866 -- Fixed int8 being defined as unsigned char with some compiler #839 -- Fixed vec1 include #856 -- Ignore .vscode #848 - -### [GLM 0.9.9.3](https://github.com/g-truc/glm/releases/tag/0.9.9.3) - 2018-10-31 -#### Features: -- Added equal and notEqual overload with max ULPs parameters for scalar numbers #121 -- Added GLM_FORCE_SILENT_WARNINGS to silent GLM warnings when using language extensions but using W4 or Wpedantic warnings #814 #775 -- Added adjugate functions to GTX_matrix_operation #151 -- Added GLM_FORCE_ALIGNED_GENTYPES to enable aligned types and SIMD instruction are not enabled. This disable constexpr #816 - -#### Improvements: -- Added constant time ULP distance between float #121 -- Added GLM_FORCE_SILENT_WARNINGS to suppress GLM warnings #822 - -#### Fixes: -- Fixed simplex noise build with double #734 -- Fixed bitfieldInsert according to GLSL spec #818 -- Fixed refract for negative 'k' #808 - -### [GLM 0.9.9.2](https://github.com/g-truc/glm/releases/tag/0.9.9.2) - 2018-09-14 -#### Fixes: -- Fixed GLM_FORCE_CXX** section in the manual -- Fixed default initialization with vector and quaternion types using GLM_FORCE_CTOR_INIT #812 - -### [GLM 0.9.9.1](https://github.com/g-truc/glm/releases/tag/0.9.9.1) - 2018-09-03 -#### Features: -- Added bitfieldDeinterleave to GTC_bitfield -- Added missing equal and notEqual with epsilon for quaternion types to GTC_quaternion -- Added EXT_matrix_relational: equal and notEqual with epsilon for matrix types -- Added missing aligned matrix types to GTC_type_aligned -- Added C++17 detection -- Added Visual C++ language standard version detection -- Added PDF manual build from markdown - -#### Improvements: -- Added a section to the manual for contributing to GLM -- Refactor manual, lists all configuration defines -- Added missing vec1 based constructors -- Redesigned constexpr support which excludes both SIMD and constexpr #783 -- Added detection of Visual C++ 2017 toolsets -- Added identity functions #765 -- Splitted headers into EXT extensions to improve compilation time #670 -- Added separated performance tests -- Clarified refract valid range of the indices of refraction, between -1 and 1 inclusively #806 - -#### Fixes: -- Fixed SIMD detection on Clang and GCC -- Fixed build problems due to printf and std::clock_t #778 -- Fixed int mod -- Anonymous unions require C++ language extensions -- Fixed ortho #790 -- Fixed Visual C++ 2013 warnings in vector relational code #782 -- Fixed ICC build errors with constexpr #704 -- Fixed defaulted operator= and constructors #791 -- Fixed invalid conversion from int scalar with vec4 constructor when using SSE instruction -- Fixed infinite loop in random functions when using negative radius values using an assert #739 - -### [GLM 0.9.9.0](https://github.com/g-truc/glm/releases/tag/0.9.9.0) - 2018-05-22 -#### Features: -- Added RGBM encoding in GTC_packing #420 -- Added GTX_color_encoding extension -- Added GTX_vec_swizzle, faster compile time swizzling then swizzle operator #558 -- Added GTX_exterior_product with a vec2 cross implementation #621 -- Added GTX_matrix_factorisation to factor matrices in various forms #654 -- Added [GLM_ENABLE_EXPERIMENTAL](manual.md#section7_4) to enable experimental features. -- Added packing functions for integer vectors #639 -- Added conan packaging configuration #643 #641 -- Added quatLookAt to GTX_quaternion #659 -- Added fmin, fmax and fclamp to GTX_extended_min_max #372 -- Added EXT_vector_relational: extend equal and notEqual to take an epsilon argument -- Added EXT_vector_relational: openBounded and closeBounded -- Added EXT_vec1: *vec1 types -- Added GTX_texture: levels function -- Added spearate functions to use both nagative one and zero near clip plans #680 -- Added GLM_FORCE_SINGLE_ONLY to use GLM on platforms that don't support double #627 -- Added GTX_easing for interpolation functions #761 - -#### Improvements: -- No more default initialization of vector, matrix and quaternion types -- Added lowp variant of GTC_color_space convertLinearToSRGB #419 -- Replaced the manual by a markdown version #458 -- Improved API documentation #668 -- Optimized GTC_packing implementation -- Optimized GTC_noise functions -- Optimized GTC_color_space HSV to RGB conversions -- Optimised GTX_color_space_YCoCg YCoCgR conversions -- Optimized GTX_matrix_interpolation axisAngle function -- Added FAQ 12: Windows headers cause build errors... #557 -- Removed GCC shadow warnings #595 -- Added error for including of different versions of GLM #619 -- Added GLM_FORCE_IGNORE_VERSION to ignore error caused by including different version of GLM #619 -- Reduced warnings when using very strict compilation flags #646 -- length() member functions are constexpr #657 -- Added support of -Weverything with Clang #646 -- Improved exponential function test coverage -- Enabled warnings as error with Clang unit tests -- Conan package is an external repository: https://github.com/bincrafters/conan-glm -- Clarify quat_cast documentation, applying on pure rotation matrices #759 - -#### Fixes: -- Removed doxygen references to GTC_half_float which was removed in 0.9.4 -- Fixed glm::decompose #448 -- Fixed intersectRayTriangle #6 -- Fixed dual quaternion != operator #629 -- Fixed usused variable warning in GTX_spline #618 -- Fixed references to GLM_FORCE_RADIANS which was removed #642 -- Fixed glm::fastInverseSqrt to use fast inverse square #640 -- Fixed axisAngle NaN #638 -- Fixed integer pow from GTX_integer with null exponent #658 -- Fixed quat normalize build error #656 -- Fixed Visual C++ 2017.2 warning regarding __has_feature definision #655 -- Fixed documentation warnings -- Fixed GLM_HAS_OPENMP when OpenMP is not enabled -- Fixed Better follow GLSL min and max specification #372 -- Fixed quaternion constructor from two vectors special cases #469 -- Fixed glm::to_string on quaternions wrong components order #681 -- Fixed acsch #698 -- Fixed isnan on CUDA #727 - -#### Deprecation: -- Requires Visual Studio 2013, GCC 4.7, Clang 3.4, Cuda 7, ICC 2013 or a C++11 compiler -- Removed GLM_GTX_simd_vec4 extension -- Removed GLM_GTX_simd_mat4 extension -- Removed GLM_GTX_simd_quat extension -- Removed GLM_SWIZZLE, use GLM_FORCE_SWIZZLE instead -- Removed GLM_MESSAGES, use GLM_FORCE_MESSAGES instead -- Removed GLM_DEPTH_ZERO_TO_ONE, use GLM_FORCE_DEPTH_ZERO_TO_ONE instead -- Removed GLM_LEFT_HANDED, use GLM_FORCE_LEFT_HANDED instead -- Removed GLM_FORCE_NO_CTOR_INIT -- Removed glm::uninitialize - ---- -### [GLM 0.9.8.5](https://github.com/g-truc/glm/releases/tag/0.9.8.5) - 2017-08-16 -#### Features: -- Added Conan package support #647 - -#### Fixes: -- Fixed Clang version detection from source #608 -- Fixed packF3x9_E1x5 exponent packing #614 -- Fixed build error min and max specializations with integer #616 -- Fixed simd_mat4 build error #652 - ---- -### [GLM 0.9.8.4](https://github.com/g-truc/glm/releases/tag/0.9.8.4) - 2017-01-22 -#### Fixes: -- Fixed GTC_packing test failing on GCC x86 due to denorms #212 #577 -- Fixed POPCNT optimization build in Clang #512 -- Fixed intersectRayPlane returns true in parallel case #578 -- Fixed GCC 6.2 compiler warnings #580 -- Fixed GTX_matrix_decompose decompose #582 #448 -- Fixed GCC 4.5 and older build #566 -- Fixed Visual C++ internal error when declaring a global vec type with siwzzle expression enabled #594 -- Fixed GLM_FORCE_CXX11 with Clang and libstlc++ which wasn't using C++11 STL features. #604 - ---- -### [GLM 0.9.8.3](https://github.com/g-truc/glm/releases/tag/0.9.8.3) - 2016-11-12 -#### Improvements: -- Broader support of GLM_FORCE_UNRESTRICTED_GENTYPE #378 - -#### Fixes: -- Fixed Android build error with C++11 compiler but C++98 STL #284 #564 -- Fixed GTX_transform2 shear* functions #403 -- Fixed interaction between GLM_FORCE_UNRESTRICTED_GENTYPE and ortho function #568 -- Fixed bitCount with AVX on 32 bit builds #567 -- Fixed CMake find_package with version specification #572 #573 - ---- -### [GLM 0.9.8.2](https://github.com/g-truc/glm/releases/tag/0.9.8.2) - 2016-11-01 -#### Improvements: -- Added Visual C++ 15 detection -- Added Clang 4.0 detection -- Added warning messages when using GLM_FORCE_CXX** but the compiler - is known to not fully support the requested C++ version #555 -- Refactored GLM_COMPILER_VC values -- Made quat, vec, mat type component length() static #565 - -#### Fixes: -- Fixed Visual C++ constexpr build error #555, #556 - ---- -### [GLM 0.9.8.1](https://github.com/g-truc/glm/releases/tag/0.9.8.1) - 2016-09-25 -#### Improvements: -- Optimized quaternion log function #554 - -#### Fixes: -- Fixed GCC warning filtering, replaced -pedantic by -Wpedantic -- Fixed SIMD faceforward bug. #549 -- Fixed GCC 4.8 with C++11 compilation option #550 -- Fixed Visual Studio aligned type W4 warning #548 -- Fixed packing/unpacking function fixed for 5_6_5 and 5_5_5_1 #552 - ---- -### [GLM 0.9.8.0](https://github.com/g-truc/glm/releases/tag/0.9.8.0) - 2016-09-11 -#### Features: -- Added right and left handed projection and clip control support #447 #415 #119 -- Added compNormalize and compScale functions to GTX_component_wise -- Added packF3x9_E1x5 and unpackF3x9_E1x5 to GTC_packing for RGB9E5 #416 -- Added (un)packHalf to GTC_packing -- Added (un)packUnorm and (un)packSnorm to GTC_packing -- Added 16bit pack and unpack to GTC_packing -- Added 8bit pack and unpack to GTC_packing -- Added missing bvec* && and || operators -- Added iround and uround to GTC_integer, fast round on positive values -- Added raw SIMD API -- Added 'aligned' qualifiers -- Added GTC_type_aligned with aligned *vec* types -- Added GTC_functions extension -- Added quaternion version of isnan and isinf #521 -- Added lowestBitValue to GTX_bit #536 -- Added GLM_FORCE_UNRESTRICTED_GENTYPE allowing non basic genType #543 - -#### Improvements: -- Improved SIMD and swizzle operators interactions with GCC and Clang #474 -- Improved GTC_random linearRand documentation -- Improved GTC_reciprocal documentation -- Improved GLM_FORCE_EXPLICIT_CTOR coverage #481 -- Improved OpenMP support detection for Clang, GCC, ICC and VC -- Improved GTX_wrap for SIMD friendliness -- Added constexpr for *vec*, *mat*, *quat* and *dual_quat* types #493 -- Added NEON instruction set detection -- Added MIPS CPUs detection -- Added PowerPC CPUs detection -- Use Cuda built-in function for abs function implementation with Cuda compiler -- Factorized GLM_COMPILER_LLVM and GLM_COMPILER_APPLE_CLANG into GLM_COMPILER_CLANG -- No more warnings for use of long long -- Added more information to build messages - -#### Fixes: -- Fixed GTX_extended_min_max filename typo #386 -- Fixed intersectRayTriangle to not do any unintentional backface culling -- Fixed long long warnings when using C++98 on GCC and Clang #482 -- Fixed sign with signed integer function on non-x86 architecture -- Fixed strict aliasing warnings #473 -- Fixed missing vec1 overload to length2 and distance2 functions #431 -- Fixed GLM test '/fp:fast' and '/Za' command-line options are incompatible -- Fixed quaterion to mat3 cast function mat3_cast from GTC_quaternion #542 -- Fixed GTX_io for Cuda #547 #546 - -#### Deprecation: -- Removed GLM_FORCE_SIZE_FUNC define -- Deprecated GLM_GTX_simd_vec4 extension -- Deprecated GLM_GTX_simd_mat4 extension -- Deprecated GLM_GTX_simd_quat extension -- Deprecated GLM_SWIZZLE, use GLM_FORCE_SWIZZLE instead -- Deprecated GLM_MESSAGES, use GLM_FORCE_MESSAGES instead - ---- -### [GLM 0.9.7.6](https://github.com/g-truc/glm/releases/tag/0.9.7.6) - 2016-07-16 -#### Improvements: -- Added pkg-config file #509 -- Updated list of compiler versions detected -- Improved C++ 11 STL detection #523 - -#### Fixes: -- Fixed STL for C++11 detection on ICC #510 -- Fixed missing vec1 overload to length2 and distance2 functions #431 -- Fixed long long warnings when using C++98 on GCC and Clang #482 -- Fixed scalar reciprocal functions (GTC_reciprocal) #520 - ---- -### [GLM 0.9.7.5](https://github.com/g-truc/glm/releases/tag/0.9.7.5) - 2016-05-24 -#### Improvements: -- Added Visual C++ Clang toolset detection - -#### Fixes: -- Fixed uaddCarry warning #497 -- Fixed roundPowerOfTwo and floorPowerOfTwo #503 -- Fixed Visual C++ SIMD instruction set automatic detection in 64 bits -- Fixed to_string when used with GLM_FORCE_INLINE #506 -- Fixed GLM_FORCE_INLINE with binary vec4 operators -- Fixed GTX_extended_min_max filename typo #386 -- Fixed intersectRayTriangle to not do any unintentional backface culling - ---- -### [GLM 0.9.7.4](https://github.com/g-truc/glm/releases/tag/0.9.7.4) - 2016-03-19 -#### Fixes: -- Fixed asinh and atanh warning with C++98 STL #484 -- Fixed polar coordinates function latitude #485 -- Fixed outerProduct defintions and operator signatures for mat2x4 and vec4 #475 -- Fixed eulerAngles precision error, returns NaN #451 -- Fixed undefined reference errors #489 -- Fixed missing GLM_PLATFORM_CYGWIN declaration #495 -- Fixed various undefined reference errors #490 - ---- -### [GLM 0.9.7.3](https://github.com/g-truc/glm/releases/tag/0.9.7.3) - 2016-02-21 -#### Improvements: -- Added AVX512 detection - -#### Fixes: -- Fixed CMake policy warning -- Fixed GCC 6.0 detection #477 -- Fixed Clang build on Windows #479 -- Fixed 64 bits constants warnings on GCC #463 - ---- -### [GLM 0.9.7.2](https://github.com/g-truc/glm/releases/tag/0.9.7.2) - 2016-01-03 -#### Fixes: -- Fixed GTC_round floorMultiple/ceilMultiple #412 -- Fixed GTC_packing unpackUnorm3x10_1x2 #414 -- Fixed GTC_matrix_inverse affineInverse #192 -- Fixed ICC on Linux build errors #449 -- Fixed ldexp and frexp compilation errors -- Fixed "Declaration shadows a field" warning #468 -- Fixed 'GLM_COMPILER_VC2005 is not defined' warning #468 -- Fixed various 'X is not defined' warnings #468 -- Fixed missing unary + operator #435 -- Fixed Cygwin build errors when using C++11 #405 - ---- -### [GLM 0.9.7.1](https://github.com/g-truc/glm/releases/tag/0.9.7.1) - 2015-09-07 -#### Improvements: -- Improved constexpr for constant functions coverage #198 -- Added to_string for quat and dual_quat in GTX_string_cast #375 -- Improved overall execution time of unit tests #396 - -#### Fixes: -- Fixed strict alignment warnings #235 #370 -- Fixed link errors on compilers not supported default function #377 -- Fixed compilation warnings in vec4 -- Fixed non-identity quaternions for equal vectors #234 -- Fixed excessive GTX_fast_trigonometry execution time #396 -- Fixed Visual Studio 2015 'hides class member' warnings #394 -- Fixed builtin bitscan never being used #392 -- Removed unused func_noise.* files #398 - ---- -### [GLM 0.9.7.0](https://github.com/g-truc/glm/releases/tag/0.9.7.0) - 2015-08-02 -#### Features: -- Added GTC_color_space: convertLinearToSRGB and convertSRGBToLinear functions -- Added 'fmod' overload to GTX_common with tests #308 -- Left handed perspective and lookAt functions #314 -- Added functions eulerAngleXYZ and extractEulerAngleXYZ #311 -- Added to perform std::hash on GLM types #320 #367 -- Added for texcoord wrapping -- Added static components and precision members to all vector and quat types #350 -- Added .gitignore #349 -- Added support of defaulted functions to GLM types, to use them in unions #366 - -#### Improvements: -- Changed usage of __has_include to support Intel compiler #307 -- Specialized integer implementation of YCoCg-R #310 -- Don't show status message in 'FindGLM' if 'QUIET' option is set. #317 -- Added master branch continuous integration service on Linux 64 #332 -- Clarified manual regarding angle unit in GLM, added FAQ 11 #326 -- Updated list of compiler versions - -#### Fixes: -- Fixed default precision for quat and dual_quat type #312 -- Fixed (u)int64 MSB/LSB handling on BE archs #306 -- Fixed multi-line comment warning in g++. #315 -- Fixed specifier removal by 'std::make_pair<>' #333 -- Fixed perspective fovy argument documentation #327 -- Removed -m64 causing build issues on Linux 32 #331 -- Fixed isfinite with C++98 compilers #343 -- Fixed Intel compiler build error on Linux #354 -- Fixed use of libstdc++ with Clang #351 -- Fixed quaternion pow #346 -- Fixed decompose warnings #373 -- Fixed matrix conversions #371 - -#### Deprecation: -- Removed integer specification for 'mod' in GTC_integer #308 -- Removed GTX_multiple, replaced by GTC_round - ---- -### [GLM 0.9.6.3](https://github.com/g-truc/glm/releases/tag/0.9.6.3) - 2015-02-15 -- Fixed Android doesn't have C++ 11 STL #284 - ---- -### [GLM 0.9.6.2](https://github.com/g-truc/glm/releases/tag/0.9.6.2) - 2015-02-15 -#### Features: -- Added display of GLM version with other GLM_MESSAGES -- Added ARM instruction set detection - -#### Improvements: -- Removed assert for perspective with zFar < zNear #298 -- Added Visual Studio natvis support for vec1, quat and dualqual types -- Cleaned up C++11 feature detections -- Clarify GLM licensing - -#### Fixes: -- Fixed faceforward build #289 -- Fixed conflict with Xlib #define True 1 #293 -- Fixed decompose function VS2010 templating issues #294 -- Fixed mat4x3 = mat2x3 * mat4x2 operator #297 -- Fixed warnings in F2x11_1x10 packing function in GTC_packing #295 -- Fixed Visual Studio natvis support for vec4 #288 -- Fixed GTC_packing *pack*norm*x* build and added tests #292 -- Disabled GTX_scalar_multiplication for GCC, failing to build tests #242 -- Fixed Visual C++ 2015 constexpr errors: Disabled only partial support -- Fixed functions not inlined with Clang #302 -- Fixed memory corruption (undefined behaviour) #303 - ---- -### [GLM 0.9.6.1](https://github.com/g-truc/glm/releases/tag/0.9.6.1) - 2014-12-10 -#### Features: -- Added GLM_LANG_CXX14_FLAG and GLM_LANG_CXX1Z_FLAG language feature flags -- Added C++14 detection - -#### Improvements: -- Clean up GLM_MESSAGES compilation log to report only detected capabilities - -#### Fixes: -- Fixed scalar uaddCarry build error with Cuda #276 -- Fixed C++11 explicit conversion operators detection #282 -- Fixed missing explicit conversion when using integer log2 with *vec1 types -- Fixed 64 bits integer GTX_string_cast to_string on VC 32 bit compiler -- Fixed Android build issue, STL C++11 is not supported by the NDK #284 -- Fixed unsupported _BitScanForward64 and _BitScanReverse64 in VC10 -- Fixed Visual C++ 32 bit build #283 -- Fixed GLM_FORCE_SIZE_FUNC pragma message -- Fixed C++98 only build -- Fixed conflict between GTX_compatibility and GTC_quaternion #286 -- Fixed C++ language restriction using GLM_FORCE_CXX** - ---- -### [GLM 0.9.6.0](https://github.com/g-truc/glm/releases/tag/0.9.6.0) - 2014-11-30 -#### Features: -- Exposed template vector and matrix types in 'glm' namespace #239, #244 -- Added GTX_scalar_multiplication for C++ 11 compiler only #242 -- Added GTX_range for C++ 11 compiler only #240 -- Added closestPointOnLine function for tvec2 to GTX_closest_point #238 -- Added GTC_vec1 extension, *vec1 support to *vec* types -- Updated GTX_associated_min_max with vec1 support -- Added support of precision and integers to linearRand #230 -- Added Integer types support to GTX_string_cast #249 -- Added vec3 slerp #237 -- Added GTX_common with isdenomal #223 -- Added GLM_FORCE_SIZE_FUNC to replace .length() by .size() #245 -- Added GLM_FORCE_NO_CTOR_INIT -- Added 'uninitialize' to explicitly not initialize a GLM type -- Added GTC_bitfield extension, promoted GTX_bit -- Added GTC_integer extension, promoted GTX_bit and GTX_integer -- Added GTC_round extension, promoted GTX_bit -- Added GLM_FORCE_EXPLICIT_CTOR to require explicit type conversions #269 -- Added GTX_type_aligned for aligned vector, matrix and quaternion types - -#### Improvements: -- Rely on C++11 to implement isinf and isnan -- Removed GLM_FORCE_CUDA, Cuda is implicitly detected -- Separated Apple Clang and LLVM compiler detection -- Used pragma once -- Undetected C++ compiler automatically compile with GLM_FORCE_CXX98 and - GLM_FORCE_PURE -- Added not function (from GLSL specification) on VC12 -- Optimized bitfieldReverse and bitCount functions -- Optimized findLSB and findMSB functions. -- Optimized matrix-vector multiple performance with Cuda #257, #258 -- Reduced integer type redifinitions #233 -- Rewrited of GTX_fast_trigonometry #264 #265 -- Made types trivially copyable #263 -- Removed in GLM tests -- Used std features within GLM without redeclaring -- Optimized cot function #272 -- Optimized sign function #272 -- Added explicit cast from quat to mat3 and mat4 #275 - -#### Fixes: -- Fixed std::nextafter not supported with C++11 on Android #217 -- Fixed missing value_type for dual quaternion -- Fixed return type of dual quaternion length -- Fixed infinite loop in isfinite function with GCC #221 -- Fixed Visual Studio 14 compiler warnings -- Fixed implicit conversion from another tvec2 type to another tvec2 #241 -- Fixed lack of consistency of quat and dualquat constructors -- Fixed uaddCarray #253 -- Fixed float comparison warnings #270 - -#### Deprecation: -- Requires Visual Studio 2010, GCC 4.2, Apple Clang 4.0, LLVM 3.0, Cuda 4, ICC 2013 or a C++98 compiler -- Removed degrees for function parameters -- Removed GLM_FORCE_RADIANS, active by default -- Removed VC 2005 / 8 and 2008 / 9 support -- Removed GCC 3.4 to 4.3 support -- Removed LLVM GCC support -- Removed LLVM 2.6 to 3.1 support -- Removed CUDA 3.0 to 3.2 support - ---- -### [GLM 0.9.5.4 - 2014-06-21](https://github.com/g-truc/glm/releases/tag/0.9.5.4) -- Fixed non-utf8 character #196 -- Added FindGLM install for CMake #189 -- Fixed GTX_color_space - saturation #195 -- Fixed glm::isinf and glm::isnan for with Android NDK 9d #191 -- Fixed builtin GLM_ARCH_SSE4 #204 -- Optimized Quaternion vector rotation #205 -- Fixed missing doxygen @endcond tag #211 -- Fixed instruction set detection with Clang #158 -- Fixed orientate3 function #207 -- Fixed lerp when cosTheta is close to 1 in quaternion slerp #210 -- Added GTX_io for io with #144 -- Fixed fastDistance ambiguity #215 -- Fixed tweakedInfinitePerspective #208 and added user-defined epsilon to - tweakedInfinitePerspective -- Fixed std::copy and std::vector with GLM types #214 -- Fixed strict aliasing issues #212, #152 -- Fixed std::nextafter not supported with C++11 on Android #213 -- Fixed corner cases in exp and log functions for quaternions #199 - ---- -### GLM 0.9.5.3 - 2014-04-02 -- Added instruction set auto detection with Visual C++ using _M_IX86_FP - /arch - compiler argument -- Fixed GTX_raw_data code dependency -- Fixed GCC instruction set detection -- Added GLM_GTX_matrix_transform_2d extension (#178, #176) -- Fixed CUDA issues (#169, #168, #183, #182) -- Added support for all extensions but GTX_string_cast to CUDA -- Fixed strict aliasing warnings in GCC 4.8.1 / Android NDK 9c (#152) -- Fixed missing bitfieldInterleave definisions -- Fixed usubBorrow (#171) -- Fixed eulerAngle*** not consistent for right-handed coordinate system (#173) -- Added full tests for eulerAngle*** functions (#173) -- Added workaround for a CUDA compiler bug (#186, #185) - ---- -### GLM 0.9.5.2 - 2014-02-08 -- Fixed initializer list ambiguity (#159, #160) -- Fixed warnings with the Android NDK 9c -- Fixed non power of two matrix products -- Fixed mix function link error -- Fixed SSE code included in GLM tests on "pure" platforms -- Fixed undefined reference to fastInverseSqrt (#161) -- Fixed GLM_FORCE_RADIANS with build error (#165) -- Fix dot product clamp range for vector angle functions. (#163) -- Tentative fix for strict aliasing warning in GCC 4.8.1 / Android NDK 9c (#152) -- Fixed GLM_GTC_constants description brief (#162) - ---- -### GLM 0.9.5.1 - 2014-01-11 -- Fixed angle and orientedAngle that sometimes return NaN values (#145) -- Deprecated degrees for function parameters and display a message -- Added possible static_cast conversion of GLM types (#72) -- Fixed error 'inverse' is not a member of 'glm' from glm::unProject (#146) -- Fixed mismatch between some declarations and definitions -- Fixed inverse link error when using namespace glm; (#147) -- Optimized matrix inverse and division code (#149) -- Added intersectRayPlane function (#153) -- Fixed outerProduct return type (#155) - ---- -### GLM 0.9.5.0 - 2013-12-25 -- Added forward declarations (glm/fwd.hpp) for faster compilations -- Added per feature headers -- Minimized GLM internal dependencies -- Improved Intel Compiler detection -- Added bitfieldInterleave and _mm_bit_interleave_si128 functions -- Added GTX_scalar_relational -- Added GTX_dual_quaternion -- Added rotation function to GTX_quaternion (#22) -- Added precision variation of each type -- Added quaternion comparison functions -- Fixed GTX_multiple for negative value -- Removed GTX_ocl_type extension -- Fixed post increment and decrement operators -- Fixed perspective with zNear == 0 (#71) -- Removed l-value swizzle operators -- Cleaned up compiler detection code for unsupported compilers -- Replaced C cast by C++ casts -- Fixed .length() that should return a int and not a size_t -- Added GLM_FORCE_SIZE_T_LENGTH and glm::length_t -- Removed unnecessary conversions -- Optimized packing and unpacking functions -- Removed the normalization of the up argument of lookAt function (#114) -- Added low precision specializations of inversesqrt -- Fixed ldexp and frexp implementations -- Increased assert coverage -- Increased static_assert coverage -- Replaced GLM traits by STL traits when possible -- Allowed including individual core feature -- Increased unit tests completness -- Added creating of a quaternion from two vectors -- Added C++11 initializer lists -- Fixed umulExtended and imulExtended implementations for vector types (#76) -- Fixed CUDA coverage for GTC extensions -- Added GTX_io extension -- Improved GLM messages enabled when defining GLM_MESSAGES -- Hidden matrix _inverse function implementation detail into private section - ---- -### [GLM 0.9.4.6](https://github.com/g-truc/glm/releases/tag/0.9.4.6) - 2013-09-20 -- Fixed detection to select the last known compiler if newer version #106 -- Fixed is_int and is_uint code duplication with GCC and C++11 #107 -- Fixed test suite build while using Clang in C++11 mode -- Added c++1y mode support in CMake test suite -- Removed ms extension mode to CMake when no using Visual C++ -- Added pedantic mode to CMake test suite for Clang and GCC -- Added use of GCC frontend on Unix for ICC and Visual C++ fronted on Windows - for ICC -- Added compilation errors for unsupported compiler versions -- Fixed glm::orientation with GLM_FORCE_RADIANS defined #112 -- Fixed const ref issue on assignment operator taking a scalar parameter #116 -- Fixed glm::eulerAngleY implementation #117 - ---- -### GLM 0.9.4.5 - 2013-08-12 -- Fixed CUDA support -- Fixed inclusion of intrinsics in "pure" mode #92 -- Fixed language detection on GCC when the C++0x mode isn't enabled #95 -- Fixed issue #97: register is deprecated in C++11 -- Fixed issue #96: CUDA issues -- Added Windows CE detection #92 -- Added missing value_ptr for quaternions #99 - ---- -### GLM 0.9.4.4 - 2013-05-29 -- Fixed slerp when costheta is close to 1 #65 -- Fixed mat4x2 value_type constructor #70 -- Fixed glm.natvis for Visual C++ 12 #82 -- Added assert in inversesqrt to detect division by zero #61 -- Fixed missing swizzle operators #86 -- Fixed CUDA warnings #86 -- Fixed GLM natvis for VC11 #82 -- Fixed GLM_GTX_multiple with negative values #79 -- Fixed glm::perspective when zNear is zero #71 - ---- -### GLM 0.9.4.3 - 2013-03-20 -- Detected qualifier for Clang -- Fixed C++11 mode for GCC, couldn't be enabled without MS extensions -- Fixed squad, intermediate and exp quaternion functions -- Fixed GTX_polar_coordinates euclidean function, takes a vec2 instead of a vec3 -- Clarify the license applying on the manual -- Added a docx copy of the manual -- Fixed GLM_GTX_matrix_interpolation -- Fixed isnan and isinf on Android with Clang -- Autodetected C++ version using __cplusplus value -- Fixed mix for bool and bvec* third parameter - ---- -### GLM 0.9.4.2 - 2013-02-14 -- Fixed compAdd from GTX_component_wise -- Fixed SIMD support for Intel compiler on Windows -- Fixed isnan and isinf for CUDA compiler -- Fixed GLM_FORCE_RADIANS on glm::perspective -- Fixed GCC warnings -- Fixed packDouble2x32 on Xcode -- Fixed mix for vec4 SSE implementation -- Fixed 0x2013 dash character in comments that cause issue in Windows - Japanese mode -- Fixed documentation warnings -- Fixed CUDA warnings - ---- -### GLM 0.9.4.1 - 2012-12-22 -- Improved half support: -0.0 case and implicit conversions -- Fixed Intel Composer Compiler support on Linux -- Fixed interaction between quaternion and euler angles -- Fixed GTC_constants build -- Fixed GTX_multiple -- Fixed quat slerp using mix function when cosTheta close to 1 -- Improved fvec4SIMD and fmat4x4SIMD implementations -- Fixed assert messages -- Added slerp and lerp quaternion functions and tests - ---- -### GLM 0.9.4.0 - 2012-11-18 -- Added Intel Composer Compiler support -- Promoted GTC_espilon extension -- Promoted GTC_ulp extension -- Removed GLM website from the source repository -- Added GLM_FORCE_RADIANS so that all functions takes radians for arguments -- Fixed detection of Clang and LLVM GCC on MacOS X -- Added debugger visualizers for Visual C++ 2012 -- Requires Visual Studio 2005, GCC 4.2, Clang 2.6, Cuda 3, ICC 2013 or a C++98 compiler - ---- -### [GLM 0.9.3.4](https://github.com/g-truc/glm/releases/tag/0.9.3.4) - 2012-06-30 -- Added SSE4 and AVX2 detection. -- Removed VIRTREV_xstream and the incompatibility generated with GCC -- Fixed C++11 compiler option for GCC -- Removed MS language extension option for GCC (not fonctionnal) -- Fixed bitfieldExtract for vector types -- Fixed warnings -- Fixed SSE includes - ---- -### GLM 0.9.3.3 - 2012-05-10 -- Fixed isinf and isnan -- Improved compatibility with Intel compiler -- Added CMake test build options: SIMD, C++11, fast math and MS land ext -- Fixed SIMD mat4 test on GCC -- Fixed perspectiveFov implementation -- Fixed matrixCompMult for none-square matrices -- Fixed namespace issue on stream operators -- Fixed various warnings -- Added VC11 support - ---- -### GLM 0.9.3.2 - 2012-03-15 -- Fixed doxygen documentation -- Fixed Clang version detection -- Fixed simd mat4 /= operator - ---- -### GLM 0.9.3.1 - 2012-01-25 -- Fixed platform detection -- Fixed warnings -- Removed detail code from Doxygen doc - ---- -### GLM 0.9.3.0 - 2012-01-09 -- Added CPP Check project -- Fixed conflict with Windows headers -- Fixed isinf implementation -- Fixed Boost conflict -- Fixed warnings - ---- -### GLM 0.9.3.B - 2011-12-12 -- Added support for Chrone Native Client -- Added epsilon constant -- Removed value_size function from vector types -- Fixed roundEven on GCC -- Improved API documentation -- Fixed modf implementation -- Fixed step function accuracy -- Fixed outerProduct - ---- -### GLM 0.9.3.A - 2011-11-11 -- Improved doxygen documentation -- Added new swizzle operators for C++11 compilers -- Added new swizzle operators declared as functions -- Added GLSL 4.20 length for vector and matrix types -- Promoted GLM_GTC_noise extension: simplex, perlin, periodic noise functions -- Promoted GLM_GTC_random extension: linear, gaussian and various random number -generation distribution -- Added GLM_GTX_constants: provides useful constants -- Added extension versioning -- Removed many unused namespaces -- Fixed half based type contructors -- Added GLSL core noise functions - ---- -### [GLM 0.9.2.7](https://github.com/g-truc/glm/releases/tag/0.9.2.7) - 2011-10-24 -- Added more swizzling constructors -- Added missing none-squared matrix products - ---- -### [GLM 0.9.2.6](https://github.com/g-truc/glm/releases/tag/0.9.2.6) - 2011-10-01 -- Fixed half based type build on old GCC -- Fixed /W4 warnings on Visual C++ -- Fixed some missing l-value swizzle operators - ---- -### GLM 0.9.2.5 - 2011-09-20 -- Fixed floatBitToXint functions -- Fixed pack and unpack functions -- Fixed round functions - ---- -### GLM 0.9.2.4 - 2011-09-03 -- Fixed extensions bugs - ---- -### GLM 0.9.2.3 - 2011-06-08 -- Fixed build issues - ---- -### GLM 0.9.2.2 - 2011-06-02 -- Expend matrix constructors flexibility -- Improved quaternion implementation -- Fixed many warnings across platforms and compilers - ---- -### GLM 0.9.2.1 - 2011-05-24 -- Automatically detect CUDA support -- Improved compiler detection -- Fixed errors and warnings in VC with C++ extensions disabled -- Fixed and tested GLM_GTX_vector_angle -- Fixed and tested GLM_GTX_rotate_vector - ---- -### GLM 0.9.2.0 - 2011-05-09 -- Added CUDA support -- Added CTest test suite -- Added GLM_GTX_ulp extension -- Added GLM_GTX_noise extension -- Added GLM_GTX_matrix_interpolation extension -- Updated quaternion slerp interpolation - ---- -### [GLM 0.9.1.3](https://github.com/g-truc/glm/releases/tag/0.9.1.3) - 2011-05-07 -- Fixed bugs - ---- -### GLM 0.9.1.2 - 2011-04-15 -- Fixed bugs - ---- -### GLM 0.9.1.1 - 2011-03-17 -- Fixed bugs - ---- -### GLM 0.9.1.0 - 2011-03-03 -- Fixed bugs - ---- -### GLM 0.9.1.B - 2011-02-13 -- Updated API documentation -- Improved SIMD implementation -- Fixed Linux build - ---- -### [GLM 0.9.0.8](https://github.com/g-truc/glm/releases/tag/0.9.0.8) - 2011-02-13 -- Added quaternion product operator. -- Clarify that GLM is a header only library. - ---- -### GLM 0.9.1.A - 2011-01-31 -- Added SIMD support -- Added new swizzle functions -- Improved static assert error message with C++0x static_assert -- New setup system -- Reduced branching -- Fixed trunc implementation - ---- -### [GLM 0.9.0.7](https://github.com/g-truc/glm/releases/tag/0.9.0.7) - 2011-01-30 -- Added GLSL 4.10 packing functions -- Added == and != operators for every types. - ---- -### GLM 0.9.0.6 - 2010-12-21 -- Many matrices bugs fixed - ---- -### GLM 0.9.0.5 - 2010-11-01 -- Improved Clang support -- Fixed bugs - ---- -### GLM 0.9.0.4 - 2010-10-04 -- Added autoexp for GLM -- Fixed bugs - ---- -### GLM 0.9.0.3 - 2010-08-26 -- Fixed non-squared matrix operators - ---- -### GLM 0.9.0.2 - 2010-07-08 -- Added GLM_GTX_int_10_10_10_2 -- Fixed bugs - ---- -### GLM 0.9.0.1 - 2010-06-21 -- Fixed extensions errors - ---- -### GLM 0.9.0.0 - 2010-05-25 -- Objective-C support -- Fixed warnings -- Updated documentation - ---- -### GLM 0.9.B.2 - 2010-04-30 -- Git transition -- Removed experimental code from releases -- Fixed bugs - ---- -### GLM 0.9.B.1 - 2010-04-03 -- Based on GLSL 4.00 specification -- Added the new core functions -- Added some implicit conversion support - ---- -### GLM 0.9.A.2 - 2010-02-20 -- Improved some possible errors messages -- Improved declarations and definitions match - ---- -### GLM 0.9.A.1 - 2010-02-09 -- Removed deprecated features -- Internal redesign - ---- -### GLM 0.8.4.4 final - 2010-01-25 -- Fixed warnings - ---- -### GLM 0.8.4.3 final - 2009-11-16 -- Fixed Half float arithmetic -- Fixed setup defines - ---- -### GLM 0.8.4.2 final - 2009-10-19 -- Fixed Half float adds - ---- -### GLM 0.8.4.1 final - 2009-10-05 -- Updated documentation -- Fixed MacOS X build - ---- -### GLM 0.8.4.0 final - 2009-09-16 -- Added GCC 4.4 and VC2010 support -- Added matrix optimizations - ---- -### GLM 0.8.3.5 final - 2009-08-11 -- Fixed bugs - ---- -### GLM 0.8.3.4 final - 2009-08-10 -- Updated GLM according GLSL 1.5 spec -- Fixed bugs - ---- -### GLM 0.8.3.3 final - 2009-06-25 -- Fixed bugs - ---- -### GLM 0.8.3.2 final - 2009-06-04 -- Added GLM_GTC_quaternion -- Added GLM_GTC_type_precision - ---- -### GLM 0.8.3.1 final - 2009-05-21 -- Fixed old extension system. - ---- -### GLM 0.8.3.0 final - 2009-05-06 -- Added stable extensions. -- Added new extension system. - ---- -### GLM 0.8.2.3 final - 2009-04-01 -- Fixed bugs. - ---- -### GLM 0.8.2.2 final - 2009-02-24 -- Fixed bugs. - ---- -### GLM 0.8.2.1 final - 2009-02-13 -- Fixed bugs. - ---- -### GLM 0.8.2 final - 2009-01-21 -- Fixed bugs. - ---- -### GLM 0.8.1 final - 2008-10-30 -- Fixed bugs. - ---- -### GLM 0.8.0 final - 2008-10-23 -- New method to use extension. - ---- -### GLM 0.8.0 beta3 - 2008-10-10 -- Added CMake support for GLM tests. - ---- -### GLM 0.8.0 beta2 - 2008-10-04 -- Improved half scalars and vectors support. - ---- -### GLM 0.8.0 beta1 - 2008-09-26 -- Improved GLSL conformance -- Added GLSL 1.30 support -- Improved API documentation - ---- -### GLM 0.7.6 final - 2008-08-08 -- Improved C++ standard comformance -- Added Static assert for types checking - ---- -### GLM 0.7.5 final - 2008-07-05 -- Added build message system with Visual Studio -- Pedantic build with GCC - ---- -### GLM 0.7.4 final - 2008-06-01 -- Added external dependencies system. - ---- -### GLM 0.7.3 final - 2008-05-24 -- Fixed bugs -- Added new extension group - ---- -### GLM 0.7.2 final - 2008-04-27 -- Updated documentation -- Added preprocessor options - ---- -### GLM 0.7.1 final - 2008-03-24 -- Disabled half on GCC -- Fixed extensions - ---- -### GLM 0.7.0 final - 2008-03-22 -- Changed to MIT license -- Added new documentation - ---- -### GLM 0.6.4 - 2007-12-10 -- Fixed swizzle operators - ---- -### GLM 0.6.3 - 2007-11-05 -- Fixed type data accesses -- Fixed 3DSMax sdk conflict - ---- -### GLM 0.6.2 - 2007-10-08 -- Fixed extension - ---- -### GLM 0.6.1 - 2007-10-07 -- Fixed a namespace error -- Added extensions - ---- -### GLM 0.6.0 : 2007-09-16 -- Added new extension namespace mecanium -- Added Automatic compiler detection - ---- -### GLM 0.5.1 - 2007-02-19 -- Fixed swizzle operators - ---- -### GLM 0.5.0 - 2007-01-06 -- Upgrated to GLSL 1.2 -- Added swizzle operators -- Added setup settings - ---- -### GLM 0.4.1 - 2006-05-22 -- Added OpenGL examples - ---- -### GLM 0.4.0 - 2006-05-17 -- Added missing operators to vec* and mat* -- Added first GLSL 1.2 features -- Fixed windows.h before glm.h when windows.h required - ---- -### GLM 0.3.2 - 2006-04-21 -- Fixed texcoord components access. -- Fixed mat4 and imat4 division operators. - ---- -### GLM 0.3.1 - 2006-03-28 -- Added GCC 4.0 support under MacOS X. -- Added GCC 4.0 and 4.1 support under Linux. -- Added code optimisations. - ---- -### GLM 0.3 - 2006-02-19 -- Improved GLSL type conversion and construction compliance. -- Added experimental extensions. -- Added Doxygen Documentation. -- Added code optimisations. -- Fixed bugs. - ---- -### GLM 0.2 - 2005-05-05 -- Improve adaptative from GLSL. -- Add experimental extensions based on OpenGL extension process. -- Fixe bugs. - ---- -### GLM 0.1 - 2005-02-21 -- Add vec2, vec3, vec4 GLSL types -- Add ivec2, ivec3, ivec4 GLSL types -- Add bvec2, bvec3, bvec4 GLSL types -- Add mat2, mat3, mat4 GLSL types -- Add almost all functions - diff --git a/src/qged/main.cpp b/src/qged/main.cpp index a66b18b0368..17ccc46b4b8 100644 --- a/src/qged/main.cpp +++ b/src/qged/main.cpp @@ -1,7 +1,7 @@ /* M A I N . C X X * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/main_window.cpp b/src/qged/main_window.cpp index 4643fb26224..0fdaeb45977 100644 --- a/src/qged/main_window.cpp +++ b/src/qged/main_window.cpp @@ -1,7 +1,7 @@ /* M A I N _ W I N D O W . C X X * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/qged/main_window.h b/src/qged/main_window.h index 998e1df84e4..03a28525dca 100644 --- a/src/qged/main_window.h +++ b/src/qged/main_window.h @@ -1,7 +1,7 @@ /* M A I N _ W I N D O W . H * BRL-CAD * - * Copyright (c) 2014 United States Government as represented by + * Copyright (c) 2014-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/remrt/ihost.c b/src/remrt/ihost.c index 0f2db4de6db..542918fe211 100644 --- a/src/remrt/ihost.c +++ b/src/remrt/ihost.c @@ -1,7 +1,7 @@ /* I H O S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/remrt/ihost.h b/src/remrt/ihost.h index c7bbf87341c..35a8d43848e 100644 --- a/src/remrt/ihost.h +++ b/src/remrt/ihost.h @@ -1,7 +1,7 @@ /* I H O S T . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/remrt/protocol.h b/src/remrt/protocol.h index 4858d8ca278..afe26f2d9a2 100644 --- a/src/remrt/protocol.h +++ b/src/remrt/protocol.h @@ -1,7 +1,7 @@ /* P R O T O C O L . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/remrt/remrt.c b/src/remrt/remrt.c index 113515c4642..9a82b2da098 100644 --- a/src/remrt/remrt.c +++ b/src/remrt/remrt.c @@ -1,7 +1,7 @@ /* R E M R T . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/remrt/rtsrv.c b/src/remrt/rtsrv.c index 0158a4dd33b..90c6191bb8e 100644 --- a/src/remrt/rtsrv.c +++ b/src/remrt/rtsrv.c @@ -1,7 +1,7 @@ /* R T S R V . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/CMakeLists.txt b/src/rt/CMakeLists.txt index 4d2c6f85cc2..3c864e40dad 100644 --- a/src/rt/CMakeLists.txt +++ b/src/rt/CMakeLists.txt @@ -23,7 +23,7 @@ set(LIBRTUIF_SOURCES worker.c ) -BRLCAD_ADDLIB(librtuif "${LIBRTUIF_SOURCES}" "${M_LIBRARY}" STATIC NO_INSTALL) +BRLCAD_ADDLIB(librtuif "${LIBRTUIF_SOURCES}" "librt;${M_LIBRARY}" STATIC NO_INSTALL) if(BRLCAD_ENABLE_OPENCL) set(OPENCL_LIBS ${OPENCL_LIBRARIES}) @@ -31,7 +31,7 @@ endif(BRLCAD_ENABLE_OPENCL) if(MPI_C_LIBRARIES AND BRLCAD_ENABLE_MPI) set(RT_STD_LIBS - ${CMAKE_THREAD_LIBS_INIT} + Threads::Threads ${MPI_C_LIBRARIES} librt libnmg @@ -41,7 +41,7 @@ if(MPI_C_LIBRARIES AND BRLCAD_ENABLE_MPI) ) else() set(RT_STD_LIBS - ${CMAKE_THREAD_LIBS_INIT} + Threads::Threads librt libnmg liboptical @@ -54,12 +54,12 @@ BRLCAD_ADDDATA(rtexample.c sample_applications) BRLCAD_ADDEXEC(rtexample "rtexample.c" "librt;libdm;liboptical;libicv" NO_INSTALL) -BRLCAD_ADDEXEC(reshoot "reshoot.c" "${CMAKE_THREAD_LIBS_INIT};librt;libdm;liboptical;libicv") +BRLCAD_ADDEXEC(reshoot "reshoot.c" "Threads::Threads;librt;libdm;liboptical;libicv") BRLCAD_ADDEXEC(rtshot "rtshot.c" "${RT_STD_LIBS};libdm") ADD_TARGET_DEPS(rtshot dm_plugins) -BRLCAD_ADDEXEC(rtscale "read-rtlog.c;rtscale.c" "${CMAKE_THREAD_LIBS_INIT};librt;libdm;liboptical;libicv;${M_LIBRARY}") +BRLCAD_ADDEXEC(rtscale "read-rtlog.c;rtscale.c" "Threads::Threads;librt;libdm;liboptical;libicv;${M_LIBRARY}") ADD_TARGET_DEPS(rtscale dm_plugins) BRLCAD_ADDEXEC(rt "${LIBRTUIF_SOURCES};view.c" "${OPENCL_LIBS};${RT_STD_LIBS};libdm") diff --git a/src/rt/do.c b/src/rt/do.c index 6744d2c731e..a1b8353fe15 100644 --- a/src/rt/do.c +++ b/src/rt/do.c @@ -1,7 +1,7 @@ /* D O . C * BRL-CAD * - * Copyright (c) 1987-2020 United States Government as represented by + * Copyright (c) 1987-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/ext.h b/src/rt/ext.h index d237b9ef219..31c20a3ac96 100644 --- a/src/rt/ext.h +++ b/src/rt/ext.h @@ -1,7 +1,7 @@ /* E X T . H * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/heatgraph.c b/src/rt/heatgraph.c index e6162ed87bf..97c1f841fd0 100644 --- a/src/rt/heatgraph.c +++ b/src/rt/heatgraph.c @@ -1,7 +1,7 @@ /* H E A T G R A P H . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/libfb-dummy.c b/src/rt/libfb-dummy.c index c218af49823..f964fee7c25 100644 --- a/src/rt/libfb-dummy.c +++ b/src/rt/libfb-dummy.c @@ -1,7 +1,7 @@ /* L I B F B - D U M M Y . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/main.c b/src/rt/main.c index 9d92ea060dc..86ea8066002 100644 --- a/src/rt/main.c +++ b/src/rt/main.c @@ -1,7 +1,7 @@ /* M A I N . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/opt.c b/src/rt/opt.c index bade71c8a87..4740a5eef82 100644 --- a/src/rt/opt.c +++ b/src/rt/opt.c @@ -1,7 +1,7 @@ /* O P T . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/read-rtlog.c b/src/rt/read-rtlog.c index f849f32f405..d3a4990d5a5 100644 --- a/src/rt/read-rtlog.c +++ b/src/rt/read-rtlog.c @@ -1,7 +1,7 @@ /* R E A D - R T L O G . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/reshoot.c b/src/rt/reshoot.c index 8a7e3e9b7ff..bd80ea89e64 100644 --- a/src/rt/reshoot.c +++ b/src/rt/reshoot.c @@ -1,7 +1,7 @@ /* R E S H O O T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/rt/rtexample.c b/src/rt/rtexample.c index 691826901b3..3f0acdb59bd 100644 --- a/src/rt/rtexample.c +++ b/src/rt/rtexample.c @@ -1,7 +1,7 @@ /* R T E X A M P L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/rtscale.c b/src/rt/rtscale.c index be87336f0a1..9b5daabbc87 100644 --- a/src/rt/rtscale.c +++ b/src/rt/rtscale.c @@ -1,7 +1,7 @@ /* R T S C A L E . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/rtshot.c b/src/rt/rtshot.c index 957cfe2e031..e098af2905d 100644 --- a/src/rt/rtshot.c +++ b/src/rt/rtshot.c @@ -1,7 +1,7 @@ /* R T S H O T . C * BRL-CAD * - * Copyright (c) 1987-2020 United States Government as represented by + * Copyright (c) 1987-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/rtuif.h b/src/rt/rtuif.h index 45070753355..b478c597a3d 100644 --- a/src/rt/rtuif.h +++ b/src/rt/rtuif.h @@ -1,7 +1,7 @@ /* R T U I F . H * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/rt/scanline.c b/src/rt/scanline.c index 6b26897271f..6f620e86fc7 100644 --- a/src/rt/scanline.c +++ b/src/rt/scanline.c @@ -1,7 +1,7 @@ /* S C A N L I N E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/rt/scanline.h b/src/rt/scanline.h index f827d9d4fd6..bc562965e73 100644 --- a/src/rt/scanline.h +++ b/src/rt/scanline.h @@ -1,7 +1,7 @@ /* S C A N L I N E . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/rt/usage.cpp b/src/rt/usage.cpp index d4aac8403e0..aa3eb01253a 100644 --- a/src/rt/usage.cpp +++ b/src/rt/usage.cpp @@ -1,7 +1,7 @@ /* U S A G E . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/view.c b/src/rt/view.c index 7d30d3ab9f7..dded63c40f6 100644 --- a/src/rt/view.c +++ b/src/rt/view.c @@ -1,7 +1,7 @@ /* V I E W . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewarea.c b/src/rt/viewarea.c index ba97f5ea440..d0ea0700859 100644 --- a/src/rt/viewarea.c +++ b/src/rt/viewarea.c @@ -1,7 +1,7 @@ /* V I E W A R E A . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewcheck.c b/src/rt/viewcheck.c index 9bb9ad4b5e5..b0c574569d6 100644 --- a/src/rt/viewcheck.c +++ b/src/rt/viewcheck.c @@ -1,7 +1,7 @@ /* V I E W C H E C K . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewdir.c b/src/rt/viewdir.c index d53efa049b5..383e3859767 100644 --- a/src/rt/viewdir.c +++ b/src/rt/viewdir.c @@ -1,7 +1,7 @@ /* V I E W D I R . C * BRL-CAD * - * Copyright (c) 1993-2020 United States Government as represented by + * Copyright (c) 1993-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewdummy.c b/src/rt/viewdummy.c index aac29b3476b..ff8351182f0 100644 --- a/src/rt/viewdummy.c +++ b/src/rt/viewdummy.c @@ -1,7 +1,7 @@ /* V I E W D U M M Y . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewedge.c b/src/rt/viewedge.c index e32c7ed926b..8f2e39eacb8 100644 --- a/src/rt/viewedge.c +++ b/src/rt/viewedge.c @@ -1,7 +1,7 @@ /* V I E W E D G E . C * BRL-CAD * - * Copyright (c) 2001-2020 United States Government as represented by + * Copyright (c) 2001-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewg3.c b/src/rt/viewg3.c index 84c1b76e54c..0528fd34cee 100644 --- a/src/rt/viewg3.c +++ b/src/rt/viewg3.c @@ -1,7 +1,7 @@ /* V I E W G 3 . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewhide.c b/src/rt/viewhide.c index f33ba170c39..f6c971b98fe 100644 --- a/src/rt/viewhide.c +++ b/src/rt/viewhide.c @@ -1,7 +1,7 @@ /* V I E W H I D E . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewsil.c b/src/rt/viewsil.c index 0787d795afa..e6c64b4b0d7 100644 --- a/src/rt/viewsil.c +++ b/src/rt/viewsil.c @@ -1,7 +1,7 @@ /* V I E W S I L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewweight.c b/src/rt/viewweight.c index bdbcdfba53f..6f2974fd847 100644 --- a/src/rt/viewweight.c +++ b/src/rt/viewweight.c @@ -1,7 +1,7 @@ /* V I E W W E I G H T . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/viewxray.c b/src/rt/viewxray.c index 4477d733377..fe3827a38fd 100644 --- a/src/rt/viewxray.c +++ b/src/rt/viewxray.c @@ -1,7 +1,7 @@ /* V I E W X R A Y . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rt/worker.c b/src/rt/worker.c index 6dbd4987b31..3f3876d662f 100644 --- a/src/rt/worker.c +++ b/src/rt/worker.c @@ -1,7 +1,7 @@ /* W O R K E R . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/rtwizard/CMakeLists.txt b/src/rtwizard/CMakeLists.txt index 6c32002512c..a7b42777582 100644 --- a/src/rtwizard/CMakeLists.txt +++ b/src/rtwizard/CMakeLists.txt @@ -20,7 +20,7 @@ if (TARGET libtclcad) endif (HAVE_WINDOWS_H) - BRLCAD_ADDEXEC(rtwizard "${RTWIZARD_SRCS}" "libtclcad;librt;libdm;liboptical;libicv;${ITCL_LIBRARY};${ITK_LIBRARY};${CMAKE_THREAD_LIBS_INIT};${M_LIBRARY}") + BRLCAD_ADDEXEC(rtwizard "${RTWIZARD_SRCS}" "libtclcad;librt;libdm;liboptical;libicv;Threads::Threads;${M_LIBRARY}") ADD_TARGET_DEPS(rtwizard rt rtedge fbserv fb-png fb-pix fbclear fblabel fbfree fbline fb-fb pix-bw bwmod bw-pix pixmatte pix-fb tkpng dm_plugins) foreach(item ${tclindex_target_list}) add_dependencies(rtwizard ${item}) diff --git a/src/rtwizard/main.c b/src/rtwizard/main.c index f4ab2c73f3c..f14e875d383 100644 --- a/src/rtwizard/main.c +++ b/src/rtwizard/main.c @@ -1,7 +1,7 @@ /* M A I N . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -22,7 +22,11 @@ */ #include "common.h" -#include "string.h" +#include + +#ifdef HAVE_WINDOWS_H +# include /* For chdir */ +#endif #include "tcl.h" @@ -990,6 +994,15 @@ main(int argc, char **argv) bu_setprogname(argv[0]); av0 = argv[0]; + /* Change the working directory to BU_DIR_HOME if we are invoking + * without any arguments. */ + if (argc == 1) { + const char *homed = bu_dir(NULL, 0, BU_DIR_HOME, NULL); + if (homed && chdir(homed)) { + bu_exit(1, "Failed to change working directory to \"%s\" ", homed); + } + } + /* Skip first arg */ argv++; argc--; @@ -1136,7 +1149,7 @@ main(int argc, char **argv) /* We're using this path on the file system, not in Tcl: translate it * to the appropriate form before doing the eval */ Tcl_DStringInit(&temp); - rtwizard = bu_brlcad_root("share/tclscripts/rtwizard/rtwizard", 1); + rtwizard = bu_dir(NULL, 0, BU_DIR_DATA, "tclscripts", "rtwizard", "rtwizard", NULL); fullname = Tcl_TranslateFileName(interp, rtwizard, &temp); status = Tcl_EvalFile(interp, fullname); Tcl_DStringFree(&temp); diff --git a/src/shapes/bolt.c b/src/shapes/bolt.c index d71bfa49fb4..42032b09778 100644 --- a/src/shapes/bolt.c +++ b/src/shapes/bolt.c @@ -1,7 +1,7 @@ /* B O L T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/shapes/coil.c b/src/shapes/coil.c index e97b63fa5c1..75717421941 100644 --- a/src/shapes/coil.c +++ b/src/shapes/coil.c @@ -1,7 +1,7 @@ /* C O I L . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/shapes/fence.c b/src/shapes/fence.c index 353eea9c7fa..38799803c4c 100644 --- a/src/shapes/fence.c +++ b/src/shapes/fence.c @@ -1,7 +1,7 @@ /* F E N C E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/shapes/fence.h b/src/shapes/fence.h index e4737f52400..5e9ef666de8 100644 --- a/src/shapes/fence.h +++ b/src/shapes/fence.h @@ -1,7 +1,7 @@ /* F E N C E . H * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/shapes/gastank.c b/src/shapes/gastank.c index b9a9b9fcbfe..3bf561ddd38 100644 --- a/src/shapes/gastank.c +++ b/src/shapes/gastank.c @@ -1,7 +1,7 @@ /* G A S T A N K . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/shapes/handle.c b/src/shapes/handle.c index bea3dc75ed1..a75711aaead 100644 --- a/src/shapes/handle.c +++ b/src/shapes/handle.c @@ -1,7 +1,7 @@ /* H A N D L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/shapes/human.c b/src/shapes/human.c index 96ce5a089da..d9a02ee9e56 100644 --- a/src/shapes/human.c +++ b/src/shapes/human.c @@ -1,7 +1,7 @@ /* H U M A N . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/shapes/picket_fence.c b/src/shapes/picket_fence.c index 461a3c2f9bc..7a9fc01b642 100644 --- a/src/shapes/picket_fence.c +++ b/src/shapes/picket_fence.c @@ -1,7 +1,7 @@ /* P I C K E T _ F E N C E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/shapes/tire.c b/src/shapes/tire.c index ea1f6def010..dc6a7620b5d 100644 --- a/src/shapes/tire.c +++ b/src/shapes/tire.c @@ -1,7 +1,7 @@ /* T I R E . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/shapes/window.c b/src/shapes/window.c index 2f7eccfca3b..d8dae3ea7c8 100644 --- a/src/shapes/window.c +++ b/src/shapes/window.c @@ -1,7 +1,7 @@ /* W I N D O W . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/shapes/window_frame.c b/src/shapes/window_frame.c index a8e8e98ff3c..5d5592666e9 100644 --- a/src/shapes/window_frame.c +++ b/src/shapes/window_frame.c @@ -1,7 +1,7 @@ /* W I N D O W _ F R A M E . C * BRL-CAD * - * Copyright (c) 2009-2020 United States Government as represented by + * Copyright (c) 2009-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/shapes/wire.c b/src/shapes/wire.c index 00efbad21be..e8321d0497b 100644 --- a/src/shapes/wire.c +++ b/src/shapes/wire.c @@ -1,7 +1,7 @@ /* W I R E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/a-d.c b/src/sig/a-d.c index 0bb4f651bd4..82987e41381 100644 --- a/src/sig/a-d.c +++ b/src/sig/a-d.c @@ -1,7 +1,7 @@ /* A - D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/butter.c b/src/sig/butter.c index 2feddfdab5a..58a85d48151 100644 --- a/src/sig/butter.c +++ b/src/sig/butter.c @@ -1,7 +1,7 @@ /* B U T T E R . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/bw-d.c b/src/sig/bw-d.c index e2d779e2e22..59b42801ebe 100644 --- a/src/sig/bw-d.c +++ b/src/sig/bw-d.c @@ -1,7 +1,7 @@ /* B W - D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/c-d.c b/src/sig/c-d.c index b45eff2b6d3..ec593beaeba 100644 --- a/src/sig/c-d.c +++ b/src/sig/c-d.c @@ -1,7 +1,7 @@ /* C - D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/coswin.c b/src/sig/coswin.c index 230b5ab445c..f802a92a81d 100644 --- a/src/sig/coswin.c +++ b/src/sig/coswin.c @@ -1,7 +1,7 @@ /* C O S W I N . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/d-a.c b/src/sig/d-a.c index f78bb457fe0..e2588419347 100644 --- a/src/sig/d-a.c +++ b/src/sig/d-a.c @@ -1,7 +1,7 @@ /* D - A . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/d-bw.c b/src/sig/d-bw.c index 4d965cc9df6..c7dab6f18a6 100644 --- a/src/sig/d-bw.c +++ b/src/sig/d-bw.c @@ -1,7 +1,7 @@ /* D - B W . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/d-f.c b/src/sig/d-f.c index 1d5457d6b6e..e1101db4205 100644 --- a/src/sig/d-f.c +++ b/src/sig/d-f.c @@ -1,7 +1,7 @@ /* D - F . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/d-i.c b/src/sig/d-i.c index 9b9110a2d77..3fbaebe4a3d 100644 --- a/src/sig/d-i.c +++ b/src/sig/d-i.c @@ -1,7 +1,7 @@ /* D - I . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/d-u.c b/src/sig/d-u.c index b0dd918774f..31046eac885 100644 --- a/src/sig/d-u.c +++ b/src/sig/d-u.c @@ -1,7 +1,7 @@ /* D - U . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/d2-c.c b/src/sig/d2-c.c index b9fb14a3685..00e4e07bd0e 100644 --- a/src/sig/d2-c.c +++ b/src/sig/d2-c.c @@ -1,7 +1,7 @@ /* D 2 - C . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/damdf.c b/src/sig/damdf.c index 850e180e9e7..c509b9effe6 100644 --- a/src/sig/damdf.c +++ b/src/sig/damdf.c @@ -1,7 +1,7 @@ /* D A M D F . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/dauto.c b/src/sig/dauto.c index 6f982680df7..c2bf638bd79 100644 --- a/src/sig/dauto.c +++ b/src/sig/dauto.c @@ -1,7 +1,7 @@ /* D A U T O . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/dauto2.c b/src/sig/dauto2.c index 9fbe22e956e..ba820f0a760 100644 --- a/src/sig/dauto2.c +++ b/src/sig/dauto2.c @@ -1,7 +1,7 @@ /* D A U T O 2 . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/dconv.c b/src/sig/dconv.c index 0b5a7af99c8..db782006195 100644 --- a/src/sig/dconv.c +++ b/src/sig/dconv.c @@ -1,7 +1,7 @@ /* D C O N V . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/ddisp.c b/src/sig/ddisp.c index a3c1b85d5e1..4eafec3512c 100644 --- a/src/sig/ddisp.c +++ b/src/sig/ddisp.c @@ -1,7 +1,7 @@ /* D D I S P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/dfft.c b/src/sig/dfft.c index 0126395e212..8d06e885078 100644 --- a/src/sig/dfft.c +++ b/src/sig/dfft.c @@ -1,7 +1,7 @@ /* D F F T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/dmod.c b/src/sig/dmod.c index 016dc8362f4..221afcf8cec 100644 --- a/src/sig/dmod.c +++ b/src/sig/dmod.c @@ -1,7 +1,7 @@ /* D M O D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/dpeak.c b/src/sig/dpeak.c index a7ada081574..ee7a00be84e 100644 --- a/src/sig/dpeak.c +++ b/src/sig/dpeak.c @@ -1,7 +1,7 @@ /* D P E A K . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/dsel.c b/src/sig/dsel.c index 23fcfd0d941..cbb74bc48e4 100644 --- a/src/sig/dsel.c +++ b/src/sig/dsel.c @@ -1,7 +1,7 @@ /* D S E L . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/dstats.c b/src/sig/dstats.c index 814383116fd..b74b0da81a4 100644 --- a/src/sig/dstats.c +++ b/src/sig/dstats.c @@ -1,7 +1,7 @@ /* D S T A T S . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/dwin.c b/src/sig/dwin.c index cc4e0b3b36f..aed811c166b 100644 --- a/src/sig/dwin.c +++ b/src/sig/dwin.c @@ -1,7 +1,7 @@ /* D W I N . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/f-d.c b/src/sig/f-d.c index c06a6e8431d..697bb682d05 100644 --- a/src/sig/f-d.c +++ b/src/sig/f-d.c @@ -1,7 +1,7 @@ /* F - D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/f-i.c b/src/sig/f-i.c index f52b9126559..c958dffe437 100644 --- a/src/sig/f-i.c +++ b/src/sig/f-i.c @@ -1,7 +1,7 @@ /* F - I . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/hamwin.c b/src/sig/hamwin.c index 208bb2833d4..de3eb99bd27 100644 --- a/src/sig/hamwin.c +++ b/src/sig/hamwin.c @@ -1,7 +1,7 @@ /* H A M W I N . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/i-a.c b/src/sig/i-a.c index 5c53624e88a..7dfa08c5a1b 100644 --- a/src/sig/i-a.c +++ b/src/sig/i-a.c @@ -1,7 +1,7 @@ /* I - A . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/i-d.c b/src/sig/i-d.c index b10e5f984cc..372e2076b74 100644 --- a/src/sig/i-d.c +++ b/src/sig/i-d.c @@ -1,7 +1,7 @@ /* I - D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/i-f.c b/src/sig/i-f.c index d775a84d64d..a7bf4d174a7 100644 --- a/src/sig/i-f.c +++ b/src/sig/i-f.c @@ -1,7 +1,7 @@ /* I - F . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/ihist.c b/src/sig/ihist.c index 3e7c80383f0..8e9479be631 100644 --- a/src/sig/ihist.c +++ b/src/sig/ihist.c @@ -1,7 +1,7 @@ /* I H I S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/imod.c b/src/sig/imod.c index 9ff659b7cc7..7cec66b8dfd 100644 --- a/src/sig/imod.c +++ b/src/sig/imod.c @@ -1,7 +1,7 @@ /* I M O D . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/interp.c b/src/sig/interp.c index 29f43d5eff6..c1bacae896c 100644 --- a/src/sig/interp.c +++ b/src/sig/interp.c @@ -1,7 +1,7 @@ /* I N T E R P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/istats.c b/src/sig/istats.c index 16f9824b856..e911759fe01 100644 --- a/src/sig/istats.c +++ b/src/sig/istats.c @@ -1,7 +1,7 @@ /* I S T A T S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/smod.c b/src/sig/smod.c index 8e3a80c14ea..cb7fb9de50a 100644 --- a/src/sig/smod.c +++ b/src/sig/smod.c @@ -1,7 +1,7 @@ /* S M O D . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/u-a.c b/src/sig/u-a.c index 24e2b4bb591..9e01ae48c8b 100644 --- a/src/sig/u-a.c +++ b/src/sig/u-a.c @@ -1,7 +1,7 @@ /* U - A . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/u-bw.c b/src/sig/u-bw.c index b2ab78b78b7..5587fdf567a 100644 --- a/src/sig/u-bw.c +++ b/src/sig/u-bw.c @@ -1,7 +1,7 @@ /* U - B W . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/u-d.c b/src/sig/u-d.c index 0997268ccca..b0f23f86249 100644 --- a/src/sig/u-d.c +++ b/src/sig/u-d.c @@ -1,7 +1,7 @@ /* U - D . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/u-f.c b/src/sig/u-f.c index 766b1f25ce7..ddcccd4d5b1 100644 --- a/src/sig/u-f.c +++ b/src/sig/u-f.c @@ -1,7 +1,7 @@ /* U - F . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/umod.c b/src/sig/umod.c index 5c9f1c60e24..297b22664cb 100644 --- a/src/sig/umod.c +++ b/src/sig/umod.c @@ -1,7 +1,7 @@ /* U M O D . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/sig/ustats.c b/src/sig/ustats.c index 997b5459794..8ddda5e2a9b 100644 --- a/src/sig/ustats.c +++ b/src/sig/ustats.c @@ -1,7 +1,7 @@ /* U S T A T S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/tclscripts/CMakeLists.txt b/src/tclscripts/CMakeLists.txt index ba7785d7a1e..206f3d4765a 100644 --- a/src/tclscripts/CMakeLists.txt +++ b/src/tclscripts/CMakeLists.txt @@ -27,13 +27,6 @@ macro(general_tcl_index_BUILD cmd outfile targetdir) # normalize so we can use it as a name string(REGEX REPLACE "/" "_" name ${targetdir}) - # divert output to diff paths depending on whether debug or release - if(CMAKE_CONFIGURATION_TYPES) - set(tclindex_outdir "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${DATA_DIR}/${targetdir}") - else(CMAKE_CONFIGURATION_TYPES) - set(tclindex_outdir "${CMAKE_BINARY_DIR}/${DATA_DIR}/${targetdir}") - endif(CMAKE_CONFIGURATION_TYPES) - # get file copy target(s) so we can make tclindex.tcl depend on them BRLCAD_GET_DIR_LIST_CONTENTS(DATA_TARGETS "${CMAKE_CURRENT_BINARY_DIR}" data_target_list) @@ -42,14 +35,25 @@ macro(general_tcl_index_BUILD cmd outfile targetdir) file(GLOB tcl_files "*.tcl") # command that builds the index when the dependency is resolved + set(tclindex_outdir "${CMAKE_BINARY_DIR}/${CMAKE_CFG_INTDIR}/${DATA_DIR}/${targetdir}") add_custom_command( OUTPUT ${tclindex_outdir}/${outfile} - COMMAND btclsh ${CMAKE_BINARY_DIR}/CMakeTmp/${cmd}.tcl ${tclindex_outdir} >> ${CMAKE_CURRENT_BINARY_DIR}/${cmd}_index_gen.log 2>&1 + COMMAND btclsh ${CMAKE_BINARY_DIR}/CMakeTmp/${cmd}.tcl ${tclindex_outdir} DEPENDS btclsh ${data_target_list} ${tcl_files} ) - # put tclindex.tcl where it goes - install(FILES ${tclindex_outdir}/${outfile} DESTINATION ${DATA_DIR}/${targetdir}) + # Install logic for index file. + if(CMAKE_CONFIGURATION_TYPES) + # Need to use $ here rather than CMAKE_CFG_INTDIR + # as install in interpreted by CMake, not by the build tool. See + # https://discourse.cmake.org/t/cmake-cfg-intdir-and-file-install/2169 + install(FILES ${CMAKE_BINARY_DIR}/$/${DATA_DIR}/${targetdir}/${outfile} DESTINATION ${DATA_DIR}/${targetdir}) + else(CMAKE_CONFIGURATION_TYPES) + # CMAKE_CFG_INTDIR expands to "." in non-multiconfig builds, which is why we can use it universally in + # the add_custom_command logic. However, $ may be Debug or Release even in a singlei + # configuration. Therefore, we use a non-config specific path if we're not in multiconfig build mode. + install(FILES ${CMAKE_BINARY_DIR}/${DATA_DIR}/${targetdir}/${outfile} DESTINATION ${DATA_DIR}/${targetdir}) + endif(CMAKE_CONFIGURATION_TYPES) # convenience target add_custom_target(${name}_${cmd}.tcl ALL DEPENDS ${tclindex_outdir}/${outfile}) @@ -60,9 +64,6 @@ macro(general_tcl_index_BUILD cmd outfile targetdir) list(REMOVE_DUPLICATES tclindex_target_list) set(tclindex_target_list "${tclindex_target_list}" CACHE STRING "tclindex target list" FORCE) - set(LOG_FILES "${LOG_FILES};${CMAKE_CURRENT_BINARY_DIR}/${cmd}_index_gen.log") - - DISTCLEAN(${CMAKE_CURRENT_BINARY_DIR}/${cmd}_index_gen.log) endif (BRLCAD_ENABLE_TCL) endmacro(general_tcl_index_BUILD name targetdir) mark_as_advanced(tclindex_target_list) diff --git a/src/tclscripts/archer/Arb4EditFrame.tcl b/src/tclscripts/archer/Arb4EditFrame.tcl index 99cd0009628..2ac2946606c 100755 --- a/src/tclscripts/archer/Arb4EditFrame.tcl +++ b/src/tclscripts/archer/Arb4EditFrame.tcl @@ -1,7 +1,7 @@ # A R B 4 E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/Arb5EditFrame.tcl b/src/tclscripts/archer/Arb5EditFrame.tcl index 2187bcbe22d..04d57fdf7ef 100755 --- a/src/tclscripts/archer/Arb5EditFrame.tcl +++ b/src/tclscripts/archer/Arb5EditFrame.tcl @@ -1,7 +1,7 @@ # A R B 5 E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/Arb6EditFrame.tcl b/src/tclscripts/archer/Arb6EditFrame.tcl index 31d065408ba..727b42a54be 100755 --- a/src/tclscripts/archer/Arb6EditFrame.tcl +++ b/src/tclscripts/archer/Arb6EditFrame.tcl @@ -1,7 +1,7 @@ # A R B 6 E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/Arb7EditFrame.tcl b/src/tclscripts/archer/Arb7EditFrame.tcl index c6bf609aeb2..ebfa61d33c0 100755 --- a/src/tclscripts/archer/Arb7EditFrame.tcl +++ b/src/tclscripts/archer/Arb7EditFrame.tcl @@ -1,7 +1,7 @@ # A R B 7 E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/Arb8EditFrame.tcl b/src/tclscripts/archer/Arb8EditFrame.tcl index 5bbfb6e9bca..021c950a53e 100755 --- a/src/tclscripts/archer/Arb8EditFrame.tcl +++ b/src/tclscripts/archer/Arb8EditFrame.tcl @@ -1,7 +1,7 @@ # A R B 8 E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/Archer.tcl b/src/tclscripts/archer/Archer.tcl index a6419e26c55..39f218bbc52 100755 --- a/src/tclscripts/archer/Archer.tcl +++ b/src/tclscripts/archer/Archer.tcl @@ -1,7 +1,7 @@ # A R C H E R . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -37,13 +37,7 @@ namespace eval Archer { set extraMgedCommands "" set corePluginInit "" - set pluginsdir [file join [bu_brlcad_root "share/plugins"] archer] - if {![file exists $pluginsdir]} { - # searching 'src' is only necessary for items installed to a - # different hierarchy. - set pluginsdir [file join [bu_brlcad_root "src"] archer plugins] - } - + set pluginsdir [file join [bu_dir data] plugins archer] foreach plugin_type {Core Commands} { if {[file exists [file join $pluginsdir $plugin_type]]} { set savePwd [pwd] @@ -679,14 +673,7 @@ package provide Archer 1.0 set pwd [::pwd] # developer & user plugins - set pluginPath [file join [bu_brlcad_root "share/plugins"] archer] - if { ![file exists $pluginPath] } { - # try a source dir invocation - - # searching 'src' is only necessary for items installed to a - # different hierarchy. - set pluginPath [file join [bu_brlcad_root "src"] archer plugins] - } + set pluginPath [file join [bu_dir data] plugins archer] if { ![file exists $pluginPath] } { # give up on loading any plugins return @@ -2422,7 +2409,7 @@ package provide Archer 1.0 } {} # About Info - set imgfile [file join [bu_brlcad_root "share/tclscripts"] archer images aboutArcher.png] + set imgfile [file join [bu_dir data] tclscripts archer images aboutArcher.png] set aboutImg [image create photo -file $imgfile] itk_component add aboutInfo { ::ttk::label $itk_component(aboutDialogTabs).aboutInfo \ @@ -2440,7 +2427,7 @@ package provide Archer 1.0 -textbackground $SystemButtonFace } {} - set brlcadLicenseFile [file join [bu_brlcad_root "share"] COPYING] + set brlcadLicenseFile [file join [bu_dir data] COPYING] if {![catch {open $brlcadLicenseFile "r"} fd]} { set brlcadLicenseInfo [read $fd] close $fd @@ -2459,7 +2446,7 @@ package provide Archer 1.0 -textbackground $SystemButtonFace } {} - set ackFile [file join [bu_brlcad_root "share/doc"] archer_ack.txt] + set ackFile [file join [bu_dir doc] archer_ack.txt] if {![catch {open $ackFile "r"} fd]} { set ackInfo [read $fd] close $fd @@ -2471,8 +2458,7 @@ package provide Archer 1.0 ::frame $itk_component(aboutDialogTabs).mikeInfo } {} - # try installed, uninstalled - set imgfile [file join [bu_brlcad_root "share/tclscripts"] mged mike-tux.png] + set imgfile [file join [bu_dir data] tclscripts mged mike-tux.png] set mikeImg [image create photo -file $imgfile] itk_component add mikePic { ::label $itk_component(mikeF).pic \ @@ -2500,7 +2486,7 @@ package provide Archer 1.0 -textbackground $SystemButtonFace } {} - set mikeInfoFile [file join [bu_brlcad_root "share/tclscripts"] mged mike-dedication.txt] + set mikeInfoFile [file join [bu_dir data] tclscripts mged mike-dedication.txt] if {![catch {open $mikeInfoFile "r"} fd]} { set mikeInfo [read -nonewline $fd] close $fd @@ -2538,7 +2524,7 @@ proc Archer::get_html_data {helpfile} { proc Archer::get_html_man_data {cmdname} { global archer_help_data - set help_fd [open [file join [bu_brlcad_root "share/doc/html"] mann $cmdname.html]] + set help_fd [open [file join [bu_dir doc] html mann $cmdname.html]] set archer_help_data [read $help_fd] close $help_fd } @@ -2561,7 +2547,7 @@ proc Archer::html_help_display {me} { if {[catch {regexp {(home://blank)(.+)} $origurl match prefix tempurl} msg]} { tk_messageBox -message "html_help_display: regexp failed, msg - $msg" } - set url [bu_brlcad_root "share/doc/html"] + set url [file join [bu_dir doc] html] append url $tempurl get_html_data $url $htmlviewer reset @@ -2570,7 +2556,7 @@ proc Archer::html_help_display {me} { proc Archer::mkHelpTkImage {file} { - set fullpath [file join [bu_brlcad_root "share/doc/html"] manuals $file] + set fullpath [file join [bu_dir doc] html manuals $file] set name [image create photo -file $fullpath] return [list $name [list image delete $name]] } @@ -2614,8 +2600,8 @@ proc title_node_handler {node} { set tlparent [$itk_component(archerHelp) childsite] - if {[file exists [file join [bu_brlcad_root "share/doc/html"] books BRL-CAD_Tutorial_Series-VolumeI.html]] && - [file exists [file join [bu_brlcad_root "share/doc/html"] toc.html]] } { + if {[file exists [file join [bu_dir doc] html books BRL-CAD_Tutorial_Series-VolumeI.html]] && + [file exists [file join [bu_dir doc] html toc.html]] } { # Table of Contents itk_component add archerHelpToC { @@ -2628,7 +2614,7 @@ proc title_node_handler {node} { set docstoclist [::hv3::hv3 $docstoc.htmlview -width 250 -requestcmd Archer::html_help_display] set docstochtml [$docstoclist html] $docstochtml configure -parsemode html - set help_fd [lindex [list [file join [bu_brlcad_root "share/doc/html"] toc.html]] 0] + set help_fd [lindex [list [file join [bu_dir doc] html toc.html]] 0] get_html_data $help_fd $docstochtml parse $archer_help_data @@ -2656,7 +2642,7 @@ proc title_node_handler {node} { set htmlviewer [$hv3htmlviewer html] $htmlviewer configure -parsemode html $htmlviewer configure -imagecmd Archer::mkHelpTkImage - set help_fd [lindex [list [file join [bu_brlcad_root "share/doc/html"] books BRL-CAD_Tutorial_Series-VolumeI.html]] 0] + set help_fd [lindex [list [file join [bu_dir doc] html books BRL-CAD_Tutorial_Series-VolumeI.html]] 0] get_html_data $help_fd $htmlviewer parse $archer_help_data diff --git a/src/tclscripts/archer/ArcherCore.tcl b/src/tclscripts/archer/ArcherCore.tcl index 80393b1dcc4..8853acd2eba 100755 --- a/src/tclscripts/archer/ArcherCore.tcl +++ b/src/tclscripts/archer/ArcherCore.tcl @@ -1,7 +1,7 @@ # A R C H E R C O R E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -1091,7 +1091,7 @@ namespace eval ArcherCore { set env(DISPLAY) ":0" } - set mImgDir [file join [bu_brlcad_root "share/tclscripts"] archer images] + set mImgDir [file join [bu_dir data] tclscripts archer images] if {[llength $args] == 1} { set args [lindex $args 0] diff --git a/src/tclscripts/archer/AttrGroupsDisplayUtility.tcl b/src/tclscripts/archer/AttrGroupsDisplayUtility.tcl index e0c02bf756e..6fc42314fe0 100644 --- a/src/tclscripts/archer/AttrGroupsDisplayUtility.tcl +++ b/src/tclscripts/archer/AttrGroupsDisplayUtility.tcl @@ -1,7 +1,7 @@ # A T T R G R O U P S U T I L I T Y . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/BotEditFrame.tcl b/src/tclscripts/archer/BotEditFrame.tcl index ad4828fed42..534899add98 100755 --- a/src/tclscripts/archer/BotEditFrame.tcl +++ b/src/tclscripts/archer/BotEditFrame.tcl @@ -1,7 +1,7 @@ # B O T E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/BotUtility.tcl b/src/tclscripts/archer/BotUtility.tcl index 615ffd11b01..314d722e850 100644 --- a/src/tclscripts/archer/BotUtility.tcl +++ b/src/tclscripts/archer/BotUtility.tcl @@ -1,7 +1,7 @@ # B O T U T I L I T Y . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/BrepEditFrame.tcl b/src/tclscripts/archer/BrepEditFrame.tcl index 29c175aa04a..0c131ce13f8 100644 --- a/src/tclscripts/archer/BrepEditFrame.tcl +++ b/src/tclscripts/archer/BrepEditFrame.tcl @@ -1,7 +1,7 @@ # B R E P E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/CombEditFrame.tcl b/src/tclscripts/archer/CombEditFrame.tcl index fbcaac1e021..5caa0cafcf5 100755 --- a/src/tclscripts/archer/CombEditFrame.tcl +++ b/src/tclscripts/archer/CombEditFrame.tcl @@ -1,7 +1,7 @@ # C O M B E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/DataUtils.tcl b/src/tclscripts/archer/DataUtils.tcl index 57a3c4927b9..820fce54f70 100644 --- a/src/tclscripts/archer/DataUtils.tcl +++ b/src/tclscripts/archer/DataUtils.tcl @@ -1,7 +1,7 @@ # D A T A U T I L S . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/EhyEditFrame.tcl b/src/tclscripts/archer/EhyEditFrame.tcl index faa493f3a58..24d874a7f7a 100755 --- a/src/tclscripts/archer/EhyEditFrame.tcl +++ b/src/tclscripts/archer/EhyEditFrame.tcl @@ -1,7 +1,7 @@ # E H Y E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/EllEditFrame.tcl b/src/tclscripts/archer/EllEditFrame.tcl index b871d37304e..f38090f883b 100755 --- a/src/tclscripts/archer/EllEditFrame.tcl +++ b/src/tclscripts/archer/EllEditFrame.tcl @@ -1,7 +1,7 @@ # E L L E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/EpaEditFrame.tcl b/src/tclscripts/archer/EpaEditFrame.tcl index 7d4c0df0251..98b9b02ffc7 100755 --- a/src/tclscripts/archer/EpaEditFrame.tcl +++ b/src/tclscripts/archer/EpaEditFrame.tcl @@ -1,7 +1,7 @@ # E P A E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/EtoEditFrame.tcl b/src/tclscripts/archer/EtoEditFrame.tcl index 3b9c0de12b8..a55da95762a 100755 --- a/src/tclscripts/archer/EtoEditFrame.tcl +++ b/src/tclscripts/archer/EtoEditFrame.tcl @@ -1,7 +1,7 @@ # E T O E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/ExtrudeEditFrame.tcl b/src/tclscripts/archer/ExtrudeEditFrame.tcl index e3efd1705cc..406817f48bf 100755 --- a/src/tclscripts/archer/ExtrudeEditFrame.tcl +++ b/src/tclscripts/archer/ExtrudeEditFrame.tcl @@ -1,7 +1,7 @@ # E X T R U D E E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/GeometryEditFrame.tcl b/src/tclscripts/archer/GeometryEditFrame.tcl index 7d97c9fcc4b..7878246cb7d 100755 --- a/src/tclscripts/archer/GeometryEditFrame.tcl +++ b/src/tclscripts/archer/GeometryEditFrame.tcl @@ -1,7 +1,7 @@ # G E O M E T R Y E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/GripEditFrame.tcl b/src/tclscripts/archer/GripEditFrame.tcl index 63df21f01b1..3be67ce09cf 100755 --- a/src/tclscripts/archer/GripEditFrame.tcl +++ b/src/tclscripts/archer/GripEditFrame.tcl @@ -1,7 +1,7 @@ # G R I P E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/HalfEditFrame.tcl b/src/tclscripts/archer/HalfEditFrame.tcl index 408485b8bea..a9925fa04c6 100755 --- a/src/tclscripts/archer/HalfEditFrame.tcl +++ b/src/tclscripts/archer/HalfEditFrame.tcl @@ -1,7 +1,7 @@ # H A L F E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/HypEditFrame.tcl b/src/tclscripts/archer/HypEditFrame.tcl index c5bdf90b483..0a7e1e4899c 100755 --- a/src/tclscripts/archer/HypEditFrame.tcl +++ b/src/tclscripts/archer/HypEditFrame.tcl @@ -1,7 +1,7 @@ # H Y P E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/JointEditFrame.tcl b/src/tclscripts/archer/JointEditFrame.tcl index b844846b3f2..7c64ad248df 100644 --- a/src/tclscripts/archer/JointEditFrame.tcl +++ b/src/tclscripts/archer/JointEditFrame.tcl @@ -1,7 +1,7 @@ # E X T R U D E E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/LODUtility.tcl b/src/tclscripts/archer/LODUtility.tcl index d69087b6c7a..423731d4a2d 100644 --- a/src/tclscripts/archer/LODUtility.tcl +++ b/src/tclscripts/archer/LODUtility.tcl @@ -1,7 +1,7 @@ # L O D U T I L I T Y . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/LoadArcherLibs.tcl b/src/tclscripts/archer/LoadArcherLibs.tcl index d2191280b93..cf9eb6bb4f0 100755 --- a/src/tclscripts/archer/LoadArcherLibs.tcl +++ b/src/tclscripts/archer/LoadArcherLibs.tcl @@ -1,7 +1,7 @@ # L O A D A R C H E R L I B S . T C L # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/MetaballEditFrame.tcl b/src/tclscripts/archer/MetaballEditFrame.tcl index 53614feb94b..f5614271fe1 100644 --- a/src/tclscripts/archer/MetaballEditFrame.tcl +++ b/src/tclscripts/archer/MetaballEditFrame.tcl @@ -1,7 +1,7 @@ # M E T A B A L L E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/PartEditFrame.tcl b/src/tclscripts/archer/PartEditFrame.tcl index 34989eddfa9..3cddde1937d 100755 --- a/src/tclscripts/archer/PartEditFrame.tcl +++ b/src/tclscripts/archer/PartEditFrame.tcl @@ -1,7 +1,7 @@ # P A R T E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/PipeEditFrame.tcl b/src/tclscripts/archer/PipeEditFrame.tcl index 444151cf745..7bc0fc9f924 100755 --- a/src/tclscripts/archer/PipeEditFrame.tcl +++ b/src/tclscripts/archer/PipeEditFrame.tcl @@ -1,7 +1,7 @@ # P I P E E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/Plugin.tcl b/src/tclscripts/archer/Plugin.tcl index 677b28efd4c..170ea222230 100755 --- a/src/tclscripts/archer/Plugin.tcl +++ b/src/tclscripts/archer/Plugin.tcl @@ -1,7 +1,7 @@ # P L U G I N . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/RhcEditFrame.tcl b/src/tclscripts/archer/RhcEditFrame.tcl index 3718f68f9f7..6efaf84fc7f 100755 --- a/src/tclscripts/archer/RhcEditFrame.tcl +++ b/src/tclscripts/archer/RhcEditFrame.tcl @@ -1,7 +1,7 @@ # R H C E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/RpcEditFrame.tcl b/src/tclscripts/archer/RpcEditFrame.tcl index 3fbc1c4f0a9..a9cd73f9004 100755 --- a/src/tclscripts/archer/RpcEditFrame.tcl +++ b/src/tclscripts/archer/RpcEditFrame.tcl @@ -1,7 +1,7 @@ # R P C E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/ShaderEdit.tcl b/src/tclscripts/archer/ShaderEdit.tcl index 553b348e6e7..9ce9cfee89d 100755 --- a/src/tclscripts/archer/ShaderEdit.tcl +++ b/src/tclscripts/archer/ShaderEdit.tcl @@ -1,7 +1,7 @@ # S H A D E R E D I T . T C L # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -1017,7 +1017,7 @@ foreach s { 0 1 2 3 4 5 6 7 8 9 } { set lightImages(light_i${i}_v${v}_s${s}) \ [image create photo -file \ - [file join [bu_brlcad_root "share/tclscripts"] archer images l_i${i}_v${v}_s${s}.gif]] + [file join [bu_dir data] tclscripts archer images l_i${i}_v${v}_s${s}.gif]] } } } diff --git a/src/tclscripts/archer/SketchEditFrame.tcl b/src/tclscripts/archer/SketchEditFrame.tcl index 8e27d33c20a..04c1f415ade 100755 --- a/src/tclscripts/archer/SketchEditFrame.tcl +++ b/src/tclscripts/archer/SketchEditFrame.tcl @@ -1,7 +1,7 @@ # S K E T C H E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/SphereEditFrame.tcl b/src/tclscripts/archer/SphereEditFrame.tcl index ba73d04006d..ef9c5a05007 100755 --- a/src/tclscripts/archer/SphereEditFrame.tcl +++ b/src/tclscripts/archer/SphereEditFrame.tcl @@ -1,7 +1,7 @@ # S P H E R E E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/SuperellEditFrame.tcl b/src/tclscripts/archer/SuperellEditFrame.tcl index 95a979b51bc..e500dda6163 100755 --- a/src/tclscripts/archer/SuperellEditFrame.tcl +++ b/src/tclscripts/archer/SuperellEditFrame.tcl @@ -1,7 +1,7 @@ # S U P E R E L L E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/TgcEditFrame.tcl b/src/tclscripts/archer/TgcEditFrame.tcl index 7842fcf90e4..55c6219edf8 100755 --- a/src/tclscripts/archer/TgcEditFrame.tcl +++ b/src/tclscripts/archer/TgcEditFrame.tcl @@ -1,7 +1,7 @@ # T G C E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/TorusEditFrame.tcl b/src/tclscripts/archer/TorusEditFrame.tcl index 625be7aced1..f422a34c0cc 100755 --- a/src/tclscripts/archer/TorusEditFrame.tcl +++ b/src/tclscripts/archer/TorusEditFrame.tcl @@ -1,7 +1,7 @@ # T O R U S E D I T F R A M E . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/Utility.tcl b/src/tclscripts/archer/Utility.tcl index 2278a0891e1..6a92adf7d8f 100644 --- a/src/tclscripts/archer/Utility.tcl +++ b/src/tclscripts/archer/Utility.tcl @@ -1,7 +1,7 @@ # U T I L I T Y . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/Wizard.tcl b/src/tclscripts/archer/Wizard.tcl index 3dd088722b6..b6aca3cab0a 100755 --- a/src/tclscripts/archer/Wizard.tcl +++ b/src/tclscripts/archer/Wizard.tcl @@ -1,7 +1,7 @@ # W I Z A R D . T C L # BRL-CAD # -# Copyright (c) 2002-2020 United States Government as represented by +# Copyright (c) 2002-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/bgerror.tcl b/src/tclscripts/archer/bgerror.tcl index 4ddae0c3ff6..0ce92a67097 100755 --- a/src/tclscripts/archer/bgerror.tcl +++ b/src/tclscripts/archer/bgerror.tcl @@ -1,7 +1,7 @@ # B G E R R O R . T C L # BRL-CAD # -# Copyright (c) 2000-2020 United States Government as represented by +# Copyright (c) 2000-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/itk_redefines.tcl b/src/tclscripts/archer/itk_redefines.tcl index 27d22c02c18..b1a38b7fdec 100644 --- a/src/tclscripts/archer/itk_redefines.tcl +++ b/src/tclscripts/archer/itk_redefines.tcl @@ -1,7 +1,7 @@ # I T K _ R E D E F I N E S . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/archer/tabwindow.itk b/src/tclscripts/archer/tabwindow.itk old mode 100755 new mode 100644 index 16042c7b3f4..010c71ff840 --- a/src/tclscripts/archer/tabwindow.itk +++ b/src/tclscripts/archer/tabwindow.itk @@ -1,7 +1,7 @@ # T A B W I N D O W . I T K # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/boteditor/botEditor.tcl b/src/tclscripts/boteditor/botEditor.tcl index fd1c0973af6..095501ac9ae 100644 --- a/src/tclscripts/boteditor/botEditor.tcl +++ b/src/tclscripts/boteditor/botEditor.tcl @@ -1,7 +1,7 @@ # B O T E D I T O R . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/boteditor/botPropertyBox.tcl b/src/tclscripts/boteditor/botPropertyBox.tcl index 79ecf08d471..9083988862b 100644 --- a/src/tclscripts/boteditor/botPropertyBox.tcl +++ b/src/tclscripts/boteditor/botPropertyBox.tcl @@ -1,7 +1,7 @@ # B O T P R O P E R T Y B O X . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/boteditor/botTools.tcl b/src/tclscripts/boteditor/botTools.tcl index 04873f7619d..623ad0b4a34 100644 --- a/src/tclscripts/boteditor/botTools.tcl +++ b/src/tclscripts/boteditor/botTools.tcl @@ -1,7 +1,7 @@ # B O T T O O L S . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/cad_dialog.tcl b/src/tclscripts/cad_dialog.tcl index 7c243ed8fe7..677389ecf95 100755 --- a/src/tclscripts/cad_dialog.tcl +++ b/src/tclscripts/cad_dialog.tcl @@ -1,7 +1,7 @@ # C A D _ D I A L O G . T C L # BRL-CAD # -# Copyright (c) 1995-2020 United States Government as represented by +# Copyright (c) 1995-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/checker/OverlapFileTool.tcl b/src/tclscripts/checker/OverlapFileTool.tcl index 3f35c34fb33..046bf269eb9 100644 --- a/src/tclscripts/checker/OverlapFileTool.tcl +++ b/src/tclscripts/checker/OverlapFileTool.tcl @@ -1,7 +1,7 @@ # O V E R L A P F I L E T O O L . T C L # BRL-CAD # -# Copyright (c) 2018-2020 United States Government as represented by +# Copyright (c) 2018-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -21,9 +21,8 @@ # # Description - # -# This is the Overlaps File tool. Which creates a new overlaps file -# for the checker tool. -# +# This is the Overlaps File tool. +# package require Tk package require Itcl @@ -59,9 +58,6 @@ package provide OverlapFileTool 1.0 variable _statusText variable _progressValue - method runCheckOverlapsAE { obj } {} - method runCheckOverlapsTriple { obj } {} - method sortPairs {} {} method rmDupPairs {} {} @@ -186,7 +182,8 @@ body OverlapFileTool::runTools { } { # get _objs from list set _objs "" foreach obj [$itk_component(objectsList) get 0 end] { - append _objs " " $obj + set objn [string trim $obj "/"] + append _objs $objn } # check if user passed the objects list if { [llength $_objs] == 0 } { @@ -199,13 +196,26 @@ body OverlapFileTool::runTools { } { $itk_component(objectsEntry) configure -state disabled $this configure -cursor watch - # run checkoverlaps for all the specified objects - if { [string length $_objs] > 0 } { - $this runCheckOverlapsAE $_objs - $this runCheckOverlapsTriple $_objs + # delete any previous overlaps files in the db directory + set db_path [eval opendb] + set dir [file dirname $db_path] + set name [file tail $db_path] + set ol_dir [file join $dir "${name}.ck"] + set filename [file join $dir "${name}.ck" "ck.${name}.overlaps"] + file delete -force -- $ol_dir + + # run overlaps check for all the specified objects + if { [catch {exec [file join [bu_dir bin] gchecker] $db_path $_objs}] } { + set gcmd "[file join [bu_dir bin] gchecker] $db_path $_objs" + puts "gchecker run failed: $gcmd" } + # check for the count of overlaps detected - set ov_count [llength $pairsList] + set fp [open $filename r] + set ldata [read $fp] + set ov_count [llength [split $ldata "\n"]] + incr ov_count -1 + if { $ov_count == 0 } { tk_messageBox -type ok -title "No Overlaps Found" -message "No Overlaps Found" $itk_component(buttonGo) configure -state normal @@ -218,27 +228,6 @@ body OverlapFileTool::runTools { } { puts "\nCount of overlaps: $ov_count\n" - # process the overlap pairs - $this sortPairs - $this rmDupPairs - - # delete any previous overlaps files in the db directory - set db_path [eval opendb] - set dir [file dirname $db_path] - set name [file tail $db_path] - set ol_dir [file join $dir "${name}.ck"] - set filename [file join $dir "${name}.ck" "ck.${name}.overlaps"] - file delete -force -- $ol_dir - - # create new folder - file mkdir $ol_dir - # write the overlaps file - set fp [open $filename w+] - foreach pair [lsort -decreasing -real -index 2 $overlapsList] { - #puts $pair - puts $fp $pair - } - close $fp puts "\nOverlaps file saved: $filename" # run checker tool @@ -527,70 +516,7 @@ body OverlapFileTool::sortPairs { } { set pairsList [lsort $pairsList] } -# runCheckOverlapsTriple -# -# runs the check overlaps command for the passed object -# in triple grid mode -# -body OverlapFileTool::runCheckOverlapsTriple { obj } { - set cmd "check overlaps -g1mm,1mm -q $obj" - set _statusText "Running $cmd" - if [ catch {set check_list [eval $cmd]} ] { - set check_list {} - } - set lines [split $check_list \n] - foreach line $lines { - regexp {<(.*),.(.*)>: ([0-9]*).* (.*).mm} $line full left right count depth - if { [info exists full] == 0 } { - continue - } - set size [expr $count * $depth] - # swaps the region names by comparing lexicographically - if { [string compare $left $right] > 0 } { - lappend pairsList [list $right $left $size] - } else { - lappend pairsList [list $left $right $size] - } - # unset $full for next line - unset full - } - set _progressValue 90 -} -# runCheckOverlapsAE -# -# runs the check overlaps command for the passed object -# 16 times for different combinations of az/el values -# in single grid mode -# -body OverlapFileTool::runCheckOverlapsAE { obj } { - for { set az 0} {$az < 180} {incr az 45} { - for { set el 0} {$el < 180} {incr el 45} { - set cmd "check overlaps -G1024 -a$az -e$el -q $obj" - set _statusText "Running $cmd" - incr _progressValue 4 - if [catch {set check_list [eval $cmd]}] { - set check_list {} - } - set lines [split $check_list \n] - foreach line $lines { - regexp {<(.*),.(.*)>: ([0-9]*).* (.*).mm} $line full left right count depth - if { [info exists full] == 0 } { - continue - } - set size [expr $count * $depth] - # swaps the region names by comparing lexicographically - if { [string compare $left $right] > 0 } { - lappend pairsList [list $right $left $size] - } else { - lappend pairsList [list $left $right $size] - } - # unset $full for next line - unset full - } - } - } -} ########### # end private methods ########### diff --git a/src/tclscripts/checker/check.tcl b/src/tclscripts/checker/check.tcl index 4119bc2223b..f73d2f3f0ab 100644 --- a/src/tclscripts/checker/check.tcl +++ b/src/tclscripts/checker/check.tcl @@ -1,7 +1,7 @@ # C H E C K E R . T C L # BRL-CAD # -# Copyright (c) 2016-2020 United States Government as represented by +# Copyright (c) 2016-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/checker/menu.tcl b/src/tclscripts/checker/menu.tcl index d62527f5339..47a0a9da017 100644 --- a/src/tclscripts/checker/menu.tcl +++ b/src/tclscripts/checker/menu.tcl @@ -1,7 +1,7 @@ # M E N U . T C L # BRL-CAD # -# Copyright (c) 2018-2020 United States Government as represented by +# Copyright (c) 2018-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/checker/test_checker.tcl b/src/tclscripts/checker/test_checker.tcl index f611d260c93..853dcb78e1a 100644 --- a/src/tclscripts/checker/test_checker.tcl +++ b/src/tclscripts/checker/test_checker.tcl @@ -2,7 +2,7 @@ # T E S T _ C H E C K E R . T C L # BRL-CAD # -# Copyright (c) 2017-2020 United States Government as represented by +# Copyright (c) 2017-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/chkexterns.tcl b/src/tclscripts/chkexterns.tcl index 059a0e02fbe..4e01711883a 100755 --- a/src/tclscripts/chkexterns.tcl +++ b/src/tclscripts/chkexterns.tcl @@ -1,7 +1,7 @@ # C H K E X T E R N S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/fs_dialog.tk b/src/tclscripts/fs_dialog.tk old mode 100755 new mode 100644 index 8cf4b06edfe..c7c940a4370 --- a/src/tclscripts/fs_dialog.tk +++ b/src/tclscripts/fs_dialog.tk @@ -1,7 +1,7 @@ # F S _ D I A L O G . T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/geometree/GeometryBrowser.tcl b/src/tclscripts/geometree/GeometryBrowser.tcl index 7e1f1792540..2d293b69ddc 100755 --- a/src/tclscripts/geometree/GeometryBrowser.tcl +++ b/src/tclscripts/geometree/GeometryBrowser.tcl @@ -1,7 +1,7 @@ # G E O M E T R Y B R O W S E R . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -475,7 +475,7 @@ body GeometryBrowser::destructor {} { # destroy the framebuffer, if we opened it if { $_weStartedFbserv } { puts "cleaning up fbserv" - set fbfree [file join [bu_brlcad_root "bin"] fbfree] + set fbfree [file join [bu_dir bin] fbfree] if { [ catch { exec $fbfree -F $_fbservPort } error ] } { puts $error puts "Unable to properly clean up after our fbserv" @@ -956,10 +956,10 @@ body GeometryBrowser::renderPreview { { rtoptions "-P4 -R -B" } } { set device /dev/X set rgb "255 255 255" set rtrun "" - set fbserv [file join [bu_brlcad_root "bin"] fbserv] - set fbfree [file join [bu_brlcad_root "bin"] fbfree] - set fbline [file join [bu_brlcad_root "bin"] fbline] - set fbclear [file join [bu_brlcad_root "bin"] fbclear] + set fbserv [file join [bu_dir bin] fbserv] + set fbfree [file join [bu_dir bin] fbfree] + set fbline [file join [bu_dir bin] fbline] + set fbclear [file join [bu_dir bin] fbclear] # see if we can try to use the mged graphics window instead of firing up our own framebuffer set useMgedWindow 0 @@ -1111,7 +1111,7 @@ body GeometryBrowser::raytracePanel {} { # simply fires off rtwizard # body GeometryBrowser::raytraceWizard {} { - set rtwizard [file join [bu_brlcad_root "bin"] rtwizard] + set rtwizard [file join [bu_dir bin] rtwizard] puts "exec $rtwizard &" return [ exec $rtwizard & ] } diff --git a/src/tclscripts/geometree/geometree.tcl b/src/tclscripts/geometree/geometree.tcl old mode 100755 new mode 100644 index 19a2e562dfc..7c0c1909247 --- a/src/tclscripts/geometree/geometree.tcl +++ b/src/tclscripts/geometree/geometree.tcl @@ -2,7 +2,7 @@ # G E O M E T R E E . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/helpcomm.tcl b/src/tclscripts/helpcomm.tcl index c6b82defde5..1109d636973 100755 --- a/src/tclscripts/helpcomm.tcl +++ b/src/tclscripts/helpcomm.tcl @@ -1,7 +1,7 @@ # H E L P C O M M . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/helplib.tcl b/src/tclscripts/helplib.tcl index 1ce267875aa..cb20db4c9f1 100755 --- a/src/tclscripts/helplib.tcl +++ b/src/tclscripts/helplib.tcl @@ -1,7 +1,7 @@ # H E L P L I B . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/hoc.tcl b/src/tclscripts/hoc.tcl index 285648e9429..cb4aea04d10 100755 --- a/src/tclscripts/hoc.tcl +++ b/src/tclscripts/hoc.tcl @@ -1,7 +1,7 @@ # H O C . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/hv3/demo/viewpage.tcl b/src/tclscripts/hv3/demo/viewpage.tcl index ff362513a16..c5338cfe344 100755 --- a/src/tclscripts/hv3/demo/viewpage.tcl +++ b/src/tclscripts/hv3/demo/viewpage.tcl @@ -2,7 +2,7 @@ # V I E W P A G E . T C L # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/igraph/GraphEditor.tcl b/src/tclscripts/igraph/GraphEditor.tcl index 9ea8545b9d6..e49255444c6 100644 --- a/src/tclscripts/igraph/GraphEditor.tcl +++ b/src/tclscripts/igraph/GraphEditor.tcl @@ -1,7 +1,7 @@ # G R A P H E D I T O R . T C L # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -281,7 +281,7 @@ body GraphEditor::destructor {} { # destroy the framebuffer, if we opened it if { $_weStartedFbserv } { puts "cleaning up fbserv" - set fbfree [file join [bu_brlcad_root "bin"] fbfree] + set fbfree [file join [bu_dir bin] fbfree] if { [ catch { exec $fbfree -F $_fbservPort } error ] } { puts $error puts "Unable to properly clean up after our fbserv" @@ -380,10 +380,10 @@ body GraphEditor::renderPreview { { rtoptions "-P4 -R -B" } } { set device /dev/X set rgb "255 255 255" set rtrun "" - set fbserv [file join [bu_brlcad_root "bin"] fbserv] - set fbfree [file join [bu_brlcad_root "bin"] fbfree] - set fbline [file join [bu_brlcad_root "bin"] fbline] - set fbclear [file join [bu_brlcad_root "bin"] fbclear] + set fbserv [file join [bu_dir bin] fbserv] + set fbfree [file join [bu_dir bin] fbfree] + set fbline [file join [bu_dir bin] fbline] + set fbclear [file join [bu_dir bin] fbclear] # see if we can try to use the mged graphics window instead of firing up our own framebuffer set useMgedWindow 0 diff --git a/src/tclscripts/igraph/igraph.tcl b/src/tclscripts/igraph/igraph.tcl index cfd2da67049..e46628bcf9c 100644 --- a/src/tclscripts/igraph/igraph.tcl +++ b/src/tclscripts/igraph/igraph.tcl @@ -2,7 +2,7 @@ # I G R A P H . T C L # BRL-CAD # -# Copyright (c) 2012-2020 United States Government as represented by +# Copyright (c) 2012-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Accordian.tcl b/src/tclscripts/lib/Accordian.tcl index 003d0fc202b..2a4f1b9008d 100644 --- a/src/tclscripts/lib/Accordian.tcl +++ b/src/tclscripts/lib/Accordian.tcl @@ -1,7 +1,7 @@ # A C C O R D I A N . T C L # BRL-CAD # -# Copyright (c) 2011-2020 United States Government as represented by +# Copyright (c) 2011-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/CellPlot.tcl b/src/tclscripts/lib/CellPlot.tcl index dc954f9314b..e40e45ec730 100755 --- a/src/tclscripts/lib/CellPlot.tcl +++ b/src/tclscripts/lib/CellPlot.tcl @@ -1,7 +1,7 @@ # C E L L P L O T . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/ColorEntry.tcl b/src/tclscripts/lib/ColorEntry.tcl index 52db570add0..da3c373b2ce 100755 --- a/src/tclscripts/lib/ColorEntry.tcl +++ b/src/tclscripts/lib/ColorEntry.tcl @@ -1,7 +1,7 @@ # C O L O R E N T R Y . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/ComboBox.tcl b/src/tclscripts/lib/ComboBox.tcl index 907da28b879..f3630797209 100755 --- a/src/tclscripts/lib/ComboBox.tcl +++ b/src/tclscripts/lib/ComboBox.tcl @@ -1,7 +1,7 @@ # C O M B O B O X . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Command.tcl b/src/tclscripts/lib/Command.tcl index 75aeac1e1c6..b5b7e8ba70b 100755 --- a/src/tclscripts/lib/Command.tcl +++ b/src/tclscripts/lib/Command.tcl @@ -1,7 +1,7 @@ # C O M M A N D . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Database.tcl b/src/tclscripts/lib/Database.tcl index d582eb03f61..a42b50be3ce 100755 --- a/src/tclscripts/lib/Database.tcl +++ b/src/tclscripts/lib/Database.tcl @@ -1,7 +1,7 @@ # D A T A B A S E . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Db.tcl b/src/tclscripts/lib/Db.tcl index d959e3d94c2..b06baa46d87 100755 --- a/src/tclscripts/lib/Db.tcl +++ b/src/tclscripts/lib/Db.tcl @@ -1,7 +1,7 @@ # D B . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Display.tcl b/src/tclscripts/lib/Display.tcl index 68737245c32..9f5b441a143 100755 --- a/src/tclscripts/lib/Display.tcl +++ b/src/tclscripts/lib/Display.tcl @@ -1,7 +1,7 @@ # D I S P L A Y . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Dm.tcl b/src/tclscripts/lib/Dm.tcl index 6eb29589cd5..8768e18ad0a 100755 --- a/src/tclscripts/lib/Dm.tcl +++ b/src/tclscripts/lib/Dm.tcl @@ -1,7 +1,7 @@ # D M . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Drawable.tcl b/src/tclscripts/lib/Drawable.tcl index 853070c57eb..5bb6c7e53f0 100755 --- a/src/tclscripts/lib/Drawable.tcl +++ b/src/tclscripts/lib/Drawable.tcl @@ -1,7 +1,7 @@ # D R A W A B L E . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Ged.tcl b/src/tclscripts/lib/Ged.tcl index 1edf015c71c..4504c8f2730 100755 --- a/src/tclscripts/lib/Ged.tcl +++ b/src/tclscripts/lib/Ged.tcl @@ -1,7 +1,7 @@ # G E D . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -163,8 +163,6 @@ package provide cadwidgets::Ged 1.0 method bounds_all {args} method brep {args} method bu_units_conversion {args} - method bu_brlcad_dir {args} - method bu_brlcad_root {args} method bu_prmem {args} method bu_get_value_by_keyword {args} method bu_rgb_to_hsv {args} @@ -212,6 +210,7 @@ package provide cadwidgets::Ged 1.0 method delay {args} method dir2ae {args} method dlist_on {args} + method dplot {args} method draw {args} method draw_ray {_start _partitions} method dsp {args} @@ -1387,14 +1386,6 @@ package provide cadwidgets::Ged 1.0 uplevel \#0 bu_units_conversion $args } -::itcl::body cadwidgets::Ged::bu_brlcad_dir {args} { - uplevel \#0 bu_brlcad_dir $args -} - -::itcl::body cadwidgets::Ged::bu_brlcad_root {args} { - uplevel \#0 bu_brlcad_root $args -} - ::itcl::body cadwidgets::Ged::bu_prmem {args} { uplevel \#0 bu_prmem $args } @@ -1636,6 +1627,10 @@ package provide cadwidgets::Ged 1.0 eval $mGed dlist_on $args } +::itcl::body cadwidgets::Ged::dplot {args} { + eval $mGed dplot $args +} + ::itcl::body cadwidgets::Ged::draw {args} { set mRayNeedGettrees 1 @@ -1889,7 +1884,7 @@ package provide cadwidgets::Ged 1.0 incr mLastPort set port $mLastPort - set binpath [bu_brlcad_root "bin"] + set binpath [bu_dir bin] # This doesn't work (i.e. the "&" causes exec to always succeed, even when the command fails) while {[catch {exec [file join $binpath fbserv] -w $_w -n $_n $port $_fbtype &} pid]} { @@ -2132,7 +2127,7 @@ package provide cadwidgets::Ged 1.0 make_image $fbs_port $w $n $viewsize $orientation $eye_pt $perspective \ $_bgcolor $_ecolor $_necolor $_occmode $_gamma $_color_objects $_ghost_objects $_edge_objects - set binpath [bu_brlcad_root "bin"] + set binpath [bu_dir bin] catch {exec [file join $binpath fb-fb] $fbs_port $port &} if {$::tcl_platform(platform) == "windows"} { @@ -6224,8 +6219,6 @@ package provide cadwidgets::Ged 1.0 [brepname] - convert the non-BREP object to BREP form [suffix] - convert non-BREP comb to unevaluated BREP form}} $help add bu_units_conversion {{units} {}} - $help add bu_brlcad_dir {{dirkey} {}} - $help add bu_brlcad_root {{subdir} {}} $help add bu_prmem {{title} {}} $help add bu_get_value_by_keyword {{iwant list} {}} $help add bu_rgb_to_hsv {{rgb} {}} @@ -6259,6 +6252,7 @@ package provide cadwidgets::Ged 1.0 $help add decompose {{nmg_solid [prefix]} {decompose nmg_solid into maximally connected shells}} $help add delay {{sec usec} {delay processing for the specified amount of time}} $help add dir2ae {{az el} {returns a direction vector given the azimuth and elevation}} + $help add dplot {{dplot_log} {draws plotfiles from the given logfile}} $help add draw {{"-C#/#/# "} {draw objects}} $help add dsp {{obj [command]} {work with DSP primitives}} $help add dump {{file} {write current state of database object to file}} diff --git a/src/tclscripts/lib/GeometryIO.tcl b/src/tclscripts/lib/GeometryIO.tcl index ba828d94175..7086440199a 100644 --- a/src/tclscripts/lib/GeometryIO.tcl +++ b/src/tclscripts/lib/GeometryIO.tcl @@ -1,7 +1,7 @@ # G E O M E T R Y I O . T C L # BRL-CAD # -# Copyright (c) 2014-2020 United States Government as represented by +# Copyright (c) 2014-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -32,14 +32,14 @@ if {$::tcl_platform(platform) == "windows"} { } proc ::run_conversion_config {input_file log_file} { - set gui_cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] bwish$::exe_ext]] \ - [bu_brlcad_root "share/tclscripts/lib/gui_conversion.tcl"] "$input_file" "$log_file"] + set gui_cmd [list [file join [bu_dir bin] bwish$::exe_ext] \ + [file join [bu_dir data] tclscripts lib gui_conversion.tcl] "$input_file" "$log_file"] catch {eval exec $gui_cmd} _conv_log } proc geom_load {input_file gui_feedback} { - set binpath [bu_brlcad_root [bu_brlcad_dir "bin"] ] + set binpath [bu_dir bin] set input_ext [file extension $input_file] set input_root [file rootname [file tail $input_file]] @@ -60,19 +60,20 @@ proc geom_load {input_file gui_feedback} { if {[string compare $gui_feedback "1"] == 0} { ::run_conversion_config $input_file $log_file } else { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] 3dm-g$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] 3dm-g$::exe_ext] \ -r \ -c \ -o $output_file \ $input_file] - catch {eval exec $cmd} _conv_log + #catch {eval exec $cmd} _conv_log + eval exec $cmd } } ".asc" { if {[string compare $gui_feedback "1"] == 0} { ::run_conversion_config $input_file $log_file } else { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] asc2g$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] asc2g$::exe_ext] \ $input_file \ $output_file] catch {eval exec $cmd} _conv_log @@ -82,7 +83,7 @@ proc geom_load {input_file gui_feedback} { if {[string compare $gui_feedback "1"] == 0} { ::run_conversion_config $input_file $log_file } else { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] fast4-g$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] fast4-g$::exe_ext] \ -d \ $input_file \ $output_file] @@ -93,7 +94,7 @@ proc geom_load {input_file gui_feedback} { if {[string compare $gui_feedback "1"] == 0} { ::run_conversion_config $input_file $log_file } else { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] fast4-g$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] fast4-g$::exe_ext] \ -d \ $input_file \ $output_file] @@ -104,7 +105,7 @@ proc geom_load {input_file gui_feedback} { if {[string compare $gui_feedback "1"] == 0} { ::run_conversion_config $input_file $log_file } else { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] fast4-g$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] fast4-g$::exe_ext] \ -d \ $input_file \ $output_file] @@ -115,7 +116,7 @@ proc geom_load {input_file gui_feedback} { if {[string compare $gui_feedback "1"] == 0} { ::run_conversion_config $input_file $log_file } else { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] fast4-g$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] fast4-g$::exe_ext] \ -d \ $input_file \ $output_file] @@ -127,7 +128,7 @@ proc geom_load {input_file gui_feedback} { if {[string compare $gui_feedback "1"] == 0} { ::run_conversion_config $input_file $log_file } else { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] stl-g$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] stl-g$::exe_ext] \ $input_file \ $output_file] catch {eval exec $cmd} _conv_log @@ -137,7 +138,7 @@ proc geom_load {input_file gui_feedback} { if {[string compare $gui_feedback "1"] == 0} { ::run_conversion_config $input_file $log_file } else { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] step-g$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] step-g$::exe_ext] \ -v -o $output_file \ $input_file] @@ -148,7 +149,7 @@ proc geom_load {input_file gui_feedback} { if {[string compare $gui_feedback "1"] == 0} { ::run_conversion_config $input_file $log_file } else { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] step-g$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] step-g$::exe_ext] \ -v -o $output_file \ $input_file] @@ -175,7 +176,7 @@ proc geom_load {input_file gui_feedback} { # and may only want a subset. proc geom_save {input_file output_file db_component} { - set binpath [bu_brlcad_root [bu_brlcad_dir "bin"] ] + set binpath [bu_dir bin] ] set output_filename [file tail $output_file] set output_dir [file dirname $output_file] @@ -199,7 +200,7 @@ proc geom_save {input_file output_file db_component} { switch -- $output_ext { ".obj" { set tops_list [lsort -dictionary [$db_component tops]] - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] g-obj$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] g-obj$::exe_ext] \ -o $output_file \ $input_file] append cmd " " { } @@ -210,7 +211,7 @@ proc geom_save {input_file output_file db_component} { } ".stl" { set tops_list [lsort -dictionary [$db_component tops]] - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] g-stl$::exe_ext]] \ + set cmd [list [file join [bu_dir bin] g-stl$::exe_ext] \ -o $output_file \ $input_file] append cmd " " { } diff --git a/src/tclscripts/lib/Help.tcl b/src/tclscripts/lib/Help.tcl index 15ce4770b9c..746c2d44dc5 100755 --- a/src/tclscripts/lib/Help.tcl +++ b/src/tclscripts/lib/Help.tcl @@ -1,7 +1,7 @@ # H E L P . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Legend.tcl b/src/tclscripts/lib/Legend.tcl index 6eea3d6c186..ceb6eb266fb 100755 --- a/src/tclscripts/lib/Legend.tcl +++ b/src/tclscripts/lib/Legend.tcl @@ -1,7 +1,7 @@ # L E G E N D . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Mged.tcl b/src/tclscripts/lib/Mged.tcl index d4ea1ccfb6a..ff9d0bc158a 100755 --- a/src/tclscripts/lib/Mged.tcl +++ b/src/tclscripts/lib/Mged.tcl @@ -1,7 +1,7 @@ # M G E D . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/ModelAxesControl.tcl b/src/tclscripts/lib/ModelAxesControl.tcl index d54e03577a7..620379dfd2e 100755 --- a/src/tclscripts/lib/ModelAxesControl.tcl +++ b/src/tclscripts/lib/ModelAxesControl.tcl @@ -1,7 +1,7 @@ # M O D E L A X E S C O N T R O L . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/QuadDisplay.tcl b/src/tclscripts/lib/QuadDisplay.tcl index aac2d561729..a6cd4ba3245 100755 --- a/src/tclscripts/lib/QuadDisplay.tcl +++ b/src/tclscripts/lib/QuadDisplay.tcl @@ -1,7 +1,7 @@ # Q U A D D I S P L A Y . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/RtControl.tcl b/src/tclscripts/lib/RtControl.tcl index 2dcf65494b6..57cbb4466ca 100755 --- a/src/tclscripts/lib/RtControl.tcl +++ b/src/tclscripts/lib/RtControl.tcl @@ -1,7 +1,7 @@ # R T C O N T R O L . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/RtImage.tcl b/src/tclscripts/lib/RtImage.tcl index 66fd1d3d1c8..79e184bca36 100644 --- a/src/tclscripts/lib/RtImage.tcl +++ b/src/tclscripts/lib/RtImage.tcl @@ -1,7 +1,7 @@ # R T I M A G E . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -90,7 +90,7 @@ proc rtimage {rtimage_dict} { set tmod [list [file join $dir $pid\_bwmod.bw] ] set tbwpix [list [file join $dir $pid\_bwpix.pix] ] - set binpath [bu_brlcad_root "bin"] + set binpath [bu_dir bin] if {[llength $_color_objects]} { set have_color_objects 1 diff --git a/src/tclscripts/lib/Splash.tcl b/src/tclscripts/lib/Splash.tcl index 58d52a33a2d..2ed78e335de 100755 --- a/src/tclscripts/lib/Splash.tcl +++ b/src/tclscripts/lib/Splash.tcl @@ -1,7 +1,7 @@ # S P L A S H . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/Table.tcl b/src/tclscripts/lib/Table.tcl index 5f26eb3db35..214134faa09 100755 --- a/src/tclscripts/lib/Table.tcl +++ b/src/tclscripts/lib/Table.tcl @@ -1,7 +1,7 @@ # T A B L E . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/TableView.tcl b/src/tclscripts/lib/TableView.tcl index adea9ac7848..4a29727130e 100755 --- a/src/tclscripts/lib/TableView.tcl +++ b/src/tclscripts/lib/TableView.tcl @@ -1,7 +1,7 @@ # T A B L E V I E W . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/TkTable.tcl b/src/tclscripts/lib/TkTable.tcl index 5238cdae9a4..6ec9a477a0f 100644 --- a/src/tclscripts/lib/TkTable.tcl +++ b/src/tclscripts/lib/TkTable.tcl @@ -1,7 +1,7 @@ # T K T A B L E . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/View.tcl b/src/tclscripts/lib/View.tcl index 7fce5c50670..79d946f38d7 100755 --- a/src/tclscripts/lib/View.tcl +++ b/src/tclscripts/lib/View.tcl @@ -1,7 +1,7 @@ # V I E W . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/ViewAxesControl.tcl b/src/tclscripts/lib/ViewAxesControl.tcl index 401b4996fc4..472b2f7acb5 100755 --- a/src/tclscripts/lib/ViewAxesControl.tcl +++ b/src/tclscripts/lib/ViewAxesControl.tcl @@ -1,7 +1,7 @@ # V I E W A X E S C O N T R O L . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/apply_mat.tcl b/src/tclscripts/lib/apply_mat.tcl index bb74f4ad7ab..2bc02ec661a 100644 --- a/src/tclscripts/lib/apply_mat.tcl +++ b/src/tclscripts/lib/apply_mat.tcl @@ -1,7 +1,7 @@ # A P P L Y _ M A T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/cursor.tcl b/src/tclscripts/lib/cursor.tcl index 1e7c51ab239..2480a60447c 100644 --- a/src/tclscripts/lib/cursor.tcl +++ b/src/tclscripts/lib/cursor.tcl @@ -1,7 +1,7 @@ # C U R S O R . T C L # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/gui_conversion.tcl b/src/tclscripts/lib/gui_conversion.tcl index 46261b2c2ce..10260fe8563 100644 --- a/src/tclscripts/lib/gui_conversion.tcl +++ b/src/tclscripts/lib/gui_conversion.tcl @@ -1,7 +1,7 @@ # G U I _ C O N V E R S I O N . T C L # BRL-CAD # -# Copyright (c) 2014-2020 United States Government as represented by +# Copyright (c) 2014-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -144,7 +144,7 @@ proc rhino_options {} { # For 3dm-g, it's options first, then output file, then input file proc ::rhino_build_cmd {} { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] 3dm-g$::exe_ext]]] + set cmd [list [file join [bu_dir bin] 3dm-g$::exe_ext]] if {$::print_debug_info == 1} { append cmd " -d" { } @@ -246,7 +246,7 @@ proc fast4_options {} { } proc ::fast4_build_cmd {} { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] fast4-g$::exe_ext]]] + set cmd [list [file join [bu_dir bin] fast4-g$::exe_ext]] if {$::print_debug_info == 1} { append cmd " -d" { } @@ -361,7 +361,7 @@ proc stl_options {} { # For stl-g, it's options first, then input file, then output file proc ::stl_build_cmd {} { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] stl-g$::exe_ext]]] + set cmd [list [file join [bu_dir bin] stl-g$::exe_ext]] if {$::print_debug_info == 1} { append cmd " -d" { } @@ -504,7 +504,7 @@ proc obj_options {} { # For obj-g, it's options first, then input file, then output file proc ::obj_build_cmd {} { - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] obj-g$::exe_ext]]] + set cmd [list [file join [bu_dir bin] obj-g$::exe_ext]] if {[llength "$::debug_level"] > 0} { append cmd " -d -v $::debug_level" { } } @@ -684,7 +684,7 @@ proc ::conversion_config { } { gui_conversion $::rhino_cmd $::log_file } ".asc" { - set asc_cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] asc2g$::exe_ext]] \ + set asc_cmd [list [file join [bu_dir bin] asc2g$::exe_ext] \ $::input_file \ $::output_file] gui_conversion $asc_cmd $::log_file @@ -730,13 +730,13 @@ proc ::conversion_config { } { gui_conversion $::stl_cmd $::log_file } ".stp" { - set step_cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] step-g$::exe_ext]] \ + set step_cmd [list [file join [bu_dir bin] step-g$::exe_ext] \ -v -o $::output_file \ $::input_file] gui_conversion $step_cmd $::log_file } ".step" { - set step_cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] step-g$::exe_ext]] \ + set step_cmd [list [file join [bu_dir bin] step-g$::exe_ext] \ -v -o $::output_file \ $::input_file] gui_conversion $step_cmd $::log_file diff --git a/src/tclscripts/lib/pattern.tcl b/src/tclscripts/lib/pattern.tcl index 5722d61f74e..80fd01f997c 100644 --- a/src/tclscripts/lib/pattern.tcl +++ b/src/tclscripts/lib/pattern.tcl @@ -1,7 +1,7 @@ # P A T T E R N . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lib/pattern_gui.tcl b/src/tclscripts/lib/pattern_gui.tcl index 1f353cc2333..cef8fce4177 100644 --- a/src/tclscripts/lib/pattern_gui.tcl +++ b/src/tclscripts/lib/pattern_gui.tcl @@ -1,7 +1,7 @@ # P A T T E R N _ G U I . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/libtclcad.tcl b/src/tclscripts/libtclcad.tcl index 854f6494860..effbde109aa 100644 --- a/src/tclscripts/libtclcad.tcl +++ b/src/tclscripts/libtclcad.tcl @@ -1,7 +1,7 @@ # L I B D M . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/lod/LODDialog.tcl b/src/tclscripts/lod/LODDialog.tcl index 4c3dcbc013d..182d57f8bad 100644 --- a/src/tclscripts/lod/LODDialog.tcl +++ b/src/tclscripts/lod/LODDialog.tcl @@ -1,7 +1,7 @@ # L O D D I A L O G . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/man_browser.tcl b/src/tclscripts/man_browser.tcl index 1e47302c669..10e7f23c171 100755 --- a/src/tclscripts/man_browser.tcl +++ b/src/tclscripts/man_browser.tcl @@ -1,7 +1,7 @@ # M A N _ B R O W S E R . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -150,7 +150,7 @@ package require cadwidgets::Accordian 1.0 # Path to HTML man page directories if {![info exists path] || ![file isdirectory $path]} { - set path [file join [bu_brlcad_root "share/doc/html"]] + set path [file join [bu_dir doc] html] } configure -title "BRL-CAD Manual Page Browser" diff --git a/src/tclscripts/menu_override.tcl b/src/tclscripts/menu_override.tcl index 816f3a7b7b5..5f315f19464 100755 --- a/src/tclscripts/menu_override.tcl +++ b/src/tclscripts/menu_override.tcl @@ -1,7 +1,7 @@ # M E N U _ O V E R R I D E . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/accel.tcl b/src/tclscripts/mged/accel.tcl index 49bde68837f..467ddb494a6 100755 --- a/src/tclscripts/mged/accel.tcl +++ b/src/tclscripts/mged/accel.tcl @@ -1,7 +1,7 @@ # A C C E L . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/adc.tcl b/src/tclscripts/mged/adc.tcl index 094722d8ef0..1d4aae13881 100755 --- a/src/tclscripts/mged/adc.tcl +++ b/src/tclscripts/mged/adc.tcl @@ -1,7 +1,7 @@ # A D C . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/apply.tcl b/src/tclscripts/mged/apply.tcl index 937946d740c..e4237156763 100755 --- a/src/tclscripts/mged/apply.tcl +++ b/src/tclscripts/mged/apply.tcl @@ -1,7 +1,7 @@ # A P P L Y . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/asc2g.tcl b/src/tclscripts/mged/asc2g.tcl index d11f5117dd5..a5012c3ccc7 100755 --- a/src/tclscripts/mged/asc2g.tcl +++ b/src/tclscripts/mged/asc2g.tcl @@ -1,7 +1,7 @@ # A S C 2 G . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -66,7 +66,7 @@ current database." } {} } OK Cancel] } # convert ascii database to binary - set asc2g [file join [bu_brlcad_root "bin"] asc2g] + set asc2g [file join [bu_dir bin] asc2g] catch {exec $asc2g $filename $db_name} msg # concat the binary diff --git a/src/tclscripts/mged/attr_edit.tcl b/src/tclscripts/mged/attr_edit.tcl index 2430cb6fed0..ae37753a612 100755 --- a/src/tclscripts/mged/attr_edit.tcl +++ b/src/tclscripts/mged/attr_edit.tcl @@ -1,7 +1,7 @@ # A T T R _ E D I T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/bindings.tcl b/src/tclscripts/mged/bindings.tcl index e27f2233fb6..44cc86b91d0 100755 --- a/src/tclscripts/mged/bindings.tcl +++ b/src/tclscripts/mged/bindings.tcl @@ -1,7 +1,7 @@ # B I N D I N G S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -27,6 +27,7 @@ proc mged_bind_dm { w } { global forwarding_key global tcl_platform + # KeySym for --> 0xffc6 --> 65478 set hot_key 65478 #make this the current display manager @@ -101,37 +102,60 @@ if ![info exists mged_default(dm_key_bindings)] { } proc default_key_bindings { w } { - bind $w a "winset $w; adc; break" - bind $w c "open_cmd_win id_0" - bind $w e "winset $w; rset ax edit_draw !;\ - update_gui $w edit_draw \[rset ax edit_draw\]; break" - bind $w m "winset $w; rset ax model_draw !;\ - update_gui $w model_draw \[rset ax model_draw\]; break" - bind $w v "winset $w; rset ax view_draw !;\ - update_gui $w view_draw \[rset ax view_draw\]; break" - bind $w i "winset $w; aip f; break" - bind $w I "winset $w; aip b; break" - bind $w p "winset $w; M 1 0 0; break" + # common view shortcuts bind $w 2 "winset $w; ae 35 -25; break" bind $w 3 "winset $w; press 35,25; break" bind $w 4 "winset $w; press 45,45; break" bind $w 5 "winset $w; ae 145 25; break" bind $w 6 "winset $w; ae 215 25; break" bind $w 7 "winset $w; ae 325 25; break" - bind $w f "winset $w; press front; break" - bind $w t "winset $w; press top; break" + + # default key shortcuts + bind $w a "winset $w; adc; break" bind $w b "winset $w; press bottom; break" + bind $w c "open_cmd_win id_0" + bind $w e "winset $w; rset ax edit_draw !; update_gui $w edit_draw \[rset ax edit_draw\]; break" + bind $w f "winset $w; press front; break" + bind $w i "winset $w; aip f; break" bind $w l "winset $w; press left; break" - bind $w n "winset $w; puts \[nirt -b\]; break" - bind $w r "winset $w; press right; break" - bind $w R "winset $w; press rear; break" - bind $w s "winset $w; press sill; break" + bind $w m "winset $w; rset ax model_draw !; update_gui $w model_draw \[rset ax model_draw\]; break" bind $w o "winset $w; press oill; break" + bind $w p "winset $w; M 1 0 0; break" bind $w q "winset $w; press reject; break" + bind $w r "winset $w; press right; break" + bind $w s "winset $w; press sill; break" + bind $w t "winset $w; press top; break" + bind $w u "winset $w; svb; break" + bind $w v "winset $w; rset ax view_draw !; update_gui $w view_draw \[rset ax view_draw\]; break" + + # default shift+key shortcuts bind $w A "winset $w; press accept; break" + bind $w I "winset $w; aip b; break" + bind $w N "winset $w; puts \[nirt -b\]; break" bind $w P "winset $w; catch {sed_apply}; break" + bind $w R "winset $w; press rear; break" bind $w S "winset $w; catch {sed_reset}; break" - bind $w u "winset $w; svb; break" + + # default control+key shortcuts + bind $w "winset $w; _mged_view_ring next; break" + bind $w "winset $w; _mged_view_ring prev; break" + bind $w "winset $w; _mged_view_ring toggle; break" + + # shift grips navigation + bind $w "winset $w; knob -i aY \$mged_default(tran_factor); break" + bind $w "winset $w; knob -i az \$mged_default(rot_factor); break" + bind $w "winset $w; knob -i az -\$mged_default(rot_factor); break" + bind $w "winset $w; knob -i aY -\$mged_default(tran_factor); break" + bind $w "winset $w; knob -i ax \$mged_default(rot_factor); break" + bind $w "winset $w; knob -i ay -\$mged_default(rot_factor); break" + bind $w "winset $w; knob -i ay \$mged_default(rot_factor); break" + bind $w "winset $w; knob -i ax -\$mged_default(rot_factor); break" + bind $w "winset $w; knob -i aZ -\$mged_default(tran_factor); break" + bind $w "winset $w; knob -i aX \$mged_default(tran_factor); break" + bind $w "winset $w; knob -i aX -\$mged_default(tran_factor); break" + bind $w "winset $w; knob -i aZ \$mged_default(tran_factor); break" + + # function keys (settings) bind $w "winset $w; dm set depthcue !; update_gui $w depthcue \[dm set depthcue\]; break" bind $w "winset $w; dm set zclip !; update_gui $w zclip \[dm set zclip\]; break" bind $w "winset $w; set perspective_mode !; update_gui $w perspective_mode \$perspective_mode; break" @@ -140,27 +164,10 @@ proc default_key_bindings { w } { bind $w "winset $w; set toggle_perspective !; break" bind $w "winset $w; set faceplate !; update_gui $w faceplate \$faceplate; break" bind $w "winset $w; set orig_gui !; update_gui $w orig_gui \$orig_gui; break" - # KeySym for --> 0xffc6 --> 65478 bind $w "toggle_forward_key_bindings $w; update_gui $w forward_keys \$forwarding_key($w); break" bind $w "winset $w; knob zero; break" - bind $w "winset $w; knob -i ay -\$mged_default(rot_factor); break" - bind $w "winset $w; knob -i ay \$mged_default(rot_factor); break" - bind $w "winset $w; knob -i ax \$mged_default(rot_factor); break" - bind $w "winset $w; knob -i ax -\$mged_default(rot_factor); break" - bind $w "winset $w; knob -i aX \$mged_default(tran_factor); break" - bind $w "winset $w; knob -i aX -\$mged_default(tran_factor); break" - bind $w "winset $w; knob -i aZ -\$mged_default(tran_factor); break" - bind $w "winset $w; knob -i aZ \$mged_default(tran_factor); break" - bind $w "winset $w; knob -i az \$mged_default(rot_factor); break" - bind $w "winset $w; knob -i az -\$mged_default(rot_factor); break" - bind $w "winset $w; knob -i aY \$mged_default(tran_factor); break" - bind $w "winset $w; knob -i aY -\$mged_default(tran_factor); break" - - bind $w "winset $w; _mged_view_ring next; break" - bind $w "winset $w; _mged_view_ring prev; break" - bind $w "winset $w; _mged_view_ring toggle; break" - + # interrupt bind $w "winset $w; reset_everything $w; break" # Throw away other key events @@ -232,6 +239,7 @@ proc forward_key_bindings { w } { bind $w t {} bind $w b {} bind $w l {} + bind $w N {} bind $w r {} bind $w R {} bind $w s {} diff --git a/src/tclscripts/mged/bot_face_select.tcl b/src/tclscripts/mged/bot_face_select.tcl index ca783ac19f8..1abca4a2421 100755 --- a/src/tclscripts/mged/bot_face_select.tcl +++ b/src/tclscripts/mged/bot_face_select.tcl @@ -1,7 +1,7 @@ # B O T _ F A C E _ S E L E C T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/bot_vertex_fuse_all.tcl b/src/tclscripts/mged/bot_vertex_fuse_all.tcl index 20f795a55cc..da64137f002 100644 --- a/src/tclscripts/mged/bot_vertex_fuse_all.tcl +++ b/src/tclscripts/mged/bot_vertex_fuse_all.tcl @@ -1,7 +1,7 @@ # B O T _ V E R T E X _ F U S E _ A L L . T C L # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/botedit.tcl b/src/tclscripts/mged/botedit.tcl index 8d5f0ce8cd6..b5bce22dbee 100644 --- a/src/tclscripts/mged/botedit.tcl +++ b/src/tclscripts/mged/botedit.tcl @@ -1,7 +1,7 @@ # B O T E D I T . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/bots.tcl b/src/tclscripts/mged/bots.tcl index 33224f8a4e6..3e565370167 100644 --- a/src/tclscripts/mged/bots.tcl +++ b/src/tclscripts/mged/bots.tcl @@ -1,7 +1,7 @@ # B O T S . T C L # BRL-CAD # -# Copyright (c) 2009-2020 United States Government as represented by +# Copyright (c) 2009-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/build_region.tcl b/src/tclscripts/mged/build_region.tcl index a57f294b9d5..cb876f633e7 100755 --- a/src/tclscripts/mged/build_region.tcl +++ b/src/tclscripts/mged/build_region.tcl @@ -1,7 +1,7 @@ # B U I L D _ R E G I O N . T C L # BRL-CAD # -# Copyright (c) 2000-2020 United States Government as represented by +# Copyright (c) 2000-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/calipers.tcl b/src/tclscripts/mged/calipers.tcl index 0555518f380..9c149706523 100755 --- a/src/tclscripts/mged/calipers.tcl +++ b/src/tclscripts/mged/calipers.tcl @@ -1,7 +1,7 @@ # C A L I P E R S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/callbacks.tcl b/src/tclscripts/mged/callbacks.tcl index ac12996e0eb..cc93179dc7e 100755 --- a/src/tclscripts/mged/callbacks.tcl +++ b/src/tclscripts/mged/callbacks.tcl @@ -1,7 +1,7 @@ # C A L L B A C K S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/clear.tcl b/src/tclscripts/mged/clear.tcl index a607abf38da..f2c631353ff 100755 --- a/src/tclscripts/mged/clear.tcl +++ b/src/tclscripts/mged/clear.tcl @@ -2,7 +2,7 @@ # C L E A R . T C L # BRL-CAD # -# Copyright (c) 2009-2020 United States Government as represented by +# Copyright (c) 2009-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/collaborate.tcl b/src/tclscripts/mged/collaborate.tcl index c10e3be1226..7b0132585da 100755 --- a/src/tclscripts/mged/collaborate.tcl +++ b/src/tclscripts/mged/collaborate.tcl @@ -1,7 +1,7 @@ # C O L L A B O R A T E . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/color.tcl b/src/tclscripts/mged/color.tcl index 8deb5c39714..cd76cf7f7d3 100755 --- a/src/tclscripts/mged/color.tcl +++ b/src/tclscripts/mged/color.tcl @@ -1,7 +1,7 @@ # C O L O R . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/color_scheme.tcl b/src/tclscripts/mged/color_scheme.tcl index 79298d2d576..bed58cee4cc 100755 --- a/src/tclscripts/mged/color_scheme.tcl +++ b/src/tclscripts/mged/color_scheme.tcl @@ -1,7 +1,7 @@ # C O L O R _ S C H E M E . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/comb.tcl b/src/tclscripts/mged/comb.tcl index 56bf6580710..775dc968c1f 100755 --- a/src/tclscripts/mged/comb.tcl +++ b/src/tclscripts/mged/comb.tcl @@ -1,7 +1,7 @@ # C O M B . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/combmenu.tcl b/src/tclscripts/mged/combmenu.tcl index 6a8413313cb..320f9f6cbd5 100755 --- a/src/tclscripts/mged/combmenu.tcl +++ b/src/tclscripts/mged/combmenu.tcl @@ -1,7 +1,7 @@ # C O M B M E N U . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/cycle.tcl b/src/tclscripts/mged/cycle.tcl index 72a9127d851..5819c969d3c 100755 --- a/src/tclscripts/mged/cycle.tcl +++ b/src/tclscripts/mged/cycle.tcl @@ -1,7 +1,7 @@ # C Y C L E . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/dbfindtree.tcl b/src/tclscripts/mged/dbfindtree.tcl index 6ae6cbd5130..ea6cd0f795b 100755 --- a/src/tclscripts/mged/dbfindtree.tcl +++ b/src/tclscripts/mged/dbfindtree.tcl @@ -1,7 +1,7 @@ # D B F I N D T R E E . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/dbupgrade.tcl b/src/tclscripts/mged/dbupgrade.tcl index bf26004c31c..56030896924 100755 --- a/src/tclscripts/mged/dbupgrade.tcl +++ b/src/tclscripts/mged/dbupgrade.tcl @@ -1,7 +1,7 @@ # D B U P G R A D E . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -286,7 +286,7 @@ proc dbupgrade {args} { } # dbupgrade converts the original database to the current db format - set dbupgrade_cmd [file join [bu_brlcad_root "bin"] dbupgrade] + set dbupgrade_cmd [file join [bu_dir bin] dbupgrade] catch {exec "$dbupgrade_cmd" "$db_orig" "$dbname"} ret if {![file exists "$dbname"]} { diff --git a/src/tclscripts/mged/e_id.tcl b/src/tclscripts/mged/e_id.tcl index 62d7bc96a72..f089797b168 100755 --- a/src/tclscripts/mged/e_id.tcl +++ b/src/tclscripts/mged/e_id.tcl @@ -1,7 +1,7 @@ # E _ I D . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/edit_menu.tcl b/src/tclscripts/mged/edit_menu.tcl index 2786c8611c2..664bd5ff831 100755 --- a/src/tclscripts/mged/edit_menu.tcl +++ b/src/tclscripts/mged/edit_menu.tcl @@ -1,7 +1,7 @@ # E D I T _ M E N U . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/edit_solid.tcl b/src/tclscripts/mged/edit_solid.tcl index c7f08f9c1f3..9c7c00d2349 100755 --- a/src/tclscripts/mged/edit_solid.tcl +++ b/src/tclscripts/mged/edit_solid.tcl @@ -1,7 +1,7 @@ # E D I T _ S O L I D . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/edit_solid_int.tcl b/src/tclscripts/mged/edit_solid_int.tcl index ab84f2870d1..64e64647c77 100755 --- a/src/tclscripts/mged/edit_solid_int.tcl +++ b/src/tclscripts/mged/edit_solid_int.tcl @@ -1,7 +1,7 @@ # E D I T _ S O L I D _ I N T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/editmenu.tcl b/src/tclscripts/mged/editmenu.tcl index 3ce9fc055c7..0045ceb8a68 100755 --- a/src/tclscripts/mged/editmenu.tcl +++ b/src/tclscripts/mged/editmenu.tcl @@ -1,7 +1,7 @@ # E D I T M E N U . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/editobj.tcl b/src/tclscripts/mged/editobj.tcl index fef97661796..1ae314e681e 100755 --- a/src/tclscripts/mged/editobj.tcl +++ b/src/tclscripts/mged/editobj.tcl @@ -1,7 +1,7 @@ # E D I T O B J . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/eobjmenu.tcl b/src/tclscripts/mged/eobjmenu.tcl index fca1ff11d54..4fe7bda41d3 100755 --- a/src/tclscripts/mged/eobjmenu.tcl +++ b/src/tclscripts/mged/eobjmenu.tcl @@ -1,7 +1,7 @@ # E O B J M E N U . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/expand_comb.tcl b/src/tclscripts/mged/expand_comb.tcl index d6fe82f8de6..6dcac8a8c5b 100755 --- a/src/tclscripts/mged/expand_comb.tcl +++ b/src/tclscripts/mged/expand_comb.tcl @@ -1,7 +1,7 @@ # E X P A N D _ C O M B . T C L # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/extract.tcl b/src/tclscripts/mged/extract.tcl index 699d8e7779e..3afb1942ebe 100755 --- a/src/tclscripts/mged/extract.tcl +++ b/src/tclscripts/mged/extract.tcl @@ -1,7 +1,7 @@ # E X T R A C T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/facetize_all_regions.tcl b/src/tclscripts/mged/facetize_all_regions.tcl index c1c360db4c2..eccb4bb4b88 100755 --- a/src/tclscripts/mged/facetize_all_regions.tcl +++ b/src/tclscripts/mged/facetize_all_regions.tcl @@ -1,7 +1,7 @@ # F A C E T I Z E _ A L L _ R E G I O N S . T C L # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/font.tcl b/src/tclscripts/mged/font.tcl index 8761a122ea2..5b6890341c9 100755 --- a/src/tclscripts/mged/font.tcl +++ b/src/tclscripts/mged/font.tcl @@ -1,7 +1,7 @@ # F O N T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/g2asc.tcl b/src/tclscripts/mged/g2asc.tcl index ece0216da4a..a47b8f1b018 100755 --- a/src/tclscripts/mged/g2asc.tcl +++ b/src/tclscripts/mged/g2asc.tcl @@ -1,7 +1,7 @@ # G 2 A S C . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -50,7 +50,7 @@ proc init_g2asc { id } { set mged_gui(databaseDir) [ file dirname $filename ] # convert binary database to ascii - set g2asc [bu_brlcad_root "bin/g2asc"] + set g2asc [file join [bu_dir bin] g2asc] catch {exec $g2asc $db_name $filename} msg } } diff --git a/src/tclscripts/mged/garbage_collect.tcl b/src/tclscripts/mged/garbage_collect.tcl index 48cf44305ca..28634ce2fb4 100755 --- a/src/tclscripts/mged/garbage_collect.tcl +++ b/src/tclscripts/mged/garbage_collect.tcl @@ -1,7 +1,7 @@ # G A R B A G E _ C O L L E C T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/get_regions.tcl b/src/tclscripts/mged/get_regions.tcl index 1cb9db00b0f..459eb6962c8 100644 --- a/src/tclscripts/mged/get_regions.tcl +++ b/src/tclscripts/mged/get_regions.tcl @@ -1,7 +1,7 @@ # G E T _ R E G I O N S . T C L # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/grid.tcl b/src/tclscripts/mged/grid.tcl index 2008787ba75..8d99e9ba957 100755 --- a/src/tclscripts/mged/grid.tcl +++ b/src/tclscripts/mged/grid.tcl @@ -1,7 +1,7 @@ # G R I D . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/grouper.tcl b/src/tclscripts/mged/grouper.tcl index 468797df6df..f1d83aa6b39 100644 --- a/src/tclscripts/mged/grouper.tcl +++ b/src/tclscripts/mged/grouper.tcl @@ -1,7 +1,7 @@ # G R O U P E R . T C L # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/help.tcl b/src/tclscripts/mged/help.tcl index 574bab5a891..c276ea5def6 100755 --- a/src/tclscripts/mged/help.tcl +++ b/src/tclscripts/mged/help.tcl @@ -1,7 +1,7 @@ # H E L P . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -25,7 +25,7 @@ #============================================================================== # This command causes helplib.tcl to get read in. -source [file join [bu_brlcad_root "share/tclscripts"] "helplib.tcl"] +source [file join [bu_dir data] "tclscripts" "helplib.tcl"] helplib set mged_help_data(?) {{} {summary of available mged commands}} diff --git a/src/tclscripts/mged/helpdevel.tcl b/src/tclscripts/mged/helpdevel.tcl index ca8b9c60cd2..39d94633c87 100755 --- a/src/tclscripts/mged/helpdevel.tcl +++ b/src/tclscripts/mged/helpdevel.tcl @@ -1,7 +1,7 @@ # H E L P D E V E L . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/icreate.tcl b/src/tclscripts/mged/icreate.tcl index 140ac4ae8a3..391981f0037 100755 --- a/src/tclscripts/mged/icreate.tcl +++ b/src/tclscripts/mged/icreate.tcl @@ -1,7 +1,7 @@ # I C R E A T E . T C L # BRL-CAD # -# Copyright (c) 1995-2020 United States Government as represented by +# Copyright (c) 1995-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/illum.tcl b/src/tclscripts/mged/illum.tcl index c308a264011..f554cc553ab 100755 --- a/src/tclscripts/mged/illum.tcl +++ b/src/tclscripts/mged/illum.tcl @@ -1,7 +1,7 @@ # I L L U M . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/lc.tcl b/src/tclscripts/mged/lc.tcl index f2b3b181920..4c8003ee95a 100644 --- a/src/tclscripts/mged/lc.tcl +++ b/src/tclscripts/mged/lc.tcl @@ -1,7 +1,7 @@ # L C . T C L # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/lgt_mat.tcl b/src/tclscripts/mged/lgt_mat.tcl index c0a1409dba9..e63f6672a0b 100755 --- a/src/tclscripts/mged/lgt_mat.tcl +++ b/src/tclscripts/mged/lgt_mat.tcl @@ -1,7 +1,7 @@ # L G T _ M A T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/list.tcl b/src/tclscripts/mged/list.tcl index 3cfb3681563..55681974a1f 100755 --- a/src/tclscripts/mged/list.tcl +++ b/src/tclscripts/mged/list.tcl @@ -1,7 +1,7 @@ # L I S T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/lodconfig.tcl b/src/tclscripts/mged/lodconfig.tcl index 3e452643f7e..5c48f10a55a 100644 --- a/src/tclscripts/mged/lodconfig.tcl +++ b/src/tclscripts/mged/lodconfig.tcl @@ -1,7 +1,7 @@ # L O D C O N F I G . T C L # BRL-CAD # -# Copyright (c) 2013-2020 United States Government as represented by +# Copyright (c) 2013-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/make_solid.tcl b/src/tclscripts/mged/make_solid.tcl index 10f5b5f6a3d..b455bdd0e71 100755 --- a/src/tclscripts/mged/make_solid.tcl +++ b/src/tclscripts/mged/make_solid.tcl @@ -1,7 +1,7 @@ # M A K E _ S O L I D . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/man.tcl b/src/tclscripts/mged/man.tcl index e8eeb7a0e8d..15a0bdb24a7 100755 --- a/src/tclscripts/mged/man.tcl +++ b/src/tclscripts/mged/man.tcl @@ -1,7 +1,7 @@ # M A N . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -44,7 +44,7 @@ proc man {{cmdname {}}} { if {$::tcl_platform(platform) == "windows"} { set exe_ext ".exe" } - set cmd [list [bu_brlcad_root [file join [bu_brlcad_dir bin] brlman$exe_ext]]] + set cmd [list [file join [bu_dir bin] brlman$exe_ext]] exec $cmd $cmdname } } diff --git a/src/tclscripts/mged/menu.tcl b/src/tclscripts/mged/menu.tcl index 94555abbce6..3a8f05eac40 100755 --- a/src/tclscripts/mged/menu.tcl +++ b/src/tclscripts/mged/menu.tcl @@ -1,7 +1,7 @@ # M E N U . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/mged.tcl b/src/tclscripts/mged/mged.tcl index 947b459438f..a2d67676e45 100755 --- a/src/tclscripts/mged/mged.tcl +++ b/src/tclscripts/mged/mged.tcl @@ -1,7 +1,7 @@ # M G E D . T C L # BRL-CAD # -# Copyright (c) 1995-2020 United States Government as represented by +# Copyright (c) 1995-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -48,12 +48,12 @@ if { [info exists tk_strictMotif] == 0 } { # MGED html manual directory search order precedence should be: # MGED_HTML_DIR -# bu_brlcad_root/share/html/manuals/mged +# [bu_dir doc]/html/manuals/mged if ![info exists mged_default(html_dir)] { - set mged_default(html_dir) [file normalize [file join [bu_brlcad_root "share/html"] manuals mged]] + set mged_default(html_dir) [file normalize [file join [bu_dir doc] html manuals mged]] if {![file exists $mged_default(html_dir)]} { - set mged_default(html_dir) [file normalize [file join [bu_brlcad_root "share/doc"] html manuals mged]] + set mged_default(html_dir) [file normalize [file join [bu_dir doc] html manuals mged]] } } diff --git a/src/tclscripts/mged/mgedrc.tcl b/src/tclscripts/mged/mgedrc.tcl index edd75732ce0..7357cd4e6af 100755 --- a/src/tclscripts/mged/mgedrc.tcl +++ b/src/tclscripts/mged/mgedrc.tcl @@ -1,7 +1,7 @@ # M G E D R C . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/mike.tcl b/src/tclscripts/mged/mike.tcl index 6dbe635380e..426213cfdd2 100755 --- a/src/tclscripts/mged/mike.tcl +++ b/src/tclscripts/mged/mike.tcl @@ -1,7 +1,7 @@ # M I K E . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -32,7 +32,7 @@ proc mike_dedication {id} { toplevel $top -screen $mged_gui($id,screen) set row 0 - set mike_file [file join [bu_brlcad_root "share/tclscripts"] mged mike-tux.ppm] + set mike_file [file join [bu_dir data] tclscripts mged mike-tux.ppm] if { [file exists $mike_file] } { set mike [image create photo -file $mike_file] label $top.mike_im -image $mike -relief sunken @@ -45,7 +45,7 @@ proc mike_dedication {id} { # grid rowconfigure $top $row -weight 1 incr row - set dedi_file [file join [bu_brlcad_root "share/tclscripts"] mged mike-dedication.txt] + set dedi_file [file join [bu_dir data] tclscripts mged mike-dedication.txt] if { [file exists $dedi_file] } { if { [catch {open $dedi_file "r"} fp] == 0 } { set dedi_text [read -nonewline $fp] diff --git a/src/tclscripts/mged/mouse.tcl b/src/tclscripts/mged/mouse.tcl index 2e79959e247..da7cf19bb88 100755 --- a/src/tclscripts/mged/mouse.tcl +++ b/src/tclscripts/mged/mouse.tcl @@ -1,7 +1,7 @@ # M O U S E . T C L # BRL-CAD # -# Copyright (c) 1995-2020 United States Government as represented by +# Copyright (c) 1995-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/mview.tcl b/src/tclscripts/mged/mview.tcl index 62083de4838..57ab03dc593 100755 --- a/src/tclscripts/mged/mview.tcl +++ b/src/tclscripts/mged/mview.tcl @@ -1,7 +1,7 @@ # M V I E W . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -246,6 +246,11 @@ proc releasemv { id } { catch { release $mged_gui($id,top).ur } catch { release $mged_gui($id,top).ll } catch { release $mged_gui($id,top).lr } + + # If all the windows are gone, we're closing the application + if { !$mged_gui($id,show_cmd) && !$mged_gui($id,show_dm)} { + exit + } } proc closemv { id } { diff --git a/src/tclscripts/mged/openw.tcl b/src/tclscripts/mged/openw.tcl index 7755429251c..399e26d8951 100755 --- a/src/tclscripts/mged/openw.tcl +++ b/src/tclscripts/mged/openw.tcl @@ -1,7 +1,7 @@ # O P E N W . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -52,9 +52,9 @@ if {![info exists mged_default(tran_factor)]} { set mged_default(tran_factor) 0.01 } -set mged_default(html_dir) [file normalize [file join [bu_brlcad_root "share/html"] manuals mged]] +set mged_default(html_dir) [file normalize [file join [bu_dir data] html manuals mged]] if {![file exists $mged_default(html_dir)]} { - set mged_default(html_dir) [file normalize [file join [bu_brlcad_root "share/doc"] html manuals mged]] + set mged_default(html_dir) [file normalize [file join [bu_dir doc] html manuals mged]] } if {[info exists env(MGED_HTML_DIR)]} { @@ -504,7 +504,6 @@ proc gui { args } { .$id.menubar add cascade -label "Edit" -underline 0 -menu .$id.menubar.edit .$id.menubar add cascade -label "Create" -underline 0 -menu .$id.menubar.create .$id.menubar add cascade -label "View" -underline 0 -menu .$id.menubar.view - .$id.menubar add cascade -label "ViewRing" -underline 4 -menu .$id.menubar.viewring .$id.menubar add cascade -label "Settings" -underline 0 -menu .$id.menubar.settings .$id.menubar add cascade -label "Modes" -underline 0 -menu .$id.menubar.modes .$id.menubar add cascade -label "Misc" -underline 1 -menu .$id.menubar.misc @@ -959,47 +958,6 @@ hoc_register_menu_data "Create" "$ptype..." "Make a $ptype" $ksl { accelerator "0" } { see_also "knob, press" } } - menu .$id.menubar.viewring -title "ViewRing" -tearoff $mged_default(tearoff_menus) - .$id.menubar.viewring add command -label "Add View" -underline 0 -command "view_ring_add $id" - hoc_register_menu_data "ViewRing" "Add View" "Add View"\ - { { synopsis "Add a view to the view ring." } - { description "A view ring is a mechanism for managing multiple - views within a single pane or display manager. Each pane - has its own view ring where any number of views can be stored. - The stored views can be removed or traversed." } } - .$id.menubar.viewring add cascade -label "Select View" -underline 0 -menu .$id.menubar.viewring.select - .$id.menubar.viewring add cascade -label "Delete View" -underline 0 -menu .$id.menubar.viewring.delete - .$id.menubar.viewring add command -label "Next View" -underline 0 -command "view_ring_next $id" - hoc_register_menu_data "ViewRing" "Next View" "Next View"\ - { { synopsis "Go to the next view on the view ring." } - { accelerator "Control-n" } } - .$id.menubar.viewring add command -label "Prev View" -underline 0 -command "view_ring_prev $id" - hoc_register_menu_data "ViewRing" "Prev View" "Previous View"\ - { { synopsis "Go to the previous view on the view ring." } - { accelerator "Control-p" } } - .$id.menubar.viewring add command -label "Last View" -underline 0 -command "view_ring_toggle $id" - hoc_register_menu_data "ViewRing" "Last View" "Last View"\ - { { synopsis "Go to the last view. This can be used to toggle - between two views." } - { accelerator "Control-t" } } - - #menu .$id.menubar.viewring.select -title "Select View" -tearoff $mged_default(tearoff_menus)\ - -postcommand "update_view_ring_labels $id" - menu .$id.menubar.viewring.select -title "Select View" -tearoff $mged_default(tearoff_menus) \ - -postcommand "view_ring_save_curr $id" - - update_view_ring_entries $id s - - set mged_gui($id,views) "" - set view_ring($id) 0 - set view_ring($id,curr) 0 - set view_ring($id,prev) 0 - #menu .$id.menubar.viewring.delete -title "Delete View" -tearoff $mged_default(tearoff_menus)\ - -postcommand "update_view_ring_labels $id" - menu .$id.menubar.viewring.delete -title "Delete View" -tearoff $mged_default(tearoff_menus) - - update_view_ring_entries $id d - menu .$id.menubar.settings -title "Settings" -tearoff $mged_default(tearoff_menus) .$id.menubar.settings add cascade -label "Mouse Behavior" -underline 0\ -menu .$id.menubar.settings.mouse_behavior @@ -1030,19 +988,6 @@ hoc_register_menu_data "Create" "$ptype..." "Make a $ptype" $ksl hoc_register_menu_data "Apply To" "Active Pane" "Active Pane"\ { { summary "Set the \"Apply To\" mode such that the user's interaction with the GUI is applied to the active pane." } } - .$id.menubar.settings.applyTo add radiobutton -value 1 -variable mged_gui($id,apply_to)\ - -label "Local Panes" -underline 0 - hoc_register_menu_data "Apply To" "Local Panes" "Local Panes"\ - { { summary "Set the \"Apply To\" mode such that the user's - interaction with the GUI is applied to all panes - local to this instance of the GUI." } } - .$id.menubar.settings.applyTo add radiobutton -value 2 -variable mged_gui($id,apply_to)\ - -label "Listed Panes" -underline 1 - hoc_register_menu_data "Apply To" "Listed Panes" "Listed Panes"\ - { { summary "Set the \"Apply To\" mode such that the user's - interaction with the GUI is applied to all panes - listed in the Tcl variable mged_gui(id,apply_list) - (Note - id refers to the GUI's id)." } } .$id.menubar.settings.applyTo add radiobutton -value 3 -variable mged_gui($id,apply_to)\ -label "All Panes" -underline 4 hoc_register_menu_data "Apply To" "All Panes" "All Panes"\ @@ -1132,20 +1077,6 @@ hoc_register_menu_data "Create" "$ptype..." "Make a $ptype" $ksl \t\t3\t\tZoom in by a factor of 2" } { see_also "rset, vars" } } .$id.menubar.settings.mouse_behavior add separator - .$id.menubar.settings.mouse_behavior add radiobutton -value r -variable mged_gui($id,mouse_behavior)\ - -label "Sweep Raytrace-Rectangle" -underline 6\ - -command "set_mouse_behavior $id" - hoc_register_menu_data "Mouse Behavior" "Sweep Raytrace-Rectangle" "Sweep Raytrace-Rectangle"\ - { { synopsis "Enter sweep raytrace-rectangle mode." } - { description "If the framebuffer is active, the rectangular area as - specified by the user is raytraced. The rectangular area is - also painted with the current contents of the framebuffer. Otherwise, - only the rectangle is drawn.\n - \tMouse Button\t\t\tBehavior - \t\t1\t\tZoom out by a factor of 2 - \t\t2\t\tDraw raytrace-rectangle - \t\t3\t\tZoom in by a factor of 2" } - { see_also "rset, vars" } } .$id.menubar.settings.mouse_behavior add radiobutton -value o -variable mged_gui($id,mouse_behavior)\ -label "Pick Raytrace-Object(s)" -underline 14\ -command "set_mouse_behavior $id" @@ -1168,33 +1099,6 @@ hoc_register_menu_data "Create" "$ptype..." "Make a $ptype" $ksl \t\t2\t\tFire query ray \t\t3\t\tZoom in by a factor of 2" } { see_also "nirt, qray, rset, vars" } } - .$id.menubar.settings.mouse_behavior add radiobutton -value p -variable mged_gui($id,mouse_behavior)\ - -label "Sweep Paint-Rectangle" -underline 6\ - -command "set_mouse_behavior $id" - hoc_register_menu_data "Mouse Behavior" "Sweep Paint-Rectangle" "Sweep Paint-Rectangle"\ - { { synopsis "Enter sweep paint-rectangle mode." } - { description "If the framebuffer is active, the rectangular area - as specified by the user is painted with the current contents of the - framebuffer. Otherwise, only the rectangle is drawn.\n - \tMouse Button\t\t\tBehavior - \t\t1\t\tZoom out by a factor of 2 - \t\t2\t\tDraw paint rectangle - \t\t3\t\tZoom in by a factor of 2" } - { see_also "rset, vars" } } - .$id.menubar.settings.mouse_behavior add radiobutton -value z -variable mged_gui($id,mouse_behavior)\ - -label "Sweep Zoom-Rectangle" -underline 6\ - -command "set_mouse_behavior $id" - hoc_register_menu_data "Mouse Behavior" "Sweep Zoom-Rectangle" "Sweep Zoom-Rectangle"\ - { { synopsis "Enter sweep zoom-rectangle mode." } - { description "The rectangular area as specified by the user is used - to zoom the view. Note - as the user stretches out the zoom - rectangle, the rectangle is constrained to be the same shape as the - window. This insures that the user gets what he or she sees.\n - \tMouse Button\t\t\tBehavior - \t\t1\t\tZoom out by a factor of 2 - \t\t2\t\tDraw zoom rectangle - \t\t3\t\tZoom in by a factor of 2" } - { see_also "rset, vars" } } menu .$id.menubar.settings.qray -title "Query Ray Effects" -tearoff $mged_default(tearoff_menus) .$id.menubar.settings.qray add radiobutton -value t -variable mged_gui($id,qray_effects)\ @@ -1278,12 +1182,6 @@ hoc_register_menu_data "Create" "$ptype..." "Make a $ptype" $ksl hoc_register_menu_data "Framebuffer" "All" "Framebuffer - All"\ { { summary "Use the entire pane for the framebuffer." } { see_also "rset, vars" } } - .$id.menubar.settings.fb add radiobutton -value 0 -variable mged_gui($id,fb_all)\ - -label "Rectangle Area" -underline 0\ - -command "mged_apply $id \"set fb_all \$mged_gui($id,fb_all)\"; rt_update_dest $id" - hoc_register_menu_data "Framebuffer" "Rectangle Area" "Framebuffer - Rectangle Area"\ - { { summary "Use the rectangle area for the framebuffer." } - { see_also "rset, vars" } } .$id.menubar.settings.fb add separator .$id.menubar.settings.fb add radiobutton -value 2 -variable mged_gui($id,fb_overlay)\ -label "Overlay" -underline 0\ @@ -1639,12 +1537,6 @@ hoc_register_menu_data "Create" "$ptype..." "Make a $ptype" $ksl data." } { see_also "rset, vars" } } .$id.menubar.modes add separator - .$id.menubar.modes add checkbutton -offvalue 0 -onvalue 1 -variable mged_gui($id,rubber_band)\ - -label "Persistent Sweep Rectangle" -underline 0\ - -command "mged_apply $id \"rset rb draw \$mged_gui($id,rubber_band)\"" - hoc_register_menu_data "Modes" "Persistent sweep rectangle" "Persistent Rubber Band"\ - { { summary "Toggle drawing the rectangle while idle." } - { see_also "rset" } } .$id.menubar.modes add checkbutton -offvalue 0 -onvalue 1 -variable mged_gui($id,adc_draw)\ -label "Angle/Dist Cursor" -underline 0 \ -command "adc_CBHandler $id" @@ -1697,24 +1589,6 @@ hoc_register_menu_data "Create" "$ptype..." "Make a $ptype" $ksl { { summary "Toggle display of the graphics window." } } } .$id.menubar.modes add separator - .$id.menubar.modes add checkbutton -offvalue 0 -onvalue 1 -variable mged_gui($id,collaborate)\ - -label "Collaborate" -underline 0\ - -command "collab_doit $id" - hoc_register_menu_data "Modes" "Collaborate" "Collaborate"\ - { { summary "Toggle collaborate mode. When in collaborate - mode, the upper right pane's view can be shared - with other instances of MGED's new GUI that are - also collaborating." } } - .$id.menubar.modes add checkbutton -offvalue 0 -onvalue 1 -variable mged_gui($id,rateknobs)\ - -label "Rateknobs" -underline 0\ - -command "mged_apply $id \"set rateknobs \$mged_gui($id,rateknobs)\"" - hoc_register_menu_data "Modes" "Rateknobs" "Rate Knobs"\ - { { summary "Toggle rate knob mode. When in rate knob mode, - transformation with the mouse becomes rate based. - For example, if the user rotates the view about - the X axis, the view continues to rotate about the - X axis until the rate rotation is stopped." } - { see_also "knob" } } .$id.menubar.modes add checkbutton -offvalue 0 -onvalue 1 -variable mged_gui($id,dlist)\ -label "Display Lists" -underline 8\ -command "mged_apply $id \"set dlist \$mged_gui($id,dlist)\"" @@ -2630,6 +2504,8 @@ proc set_cmd_win { id } { } proc open_cmd_win {id} { + global mged_gui + set mged_gui($id,show_cmd) 1 wm deiconify .$id raise .$id @@ -2671,75 +2547,6 @@ proc set_dm_win { id } { } } -proc view_ring_add {id} { - global mged_gui - global mged_default - global view_ring - global mged_collaborators - - winset $mged_gui($id,active_dm) - - # already have 10 views in the view ring, ignore add - if {$mged_default(max_views) <= [llength $mged_gui($id,views)]} { - return - } - - # calculate a view id for the new view - set vid [.$id.menubar.viewring.select entrycget end -value] - if {$vid == ""} { - set vid 0 - } else { - incr vid - } - - # get view parameters - set aet [_mged_ae] - set center [_mged_center] - set size [_mged_size] - - # save view commands - set vcmds "_mged_ae $aet; _mged_center $center; _mged_size $size" - - # format view parameters for display in menu - set aet [format "az=%.2f el=%.2f tw=%.2f" \ - [lindex $aet 0] [lindex $aet 1] [lindex $aet 2]] - set center [format "cent=(%.3f %.3f %.3f)" \ - [lindex $center 0] [lindex $center 1] [lindex $center 2]] - set size [format "size=%.3f" $size] - - if {[lsearch -exact $mged_collaborators $id] != -1} { - foreach cid $mged_collaborators { - # append view commands to view list - lappend mged_gui($cid,views) $vcmds - - .$cid.menubar.viewring.select add radiobutton -value $vid -variable view_ring($cid) \ - -label "$center $size $aet" -command "view_ring_goto $cid $vid" - .$cid.menubar.viewring.delete add command -label "$center $size $aet" \ - -command "view_ring_delete $cid $vid" - - # remember the last selected radiobutton - set view_ring($cid,prev) $view_ring($cid) - - # update radio buttons - set view_ring($cid) $vid - } - } else { - # append view commands to view list - lappend mged_gui($id,views) $vcmds - - .$id.menubar.viewring.select add radiobutton -value $vid -variable view_ring($id) \ - -label "$center $size $aet" -command "view_ring_goto $id $vid" - .$id.menubar.viewring.delete add command -label "$center $size $aet" \ - -command "view_ring_delete $id $vid" - - # remember the last selected radiobutton - set view_ring($id,prev) $view_ring($id) - - # update radio buttons - set view_ring($id) $vid - } -} - proc find_view_index {vid vi_in m} { global mged_default upvar $vi_in vi @@ -2784,225 +2591,6 @@ proc view_ring_set_view {id vid vi} { } } -proc view_ring_delete {id vid} { - global mged_gui - global mged_default - global view_ring - global mged_collaborators - - # winset $mged_gui($id,active_dm) - - if {![find_view_index $vid vi .$id.menubar.viewring.select]} { - return - } - - # we're collaborating, so update collaborators - if {[lsearch -exact $mged_collaborators $id] != -1} { - foreach cid $mged_collaborators { - .$cid.menubar.viewring.select delete $vi - .$cid.menubar.viewring.delete delete $vi - set mged_gui($cid,views) [lreplace $mged_gui($cid,views) $vi $vi] - set view_ring($cid) 0 - set view_ring($cid,prev) 0 - } - } else { - .$id.menubar.viewring.select delete $vi - .$id.menubar.viewring.delete delete $vi - set mged_gui($id,views) [lreplace $mged_gui($id,views) $vi $vi] - set view_ring($id) 0 - set view_ring($id,prev) 0 - } -} - -# -# This gets called when the .$id.menubar.viewring.select menu is posted -# to capture the current value of view_ring($id) before it gets -# modified by selecting one of the entries (i.e. view_ring($id) is tied -# to the radiobuttons). -# -proc view_ring_save_curr {id} { - global view_ring - - set view_ring($id,curr) $view_ring($id) -} - -proc view_ring_goto {id vid} { - global mged_gui - global mged_default - global view_ring - global mged_collaborators - - # winset $mged_gui($id,active_dm) - - if {![find_view_index $vid vi .$id.menubar.viewring.select]} { - return - } - - # Since view_ring(id) has been modified by the radiobutton, we'll put - # it back the way it was for now. view_ring_set_view will restore it again. - # This is done so that view_ring(id,prev) gets updated properly. - set view_ring($id) $view_ring($id,curr) - view_ring_set_view $id $vid $vi -} - -proc view_ring_next {id} { - global mged_gui - global view_ring - - # winset $mged_gui($id,active_dm) - - # find view index of menu entry whose value is $view_ring($id) - if {![find_view_index $view_ring($id) vi .$id.menubar.viewring.select]} { - return - } - - # advance view index to next - incr vi - - # see if we have to wrap - if {[.$id.menubar.viewring.select index end] < $vi} { - set vi 0 - } - - set vid [.$id.menubar.viewring.select entrycget $vi -value] - view_ring_set_view $id $vid $vi -} - -proc view_ring_prev {id} { - global mged_gui - global view_ring - - # winset $mged_gui($id,active_dm) - - # find view index of menu entry whose value is $view_ring($id) - if {![find_view_index $view_ring($id) vi .$id.menubar.viewring.select]} { - return - } - - # advance view index to next - incr vi -1 - - # see if we have to wrap - if {$vi < 0} { - set vi [.$id.menubar.viewring.select index end] - } - - set vid [.$id.menubar.viewring.select entrycget $vi -value] - view_ring_set_view $id $vid $vi -} - -proc view_ring_toggle {id} { - global mged_gui - global view_ring - - # validate view_ring(id) - if {![find_view_index $view_ring($id) vi .$id.menubar.viewring.select]} { - return - } - - # validate view_ring(id,prev) and find its corresponding menu view index - if {![find_view_index $view_ring($id,prev) vi_prev .$id.menubar.viewring.select]} { - return - } - - view_ring_set_view $id $view_ring($id,prev) $vi_prev -} - -proc view_ring_copy {from to} { - global mged_gui - global view_ring - - # first, delete all menu entries in select and delete menus - .$to.menubar.viewring.select delete 0 end - .$to.menubar.viewring.delete delete 0 end - - # update list of views - set mged_gui($to,views) $mged_gui($from,views) - - # redo the select and delete menus - set len [llength $mged_gui($to,views)] - for {set i 0} {$i < $len} {incr i} { - # get the label from the from_menu - set label [.$from.menubar.viewring.select entrycget $i -label] - - # get the value/view_id from the from_menu - set vid [.$from.menubar.viewring.select entrycget $i -value] - - # recreate the entries for the select and delete menus - .$to.menubar.viewring.select add radiobutton -value $vid -variable view_ring($to) \ - -label $label -command "view_ring_goto $to $vid" - .$to.menubar.viewring.delete add command -label $label \ - -command "view_ring_delete $to $vid" - } -} - -proc update_view_ring_entries { id m } { - global view_ring - - if {0} { - set views [view_ring get -a] - set llen [llength $views] - - if {$m == "s"} { - set w .$id.menubar.viewring.select - $w delete 0 end - for {set i 0} {$i < $llen} {incr i} { - $w add radiobutton -value [lindex $views $i] -variable view_ring($id)\ - -label [lindex $views $i] -command "view_ring_goto $id [lindex $views $i]" - } - } elseif {$m == "d"} { - set w .$id.menubar.viewring.delete - $w delete 0 end - for {set i 0} {$i < $llen} {incr i} { - $w add command -label [lindex $views $i]\ - -command "view_ring_delete $id [lindex $views $i]" - } - } else { - puts "Usage: update_view_ring_entries w s|d" - } - } -} - -proc update_view_ring_labels { id } { - global mged_gui - global view_ring - - if {0} { - if {[_mged_opendb] == ""} { - error "No database has been opened!" - } - - winset $mged_gui($id,active_dm) - set view_ring($id) [view_ring get] - set views [view_ring get -a] - set llen [llength $views] - - # we need to also save the previous view so that - # toggle will continue to work - view_ring toggle - set prev [view_ring get] - - set ws .$id.menubar.viewring.select - set wd .$id.menubar.viewring.delete - for {set i 0} {$i < $llen} {incr i} { - view_ring goto [lindex $views $i] - set aet [view aet] - set aet [format "az=%.2f el=%.2f tw=%.2f"\ - [lindex $aet 0] [lindex $aet 1] [lindex $aet 2]] - set center [view center] - set center [format "cent=(%.3f %.3f %.3f)"\ - [lindex $center 0] [lindex $center 1] [lindex $center 2]] - set size [format "size=%.3f" [view size]] - $ws entryconfigure $i -label "$center $size $aet" - $wd entryconfigure $i -label "$center $size $aet" - } - - # restore both previous and current views - view_ring goto $prev - view_ring goto $view_ring($id) - } -} - proc toggle_status_bar { id } { global mged_gui diff --git a/src/tclscripts/mged/plot.tcl b/src/tclscripts/mged/plot.tcl index aad138cd6c3..9343afbbe88 100755 --- a/src/tclscripts/mged/plot.tcl +++ b/src/tclscripts/mged/plot.tcl @@ -1,7 +1,7 @@ # P L O T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/points.tcl b/src/tclscripts/mged/points.tcl index 2182dbfb7ad..55199a855d4 100755 --- a/src/tclscripts/mged/points.tcl +++ b/src/tclscripts/mged/points.tcl @@ -1,7 +1,7 @@ # P O I N T S . T C L # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -391,7 +391,7 @@ proc pipe {pts} { eval "$cmd" close $fd - set asc2plot3 [file join [bu_brlcad_root "bin"] asc-plot3] + set asc2plot3 [file join [bu_dir bin] asc-plot3] exec "$asc2plot3 < pipe$pipe_number.plasc > pipe$pipe_number.plot3" incr pipe_number @@ -697,7 +697,7 @@ if { 1 == 0 } { set c "Q" } close $fd - set asc2plot3 [file join [bu_brlcad_root "bin"] asc-plot3] + set asc2plot3 [file join [bu_dir bin] asc-plot3] exec "$asc2plot3 < pipe.asc > pipe.plot3" overlay pipe.plot3 file delete pipe.asc diff --git a/src/tclscripts/mged/prj_add.tcl b/src/tclscripts/mged/prj_add.tcl index ce60da14221..36f5f285333 100755 --- a/src/tclscripts/mged/prj_add.tcl +++ b/src/tclscripts/mged/prj_add.tcl @@ -1,7 +1,7 @@ # P R J _ A D D . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/ps.tcl b/src/tclscripts/mged/ps.tcl index 8e53ff8864c..8f8b90ba5de 100755 --- a/src/tclscripts/mged/ps.tcl +++ b/src/tclscripts/mged/ps.tcl @@ -1,7 +1,7 @@ # P S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/qray.tcl b/src/tclscripts/mged/qray.tcl index 81b2540ee11..26956678a0a 100755 --- a/src/tclscripts/mged/qray.tcl +++ b/src/tclscripts/mged/qray.tcl @@ -1,7 +1,7 @@ # Q R A Y . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/ray.tcl b/src/tclscripts/mged/ray.tcl index 8891a667f48..a8be581ec44 100755 --- a/src/tclscripts/mged/ray.tcl +++ b/src/tclscripts/mged/ray.tcl @@ -1,7 +1,7 @@ # R A Y . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/raypick.tcl b/src/tclscripts/mged/raypick.tcl index edb652999dd..d18a51d5f49 100755 --- a/src/tclscripts/mged/raypick.tcl +++ b/src/tclscripts/mged/raypick.tcl @@ -1,7 +1,7 @@ # R A Y P I C K . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/reid.tcl b/src/tclscripts/mged/reid.tcl index b9423993035..03d399fce1b 100755 --- a/src/tclscripts/mged/reid.tcl +++ b/src/tclscripts/mged/reid.tcl @@ -1,7 +1,7 @@ # R E I D . T C L # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/relos.tcl b/src/tclscripts/mged/relos.tcl index 80b38eac456..8239f1de2dc 100644 --- a/src/tclscripts/mged/relos.tcl +++ b/src/tclscripts/mged/relos.tcl @@ -1,7 +1,7 @@ # R E L O S . T C L # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/remap_mater.tcl b/src/tclscripts/mged/remap_mater.tcl index c7edd0c31b0..b8e09740521 100755 --- a/src/tclscripts/mged/remap_mater.tcl +++ b/src/tclscripts/mged/remap_mater.tcl @@ -1,7 +1,7 @@ # R E M A P _ M A T E R . T C L # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/remat.tcl b/src/tclscripts/mged/remat.tcl index 26585aaf3b1..26da97f1826 100755 --- a/src/tclscripts/mged/remat.tcl +++ b/src/tclscripts/mged/remat.tcl @@ -1,7 +1,7 @@ # R E M A T . T C L # BRL-CAD # -# Copyright (c) 2005-2020 United States Government as represented by +# Copyright (c) 2005-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/rrmb.tcl b/src/tclscripts/mged/rrmb.tcl index 327b0dc2544..5b7cf493b04 100644 --- a/src/tclscripts/mged/rrmb.tcl +++ b/src/tclscripts/mged/rrmb.tcl @@ -2,7 +2,7 @@ # R R M B . T C L # BRL-CAD # -# Copyright (c) 2010-2020 United States Government as represented by +# Copyright (c) 2010-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/rt.tcl b/src/tclscripts/mged/rt.tcl index c417a84a14f..e8e3bdec8c6 100755 --- a/src/tclscripts/mged/rt.tcl +++ b/src/tclscripts/mged/rt.tcl @@ -1,7 +1,7 @@ # R T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -579,7 +579,7 @@ proc do_fbclear { id } { set blue 0 } - set fbclear [file join [bu_brlcad_root "bin"] fbclear] + set fbclear [file join [bu_dir bin] fbclear] set result [catch { exec $fbclear -F $rt_control($id,cooked_dest)\ $red $green $blue & } rt_error] diff --git a/src/tclscripts/mged/rt_script.tcl b/src/tclscripts/mged/rt_script.tcl index 71b8bd6004f..e8ce8abb808 100755 --- a/src/tclscripts/mged/rt_script.tcl +++ b/src/tclscripts/mged/rt_script.tcl @@ -1,7 +1,7 @@ # R T _ S C R I P T . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/sample.tcl b/src/tclscripts/mged/sample.tcl index 686c4c8356e..1ad31aa32d2 100755 --- a/src/tclscripts/mged/sample.tcl +++ b/src/tclscripts/mged/sample.tcl @@ -1,7 +1,7 @@ # S A M P L E . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/shaders.tcl b/src/tclscripts/mged/shaders.tcl index a4711168c00..5de0c04b79e 100755 --- a/src/tclscripts/mged/shaders.tcl +++ b/src/tclscripts/mged/shaders.tcl @@ -1,7 +1,7 @@ # S H A D E R S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -1615,7 +1615,7 @@ proc do_light { shade_var id } { foreach s { 0 1 2 3 4 5 6 7 8 9 } { set shader_params(light_i${i}_v${v}_s${s}) \ [image create photo -file \ - [file join [bu_brlcad_root "share/tclscripts"] mged l_i${i}_v${v}_s${s}.gif]] + [file join [bu_dir data] tclscripts mged l_i${i}_v${v}_s${s}.gif]] } } } diff --git a/src/tclscripts/mged/skt_ed.tcl b/src/tclscripts/mged/skt_ed.tcl index 49f00f70231..255719b5ee8 100755 --- a/src/tclscripts/mged/skt_ed.tcl +++ b/src/tclscripts/mged/skt_ed.tcl @@ -1,7 +1,7 @@ # S K T _ E D . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/solclick.tcl b/src/tclscripts/mged/solclick.tcl index 04bddff3165..ae702df21d4 100755 --- a/src/tclscripts/mged/solclick.tcl +++ b/src/tclscripts/mged/solclick.tcl @@ -1,7 +1,7 @@ # S O L C L I C K . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/solcreate.tcl b/src/tclscripts/mged/solcreate.tcl index 800eff14488..d321abb03bc 100755 --- a/src/tclscripts/mged/solcreate.tcl +++ b/src/tclscripts/mged/solcreate.tcl @@ -1,7 +1,7 @@ # S O L C R E A T E . T C L # BRL-CAD # -# Copyright (c) 1995-2020 United States Government as represented by +# Copyright (c) 1995-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/solid.tcl b/src/tclscripts/mged/solid.tcl index 3471d082137..3e224e0f1cb 100755 --- a/src/tclscripts/mged/solid.tcl +++ b/src/tclscripts/mged/solid.tcl @@ -1,7 +1,7 @@ # S O L I D . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/text.tcl b/src/tclscripts/mged/text.tcl index c17ba393958..e077f25faa3 100755 --- a/src/tclscripts/mged/text.tcl +++ b/src/tclscripts/mged/text.tcl @@ -1,7 +1,7 @@ # T E X T . T C L # BRL-CAD # -# Copyright (c) 1995-2020 United States Government as represented by +# Copyright (c) 1995-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/titles.tcl b/src/tclscripts/mged/titles.tcl index 27345b76e95..3ed46b4e6b3 100755 --- a/src/tclscripts/mged/titles.tcl +++ b/src/tclscripts/mged/titles.tcl @@ -1,7 +1,7 @@ # T I T L E S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/tree.tcl b/src/tclscripts/mged/tree.tcl index cd7ca56c7c7..355fc35ef74 100755 --- a/src/tclscripts/mged/tree.tcl +++ b/src/tclscripts/mged/tree.tcl @@ -1,7 +1,7 @@ # T R E E . T C L # BRL-CAD # -# Copyright (c) 1998-2020 United States Government as represented by +# Copyright (c) 1998-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mged/xclone.tcl b/src/tclscripts/mged/xclone.tcl index 6ba56ff64cf..4c71b3b5df8 100644 --- a/src/tclscripts/mged/xclone.tcl +++ b/src/tclscripts/mged/xclone.tcl @@ -1,7 +1,7 @@ # X C L O N E . T C L # BRL-CAD # -# Copyright (c) 2008-2020 United States Government as represented by +# Copyright (c) 2008-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/mouse.tcl b/src/tclscripts/mouse.tcl index d4af821929e..81ab2acea8c 100755 --- a/src/tclscripts/mouse.tcl +++ b/src/tclscripts/mouse.tcl @@ -1,7 +1,7 @@ # M O U S E . T C L # BRL-CAD # -# Copyright (c) 1995-2020 United States Government as represented by +# Copyright (c) 1995-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/plot3-dm/bindings.tcl b/src/tclscripts/plot3-dm/bindings.tcl index a749774c4b8..d0da6ff572d 100644 --- a/src/tclscripts/plot3-dm/bindings.tcl +++ b/src/tclscripts/plot3-dm/bindings.tcl @@ -1,7 +1,7 @@ # B I N D I N G S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/plot3-dm/help.tcl b/src/tclscripts/plot3-dm/help.tcl index d55ac6b3e9e..eb7b2d31e5f 100644 --- a/src/tclscripts/plot3-dm/help.tcl +++ b/src/tclscripts/plot3-dm/help.tcl @@ -1,7 +1,7 @@ # H E L P . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/plot3-dm/menu.tcl b/src/tclscripts/plot3-dm/menu.tcl index 9e8a0891330..efb7cafd377 100644 --- a/src/tclscripts/plot3-dm/menu.tcl +++ b/src/tclscripts/plot3-dm/menu.tcl @@ -1,7 +1,7 @@ # M E N U . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/RaytraceWizard.tcl b/src/tclscripts/rtwizard/RaytraceWizard.tcl index dc8987af713..e217c3cd139 100755 --- a/src/tclscripts/rtwizard/RaytraceWizard.tcl +++ b/src/tclscripts/rtwizard/RaytraceWizard.tcl @@ -1,7 +1,7 @@ # R A Y T R A C E W I Z A R D . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/DbPage.itk b/src/tclscripts/rtwizard/lib/DbPage.itk old mode 100755 new mode 100644 index 72de76cf4f1..93667cb85e8 --- a/src/tclscripts/rtwizard/lib/DbPage.itk +++ b/src/tclscripts/rtwizard/lib/DbPage.itk @@ -1,7 +1,7 @@ # D B P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/ExamplePage.itk b/src/tclscripts/rtwizard/lib/ExamplePage.itk old mode 100755 new mode 100644 index 19672261661..c9748592308 --- a/src/tclscripts/rtwizard/lib/ExamplePage.itk +++ b/src/tclscripts/rtwizard/lib/ExamplePage.itk @@ -1,7 +1,7 @@ # E X A M P L E P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/FbPage.itk b/src/tclscripts/rtwizard/lib/FbPage.itk old mode 100755 new mode 100644 index 83670a8f895..8c8f812897f --- a/src/tclscripts/rtwizard/lib/FbPage.itk +++ b/src/tclscripts/rtwizard/lib/FbPage.itk @@ -1,7 +1,7 @@ # F B P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -444,20 +444,20 @@ namespace eval RtWizard { [string match $screenOnly "false"] } { # Will be generating a file - need in-memory fb set port 0 - while { ! [catch {exec [file join [bu_brlcad_root bin] fbclear] -F $port } error ] } { + while { ! [catch {exec [file join [bu_dir bin] fbclear] -F $port } error ] } { if {$::RtWizard::wizard_state(verbose)} {puts "fbserv port $fbserv_port is already in use."} incr port } - catch {exec [file join [bu_brlcad_root bin] fbserv] -w $width -n $height $port /dev/mem &} pid + catch {exec [file join [bu_dir bin] fbserv] -w $width -n $height $port /dev/mem &} pid # Give the fbserv time to fire up after 1000 - exec [file join [bu_brlcad_root bin] fbclear] -F $port 0 0 0 + exec [file join [bu_dir bin] fbclear] -F $port 0 0 0 set ::RtWizard::wizard_state(fbserv_port) $port set ::RtWizard::wizard_state(pid) $pid return "$port $pid" } - set binpath [bu_brlcad_root "bin"] + set binpath [bu_dir bin] # # Create an on-screen buffer # diff --git a/src/tclscripts/rtwizard/lib/FeedbackDialog.itk b/src/tclscripts/rtwizard/lib/FeedbackDialog.itk old mode 100755 new mode 100644 index a1550c1be2b..23ed3ea1081 --- a/src/tclscripts/rtwizard/lib/FeedbackDialog.itk +++ b/src/tclscripts/rtwizard/lib/FeedbackDialog.itk @@ -1,7 +1,7 @@ # F E E D B A C K D I A L O G . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/FullColorPage.itk b/src/tclscripts/rtwizard/lib/FullColorPage.itk old mode 100755 new mode 100644 index b4e51cb9c5c..5ca8e1a41e1 --- a/src/tclscripts/rtwizard/lib/FullColorPage.itk +++ b/src/tclscripts/rtwizard/lib/FullColorPage.itk @@ -1,7 +1,7 @@ # F U L L C O L O R P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/GhostPage.itk b/src/tclscripts/rtwizard/lib/GhostPage.itk old mode 100755 new mode 100644 index 09949272d49..80453f4df02 --- a/src/tclscripts/rtwizard/lib/GhostPage.itk +++ b/src/tclscripts/rtwizard/lib/GhostPage.itk @@ -1,7 +1,7 @@ # G H O S T P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/HelpPage.itk b/src/tclscripts/rtwizard/lib/HelpPage.itk old mode 100755 new mode 100644 index c1a6d396b59..f04ea5d9bd4 --- a/src/tclscripts/rtwizard/lib/HelpPage.itk +++ b/src/tclscripts/rtwizard/lib/HelpPage.itk @@ -1,7 +1,7 @@ # H E L P P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/HighlightedPage.itk b/src/tclscripts/rtwizard/lib/HighlightedPage.itk old mode 100755 new mode 100644 index 9cd37577804..559ca9a8b3b --- a/src/tclscripts/rtwizard/lib/HighlightedPage.itk +++ b/src/tclscripts/rtwizard/lib/HighlightedPage.itk @@ -1,7 +1,7 @@ # H I G H L I G H T E D P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/IntroPage.itk b/src/tclscripts/rtwizard/lib/IntroPage.itk old mode 100755 new mode 100644 index 425f7317a0c..62be26ce83c --- a/src/tclscripts/rtwizard/lib/IntroPage.itk +++ b/src/tclscripts/rtwizard/lib/IntroPage.itk @@ -1,7 +1,7 @@ # I N T R O P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/LinePage.itk b/src/tclscripts/rtwizard/lib/LinePage.itk old mode 100755 new mode 100644 index e25f2134bc8..78e84748594 --- a/src/tclscripts/rtwizard/lib/LinePage.itk +++ b/src/tclscripts/rtwizard/lib/LinePage.itk @@ -1,7 +1,7 @@ # L I N E P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/MGEDpage.itk b/src/tclscripts/rtwizard/lib/MGEDpage.itk old mode 100755 new mode 100644 index bd8ffa4b1c3..d0cae8a88f7 --- a/src/tclscripts/rtwizard/lib/MGEDpage.itk +++ b/src/tclscripts/rtwizard/lib/MGEDpage.itk @@ -1,7 +1,7 @@ # M G E D P A G E . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/PictureTypeA.itcl b/src/tclscripts/rtwizard/lib/PictureTypeA.itcl old mode 100755 new mode 100644 index f8bcdcaa31a..c701a8b6760 --- a/src/tclscripts/rtwizard/lib/PictureTypeA.itcl +++ b/src/tclscripts/rtwizard/lib/PictureTypeA.itcl @@ -1,7 +1,7 @@ # P I C T U R E T Y P E A . I T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -190,14 +190,14 @@ namespace eval RtWizard { if {[string length $filename] > 0 } { set output_generated 0 if {[file extension $filename] == ".png"} { - if { [catch {exec [file join [bu_brlcad_root bin] fb-png] -w $w -n $h -F $fb $filename}] } { + if { [catch {exec [file join [bu_dir bin] fb-png] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 } } if {!$output_generated} { - if { [catch {exec [file join [bu_brlcad_root bin] fb-pix] -w $w -n $h -F $fb $filename}] } { + if { [catch {exec [file join [bu_dir bin] fb-pix] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 diff --git a/src/tclscripts/rtwizard/lib/PictureTypeB.itcl b/src/tclscripts/rtwizard/lib/PictureTypeB.itcl old mode 100755 new mode 100644 index 13b614f1430..d2cfbfc3a2d --- a/src/tclscripts/rtwizard/lib/PictureTypeB.itcl +++ b/src/tclscripts/rtwizard/lib/PictureTypeB.itcl @@ -1,7 +1,7 @@ # P I C T U R E T Y P E B . I T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -201,14 +201,14 @@ namespace eval RtWizard { if {[string length $filename] > 0 } { set output_generated 0 if {[file extension $filename] == ".png"} { - if { [catch {exec [file join [bu_brlcad_root bin] fb-png] -w $w -n $h -F $fb $filename}] } { + if { [catch {exec [file join [bu_dir bin] fb-png] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 } } if {!$output_generated} { - if { [catch {exec [file join [bu_brlcad_root bin] fb-pix] -w $w -n $h -F $fb $filename}] } { + if { [catch {exec [file join [bu_dir bin] fb-pix] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 diff --git a/src/tclscripts/rtwizard/lib/PictureTypeBase.itcl b/src/tclscripts/rtwizard/lib/PictureTypeBase.itcl old mode 100755 new mode 100644 index 82c34f27643..21c66c35f55 --- a/src/tclscripts/rtwizard/lib/PictureTypeBase.itcl +++ b/src/tclscripts/rtwizard/lib/PictureTypeBase.itcl @@ -1,7 +1,7 @@ # P I C T U R E T Y P E B A S E . I T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/lib/PictureTypeC.itcl b/src/tclscripts/rtwizard/lib/PictureTypeC.itcl old mode 100755 new mode 100644 index b46e79ac518..8e7e5d379d7 --- a/src/tclscripts/rtwizard/lib/PictureTypeC.itcl +++ b/src/tclscripts/rtwizard/lib/PictureTypeC.itcl @@ -1,7 +1,7 @@ # P I C T U R E T Y P E C . I T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -204,14 +204,14 @@ namespace eval RtWizard { if {[string length $filename] > 0 } { set output_generated 0 if {[file extension $filename] == ".png"} { - if { [catch {exec [file join [bu_brlcad_root bin] fb-png] -w $w -n $h -F $fb $filename}] } { + if { [catch {exec [file join [bu_dir bin] fb-png] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 } } if {!$output_generated} { - if { [catch {exec [file join [bu_brlcad_root bin] fb-pix] -w $w -n $h -F $fb $filename}] } { + if { [catch {exec [file join [bu_dir bin] fb-pix] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 diff --git a/src/tclscripts/rtwizard/lib/PictureTypeD.itcl b/src/tclscripts/rtwizard/lib/PictureTypeD.itcl old mode 100755 new mode 100644 index 94c4d2e8bcd..91570399dc0 --- a/src/tclscripts/rtwizard/lib/PictureTypeD.itcl +++ b/src/tclscripts/rtwizard/lib/PictureTypeD.itcl @@ -1,7 +1,7 @@ # P I C T U R E T Y P E D . I T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -221,14 +221,14 @@ namespace eval RtWizard { if {[string length $filename] > 0 } { set output_generated 0 if {[file extension $filename] == ".png"} { - if { [catch {exec [file join [bu_brlcad_root bin] fb-png] -w $w -n $h -F $fb $filename}] } { + if { [catch {exec [file join [bu_dir bin] fb-png] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 } } if {!$output_generated} { - if { [catch {exec [file join [bu_brlcad_root bin] fb-pix] -w $w -n $h -F $fb $filename}] } { + if { [catch {exec [file join [bu_dir bin] fb-pix] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 diff --git a/src/tclscripts/rtwizard/lib/PictureTypeE.itcl b/src/tclscripts/rtwizard/lib/PictureTypeE.itcl old mode 100755 new mode 100644 index 372fa94c391..885f29cc4ba --- a/src/tclscripts/rtwizard/lib/PictureTypeE.itcl +++ b/src/tclscripts/rtwizard/lib/PictureTypeE.itcl @@ -1,7 +1,7 @@ # P I C T U R E T Y P E E . I T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -197,14 +197,14 @@ namespace eval RtWizard { if {[string length $filename] > 0 } { set output_generated 0 if {[file extension $filename] == ".png"} { - if { [ catch {exec [file join [bu_brlcad_root bin] fb-png] -w $w -n $h -F $fb $filename}] } { + if { [ catch {exec [file join [bu_dir bin] fb-png] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 } } if {!$output_generated} { - if { [ catch {exec [file join [bu_brlcad_root bin] fb-pix] -w $w -n $h -F $fb $filename}] } { + if { [ catch {exec [file join [bu_dir bin] fb-pix] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 diff --git a/src/tclscripts/rtwizard/lib/PictureTypeF.itcl b/src/tclscripts/rtwizard/lib/PictureTypeF.itcl old mode 100755 new mode 100644 index 0c0de8faa43..c4894978740 --- a/src/tclscripts/rtwizard/lib/PictureTypeF.itcl +++ b/src/tclscripts/rtwizard/lib/PictureTypeF.itcl @@ -1,7 +1,7 @@ # P I C T U R E T Y P E F . I T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -227,14 +227,14 @@ namespace eval RtWizard { if {[string length $filename] > 0 } { set output_generated 0 if {[file extension $filename] == ".png"} { - if { [catch {exec [file join [bu_brlcad_root bin] fb-png] -w $w -n $h -F $fb $filename}] } { + if { [catch {exec [file join [bu_dir bin] fb-png] -w $w -n $h -F $fb $filename}] } { set output_generated 0 } else { set output_generated 1 } } if {!$output_generated} { - if { [ catch {exec [file join [bu_brlcad_root bin] fb-pix] -w $w -n $h -F $fb $filename} ] } { + if { [ catch {exec [file join [bu_dir bin] fb-pix] -w $w -n $h -F $fb $filename} ] } { set output_generated 0 } else { set output_generated 1 diff --git a/src/tclscripts/rtwizard/lib/Wizard.itk b/src/tclscripts/rtwizard/lib/Wizard.itk old mode 100755 new mode 100644 index 26c1cceb98f..f925d477410 --- a/src/tclscripts/rtwizard/lib/Wizard.itk +++ b/src/tclscripts/rtwizard/lib/Wizard.itk @@ -1,7 +1,7 @@ # W I Z A R D . I T K # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/rtwizard/rtwizard b/src/tclscripts/rtwizard/rtwizard index 9f2514295ed..0c6914ef738 100755 --- a/src/tclscripts/rtwizard/rtwizard +++ b/src/tclscripts/rtwizard/rtwizard @@ -2,7 +2,7 @@ # R T W I Z A R D . T C L # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -118,12 +118,12 @@ if {[info exists ::use_gui]} { } # Check whether the framebuffer already exists. If it does, and if # it was specified on the command line, go with it. - if { [catch {exec [file join [bu_brlcad_root bin] fblabel] -F $::RtWizard::wizard_state(fbserv_port) 1 1 " "} error ] && $error == 12} { - catch {exec [file join [bu_brlcad_root bin] fbserv] -w $::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) $::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(fbserv_device) &} pid + if { [catch {exec [file join [bu_dir bin] fblabel] -F $::RtWizard::wizard_state(fbserv_port) 1 1 " "} error ] && $error == 12} { + catch {exec [file join [bu_dir bin] fbserv] -w $::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) $::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(fbserv_device) &} pid if {[info exists pid]} { set fbserv_pid $pid # Wait a few milliseconds to make sure fbserv has completed its work and is available - while { [catch {exec [file join [bu_brlcad_root bin] fblabel] -F $::RtWizard::wizard_state(fbserv_port) 1 1 " "} error] && $error == 12} {after 300} + while { [catch {exec [file join [bu_dir bin] fblabel] -F $::RtWizard::wizard_state(fbserv_port) 1 1 " "} error] && $error == 12} {after 300} } else { if {$::RtWizard::wizard_state(verbose)} {puts "fbserv port $::RtWizard::wizard_state(fbserv_port) failed!"} incr ::RtWizard::wizard_state(fbserv_port) @@ -133,14 +133,14 @@ if {[info exists ::use_gui]} { # If we didn't have a pre-specified port number and the default didn't work, start counting up if { ! $port_number_specified && ! [info exists fbserv_pid] } { incr ::RtWizard::wizard_state(fbserv_port) - while { ! [catch {exec [file join [bu_brlcad_root bin] fbclear] -F $::RtWizard::wizard_state(fbserv_port) } error ] } { + while { ! [catch {exec [file join [bu_dir bin] fbclear] -F $::RtWizard::wizard_state(fbserv_port) } error ] } { if {$::RtWizard::wizard_state(verbose)} {puts "fbserv port $::RtWizard::wizard_state(fbserv_port) is already in use."} incr ::RtWizard::wizard_state(fbserv_port) } - catch {exec [file join [bu_brlcad_root bin] fbserv] -w $::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) $::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(fbserv_device) &} pid + catch {exec [file join [bu_dir bin] fbserv] -w $::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) $::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(fbserv_device) &} pid set fbserv_pid $pid # Wait a few milliseconds to make sure fbserv has completed its work and is available - while { [catch {exec [file join [bu_brlcad_root bin] fblabel] -F $::RtWizard::wizard_state(fbserv_port) 1 1 " "} error] && $error == 12 } {after 300} + while { [catch {exec [file join [bu_dir bin] fblabel] -F $::RtWizard::wizard_state(fbserv_port) 1 1 " "} error] && $error == 12 } {after 300} } # Either we're using a specified view model, or we're deducing one based on user options @@ -223,11 +223,11 @@ if {[info exists ::use_gui]} { if {[info exists ::RtWizard::wizard_state(output_filename)]} { set output_generated 0 if {[file extension $::RtWizard::wizard_state(output_filename)] == ".png"} { - exec [file join [bu_brlcad_root bin] fb-png] -w $::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) -F $::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(output_filename) + exec [file join [bu_dir bin] fb-png] -w $::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) -F $::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(output_filename) set output_generated 1 } if {!$output_generated} { - exec [file join [bu_brlcad_root bin] fb-pix] -w $::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) -F $::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(output_filename) + exec [file join [bu_dir bin] fb-pix] -w $::RtWizard::wizard_state(width) -n $::RtWizard::wizard_state(scanlines) -F $::RtWizard::wizard_state(fbserv_port) $::RtWizard::wizard_state(output_filename) set output_generated 1 } diff --git a/src/tclscripts/sdialogs/scripts/entrydialog.itk b/src/tclscripts/sdialogs/scripts/entrydialog.itk old mode 100755 new mode 100644 index cb9d2142b52..e6e09c2f89f --- a/src/tclscripts/sdialogs/scripts/entrydialog.itk +++ b/src/tclscripts/sdialogs/scripts/entrydialog.itk @@ -1,7 +1,7 @@ # E N T R Y D I A L O G . I T K # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/sdialogs/scripts/listdialog.itk b/src/tclscripts/sdialogs/scripts/listdialog.itk old mode 100755 new mode 100644 index 694b4841f74..288983c7edf --- a/src/tclscripts/sdialogs/scripts/listdialog.itk +++ b/src/tclscripts/sdialogs/scripts/listdialog.itk @@ -1,7 +1,7 @@ # L I S T D I A L O G . I T K # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/sdialogs/scripts/stddlgs.tcl b/src/tclscripts/sdialogs/scripts/stddlgs.tcl old mode 100755 new mode 100644 index 089ad2caf2a..a0bb98cd8a3 --- a/src/tclscripts/sdialogs/scripts/stddlgs.tcl +++ b/src/tclscripts/sdialogs/scripts/stddlgs.tcl @@ -1,7 +1,7 @@ # S T D D L G S . T C L # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/sdialogs/sdialogs.tcl b/src/tclscripts/sdialogs/sdialogs.tcl index a1a24e7cea2..5435806d0de 100755 --- a/src/tclscripts/sdialogs/sdialogs.tcl +++ b/src/tclscripts/sdialogs/sdialogs.tcl @@ -1,7 +1,7 @@ # S D I A L O G S . T C L # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/shotvis/shotvis.tcl b/src/tclscripts/shotvis/shotvis.tcl index b74fac65ffb..ace0e36774e 100644 --- a/src/tclscripts/shotvis/shotvis.tcl +++ b/src/tclscripts/shotvis/shotvis.tcl @@ -1,7 +1,7 @@ # S H O T V I S . T C L # BRL-CAD # -# Copyright (c) 2019-2020 United States Government as represented by +# Copyright (c) 2019-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/swidgets/scripts/selectlists.itk b/src/tclscripts/swidgets/scripts/selectlists.itk old mode 100755 new mode 100644 index 87c63a51477..dcb89f47236 --- a/src/tclscripts/swidgets/scripts/selectlists.itk +++ b/src/tclscripts/swidgets/scripts/selectlists.itk @@ -1,7 +1,7 @@ # S E L E C T L I S T S . I T K # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/swidgets/scripts/tkgetdir.itk b/src/tclscripts/swidgets/scripts/tkgetdir.itk old mode 100755 new mode 100644 index 29e34935e5f..33565026b95 --- a/src/tclscripts/swidgets/scripts/tkgetdir.itk +++ b/src/tclscripts/swidgets/scripts/tkgetdir.itk @@ -1,7 +1,7 @@ # T K G E T D I R . I T K # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/swidgets/scripts/togglearrow.itk b/src/tclscripts/swidgets/scripts/togglearrow.itk old mode 100755 new mode 100644 index 4ce2137009a..1dd4ad69bfb --- a/src/tclscripts/swidgets/scripts/togglearrow.itk +++ b/src/tclscripts/swidgets/scripts/togglearrow.itk @@ -1,7 +1,7 @@ # T O G G L E A R R O W . I T K # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/swidgets/scripts/tooltip.itk b/src/tclscripts/swidgets/scripts/tooltip.itk old mode 100755 new mode 100644 index 785fc3fa424..333291594dc --- a/src/tclscripts/swidgets/scripts/tooltip.itk +++ b/src/tclscripts/swidgets/scripts/tooltip.itk @@ -1,7 +1,7 @@ # T O O L T I P . I T K # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/swidgets/scripts/tree.itk b/src/tclscripts/swidgets/scripts/tree.itk old mode 100755 new mode 100644 index 4dafa50699e..feb5426d8fa --- a/src/tclscripts/swidgets/scripts/tree.itk +++ b/src/tclscripts/swidgets/scripts/tree.itk @@ -1,7 +1,7 @@ # T R E E . I T K # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/swidgets/swidgets.tcl b/src/tclscripts/swidgets/swidgets.tcl index 9b3ef350e22..bb202844182 100755 --- a/src/tclscripts/swidgets/swidgets.tcl +++ b/src/tclscripts/swidgets/swidgets.tcl @@ -1,7 +1,7 @@ # S W I D G E T S . T C L # BRL-CAD # -# Copyright (c) 2006-2020 United States Government as represented by +# Copyright (c) 2006-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/util/expand_int_ranges.tcl b/src/tclscripts/util/expand_int_ranges.tcl index 9fea345c573..171de6de3c4 100755 --- a/src/tclscripts/util/expand_int_ranges.tcl +++ b/src/tclscripts/util/expand_int_ranges.tcl @@ -1,7 +1,7 @@ # E X P A N D _ I N T _ R A N G E S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/util/luniq.tcl b/src/tclscripts/util/luniq.tcl index d8ca594b936..e8fd375c541 100755 --- a/src/tclscripts/util/luniq.tcl +++ b/src/tclscripts/util/luniq.tcl @@ -1,7 +1,7 @@ # L U N I Q . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/util/metastrength.tcl b/src/tclscripts/util/metastrength.tcl index 0e7db98ba80..7f3b954e01f 100644 --- a/src/tclscripts/util/metastrength.tcl +++ b/src/tclscripts/util/metastrength.tcl @@ -1,7 +1,7 @@ # M E T A S T R E N G T H . T C L # BRL-CAD # -# Copyright (c) 2019-2020 United States Government as represented by +# Copyright (c) 2019-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/util/regionstobots.tcl b/src/tclscripts/util/regionstobots.tcl index 4bffe08997b..b3bc35653b1 100644 --- a/src/tclscripts/util/regionstobots.tcl +++ b/src/tclscripts/util/regionstobots.tcl @@ -1,7 +1,7 @@ # R E G I O N S T O B O T S . T C L # BRL-CAD # -# Copyright (c) 2004-2020 United States Government as represented by +# Copyright (c) 2004-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/tclscripts/vmath.tcl b/src/tclscripts/vmath.tcl index 2c0ac37978c..fafaa6b1428 100755 --- a/src/tclscripts/vmath.tcl +++ b/src/tclscripts/vmath.tcl @@ -1,7 +1,7 @@ # V M A T H . T C L # BRL-CAD # -# Copyright (c) 1995-2020 United States Government as represented by +# Copyright (c) 1995-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or diff --git a/src/util/CMakeLists.txt b/src/util/CMakeLists.txt index 7f9b8cd5bbb..e29bd499282 100644 --- a/src/util/CMakeLists.txt +++ b/src/util/CMakeLists.txt @@ -11,7 +11,7 @@ set(UTIL_INCLUDE_DIRS set(UTIL_LOCAL_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR} - ${UTAHRLE_INCLUDE_DIR} + ${UTAHRLE_INCLUDE_DIRS} ${PNG_INCLUDE_DIRS} ) diff --git a/src/util/alias-pix.c b/src/util/alias-pix.c index a733a511cf1..83fb0cc4cd1 100644 --- a/src/util/alias-pix.c +++ b/src/util/alias-pix.c @@ -1,7 +1,7 @@ /* A L I A S - P I X . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/ap-pix.c b/src/util/ap-pix.c index 1847b1ade65..92e2317db55 100644 --- a/src/util/ap-pix.c +++ b/src/util/ap-pix.c @@ -1,7 +1,7 @@ /* A P - P I X . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/asc-plot3.c b/src/util/asc-plot3.c index d2cb6df26b4..22454e6a2b4 100644 --- a/src/util/asc-plot3.c +++ b/src/util/asc-plot3.c @@ -1,7 +1,7 @@ /* A S C - P L O T 3 . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bombardier.c b/src/util/bombardier.c index 7c348c6d8c3..b706530c4c5 100644 --- a/src/util/bombardier.c +++ b/src/util/bombardier.c @@ -1,7 +1,7 @@ /* B O M B A R D I E R . C * BRL-CAD * - * Copyright (c) 2007-2020 United States Government as represented by + * Copyright (c) 2007-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/util/bombardier.h b/src/util/bombardier.h index 633b716c7cb..1dfc3e1b584 100644 --- a/src/util/bombardier.h +++ b/src/util/bombardier.h @@ -1,7 +1,7 @@ /* B O M B A R D I E R . H * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/util/bw-a.c b/src/util/bw-a.c index 753eeb73931..2a22827fda3 100644 --- a/src/util/bw-a.c +++ b/src/util/bw-a.c @@ -1,7 +1,7 @@ /* B W - A . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bw-pix.c b/src/util/bw-pix.c index be83803ec9b..861b24511ac 100644 --- a/src/util/bw-pix.c +++ b/src/util/bw-pix.c @@ -1,7 +1,7 @@ /* B W - P I X . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bw-png.c b/src/util/bw-png.c index f3de348cd1a..3ed9ad3fedf 100644 --- a/src/util/bw-png.c +++ b/src/util/bw-png.c @@ -1,7 +1,7 @@ /* B W - P N G . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bw-ps.c b/src/util/bw-ps.c index 8deb57d506c..ea50687b8a3 100644 --- a/src/util/bw-ps.c +++ b/src/util/bw-ps.c @@ -1,7 +1,7 @@ /* B W - P S . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwcrop.c b/src/util/bwcrop.c index f4bcf7ba183..663b542a68e 100644 --- a/src/util/bwcrop.c +++ b/src/util/bwcrop.c @@ -1,7 +1,7 @@ /* B W C R O P . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwdiff.c b/src/util/bwdiff.c index 434095fdde2..04341ed60ba 100644 --- a/src/util/bwdiff.c +++ b/src/util/bwdiff.c @@ -1,7 +1,7 @@ /* B W D I F F . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwfilter.c b/src/util/bwfilter.c index 79b2c271316..78c3d8c956e 100644 --- a/src/util/bwfilter.c +++ b/src/util/bwfilter.c @@ -1,7 +1,7 @@ /* B W F I L T E R . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwhist.c b/src/util/bwhist.c index f4365dc5cde..fa28106db93 100644 --- a/src/util/bwhist.c +++ b/src/util/bwhist.c @@ -1,7 +1,7 @@ /* B W H I S T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwhisteq.c b/src/util/bwhisteq.c index 9b1dcddaa50..d2f7eedc262 100644 --- a/src/util/bwhisteq.c +++ b/src/util/bwhisteq.c @@ -1,7 +1,7 @@ /* B W H I S T E Q . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwmod.c b/src/util/bwmod.c index 6fabeecba9c..a913ba35ba5 100644 --- a/src/util/bwmod.c +++ b/src/util/bwmod.c @@ -1,7 +1,7 @@ /* B W M O D . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -387,7 +387,7 @@ main(int argc, char **argv) mk_trans_tbl(); } - while ((n = read(0, (void *)ibuf, (unsigned)sizeof(ibuf))) > 0) { + while ((n = read(fileno(stdin), (void *)ibuf, (unsigned)sizeof(ibuf))) > 0) { /* translate */ for (p = ibuf, q = &ibuf[n]; p < q; ++p) { long i = *p; @@ -410,7 +410,7 @@ main(int argc, char **argv) } } /* output */ - if (write(1, (void *)ibuf, (unsigned)n) != n) { + if (write(fileno(stdout), (void *)ibuf, (unsigned)n) != n) { fprintf(stderr, "%s: Error writing stdout\n", progname); bu_exit(-1, NULL); diff --git a/src/util/bwrect.c b/src/util/bwrect.c index 1bd794f4bb6..bb6b4afcf5f 100644 --- a/src/util/bwrect.c +++ b/src/util/bwrect.c @@ -1,7 +1,7 @@ /* B W R E C T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwrot.c b/src/util/bwrot.c index d72885b25fb..d1b4d6fdea8 100644 --- a/src/util/bwrot.c +++ b/src/util/bwrot.c @@ -1,7 +1,7 @@ /* B W R O T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwscale.c b/src/util/bwscale.c index ba354f6e839..d407d4a4458 100644 --- a/src/util/bwscale.c +++ b/src/util/bwscale.c @@ -1,7 +1,7 @@ /* B W S C A L E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwshrink.c b/src/util/bwshrink.c index 33de2efe8cb..bd0aaecd628 100644 --- a/src/util/bwshrink.c +++ b/src/util/bwshrink.c @@ -1,7 +1,7 @@ /* B W S H R I N K . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwstat.c b/src/util/bwstat.c index e0c5d2b9c61..1025750fa65 100644 --- a/src/util/bwstat.c +++ b/src/util/bwstat.c @@ -1,7 +1,7 @@ /* B W S T A T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/bwthresh.c b/src/util/bwthresh.c index 3e2093a5ab5..7283fda9282 100644 --- a/src/util/bwthresh.c +++ b/src/util/bwthresh.c @@ -1,7 +1,7 @@ /* B W T H R E S H . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/cv.c b/src/util/cv.c index 72f9540144b..eca83cc1823 100644 --- a/src/util/cv.c +++ b/src/util/cv.c @@ -1,7 +1,7 @@ /* C V . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/decimate.c b/src/util/decimate.c index 7245a881a52..c1344f0048e 100644 --- a/src/util/decimate.c +++ b/src/util/decimate.c @@ -1,7 +1,7 @@ /* D E C I M A T E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/double-asc.c b/src/util/double-asc.c index fc38588a2bc..67e6440e9bb 100644 --- a/src/util/double-asc.c +++ b/src/util/double-asc.c @@ -1,7 +1,7 @@ /* D O U B L E - A S C . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/dpix-pix.c b/src/util/dpix-pix.c index d3f6d882a18..fdafc16802d 100644 --- a/src/util/dpix-pix.c +++ b/src/util/dpix-pix.c @@ -1,7 +1,7 @@ /* D P I X - P I X . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/gencolor.c b/src/util/gencolor.c index d5dacb17c9f..eb199fbcc47 100644 --- a/src/util/gencolor.c +++ b/src/util/gencolor.c @@ -1,7 +1,7 @@ /* G E N C O L O R . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/halftone.c b/src/util/halftone.c index e7ee0f986fa..b7149e9bb9e 100644 --- a/src/util/halftone.c +++ b/src/util/halftone.c @@ -1,7 +1,7 @@ /* H A L F T O N E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/util/icv.cpp b/src/util/icv.cpp index cdad24b39e3..105b5a4c82f 100644 --- a/src/util/icv.cpp +++ b/src/util/icv.cpp @@ -1,7 +1,7 @@ /* I C V . C P P * BRL-CAD * - * Copyright (c) 2015-2020 United States Government as represented by + * Copyright (c) 2015-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/util/imgdims.c b/src/util/imgdims.c index 612b72cf744..ae72e2fa422 100644 --- a/src/util/imgdims.c +++ b/src/util/imgdims.c @@ -1,7 +1,7 @@ /* I M G D I M S . C * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/loop.c b/src/util/loop.c index f9e93778137..749fd9ed5a0 100644 --- a/src/util/loop.c +++ b/src/util/loop.c @@ -1,7 +1,7 @@ /* L O O P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/lowp.c b/src/util/lowp.c index e1efcbac79a..5c014f242f4 100644 --- a/src/util/lowp.c +++ b/src/util/lowp.c @@ -1,7 +1,7 @@ /* L O W P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/mac-pix.c b/src/util/mac-pix.c index 4b8e9204d39..14c2a9148de 100644 --- a/src/util/mac-pix.c +++ b/src/util/mac-pix.c @@ -1,7 +1,7 @@ /* M A C - P I X . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/morphedit.tcl b/src/util/morphedit.tcl index 628e569deff..34fa31c7e8c 100755 --- a/src/util/morphedit.tcl +++ b/src/util/morphedit.tcl @@ -2,7 +2,7 @@ # M O R P H E D I T . T C L # BRL-CAD # -# Copyright (c) 2007-2020 United States Government as represented by +# Copyright (c) 2007-2021 United States Government as represented by # the U.S. Army Research Laboratory. # # This library is free software; you can redistribute it and/or @@ -37,7 +37,7 @@ # the next line restarts using bwish \ exec $BWISH "$0" "$@" -set brlcad_path [bu_brlcad_root bin] +set brlcad_path [bu_dir bin] set PIXFB [file join $brlcad_path pix-fb] set PIXMORPH [file join $brlcad_path pixmorph] diff --git a/src/util/pc_test.c b/src/util/pc_test.c index af894c0c261..28e2f6ece6e 100644 --- a/src/util/pc_test.c +++ b/src/util/pc_test.c @@ -1,7 +1,7 @@ /* P C _ T E S T . C * BRL-CAD * - * Copyright (c) 2008-2020 United States Government as represented by + * Copyright (c) 2008-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/util/pix-alias.c b/src/util/pix-alias.c index caadab797e5..07e1f1345be 100644 --- a/src/util/pix-alias.c +++ b/src/util/pix-alias.c @@ -1,7 +1,7 @@ /* P I X - A L I A S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pix-bw.c b/src/util/pix-bw.c index 510e8d51b77..588e93ecbd7 100644 --- a/src/util/pix-bw.c +++ b/src/util/pix-bw.c @@ -1,7 +1,7 @@ /* P I X - B W . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pix-png.c b/src/util/pix-png.c index caf9b8dcc4c..1b530a41960 100644 --- a/src/util/pix-png.c +++ b/src/util/pix-png.c @@ -1,7 +1,7 @@ /* P I X - P N G . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pix-ppm.c b/src/util/pix-ppm.c index 8c262a8a18e..a7cd2f5f1fb 100644 --- a/src/util/pix-ppm.c +++ b/src/util/pix-ppm.c @@ -1,7 +1,7 @@ /* P I X - P P M . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pix-ps.c b/src/util/pix-ps.c index 5510b98931c..68b29836652 100644 --- a/src/util/pix-ps.c +++ b/src/util/pix-ps.c @@ -1,7 +1,7 @@ /* P I X - P S . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pix-spm.c b/src/util/pix-spm.c index c9fde0f648a..cc39d787998 100644 --- a/src/util/pix-spm.c +++ b/src/util/pix-spm.c @@ -1,7 +1,7 @@ /* P I X - S P M . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pix-sun.c b/src/util/pix-sun.c index 7dfd31ab690..b6d43d564f1 100644 --- a/src/util/pix-sun.c +++ b/src/util/pix-sun.c @@ -1,7 +1,7 @@ /* P I X - S U N . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pix3filter.c b/src/util/pix3filter.c index 0ec7d97d838..6990ecdf925 100644 --- a/src/util/pix3filter.c +++ b/src/util/pix3filter.c @@ -1,7 +1,7 @@ /* P I X 3 F I L T E R . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixbackgnd.c b/src/util/pixbackgnd.c index b148ed3d6b9..1accca37e3b 100644 --- a/src/util/pixbackgnd.c +++ b/src/util/pixbackgnd.c @@ -1,7 +1,7 @@ /* P I X B A C K G N D . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixbgstrip.c b/src/util/pixbgstrip.c index b7de51156bb..94ab9edbbe1 100644 --- a/src/util/pixbgstrip.c +++ b/src/util/pixbgstrip.c @@ -1,7 +1,7 @@ /* P I X B G S T R I P . C * BRL-CAD * - * Copyright (c) 1991-2020 United States Government as represented by + * Copyright (c) 1991-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixblend.c b/src/util/pixblend.c index f6ff8d3780a..19bac984366 100644 --- a/src/util/pixblend.c +++ b/src/util/pixblend.c @@ -1,7 +1,7 @@ /* P I X B L E N D . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixborder.c b/src/util/pixborder.c index b0a5dbc2bf0..51c9104da2d 100644 --- a/src/util/pixborder.c +++ b/src/util/pixborder.c @@ -1,7 +1,7 @@ /* P I X B O R D E R . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixbustup.c b/src/util/pixbustup.c index 820d02a991c..a7d93793e12 100644 --- a/src/util/pixbustup.c +++ b/src/util/pixbustup.c @@ -1,7 +1,7 @@ /* P I X B U S T U P . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixclump.c b/src/util/pixclump.c index 9a1939d52d2..46d8ce953df 100644 --- a/src/util/pixclump.c +++ b/src/util/pixclump.c @@ -1,7 +1,7 @@ /* P I X C L U M P . C * BRL-CAD * - * Copyright (c) 1997-2020 United States Government as represented by + * Copyright (c) 1997-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixcolors.c b/src/util/pixcolors.c index 28bea138df2..1fb8a49251a 100644 --- a/src/util/pixcolors.c +++ b/src/util/pixcolors.c @@ -1,7 +1,7 @@ /* P I X C O L O R S . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixcount.cpp b/src/util/pixcount.cpp index ca30e05fb00..4ad220d0c3b 100644 --- a/src/util/pixcount.cpp +++ b/src/util/pixcount.cpp @@ -1,7 +1,7 @@ /* P I X C O U N T . C P P * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixcrop.c b/src/util/pixcrop.c index 2ba5b1ac51d..63afbc9ca2a 100644 --- a/src/util/pixcrop.c +++ b/src/util/pixcrop.c @@ -1,7 +1,7 @@ /* B W C R O P . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixdiff.c b/src/util/pixdiff.c index 11743498da8..3494cacb07b 100644 --- a/src/util/pixdiff.c +++ b/src/util/pixdiff.c @@ -1,7 +1,7 @@ /* P I X D I F F . C * BRL-CAD * - * Copyright (c) 1985-2020 United States Government as represented by + * Copyright (c) 1985-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -43,29 +43,40 @@ #include "bu/exit.h" -#define RGB_DIFF(c1, c2) \ - do { \ - if (c1 != c2) { \ - if ((i = c1 - c2) < 0) i = -i; \ - if (i > 1) { \ - putc(0xFF, stdout); \ - offmany++; \ - } else { \ - putc(0xC0, stdout); \ - off1++; \ - } \ - } else { \ - putc(0, stdout); \ - matching++; \ - } \ - } while (0) +static void +rgb_diff(int c1, int c2, FILE *output, size_t *offmany, size_t *off1, size_t *matching) +{ + int i; + + if (!output) + output = stdout; + if (!offmany || !off1 || !matching) + return; + + if (c1 != c2) { + i = c1 - c2; + if (i < 0) + i = -i; + if (i > 1) { + putc(0xFF, output); + (*offmany)++; + } else { + putc(0xC0, output); + (*off1)++; + } + } else { + putc(0, output); + (*matching)++; + } +} + int main(int argc, char *argv[]) { - long matching = 0; - long off1 = 0; - long offmany = 0; + size_t matching = 0; + size_t off1 = 0; + size_t offmany = 0; FILE *f1, *f2; struct stat sf1, sf2; @@ -112,10 +123,9 @@ main(int argc, char *argv[]) if (feof(f1) || feof(f2)) break; if (r1 != r2 || g1 != g2 || b1 != b2) { - int i; - RGB_DIFF(r1, r2); - RGB_DIFF(g1, g2); - RGB_DIFF(b1, b2); + rgb_diff(r1, r2, stdout, &offmany, &off1, &matching); + rgb_diff(g1, g2, stdout, &offmany, &off1, &matching); + rgb_diff(b1, b2, stdout, &offmany, &off1, &matching); } else { /* Common case: equal. Give B&W NTSC average of 0.35 R + * 0.55 G + 0.10 B, calculated in fixed-point, output at @@ -123,7 +133,8 @@ main(int argc, char *argv[]) */ long i; i = ((22937 * r1 + 36044 * g1 + 6553 * b1)>>17); - if (i < 0) i = 0; + if (i < 0) + i = 0; i /= 2; putc(i, stdout); putc(i, stdout); @@ -132,7 +143,7 @@ main(int argc, char *argv[]) } } fprintf(stderr, - "pixdiff bytes: %7ld matching, %7ld off by 1, %7ld off by many\n", + "pixdiff bytes: %7zu matching, %7zu off by 1, %7zu off by many\n", matching, off1, offmany); return 0; diff --git a/src/util/pixelswap.c b/src/util/pixelswap.c index 258787f4631..61537504ca4 100644 --- a/src/util/pixelswap.c +++ b/src/util/pixelswap.c @@ -1,7 +1,7 @@ /* P I X E L S W A P . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixembed.c b/src/util/pixembed.c index 4bb97ff5d07..2858db034d3 100644 --- a/src/util/pixembed.c +++ b/src/util/pixembed.c @@ -1,7 +1,7 @@ /* P I X E M B E D . C * BRL-CAD * - * Copyright (c) 1992-2020 United States Government as represented by + * Copyright (c) 1992-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixfade.c b/src/util/pixfade.c index e6885a4ffbf..002b611c33e 100644 --- a/src/util/pixfade.c +++ b/src/util/pixfade.c @@ -1,7 +1,7 @@ /* P I X F A D E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixfilter.c b/src/util/pixfilter.c index acf62d2491a..7b672f31e88 100644 --- a/src/util/pixfilter.c +++ b/src/util/pixfilter.c @@ -1,7 +1,7 @@ /* P I X F I L T E R . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixhalve.c b/src/util/pixhalve.c index 1472d3c8795..f956ae659a4 100644 --- a/src/util/pixhalve.c +++ b/src/util/pixhalve.c @@ -1,7 +1,7 @@ /* P I X H A L V E . C * BRL-CAD * - * Copyright (c) 1995-2020 United States Government as represented by + * Copyright (c) 1995-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixhist.c b/src/util/pixhist.c index 1a0031bef21..867de2ecd27 100644 --- a/src/util/pixhist.c +++ b/src/util/pixhist.c @@ -1,7 +1,7 @@ /* P I X H I S T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixhist3d-plot3.c b/src/util/pixhist3d-plot3.c index 3b19a0945b2..21e6742666c 100644 --- a/src/util/pixhist3d-plot3.c +++ b/src/util/pixhist3d-plot3.c @@ -1,7 +1,7 @@ /* P I X H I S T 3 D - P L O T 3 . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixhist3d.c b/src/util/pixhist3d.c index 4eca8324113..5805829ca34 100644 --- a/src/util/pixhist3d.c +++ b/src/util/pixhist3d.c @@ -1,7 +1,7 @@ /* P I X H I S T 3 D . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixinterp2x.c b/src/util/pixinterp2x.c index 1a2cbc3d3bd..101fd94d6cf 100644 --- a/src/util/pixinterp2x.c +++ b/src/util/pixinterp2x.c @@ -1,7 +1,7 @@ /* P I X I N T E R P 2 X . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixmatte.c b/src/util/pixmatte.c index 908df52aa12..b058b097876 100644 --- a/src/util/pixmatte.c +++ b/src/util/pixmatte.c @@ -1,7 +1,7 @@ /* P I X M A T T E . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixmerge.c b/src/util/pixmerge.c index 5f62f7e5706..86377f859bb 100644 --- a/src/util/pixmerge.c +++ b/src/util/pixmerge.c @@ -1,7 +1,7 @@ /* P I X M E R G E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixmorph.c b/src/util/pixmorph.c index 74530fec88c..bd03fbbdb55 100644 --- a/src/util/pixmorph.c +++ b/src/util/pixmorph.c @@ -1,7 +1,7 @@ /* P I X M O R P H . C * BRL-CAD * - * Copyright (c) 1996-2020 United States Government as represented by + * Copyright (c) 1996-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixrect.c b/src/util/pixrect.c index e0d02284be1..24d3de74da9 100644 --- a/src/util/pixrect.c +++ b/src/util/pixrect.c @@ -1,7 +1,7 @@ /* P I X R E C T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixrot.c b/src/util/pixrot.c index 4a7e741e758..4935f3ea58c 100644 --- a/src/util/pixrot.c +++ b/src/util/pixrot.c @@ -1,7 +1,7 @@ /* P I X R O T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixsaturate.c b/src/util/pixsaturate.c index ef43f02d15a..32aa9886880 100644 --- a/src/util/pixsaturate.c +++ b/src/util/pixsaturate.c @@ -1,7 +1,7 @@ /* P I X S A T U R A T E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixscale.c b/src/util/pixscale.c index 90847e019c3..db8cb7d18e2 100644 --- a/src/util/pixscale.c +++ b/src/util/pixscale.c @@ -1,7 +1,7 @@ /* P I X S C A L E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -88,7 +88,10 @@ fill_buffer(int y) size_t ret; buf_start = y - buflines/2; - if (buf_start < 0) buf_start = 0; + if (buf_start < 0) + buf_start = 0; + + /* bu_log("filepos is %zu, buf_start is %zu, scanlen is %zu\n", (size_t)file_pos, (size_t)buf_start, (size_t)scanlen); */ if (file_pos != buf_start * scanlen) { if (bu_fseek(buffp, buf_start * scanlen, 0) < 0) { @@ -276,7 +279,7 @@ scale(FILE *ofp, int ix, int iy, int ox, int oy) /* Make sure we have this row in the buffer */ bufy = l - buf_start; - if (bufy < 0 || bufy >= buflines) { + if (bufy < 0 || bufy >= buflines-1) { fill_buffer(l); bufy = l - buf_start; } diff --git a/src/util/pixshrink.c b/src/util/pixshrink.c index 81b4c99c46e..d30758f2c9f 100644 --- a/src/util/pixshrink.c +++ b/src/util/pixshrink.c @@ -1,7 +1,7 @@ /* P I X S H R I N K . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixstat.c b/src/util/pixstat.c index 8ca19230297..387b3fe3961 100644 --- a/src/util/pixstat.c +++ b/src/util/pixstat.c @@ -1,7 +1,7 @@ /* P I X S T A T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixsubst.c b/src/util/pixsubst.c index d599f971b74..a48a59e74fe 100644 --- a/src/util/pixsubst.c +++ b/src/util/pixsubst.c @@ -1,7 +1,7 @@ /* P I X S U B S T . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixtile.c b/src/util/pixtile.c index e9da983933f..b7e81d5edf3 100644 --- a/src/util/pixtile.c +++ b/src/util/pixtile.c @@ -1,7 +1,7 @@ /* P I X T I L E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/pixuntile.c b/src/util/pixuntile.c index a0431dbdb0b..754f59867ff 100644 --- a/src/util/pixuntile.c +++ b/src/util/pixuntile.c @@ -1,7 +1,7 @@ /* P I X U N T I L E . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/plot3-asc.c b/src/util/plot3-asc.c index c52c14c0a1c..86fd9d3fb8c 100644 --- a/src/util/plot3-asc.c +++ b/src/util/plot3-asc.c @@ -1,7 +1,7 @@ /* P L O T 3 - A S C . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/plot3-dm.c b/src/util/plot3-dm.c index 3351c499895..3649bcfa9c4 100644 --- a/src/util/plot3-dm.c +++ b/src/util/plot3-dm.c @@ -1,7 +1,7 @@ /* P L O T 3 - D M . C * BRL-CAD * - * Copyright (c) 1999-2020 United States Government as represented by + * Copyright (c) 1999-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or @@ -1116,7 +1116,7 @@ appInit(Tcl_Interp *_interp) bu_exit (1, "appInit: Failed to get main window.\n"); /* Locate the BRL-CAD-specific Tcl scripts */ - filename = bu_brlcad_root("share/tclscripts", 0); + filename = bu_dir(NULL, 0, BU_DIR_DATA, "tclscripts", NULL); bu_vls_printf(&str2, "%s/plot3-dm", filename); bu_vls_printf(&str, "wm withdraw .; set auto_path [linsert $auto_path 0 %s %s]", diff --git a/src/util/plot3-plot3.c b/src/util/plot3-plot3.c index 7b11bd85678..fca89dd4532 100644 --- a/src/util/plot3-plot3.c +++ b/src/util/plot3-plot3.c @@ -1,7 +1,7 @@ /* P L O T 3 - P L O T 3 . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/plot3-ps.c b/src/util/plot3-ps.c index fdebf28d1be..a0161c8e088 100644 --- a/src/util/plot3-ps.c +++ b/src/util/plot3-ps.c @@ -1,7 +1,7 @@ /* P L O T 3 - P S . C * BRL-CAD * - * Copyright (c) 1989-2020 United States Government as represented by + * Copyright (c) 1989-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/plot3color.c b/src/util/plot3color.c index 233950a8b0c..1c184c90c52 100644 --- a/src/util/plot3color.c +++ b/src/util/plot3color.c @@ -1,7 +1,7 @@ /* P L O T 3 C O L O R . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/plot3getframe.c b/src/util/plot3getframe.c index 3183d4e1711..1d024575a74 100644 --- a/src/util/plot3getframe.c +++ b/src/util/plot3getframe.c @@ -1,7 +1,7 @@ /* P L O T 3 G E T F R A M E . C * BRL-CAD * - * Copyright (c) 1988-2020 United States Government as represented by + * Copyright (c) 1988-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/plot3line2.c b/src/util/plot3line2.c index 95776364c3f..6c0cef66049 100644 --- a/src/util/plot3line2.c +++ b/src/util/plot3line2.c @@ -1,7 +1,7 @@ /* P L O T 3 L I N E 2 . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/plot3rot.c b/src/util/plot3rot.c index 484245dd7b5..06f0b86ec22 100644 --- a/src/util/plot3rot.c +++ b/src/util/plot3rot.c @@ -1,7 +1,7 @@ /* P L O T 3 R O T . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/plot3stat.c b/src/util/plot3stat.c index 365ac6e16c4..a79ca683b54 100644 --- a/src/util/plot3stat.c +++ b/src/util/plot3stat.c @@ -1,7 +1,7 @@ /* P L O T 3 S T A T . C * BRL-CAD * - * Copyright (c) 1990-2020 United States Government as represented by + * Copyright (c) 1990-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/png-bw.c b/src/util/png-bw.c index 0df34a0faee..d36b85d439d 100644 --- a/src/util/png-bw.c +++ b/src/util/png-bw.c @@ -1,7 +1,7 @@ /* P N G - B W . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/png-pix.c b/src/util/png-pix.c index 6a1792ce93f..dd3f2faa662 100644 --- a/src/util/png-pix.c +++ b/src/util/png-pix.c @@ -1,7 +1,7 @@ /* P N G - P I X . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/random.c b/src/util/random.c index ffd52de23d6..64b4c4cca2c 100644 --- a/src/util/random.c +++ b/src/util/random.c @@ -1,7 +1,7 @@ /* R A N D O M . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/roots_example.c b/src/util/roots_example.c index 1b8c5f20eb5..17ca1e9d6c7 100644 --- a/src/util/roots_example.c +++ b/src/util/roots_example.c @@ -1,7 +1,7 @@ /* R O O T S _ E X A M P L E . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This library is free software; you can redistribute it and/or diff --git a/src/util/sun-pix.c b/src/util/sun-pix.c index b8ed6da2654..b9ac9e17805 100644 --- a/src/util/sun-pix.c +++ b/src/util/sun-pix.c @@ -1,7 +1,7 @@ /* S U N - P I X . C * BRL-CAD * - * Copyright (c) 1986-2020 United States Government as represented by + * Copyright (c) 1986-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/terrain.c b/src/util/terrain.c index 58972cd8f37..9f3e98dd3bd 100644 --- a/src/util/terrain.c +++ b/src/util/terrain.c @@ -1,7 +1,7 @@ /* T E R R A I N . C * BRL-CAD * - * Copyright (c) 2004-2020 United States Government as represented by + * Copyright (c) 2004-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or diff --git a/src/util/wavelet.c b/src/util/wavelet.c index e908420cd5c..4838c14a571 100644 --- a/src/util/wavelet.c +++ b/src/util/wavelet.c @@ -1,7 +1,7 @@ /* W A V E L E T . C * BRL-CAD * - * Copyright (c) 1998-2020 United States Government as represented by + * Copyright (c) 1998-2021 United States Government as represented by * the U.S. Army Research Laboratory. * * This program is free software; you can redistribute it and/or

JOLI1 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%0D_n(}@wA~)BOj{nu*&r!ShGr%0F26{i9(Lslm^bg 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̽lSxN>+uhOlC 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